package org.lemsml.jlems.io.reader; import java.util.ArrayList; import org.lemsml.jlems.core.type.About; import org.lemsml.jlems.core.type.Assertion; import org.lemsml.jlems.core.type.Attachments; import org.lemsml.jlems.core.type.Child; import org.lemsml.jlems.core.type.Children; import org.lemsml.jlems.core.type.Collection; import org.lemsml.jlems.core.type.Component; import org.lemsml.jlems.core.type.ComponentReference; import org.lemsml.jlems.core.type.ComponentRequirement; import org.lemsml.jlems.core.type.ComponentType; import org.lemsml.jlems.core.type.ComponentTypeReference; import org.lemsml.jlems.core.type.Constant; import org.lemsml.jlems.core.type.DerivedParameter; import org.lemsml.jlems.core.type.Dimension; import org.lemsml.jlems.core.type.EventPort; import org.lemsml.jlems.core.type.Exposure; import org.lemsml.jlems.core.type.Fixed; import org.lemsml.jlems.core.type.IndexParameter; import org.lemsml.jlems.core.type.Insertion; import org.lemsml.jlems.core.type.InstanceRequirement; import org.lemsml.jlems.core.type.IntegerParameter; import org.lemsml.jlems.core.type.Lems; import org.lemsml.jlems.core.type.Link; import org.lemsml.jlems.core.type.Location; import org.lemsml.jlems.core.type.Meta; import org.lemsml.jlems.core.type.PairCollection; import org.lemsml.jlems.core.type.Parameter; import org.lemsml.jlems.core.type.Path; import org.lemsml.jlems.core.type.PathParameter; import org.lemsml.jlems.core.type.Property; import org.lemsml.jlems.core.type.Requirement; import org.lemsml.jlems.core.type.Target; import org.lemsml.jlems.core.type.Text; import org.lemsml.jlems.core.type.Unit; import org.lemsml.jlems.core.type.dynamics.Case; import org.lemsml.jlems.core.type.dynamics.ConditionalDerivedVariable; import org.lemsml.jlems.core.type.dynamics.DerivedPunctateField; import org.lemsml.jlems.core.type.dynamics.DerivedScalarField; import org.lemsml.jlems.core.type.dynamics.DerivedVariable; import org.lemsml.jlems.core.type.dynamics.Dynamics; import org.lemsml.jlems.core.type.dynamics.Equilibrium; import org.lemsml.jlems.core.type.dynamics.EventConnection; import org.lemsml.jlems.core.type.dynamics.EventOut; import org.lemsml.jlems.core.type.dynamics.KineticScheme; import org.lemsml.jlems.core.type.dynamics.OnCondition; import org.lemsml.jlems.core.type.dynamics.OnEntry; import org.lemsml.jlems.core.type.dynamics.OnEvent; import org.lemsml.jlems.core.type.dynamics.OnStart; import org.lemsml.jlems.core.type.dynamics.Regime; import org.lemsml.jlems.core.type.dynamics.StateAssignment; import org.lemsml.jlems.core.type.dynamics.StateScalarField; import org.lemsml.jlems.core.type.dynamics.StateVariable; import org.lemsml.jlems.core.type.dynamics.Super; import org.lemsml.jlems.core.type.dynamics.TimeDerivative; import org.lemsml.jlems.core.type.dynamics.Transition; import org.lemsml.jlems.core.type.geometry.Frustum; import org.lemsml.jlems.core.type.geometry.Geometry; import org.lemsml.jlems.core.type.geometry.ScalarField; import org.lemsml.jlems.core.type.geometry.Skeleton; import org.lemsml.jlems.core.type.geometry.Solid; import org.lemsml.jlems.core.type.procedure.Equilibrate; import org.lemsml.jlems.core.type.procedure.ForEachComponent; import org.lemsml.jlems.core.type.procedure.Print; import org.lemsml.jlems.core.type.procedure.Procedure; import org.lemsml.jlems.core.type.simulation.DataDisplay; import org.lemsml.jlems.core.type.simulation.DataWriter; import org.lemsml.jlems.core.type.simulation.EventWriter; import org.lemsml.jlems.core.type.simulation.Record; import org.lemsml.jlems.core.type.simulation.EventRecord; import org.lemsml.jlems.core.type.simulation.Run; import org.lemsml.jlems.core.type.simulation.Simulation; import org.lemsml.jlems.core.type.structure.Apply; import org.lemsml.jlems.core.type.structure.Assign; import org.lemsml.jlems.core.type.structure.ChildInstance; import org.lemsml.jlems.core.type.structure.Choose; import org.lemsml.jlems.core.type.structure.CoInstantiate; import org.lemsml.jlems.core.type.structure.ForEach; import org.lemsml.jlems.core.type.structure.Gather; import org.lemsml.jlems.core.type.structure.GatherPairs; import org.lemsml.jlems.core.type.structure.If; import org.lemsml.jlems.core.type.structure.IncludePair; import org.lemsml.jlems.core.type.structure.MultiInstantiate; import org.lemsml.jlems.core.type.structure.PairFilter; import org.lemsml.jlems.core.type.structure.PairsEventConnection; import org.lemsml.jlems.core.type.structure.Structure; import org.lemsml.jlems.core.type.structure.Tunnel; import org.lemsml.jlems.core.type.structure.With; public final class LemsClasses { public static LemsClasses instance; private final ArrayList<LemsClass> classList; public static LemsClasses getInstance() { synchronized(LemsClasses.class) { if (instance == null) { instance = new LemsClasses(); } } return instance; } private LemsClasses() { classList = new ArrayList<LemsClass>(); classList.addAll(getLemsClasses()); classList.addAll(getComponentTypeClasses()); classList.addAll(getDynamicsClasses()); classList.addAll(getStructureClasses()); classList.addAll(getSimulationClasses()); classList.addAll(getProcedureClasses()); classList.addAll(getGeometryClasses()); } public ArrayList<LemsClass> getClasses() { return classList; } private ArrayList<LemsClass> getLemsClasses() { ArrayList<LemsClass> ret = new ArrayList<LemsClass>(); String section = "root"; ret.add(new LemsClass(Lems.class, section)); ret.add(new LemsClass(Target.class, section)); ret.add(new LemsClass(Constant.class, section)); section = "unitsdimensions"; ret.add(new LemsClass(Dimension.class, section)); ret.add(new LemsClass(Unit.class, section)); ret.add(new LemsClass(Assertion.class, section)); ret.add(new LemsClass(Component.class, section)); return ret; } private ArrayList<LemsClass> getDynamicsClasses() { ArrayList<LemsClass> ret = new ArrayList<LemsClass>(); String section = "dynamics"; ret.add(new LemsClass(Dynamics.class, section)); ret.add(new LemsClass(StateVariable.class, section)); ret.add(new LemsClass(StateAssignment.class, section)); ret.add(new LemsClass(TimeDerivative.class, section)); ret.add(new LemsClass(DerivedVariable.class, section)); ret.add(new LemsClass(OnStart.class, section)); ret.add(new LemsClass(OnCondition.class, section)); ret.add(new LemsClass(OnEvent.class, section)); ret.add(new LemsClass(EventOut.class, section)); ret.add(new LemsClass(KineticScheme.class, section)); ret.add(new LemsClass(Regime.class, section)); ret.add(new LemsClass(OnEntry.class, section)); ret.add(new LemsClass(Transition.class, section)); ret.add(new LemsClass(Super.class, section)); ret.add(new LemsClass(ConditionalDerivedVariable.class, section)); ret.add(new LemsClass(Case.class, section)); ret.add(new LemsClass(Equilibrium.class, section)); ret.add(new LemsClass(StateScalarField.class, section)); ret.add(new LemsClass(DerivedScalarField.class, section)); ret.add(new LemsClass(DerivedPunctateField.class, section)); return ret; } private ArrayList<LemsClass> getStructureClasses() { ArrayList<LemsClass> ret = new ArrayList<LemsClass>(); String section = "structure"; ret.add(new LemsClass(Structure.class, section)); ret.add(new LemsClass(MultiInstantiate.class, section)); ret.add(new LemsClass(CoInstantiate.class, section)); ret.add(new LemsClass(Assign.class, section)); ret.add(new LemsClass(Choose.class, section)); ret.add(new LemsClass(ChildInstance.class, section)); ret.add(new LemsClass(ForEach.class, section)); ret.add(new LemsClass(EventConnection.class, section)); ret.add(new LemsClass(Tunnel.class, section)); ret.add(new LemsClass(PairsEventConnection.class, section)); ret.add(new LemsClass(PairFilter.class, section)); ret.add(new LemsClass(IncludePair.class, section)); ret.add(new LemsClass(With.class, section)); ret.add(new LemsClass(If.class, section)); ret.add(new LemsClass(Apply.class, section)); ret.add(new LemsClass(Gather.class, section)); ret.add(new LemsClass(GatherPairs.class, section)); return ret; } private ArrayList<LemsClass> getComponentTypeClasses() { ArrayList<LemsClass> ret = new ArrayList<LemsClass>(); String section = "componenttypes"; ret.add(new LemsClass(ComponentType.class, section)); ret.add(new LemsClass(Parameter.class, section)); ret.add(new LemsClass(PathParameter.class, section)); ret.add(new LemsClass(Property.class, section)); ret.add(new LemsClass(DerivedParameter.class, section)); ret.add(new LemsClass(Fixed.class, section)); ret.add(new LemsClass(Requirement.class, section)); ret.add(new LemsClass(ComponentRequirement.class, section)); ret.add(new LemsClass(InstanceRequirement.class, section)); ret.add(new LemsClass(Exposure.class, section)); ret.add(new LemsClass(Child.class, section)); ret.add(new LemsClass(Children.class, section)); // NB Link has to come before ComponentRef here becuase it is a subclass and we want // link elts in the right list. TODO - make same with different scope parameter ret.add(new LemsClass(Link.class, section)); ret.add(new LemsClass(ComponentReference.class, section)); ret.add(new LemsClass(ComponentTypeReference.class, section)); ret.add(new LemsClass(Collection.class, section)); ret.add(new LemsClass(PairCollection.class, section)); ret.add(new LemsClass(EventPort.class, section)); // Deprecated ret.add(new LemsClass(Text.class, section)); ret.add(new LemsClass(Path.class, section)); ret.add(new LemsClass(Attachments.class, section)); ret.add(new LemsClass(Insertion.class, section)); ret.add(new LemsClass(IntegerParameter.class, section)); ret.add(new LemsClass(IndexParameter.class, section)); ret.add(new LemsClass(About.class, section)); ret.add(new LemsClass(Meta.class, section)); return ret; } private ArrayList<LemsClass> getSimulationClasses() { ArrayList<LemsClass> ret = new ArrayList<LemsClass>(); String section = "simulation"; ret.add(new LemsClass(Simulation.class, section)); ret.add(new LemsClass(Record.class, section)); ret.add(new LemsClass(EventRecord.class, section)); ret.add(new LemsClass(DataDisplay.class, section)); ret.add(new LemsClass(DataWriter.class, section)); ret.add(new LemsClass(EventWriter.class, section)); ret.add(new LemsClass(Run.class, section)); return ret; } private ArrayList<LemsClass> getProcedureClasses() { ArrayList<LemsClass> ret = new ArrayList<LemsClass>(); String section = "procedure"; ret.add(new LemsClass(Procedure.class, section)); ret.add(new LemsClass(Equilibrate.class, section)); ret.add(new LemsClass(ForEachComponent.class, section)); ret.add(new LemsClass(Print.class, section)); return ret; } private ArrayList<LemsClass> getGeometryClasses() { ArrayList<LemsClass> ret = new ArrayList<LemsClass>(); String section = "geometry"; ret.add(new LemsClass(Geometry.class, section)); ret.add(new LemsClass(Frustum.class, section)); ret.add(new LemsClass(Solid.class, section)); ret.add(new LemsClass(Location.class, section)); ret.add(new LemsClass(Skeleton.class, section)); ret.add(new LemsClass(ScalarField.class, section)); return ret; } }