public OJField(OJBlock block, String name, OJPathName type) { this(name, type); block.addToLocals(this); }
private OJBlock addToElseIf(OJField f) { OJBlock block = new OJBlock(); block.addToLocals(f); this.elseIfPart.add(block); return block; }
/** Copies all attributes and associations of this instance into 'copy'. 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 'copy' will refer to the same objects as the original (this) instance. * * @param copy */ public void copyInfoInto(OJBlock copy) { super.copyInfoInto(copy); Iterator statementsIt = new ArrayList<OJStatement>(getStatements()).iterator(); while ( statementsIt.hasNext() ) { OJStatement elem = (OJStatement) statementsIt.next(); copy.addToStatements(elem); } Iterator localsIt = new ArrayList<OJField>(getLocals()).iterator(); while ( localsIt.hasNext() ) { OJField elem = (OJField) localsIt.next(); copy.addToLocals(elem); } }
public void copyDeepInfoInto(OJBlock copy){ for(OJStatement statement:getStatements()){ copy.addToStatements(statement.getDeepCopy()); } for(OJField ojField:getLocals()){ copy.addToLocals(ojField.getDeepCopy()); } } public void renameAll(Set<OJPathName> renamePathNames,String newName){
private void addOptionsRootObjectRepresentation(Model model, OJAnnotatedClass annotatedClass) { OJAnnotatedOperation options = new OJAnnotatedOperation("options", UmlgRestletGenerationUtil.Representation); options.addToThrows(UmlgRestletGenerationUtil.ResourceException); annotatedClass.addToImports(UmlgRestletGenerationUtil.ResourceException); UmlgGenerationUtil.addOverrideAnnotation(options); OJField json = new OJField("json", new OJPathName("java.lang.StringBuilder")); json.setInitExp("new StringBuilder()"); options.getBody().addToLocals(json); // get.getBody().addToStatements("json.append(\"[{\\\"data\\\": [{\\\"name\\\": \\\"APP\\\"}]\")"); options.getBody().addToStatements("json.append(\"[{\\\"meta\\\": \")"); options.getBody().addToStatements("json.append(\"{\\\"qualifiedName\\\": \\\"" + model.getQualifiedName() + "\\\"\")"); options.getBody().addToStatements("json.append(\", \\\"to\\\": \")"); options.getBody().addToStatements("json.append(" + StringUtils.capitalize(model.getName()) + "RuntimePropertyEnum.asJson())"); annotatedClass.addToImports(UmlgGenerationUtil.UmlgRootPackage.toJavaString() + "." + StringUtils.capitalize(model.getName()) + "." + StringUtils.capitalize(model.getName()) + "RuntimePropertyEnum"); options.getBody().addToStatements("json.append(\"}}]\")"); options.getBody().addToStatements("return new " + UmlgRestletGenerationUtil.JsonRepresentation.getLast() + "(json.toString())"); annotatedClass.addToImports(UmlgRestletGenerationUtil.JsonRepresentation); annotatedClass.addToOperations(options); }
private void addCheckConstraints(OJAnnotatedClass annotatedClass, Class clazz) { OJAnnotatedOperation checkConstraints = new OJAnnotatedOperation("checkClassConstraints", new OJPathName("java.util.List").addToGenerics(UmlgGenerationUtil.UmlgConstraintViolation)); UmlgGenerationUtil.addOverrideAnnotation(checkConstraints); OJField result = new OJField("result", new OJPathName("java.util.List").addToGenerics(UmlgGenerationUtil.UmlgConstraintViolation)); result.setInitExp("new ArrayList<" + UmlgGenerationUtil.UmlgConstraintViolation.getLast() + ">()"); checkConstraints.getBody().addToLocals(result); List<Constraint> constraints = ModelLoader.INSTANCE.getConstraints(clazz); if (!clazz.getGeneralizations().isEmpty()) { checkConstraints.getBody().addToStatements("result.addAll(super.checkClassConstraints())"); } for (Constraint constraint : constraints) { checkConstraints.getBody().addToStatements("result.addAll(" + UmlgClassOperations.checkClassConstraintName(constraint) + "())"); } checkConstraints.getBody().addToStatements("return result"); annotatedClass.addToOperations(checkConstraints); }
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 addFromJson(Class clazz) { OJAnnotatedClass annotatedClass = findOJClass(clazz); OJAnnotatedOperation fromJson = new OJAnnotatedOperation("fromJson"); fromJson.addParam("json", new OJPathName("String")); UmlgGenerationUtil.addOverrideAnnotation(fromJson); annotatedClass.addToOperations(fromJson); OJField objectMapper = new OJField("mapper", UmlgGenerationUtil.ObjectMapper); objectMapper.setInitExp(UmlgGenerationUtil.ObjectMapperFactory.getLast() + ".INSTANCE.getObjectMapper()"); annotatedClass.addToImports(UmlgGenerationUtil.ObjectMapperFactory); fromJson.getBody().addToLocals(objectMapper); OJTryStatement tryS = new OJTryStatement(); OJAnnotatedField propertyMap = new OJAnnotatedField("propertyMap", new OJPathName("java.util.Map").addToGenerics("String").addToGenerics("Object")); propertyMap.setInitExp("mapper.readValue(json, Map.class)"); propertyMap.addAnnotationIfNew(new OJAnnotationValue(new OJPathName("java.lang.SuppressWarnings"), "unchecked")); tryS.getTryPart().addToLocals(propertyMap); tryS.getTryPart().addToStatements("fromJson(propertyMap)"); tryS.setCatchParam(new OJParameter("e", new OJPathName("java.lang.Exception"))); tryS.getCatchPart().addToStatements("throw new RuntimeException(e)"); fromJson.getBody().addToStatements(tryS); }
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); }
private void addGetRootObjectRepresentation(Model model, OJAnnotatedClass annotatedClass) { OJAnnotatedOperation get = new OJAnnotatedOperation("get", UmlgRestletGenerationUtil.Representation); get.addToThrows(UmlgRestletGenerationUtil.ResourceException); annotatedClass.addToImports(UmlgRestletGenerationUtil.ResourceException); UmlgGenerationUtil.addOverrideAnnotation(get); OJField json = new OJField("json", new OJPathName("java.lang.StringBuilder")); json.setInitExp("new StringBuilder()"); get.getBody().addToLocals(json); get.getBody().addToStatements("json.append(\"[{\\\"data\\\": [{\\\"name\\\": \\\"APP\\\"}]\")"); get.getBody().addToStatements("json.append(\", \\\"meta\\\": \")"); get.getBody().addToStatements("json.append(\"{\\\"qualifiedName\\\": \\\"" + model.getQualifiedName() + "\\\"\")"); get.getBody().addToStatements("json.append(\"}}]\")"); get.getBody().addToStatements("return new " + UmlgRestletGenerationUtil.JsonRepresentation.getLast() + "(json.toString())"); annotatedClass.addToImports(UmlgRestletGenerationUtil.JsonRepresentation); annotatedClass.addToOperations(get); }
private void addGetAllInstancesForAbstractClass(Classifier classifier, OJAnnotatedClass metaClass) { OJAnnotatedOperation allInstances = new OJAnnotatedOperation("getAllInstances"); UmlgGenerationUtil.addOverrideAnnotation(allInstances); OJPathName classPathName = UmlgClassOperations.getPathName(classifier); allInstances.setReturnType(UmlgGenerationUtil.umlgSet.getCopy().addToGenerics(classPathName)); OJField resultField = new OJField("result", UmlgGenerationUtil.umlgMemorySet.getCopy().addToGenerics(classPathName)); resultField.setInitExp("new " + UmlgGenerationUtil.umlgMemorySet.getCopy().addToGenerics(classPathName).getLast() + "()"); allInstances.getBody().addToLocals(resultField); Set<Classifier> concreteImplementations = UmlgClassOperations.getConcreteRealization(classifier); for (Classifier concreteImplementation : concreteImplementations) { allInstances.getBody().addToStatements("result.addAll(" + UmlgClassOperations.getMetaClassName(concreteImplementation) + ".getInstance().getAllInstances())"); metaClass.addToImports(UmlgClassOperations.getMetaClassPathName(concreteImplementation)); } allInstances.getBody().addToStatements("return result"); metaClass.addToImports(UmlgGenerationUtil.UMLG_NODE); metaClass.addToOperations(allInstances); }
public static void addGetBooleanProperties(OJAnnotatedClass annotatedClass, Classifier classifier) { OJAnnotatedOperation booleanProperties = new OJAnnotatedOperation(BOOLEAN_PROPERTIES); booleanProperties.setReturnType(new OJPathName("java.util.Set").addToGenerics(UmlgGenerationUtil.umlgRuntimePropertyPathName.getCopy())); annotatedClass.addToImports("java.util.HashSet"); UmlgGenerationUtil.addOverrideAnnotation(booleanProperties); annotatedClass.addToOperations(booleanProperties); OJAnnotatedField result = new OJAnnotatedField("result", booleanProperties.getReturnType()); booleanProperties.getBody().addToLocals(result); if (!classifier.getGeneralizations().isEmpty()) { result.setInitExp("super." + BOOLEAN_PROPERTIES + "()"); } else { result.setInitExp("new HashSet<" + UmlgGenerationUtil.umlgRuntimePropertyPathName.getCopy() + ">()"); } for (Property p : UmlgClassOperations.getAllOwnedProperties(classifier)) { PropertyWrapper pWrap = new PropertyWrapper(p); if (!(pWrap.isDerived() || pWrap.isDerivedUnion()) && !(pWrap.isRefined()) && (!(classifier instanceof Enumeration && pWrap.getType() instanceof DataType)) && pWrap.isOne() && pWrap.isBoolean()) { String propertyRuntimeEnumName = UmlgClassOperations.propertyEnumName(classifier) + "." + pWrap.fieldname(); OJSimpleStatement addBooleanStatement = new OJSimpleStatement("result.add(" + propertyRuntimeEnumName + ")"); booleanProperties.getBody().addToStatements(addBooleanStatement); } } booleanProperties.getBody().addToStatements("return result"); }
private void addGetAllInstancesWithFilterForAbstractClass(Classifier classifier, OJAnnotatedClass metaClass) { OJAnnotatedOperation allInstances = new OJAnnotatedOperation("getAllInstances"); allInstances.addToParameters(new OJParameter("filter", UmlgGenerationUtil.Filter)); UmlgGenerationUtil.addOverrideAnnotation(allInstances); OJPathName classPathName = UmlgClassOperations.getPathName(classifier); allInstances.setReturnType(UmlgGenerationUtil.umlgSet.getCopy().addToGenerics(classPathName)); OJField resultField = new OJField("result", UmlgGenerationUtil.umlgMemorySet.getCopy().addToGenerics(classPathName)); resultField.setInitExp("new " + UmlgGenerationUtil.umlgMemorySet.getCopy().addToGenerics(classPathName).getLast() + "()"); allInstances.getBody().addToLocals(resultField); Set<Classifier> concreteImplementations = UmlgClassOperations.getConcreteRealization(classifier); for (Classifier concreteImplementation : concreteImplementations) { allInstances.getBody().addToStatements("result.addAll(" + UmlgClassOperations.getMetaClassName(concreteImplementation) + ".getInstance().getAllInstances())"); metaClass.addToImports(UmlgClassOperations.getMetaClassPathName(concreteImplementation)); } allInstances.getBody().addToStatements("return result"); metaClass.addToImports(UmlgGenerationUtil.UMLG_NODE); metaClass.addToOperations(allInstances); }
private void addAllInstances(Classifier classifier, OJAnnotatedInterface interfaze) { OJAnnotatedOperation allInstances = new OJAnnotatedOperation("allInstances"); allInstances.setStatic(true); OJPathName classPathName = UmlgClassOperations.getPathName(classifier); allInstances.setReturnType(UmlgGenerationUtil.umlgSet.getCopy().addToGenerics("? extends " + classPathName.getLast())); OJField resultField = new OJField("result", UmlgGenerationUtil.umlgMemorySet.getCopy().addToGenerics(classPathName)); resultField.setInitExp("new " + UmlgGenerationUtil.umlgMemorySet.getCopy().addToGenerics(classPathName).getLast() + "()"); allInstances.getBody().addToLocals(resultField); Set<Classifier> concreteImplementations = UmlgClassOperations.getConcreteRealization(classifier); for (Classifier concreteImplementation : concreteImplementations) { allInstances.getBody().addToStatements("result.addAll(" + UmlgGenerationUtil.UMLGAccess + ".allInstances(" + UmlgClassOperations.getPathName(concreteImplementation).getLast() + ".class.getName()))"); interfaze.addToImports(UmlgClassOperations.getPathName(concreteImplementation)); } allInstances.getBody().addToStatements("return result"); interfaze.addToImports(UmlgGenerationUtil.UMLGPathName); interfaze.addToImports(UmlgGenerationUtil.UMLG_NODE); interfaze.addToOperations(allInstances); }
private void generateQualifierGetter(OJAnnotatedClass ojClass, PropertyWrapper qualified) { OJAnnotatedOperation qualifierGetter = new OJAnnotatedOperation(qualified.getQualifiedGetterName()); qualifierGetter.addParam("context", qualified.getQualifierContextPathName()); ojClass.addToOperations(qualifierGetter); OJField result = new OJField(); result.setName("result"); result.setType(new OJPathName("java.util.List")); result.getType().addToElementTypes(UmlgGenerationUtil.UmlgQualifierPathName); result.setInitExp("new ArrayList<>()"); ojClass.addToImports("java.util.ArrayList"); qualifierGetter.setReturnType(result.getType()); qualifierGetter.getBody().addToLocals(result); buildUMLGQualifier(ojClass, qualified, qualifierGetter); List<Property> refinedQualifiers = qualified.getRefinedQualifieds(); for (Property refinedQualifier : refinedQualifiers) { buildUMLGQualifier(ojClass, new PropertyWrapper(refinedQualifier), qualifierGetter); } qualifierGetter.getBody().addToStatements("return result"); ojClass.addToImports(UmlgGenerationUtil.UmlgQualifierIdFactory); ojClass.addToImports(UmlgGenerationUtil.UmlgQualifierPathName); ojClass.addToImports(UmlgGenerationUtil.umlgMultiplicityPathName); }
private void addPutResource(PropertyWrapper pWrap, OJAnnotatedClass annotatedClass, OJPathName parentPathName) { OJAnnotatedOperation put = new OJAnnotatedOperation("put"); put.setVisibility(OJVisibilityKind.PRIVATE); 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.javaBaseTypePath().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.javaBaseTypePath().getLast())); baseTumlClass.setInitExp("childResource.getClass()"); secondBlock.addToLocals(baseTumlClass); put.getBody().addToStatements(secondBlock); }
private void addAllInstancesWithFilter(Classifier classifier, OJAnnotatedClass interfaze) { OJAnnotatedOperation allInstances = new OJAnnotatedOperation("allInstances"); allInstances.addToParameters(new OJParameter("filter", UmlgGenerationUtil.Filter)); allInstances.setStatic(true); OJPathName classPathName = UmlgClassOperations.getPathName(classifier); allInstances.setReturnType(UmlgGenerationUtil.umlgSet.getCopy().addToGenerics("? extends " + classPathName.getLast())); OJField resultField = new OJField("result", UmlgGenerationUtil.umlgMemorySet.getCopy().addToGenerics(classPathName)); resultField.setInitExp("new " + UmlgGenerationUtil.umlgMemorySet.getCopy().addToGenerics(classPathName).getLast() + "()"); allInstances.getBody().addToLocals(resultField); Set<Classifier> concreteImplementations = UmlgClassOperations.getConcreteRealization(classifier); for (Classifier concreteImplementation : concreteImplementations) { allInstances.getBody().addToStatements("result.addAll(" + UmlgGenerationUtil.UMLGAccess + ".allInstances(" + UmlgClassOperations.getPathName(concreteImplementation).getLast() + ".class.getName(), filter))"); interfaze.addToImports(UmlgClassOperations.getPathName(concreteImplementation)); } allInstances.getBody().addToStatements("return result"); interfaze.addToImports(UmlgGenerationUtil.UMLGPathName); interfaze.addToImports(UmlgGenerationUtil.UMLG_NODE); interfaze.addToOperations(allInstances); }
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); }
metaClass.addToOperations(INSTANCE); OJField result = new OJField("result", metaClass.getPathName()); INSTANCE.getBody().addToLocals(result);