public OJIfStatement getDeepCopy() { OJIfStatement copy = new OJIfStatement(); copyDeepInfoInto(copy); return copy; }
/** Returns a copy of this instance. True parts, i.e. associations marked 'aggregate' or 'composite', and attributes, are copied as well. References to other objects, i.e. associations not marked 'aggregate' or 'composite', will not be copied. The returned copy will refer to the same objects as the original (this) instance. */ public OJElement getCopy() { OJIfStatement result = new OJIfStatement(); this.copyInfoInto(result); return result; }
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 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); }
@Override public void visitBefore(Property p) { PropertyWrapper pWrap = new PropertyWrapper(p); if (pWrap.isComponent()) { OJAnnotatedClass owner = findOJClass(p); OJAnnotatedOperation createComponents = owner.findOperation("createComponents"); OJAnnotatedOperation init = (OJAnnotatedOperation) owner.findOperation("init", Arrays.asList(UmlgClassOperations.getPathName(p.getOtherEnd().getType()))); OJIfStatement ifNull = new OJIfStatement(pWrap.getter() + "() == null", pWrap.setter() + "(new " + pWrap.javaBaseTypePath().getLast() + "(true))"); owner.addToImports(pWrap.javaBaseTypePath()); createComponents.getBody().addToStatements(ifNull); if (p.getType() instanceof org.eclipse.uml2.uml.Class && init != null) { init.getBody().addToStatements(pWrap.getter() + "().init(this)"); } } }
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; }
private static void buildGetAssociationClassForPropertyInstance(OJAnnotatedClass owner, PropertyWrapper propertyWrapper) { OJAnnotatedOperation getAC = new OJAnnotatedOperation(propertyWrapper.associationClassGetterForProperty(), propertyWrapper.getAssociationClassPathName()); getAC.addParam(propertyWrapper.fieldname(), propertyWrapper.javaBaseTypePath()); OJForStatement forAC = new OJForStatement("ac", propertyWrapper.getAssociationClassPathName(), "this." + propertyWrapper.getAssociationClassFakePropertyName()); OJIfStatement ifStatement = new OJIfStatement("ac." + propertyWrapper.getter() + "().equals(" + propertyWrapper.fieldname() + ")", "return ac"); forAC.getBody().addToStatements(ifStatement); getAC.getBody().addToStatements(forAC); getAC.getBody().addToStatements("return null"); owner.addToOperations(getAC); }
@Override public void visitBefore(Enumeration element) { OJAnnotatedClass annotatedClass = findOJClass(element); OJAnnotatedOperation toJson = new OJAnnotatedOperation("toJson", new OJPathName("String")); toJson.getBody().addToStatements("return name()"); annotatedClass.addToOperations(toJson); OJAnnotatedOperation fromJson = new OJAnnotatedOperation("fromJson", annotatedClass.getPathName()); fromJson.setStatic(true); fromJson.addParam("json", new OJPathName("String")); OJIfStatement ifS = new OJIfStatement("json == null || json.equals(\"null\")", "return null"); ifS.addToElsePart("return " + annotatedClass.getPathName().getLast() + ".valueOf(json)"); fromJson.getBody().addToStatements(ifS); annotatedClass.addToOperations(fromJson); }
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); }
OJAnnotatedClass owner = findOJClass(element); OJAnnotatedOperation setter = owner.findOperation(pWrap.setter(), pWrap.javaBaseTypePath()); OJIfStatement ifIndexNotNull = new OJIfStatement(); ifIndexNotNull.setCondition( pWrap.fieldname() + " != null && !" + pWrap.fieldname() + ".equals("+pWrap.getter()+"()) && " +
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); }
OJIfStatement ifHasNext = new OJIfStatement("iter.hasNext()"); ifHasNext.addToThenPart("result = new " + UmlgClassOperations.getMetaClassName(clazz) + "(iter.next().inVertex())"); INSTANCE.getBody().addToStatements(ifHasNext); OJIfStatement ifIter2 = new OJIfStatement("!iter.hasNext()"); ifIter2.addToThenPart("result = new " + metaClass.getName() + "()");
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 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"); }
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); }