private void addTmpIdToFromJson(OJAnnotatedClass annotatedClass) { OJAnnotatedOperation fromJson = annotatedClass.findOperation("fromJsonDataTypeAndComposite", new OJPathName("java.util.Map")); OJIfStatement ifStatement = new OJIfStatement("propertyMap.containsKey(\"tmpId\")"); OJIfStatement ifStatement1 = new OJIfStatement("propertyMap.get(\"tmpId\") != null"); ifStatement.addToThenPart(ifStatement1); ifStatement1.addToThenPart("this.tmpId = (String)propertyMap.get(\"tmpId\")"); ifStatement1.addToThenPart(UmlgGenerationUtil.UmlgTmpIdManager.getLast() + ".INSTANCE.put(this.tmpId, getId())"); annotatedClass.addToImports(UmlgGenerationUtil.UmlgTmpIdManager); ifStatement1.addToElsePart("this.tmpId = null"); fromJson.getBody().addToStatements(ifStatement); }
public OJIfStatement(String condition, String thenPart) { super(); this.setThenPart(new OJBlock()); this.setCondition(condition); this.addToThenPart(thenPart); }
public OJIfStatement(String condition, String thenPart, String elsePart) { super(); this.setThenPart(new OJBlock()); this.setCondition(condition); this.addToThenPart(thenPart); this.addToElsePart(elsePart); }
private void addTmpIdToToJson(OJAnnotatedClass annotatedClass) { OJAnnotatedOperation toJson = annotatedClass.findOperation("toJson", new OJPathName("Boolean")); OJIfStatement ifTmpNull = new OJIfStatement("this.tmpId != null"); //Insert the line at second line ifTmpNull.addToThenPart("sb.append(\"\\\"tmpId\\\": \\\"\" + this.tmpId + \"\\\", \")"); toJson.getBody().getStatements().add(1, ifTmpNull); OJAnnotatedOperation toJsonWithoutCompositeParent = annotatedClass.findOperation("toJsonWithoutCompositeParent", new OJPathName("Boolean")); //Insert the line at second line toJsonWithoutCompositeParent.getBody().getStatements().add(1, ifTmpNull); }
protected void commitOrRollback(OJTryStatement ojTryStatement) { OJIfStatement ifTransactionNeedsCommitOrRollback = new OJIfStatement("!(getQueryValue(\"" + UmlgGenerationUtil.rollback+ "\") != null && Boolean.valueOf(getQueryValue(\"" + UmlgGenerationUtil.rollback + "\")))"); ifTransactionNeedsCommitOrRollback.addToThenPart(UmlgGenerationUtil.UMLGAccess + ".commit()"); ojTryStatement.getTryPart().addToStatements(ifTransactionNeedsCommitOrRollback); ojTryStatement.getFinallyPart().addToStatements(UmlgGenerationUtil.UMLGAccess + ".rollback()"); }
private static void buildMovePropertyInstanceForAssociationClass(OJAnnotatedClass owner, PropertyWrapper propertyWrapper) { OJAnnotatedOperation mover = new OJAnnotatedOperation(propertyWrapper.associationClassMoverForProperty()); mover.addParam("index", "Integer"); mover.addParam(propertyWrapper.fieldname(), propertyWrapper.javaBaseTypePath()); OJIfStatement ifNotNull = new OJIfStatement(propertyWrapper.fieldname() + " != null"); ifNotNull.addToThenPart("this." + propertyWrapper.fieldname() + ".move(index, " + propertyWrapper.fieldname() + ", this." + propertyWrapper.associationClassGetterForProperty() + "(" + propertyWrapper.fieldname() + "))"); ifNotNull.addToThenPart("this." + propertyWrapper.getAssociationClassFakePropertyName() + " = " + propertyWrapper.javaDefaultInitialisationForAssociationClass((BehavioredClassifier) propertyWrapper.getOtherEnd().getType())); mover.getBody().addToStatements(ifNotNull); owner.addToOperations(mover); }
protected void persistUid(OJAnnotatedClass ojClass) { OJAnnotatedOperation getUid = new OJAnnotatedOperation("getUid"); getUid.setReturnType(new OJPathName("String")); getUid.addAnnotationIfNew(new OJAnnotationValue(new OJPathName("java.lang.Override"))); getUid.getBody().removeAllFromStatements(); new OJField(getUid.getBody(), "uid", "String"); OJIfStatement ifUidNotPresent = new OJIfStatement("!this.vertex.property(\"uid\").isPresent()"); ifUidNotPresent.addToThenPart("uid=UUID.randomUUID().toString()"); ifUidNotPresent.addToThenPart("this.vertex.property(\"uid\", uid)"); ifUidNotPresent.addToElsePart("uid=this.vertex.value(\"uid\")"); getUid.getBody().addToStatements(ifUidNotPresent); getUid.getBody().addToStatements("return uid"); ojClass.addToImports("java.util.UUID"); ojClass.addToOperations(getUid); }
public static void buildGetterForAssociationClass(OJAnnotatedClass ac, PropertyWrapper propertyWrapper) { PropertyWrapper otherEnd = new PropertyWrapper(propertyWrapper.getOtherEnd()); OJAnnotatedOperation getter = new OJAnnotatedOperation(otherEnd.getter(), otherEnd.javaBaseTypePath()); OJAnnotatedField tmpField = new OJAnnotatedField("tmp", otherEnd.javaTumlTypePath(true)); getter.getBody().addToLocals(tmpField); tmpField.setInitExp("this." + otherEnd.fieldname()); OJIfStatement ifFieldNotEmpty = new OJIfStatement("!" + tmpField.getName() + ".isEmpty()"); if (otherEnd.isOrdered()) { ifFieldNotEmpty.addToThenPart("return " + tmpField.getName() + ".get(0)"); } else { ifFieldNotEmpty.addToThenPart("return " + tmpField.getName() + ".iterator().next()"); } ifFieldNotEmpty.addToElsePart("return null"); getter.getBody().addToStatements(ifFieldNotEmpty); ac.addToOperations(getter); }
public static void buildGetterForAssociationClass(OJAnnotatedClass ac, PropertyWrapper propertyWrapper) { PropertyWrapper otherEnd = new PropertyWrapper(propertyWrapper.getOtherEnd()); OJAnnotatedOperation getter = new OJAnnotatedOperation(otherEnd.getter(), otherEnd.javaBaseTypePath()); OJAnnotatedField tmpField = new OJAnnotatedField("tmp", otherEnd.javaTumlTypePath(true)); getter.getBody().addToLocals(tmpField); tmpField.setInitExp("this." + otherEnd.fieldname()); OJIfStatement ifFieldNotEmpty = new OJIfStatement("!" + tmpField.getName() + ".isEmpty()"); if (otherEnd.isOrdered()) { ifFieldNotEmpty.addToThenPart("return " + tmpField.getName() + ".get(0)"); } else { ifFieldNotEmpty.addToThenPart("return " + tmpField.getName() + ".iterator().next()"); } ifFieldNotEmpty.addToElsePart("return null"); getter.getBody().addToStatements(ifFieldNotEmpty); ac.addToOperations(getter); }
protected void buildRemover(OJAnnotatedClass owner, PropertyWrapper propertyWrapper) { OJAnnotatedOperation remover = new OJAnnotatedOperation(propertyWrapper.remover()); remover.addParam(propertyWrapper.fieldname(), propertyWrapper.javaTypePath()); OJIfStatement ifNotNull = new OJIfStatement("!" + propertyWrapper.fieldname() + ".isEmpty()"); ifNotNull.addToThenPart("this." + propertyWrapper.fieldname() + ".removeAll(" + propertyWrapper.fieldname() + ")"); if (propertyWrapper.isMemberOfAssociationClass()) { ifNotNull.addToThenPart("this." + propertyWrapper.getAssociationClassFakePropertyName() + " = " + propertyWrapper.javaDefaultInitialisationForAssociationClass((BehavioredClassifier)propertyWrapper.getOtherEnd().getType())); } remover.getBody().addToStatements(ifNotNull); owner.addToOperations(remover); OJAnnotatedOperation singleRemover = new OJAnnotatedOperation(propertyWrapper.remover()); singleRemover.addParam(propertyWrapper.fieldname(), propertyWrapper.javaBaseTypePath()); ifNotNull = new OJIfStatement(propertyWrapper.fieldname() + " != null"); ifNotNull.addToThenPart("this." + propertyWrapper.fieldname() + ".remove(" + propertyWrapper.fieldname() + ")"); if (propertyWrapper.isMemberOfAssociationClass()) { ifNotNull.addToThenPart("this." + propertyWrapper.getAssociationClassFakePropertyName() + " = " + propertyWrapper.javaDefaultInitialisationForAssociationClass((BehavioredClassifier)propertyWrapper.getOtherEnd().getType())); } singleRemover.getBody().addToStatements(ifNotNull); owner.addToOperations(singleRemover); // //Add change listener // if (propertyWrapper.isChangedListener()) { // PropertyChangeNotificationBuilder.buildChangeNotification(owner, singleRemover, propertyWrapper, PropertyChangeNotificationBuilder.CHANGE_TYPE.REMOVE); // } }
public static OJAnnotatedOperation buildSetter(OJAnnotatedClass owner, PropertyWrapper pWrap) { OJAnnotatedOperation setter = new OJAnnotatedOperation(pWrap.setter()); if (pWrap.isReadOnly()) { setter.setVisibility(OJVisibilityKind.PROTECTED); } if (!pWrap.isMemberOfAssociationClass()) { setter.addParam(pWrap.fieldname(), pWrap.javaTypePath()); } else { setter.addParam(pWrap.getAssociationClassFakePropertyName(), pWrap.javaTypePathWithAssociationClass()); } setter.getBody().addToStatements(pWrap.clearer() + "()"); OJIfStatement ifNotNull; if (!pWrap.isMemberOfAssociationClass()) { ifNotNull = new OJIfStatement(pWrap.fieldname() + " != null"); ifNotNull.addToThenPart(pWrap.adder() + "(" + pWrap.fieldname() + ")"); } else { ifNotNull = new OJIfStatement(pWrap.getAssociationClassFakePropertyName() + " != null"); ifNotNull.addToThenPart(pWrap.adder() + "(" + pWrap.getAssociationClassFakePropertyName() + ")"); } setter.getBody().addToStatements(ifNotNull); owner.addToOperations(setter); return setter; }
OJIfStatement ifPropertyNotNull = new OJIfStatement(propertyWrapper.getter() + "() != null"); if (propertyWrapper.isEnumeration()) { ifPropertyNotNull.addToThenPart("edge.property(\"" + propertyWrapper.getPersistentName() + "\", " + propertyWrapper.getter() + "().name())"); } else if (!propertyWrapper.isPrimitive()) { ifPropertyNotNull.addToThenPart("edge.property(\"" + propertyWrapper.getPersistentName() + "\", " + UmlgGenerationUtil.umlgFormatter.getLast() + ".format(" + UmlgGenerationUtil.DataTypeEnum.getLast() + "." + DataTypeEnum.fromDataType((DataType) p.getType()).name() + ", " + propertyWrapper.getter() + "()))"); } else { ifPropertyNotNull.addToThenPart("edge.property(\"" + propertyWrapper.getPersistentName() + "\", " + propertyWrapper.getter() + "())");
") != null" ); ifIndexNotNull.addToThenPart("throw new IllegalStateException(\"Unique indexed property " + pWrap.getQualifiedName() + " already has a value of '\" + " + pWrap.fieldname() + " + \"'\")"); setter.getBody().addToStatements(0, ifIndexNotNull); owner.addToImports(UmlgGenerationUtil.UmlgLabelConverterFactoryPathName);
private void addConstraints(OJAnnotatedClass annotatedClass, Class clazz) { List<Constraint> constraints = ModelLoader.INSTANCE.getConstraints(clazz); for (Constraint constraint : constraints) { ConstraintWrapper constraintWrapper = new ConstraintWrapper(constraint); OJAnnotatedOperation checkClassConstraint = new OJAnnotatedOperation(UmlgClassOperations.checkClassConstraintName(constraint)); checkClassConstraint.setReturnType(new OJPathName("java.util.List").addToGenerics(UmlgGenerationUtil.UmlgConstraintViolation)); OJField result = new OJField("result", new OJPathName("java.util.List").addToGenerics(UmlgGenerationUtil.UmlgConstraintViolation)); result.setInitExp("new ArrayList<" + UmlgGenerationUtil.UmlgConstraintViolation.getLast() + ">()"); OJIfStatement ifConstraintFails = new OJIfStatement(); String ocl = constraintWrapper.getConstraintOclAsString(); checkClassConstraint.setComment(String.format("Implements the ocl statement for constraint '%s'\n<pre>\n%s\n</pre>", constraintWrapper.getName(), ocl)); OCLExpression<Classifier> oclExp = UmlgOcl2Parser.INSTANCE.parseOcl(ocl); ifConstraintFails.setCondition("(" + UmlgOcl2Java.oclToJava(clazz, annotatedClass, oclExp) + ") == false"); ifConstraintFails.addToThenPart("result.add(new " + UmlgGenerationUtil.UmlgConstraintViolation.getLast() + "(\"" + constraintWrapper.getName() + "\", \"" + clazz.getQualifiedName() + "\", \"ocl\\n" + ocl.replace("\n", "\\n") + "\\nfails!\"))"); checkClassConstraint.getBody().addToStatements(ifConstraintFails); checkClassConstraint.getBody().addToLocals(result); checkClassConstraint.getBody().addToStatements("return result"); annotatedClass.addToOperations(checkClassConstraint); } }
private void addMetaClassGetterToRoot(Classifier classifier, OJAnnotatedClass metaClass) { OJAnnotatedOperation INSTANCE = new OJAnnotatedOperation("getInstance"); INSTANCE.setStatic(true); INSTANCE.setReturnType(metaClass.getPathName()); metaClass.addToOperations(INSTANCE); OJField result = new OJField("result", metaClass.getPathName()); INSTANCE.getBody().addToLocals(result); INSTANCE.getBody().addToStatements("Iterator<Edge> iter = " + UmlgGenerationUtil.UMLGAccess + ".getRoot().edges(Direction.OUT, " + UmlgGenerationUtil.UmlgLabelConverterFactoryPathName.getLast() + ".getUmlgLabelConverter().convert(\"" + UmlgGenerationUtil.getEdgeToRootLabelStrategyMeta(classifier) + "\"))"); OJIfStatement ifHasNext = new OJIfStatement("iter.hasNext()"); ifHasNext.addToThenPart("result = new " + UmlgClassOperations.getMetaClassName(classifier) + "(iter.next().inVertex())"); INSTANCE.getBody().addToStatements(ifHasNext); ifHasNext.addToElsePart("iter = " + UmlgGenerationUtil.UMLGAccess + ".getRoot().edges(Direction.OUT, " + UmlgGenerationUtil.UmlgLabelConverterFactoryPathName.getLast() + ".getUmlgLabelConverter().convert(\"" + UmlgGenerationUtil.getEdgeToRootLabelStrategyMeta(classifier) + "\"))"); OJIfStatement ifIter2 = new OJIfStatement("!iter.hasNext()"); ifIter2.addToThenPart("result = new " + metaClass.getName() + "()"); ifIter2.addToElsePart("result = new " + metaClass.getName() + "(iter.next().inVertex())"); ifHasNext.addToElsePart(ifIter2); INSTANCE.getBody().addToStatements("return result"); metaClass.addToImports("java.util.Iterator"); metaClass.addToImports(UmlgGenerationUtil.tinkerDirection); metaClass.addToImports(UmlgGenerationUtil.edgePathName); metaClass.addToImports(UmlgGenerationUtil.UMLGPathName); }
ifHasNext.addToThenPart("result = new " + UmlgClassOperations.getMetaClassName(clazz) + "(iter.next().inVertex())"); INSTANCE.getBody().addToStatements(ifHasNext); ifIter2.addToThenPart("result = new " + metaClass.getName() + "()");
private void addPutResource(PropertyWrapper pWrap, OJAnnotatedClass annotatedClass, OJPathName parentPathName) { OJAnnotatedOperation put = new OJAnnotatedOperation("put"); put.setVisibility(OJVisibilityKind.PRIVATE); put.addToParameters(new OJParameter("resultMap", new OJPathName("java.util.Map").addToGenerics(new OJPathName("Class").addToGenerics("? extends " + pWrap.getAssociationClassPathName().getLast())).addToGenerics("java.lang.StringBuilder"))); put.addToParameters(new OJParameter("propertyMap", new OJPathName("java.util.Map").addToGenerics("String").addToGenerics("Object"))); annotatedClass.addToOperations(put); OJBlock firstBlock = new OJBlock(); firstBlock.addToStatements("Object id = propertyMap.get(\"id\")"); firstBlock.addToStatements(pWrap.getAssociationClassPathName().getLast() + " childResource = " + UmlgGenerationUtil.UMLGAccess + "." + UmlgGenerationUtil.getEntity + "(id)"); annotatedClass.addToImports(pWrap.javaBaseTypePath()); firstBlock.addToStatements("childResource.fromJson(propertyMap)"); put.getBody().addToStatements(firstBlock); OJBlock secondBlock = new OJBlock(); OJField baseTumlClass = new OJField("baseTumlClass", new OJPathName("Class").addToGenerics("? extends " + pWrap.getAssociationClassPathName().getLast())); baseTumlClass.setInitExp("childResource.getClass()"); secondBlock.addToLocals(baseTumlClass); OJField sb = new OJField("sb", "StringBuilder"); secondBlock.addToLocals(sb); OJIfStatement ifSbExist = new OJIfStatement("!resultMap.containsKey(baseTumlClass)"); ifSbExist.addToThenPart("sb = new StringBuilder()"); ifSbExist.addToThenPart("resultMap.put(baseTumlClass, sb)"); ifSbExist.addToElsePart("sb = resultMap.get(baseTumlClass)"); ifSbExist.addToElsePart("sb.append(\",\")"); secondBlock.addToStatements(ifSbExist); secondBlock.addToStatements("sb.append(childResource.toJsonWithoutCompositeParent())"); put.getBody().addToStatements(secondBlock); }
public static void buildDeleteNotification(OJAnnotatedClass owner, OJAnnotatedOperation delete, PropertyWrapper propertyWrapper) { OJIfStatement ifChanged = new OJIfStatement(); ifChanged.setCondition("true"); PropertyWrapper otherEnd = PropertyWrapper.from(propertyWrapper.getOtherEnd()); if (otherEnd.isMany()) { OJForStatement forStatement = new OJForStatement(otherEnd.getName(), otherEnd.javaBaseTypePath(), "this." + otherEnd.getter() + "()"); forStatement.getBody().addToStatements(constructNotifierForOtherEndMany(propertyWrapper, otherEnd)); delete.getBody().addToStatements(0, forStatement); } else { ifChanged.addToThenPart( constructNotifier(propertyWrapper) ); delete.getBody().addToStatements(0, ifChanged); } owner.addToImports(UmlgClassOperations.getPathName(propertyWrapper.getOwningType()).append(UmlgClassOperations.propertyEnumName(propertyWrapper.getOwningType()))); owner.addToImports(UmlgGenerationUtil.UmlgNotificationManager); owner.addToImports(UmlgGenerationUtil.ChangeHolder); owner.addToImports(UmlgGenerationUtil.ChangeHolder); owner.addToImports("java.util.Optional"); }
public static OJAnnotatedOperation buildSetter(OJAnnotatedClass owner, PropertyWrapper pWrap) { OJAnnotatedOperation setter = new OJAnnotatedOperation(pWrap.setter()); setter.addParam(pWrap.fieldname(), pWrap.javaBaseTypePath()); if (pWrap.isMemberOfAssociationClass()) { setter.addParam(StringUtils.uncapitalize(pWrap.getAssociationClass().getName()), UmlgClassOperations.getPathName(pWrap.getAssociationClass())); } if (pWrap.isReadOnly()) { setter.setVisibility(OJVisibilityKind.PROTECTED); } PropertyWrapper otherEnd = new PropertyWrapper(pWrap.getOtherEnd()); if (pWrap.hasOtherEnd() && !pWrap.isEnumeration() && pWrap.isOneToOne()) { OJIfStatement ifNotNull = new OJIfStatement(pWrap.fieldname() + " != null"); ifNotNull.addToThenPart(pWrap.fieldname() + "." + otherEnd.clearer() + "()"); ifNotNull.addToThenPart(pWrap.fieldname() + ".initialiseProperty(" + UmlgClassOperations.propertyEnumName(otherEnd.getOwningType()) + "." + otherEnd.fieldname() + ", false, true)"); owner.addToImports(UmlgClassOperations.getPathName(otherEnd.getOwningType()).append(UmlgClassOperations.propertyEnumName(otherEnd.getOwningType()))); setter.getBody().addToStatements(ifNotNull); } setter.getBody().addToStatements(pWrap.clearer() + "()"); if (!pWrap.isMemberOfAssociationClass()) { setter.getBody().addToStatements(pWrap.adder() + "(" + pWrap.fieldname() + ")"); } else { setter.getBody().addToStatements(pWrap.adder() + "(" + pWrap.fieldname() + ", " + StringUtils.uncapitalize(pWrap.getAssociationClass().getName()) + ")"); } owner.addToOperations(setter); return setter; } }
ifNotNull = new OJIfStatement(pWrap.getter() + "() == null"); ifNotNull.addToThenPart("result.add(new " + UmlgGenerationUtil.UmlgConstraintViolation.getLast() + "(\"multiplicity\", \"" + pWrap.getQualifiedName() + "\", \"lower multiplicity is " + pWrap.getLower() + "\"))"); validateMultiplicities.getBody().addToStatements(ifNotNull); if (pWrap.isMany()) { OJIfStatement ifNotNull = new OJIfStatement(pWrap.getter() + "().size() > " + pWrap.getUpper()); ifNotNull.addToThenPart("result.add(new " + UmlgGenerationUtil.UmlgConstraintViolation.getLast() + "(\"multiplicity\", \"" + pWrap.getQualifiedName() + "\", \"upper multiplicity is " + pWrap.getUpper() + "\"))"); validateMultiplicities.getBody().addToStatements(ifNotNull);