private Frame createFrame(OntClass type) {
    if (manager.isStandardDatatype(type.getNameSpace())) {
      manager.getDatatypeByUri(type.getURI());
      return null;
    }
    if (manager.isStandard(type.getNameSpace())) {
      return null;
    }
    String uri = type.getURI();
    if (uri == null) {
      throw new RuntimeException("URI of type is not defined");
    }
    Frame frame = manager.getFrameByUri(uri);
    if (frame != null) {
      return frame;
    }

    OntClass elemType = manager.getElementType(type);
    if (elemType != null) {
      String elemURI = elemType.getURI();
      ListType listType = manager.getListTypeByElementUri(elemURI);
      if (listType == null) {
        RdfType elemRdfType = manager.getTypeByURI(elemURI);
        if (elemRdfType == null) {
          elemRdfType = createFrame(elemType);
        }
        listType = new ListType(manager, type, elemRdfType);
        manager.add(listType);
      }
      return null;
    }

    List<OntResource> individuals = getEnumeratedIndividuals(type);

    if (individuals == null) {
      frame = new Frame(manager, type);
    } else {

      Enumeration enumFrame = new Enumeration(manager, type);
      frame = enumFrame;
      for (OntResource item : individuals) {
        NamedIndividual value = new NamedIndividual(item);
        enumFrame.add(value);
      }
    }

    manager.add(frame);
    return frame;
  }
  private void addSubtypes(Frame frame) {

    Iterator<OntClass> sequence = frame.asOntClass().listSubClasses(true);
    while (sequence.hasNext()) {
      OntClass type = sequence.next();
      String subURI = type.getURI();
      if (subURI == null) continue;
      Frame subFrame = manager.getFrameByUri(subURI);
      if (subFrame == null) {
        subFrame = manager.getListTypeByListUri(subURI);
      }
      if (subFrame != null) {
        frame.getSubtypeList().add(subFrame);
      } else {

        Datatype datatype = manager.getDatatypeByUri(subURI);
        if (datatype != null) {
          frame.addSubdatatype(datatype);
          continue;
        }

        if (isStandard(subURI)) continue;
        logger.warn(
            "Ignoring supertype of " + type.getLocalName() + " because frame not found: " + subURI);
      }
    }
  }
 @Override
 public boolean accept(OntClass cls) {
   if (!cls.isAnon()) {
     return cls.getURI().startsWith(RDF.getURI());
   }
   return false;
 }
 /* (non-Javadoc)
  * @see org.sadiframework.client.Registry#findServicesByConnectedClass(com.hp.hpl.jena.rdf.model.Resource)
  */
 @Override
 public Collection<? extends Service> findServicesByConnectedClass(Resource clazz)
     throws SADIException {
   Set<String> classURIs = new HashSet<String>();
   if (clazz.isURIResource()) classURIs.add(clazz.getURI());
   if (clazz.canAs(OntClass.class)) {
     for (Iterator<? extends OntClass> i = clazz.as(OntClass.class).listSubClasses();
         i.hasNext(); ) {
       OntClass c = i.next();
       if (c.isURIResource()) classURIs.add(c.getURI());
     }
   }
   return findServicesByConnectedClass(classURIs);
   // TODO
   //		return findServices(RegistrySearchCriteria.findService().addConnectedClass(clazz));
 }
 protected Set<OWLClass> getAllClasses() {
   if (ks.isRemote()) {
     return new SPARQLTasks(((SparqlEndpointKS) ks).getEndpoint()).getAllClasses();
   } else {
     Set<OWLClass> classes = new TreeSet<OWLClass>();
     for (OntClass cls :
         ((LocalModelBasedSparqlEndpointKS) ks)
             .getModel()
             .listClasses()
             .filterDrop(new OWLFilter())
             .filterDrop(new RDFSFilter())
             .filterDrop(new RDFFilter())
             .toList()) {
       if (!cls.isAnon()) {
         classes.add(df.getOWLClass(IRI.create(cls.getURI())));
       }
     }
     return classes;
   }
 }
  @Override
  public UpdateContainer doIt(VWorkspace vWorkspace) throws CommandException {
    OntologyManager ontMgr = vWorkspace.getWorkspace().getOntologyManager();
    JSONArray classesList = new JSONArray();
    JSONArray classesMap = new JSONArray();
    JSONArray propertiesList = new JSONArray();
    JSONArray propertiesMap = new JSONArray();

    Map<String, String> prefixMap = vWorkspace.getWorkspace().getOntologyManager().getPrefixMap();

    ExtendedIterator<OntClass> iter = ontMgr.getOntModel().listNamedClasses();
    //		ExtendedIterator<DatatypeProperty> propsIter = ontMgr.getOntModel()
    //				.listDatatypeProperties();
    ExtendedIterator<OntProperty> propsIter = ontMgr.getOntModel().listAllOntProperties();
    final JSONObject outputObj = new JSONObject();

    try {
      while (iter.hasNext()) {
        OntClass cls = iter.next();

        String pr = prefixMap.get(cls.getNameSpace());
        String classLabel = cls.getLocalName();
        //				if (cls.getLabel(null) != null && !cls.getLabel(null).equals(""))
        //					classLabel = cls.getLabel(null);
        String clsStr = (pr != null && !pr.equals("")) ? pr + ":" + classLabel : classLabel;

        classesList.put(clsStr);
        JSONObject classKey = new JSONObject();
        classKey.put(clsStr, cls.getURI());
        classesMap.put(classKey);
      }

      while (propsIter.hasNext()) {
        //				DatatypeProperty prop = propsIter.next();
        OntProperty prop = propsIter.next();

        if (prop.isObjectProperty() && !prop.isDatatypeProperty()) continue;

        String pr = prefixMap.get(prop.getNameSpace());
        String propLabel = prop.getLocalName();
        //				if (prop.getLabel(null) != null && !prop.getLabel(null).equals(""))
        //					propLabel = prop.getLabel(null);
        String propStr = (pr != null && !pr.equals("")) ? pr + ":" + propLabel : propLabel;

        propertiesList.put(propStr);
        JSONObject propKey = new JSONObject();
        propKey.put(propStr, prop.getURI());
        propertiesMap.put(propKey);
      }

      // Populate the JSON object that will hold everything in output
      outputObj.put(JsonKeys.classList.name(), classesList);
      outputObj.put(JsonKeys.classMap.name(), classesMap);
      outputObj.put(JsonKeys.propertyList.name(), propertiesList);
      outputObj.put(JsonKeys.propertyMap.name(), propertiesMap);

    } catch (JSONException e) {
      logger.error("Error populating JSON!");
    }

    UpdateContainer upd =
        new UpdateContainer(
            new AbstractUpdate() {
              @Override
              public void generateJson(String prefix, PrintWriter pw, VWorkspace vWorkspace) {
                pw.print(outputObj.toString());
              }
            });
    return upd;
  }
  // gets the URIs of the classes and their translation
  public HashMap<String, String> getClassesIdentifiers(
      float percentage,
      boolean activeRandomString,
      boolean activeTranslateString,
      boolean activeSynonym,
      int activeStringOperation) {
    HashMap<String, String> classesIdentifiers =
        new HashMap<String, String>(); // the HashMap of classes identifiers

    int nbClasses, toBeRenamed, renamedClasses;

    List<OntClass> notRenamedClasses = new ArrayList<OntClass>(); // the list of not renamed classes
    List<OntClass> classes = getOntologyClasses(); // the list of ontology classes
    List<OntClass> classesTo = new ArrayList<OntClass>(); // the list of classes to be renamed

    // alignment contains those classes which have already been renamed
    // builds the list of all unrenamed classes from the model
    for (OntClass c : classes) {
      String local = getLocalName(c.getURI());
      if (alignment.containsKey(local)) {
        if (alignment.getProperty(local).equals(local))
          notRenamedClasses.add(c); // add the class to not renamed classes
      }
    }

    nbClasses = classes.size();
    renamedClasses = nbClasses - notRenamedClasses.size(); // the number of renamed classes
    toBeRenamed =
        Math.round(percentage * nbClasses) - renamedClasses; // -renamedClasses -> for Benchmark

    // logger.trace( "NbClasses = {}; YetToRename = {}; I will rename = {};", nbClasses,
    // notRenamedClasses.size(), toBeRenamed );

    // toBeRenamed is negative when classes have been added to the model
    if (toBeRenamed < 0) toBeRenamed = 0;
    // build the list of classes to be renamed
    int[] n = randNumbers(notRenamedClasses.size(), toBeRenamed);
    for (int i = 0; i < toBeRenamed; i++) {
      OntClass cls = notRenamedClasses.get(n[i]);
      classesTo.add(cls);
    }

    for (OntClass cls : classesTo) {
      if (!cls.isRestriction()) {
        if (!cls.isAnon()) {
          String prefix = getNameSpace(cls.getURI());
          String localName = getLocalName(cls.getURI());

          // has the same Namespace as the Ontology Namespace
          if (prefix.equals(modifiedOntologyNS)) {
            if (!classesIdentifiers.containsKey(localName)) {
              if (activeTranslateString) { // replace the URI with the translated one
                String translateStrg = parseString(localName, true, false);
                classesIdentifiers.put(localName, translateStrg);
                replaceClassLabel(
                    cls.getURI(),
                    translateStrg,
                    activeRandomString,
                    activeTranslateString,
                    activeSynonym,
                    activeStringOperation);
                if (alignment.containsKey(localName)) { // alignment.remove( cls.getURI() );
                  alignment.put(localName, translateStrg); // the reference alignment
                }
              } else if (activeRandomString) { // replace the URI with a random string
                String newStrg = getRandomString();
                classesIdentifiers.put(localName, newStrg);
                replaceClassLabel(
                    cls.getURI(),
                    newStrg,
                    activeRandomString,
                    activeTranslateString,
                    activeSynonym,
                    activeStringOperation);
                if (alignment.containsKey(localName)) { // alignment.remove( cls.getURI() );
                  alignment.put(localName, newStrg); // the reference alignment
                }
              } else if (activeSynonym) { // replace the URI with a synonym
                String synonym = parseString(localName, false, true);
                classesIdentifiers.put(localName, synonym);
                replaceClassLabel(
                    cls.getURI(),
                    synonym,
                    activeRandomString,
                    activeTranslateString,
                    activeSynonym,
                    activeStringOperation);
                if (alignment.containsKey(localName)) { // alignment.remove( cls.getURI() );
                  alignment.put(localName, synonym); // the reference alignment
                }
              } else if (activeStringOperation == 1) { // replace the URI with the UpperCase URI
                classesIdentifiers.put(localName, localName.toUpperCase());
                replaceClassLabel(
                    cls.getURI(),
                    localName.toUpperCase(),
                    activeRandomString,
                    activeTranslateString,
                    activeSynonym,
                    activeStringOperation);
                if (alignment.containsKey(localName)) { // alignment.remove( cls.getURI() );
                  alignment.put(localName, localName.toUpperCase()); // the reference alignment
                }
              } else if (activeStringOperation == 2) { // replace the URI with the LowerCase URI
                classesIdentifiers.put(localName, localName.toLowerCase());
                replaceClassLabel(
                    cls.getURI(),
                    localName.toLowerCase(),
                    activeRandomString,
                    activeTranslateString,
                    activeSynonym,
                    activeStringOperation);
                if (alignment.containsKey(localName)) { // alignment.remove( cls.getURI() );
                  alignment.put(localName, localName.toLowerCase()); // the reference alignment
                }
              } else {
                classesIdentifiers.put(localName, localName + "CLASS");
                replaceClassLabel(
                    cls.getURI(),
                    localName + "CLASS",
                    activeRandomString,
                    activeTranslateString,
                    activeSynonym,
                    activeStringOperation);
                if (alignment.containsKey(localName)) { // alignment.remove( cls.getURI() );
                  alignment.put(localName, localName + "CLASS");
                }
              }
            }
          }
        }
      }
    }
    return classesIdentifiers;
  }