docs: public EjbRemoteServiceModel getOrCreate(Iterable<ProjectModel> applications, JavaClassModel remoteInterface, JavaClassModel implementationClass)
      {
          GraphTraversal<Vertex, Vertex> pipeline = new GraphTraversalSource(getGraphContext().getGraph()).V();
          pipeline.has(WindupVertexFrame.TYPE_PROP, EjbRemoteServiceModel.TYPE);
          if (remoteInterface != null)
              pipeline.as("remoteInterface").out(EjbRemoteServiceModel.EJB_INTERFACE)
                      .filter(vertexTraverser -> vertexTraverser.get().equals(remoteInterface.getElement()))
                      .select("remoteInterface");
  
          if (implementationClass != null)
              pipeline.as("implementationClass").out(EjbRemoteServiceModel.EJB_IMPLEMENTATION_CLASS)
                          .filter(vertexTraverser -> vertexTraverser.get().equals(implementationClass.getElement()))
                          .select("implementationClass");
  
          if (pipeline.hasNext())
          {
              EjbRemoteServiceModel result = frame(pipeline.next());
              for (ProjectModel application : applications)
              {
                  if (!Iterables.contains(result.getApplications(), application))
                      result.addApplication(application);
              }
              return result;
          }
          else
          {
              EjbRemoteServiceModel model = create();
              model.setApplications(applications);
              model.setInterface(remoteInterface);
              model.setImplementationClass(implementationClass);
              return model;
          }
      }