Ejemplo n.º 1
0
 protected String calculateDefaultValue(OJAnnotatedClass test, OJBlock block, Property f) {
   String value = calculateDefaultValue(f);
   if (EmfClassifierUtil.isSimpleType(f.getType())) {
     DataType baseType = (DataType) f.getType();
     test.addToImports(ojUtil.classifierPathname(baseType));
     if (EmfClassifierUtil.hasStrategy(baseType, TestModelValueStrategy.class)) {}
   } else if (f.getType() instanceof Enumeration) {
     OJAnnotatedClass javaType = findJavaClass((Classifier) f.getType());
     test.addToImports(javaType.getPathName());
   } else if (getConcreteImplementations((Interface) f.getType()).size() > 0) {
     return lookup(test, f);
   }
   return value;
 }
 @Override
 protected void implementEventConsumer(
     Behavior behavior, OJAnnotatedClass ojBehavior, ElementsWaitingForEvent eventActions) {
   OJAnnotatedOperation eventConsumer =
       super.createEventConsumerSignature(behavior, ojBehavior, eventActions.getEvent());
   OJForStatement forEachToken =
       new OJForStatement("token", ActivityProcessImplementor.ACTIVITY_TOKEN, "getTokens()");
   eventConsumer.getBody().addToStatements(forEachToken);
   for (NamedElement waitingNode : eventActions.getWaitingNodes()) {
     AcceptEventAction action = (AcceptEventAction) waitingNode;
     OJPathName waitingClass = ojUtil.classifierPathname(action);
     ojBehavior.addToImports(waitingClass);
     if (EmfActivityUtil.getAllEffectiveIncoming(action).isEmpty()) {
       // TODO check if the activityNodeContainer of this action is active and create a new token
     } else {
       String condition =
           "result==false && token.isActive() && token.getCurrentExecutionElement() instanceof "
               + waitingClass.getName();
       OJIfStatement ifMatchFound = new OJIfStatement(condition);
       forEachToken.getBody().addToStatements(ifMatchFound);
       OJAnnotatedField stateActivation = new OJAnnotatedField("state", waitingClass);
       stateActivation.setInitExp(
           "(" + waitingClass.getName() + ")token.getCurrentExecutionElement()");
       ifMatchFound.getThenPart().addToLocals(stateActivation);
       for (ActivityEdge transition : action.getOutgoings()) {
         OJPathName tpn = ojUtil.classifierPathname(transition);
         OJIfStatement ifAccept =
             new OJIfStatement(
                 "result==false &&  get"
                     + tpn.getLast()
                     + "()."
                     + OperationAnnotator.delegateParameters(eventConsumer));
         ifMatchFound.getThenPart().addToStatements(ifAccept);
         ifAccept.getThenPart().addToStatements("result=true");
         ifAccept.getThenPart().addToStatements("break");
         break;
       }
     }
   }
 }
 @VisitBefore(matchSubclasses = true)
 public void visitActivity(Activity activity) {
   if (EmfBehaviorUtil.isProcess(activity)) {
     OJAnnotatedClass activityClass = findJavaClass(activity);
     super.implementEventConsumption(activityClass, activity, getEventActions(activity));
     for (ActivityNode n : EmfActivityUtil.getActivityNodesRecursively(activity)) {
       if (n instanceof AcceptCallAction) {
         AcceptCallAction acc = (AcceptCallAction) n;
         Operation no = EmfActionUtil.getOperation(acc);
         OperationMap map = ojUtil.buildOperationMap(no);
         OJAnnotatedOperation oper =
             operationAnnotator.findOrCreateOperation(activity, activityClass, map, true);
         OJBlock mainBlock = oper.getBody();
         if (EmfBehaviorUtil.hasExecutionInstance(no)) {
           PropertyMap actionMap = ojUtil.buildStructuralFeatureMap(acc);
           final String EXECUTE_STATEMENT = "executeStatement";
           oper.getBody()
               .removeFromStatements(oper.getBody().findStatementRecursive(EXECUTE_STATEMENT));
           mainBlock.addToStatements(actionMap.setter() + "(result)");
         } else {
           for (OutputPin pin : acc.getResults()) {
             PropertyMap pinMap = ojUtil.buildStructuralFeatureMap(pin);
             PropertyMap parameterMap =
                 ojUtil.buildStructuralFeatureMap(EmfActionUtil.getLinkedTypedElement(pin));
             mainBlock.addToStatements(pinMap.setter() + "(" + parameterMap.fieldname() + ")");
           }
         }
         if (!EmfBehaviorUtil.hasExecutionInstance(no)) {
           for (InputPin pin : EmfActionUtil.getReplyAction(acc).getReplyValues()) {
             if (((Parameter) EmfActionUtil.getLinkedTypedElement(pin)).getDirection()
                 == ParameterDirectionKind.RETURN_LITERAL) {
               Jbpm5ObjectNodeExpressor expressor = new Jbpm5ObjectNodeExpressor(ojUtil);
               mainBlock.addToStatements(
                   "result=" + expressor.expressInputPinOrOutParamOrExpansionNode(mainBlock, pin));
             }
           }
         }
         if (!activity.conformsTo((Classifier) no.getOwner())
             && activity.getContext() != null
             && activity.getContext().conformsTo((Classifier) no.getOwner())) {
           // TODO find the right activity and delegate to it
         }
       } else if (EmfActionUtil.isEmbeddedTask(n)) {
         Action t = (Action) n;
         String stereotypeName =
             n instanceof OpaqueAction
                 ? StereotypeNames.EMBEDDED_SINGLE_SCREEN_TASK
                 : StereotypeNames.EMBEDDED_SCREEN_FLOW_TASK;
         for (TimeEvent d :
             getLibrary().getResponsibilityDefinition(t, stereotypeName).getDeadlines()) {
           OJPathName date = ojUtil.classifierPathname(getLibrary().getDateType());
           OJPathName task = ojUtil.classifierPathname(t);
           String consumerName = eventUtil.getEventConsumerName(d);
           OJOperation findOperation =
               activityClass.findOperation(consumerName, Arrays.asList(date, task));
           if (findOperation == null) {
             findOperation = new OJAnnotatedOperation(consumerName, new OJPathName("boolean"));
             activityClass.addToOperations(findOperation);
             findOperation.addParam("date", date);
             findOperation.addParam("task", task);
             findOperation.getBody().addToStatements("return false");
           }
         }
       }
     }
   }
 }
Ejemplo n.º 4
0
 protected String lookup(OJAnnotatedClass test, Property f) {
   OJPathName featureTest = getTestDataPath((Classifier) f.getType());
   test.addToImports(featureTest);
   return lookup(f);
 }