/** * Copyright 2010-2011 Federico Cairo, Giuseppe Futia * * This file is part of ICONVIS. * * ICONVIS is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * ICONVIS is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with ICONVIS. If not, see <http://www.gnu.org/licenses/>. */ package it.polito.iconvis.business; import it.polito.iconvis.business.startup.IconvisBean; import it.polito.iconvis.integration.db.QueryManager; import javax.jws.Oneway; import javax.jws.WebMethod; import javax.jws.WebParam; import javax.jws.WebService; import org.apache.log4j.Logger; import java.util.ArrayList; import java.util.HashMap; import it.polito.iconvis.exception.IconvisQueryManagementException; import it.polito.iconvis.integration.ontology.OntologyParser; import it.polito.iconvis.integration.db.IconvisDAO; import javax.ejb.EJB; import static it.polito.iconvis.util.Constants.*; /** * * @author Federico Cairo */ @WebService() public class IconvisWS { protected static Logger log = Logger.getLogger(APPLICATION_CODE + ".business"); @EJB private OntologyParser op; @EJB private IconvisDAO id; @EJB private IconvisBean iconvisBean; @EJB private QueryManager qm; @WebMethod(operationName = "testResources") public boolean testResources() { log.debug("[IconvisWS::testResources] BEGIN"); boolean result = op.testReasource(); if (result) { log.info("**-------------------------------------**"); log.info(" [iconviz] Iconviz Business is ready. "); log.info("**-------------------------------------**"); } log.debug("[IconvisWS::testResources] END"); return result; } @WebMethod(operationName = "getGraphTreeData") public String getGraphTreeData() { log.debug("[IconvisWS::getGraphTreeData] BEGIN"); String result = null; try { StringBuilder sb = new StringBuilder(); ArrayList<String> topclasses = op.topClassesExtractor(iconvisBean.getOpengraph(), iconvisBean.getClosegraph()); for (String tc : topclasses) { sb.append(tc).append(SEPARATOR_1+"Thing"); sb.append('\n'); } ArrayList<HashMap<String, String>> classes = op.classAndIsaExtractor(iconvisBean.getOpengraph()); for (HashMap<String, String> s : classes) { sb.append((s.get("class1") + SEPARATOR_1 + s.get("class2"))); sb.append('\n'); } result = sb.toString(); log.debug("**----------------------------------------------------**"); log.info(" [iconviz] Retrieved data for building the tree graph. "); log.debug("**----------------------------------------------------**"); } catch (Exception e) { log.error("[IconvisWS::getGraphTreeData] Exception: ", e); } log.debug("[IconvisWS::getGraphTreeData] END"); return result; } @WebMethod(operationName = "getLabelMap") public String getLabelMap() { log.debug("[IconvisWS::getLabelMap] BEGIN"); String result = null; try { StringBuilder sb = new StringBuilder(); ArrayList<String[]> labelMap = op.entityLabelMapper(iconvisBean.getOpengraph()); for (String[] s : labelMap) { sb.append(s[0]).append("=").append(s[1]); sb.append('\n'); } result = sb.toString(); } catch (Exception e) { log.error("[IconvisWS::getLabelMap] Exception: ", e); } log.debug("[IconvisWS::getLabelMap] END"); return result; } @WebMethod(operationName = "getIndividualTypeData") public String getIndividualTypeData() { log.debug("[IconvisWS::getIndividualTypeData] BEGIN"); String result = null; try { StringBuilder sb = new StringBuilder(); ArrayList<HashMap<String, String>> individuals = op.individualOfClassExtractor(iconvisBean.getOpengraph()); String controlString = ""; for (HashMap<String, String> s : individuals) { if (!controlString.contains("@" + s.get("individual") + "@")) { sb.append((s.get("individual") + SEPARATOR_1 + s.get("class"))); sb.append('\n'); controlString = controlString + "@" + s.get("individual") + "@"; } } result = sb.toString(); log.debug("**-----------------------------------------------------------------**"); log.info(" [iconviz] Retrieved data about individuals and rdfs:type relations. "); log.debug("**-----------------------------------------------------------------**"); } catch (Exception e) { log.error("[IconvisWS::getIndividualTypeData] Exception: ", e); } log.debug("[IconvisWS::getIndividualTypeData] END"); return result; } @WebMethod(operationName = "getIndividualRelationsData") public String getIndividualRelationsData() { log.debug("[IconvisWS::getIndividualRelationsData] BEGIN"); String result = null; try { StringBuilder sb = new StringBuilder(); ArrayList<HashMap<String, String>> allRelations = op.allRelationsExtractor(iconvisBean.getInferredclosegraph()); ArrayList<String> superRelations = op.superPropertiesExtractor(iconvisBean.getOpengraph()); boolean ok = true; for (HashMap<String, String> a : allRelations) { for (String s : superRelations) { if (a.get("relation").equals(s)) { ok = false; } } if (ok) { sb.append((a.get("individual1") + SEPARATOR_1 + a.get("relation") + SEPARATOR_1 + a.get("individual2"))); sb.append('\n'); } ok = true; } result = sb.toString(); log.debug("**------------------------------------------------------------**"); log.info(" [iconviz] Retrieved data about relations between individuals. "); log.debug("**------------------------------------------------------------**"); } catch (Exception e) { log.error("[IconvisWS::getIndividualRelationsData] Exception: ", e); } log.debug("[IconvisWS::getIndividualRelationsData] END"); return result; } @WebMethod(operationName = "getIndividualDataProperties") public String getIndividualDataProperties() { log.debug("[IconvisWS::getIndividualDataProperties] BEGIN"); String result = null; try { StringBuilder sb = new StringBuilder(); ArrayList<HashMap<String, String>> allRelations = op.dataPropertyExtractor(iconvisBean.getOpengraph()); //ArrayList<String> superRelations = StartupListener.op.superPropertiesExtractor(StartupListener.ontologyCompletePath, StartupListener.ontologyURI); for (HashMap<String, String> a : allRelations) { sb.append((a.get("individual") + SEPARATOR_1 + a.get("relation") + SEPARATOR_1 + a.get("data"))); sb.append('\n'); } result = sb.toString(); log.debug("**------------------------------------------------------------**"); log.info(" [iconviz] Retrieved data properties. "); log.debug("**------------------------------------------------------------**"); } catch (Exception e) { log.error("[IconvisWS::getIndividualDataProperties] Exception: ", e); } log.debug("[IconvisWS::getIndividualDataProperties] END"); return result; } @WebMethod(operationName = "writeLog") @Oneway public void writeLog(@WebParam(name = "s") String s) { log.debug("[IconvisWS::writeLog] Log from ICONVIS front-end: " + s); } @WebMethod(operationName = "testDB") @Oneway public void testDB(@WebParam(name = "s") String s) { try { qm.createIndividualsTable(iconvisBean.getClosegraph(), iconvisBean.getInferredopengraph()); qm.mapIndividualToQuery(); } catch (IconvisQueryManagementException e) { // TODO Auto-generated catch block } } @WebMethod(operationName = "getDataFromDB") public String getDataFromDB(@WebParam(name = "s") String s) { log.debug("[IconvisWS::getDataFromDB] BEGIN"); String result = null; try { result = id.retrieveData(s); } catch (Exception e) { log.error("[IconvisWS::getDataFromDB] Exception: ", e); } log.debug("[IconvisWS::getDataFromDB] END"); return result; } @WebMethod(operationName = "getDataFlagsOnIndividuals") public String getDataFlagsOnIndividuals() { log.debug("[IconvisWS::getDataFlagsOnIndividuals] BEGIN"); String result = null; try { StringBuilder sb = new StringBuilder(); for (String[] s : iconvisBean.getDbDataFlags()) { sb.append(s[0]).append("=").append(s[1]); sb.append('\n'); } result = sb.toString(); } catch (Exception e) { log.error("[IconvisWS::getDataFlagsOnIndividuals] Exception: ", e); } log.debug("[IconvisWS::getDataFlagsOnIndividuals] END"); return result; } @WebMethod(operationName = "getLODQueries") public String getLODQueries() { log.debug("[IconvisWS::getLODQueries] BEGIN"); String result = null; try { StringBuilder sb = new StringBuilder(); for (String indiv : iconvisBean.getAllIndividuals()) { String SPARQLquery = (iconvisBean.getIndividualSPARQLQueryMap().get(indiv)).split(SEPARATOR_1)[0]; String SPARQLendpoint = (iconvisBean.getIndividualSPARQLQueryMap().get(indiv)).split(SEPARATOR_1)[1]; sb.append(indiv).append(SEPARATOR_1).append(SPARQLquery).append(SEPARATOR_1).append(SPARQLendpoint); sb.append('\n'); } result = sb.toString(); } catch (Exception e) { log.error("[IconvisWS::getLODQueries] Exception: ", e); } log.debug("[IconvisWS::getLODQueries] END"); return result; } @WebMethod(operationName = "isDBLodModuleActive") public boolean isDBLodModuleActive() { log.debug("[IconvisWS::isDBLodModuleActive] BEGIN"); boolean result = false; try { if (iconvisBean.isIsDBLodModuleActive()) { result = true; } } catch (Exception e) { log.error("[IconvisWS::isDBLodModuleActive] Exception: ", e); } log.debug("[IconvisWS::isDBLodModuleActive] END"); return result; } }