source: java/main/src/main/java/com/framsticks/model/f0/Schema.java @ 88

Last change on this file since 88 was 88, checked in by psniegowski, 11 years ago

HIGHLIGHTS:

  • loading f0 schema with XmlLoader?
  • use XmlLoader? to load configuration
  • introduce unified fork-join model of various entities

(Instances, Connections, GUI Frames, etc.),
all those entities clean up gracefully on
shutdown, which may be initialized by user
or by some entity

  • basing on above, simplify several organizing classes

(Observer, main class)

(to host native frams server process from Java level)

CHANGELOG:
Remove redundant Observer class.

Clean up in AbstractJoinable?.

Update ExternalProcess? class to changes in joining model.

Another sweep through code with FindBugs?.

Find bug with not joining RemoteInstance?.

Joining almost works.

Much improved joining model.

More improvement to joining model.

Add logging messages around joinable operations.

Rename methods in AbstractJoinable?.

Improve Joinable.

Rewrite of entity structure.

More simplifications with entities.

Further improve joinables.

Let Frame compose from JFrame instead of inheriting.

Add join classes.

Improvements of closing.

Add Builder interface.

Add FramsServerTest?.xml

FramsServer? may be configured through xml.

Make Framsticks main class an Observer of Entities.

Make Observer a generic type.

Remove variables regarding to removed endpoint.

Simplify observer (remove endpoints).

More changes to Observer and Endpoint.

Minor improvements.

Add OutputListener? to ExternalProcess?.

Improve testing of ExternalProcess?.

Add ExternalProcess? runner.

Rename the Program class to Framsticks.

Migrate Program to use XmlLoader? configuration.

First steps with configuration using XmlLoader?.

Fix several bugs.

Move all f0 classes to apriopriate package.

XmlLoader? is able to load Schema.

XmlLoader? is loading classes and props.

Add GroupBuilder?.

File size: 2.8 KB
Line 
1package com.framsticks.model.f0;
2
3import java.io.InputStream;
4import java.util.Set;
5
6import com.framsticks.params.*;
7import com.framsticks.params.annotations.AutoAppendAnnotation;
8import com.framsticks.params.annotations.FramsClassAnnotation;
9import com.framsticks.parsers.XmlLoader;
10import com.framsticks.util.DoubleMap;
11import com.framsticks.util.FramsticksException;
12
13import com.framsticks.model.Package;
14
15/**
16 * The Class Schema, which represent f0 schema (it contains all the possible
17 * classes definitions that can be used in f0 representation). Definitions are
18 * loaded from XML stream.
19 *
20 * @author Jarek Szymczak <name.surname@gmail.com>
21 * (please replace name and surname with my personal data)
22 */
23@FramsClassAnnotation(id = "f0classes", name = "f0classes")
24public class Schema {
25
26        protected final Registry registry = new Registry();
27
28        /** The neuro classes (classess representing different types of neurons). */
29        private DoubleMap<String, FramsClass> framsClasses = new DoubleMap<>();
30        private DoubleMap<String, NeuroClass> neuroClasses = new DoubleMap<>();
31
32        public static InputStream getDefaultDefinitionAsStream() {
33                //return new FileInputStream(new File(Schema.class.getResource("/parsers/f0def.xml").getPath()));
34                return Schema.class.getResourceAsStream("/parsers/f0def.xml");
35        }
36
37        public static Schema load(InputStream stream) {
38
39                XmlLoader xmlLoader = new XmlLoader();
40                xmlLoader.setUseLowerCase(true);
41                xmlLoader.getRegistry()
42                        .registerAndBuild(Schema.class)
43                        .registerAndBuild(FramsClassBuilder.class)
44                        .registerAndBuild(NeuroClassBuilder.class)
45                        .registerAndBuild(ParamBuilder.class)
46                        .registerAndBuild(NeuroParamBuilder.class)
47                        .registerAndBuild(GroupBuilder.class)
48                        ;
49
50                Package.register(xmlLoader.getRegistry());
51
52                Object object = xmlLoader.load(Schema.getDefaultDefinitionAsStream());
53                if (!(object instanceof Schema)) {
54                        throw new FramsticksException().msg("failed to load schema");
55                }
56                return (Schema) object;
57        }
58
59        public Schema() {
60        }
61
62        public void addClass(FramsClass framsClass) {
63                registry.putInfoIntoCache(framsClass);
64                if (framsClass instanceof NeuroClass) {
65                        neuroClasses.put(framsClass.getId(), framsClass.getName(), (NeuroClass) framsClass);
66                        return;
67                }
68                framsClasses.put(framsClass.getId(), framsClass.getName(), framsClass);
69        }
70
71        @AutoAppendAnnotation
72        public void addClass(FramsClassBuilder builder) {
73                addClass(builder.finish());
74        }
75
76        public Set<NeuroClass> getNeuroClasses() {
77                return neuroClasses.getValues();
78        }
79
80        public Set<FramsClass> getFramsClasses() {
81                return framsClasses.getValues();
82        }
83
84        public NeuroClass getNeuroClass(String identifier) {
85                return neuroClasses.get(identifier);
86        }
87
88        public FramsClass getFramsClass(String identifier) {
89                return framsClasses.get(identifier);
90        }
91
92        public final Registry getRegistry() {
93                return registry;
94        }
95
96}
Note: See TracBrowser for help on using the repository browser.