package org.ariadne_eu.metadata.resultsformat; import org.apache.log4j.Logger; import org.ariadne_eu.metadata.query.QueryMetadataFactory; import org.ariadne_eu.metadata.query.language.TranslateLanguage; /** * Created by ben * Date: 23-jun-2007 * Time: 14:43:05 * To change this template use File | Settings | File Templates. */ public class TranslateResultsformat { private static Logger log = Logger.getLogger(TranslateResultsformat.class); public static final int UNDEFINED = -1; public static final int LOM = 0; //default public static final int PLRF0 = 1; // prolearn public static final int PLRF1 = 2; // prolearn public static final int PLRF2 = 3; // prolearn public static final int PLRF3 = 4; // prolearn public static final int SOLR = 5; // facets: mace public static final int RLOM = 6; // mace public static final int MELOM = 7; // mace public static final int ATOM_LOM = 8; // to be implemented public static final int ICJS = 9; //ICOPER COMPACT JSON public static final int ILCJS = 10; //ICOPER LOD COMPACT JSON public static final int IJS = 11; //ICOPER JSON public static final int ARFJS = 12; //ARIADNE JS public static final int RFME = 13; //research.FM entity public static final int RFML = 14; //research.MF list public static final int RFMXMLL = 15; //research.MF XML list public static final int RFMCOAFFILL = 16; //research.MF list public static boolean isPLRF(int rfId) { return rfId >= 1 && rfId <= 4; } public static boolean isValidPLRF(String rf) { String[] parts = parsePLRF(rf); return (parts != null && parts[1].equalsIgnoreCase("lom")); } public static int getResultsFormat(String rf) { if (rf == null) return UNDEFINED; if (isValidPLRF(rf)) return Integer.parseInt(parsePLRF(rf)[0])+1; else if (rf.equalsIgnoreCase("lom") || rf.equalsIgnoreCase("http://ltsc.ieee.org/xsd/LOM")) return LOM; else if (rf.equalsIgnoreCase("solr")) return SOLR; else if (rf.equalsIgnoreCase("rlom")) return LOM; else if (rf.equalsIgnoreCase("maceenrichedlom")) return MELOM; else if (rf.equalsIgnoreCase("atomlom")) return ATOM_LOM; else if (rf.equalsIgnoreCase("icopercompactjs")) return ICJS; else if (rf.equalsIgnoreCase("icoperlodcompactjs")) return ILCJS; else if (rf.equalsIgnoreCase("icoperjs")) return IJS; else if (rf.equalsIgnoreCase("ariadne")) return ARFJS; else if (rf.equalsIgnoreCase("rfme")) return RFME; else if (rf.equalsIgnoreCase("rfml")) return RFML; else if (rf.equalsIgnoreCase("rfmxmll")) return RFMXMLL; else if (rf.equalsIgnoreCase("rfmcoaffill")) return RFMCOAFFILL; return UNDEFINED; } /** * Parses the given prolearn resultsformat. * The result is a String array containing * the level * the standard * the method (null when not filled in) * * If an invalid prolearn resultsformat is returned, * this method will return null */ public static String[] parsePLRF(String rf) { try { String plStart = "http://www.prolearn-project.org/PLRF/"; if (!rf.toLowerCase().startsWith(plStart.toLowerCase())) return null; rf = rf.substring(plStart.length()); String[] parts = rf.split("/"); if (parts.length < 2 || parts.length > 3) return null; String[] result = new String[3]; int level = Integer.parseInt(parts[0]); if (level < 0 || level > 3) return null; result[0] = String.valueOf(level); String standard = parts[1]; if (standard.length() == 0) return null; result[1] = standard; if (parts.length == 3) { String method = parts[2]; if (method.length() == 0) return null; result[2] = method; } return result; } catch (Exception e) { } return null; } public static String processResults(String result, String rf, String ql, String query) { int resultsFormat = getResultsFormat(rf); if (isPLRF(resultsFormat)) { String start = "<Results xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\"\n" + " xsi:schemaLocation=\"http://www.prolearn-project.org/PLRF/ http://www.cs.kuleuven.be/~stefaan/plql/plql.xsd http://ltsc.ieee.org/xsd/LOM http://ltsc.ieee.org/xsd/lomv1.0/lom.xsd\"\n" + " xmlns=\"http://www.prolearn-project.org/PLQLRES/\">\n" + " <ResultInfo>\n" + " <ResultLevel>" + rf + "</ResultLevel>\n" + " <QueryMethod>" + ql + "</QueryMethod>\n"; if (resultsFormat == PLRF0) { int count = -1; try { count = QueryMetadataFactory.getQueryImpl(TranslateLanguage.getQueryLanguage(ql)).count(query); } catch (Exception e) { log.error("Error while counting cardinality for plrf ", e); } start += " <Cardinality>" + count + "</Cardinality>\n"; } start +=" </ResultInfo>\n"; String end = "\n</Results>"; if (resultsFormat == PLRF0) { return start + end; } else return start + result + end; } else return result; } }