package BHL7.structure;

/*Generated by MPS */

import jetbrains.mps.smodel.runtime.BaseStructureAspectDescriptor;
import jetbrains.mps.smodel.runtime.ConceptDescriptor;
import java.util.Collection;
import java.util.Arrays;
import org.jetbrains.annotations.Nullable;
import jetbrains.mps.smodel.adapter.ids.SConceptId;
import org.jetbrains.mps.openapi.language.SAbstractConcept;
import jetbrains.mps.smodel.runtime.impl.ConceptDescriptorBuilder2;

public class StructureAspectDescriptor extends BaseStructureAspectDescriptor {
  /*package*/ final ConceptDescriptor myConceptA = createDescriptorForA();
  /*package*/ final ConceptDescriptor myConceptB = createDescriptorForB();
  /*package*/ final ConceptDescriptor myConceptC = createDescriptorForC();
  /*package*/ final ConceptDescriptor myConceptD = createDescriptorForD();
  /*package*/ final ConceptDescriptor myConceptE = createDescriptorForE();
  /*package*/ final ConceptDescriptor myConceptF = createDescriptorForF();
  /*package*/ final ConceptDescriptor myConceptG = createDescriptorForG();
  /*package*/ final ConceptDescriptor myConceptH = createDescriptorForH();
  /*package*/ final ConceptDescriptor myConceptI1 = createDescriptorForI1();
  /*package*/ final ConceptDescriptor myConceptI2 = createDescriptorForI2();
  /*package*/ final ConceptDescriptor myConceptI3 = createDescriptorForI3();
  /*package*/ final ConceptDescriptor myConceptK = createDescriptorForK();
  /*package*/ final ConceptDescriptor myConceptL = createDescriptorForL();
  /*package*/ final ConceptDescriptor myConceptM = createDescriptorForM();
  private final LanguageConceptSwitch myIndexSwitch;

  public StructureAspectDescriptor() {
    myIndexSwitch = new LanguageConceptSwitch();
  }


  @Override
  public void reportDependencies(jetbrains.mps.smodel.runtime.StructureAspectDescriptor.Dependencies deps) {
    deps.extendedLanguage(0xceab519525ea4f22L, 0x9b92103b95ca8c0cL, "jetbrains.mps.lang.core");
  }

  @Override
  public Collection<ConceptDescriptor> getDescriptors() {
    return Arrays.asList(myConceptA, myConceptB, myConceptC, myConceptD, myConceptE, myConceptF, myConceptG, myConceptH, myConceptI1, myConceptI2, myConceptI3, myConceptK, myConceptL, myConceptM);
  }

  @Override
  @Nullable
  public ConceptDescriptor getDescriptor(SConceptId id) {
    switch (myIndexSwitch.index(id)) {
      case LanguageConceptSwitch.A:
        return myConceptA;
      case LanguageConceptSwitch.B:
        return myConceptB;
      case LanguageConceptSwitch.C:
        return myConceptC;
      case LanguageConceptSwitch.D:
        return myConceptD;
      case LanguageConceptSwitch.E:
        return myConceptE;
      case LanguageConceptSwitch.F:
        return myConceptF;
      case LanguageConceptSwitch.G:
        return myConceptG;
      case LanguageConceptSwitch.H:
        return myConceptH;
      case LanguageConceptSwitch.I1:
        return myConceptI1;
      case LanguageConceptSwitch.I2:
        return myConceptI2;
      case LanguageConceptSwitch.I3:
        return myConceptI3;
      case LanguageConceptSwitch.K:
        return myConceptK;
      case LanguageConceptSwitch.L:
        return myConceptL;
      case LanguageConceptSwitch.M:
        return myConceptM;
      default:
        return null;
    }
  }


  /*package*/ int internalIndex(SAbstractConcept c) {
    return myIndexSwitch.index(c);
  }

  private static ConceptDescriptor createDescriptorForA() {
    ConceptDescriptorBuilder2 b = new ConceptDescriptorBuilder2("BHL7", "A", 0x4239359f64574d2aL, 0xb1e014d3f948db39L, 0x559729dec0466d3cL);
    b.class_(false, false, false);
    b.origin("r:0766eaf2-1894-47af-9a97-3484d14d48e4(BHL7.structure)/6167444251392503100");
    b.version(3);
    return b.create();
  }
  private static ConceptDescriptor createDescriptorForB() {
    ConceptDescriptorBuilder2 b = new ConceptDescriptorBuilder2("BHL7", "B", 0x4239359f64574d2aL, 0xb1e014d3f948db39L, 0x559729dec0466d3dL);
    b.class_(false, false, false);
    // extends: BHL7.structure.A
    b.super_(0x4239359f64574d2aL, 0xb1e014d3f948db39L, 0x559729dec0466d3cL);
    b.origin("r:0766eaf2-1894-47af-9a97-3484d14d48e4(BHL7.structure)/6167444251392503101");
    b.version(3);
    return b.create();
  }
  private static ConceptDescriptor createDescriptorForC() {
    ConceptDescriptorBuilder2 b = new ConceptDescriptorBuilder2("BHL7", "C", 0x4239359f64574d2aL, 0xb1e014d3f948db39L, 0x4dcf589c68321a72L);
    b.class_(false, false, false);
    // extends: BHL7.structure.B
    b.super_(0x4239359f64574d2aL, 0xb1e014d3f948db39L, 0x559729dec0466d3dL);
    b.origin("r:0766eaf2-1894-47af-9a97-3484d14d48e4(BHL7.structure)/5606797489885813362");
    b.version(3);
    return b.create();
  }
  private static ConceptDescriptor createDescriptorForD() {
    ConceptDescriptorBuilder2 b = new ConceptDescriptorBuilder2("BHL7", "D", 0x4239359f64574d2aL, 0xb1e014d3f948db39L, 0x549fa4aa12af52b3L);
    b.class_(false, false, false);
    b.parent(0x4239359f64574d2aL, 0xb1e014d3f948db39L, 0x549fa4aa12af5261L);
    b.parent(0x4239359f64574d2aL, 0xb1e014d3f948db39L, 0x549fa4aa12af528cL);
    b.origin("r:0766eaf2-1894-47af-9a97-3484d14d48e4(BHL7.structure)/6097773470847816371");
    b.version(3);
    return b.create();
  }
  private static ConceptDescriptor createDescriptorForE() {
    ConceptDescriptorBuilder2 b = new ConceptDescriptorBuilder2("BHL7", "E", 0x4239359f64574d2aL, 0xb1e014d3f948db39L, 0x10b2a2acd7137351L);
    b.class_(false, false, false);
    b.parent(0x4239359f64574d2aL, 0xb1e014d3f948db39L, 0x10b2a2acd713731eL);
    b.origin("r:0766eaf2-1894-47af-9a97-3484d14d48e4(BHL7.structure)/1203202913687794513");
    b.version(3);
    return b.create();
  }
  private static ConceptDescriptor createDescriptorForF() {
    ConceptDescriptorBuilder2 b = new ConceptDescriptorBuilder2("BHL7", "F", 0x4239359f64574d2aL, 0xb1e014d3f948db39L, 0x75783c3114f90130L);
    b.class_(false, false, false);
    b.parent(0x4239359f64574d2aL, 0xb1e014d3f948db39L, 0x549fa4aa12af5261L);
    b.origin("r:0766eaf2-1894-47af-9a97-3484d14d48e4(BHL7.structure)/8464581681145774384");
    b.version(3);
    return b.create();
  }
  private static ConceptDescriptor createDescriptorForG() {
    ConceptDescriptorBuilder2 b = new ConceptDescriptorBuilder2("BHL7", "G", 0x4239359f64574d2aL, 0xb1e014d3f948db39L, 0x75783c3114f90190L);
    b.class_(false, false, false);
    // extends: BHL7.structure.F
    b.super_(0x4239359f64574d2aL, 0xb1e014d3f948db39L, 0x75783c3114f90130L);
    b.parent(0x4239359f64574d2aL, 0xb1e014d3f948db39L, 0x549fa4aa12af528cL);
    b.origin("r:0766eaf2-1894-47af-9a97-3484d14d48e4(BHL7.structure)/8464581681145774480");
    b.version(3);
    return b.create();
  }
  private static ConceptDescriptor createDescriptorForH() {
    ConceptDescriptorBuilder2 b = new ConceptDescriptorBuilder2("BHL7", "H", 0x4239359f64574d2aL, 0xb1e014d3f948db39L, 0x3a674fdfabfcc7faL);
    b.class_(false, false, false);
    b.origin("r:0766eaf2-1894-47af-9a97-3484d14d48e4(BHL7.structure)/4208420198882789370");
    b.version(3);
    return b.create();
  }
  private static ConceptDescriptor createDescriptorForI1() {
    ConceptDescriptorBuilder2 b = new ConceptDescriptorBuilder2("BHL7", "I1", 0x4239359f64574d2aL, 0xb1e014d3f948db39L, 0x549fa4aa12af5261L);
    b.interface_();
    b.origin("r:0766eaf2-1894-47af-9a97-3484d14d48e4(BHL7.structure)/6097773470847816289");
    b.version(3);
    return b.create();
  }
  private static ConceptDescriptor createDescriptorForI2() {
    ConceptDescriptorBuilder2 b = new ConceptDescriptorBuilder2("BHL7", "I2", 0x4239359f64574d2aL, 0xb1e014d3f948db39L, 0x549fa4aa12af528cL);
    b.interface_();
    b.origin("r:0766eaf2-1894-47af-9a97-3484d14d48e4(BHL7.structure)/6097773470847816332");
    b.version(3);
    return b.create();
  }
  private static ConceptDescriptor createDescriptorForI3() {
    ConceptDescriptorBuilder2 b = new ConceptDescriptorBuilder2("BHL7", "I3", 0x4239359f64574d2aL, 0xb1e014d3f948db39L, 0x10b2a2acd713731eL);
    b.interface_();
    b.origin("r:0766eaf2-1894-47af-9a97-3484d14d48e4(BHL7.structure)/1203202913687794462");
    b.version(3);
    return b.create();
  }
  private static ConceptDescriptor createDescriptorForK() {
    ConceptDescriptorBuilder2 b = new ConceptDescriptorBuilder2("BHL7", "K", 0x4239359f64574d2aL, 0xb1e014d3f948db39L, 0x66c9579bde227bd6L);
    b.class_(false, false, false);
    b.origin("r:0766eaf2-1894-47af-9a97-3484d14d48e4(BHL7.structure)/7406547389145840598");
    b.version(3);
    return b.create();
  }
  private static ConceptDescriptor createDescriptorForL() {
    ConceptDescriptorBuilder2 b = new ConceptDescriptorBuilder2("BHL7", "L", 0x4239359f64574d2aL, 0xb1e014d3f948db39L, 0x65e1cc96389f813cL);
    b.class_(false, true, false);
    b.origin("r:0766eaf2-1894-47af-9a97-3484d14d48e4(BHL7.structure)/7341373813157757244");
    b.version(3);
    return b.create();
  }
  private static ConceptDescriptor createDescriptorForM() {
    ConceptDescriptorBuilder2 b = new ConceptDescriptorBuilder2("BHL7", "M", 0x4239359f64574d2aL, 0xb1e014d3f948db39L, 0x65e1cc96389f81beL);
    b.class_(false, false, false);
    b.origin("r:0766eaf2-1894-47af-9a97-3484d14d48e4(BHL7.structure)/7341373813157757374");
    b.version(3);
    b.aggregate("myL", 0x65e1cc96389f81c7L).target(0x4239359f64574d2aL, 0xb1e014d3f948db39L, 0x65e1cc96389f813cL).optional(true).ordered(true).multiple(false).origin("7341373813157757383").done();
    return b.create();
  }
}
