package dods.clients.importwizard.ECHO; import java.lang.*; import javax.swing.*; import java.awt.event.*; import java.awt.*; import java.util.*; import org.jdom.*; import org.jdom.output.XMLOutputter; /** * * * * @author Sheila Jiang */ public class GranuleQuery implements QueryRequest { private Document queryReqDocument; private Document iimsaqlDocument; private SpatialQuery spacialQuery; private TemporalQuery temporalQuery; private PresentResult presentResult; // private CollectionValids collectionValids; public GranuleQuery(){ Element catalogServiceElement = new Element("CatalogService"); queryReqDocument = new Document(catalogServiceElement); Element queryElement = new Element("query"); iimsaqlDocument = new Document(queryElement); presentResult = new PresentResult(); } public Document getQueryRequest(){ return queryReqDocument; } public Document getIIMSAQL(){ return iimsaqlDocument; } public Document buildQueryRequest(SpatialQuery spatialQuery, TemporalQuery temporalQuery, Vector valids, Vector resultValids){ Element rootElement = queryReqDocument.getRootElement(); //set element to be constrained and the systemID of referenced DTD DocType docType = new DocType("CatalogService", "http://fosters.gsfc.nasa.gov:4300/dtd/CatalogService.dtd"); queryReqDocument.setDocType(docType); //add more elements // QueryRequest Element queryRequestElement = new Element("QueryRequest"); rootElement.addContent(queryRequestElement); //QueryExpression Element queryExprElement = new Element("QueryExpression"); queryRequestElement.addContent(queryExprElement); //query Element queryElement = new Element("query"); queryExprElement.addContent(queryElement); //CDATA //execute buildIIMSAQL first buildIIMSAQL(spatialQuery, temporalQuery, valids); XMLOutputter myXMLOutputter = new XMLOutputter(); CDATA cData = new CDATA(myXMLOutputter.outputString(iimsaqlDocument)); queryElement.addContent(cData); //namespace Element nameSpaceElement = new Element("namespace"); nameSpaceElement.addContent("none"); queryExprElement.addContent(nameSpaceElement); //QueryLanguage Element queryLanguageElement = new Element("QueryLanguage"); queryLanguageElement.addContent(new Element("IIMSAQL")); queryExprElement.addContent(queryLanguageElement); //ResultType Element resultTypeElement = new Element("ResultType"); resultTypeElement.addContent(new Element("RESULTS")); queryRequestElement.addContent(resultTypeElement); //Result presentation details //The constructor is to be change to a taking para one presentResult.buildResultDetail(resultValids); Element[] resultDet = presentResult.getResultDetail(); //add resultDet to the Document for (int i=0; i<3; i++){ queryRequestElement.addContent(resultDet[i]); } return queryReqDocument; } public Document buildIIMSAQL(SpatialQuery spatialQuery, TemporalQuery temporalQuery, Vector valids) { Element rootElement = iimsaqlDocument.getRootElement(); //set element to be constrained and the systemID of referenced DTD DocType docType = new DocType("query", "http://fosters.gsfc.nasa.gov:4300/dtd/IIMSAQLQueryLanguage.dtd"); iimsaqlDocument.setDocType(docType); //add more elements // for Element forElement = new Element("for"); forElement.setAttribute(new Attribute("value", "granules")); rootElement.addContent(forElement); //dataCenterId Element dataCenterIdElement = new Element("dataCenterId"); dataCenterIdElement.addContent(new Element("all")); rootElement.addContent(dataCenterIdElement); //where Element whereElement = new Element("where"); rootElement.addContent(whereElement); //collectionCondition Element granuleCondElement; for (int i=0; i<valids.size(); i++) { String[] strList = {"browseOnly", "cloudCover", "dayNightFlag", "globalGranulesOnly"}; // attribute "value" Object o = valids.elementAt(i); if (!o.getClass().isInstance(new JTextField())) { CollectionValids theList = (CollectionValids)valids.elementAt(i); if (theList.isSelected() && theList.getSelectedIndex() != -1) { granuleCondElement = new Element("granuleCondition"); Element temp = new Element(theList.getName()); if (theList.getName().equals(strList[0]) || theList.getName().equals(strList[1]) || theList.getName().equals(strList[2]) || theList.getName().equals(strList[3])) { temp.setAttribute(new Attribute("value", (String)theList.getSelectedValue())); } else { Element list = new Element("list"); temp.addContent(list); for (int j=0; j<theList.getValids().length; j++){ Element value = new Element("value"); if (theList.getSelection(j)) { value.addContent("'" + theList.getValids()[j] + "'"); list.addContent(value); } } } granuleCondElement.addContent(temp); whereElement.addContent(granuleCondElement); } } else { JTextField theText = (JTextField)valids.elementAt(i); if (!theText.getText().equals("")) { granuleCondElement = new Element("granuleCondition"); Element temp = new Element(theText.getName()); if (theText.getName().equals(strList[0]) || theText.getName().equals(strList[1]) || theText.getName().equals(strList[2]) || theText.getName().equals(strList[3])) { temp.setAttribute(new Attribute("value", theText.getText())); } else { Element value = new Element("value"); value.addContent("'" + theText.getText() + "'"); temp.addContent(value); } granuleCondElement.addContent(temp); whereElement.addContent(granuleCondElement); } } } //spacial query granuleCondElement = new Element("granuleCondition"); if (spatialQuery.getSpatialQuery()[0] != null) granuleCondElement.addContent(spatialQuery.getSpatialQuery()[0]); else if (spatialQuery.getSpatialQuery()[1] != null) granuleCondElement.addContent(spatialQuery.getSpatialQuery()[1]); whereElement.addContent(granuleCondElement); /* //spacial and temporal Element spatialElement = new Element("spatial"); collectionCondElement.addContent(spatialElement); Element temporalElement = new Element("temporal"); collectionCondElement.addContent(temporalElement); spatialElement.addContent(spatialQuery.getSpatial()[0]); temporalElement.addContent(temporalQuery.getTemporal()[0]);*/ //collectionValids /* old code Element campaignElement = new Element("campaign"); campaignElement.addContent(new Element("value").addContent(valids.getValids()[0])); collectionCondElement.addContent(campaignElement); */ return iimsaqlDocument; } public PresentResult getPresentResult() { return presentResult; } }