package com.framsticks.model.f0; import java.io.InputStream; import java.util.Set; import com.framsticks.params.*; import com.framsticks.params.annotations.AutoAppendAnnotation; import com.framsticks.params.annotations.FramsClassAnnotation; import com.framsticks.parsers.XmlLoader; import com.framsticks.util.DoubleMap; import com.framsticks.util.FramsticksException; import com.framsticks.model.Package; /** * The Class Schema, which represent f0 schema (it contains all the possible * classes definitions that can be used in f0 representation). Definitions are * loaded from XML stream. * * @author Jarek Szymczak * (please replace name and surname with my personal data) */ @FramsClassAnnotation(id = "f0classes", name = "f0classes") public class Schema { protected final Registry registry = new Registry(); /** The neuro classes (classess representing different types of neurons). */ private DoubleMap framsClasses = new DoubleMap<>(); private DoubleMap neuroClasses = new DoubleMap<>(); public static InputStream getDefaultDefinitionAsStream() { //return new FileInputStream(new File(Schema.class.getResource("/parsers/f0def.xml").getPath())); return Schema.class.getResourceAsStream("/parsers/f0def.xml"); } public static Schema load(InputStream stream) { XmlLoader xmlLoader = new XmlLoader(); xmlLoader.setUseLowerCase(true); xmlLoader.getRegistry() .registerAndBuild(Schema.class) .registerAndBuild(FramsClassBuilder.class) .registerAndBuild(NeuroClassBuilder.class) .registerAndBuild(ParamBuilder.class) .registerAndBuild(NeuroParamBuilder.class) .registerAndBuild(GroupBuilder.class) ; Package.register(xmlLoader.getRegistry()); Object object = xmlLoader.load(Schema.getDefaultDefinitionAsStream()); if (!(object instanceof Schema)) { throw new FramsticksException().msg("failed to load schema"); } return (Schema) object; } public Schema() { } public void addClass(FramsClass framsClass) { registry.putInfoIntoCache(framsClass); if (framsClass instanceof NeuroClass) { neuroClasses.put(framsClass.getId(), framsClass.getName(), (NeuroClass) framsClass); return; } framsClasses.put(framsClass.getId(), framsClass.getName(), framsClass); } @AutoAppendAnnotation public void addClass(FramsClassBuilder builder) { addClass(builder.finish()); } public Set getNeuroClasses() { return neuroClasses.getValues(); } public Set getFramsClasses() { return framsClasses.getValues(); } public NeuroClass getNeuroClass(String identifier) { return neuroClasses.get(identifier); } public FramsClass getFramsClass(String identifier) { return framsClasses.get(identifier); } public final Registry getRegistry() { return registry; } }