diff --git a/src/main/java/models/objectOrientedTransfer/DataTransferContext.java b/src/main/java/models/objectOrientedTransfer/DataTransferContext.java index 04b10d0..9bfe279 100644 --- a/src/main/java/models/objectOrientedTransfer/DataTransferContext.java +++ b/src/main/java/models/objectOrientedTransfer/DataTransferContext.java @@ -105,12 +105,14 @@ MultiplicityValue multiplicityValue = null; List srcEdges = new ArrayList<>(); List dstEdges = new ArrayList<>(); + ObjectNode src = null; + ObjectNode dst = null; for (StringValue keyValue : ((JsonValue) value).getJson().keySet()) { String key = keyValue.getStringValue(); if (key.equals("src")) { - setEdges((StringValue) ((JsonValue) value).getValue(keyValue), srcEdges); + src = setEdges((StringValue) ((JsonValue) value).getValue(keyValue), srcEdges); } else if (key.equals("dst")) { - setEdges((StringValue) ((JsonValue) value).getValue(keyValue), dstEdges); + dst = setEdges((StringValue) ((JsonValue) value).getValue(keyValue), dstEdges); } else if (key.equals("style")) { setTransferStyle((StringValue) ((JsonValue) value).getValue(keyValue)); } else if (key.equals("multiplicity")) { @@ -132,7 +134,15 @@ if (multiplicityValue == null) { throw new RuntimeException("multiplicityが存在していません"); } - return new Relation(srcEdges,dstEdges,multiplicityValue); + if(src != null&&dst != null){//両方単独ObjectNode + return new Relation(src,dst,multiplicityValue); + }else if(src == null&&dst != null){//片方単独 + return new Relation(srcEdges,dst,multiplicityValue); + }else if(src != null&&dst == null){//上と同じ + return new Relation(src,dstEdges,multiplicityValue); + }else{//両方複数 + return new Relation(srcEdges,dstEdges,multiplicityValue); + } } throw new ExpectedJsonValue("Jsonではありません。"); } @@ -163,7 +173,7 @@ } } - private void setEdges(StringValue stringValue, List edges) { + private ObjectNode setEdges(StringValue stringValue, List edges) {//objectNodeの場合はobjectNodeを返したい。 String S = stringValue.getStringValue(); int cur = 0; ArrayList list = new ArrayList<>(); @@ -176,13 +186,19 @@ list.add(variable.toString()); cur++; } - + if(list.size() == 1){//一つだけの場合はobjectNodeを返す + String src = list.get(0); + objectNodeMap.put(src, new ObjectNode(src)); + return objectNodeMap.get(src); + } for (int i = 0; i < list.size() - 1; i++) { String src = list.get(i); String dst = list.get(i + 1); if (dst.charAt(0) == '{' && dst.charAt(dst.length() - 1) == '}') {//oneToMany dst = dst.substring(1, dst.length() - 1); - objectNodeMap.put(dst, new ObjectNode(dst)); + if(!objectNodeMap.containsKey(dst)){ + objectNodeMap.put(dst, new ObjectNode(dst)); + } if (src.charAt(0) == '{' && src.charAt(src.length() - 1) == '}') { src = src.substring(1, src.length() - 1); if (!objectNodeMap.containsKey(src)) { @@ -193,9 +209,11 @@ objectNodeMap.put(src, new ObjectNode(src)); } } - edges.add(new ReferenceEdge(objectNodeMap.get(src), objectNodeMap.get(dst), dst, "String")); + edges.add(new ReferenceEdge(objectNodeMap.get(src), objectNodeMap.get(dst), convertTheFirstCharacterToLowerCase(dst), "String")); } else {//oneToOne - objectNodeMap.put(dst, new ObjectNode(dst)); + if(!objectNodeMap.containsKey(dst)){ + objectNodeMap.put(dst, new ObjectNode(dst)); + } if (src.charAt(0) == '{' && src.charAt(src.length() - 1) == '}') { src = src.substring(1, src.length() - 1); if (!objectNodeMap.containsKey(src)) { @@ -206,8 +224,18 @@ objectNodeMap.put(src, new ObjectNode(src)); } } - edges.add(new ReferenceEdge(objectNodeMap.get(src), objectNodeMap.get(dst), dst)); + edges.add(new ReferenceEdge(objectNodeMap.get(src), objectNodeMap.get(dst), convertTheFirstCharacterToLowerCase(dst))); } } + return null; + } + + private String convertTheFirstCharacterToLowerCase(String s){ + if(Character.isUpperCase(s.charAt(0))){ + s = s.substring(0,1).toLowerCase() + s.substring(1); + return s; + }else{ + return s; + } } }