예제 #1
0
  private void addControlFlowModel(
      ArtifactFragment parent,
      Resource instanceRes,
      Resource modelRes,
      Map<Resource, ArtifactFragment> instanceRes2AFMap,
      ReloRdfRepository repo,
      DiagramModel diagramModel)
      throws Exception {

    Statement cfLabelStmt = repo.getStatement(modelRes, RSECore.name, null);
    Statement cfType = repo.getStatement(modelRes, RSECore.controlFlowName, null);

    ControlFlowModel cfModel = null;
    String cfTypeString = cfType.getObject().toString();
    if (cfTypeString.equals(RSECore.ifBlock.toString())) {
      cfModel = new IfBlockModel(diagramModel, cfLabelStmt.getObject().toString());

      ((IfBlockModel) cfModel)
          .addElseIfStmts(
              cfTypeString,
              getListOfConditionalStatements(
                  RSECore.ifStmt, modelRes, instanceRes, instanceRes2AFMap, repo));
      ((IfBlockModel) cfModel)
          .setElseStmts(
              getListOfConditionalStatements(
                  RSECore.elseStmt, modelRes, instanceRes, instanceRes2AFMap, repo));
      ((IfBlockModel) cfModel)
          .setThenStmts(
              getListOfConditionalStatements(
                  RSECore.thenStmt, modelRes, instanceRes, instanceRes2AFMap, repo));
    } else if (cfTypeString.equals(RSECore.loopBlock.toString())) {
      cfModel = new LoopBlockModel(diagramModel, cfLabelStmt.getObject().toString());
      ((LoopBlockModel) cfModel)
          .setLoopStmts(
              getListOfConditionalStatements(
                  RSECore.loopStmt, modelRes, instanceRes, instanceRes2AFMap, repo));
    } else if (cfTypeString.equals(RSECore.userControlBlock.toString())) {
      cfModel = new UserCreatedControlFlowModel(diagramModel, cfLabelStmt.getObject().toString());
      ((UserCreatedControlFlowModel) cfModel)
          .setStatements(
              getListOfConditionalStatements(
                  RSECore.conditionalStmt, modelRes, instanceRes, instanceRes2AFMap, repo));
    }

    if (parent instanceof DiagramModel) {
      diagramModel.addChildToConditionalLayer(cfModel);
    } else if (parent instanceof ControlFlowModel) {
      ((ControlFlowModel) parent).addInnerConditionalModel(cfModel);
      cfModel.setOuterConditionalModel((ControlFlowModel) parent);
      diagramModel.firePropertyChange(NodeModel.PROPERTY_CONDITIONAL_CHILDREN, null, cfModel);
    }

    StatementIterator containeeIter = repo.getStatements(modelRes, RSECore.contains, null);
    while (containeeIter.hasNext()) {
      Value obj = containeeIter.next().getObject();
      if (!(obj instanceof Resource)
          || repo.getStatement((Resource) obj, RSECore.model, null) == null)
        throw new Exception(
            "Child resource not found for parent resource: " + instanceRes.toString());

      Resource childInstanceRes = (Resource) obj;

      addControlFlowModel(
          cfModel, instanceRes, childInstanceRes, instanceRes2AFMap, repo, diagramModel);
    }
    //			if(instanceModel!=null)
    //				instanceModel.setInstanceRes(instanceRes);
    //			else
    //				logger.error("Could not create Instance model for resource: " + detailsRes.toString());
  }