diff options
| author | Constantin Jucovschi <cj@ubuntu.localdomain> | 2009-03-31 06:18:54 -0400 |
|---|---|---|
| committer | Constantin Jucovschi <cj@ubuntu.localdomain> | 2009-03-31 06:18:54 -0400 |
| commit | 0f1055b8d7f97d86c66fa602c17666bc2ff9c437 (patch) | |
| tree | 9c68fa99a97063bbe4a4231e04fc09329541ac71 /src/wcs/server/servlet/WCS.java | |
Initial commit
Diffstat (limited to 'src/wcs/server/servlet/WCS.java')
| -rw-r--r-- | src/wcs/server/servlet/WCS.java | 277 |
1 files changed, 277 insertions, 0 deletions
diff --git a/src/wcs/server/servlet/WCS.java b/src/wcs/server/servlet/WCS.java new file mode 100644 index 0000000..67dfd67 --- /dev/null +++ b/src/wcs/server/servlet/WCS.java @@ -0,0 +1,277 @@ +package wcs.server.servlet; + +import wcs.server.core.*; +import java.io.StringReader; +import java.io.StringWriter; +import javax.xml.bind.JAXBContext; +import javax.xml.bind.Unmarshaller; +import net.opengis.ows.v_1_0_0.ExceptionReport; +import net.opengis.wcs.v_1_1_0.Capabilities; +import net.opengis.wcs.v_1_1_0.CoverageDescriptions; +import net.opengis.wcs.v_1_1_0.DescribeCoverage; +import net.opengis.wcs.v_1_1_0.GetCapabilities; +import net.opengis.wcs.v_1_1_0.GetCoverage; + +/** + * The Web Coverage Service (WCS) + * This class provides methods for each of the WCS operations: + * - GetCapabilities + * - DescribeCoverage + * - GetCoverage + * + * @author Andrei Aiordachioaie + */ +public class WCS { + + private static Boolean ok; + private static Boolean printOutput; + private static Boolean printLog; + private static String metaDbPath; + + /** + * Public minimal constructor + * @param metadataDbPath path to the "dbparams.properties" file + */ + public WCS(String metadataDbPath) + { + printLog = true; + printOutput = true; + ok = true; + metaDbPath = metadataDbPath; + } + + /** + * Record a log message + * @param msg Text of the message + */ + public static void log(String msg) + { + if (printLog) + System.err.println(msg); + } + + /** + * WCS GetCapabilities operation + */ + public String GetCapabilities(String stringXml) + { + String output = "Default output. "; + String errmsg = "No error. "; + ok = false; + + try + { + // read the input XML + log(">>> Reading the input XML file ... "); + JAXBContext context = JAXBContext.newInstance("net.opengis.wcs.v_1_1_0"); + Unmarshaller unmarshaller = context.createUnmarshaller() ; + Object xml = unmarshaller.unmarshal(new StringReader(stringXml)); + // Find out which class to execute ... + log(">>> It is a " + xml.getClass().getSimpleName() + " request."); + + log(">>> Compiling data into XML format for GetCapabilities ... "); + GetCapabilities input = (GetCapabilities) xml; + Capabilities cap = new executeGetCapabilities(input,metaDbPath).get(); + + // Write the output + javax.xml.bind.JAXBContext jaxbCtx = javax.xml.bind.JAXBContext.newInstance(cap.getClass().getPackage().getName()); + javax.xml.bind.Marshaller marshaller = jaxbCtx.createMarshaller(); + marshaller.setProperty(javax.xml.bind.Marshaller.JAXB_ENCODING, "UTF-8"); //NOI18N + marshaller.setProperty(javax.xml.bind.Marshaller.JAXB_FORMATTED_OUTPUT, Boolean.TRUE); + StringWriter strWriter = new StringWriter(); + marshaller.marshal(cap, strWriter); + output = strWriter.toString(); + log(">>> Done! User has the GetCapabilities result !"); + ok = true; + + + } + catch (javax.xml.bind.JAXBException ex) { + java.util.logging.Logger.getLogger("global").log(java.util.logging.Level.SEVERE, null, ex); //NOI18N + ex.printStackTrace(); + errmsg = ex.toString(); + log("ERROR 1 "); + } + catch (WCSException e) + { + log("*** GOT WCS EXCEPTION !"); + ExceptionReport report = e.getReport(); + try + { + javax.xml.bind.JAXBContext jaxbCtx = javax.xml.bind.JAXBContext.newInstance(report.getClass().getPackage().getName()); + javax.xml.bind.Marshaller marshaller = jaxbCtx.createMarshaller(); + marshaller.setProperty(javax.xml.bind.Marshaller.JAXB_ENCODING, "UTF-8"); //NOI18N + marshaller.setProperty(javax.xml.bind.Marshaller.JAXB_FORMATTED_OUTPUT, Boolean.TRUE); + marshaller.marshal(report, System.err); + StringWriter strWriter = new StringWriter(); + marshaller.marshal(report, strWriter); + output = strWriter.toString(); + ok = true; + log("Done with the Error Report !"); + } + catch (Exception e2) + { + e2.printStackTrace(); + errmsg = e2.toString(); + log("ERROR 2"); + } + } + catch (Exception e) + { + e.printStackTrace(); + errmsg = e.toString(); + log("ERROR 3"); + } + + if (ok == false) + output = errmsg; + if (printOutput) + System.out.println("*****************\nOUTPUT IS \n" + output); + + return output; + } + + /** + * WCS GetCoverage operation + */ + public String GetCoverage(String stringXml) + { + String output = "Default output. "; + String errmsg = "No error. "; + ok = false; + + try + { + // read the input XML + log(">>> Reading the input XML file ... "); + JAXBContext context = JAXBContext.newInstance("net.opengis.wcs.v_1_1_0"); + Unmarshaller unmarshaller = context.createUnmarshaller() ; + Object xml = unmarshaller.unmarshal(new StringReader(stringXml)); + log(">>> It is a " + xml.getClass().getSimpleName() + " request."); + + //Convert the WCS into WCPS + log(">>> Converting to WCPS ... please wait"); + GetCoverage wcs = (GetCoverage) xml; + ProcessCoverage wcps = new convertGetCoverage(wcs, metaDbPath).get(); + // Write the output WCPS request + log(">>> Writing the WCPS XML request ..."); + javax.xml.bind.JAXBContext jaxbCtx = javax.xml.bind.JAXBContext.newInstance(wcps.getClass().getPackage().getName()); + javax.xml.bind.Marshaller marshaller = jaxbCtx.createMarshaller(); + marshaller.setProperty(javax.xml.bind.Marshaller.JAXB_ENCODING, "UTF-8"); //NOI18N + marshaller.setProperty(javax.xml.bind.Marshaller.JAXB_FORMATTED_OUTPUT, Boolean.TRUE); + StringWriter strWriter = new StringWriter(); + marshaller.marshal(wcps, strWriter); + output = strWriter.toString(); + log(">>> Done! User has his WCPS request !"); + ok = true; + } + catch (WCSException e) + { + ExceptionReport report = e.getReport(); + try + { + javax.xml.bind.JAXBContext jaxbCtx = javax.xml.bind.JAXBContext.newInstance(report.getClass().getPackage().getName()); + javax.xml.bind.Marshaller marshaller = jaxbCtx.createMarshaller(); + marshaller.setProperty(javax.xml.bind.Marshaller.JAXB_ENCODING, "UTF-8"); //NOI18N + marshaller.setProperty(javax.xml.bind.Marshaller.JAXB_FORMATTED_OUTPUT, Boolean.TRUE); + marshaller.marshal(report, System.err); + StringWriter strWriter = new StringWriter(); + marshaller.marshal(report, strWriter); + output = strWriter.toString(); + ok = true; + log("Done with the Error Report !"); + } + catch (Exception e2) + { + e2.printStackTrace(); + errmsg = e2.toString(); + log("ERROR 4"); + } + } + catch (Exception e) + { + e.printStackTrace(); + errmsg = e.toString(); + log("ERROR 5"); + } + + if (ok == false) + output = errmsg; + if (printOutput) + System.out.println("*****************\nOUTPUT IS \n" + output); + + return output; + } + + /** + * WCS DescribeCoverage operation + */ + public String DescribeCoverage(String stringXml) + { + String output = "Default output. "; + String errmsg = "No error. "; + ok = false; + + try + { + // read the input XML + log(">>> Reading the input XML file ... "); + JAXBContext context = JAXBContext.newInstance("net.opengis.wcs.v_1_1_0"); + Unmarshaller unmarshaller = context.createUnmarshaller() ; + Object xml = unmarshaller.unmarshal(new StringReader(stringXml)); + log(">>> It is a " + xml.getClass().getSimpleName() + " request."); + + log(">>> Querying the WCPS architecture for the details on this coverage ..."); + DescribeCoverage input = (DescribeCoverage) xml; + CoverageDescriptions covs = new executeDescribeCoverage(input, metaDbPath).get(); + + // Write the output file + javax.xml.bind.JAXBContext jaxbCtx = javax.xml.bind.JAXBContext.newInstance(covs.getClass().getPackage().getName()); + javax.xml.bind.Marshaller marshaller = jaxbCtx.createMarshaller(); + marshaller.setProperty(javax.xml.bind.Marshaller.JAXB_ENCODING, "UTF-8"); //NOI18N + marshaller.setProperty(javax.xml.bind.Marshaller.JAXB_FORMATTED_OUTPUT, Boolean.TRUE); + StringWriter strWriter = new StringWriter(); + marshaller.marshal(covs, strWriter); + output = strWriter.toString(); + log(">>> Done! User has the DescribeCoverage result !"); + ok = true; + } + catch (WCSException e) + { + ExceptionReport report = e.getReport(); + try { + javax.xml.bind.JAXBContext jaxbCtx = javax.xml.bind.JAXBContext.newInstance(report.getClass().getPackage().getName()); + javax.xml.bind.Marshaller marshaller = jaxbCtx.createMarshaller(); + marshaller.setProperty(javax.xml.bind.Marshaller.JAXB_ENCODING, "UTF-8"); //NOI18N + marshaller.setProperty(javax.xml.bind.Marshaller.JAXB_FORMATTED_OUTPUT, Boolean.TRUE); + marshaller.marshal(report, System.err); + StringWriter strWriter = new StringWriter(); + marshaller.marshal(report, strWriter); + output = strWriter.toString(); + ok = true; + log("Done with the Error Report !"); + } + catch (Exception e2) + { + e2.printStackTrace(); + errmsg = e2.toString(); + log("ERROR 6"); + } + } + catch (Exception e) + { + e.printStackTrace(); + errmsg = e.toString(); + log("ERROR 7"); + } + + + if (ok == false) + output = errmsg; + if (printOutput) + System.out.println("*****************\nOUTPUT IS \n" + output); + + return output; + } + +} |
