public static NodeModel createAddNodeAndRelCommand(
      DiagramEditPart diagramController,
      Artifact art,
      NodeModel mostRecentNavigation,
      int mostRecentLineNumber,
      Object selElement,
      CompoundCommand command) {
    DiagramModel diagram = (DiagramModel) diagramController.getModel();
    Resource resToAdd = art.elementRes;
    IJavaElement selectedElt = null;
    if (selElement instanceof IJavaElement) selectedElt = (IJavaElement) selElement;

    ReloRdfRepository repo = StoreUtil.getDefaultStoreRepository();
    IJavaElement elmtToAdd =
        selectedElt != null ? selectedElt : RJCore.resourceToJDTElement(repo, resToAdd);
    NodeModel addedNode = null;

    if (IJavaElement.TYPE == elmtToAdd.getElementType()) {
      addedNode =
          InstanceUtil.findOrCreateContainerInstanceModel(
              null, InstanceUtil.getClassName(resToAdd, repo), resToAdd, diagram, -1, command);
    } else if (elmtToAdd instanceof IMethod && elmtToAdd.getParent() instanceof IType) {
      if (mostRecentNavigation instanceof MethodBoxModel) {
        addMethodModelsAndConns(
            addedNode, resToAdd, mostRecentNavigation, mostRecentLineNumber, diagram, command);
      }
      if (addedNode == null) {
        IType containerClass = (IType) elmtToAdd.getParent();
        Resource classRes = RJCore.jdtElementToResource(repo, containerClass);
        InstanceModel instance =
            InstanceUtil.findOrCreateContainerInstanceModel(
                null, InstanceUtil.getClassName(classRes, repo), classRes, diagram, -1, command);

        IMethod method = (IMethod) elmtToAdd;
        addedNode = MethodUtil.findOrCreateMethodModel(method, resToAdd, instance, -1, command);
      }
    } else if (elmtToAdd instanceof IField && elmtToAdd.getParent() instanceof IType) {
      if (mostRecentNavigation instanceof MethodBoxModel) {
        addFieldModelsAndConns(
            addedNode, resToAdd, mostRecentNavigation, mostRecentLineNumber, diagram, command);
      }
      if (addedNode == null) {
        IType containerClass = (IType) elmtToAdd.getParent();
        Resource classRes = RJCore.jdtElementToResource(repo, containerClass);
        InstanceModel instance =
            InstanceUtil.findOrCreateContainerInstanceModel(
                null, InstanceUtil.getClassName(classRes, repo), classRes, diagram, -1, command);

        IField field = (IField) elmtToAdd;
        addedNode = FieldUtil.findOrCreateFieldModel(field, resToAdd, instance, -1, command);
      }
    }
    return addedNode;
  }