Skip to content

Commit

Permalink
Fix: Diagram Deserializer and Serializer
Browse files Browse the repository at this point in the history
Signed-off-by: Matheus Lenke <[email protected]>
  • Loading branch information
matheuslenke committed Feb 21, 2025
1 parent 13e682b commit d2dc51b
Show file tree
Hide file tree
Showing 22 changed files with 73 additions and 40 deletions.
48 changes: 23 additions & 25 deletions src/main/java/org/ontouml/ontouml4j/Main.java
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@
import java.util.List;
import org.ontouml.ontouml4j.model.Class;
import org.ontouml.ontouml4j.model.MultilingualText;
import org.ontouml.ontouml4j.model.Package;
import org.ontouml.ontouml4j.model.Project;
import org.ontouml.ontouml4j.model.Resource;
import org.ontouml.ontouml4j.model.utils.ProjectMetaProperties;
Expand All @@ -14,38 +15,35 @@ public class Main {
public static void main(String[] args) throws URISyntaxException {
Project myProject = createProject();

Package myPackage = myProject.createPackage("package_1", "My Package name");

Class myClass = myPackage.createClass("class_1", "My Class", "kind");

System.out.println(myClass.getStereotype());
System.out.println(myProject.getName());
System.out.println(myProject);

// TODO: Validar JSON Schema com biblioteca
}

private static Project createProject() throws URISyntaxException {
try {
ProjectMetaProperties metaProperties =
ProjectMetaProperties.builder()
.publisher(
Resource.builder()
.uri(new URI("https://org.ontouml"))
.name(new MultilingualText("OntoUML Foundation"))
.build())
.build();

List<Class> classes = createClasses();

return Project.builder()
.id("project_1")
.name(new MultilingualText("My Project"))
.description(new MultilingualText("Project Description."))
.created(new Date())
.alternativeNames(List.of(new MultilingualText("A second name for my Project")))
.metaProperties(metaProperties)
.build();

} catch (URISyntaxException e) {
e.printStackTrace();
}
return null;
ProjectMetaProperties metaProperties =
ProjectMetaProperties.builder()
.publisher(
Resource.builder()
.uri(new URI("https://org.ontouml"))
.name(new MultilingualText("OntoUML Foundation"))
.build())
.build();

return Project.builder()
.id("project_1")
.name(new MultilingualText("My Project"))
.description(new MultilingualText("Project Description."))
.created(new Date())
.alternativeNames(List.of(new MultilingualText("A second name for my Project")))
.metaProperties(metaProperties)
.build();
}

private static List<Class> createClasses() {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,7 @@
import com.fasterxml.jackson.databind.JsonNode;
import java.io.IOException;
import java.util.List;
import java.util.Set;
import java.util.stream.Collectors;
import org.ontouml.ontouml4j.deserialization.NamedElementDeserializer;
import org.ontouml.ontouml4j.deserialization.OntoumlElementDeserializer;
Expand Down Expand Up @@ -40,10 +41,10 @@ private void deserializeContents(Diagram diagram, JsonNode root, ObjectCodec cod
try {
List<String> contentIds =
contentsNode.traverse(codec).readValueAs(new TypeReference<List<String>>() {});
List<View> views =
Set<View> views =
contentIds.stream()
.map(item -> ClassView.builder().id(item).build())
.collect(Collectors.toList());
.collect(Collectors.toSet());
diagram.setViews(views);
} catch (IOException e) {
e.printStackTrace();
Expand Down
5 changes: 4 additions & 1 deletion src/main/java/org/ontouml/ontouml4j/model/NamedElement.java
Original file line number Diff line number Diff line change
Expand Up @@ -109,12 +109,15 @@ public Optional<String> getFirstDescription() {

public void addDescription(String languageTag, String value) {
if (this.description == null) {
this.description = new MultilingualText();
this.description = new MultilingualText(languageTag, value);
}
this.description.putText(languageTag, value);
}

public void addDescription(String value) {
if (this.description == null) {
this.description = new MultilingualText(value);
}
this.description.putText(value);
}

Expand Down
6 changes: 6 additions & 0 deletions src/main/java/org/ontouml/ontouml4j/model/Project.java
Original file line number Diff line number Diff line change
Expand Up @@ -253,6 +253,9 @@ public Iterable<? extends GeneralizationSet> getAllGeneralizationSets() {
}

public ModelElement addElement(ModelElement element) {
if (element.getId() == null) {
throw new RuntimeException("Element id cannot be null");
}
switch (element) {
case Class clazz -> this.addClass(clazz);
case Package pkg -> this.addPackage(pkg);
Expand All @@ -270,6 +273,9 @@ public ModelElement addElement(ModelElement element) {
}

public OntoumlElement addElement(OntoumlElement element) {
if (element.getId() == null) {
throw new RuntimeException("Element id cannot be null");
}
switch (element) {
case Diagram diagram -> this.diagrams.put(element.getId(), diagram);
case View view -> this.views.put(element.getId(), view);
Expand Down
6 changes: 4 additions & 2 deletions src/main/java/org/ontouml/ontouml4j/model/view/ClassView.java
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,6 @@
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.NoArgsConstructor;
import lombok.experimental.SuperBuilder;
import org.ontouml.ontouml4j.deserialization.view.ClassViewDeserializer;
import org.ontouml.ontouml4j.model.Project;
Expand All @@ -17,14 +16,17 @@
@Data
@SuperBuilder
@AllArgsConstructor
@NoArgsConstructor
@JsonDeserialize(using = ClassViewDeserializer.class)
@JsonSerialize(using = ClassViewSerializer.class)
public class ClassView extends View {

/** Identifies the rectangle shape that renders the class view in the diagram. */
private Rectangle rectangle;

public ClassView() {
this.rectangle = new Rectangle();
}

@Override
public String getType() {
return "ClassView";
Expand Down
4 changes: 2 additions & 2 deletions src/main/java/org/ontouml/ontouml4j/model/view/Diagram.java
Original file line number Diff line number Diff line change
Expand Up @@ -28,7 +28,7 @@ public class Diagram extends NamedElement {
private ModelElement owner;

/** Identifies the views contained in the diagram. */
@Builder.Default private List<View> views = new ArrayList<>();
@Builder.Default private Set<View> views = new HashSet<>();

@Override
public String getType() {
Expand Down Expand Up @@ -60,7 +60,7 @@ public void setProjectContainer(Project projectContainer) {
}

public void resolveAllReferences(Project project) {
List<View> newViews = new ArrayList<>();
Set<View> newViews = new HashSet<>();
for (View view : views) {
Optional<View> element = project.getElementById(view.getId(), View.class);
element.ifPresent(newViews::add);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,10 @@ static void serializeFields(MultilingualText text, JsonGenerator jsonGen) throws
.forEach(
(key, value) -> {
try {
if (key == null || value == null) {
return;
}
System.out.println("Key: " + key + "; value:" + value);
jsonGen.writeObjectField(key, value);
} catch (IOException e) {
e.printStackTrace();
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -4,10 +4,12 @@
import com.fasterxml.jackson.databind.JsonSerializer;
import com.fasterxml.jackson.databind.SerializerProvider;
import java.io.IOException;
import org.ontouml.ontouml4j.serialization.Serializer;
import org.ontouml.ontouml4j.shape.Diamond;

public class DiamondSerializer extends JsonSerializer<Diamond> {
public static void serializeFields(Diamond shape, JsonGenerator jsonGen) throws IOException {
Serializer.writeNullableStringField("type", "Diamond", jsonGen);
RectangularShapeSerializer.serializeFields(shape, jsonGen);
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,7 @@
public class PathSerializer extends JsonSerializer<Path> {

public static void serializeFields(Path path, JsonGenerator jsonGen) throws IOException {
Serializer.writeNullableStringField("type", "Path", jsonGen);
OntoumlElementSerializer.serializeFields(path, jsonGen);
Serializer.writeEmptyableArrayField("points", path.getPoints(), jsonGen);
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -4,13 +4,13 @@
import com.fasterxml.jackson.databind.JsonSerializer;
import com.fasterxml.jackson.databind.SerializerProvider;
import java.io.IOException;
import org.ontouml.ontouml4j.serialization.OntoumlElementSerializer;
import org.ontouml.ontouml4j.serialization.Serializer;
import org.ontouml.ontouml4j.shape.Rectangle;

public class RectangleSerializer extends JsonSerializer<Rectangle> {

public static void serializeFields(Rectangle shape, JsonGenerator jsonGen) throws IOException {
OntoumlElementSerializer.serializeFields(shape, jsonGen);
Serializer.writeNullableStringField("type", "Rectangle", jsonGen);
RectangularShapeSerializer.serializeFields(shape, jsonGen);
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -4,11 +4,13 @@
import com.fasterxml.jackson.databind.JsonSerializer;
import com.fasterxml.jackson.databind.SerializerProvider;
import java.io.IOException;
import org.ontouml.ontouml4j.serialization.Serializer;
import org.ontouml.ontouml4j.shape.Text;

public class TextSerializer extends JsonSerializer<Text> {

public static void serializeFields(Text text, JsonGenerator jsonGen) throws IOException {
Serializer.writeNullableStringField("type", "Text", jsonGen);
RectangularShapeSerializer.serializeFields(text, jsonGen);
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -5,9 +5,11 @@
import com.fasterxml.jackson.databind.SerializerProvider;
import java.io.IOException;
import org.ontouml.ontouml4j.model.view.AnchorView;
import org.ontouml.ontouml4j.serialization.Serializer;

public class AnchorViewSerializer extends JsonSerializer<AnchorView> {
public static void serializeFields(AnchorView view, JsonGenerator jsonGen) throws IOException {
Serializer.writeNullableStringField("type", "AnchorView", jsonGen);
BinaryConnectorViewSerializer.serializeFields(view, jsonGen);
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -5,10 +5,12 @@
import com.fasterxml.jackson.databind.SerializerProvider;
import java.io.IOException;
import org.ontouml.ontouml4j.model.view.BinaryRelationView;
import org.ontouml.ontouml4j.serialization.Serializer;

public class BinaryRelationViewSerializer extends JsonSerializer<BinaryRelationView> {
public static void serializeFields(BinaryRelationView view, JsonGenerator jsonGen)
throws IOException {
Serializer.writeNullableStringField("type", "BinaryRelationView", jsonGen);
BinaryConnectorViewSerializer.serializeFields(view, jsonGen);
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -9,8 +9,8 @@

public class ClassViewSerializer extends JsonSerializer<ClassView> {
public static void serializeFields(ClassView view, JsonGenerator jsonGen) throws IOException {
Serializer.writeNullableStringField("type", "ClassView", jsonGen);
ViewSerializer.serializeFields(view, jsonGen);

Serializer.writeNullableStringField("rectangle", view.getRectangle().getId(), jsonGen);
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -14,15 +14,13 @@
public class DiagramSerializer extends JsonSerializer<Diagram> {

public static void serializeFields(Diagram diagram, JsonGenerator jsonGen) throws IOException {
NamedElementSerializer.serializeFields(diagram, jsonGen);

Serializer.writeNullableStringField("type", "Diagram", jsonGen);
NamedElementSerializer.serializeFields(diagram, jsonGen);

List<String> viewsIds = diagram.getViews().stream().map(OntoumlElement::getId).toList();
ModelElement owner = diagram.getOwner();
if (owner != null) {
Serializer.writeNullableStringField("owner", owner.getId(), jsonGen);

} else {
Serializer.writeNullableStringField("owner", null, jsonGen);
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,7 @@
public class GeneralizationSetViewSerializer extends JsonSerializer<GeneralizationSetView> {
public static void serializeFields(GeneralizationSetView view, JsonGenerator jsonGen)
throws IOException {
Serializer.writeNullableStringField("type", "GeneralizationSetView", jsonGen);
List<String> generalizationIds =
view.getGeneralizations().stream().map(OntoumlElement::getId).toList();
Serializer.writeEmptyableArrayField("generalizations", generalizationIds, jsonGen);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -5,10 +5,12 @@
import com.fasterxml.jackson.databind.SerializerProvider;
import java.io.IOException;
import org.ontouml.ontouml4j.model.view.GeneralizationView;
import org.ontouml.ontouml4j.serialization.Serializer;

public class GeneralizationViewSerializer extends JsonSerializer<GeneralizationView> {
public static void serializeFields(GeneralizationView view, JsonGenerator jsonGen)
throws IOException {
Serializer.writeNullableStringField("type", "GeneralizationView", jsonGen);
BinaryConnectorViewSerializer.serializeFields(view, jsonGen);
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,7 @@
public class NaryRelationViewSerializer extends JsonSerializer<NaryRelationView> {
public static void serializeFields(NaryRelationView view, JsonGenerator jsonGen)
throws IOException {
Serializer.writeNullableStringField("type", "NaryRelationView", jsonGen);
ViewSerializer.serializeFields(view, jsonGen);
List<String> memberIds = view.getMembers().stream().map(OntoumlElement::getId).toList();
Serializer.writeNullableArrayField("members", memberIds, jsonGen);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,7 @@

public class NoteViewSerializer extends JsonSerializer<NoteView> {
public static void serializeFields(NoteView view, JsonGenerator jsonGen) throws IOException {
Serializer.writeNullableStringField("type", "NoteView", jsonGen);
ViewSerializer.serializeFields(view, jsonGen);
Serializer.writeNullableStringField("text", view.getText().getId(), jsonGen);
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,7 @@

public class PackageViewSerializer extends JsonSerializer<PackageView> {
public static void serializeFields(PackageView view, JsonGenerator jsonGen) throws IOException {
Serializer.writeNullableStringField("type", "PackageView", jsonGen);
ViewSerializer.serializeFields(view, jsonGen);
Serializer.writeNullableOjectField("rectangle", view.getRectangle(), jsonGen);
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -22,16 +22,21 @@ public abstract class RectangularShape extends Shape {

public RectangularShape(String id) {
super(id);
this.topLeft = new Point(0, 0);
this.width = 0;
this.height = 0;
}

public RectangularShape(String id, int width, int height) {
super(id);
this.topLeft = new Point(0, 0);
this.width = width;
this.height = height;
}

public RectangularShape(int width, int height) {
this((String) null, width, height);
this.topLeft = new Point(0, 0);
this.width = width;
this.height = height;
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -34,7 +34,8 @@ void shouldDeserializeDiagram() throws IOException {
void shouldDeserializeViews() {
assertThat(diagram.getViews()).hasSize(2);

assertThat(diagram.getViews().get(0).getId()).isEqualTo("classview_1");
assertThat(diagram.getViews().get(0).getIsViewOf().getId()).isEqualTo("class_1");
assertThat(diagram.getViews().stream().toList().getFirst().getId()).isEqualTo("classview_1");
assertThat(diagram.getViews().stream().toList().getFirst().getIsViewOf().getId())
.isEqualTo("class_1");
}
}

0 comments on commit d2dc51b

Please sign in to comment.