private void storeArguments(OJIfStatement ifTokenFound, AcceptEventAction aea) {
   List<OutputPin> result = aea.getResults();
   Jbpm5ObjectNodeExpressor expressor = new Jbpm5ObjectNodeExpressor(ojUtil);
   for (int i = 0; i < result.size(); i++) {
     OutputPin argument = result.get(i);
     PropertyMap pinMap = ojUtil.buildStructuralFeatureMap(argument);
     TypedElement parm = EmfActionUtil.getLinkedTypedElement(argument);
     if (parm == null) {
       String param = "unknown";
       if (EmfActionUtil.acceptsDeadline(aea)) {
         param = i == 1 ? "source.getTaskRequest()" : "triggerDate";
       } else if (EmfEventUtil.containsTriggerType(aea, TimeEvent.class)) {
         param = "triggerDate";
       }
       ifTokenFound.getThenPart().addToStatements(expressor.storeResults(pinMap, param, false));
     } else {
       PropertyMap parmMap = ojUtil.buildStructuralFeatureMap(parm);
       String expression = parmMap.fieldname();
       if (parm instanceof Property) {
         // signal
         expression = "signal." + parmMap.getter() + "()";
       }
       ifTokenFound
           .getThenPart()
           .addToStatements(expressor.storeResults(pinMap, expression, parmMap.isMany()));
     }
   }
 }
 private OJBlock checkWeight(OJOperation operationContext, OJBlock block, ActivityNode node) {
   StringBuilder sb = new StringBuilder();
   // Check if all weights have been satisfied
   // NB!! the weight logic only makes sense on AcceptEventActions. This is the only place where
   // outputpin value count equates to
   // weight. Everywhere else it is impossible to determine weight. In other places it could also
   // lead to stuck contractedProcesses
   // TODO implement validation
   for (ActivityEdge edge : EmfActivityUtil.getDefaultOutgoing(node)) {
     if (edge.getSource() instanceof OutputPin) {
       PropertyMap map = ojUtil.buildStructuralFeatureMap((OutputPin) edge.getSource());
       if (edge.getWeight() != null) {
         if (map.isCollection()) {
           Classifier integerType = getLibrary().getIntegerType();
           if (edge.getWeight() != null) {}
           String weight =
               valueSpecificationUtil.expressValue(
                   operationContext,
                   edge.getWeight(),
                   EmfActivityUtil.getContainingActivity(edge.getSource()),
                   integerType);
           if (sb.length() > 0) {
             sb.append(" && ");
           }
           sb.append(map.getter() + "().size()>=" + weight);
         } else {
           // would not make sense - ignore
         }
       }
     }
   }
   if (sb.length() > 0) {
     OJIfStatement ifStatement = new OJIfStatement();
     block.addToStatements(ifStatement);
     ifStatement.setCondition(sb.toString());
     block = ifStatement.getThenPart();
   }
   return block;
 }
 @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");
           }
         }
       }
     }
   }
 }