public boolean assertDataPropertyInstance(String ind, String prop, int value) {
   OWLDataProperty dataProp =
       OWLFactory.getOWLDataProperty(
           IRI.create(topIxOnt.getOntologyID().getOntologyIRI().toString() + '#' + prop));
   OWLDataPropertyAssertionAxiom tmpAx =
       OWLFactory.getOWLDataPropertyAssertionAxiom(
           dataProp,
           OWLFactory.getOWLNamedIndividual(
               IRI.create(topIxOnt.getOntologyID().getOntologyIRI().toString() + '#' + ind)),
           OWLFactory.getOWLLiteral(value));
   manager.addAxiom(topIxOnt, tmpAx);
   return true;
 }
  // this method retrieves all the geometric properties that have been
  // pre-designated as "house setable" or "room setable",
  // that is, if a geometric property is available for houses, it has been
  // annotated as "houseSetable", for rooms, "roomSetable" and for both it
  // has been designated with both annotations.
  public void retrieveGeometricPropertiesMaps() {
    OWLDataProperty geometricProperty =
        OWLFactory.getOWLDataProperty(":GeometricProperty", topIxPrefixManager);
    OWLAnnotationProperty propertyID =
        OWLFactory.getOWLAnnotationProperty(":propertyID", topIxPrefixManager);
    logger.info(propertyID);
    OWLAnnotationProperty houseSetable =
        OWLFactory.getOWLAnnotationProperty(":houseSetable", topIxPrefixManager);
    OWLAnnotationProperty roomSetable =
        OWLFactory.getOWLAnnotationProperty(":roomSetable", topIxPrefixManager);
    Set<OWLSubDataPropertyOfAxiom> tempGeometricDataPropertiesSet =
        topIxOnt.getDataSubPropertyAxiomsForSuperProperty(geometricProperty);

    for (OWLSubDataPropertyOfAxiom tempGeomPropAxiom : tempGeometricDataPropertiesSet) {
      OWLDataProperty tempDataProperty = tempGeomPropAxiom.getSubProperty().asOWLDataProperty();
      // the following two local vars will become an entry for geometricPropertiesMap
      String tempString = tempDataProperty.getAnnotations(topIxOnt, propertyID).toString();
      tempString = tempString.substring(tempString.indexOf('"') + 1, tempString.indexOf("^") - 1);
      IRI tempIRI = tempGeomPropAxiom.getSubProperty().asOWLDataProperty().getIRI();
      geometricPropertiesMap.put(tempString, tempIRI);

      // the following code decides whether the above entry should also be contained
      // in the houseSetableGeometricPropertiesMap
      Set<OWLAnnotation> tempDataPropAnnotationSet = tempDataProperty.getAnnotations(topIxOnt);
      for (OWLAnnotation tempDataPropAnnotation : tempDataPropAnnotationSet) {
        if (tempDataPropAnnotation.getProperty() == houseSetable
            && tempDataPropAnnotation.getValue().toString().equals("\"true\"^^xsd:boolean")) {
          houseSetableGeometricPropertiesMap.put(tempString, tempIRI);
        }
        if (tempDataPropAnnotation.getProperty() == roomSetable
            && tempDataPropAnnotation.getValue().toString().equals("\"true\"^^xsd:boolean")) {
          roomSetableGeometricPropertiesMap.put(tempString, tempIRI);
        }
      }
    }
  }
  public boolean retrieveSolutions(String siteNameHash) {
    // use the siteNameHash to access a certain Site individual in the ontology
    // retrieve each Solution individual of this site and use it to re-initialise the Solutions List
    OwlSolution tempSolution;
    OwlSolvedHouse tempSolvedHouse;
    OwlSolvedRoom tempSolvedRoom;

    // first clear the Solution List contents...
    this.solutionsList.clear();

    OWLIndividual tempSiteIndividual =
        OWLFactory.getOWLNamedIndividual(":" + siteNameHash, topIxPrefixManager);
    OWLClassExpression tempSolutionClassExpression =
        OWLFactory.getOWLClass(":Solution", topIxPrefixManager);
    Set<OWLObjectPropertyAssertionAxiom> tempSitePropertyAxioms =
        topIxOnt.getObjectPropertyAssertionAxioms(tempSiteIndividual);

    Set<OWLIndividual> tempSolutionIndividuals =
        new HashSet<>(); // Solution individuals for this particular site. will be filled below...
    Set<OWLIndividual> tempSolvedHouseIndividuals = new HashSet<>();
    Set<OWLIndividual> tempSolvedRoomIndividuals = new HashSet<>();

    // populate the tempSolutionIndividuals Set<OWLIndividual>
    // with the Solution individuals that are solutions of the current Site
    // this block runs through the set of all the object property axioms
    // that have this site as their subject
    // and filters out the ones that are of type "hasSolution"
    for (OWLObjectPropertyAssertionAxiom tempObjPropAssAx : tempSitePropertyAxioms) {
      OWLObjectProperty tempHasSolutionObjectProperty =
          OWLFactory.getOWLObjectProperty(
              IRI.create(topIxOnt.getOntologyID().getOntologyIRI() + "#hasSolution"));
      if (tempObjPropAssAx.getProperty() == tempHasSolutionObjectProperty) {
        tempSolutionIndividuals.add(tempObjPropAssAx.getObject());
      }
    }
    // retrieving the site dimensions for this solution set
    // (the site remains the same throughout the plethos of solutions).
    int tempSiteLength = 0;
    int tempSiteWidth = 0;
    OWLDataProperty siteHasLengthProp = OWLFactory.getOWLDataProperty(":hasX", topIxPrefixManager);
    OWLDataProperty siteHasWidthProp = OWLFactory.getOWLDataProperty(":hasY", topIxPrefixManager);
    Set<OWLDataPropertyAssertionAxiom> tempSiteDataProperties = new HashSet<>();

    tempSiteDataProperties = topIxOnt.getDataPropertyAssertionAxioms(tempSiteIndividual);

    for (OWLDataPropertyAssertionAxiom tempSiteDataProperty : tempSiteDataProperties) {
      if (tempSiteDataProperty.getProperty() == siteHasLengthProp) {
        tempSiteLength = tempSiteDataProperty.getObject().parseInteger();
      }
      if (tempSiteDataProperty.getProperty() == siteHasWidthProp) {
        tempSiteWidth = tempSiteDataProperty.getObject().parseInteger();
      }
    }

    logger.info(tempSolutionIndividuals.size());

    // running every solution individual for/of that particular site in order
    // to extract the solvedHouse's and the solvedRoom's
    // via the hasSolvedHouse and hasSolvedRoom properties.
    int solutionCounter = 0;
    for (OWLIndividual tempSolutionIndividual : tempSolutionIndividuals) {
      tempSolution = new OwlSolution();
      tempSolution.setSolutionID(new Integer(++solutionCounter));

      tempSolution.setSiteLength(new Integer(tempSiteLength));
      tempSolution.setSiteWidth(new Integer(tempSiteWidth));

      // clearing the contents of these two structuresin order to accommodate the solved entities of
      // the next solution.
      tempSolvedHouseIndividuals.clear();
      tempSolvedRoomIndividuals.clear();

      for (OWLObjectPropertyAssertionAxiom tempObjPropAssAx :
          topIxOnt.getObjectPropertyAssertionAxioms(tempSolutionIndividual)) {
        OWLObjectProperty tempHasSolvedHouseObjectProperty =
            OWLFactory.getOWLObjectProperty(
                IRI.create(topIxOnt.getOntologyID().getOntologyIRI() + "#hasSolvedHouse"));
        OWLObjectProperty tempHasSolvedRoomObjectProperty =
            OWLFactory.getOWLObjectProperty(
                IRI.create(topIxOnt.getOntologyID().getOntologyIRI() + "#hasSolvedRoom"));
        if (tempObjPropAssAx.getProperty() == tempHasSolvedHouseObjectProperty) {
          tempSolvedHouseIndividuals.add(tempObjPropAssAx.getObject());
        } else if (tempObjPropAssAx.getProperty() == tempHasSolvedRoomObjectProperty) {
          tempSolvedRoomIndividuals.add(tempObjPropAssAx.getObject());
        }
      }

      for (OWLIndividual tempSolvedHouseIndividual : tempSolvedHouseIndividuals) {
        tempSolvedHouse = new OwlSolvedHouse();
        for (OWLDataPropertyAssertionAxiom tempDatPropAssAx :
            topIxOnt.getDataPropertyAssertionAxioms(tempSolvedHouseIndividual)) {
          if (tempDatPropAssAx.getProperty()
              == (OWLFactory.getOWLDataProperty(":hasL", topIxPrefixManager))) {
            // logger.info(tempDatPropAssAx.getObject().parseInteger());
            tempSolvedHouse.setSolvedHouseLength(tempDatPropAssAx.getObject().parseInteger());
          } else if (tempDatPropAssAx.getProperty()
              == (OWLFactory.getOWLDataProperty(":hasW", topIxPrefixManager))) {
            tempSolvedHouse.setSolvedHouseWidth(tempDatPropAssAx.getObject().parseInteger());
          } else if (tempDatPropAssAx.getProperty()
              == (OWLFactory.getOWLDataProperty(":hasX", topIxPrefixManager))) {
            tempSolvedHouse.setSolvedHouseX(tempDatPropAssAx.getObject().parseInteger());
          } else if (tempDatPropAssAx.getProperty()
              == (OWLFactory.getOWLDataProperty(":hasY", topIxPrefixManager))) {
            tempSolvedHouse.setSolvedHouseY(tempDatPropAssAx.getObject().parseInteger());
          } else if (tempDatPropAssAx.getProperty()
              == (OWLFactory.getOWLDataProperty(":hasLiteral", topIxPrefixManager))) {
            tempSolvedHouse.setSolvedHouseLiteral(tempDatPropAssAx.getObject().getLiteral());
          }
        }
        // logger.info(tempSolvedHouse.getSolvedHouseX()+" "+tempSolvedHouse.getSolvedHouseY());
        tempSolution.getSolvedHouses().add(tempSolvedHouse);
      }

      for (OWLIndividual tempSolvedRoomIndividual : tempSolvedRoomIndividuals) {
        tempSolvedRoom = new OwlSolvedRoom();
        for (OWLDataPropertyAssertionAxiom tempDatPropAssAx :
            topIxOnt.getDataPropertyAssertionAxioms(tempSolvedRoomIndividual)) {
          if (tempDatPropAssAx.getProperty()
              == (OWLFactory.getOWLDataProperty(":hasL", topIxPrefixManager))) {
            tempSolvedRoom.setSolvedRoomLength(tempDatPropAssAx.getObject().parseInteger());
          } else if (tempDatPropAssAx.getProperty()
              == (OWLFactory.getOWLDataProperty(":hasW", topIxPrefixManager))) {
            tempSolvedRoom.setSolvedRoomWidth(tempDatPropAssAx.getObject().parseInteger());
          } else if (tempDatPropAssAx.getProperty()
              == (OWLFactory.getOWLDataProperty(":hasH", topIxPrefixManager))) {
            tempSolvedRoom.setSolvedRoomHeight(tempDatPropAssAx.getObject().parseInteger());
          } else if (tempDatPropAssAx.getProperty()
              == (OWLFactory.getOWLDataProperty(":hasX", topIxPrefixManager))) {
            tempSolvedRoom.setSolvedRoomX(tempDatPropAssAx.getObject().parseInteger());
          } else if (tempDatPropAssAx.getProperty()
              == (OWLFactory.getOWLDataProperty(":hasY", topIxPrefixManager))) {
            tempSolvedRoom.setSolvedRoomY(tempDatPropAssAx.getObject().parseInteger());
          } else if (tempDatPropAssAx.getProperty()
              == (OWLFactory.getOWLDataProperty(":hasZ", topIxPrefixManager))) {
            tempSolvedRoom.setSolvedRoomZ(tempDatPropAssAx.getObject().parseInteger());
          } else if (tempDatPropAssAx.getProperty()
              == (OWLFactory.getOWLDataProperty(":hasLiteral", topIxPrefixManager))) {
            tempSolvedRoom.setSolvedRoomLiteral(tempDatPropAssAx.getObject().getLiteral());
          }
        }
        tempSolution.getSolvedRooms().add(tempSolvedRoom);
      }
      this.solutionsList.add(tempSolution);
    }

    return true;
  }
  public boolean storeSolutions(String siteNameHash) {
    for (OwlSolution tempSolution : solutionsList) {
      // assert Solution individual and assert Site->hasSolution
      OWLClassExpression solutionClassExpression =
          OWLFactory.getOWLClass(":Solution", topIxPrefixManager);
      String tempSolutionID =
          String.format(siteNameHash + "_S_%1$02d", tempSolution.getSolutionID().intValue());
      OWLIndividual tempSolutionIndividual =
          OWLFactory.getOWLNamedIndividual(":" + tempSolutionID, topIxPrefixManager);
      OWLClassAssertionAxiom tempClassAssertionAxiom =
          OWLFactory.getOWLClassAssertionAxiom(solutionClassExpression, tempSolutionIndividual);
      manager.addAxiom(topIxOnt, tempClassAssertionAxiom);

      OWLObjectProperty tempSolutionObjectProperty =
          OWLFactory.getOWLObjectProperty(":hasSolution", topIxPrefixManager);
      OWLIndividual tempSiteIndividual =
          OWLFactory.getOWLNamedIndividual(":" + siteNameHash, topIxPrefixManager);
      OWLObjectPropertyAssertionAxiom tempObjPropAssAxiom =
          OWLFactory.getOWLObjectPropertyAssertionAxiom(
              tempSolutionObjectProperty, tempSiteIndividual, tempSolutionIndividual);
      manager.addAxiom(topIxOnt, tempObjPropAssAxiom);

      // assert SolvedHouse individuals and assert Solution->hasSolvedHouse objProperty. also assert
      // the DATA PROPERTIES for each solvedHouse indvidual
      for (OwlSolvedHouse tempSolvedHouse : tempSolution.getSolvedHouses()) {
        // logger.info("373");
        // logger.info(tempSolution.getSolvedHouses().toString());
        OWLClassExpression solvedHouseClassExpression =
            OWLFactory.getOWLClass(":SolvedHouse", topIxPrefixManager);
        OWLIndividual tempSolvedHouseIndividual =
            OWLFactory.getOWLNamedIndividual(
                ":" + tempSolutionID + "_SH_" + tempSolvedHouse.getSolvedHouseHash(),
                topIxPrefixManager);
        OWLClassAssertionAxiom tempClassAssAx =
            OWLFactory.getOWLClassAssertionAxiom(
                solvedHouseClassExpression, tempSolvedHouseIndividual);
        manager.addAxiom(topIxOnt, tempClassAssAx);

        OWLObjectProperty tempSolvedHouseObjectProperty =
            OWLFactory.getOWLObjectProperty(":hasSolvedHouse", topIxPrefixManager);
        OWLObjectPropertyAssertionAxiom tempHouseObjPropAssAx =
            OWLFactory.getOWLObjectPropertyAssertionAxiom(
                tempSolvedHouseObjectProperty, tempSolutionIndividual, tempSolvedHouseIndividual);
        manager.addAxiom(topIxOnt, tempHouseObjPropAssAx);

        OWLDataProperty tempDataProperty;
        OWLDataPropertyAssertionAxiom tempDataPropertyAssertionAxiom;

        tempDataProperty = OWLFactory.getOWLDataProperty(":hasLiteral", topIxPrefixManager);
        tempDataPropertyAssertionAxiom =
            OWLFactory.getOWLDataPropertyAssertionAxiom(
                tempDataProperty,
                tempSolvedHouseIndividual,
                tempSolvedHouse.getSolvedHouseLiteral());
        manager.addAxiom(topIxOnt, tempDataPropertyAssertionAxiom);

        tempDataProperty = OWLFactory.getOWLDataProperty(":hasL", topIxPrefixManager);
        tempDataPropertyAssertionAxiom =
            OWLFactory.getOWLDataPropertyAssertionAxiom(
                tempDataProperty,
                tempSolvedHouseIndividual,
                tempSolvedHouse.getSolvedHouseLength());
        manager.addAxiom(topIxOnt, tempDataPropertyAssertionAxiom);

        tempDataProperty = OWLFactory.getOWLDataProperty(":hasW", topIxPrefixManager);
        tempDataPropertyAssertionAxiom =
            OWLFactory.getOWLDataPropertyAssertionAxiom(
                tempDataProperty, tempSolvedHouseIndividual, tempSolvedHouse.getSolvedHouseWidth());
        manager.addAxiom(topIxOnt, tempDataPropertyAssertionAxiom);

        tempDataProperty = OWLFactory.getOWLDataProperty(":hasX", topIxPrefixManager);
        tempDataPropertyAssertionAxiom =
            OWLFactory.getOWLDataPropertyAssertionAxiom(
                tempDataProperty, tempSolvedHouseIndividual, tempSolvedHouse.getSolvedHouseX());
        manager.addAxiom(topIxOnt, tempDataPropertyAssertionAxiom);

        tempDataProperty = OWLFactory.getOWLDataProperty(":hasY", topIxPrefixManager);
        tempDataPropertyAssertionAxiom =
            OWLFactory.getOWLDataPropertyAssertionAxiom(
                tempDataProperty, tempSolvedHouseIndividual, tempSolvedHouse.getSolvedHouseY());
        manager.addAxiom(topIxOnt, tempDataPropertyAssertionAxiom);
        // logger.info("asserts the house");
        // logger.info(tempSolvedHouse.getSolvedHouseLiteral());
      }

      // assert SolvedRoom individuals and assert Solution->hasSolvedRoom objProperty. also assert
      // the DATA PROPERTIES for each solvedRoom indvidual
      for (OwlSolvedRoom tempSolvedRoom : tempSolution.getSolvedRooms()) {
        OWLClassExpression solvedRoomClassExpression =
            OWLFactory.getOWLClass(":SolvedRoom", topIxPrefixManager);
        OWLIndividual tempSolvedRoomIndividual =
            OWLFactory.getOWLNamedIndividual(
                ":" + tempSolutionID + "_SR_" + tempSolvedRoom.getSolvedRoomHash(),
                topIxPrefixManager);
        OWLClassAssertionAxiom tempClassAssAx =
            OWLFactory.getOWLClassAssertionAxiom(
                solvedRoomClassExpression, tempSolvedRoomIndividual);
        manager.addAxiom(topIxOnt, tempClassAssAx);

        OWLObjectProperty tempSolvedRoomObjectProperty =
            OWLFactory.getOWLObjectProperty(":hasSolvedRoom", topIxPrefixManager);
        OWLObjectPropertyAssertionAxiom tempRoomObjPropAssAx =
            OWLFactory.getOWLObjectPropertyAssertionAxiom(
                tempSolvedRoomObjectProperty, tempSolutionIndividual, tempSolvedRoomIndividual);
        manager.addAxiom(topIxOnt, tempRoomObjPropAssAx);

        OWLDataProperty tempDataProperty;
        OWLDataPropertyAssertionAxiom tempDataPropertyAssertionAxiom;

        tempDataProperty = OWLFactory.getOWLDataProperty(":hasLiteral", topIxPrefixManager);
        tempDataPropertyAssertionAxiom =
            OWLFactory.getOWLDataPropertyAssertionAxiom(
                tempDataProperty, tempSolvedRoomIndividual, tempSolvedRoom.getSolvedRoomLiteral());
        manager.addAxiom(topIxOnt, tempDataPropertyAssertionAxiom);

        tempDataProperty = OWLFactory.getOWLDataProperty(":hasL", topIxPrefixManager);
        tempDataPropertyAssertionAxiom =
            OWLFactory.getOWLDataPropertyAssertionAxiom(
                tempDataProperty, tempSolvedRoomIndividual, tempSolvedRoom.getSolvedRoomLength());
        manager.addAxiom(topIxOnt, tempDataPropertyAssertionAxiom);

        tempDataProperty = OWLFactory.getOWLDataProperty(":hasW", topIxPrefixManager);
        tempDataPropertyAssertionAxiom =
            OWLFactory.getOWLDataPropertyAssertionAxiom(
                tempDataProperty, tempSolvedRoomIndividual, tempSolvedRoom.getSolvedRoomWidth());
        manager.addAxiom(topIxOnt, tempDataPropertyAssertionAxiom);

        tempDataProperty = OWLFactory.getOWLDataProperty(":hasH", topIxPrefixManager);
        tempDataPropertyAssertionAxiom =
            OWLFactory.getOWLDataPropertyAssertionAxiom(
                tempDataProperty, tempSolvedRoomIndividual, tempSolvedRoom.getSolvedRoomHeight());
        manager.addAxiom(topIxOnt, tempDataPropertyAssertionAxiom);

        tempDataProperty = OWLFactory.getOWLDataProperty(":hasX", topIxPrefixManager);
        tempDataPropertyAssertionAxiom =
            OWLFactory.getOWLDataPropertyAssertionAxiom(
                tempDataProperty, tempSolvedRoomIndividual, tempSolvedRoom.getSolvedRoomX());
        manager.addAxiom(topIxOnt, tempDataPropertyAssertionAxiom);

        tempDataProperty = OWLFactory.getOWLDataProperty(":hasY", topIxPrefixManager);
        tempDataPropertyAssertionAxiom =
            OWLFactory.getOWLDataPropertyAssertionAxiom(
                tempDataProperty, tempSolvedRoomIndividual, tempSolvedRoom.getSolvedRoomY());
        manager.addAxiom(topIxOnt, tempDataPropertyAssertionAxiom);

        tempDataProperty = OWLFactory.getOWLDataProperty(":hasZ", topIxPrefixManager);
        tempDataPropertyAssertionAxiom =
            OWLFactory.getOWLDataPropertyAssertionAxiom(
                tempDataProperty, tempSolvedRoomIndividual, tempSolvedRoom.getSolvedRoomZ());
        manager.addAxiom(topIxOnt, tempDataPropertyAssertionAxiom);
      }
    }
    return true;
  }