/* * This file is part of rasdaman community. * * Rasdaman community 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. * * Rasdaman community 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 rasdaman community. If not, see . * * Copyright 2003, 2004, 2005, 2006, 2007, 2008, 2009 Peter Baumann / rasdaman GmbH. * * For more information please see * or contact Peter Baumann via . */ package petascope.wcps.server.cli; import petascope.wcps.server.core.DbMetadataSource; import petascope.wcps.server.core.ProcessCoveragesRequest; import petascope.wcps.server.core.WCPS; import java.io.File; import java.io.FileInputStream; import java.io.StringReader; import java.util.Properties; import org.xml.sax.InputSource; /** * This is a small application around the WCPS core. It takes XML requests as files and runs them * through WCPS. The resulting radaman queries are displayed, but not executed. This is very useful * for testing whether your metadata is valid. */ public class xml { private static WCPS wcps; private static DbMetadataSource metadataSource; private static void initMetadata() { File cwd = new File("."); System.out.println("Working in " + cwd.getAbsolutePath()); String pcSchemaFileName = // "src/conf/" + "xml" + File.separator + "ogc" + File.separator + "wcps" + File.separator + "1.0.0" + File.separator + "wcpsProcessCoverages.xsd"; File pcSchemaFile = new File(pcSchemaFileName); if (!pcSchemaFile.exists()) { System.err.println("WCPS: could not find the WCPS ProcessCoverage schema (" + pcSchemaFileName + ")"); System.exit(1); } metadataSource = null; try { Properties dbParams = new Properties(); dbParams.load(new FileInputStream("settings.properties")); metadataSource = new DbMetadataSource(dbParams.getProperty("metadata_driver"), dbParams.getProperty("metadata_url"), dbParams.getProperty("metadata_user"), dbParams.getProperty("metadata_pass"), false); wcps = new WCPS(pcSchemaFile, metadataSource); } catch (Exception e) { System.err.println("WCPS: could not initialize WCPS:"); e.printStackTrace(System.err); System.exit(1); } } public static void main(String[] args) { if (args.length < 1) { System.err.println("WCPS CLI: no input files"); System.err.println("\nWCPS CLI Usage: java wcps.server.cli.xml input.xml"); System.err.println("Where input.xml contains a ProcessCoverages Request "); // System.exit(1); args = new String[1]; args[0] = "test/testcases-wcps_dollar/25.test.xml"; } if (args.length > 1) { System.err.println("WCPS: no input files"); System.exit(1); } initMetadata(); for (int i = 0; i < args.length; i++) { File fileIn = null; InputSource is = null; try { fileIn = new File(args[i]); is = new InputSource(new FileInputStream(fileIn)); } catch (Exception fnfe) { System.err.println("WCPS: " + args[i] + ": no such file or directory" + fnfe); System.exit(1); } String result = processCoverage(is, i); if (result != null) { System.out.println(result); } else { System.err.println("WCPS: " + args[i] + " failed"); System.exit(1); } } metadataSource.close(); System.exit(0); } private static String processCoverage(InputSource is, int i) { String result = null; try { ProcessCoveragesRequest r = wcps.pcPrepare("http://kahlua.eecs.jacobs-university.de:9001", "RASSERVICE", is); System.err.println("Request " + i); String rasql = r.getRasqlQuery(); String mime = r.getMime(); // result = "[" + mime + "] " + rasql; result = rasql; } catch (Exception e) { System.err.println("WCPS: request " + i + " failed with the following exception:"); e.printStackTrace(System.err); } return result; } /** Converts a WCPS XML query into a RasQL query string **/ public static String convertXmlToRasql(String query) { String rasql = null; if (metadataSource == null) { initMetadata(); } InputSource is = new InputSource(new StringReader(query)); rasql = processCoverage(is, 1); return rasql; } }