/** 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() { OJParameter result = new OJParameter(); this.copyInfoInto(result); return result; }
public OJParameter getDeepCopy() { OJParameter result = new OJParameter(); this.copyDeepInfoInto(result); return result; }
public List<OJParameter> getOJParametersExceptReturn() { List<OJParameter> result = new ArrayList<OJParameter>(); for (Parameter parameter : UmlgOperationOperations.getParametersExceptReturn(this.operation)) { result.add(new OJParameter(parameter.getName(), UmlgClassOperations.getPathName(parameter.getType()))); } return result; }
/****************************************************** * The following operations are the implementations of the operations defined for this classifier. *******************************************************/ public void addParam(String name,OJPathName type){ OJParameter param = new OJParameter(); param.setName(name); param.setType(type); this.addToParameters(param); } public void addParam(String name,String type){
private void createCopyOnePrimitivePropertiesToEdge(OJAnnotatedClass annotatedClass, Class clazz) { OJAnnotatedOperation copyOnePrimitivePropertiesToEdge = new OJAnnotatedOperation("z_internalCopyOnePrimitivePropertiesToEdge"); UmlgGenerationUtil.addOverrideAnnotation(copyOnePrimitivePropertiesToEdge); copyOnePrimitivePropertiesToEdge.addToParameters(new OJParameter("edge", UmlgGenerationUtil.edgePathName)); annotatedClass.addToOperations(copyOnePrimitivePropertiesToEdge); }
private void addDeleteResource(PropertyWrapper pWrap, OJAnnotatedClass annotatedClass, OJPathName parentPathName) { OJAnnotatedOperation delete = new OJAnnotatedOperation("delete"); delete.setVisibility(OJVisibilityKind.PRIVATE); annotatedClass.addToOperations(delete); annotatedClass.addToImports(pWrap.javaBaseTypePath()); if (pWrap.isComposite()) { delete.addToParameters(new OJParameter("propertyMap", new OJPathName("java.util.Map").addToGenerics("String").addToGenerics("Object"))); delete.getBody().addToStatements("Object id = propertyMap.get(\"id\")"); delete.getBody().addToStatements(pWrap.javaBaseTypePath().getLast() + " childResource = " + UmlgGenerationUtil.UMLGAccess + "." + UmlgGenerationUtil.getEntity + "(id)"); delete.getBody().addToStatements("childResource.delete()"); } else { delete.addToParameters(new OJParameter("parentResource", parentPathName)); delete.addToParameters(new OJParameter("propertyMap", new OJPathName("java.util.Map").addToGenerics("String").addToGenerics("Object"))); delete.getBody().addToStatements("Object id = propertyMap.get(\"id\")"); delete.getBody().addToStatements(pWrap.javaBaseTypePath().getLast() + " childResource = " + UmlgGenerationUtil.UMLGAccess + "." + UmlgGenerationUtil.getEntity + "(id)"); delete.getBody().addToStatements("parentResource." + pWrap.remover() + "(childResource)"); } }
private void addDeleteResource(PropertyWrapper pWrap, OJAnnotatedClass annotatedClass, OJPathName parentPathName) { OJAnnotatedOperation delete = new OJAnnotatedOperation("delete"); delete.setVisibility(OJVisibilityKind.PRIVATE); annotatedClass.addToOperations(delete); annotatedClass.addToImports(pWrap.javaBaseTypePath()); if (pWrap.isComposite()) { delete.addToParameters(new OJParameter("propertyMap", new OJPathName("java.util.Map").addToGenerics("String").addToGenerics("Object"))); delete.getBody().addToStatements("Object id = propertyMap.get(\"id\")"); delete.getBody().addToStatements(pWrap.javaBaseTypePath().getLast() + " childResource = " + UmlgGenerationUtil.UMLGAccess + "." + UmlgGenerationUtil.getEntity + "(id)"); delete.getBody().addToStatements("childResource.delete()"); } else { delete.addToParameters(new OJParameter("parentResource", parentPathName)); delete.addToParameters(new OJParameter("propertyMap", new OJPathName("java.util.Map").addToGenerics("String").addToGenerics("Object"))); delete.getBody().addToStatements("Object id = propertyMap.get(\"id\")"); delete.getBody().addToStatements(pWrap.javaBaseTypePath().getLast() + " childResource = " + UmlgGenerationUtil.UMLGAccess + "." + UmlgGenerationUtil.getEntity + "(id)"); delete.getBody().addToStatements("parentResource." + pWrap.remover() + "(childResource)"); } }
/** * Wraps the source expression in a try catch block. If * OclIsInvalidException is caught return true else false */ @Override public String handleOperationExp(OperationCallExp<Classifier, Operation> oc, String sourceResult, List<String> argumentResults) { if (!argumentResults.isEmpty()) { throw new IllegalStateException("oclIsInvalid operation can not have arguments!"); } String operationName = oc.getReferredOperation().getName(); OJAnnotatedOperation oper = new OJAnnotatedOperation(operationName + this.ojClass.countOperationsStartingWith(operationName), new OJPathName("Boolean")); this.ojClass.addToOperations(oper); oper.setVisibility(OJVisibilityKind.PRIVATE); OJTryStatement ojTryStatement = new OJTryStatement(); ojTryStatement.getTryPart().addToStatements("return " + sourceResult + " == null"); // ojTryStatement.getTryPart().addToStatements("return false"); ojTryStatement.setCatchParam(new OJParameter("e", UmlgGenerationUtil.umlgOclIsInvalidException.getCopy())); this.ojClass.addToImports(UmlgGenerationUtil.umlgOclIsInvalidException.getCopy()); ojTryStatement.getCatchPart().addToStatements("return true"); oper.getBody().addToStatements(ojTryStatement); return oper.getName() + "()"; // return ojTryStatement.toJavaString(); } }
private void addDeleteResource(Classifier classifier, OJAnnotatedClass annotatedClass) { OJAnnotatedOperation delete = new OJAnnotatedOperation("delete"); delete.setVisibility(OJVisibilityKind.PRIVATE); delete.addToParameters(new OJParameter("propertyMap", new OJPathName("java.util.Map").addToGenerics("String").addToGenerics("Object"))); annotatedClass.addToOperations(delete); delete.getBody().addToStatements("Object id = propertyMap.get(\"id\")"); delete.getBody().addToStatements( UmlgClassOperations.getPathName(classifier).getLast() + " childResource = " + UmlgGenerationUtil.UMLGAccess + "." + UmlgGenerationUtil.getEntity + "(id)"); annotatedClass.addToImports(UmlgClassOperations.getPathName(classifier)); delete.getBody().addToStatements("childResource.delete()"); }
private void addPutResource(Classifier classifier, 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); put.getBody().addToStatements("Object id = propertyMap.get(\"id\")"); put.getBody().addToStatements( UmlgClassOperations.getPathName(classifier).getLast() + " childResource = " + UmlgGenerationUtil.UMLGAccess + "." + UmlgGenerationUtil.getEntity + "(id)"); annotatedClass.addToImports(UmlgClassOperations.getPathName(classifier)); put.getBody().addToStatements("childResource.fromJson(propertyMap)"); }
private void addDeleteResource(Classifier classifier, OJAnnotatedClass annotatedClass, OJPathName parentPathName) { OJAnnotatedOperation delete = new OJAnnotatedOperation("delete"); delete.setVisibility(OJVisibilityKind.PRIVATE); delete.addToParameters(new OJParameter("propertyMap", new OJPathName("java.util.Map").addToGenerics("String").addToGenerics("Object"))); annotatedClass.addToOperations(delete); delete.getBody().addToStatements("Object id = propertyMap.get(\"id\")"); delete.getBody().addToStatements( UmlgClassOperations.getPathName(classifier).getLast() + " childResource = " + UmlgGenerationUtil.UMLGAccess + "." + UmlgGenerationUtil.getEntity + "(id)"); annotatedClass.addToImports(UmlgClassOperations.getPathName(classifier)); delete.getBody().addToStatements("childResource.delete()"); }
private void addPostResource(Classifier concreteClassifier, OJAnnotatedClass annotatedClass, OJPathName parentPathName) { OJAnnotatedOperation add = new OJAnnotatedOperation("add"); add.setComment("This method adds a single new instance. If and id already exist it passes the existing id back as a tmpId"); add.setVisibility(OJVisibilityKind.PRIVATE); add.addToParameters(new OJParameter("propertyMap", new OJPathName("java.util.Map").addToGenerics("String").addToGenerics("Object"))); annotatedClass.addToOperations(add); add.getBody().addToStatements(UmlgClassOperations.getPathName(concreteClassifier).getLast() + " childResource = new " + UmlgClassOperations.getPathName(concreteClassifier).getLast() + "(true)"); annotatedClass.addToImports(UmlgClassOperations.getPathName(concreteClassifier)); add.getBody().addToStatements("childResource.fromJson(propertyMap)"); }
private void addPutResource(Classifier classifier, OJAnnotatedClass annotatedClass) { OJAnnotatedOperation put = new OJAnnotatedOperation("put", UmlgGenerationUtil.UMLG_NODE); put.setVisibility(OJVisibilityKind.PRIVATE); put.addToParameters(new OJParameter("propertyMap", new OJPathName("java.util.Map").addToGenerics("String").addToGenerics("Object"))); annotatedClass.addToOperations(put); put.getBody().addToStatements("Object id = propertyMap.get(\"id\")"); put.getBody().addToStatements( UmlgClassOperations.getPathName(classifier).getLast() + " childResource = " + UmlgGenerationUtil.UMLGAccess + "." + UmlgGenerationUtil.getEntity + "(id)"); annotatedClass.addToImports(UmlgClassOperations.getPathName(classifier)); put.getBody().addToStatements("childResource.fromJson(propertyMap)"); // put.getBody().addToStatements("return childResource.toJsonWithoutCompositeParent()"); put.getBody().addToStatements("return childResource"); }
private void addPostResource(Classifier concreteClassifier, OJAnnotatedClass annotatedClass) { OJAnnotatedOperation add = new OJAnnotatedOperation("add", UmlgGenerationUtil.UMLG_NODE); add.setComment("This method adds a single new instance. If and id already exist it passes the existing id back as a tmpId"); add.setVisibility(OJVisibilityKind.PRIVATE); add.addToParameters(new OJParameter("propertyMap", new OJPathName("java.util.Map").addToGenerics("String").addToGenerics("Object"))); annotatedClass.addToOperations(add); add.getBody().addToStatements(UmlgClassOperations.getPathName(concreteClassifier).getLast() + " childResource = new " + UmlgClassOperations.getPathName(concreteClassifier).getLast() + "(true)"); annotatedClass.addToImports(UmlgClassOperations.getPathName(concreteClassifier)); add.getBody().addToStatements("childResource.fromJson(propertyMap)"); add.getBody().addToStatements("return childResource"); // add.getBody().addToStatements("String jsonResult = childResource.toJsonWithoutCompositeParent(true)"); // add.getBody().addToStatements("return jsonResult"); }
/** * Wraps the source expression in a try catch block. If * OclIsInvalidException is caught return true else false */ @Override public String handleOperationExp(OperationCallExp<Classifier, Operation> oc, String sourceResult, List<String> argumentResults) { if (!argumentResults.isEmpty()) { throw new IllegalStateException("oclIsUndefined operation can not have arguments!"); } String operationName = oc.getReferredOperation().getName(); Type sourceType = oc.getSource().getType(); OJAnnotatedOperation oper = new OJAnnotatedOperation(operationName + this.ojClass.countOperationsStartingWith(operationName), new OJPathName("Boolean")); if (!(sourceType instanceof PrimitiveType) && !(sourceType instanceof Enumeration) && sourceType instanceof DataType) { oper.addParam(StringUtils.uncapitalize(sourceType.getName()), DataTypeEnum.getPathNameFromDataType((DataType) sourceType)); } else if (sourceType instanceof PrimitiveType) { oper.addParam(StringUtils.uncapitalize(sourceType.getName()), UmlgPropertyOperations.umlPrimitiveTypeToJava(sourceType)); } else { oper.addParam(StringUtils.uncapitalize(sourceType.getName()), UmlgClassOperations.getPathName(sourceType)); } this.ojClass.addToOperations(oper); oper.setVisibility(OJVisibilityKind.PRIVATE); OJTryStatement ojTryStatement = new OJTryStatement(); ojTryStatement.getTryPart().addToStatements("return " + StringUtils.uncapitalize(sourceType.getName()) + " == null"); ojTryStatement.setCatchParam(new OJParameter("e", UmlgGenerationUtil.umlgOclIsInvalidException.getCopy())); this.ojClass.addToImports(UmlgGenerationUtil.umlgOclIsInvalidException.getCopy()); ojTryStatement.getCatchPart().addToStatements("return true"); oper.getBody().addToStatements(ojTryStatement); return oper.getName() + "(" + sourceResult + ")"; } }
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 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 addGetMetaClassForQualifiedName(OJAnnotatedClass root) { OJAnnotatedOperation getMetaClassForQualifiedName = new OJAnnotatedOperation("getMetaClassForQualifiedName", UmlgGenerationUtil.UmlgMetaNode.getLast()); getMetaClassForQualifiedName.addToParameters(new OJParameter("qualifiedName", "String")); getMetaClassForQualifiedName.addAnnotationIfNew(new OJAnnotationValue(new OJPathName("java.lang.Override"))); root.addToOperations(getMetaClassForQualifiedName); root.addToImports(UmlgGenerationUtil.UmlgMetaNode); OJSwitchStatement ojSwitchStatement = new OJSwitchStatement(); ojSwitchStatement.setCondition("qualifiedName"); for (Class clazz : ModelLoader.INSTANCE.getAllConcreteClasses()) { OJSwitchCase ojSwitchCase = new OJSwitchCase(); ojSwitchCase.setLabel("\"" + clazz.getQualifiedName() + "\""); ojSwitchCase.getBody().addToStatements("return get" + UmlgClassOperations.getMetaClassPathName(clazz).getLast() + "()"); ojSwitchCase.setBreakInCase(false); ojSwitchStatement.addToCases(ojSwitchCase); } OJSwitchCase ojSwitchCase = new OJSwitchCase(); ojSwitchCase.getBody().addToStatements("throw new IllegalArgumentException(\"Unknown qualified name: \" + qualifiedName + \"!\")"); ojSwitchStatement.setDefCase(ojSwitchCase); getMetaClassForQualifiedName.getBody().addToStatements(ojSwitchStatement); }
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 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); }