]> gerrit.simantics Code Review - simantics/platform.git/blob - bundles/org.simantics.modeling/src/org/simantics/modeling/NewComponentType.java
Sync git svn branch with SVN repository r33366.
[simantics/platform.git] / bundles / org.simantics.modeling / src / org / simantics / modeling / NewComponentType.java
1 package org.simantics.modeling;\r
2 \r
3 import org.simantics.databoard.Bindings;\r
4 import org.simantics.db.Resource;\r
5 import org.simantics.db.WriteGraph;\r
6 import org.simantics.db.common.CommentMetadata;\r
7 import org.simantics.db.common.request.PossibleIndexRoot;\r
8 import org.simantics.db.common.utils.CommonDBUtils;\r
9 import org.simantics.db.common.utils.NameUtils;\r
10 import org.simantics.db.exception.DatabaseException;\r
11 import org.simantics.db.layer0.request.InstantiateRequest;\r
12 import org.simantics.diagram.stubs.DiagramResource;\r
13 import org.simantics.layer0.Layer0;\r
14 import org.simantics.operation.Layer0X;\r
15 import org.simantics.structural.stubs.StructuralResource2;\r
16 \r
17 public class NewComponentType {\r
18         \r
19         public static Resource createComponentType(WriteGraph graph, Resource library) throws DatabaseException {\r
20 \r
21         ModelingResources MOD = ModelingResources.getInstance(graph);\r
22         Layer0 L0 = Layer0.getInstance(graph);\r
23         Layer0X L0X = Layer0X.getInstance(graph);\r
24         StructuralResource2 STR = StructuralResource2.getInstance(graph);\r
25         DiagramResource DIA = DiagramResource.getInstance(graph);\r
26 \r
27         // New component type\r
28         CommonDBUtils.selectClusterSet(graph, library);\r
29         Resource componentType = graph.newResource();\r
30         graph.newClusterSet(componentType);\r
31         CommonDBUtils.selectClusterSet(graph, componentType);\r
32         \r
33         graph.claim(componentType, L0.PartOf, library);\r
34         \r
35         Resource indexRoot = graph.sync(new PossibleIndexRoot(library));\r
36 \r
37         // Supertype\r
38         Resource supertype = graph.getSingleObject(indexRoot, MOD.StructuralModel_HasComponentTypeSupertype);\r
39         graph.claim(componentType, L0.Inherits, null, supertype);\r
40 \r
41         // Name\r
42         String defaultName = graph.getRelatedValue(indexRoot, MOD.StructuralModel_HasDefaultComponentTypeName, Bindings.STRING);\r
43         String name = NameUtils.findFreshName(graph, defaultName, library);\r
44         graph.claimLiteral(componentType, L0.HasName, name + "@1");\r
45         graph.claimLiteral(componentType, L0X.HasGeneratedNamePrefix, "");\r
46 \r
47         // Substructure\r
48         Resource substructureType = graph.getSingleObject(indexRoot, MOD.StructuralModel_HasComponentTypeSubstructureType);\r
49         Resource composite = new InstantiateRequest(substructureType).perform(graph);\r
50         graph.claim(componentType, STR.IsDefinedBy, composite);\r
51         // These are added to give the configuration a proper URI.\r
52         graph.claimLiteral(composite, L0.HasName, "Configuration");\r
53         graph.claim(componentType, L0.ConsistsOf, composite);\r
54 \r
55         // Attach trigger to keep component type interface structures up-to-date\r
56         Resource diagram = graph.getPossibleObject(composite, MOD.CompositeToDiagram);\r
57         if (diagram != null) {\r
58             Resource componentTypeUpdater = graph.newResource();\r
59             graph.claim(componentTypeUpdater, L0.InstanceOf, null, MOD.ComponentTypeUpdater);\r
60             graph.claim(diagram, L0X.HasTrigger, componentTypeUpdater);\r
61         }\r
62 \r
63         Resource symbolDiagramType = graph.getPossibleObject(indexRoot, MOD.StructuralModel_HasSymbolDiagramType);\r
64         if(symbolDiagramType == null) symbolDiagramType = DIA.Composite;\r
65         \r
66         // Symbol\r
67         Resource symbol = new ModelingUtils(graph).createSymbol2("Symbol", symbolDiagramType);\r
68         graph.claim(componentType, MOD.ComponentTypeToSymbol, symbol);\r
69         graph.claim(componentType, L0.ConsistsOf, symbol);\r
70         \r
71         CommentMetadata cm = graph.getMetadata(CommentMetadata.class);\r
72         graph.addMetadata(cm.add("Created new user component " + name + ", resource " + componentType));\r
73         \r
74         return componentType;\r
75     }\r
76 }