-package org.simantics.db.layer0.genericrelation;\r
-\r
-import java.io.IOException;\r
-import java.util.ArrayList;\r
-import java.util.Map;\r
-import java.util.TreeMap;\r
-\r
-import org.simantics.databoard.Databoard;\r
-import org.simantics.databoard.annotations.Arguments;\r
-import org.simantics.databoard.annotations.Union;\r
-import org.simantics.databoard.binding.Binding;\r
-import org.simantics.databoard.binding.error.BindingConstructionException;\r
-import org.simantics.databoard.serialization.SerializationException;\r
-import org.simantics.databoard.serialization.Serializer;\r
-import org.simantics.databoard.serialization.SerializerConstructionException;\r
-import org.simantics.db.Metadata;\r
-import org.simantics.db.ReadGraph;\r
-import org.simantics.db.Resource;\r
-import org.simantics.db.Session;\r
-import org.simantics.db.common.utils.NameUtils;\r
-import org.simantics.db.exception.DatabaseException;\r
-import org.simantics.layer0.Layer0;\r
-\r
-public class DependencyChanges implements Metadata {\r
- \r
- public final @Arguments({Resource.class, Change[].class}) TreeMap<Resource, Change[]> modelChanges;\r
- public final boolean hasUnresolved;\r
- \r
- public DependencyChanges(TreeMap<Resource, Change[]> modelChanges, boolean hasUnresolved) {\r
- this.modelChanges = modelChanges;\r
- this.hasUnresolved = hasUnresolved;\r
- } \r
- \r
- public DependencyChanges(Map<Resource, ArrayList<Change>> _modelChanges, boolean hasUnresolved) {\r
- this(new TreeMap<Resource, Change[]>(), hasUnresolved);\r
- for(Map.Entry<Resource, ArrayList<Change>> entry : _modelChanges.entrySet()) {\r
- ArrayList<Change> value = entry.getValue();\r
- modelChanges.put(entry.getKey(), value.toArray(new Change[value.size()]));\r
- }\r
- }\r
- \r
- public static enum ChangeType {\r
- LINK_CHANGE, COMPONENT_ADDITION, COMPONENT_REMOVAL,\r
- COMPONENT_MODIFICATION\r
- }\r
- \r
- @Union({LinkChange.class,\r
- ComponentAddition.class, \r
- ComponentRemoval.class, \r
- ComponentModification.class})\r
- public static interface Change {\r
- ChangeType getType();\r
- String toString(ReadGraph graph) throws DatabaseException;\r
- }\r
- \r
- public static class LinkChange implements Change {\r
- public final Resource component;\r
- public LinkChange(Resource component) {\r
- this.component = component;\r
- }\r
- @Override\r
- public ChangeType getType() {\r
- return ChangeType.LINK_CHANGE;\r
- }\r
- @Override\r
- public String toString(ReadGraph graph) throws DatabaseException {\r
- return "LinkChange[" + NameUtils.getSafeName(graph, component, true) + "]";\r
- }\r
- }\r
-\r
- public static class ComponentAddition implements Change {\r
- public final Resource component;\r
- public final Resource parent;\r
- public ComponentAddition(Resource component, Resource parent) {\r
- this.component = component;\r
- this.parent = parent;\r
- }\r
- @Override\r
- public ChangeType getType() {\r
- return ChangeType.COMPONENT_ADDITION;\r
- }\r
- @Override\r
- public String toString() {\r
- return "ComponentAddition[" + component + "]";\r
- }\r
- public boolean isValid(ReadGraph graph) throws DatabaseException {\r
- return graph.hasStatement(component, Layer0.getInstance(graph).PartOf, parent);\r
- }\r
- @Override\r
- public String toString(ReadGraph graph) throws DatabaseException {\r
- return "ComponentAddition[" + NameUtils.getSafeName(graph, component, true) + "]";\r
- }\r
- }\r
- \r
- public static class ComponentRemoval implements Change {\r
- public final Resource component;\r
- public final Resource parent;\r
- public ComponentRemoval(Resource component, Resource parent) { \r
- this.component = component;\r
- this.parent = parent;\r
- }\r
- @Override\r
- public ChangeType getType() {\r
- return ChangeType.COMPONENT_REMOVAL;\r
- }\r
- public boolean isValid(ReadGraph graph) throws DatabaseException {\r
- return !graph.hasStatement(component, Layer0.getInstance(graph).PartOf, parent);\r
- }\r
- @Override\r
- public String toString(ReadGraph graph) throws DatabaseException {\r
- return "ComponentRemoval[component=" + NameUtils.getSafeName(graph, component, true) + ", parent=" + NameUtils.getSafeName(graph, parent, true) + "]";\r
- }\r
- }\r
- \r
- public static class ComponentModification implements Change {\r
- public final Resource component;\r
- public ComponentModification(Resource component) {\r
- this.component = component;\r
- }\r
- @Override\r
- public ChangeType getType() {\r
- return ChangeType.COMPONENT_MODIFICATION;\r
- }\r
- @Override\r
- public String toString(ReadGraph graph) throws DatabaseException {\r
- return "ComponentModification[" + NameUtils.getSafeName(graph, component, true) + "]";\r
- }\r
- }\r
- \r
- public Change[] get(Resource model) {\r
- return modelChanges.get(model);\r
- }\r
- \r
- public Map<Resource, Change[]> get() {\r
- return modelChanges;\r
- }\r
- \r
- @Override\r
- public byte[] serialise(Session session) {\r
- try {\r
- Databoard databoard = session.getService( Databoard.class );\r
- Binding binding = databoard.getBinding( DependencyChanges.class );\r
- Serializer serializer = databoard.getSerializer( binding );\r
- return serializer.serialize(this);\r
- } catch (SerializationException e) {\r
- e.printStackTrace();\r
- } catch (IOException e) {\r
- // TODO Auto-generated catch block\r
- e.printStackTrace();\r
- } catch (SerializerConstructionException e) {\r
- // TODO Auto-generated catch block\r
- e.printStackTrace();\r
- } catch (BindingConstructionException e) {\r
- // TODO Auto-generated catch block\r
- e.printStackTrace();\r
- }\r
- return new byte[0];\r
- }\r
- \r
- public static DependencyChanges deserialise(Session session, byte[] input) {\r
- try {\r
- Databoard databoard = session.getService( Databoard.class );\r
- Binding binding = databoard.getBinding( DependencyChanges.class );\r
- Serializer serializer = databoard.getSerializer( binding );\r
- return (DependencyChanges) serializer.deserialize(input); \r
- } catch (SerializationException e) {\r
- e.printStackTrace();\r
- } catch (IOException e) {\r
- e.printStackTrace();\r
- } catch (SerializerConstructionException e) {\r
- e.printStackTrace();\r
- } catch (BindingConstructionException e) {\r
- e.printStackTrace();\r
- }\r
- return null;\r
- }\r
- \r
- public boolean isEmpty() {\r
- return modelChanges.isEmpty() && !hasUnresolved;\r
- }\r
- \r
-}\r
+package org.simantics.db.layer0.genericrelation;
+
+import java.io.IOException;
+import java.util.ArrayList;
+import java.util.Map;
+import java.util.TreeMap;
+
+import org.simantics.databoard.Databoard;
+import org.simantics.databoard.annotations.Arguments;
+import org.simantics.databoard.annotations.Union;
+import org.simantics.databoard.binding.Binding;
+import org.simantics.databoard.binding.error.BindingConstructionException;
+import org.simantics.databoard.serialization.SerializationException;
+import org.simantics.databoard.serialization.Serializer;
+import org.simantics.databoard.serialization.SerializerConstructionException;
+import org.simantics.db.Metadata;
+import org.simantics.db.ReadGraph;
+import org.simantics.db.Resource;
+import org.simantics.db.Session;
+import org.simantics.db.common.utils.NameUtils;
+import org.simantics.db.exception.DatabaseException;
+import org.simantics.layer0.Layer0;
+
+public class DependencyChanges implements Metadata {
+
+ public final @Arguments({Resource.class, Change[].class}) TreeMap<Resource, Change[]> modelChanges;
+ public final boolean hasUnresolved;
+
+ public DependencyChanges(TreeMap<Resource, Change[]> modelChanges, boolean hasUnresolved) {
+ this.modelChanges = modelChanges;
+ this.hasUnresolved = hasUnresolved;
+ }
+
+ public DependencyChanges(Map<Resource, ArrayList<Change>> _modelChanges, boolean hasUnresolved) {
+ this(new TreeMap<Resource, Change[]>(), hasUnresolved);
+ for(Map.Entry<Resource, ArrayList<Change>> entry : _modelChanges.entrySet()) {
+ ArrayList<Change> value = entry.getValue();
+ modelChanges.put(entry.getKey(), value.toArray(new Change[value.size()]));
+ }
+ }
+
+ public static enum ChangeType {
+ LINK_CHANGE, COMPONENT_ADDITION, COMPONENT_REMOVAL,
+ COMPONENT_MODIFICATION
+ }
+
+ @Union({LinkChange.class,
+ ComponentAddition.class,
+ ComponentRemoval.class,
+ ComponentModification.class})
+ public static interface Change {
+ ChangeType getType();
+ String toString(ReadGraph graph) throws DatabaseException;
+ }
+
+ public static class LinkChange implements Change {
+ public final Resource component;
+ public LinkChange(Resource component) {
+ this.component = component;
+ }
+ @Override
+ public ChangeType getType() {
+ return ChangeType.LINK_CHANGE;
+ }
+ @Override
+ public String toString(ReadGraph graph) throws DatabaseException {
+ return "LinkChange[" + NameUtils.getSafeName(graph, component, true) + "]";
+ }
+ }
+
+ public static class ComponentAddition implements Change {
+ public final Resource component;
+ public final Resource parent;
+ public ComponentAddition(Resource component, Resource parent) {
+ this.component = component;
+ this.parent = parent;
+ }
+ @Override
+ public ChangeType getType() {
+ return ChangeType.COMPONENT_ADDITION;
+ }
+ @Override
+ public String toString() {
+ return "ComponentAddition[" + component + "]";
+ }
+ public boolean isValid(ReadGraph graph) throws DatabaseException {
+ return graph.hasStatement(component, Layer0.getInstance(graph).PartOf, parent);
+ }
+ @Override
+ public String toString(ReadGraph graph) throws DatabaseException {
+ return "ComponentAddition[" + NameUtils.getSafeName(graph, component, true) + "]";
+ }
+ }
+
+ public static class ComponentRemoval implements Change {
+ public final Resource component;
+ public final Resource parent;
+ public ComponentRemoval(Resource component, Resource parent) {
+ this.component = component;
+ this.parent = parent;
+ }
+ @Override
+ public ChangeType getType() {
+ return ChangeType.COMPONENT_REMOVAL;
+ }
+ public boolean isValid(ReadGraph graph) throws DatabaseException {
+ return !graph.hasStatement(component, Layer0.getInstance(graph).PartOf, parent);
+ }
+ @Override
+ public String toString(ReadGraph graph) throws DatabaseException {
+ return "ComponentRemoval[component=" + NameUtils.getSafeName(graph, component, true) + ", parent=" + NameUtils.getSafeName(graph, parent, true) + "]";
+ }
+ }
+
+ public static class ComponentModification implements Change {
+ public final Resource component;
+ public ComponentModification(Resource component) {
+ this.component = component;
+ }
+ @Override
+ public ChangeType getType() {
+ return ChangeType.COMPONENT_MODIFICATION;
+ }
+ @Override
+ public String toString(ReadGraph graph) throws DatabaseException {
+ return "ComponentModification[" + NameUtils.getSafeName(graph, component, true) + "]";
+ }
+ }
+
+ public Change[] get(Resource model) {
+ return modelChanges.get(model);
+ }
+
+ public Map<Resource, Change[]> get() {
+ return modelChanges;
+ }
+
+ @Override
+ public byte[] serialise(Session session) {
+ try {
+ Databoard databoard = session.getService( Databoard.class );
+ Binding binding = databoard.getBinding( DependencyChanges.class );
+ Serializer serializer = databoard.getSerializer( binding );
+ return serializer.serialize(this);
+ } catch (SerializationException e) {
+ e.printStackTrace();
+ } catch (IOException e) {
+ // TODO Auto-generated catch block
+ e.printStackTrace();
+ } catch (SerializerConstructionException e) {
+ // TODO Auto-generated catch block
+ e.printStackTrace();
+ } catch (BindingConstructionException e) {
+ // TODO Auto-generated catch block
+ e.printStackTrace();
+ }
+ return new byte[0];
+ }
+
+ public static DependencyChanges deserialise(Session session, byte[] input) {
+ try {
+ Databoard databoard = session.getService( Databoard.class );
+ Binding binding = databoard.getBinding( DependencyChanges.class );
+ Serializer serializer = databoard.getSerializer( binding );
+ return (DependencyChanges) serializer.deserialize(input);
+ } catch (SerializationException e) {
+ e.printStackTrace();
+ } catch (IOException e) {
+ e.printStackTrace();
+ } catch (SerializerConstructionException e) {
+ e.printStackTrace();
+ } catch (BindingConstructionException e) {
+ e.printStackTrace();
+ }
+ return null;
+ }
+
+ public boolean isEmpty() {
+ return modelChanges.isEmpty() && !hasUnresolved;
+ }
+
+}