Skip to content

Commit 764efd4

Browse files
authored
Merge pull request #23 from LIonWeb-org/utilityMethods
M3 utility methods
2 parents 4ff0b4c + 84db3a4 commit 764efd4

15 files changed

+174
-15
lines changed

core/src/main/java/org/lionweb/lioncore/java/metamodel/Concept.java

Lines changed: 43 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,10 @@ public Concept() {
2626
super();
2727
}
2828

29+
public Concept(@Nullable Metamodel metamodel, @Nullable String simpleName, @Nonnull String id) {
30+
super(metamodel, simpleName, id);
31+
}
32+
2933
public Concept(@Nullable Metamodel metamodel, @Nullable String simpleName) {
3034
super(metamodel, simpleName);
3135
}
@@ -91,22 +95,58 @@ public Concept getConcept() {
9195
return LionCore.getConcept();
9296
}
9397

94-
public @Nullable Property getPropertyByName(String propertyName) {
98+
public @Nullable Property getPropertyByID(@Nonnull String propertyId) {
99+
if (propertyId == null) {
100+
throw new IllegalArgumentException("propertyId cannot be null");
101+
}
102+
return allFeatures().stream().filter(f -> f instanceof Property).map(f -> (Property)f)
103+
.filter(p -> p.getID().equals(propertyId)).findFirst().orElse(null);
104+
}
105+
106+
public @Nullable Property getPropertyByName(@Nonnull String propertyName) {
107+
if (propertyName == null) {
108+
throw new IllegalArgumentException("propertyName cannot be null");
109+
}
95110
return allFeatures().stream().filter(f -> f instanceof Property).map(f -> (Property)f)
96111
.filter(p -> Objects.equals(p.getSimpleName(), propertyName)).findFirst().orElse(null);
97112
}
98113

99-
public @Nullable Containment getContainmentByName(String containmentName) {
114+
public @Nullable Containment getContainmentByName(@Nonnull String containmentName) {
115+
if (containmentName == null) {
116+
throw new IllegalArgumentException("containmentName cannot be null");
117+
}
100118
return allFeatures().stream().filter(f -> f instanceof Containment).map(f -> (Containment)f)
101119
.filter(c -> Objects.equals(c.getSimpleName(), containmentName)).findFirst().orElse(null);
102120
}
103121

104-
public @Nullable Reference getReferenceByName(String referenceName) {
122+
public @Nullable Reference getReferenceByName(@Nonnull String referenceName) {
123+
if (referenceName == null) {
124+
throw new IllegalArgumentException("referenceName cannot be null");
125+
}
105126
return allFeatures().stream().filter(f -> f instanceof Reference).map(f -> (Reference)f)
106127
.filter(c -> Objects.equals(c.getSimpleName(), referenceName)).findFirst().orElse(null);
107128
}
108129

130+
public @Nullable Containment getContainmentByID(@Nonnull String containmentID) {
131+
if (containmentID == null) {
132+
throw new IllegalArgumentException("containmentID cannot be null");
133+
}
134+
return allFeatures().stream().filter(f -> f instanceof Containment).map(f -> (Containment)f)
135+
.filter(c -> Objects.equals(c.getID(), containmentID)).findFirst().orElse(null);
136+
}
137+
138+
public @Nullable Reference getReferenceByID(@Nonnull String referenceID) {
139+
if (referenceID == null) {
140+
throw new IllegalArgumentException("referenceID cannot be null");
141+
}
142+
return allFeatures().stream().filter(f -> f instanceof Reference).map(f -> (Reference)f)
143+
.filter(c -> c.getID().equals(referenceID)).findFirst().orElse(null);
144+
}
145+
109146
public @Nullable Link getLinkByName(String linkName) {
147+
if (linkName == null) {
148+
throw new IllegalArgumentException("linkName cannot be null");
149+
}
110150
return allFeatures().stream().filter(f -> f instanceof Link).map(f -> (Link)f)
111151
.filter(c -> Objects.equals(c.getSimpleName(), linkName)).findFirst().orElse(null);
112152
}

core/src/main/java/org/lionweb/lioncore/java/metamodel/ConceptInterface.java

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,10 @@ public ConceptInterface() {
2222
super();
2323
}
2424

25+
public ConceptInterface(@Nullable Metamodel metamodel, @Nullable String simpleName, @Nonnull String id) {
26+
super(metamodel, simpleName, id);
27+
}
28+
2529
public ConceptInterface(@Nullable Metamodel metamodel, @Nullable String simpleName) {
2630
super(metamodel, simpleName);
2731
}
@@ -30,6 +34,10 @@ public ConceptInterface(@Nullable String simpleName) {
3034
super(null, simpleName);
3135
}
3236

37+
public ConceptInterface(@Nullable String simpleName, @Nonnull String id) {
38+
super(null, simpleName, id);
39+
}
40+
3341
public @Nonnull List<ConceptInterface> getExtendedInterfaces() {
3442
return getLinkMultipleValue("extended");
3543
}
@@ -54,4 +62,5 @@ public void addExtendedInterface(@Nonnull ConceptInterface extendedInterface) {
5462
public Concept getConcept() {
5563
return LionCore.getConceptInterface();
5664
}
65+
5766
}

core/src/main/java/org/lionweb/lioncore/java/metamodel/Containment.java

Lines changed: 15 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
import org.lionweb.lioncore.java.Experimental;
44
import org.lionweb.lioncore.java.self.LionCore;
55

6+
import javax.annotation.Nonnull;
67
import javax.annotation.Nullable;
78

89
/**
@@ -43,6 +44,14 @@ public static Containment createMultiple(@Nullable String simpleName, @Nullable
4344
return containment;
4445
}
4546

47+
public static Containment createMultiple(@Nullable String simpleName, @Nullable FeaturesContainer type, @Nonnull String id) {
48+
Containment containment = new Containment(simpleName, id);
49+
containment.setOptional(true);
50+
containment.setMultiple(true);
51+
containment.setType(type);
52+
return containment;
53+
}
54+
4655
public static Containment createMultipleAndRequired(@Nullable String simpleName, @Nullable FeaturesContainer type) {
4756
Containment containment = new Containment(simpleName);
4857
containment.setOptional(false);
@@ -63,7 +72,11 @@ public Containment(String simpleName, @Nullable FeaturesContainer container) {
6372
}
6473

6574
public Containment(String simpleName) {
66-
super(simpleName, null);
75+
super(simpleName, (FeaturesContainer) null);
76+
}
77+
78+
public Containment(String simpleName, @Nonnull String id) {
79+
super(simpleName, id);
6780
}
6881

6982
public @Nullable Containment getSpecialized() {
@@ -88,4 +101,5 @@ public String toString() {
88101
public Concept getConcept() {
89102
return LionCore.getContainment();
90103
}
104+
91105
}

core/src/main/java/org/lionweb/lioncore/java/metamodel/DataType.java

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,8 @@
11
package org.lionweb.lioncore.java.metamodel;
22

33
import org.lionweb.lioncore.java.model.impl.M3Node;
4-
import org.lionweb.lioncore.java.self.LionCore;
54

5+
import javax.annotation.Nonnull;
66
import javax.annotation.Nullable;
77

88
/**
@@ -19,6 +19,10 @@ public DataType() {
1919
super();
2020
}
2121

22+
public DataType(@Nonnull String id) {
23+
super(null, null, id);
24+
}
25+
2226
public DataType(@Nullable Metamodel metamodel, @Nullable String simpleName) {
2327
super(metamodel, simpleName);
2428
}

core/src/main/java/org/lionweb/lioncore/java/metamodel/Feature.java

Lines changed: 17 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -2,8 +2,8 @@
22

33
import org.lionweb.lioncore.java.Experimental;
44
import org.lionweb.lioncore.java.model.impl.M3Node;
5-
import org.lionweb.lioncore.java.utils.Naming;
65

6+
import javax.annotation.Nonnull;
77
import javax.annotation.Nullable;
88

99
/**
@@ -24,6 +24,17 @@ public Feature() {
2424

2525
}
2626

27+
public Feature(@Nullable String simpleName, @Nonnull String id) {
28+
this(simpleName, null, id);
29+
}
30+
31+
public Feature(@Nullable String simpleName, @Nullable FeaturesContainer container, @Nonnull String id) {
32+
this.setID(id);
33+
// TODO verify that the container is also a NamespaceProvider
34+
// TODO enforce uniqueness of the name within the FeauturesContainer
35+
setSimpleName(simpleName);
36+
setContainer(container);
37+
}
2738
public Feature(@Nullable String simpleName, @Nullable FeaturesContainer container) {
2839
// TODO verify that the container is also a NamespaceProvider
2940
// TODO enforce uniqueness of the name within the FeauturesContainer
@@ -39,8 +50,9 @@ public boolean isRequired() {
3950
return !isOptional();
4051
}
4152

42-
public void setOptional(boolean optional) {
53+
public T setOptional(boolean optional) {
4354
setPropertyValue("optional", optional);
55+
return (T)this;
4456
}
4557

4658
@Experimental
@@ -49,8 +61,9 @@ public boolean isDerived() {
4961
}
5062

5163
@Experimental
52-
public void setDerived(boolean derived) {
64+
public T setDerived(boolean derived) {
5365
this.derived = derived;
66+
return (T)this;
5467
}
5568

5669
@Override
@@ -70,4 +83,5 @@ public void setSimpleName(@Nullable String simpleName) {
7083
public void setContainer(@Nullable FeaturesContainer container) {
7184
this.setReferenceSingleValue("container", container);
7285
}
86+
7387
}

core/src/main/java/org/lionweb/lioncore/java/metamodel/FeaturesContainer.java

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,10 @@ public FeaturesContainer() {
2323
super();
2424
}
2525

26+
public FeaturesContainer(@Nullable Metamodel metamodel, @Nullable String simpleName, @Nonnull String id) {
27+
super(metamodel, simpleName, id);
28+
}
29+
2630
public FeaturesContainer(@Nullable Metamodel metamodel, @Nullable String simpleName) {
2731
super(metamodel, simpleName);
2832
}

core/src/main/java/org/lionweb/lioncore/java/metamodel/Link.java

Lines changed: 10 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
package org.lionweb.lioncore.java.metamodel;
22

3+
import javax.annotation.Nonnull;
34
import org.lionweb.lioncore.java.model.impl.M3Node;
45

56
import javax.annotation.Nullable;
@@ -18,6 +19,11 @@ public Link() {
1819
super();
1920
}
2021

22+
public Link(@Nullable String simpleName, @Nonnull String id) {
23+
// TODO verify that the container is also a NamespaceProvider
24+
super(simpleName, id);
25+
}
26+
2127
public Link(@Nullable String simpleName, @Nullable FeaturesContainer container) {
2228
// TODO verify that the container is also a NamespaceProvider
2329
super(simpleName, container);
@@ -27,15 +33,17 @@ public boolean isMultiple() {
2733
return getPropertyValue("multiple", Boolean.class, false);
2834
}
2935

30-
public void setMultiple(boolean multiple) {
36+
public T setMultiple(boolean multiple) {
3137
this.setPropertyValue("multiple", multiple);
38+
return (T)this;
3239
}
3340

3441
public @Nullable FeaturesContainer getType() {
3542
return getLinkSingleValue("type");
3643
}
3744

38-
public void setType(@Nullable FeaturesContainer type) {
45+
public T setType(@Nullable FeaturesContainer type) {
3946
this.setReferenceSingleValue("type", type);
47+
return (T) this;
4048
}
4149
}

core/src/main/java/org/lionweb/lioncore/java/metamodel/LionCoreBuiltins.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@ private LionCoreBuiltins() {
1313
this.addElement(new PrimitiveType(this, "Boolean"));
1414
this.addElement(new PrimitiveType(this, "Integer"));
1515
this.addElement(new PrimitiveType(this, "JSON"));
16+
this.getElements().forEach(e -> e.setID(this.getID() + "_" + ((PrimitiveType)e).getSimpleName()));
1617
}
1718

1819
public static LionCoreBuiltins getInstance() {

core/src/main/java/org/lionweb/lioncore/java/metamodel/Metamodel.java

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -2,11 +2,9 @@
22

33
import org.lionweb.lioncore.java.model.impl.M3Node;
44
import org.lionweb.lioncore.java.self.LionCore;
5-
import org.lionweb.lioncore.java.utils.Naming;
65

76
import javax.annotation.Nonnull;
87
import javax.annotation.Nullable;
9-
import java.util.LinkedList;
108
import java.util.List;
119

1210
/**
@@ -25,7 +23,7 @@ public class Metamodel extends M3Node<Metamodel> implements NamespaceProvider {
2523
public Metamodel() {
2624
}
2725

28-
public Metamodel(String qualifiedName) {
26+
public Metamodel(@Nonnull String qualifiedName) {
2927
this.setQualifiedName(qualifiedName);
3028
}
3129

core/src/main/java/org/lionweb/lioncore/java/metamodel/MetamodelElement.java

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
import org.lionweb.lioncore.java.model.impl.M3Node;
44
import org.lionweb.lioncore.java.utils.Naming;
55

6+
import javax.annotation.Nonnull;
67
import javax.annotation.Nullable;
78

89
/**
@@ -20,6 +21,11 @@ public MetamodelElement() {
2021

2122
}
2223

24+
public MetamodelElement(@Nullable Metamodel metamodel, @Nullable String simpleName, @Nonnull String id) {
25+
this(metamodel, simpleName);
26+
this.setID(id);
27+
}
28+
2329
public MetamodelElement(@Nullable Metamodel metamodel, @Nullable String simpleName) {
2430
// TODO enforce uniqueness of the name within the Metamodel
2531
Naming.validateSimpleName(simpleName);

core/src/main/java/org/lionweb/lioncore/java/metamodel/NamespacedEntity.java

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,9 @@ public interface NamespacedEntity {
1010
// TODO add ID, once details are clearer
1111
String getSimpleName();
1212
default String qualifiedName() {
13+
if (this.getContainer() == null) {
14+
throw new IllegalStateException("No container for " + this);
15+
}
1316
return this.getContainer().namespaceQualifier() + "." + this.getSimpleName();
1417
}
1518
NamespaceProvider getContainer();

core/src/main/java/org/lionweb/lioncore/java/metamodel/PrimitiveType.java

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22

33
import org.lionweb.lioncore.java.self.LionCore;
44

5+
import javax.annotation.Nonnull;
56
import javax.annotation.Nullable;
67

78
/**
@@ -20,10 +21,19 @@ public PrimitiveType() {
2021
super();
2122
}
2223

24+
public PrimitiveType(@Nonnull String id) {
25+
super(id);
26+
}
27+
2328
public PrimitiveType(@Nullable Metamodel metamodel, @Nullable String simpleName) {
2429
super(metamodel, simpleName);
2530
}
2631

32+
public PrimitiveType(@Nullable Metamodel metamodel, @Nullable String simpleName, String id) {
33+
super(metamodel, simpleName);
34+
setID(id);
35+
}
36+
2737
@Override
2838
public String toString() {
2939
return "PrimitiveType(" + getSimpleName() + ")";
@@ -33,4 +43,5 @@ public String toString() {
3343
public Concept getConcept() {
3444
return LionCore.getPrimitiveType();
3545
}
46+
3647
}

0 commit comments

Comments
 (0)