@Override public void process(ProcessletInputs in, ProcessletOutputs out, ProcessletExecutionInfo info) throws ProcessletException { try { WHSServiceVO vo = new WHSServiceVO(); URL processDefinitionUrl = this.getClass().getResource("/" + this.getClass().getSimpleName() + ".xml"); DataInputHandler dataInputHandler = new DataInputHandler(new File(processDefinitionUrl.toURI())); String srsName = dataInputHandler.getValidatedStringValue(in, "srsName"); String x = String.valueOf(DataInputHandler.getDoubleInputValue(in, "x")); String y = String.valueOf(DataInputHandler.getDoubleInputValue(in, "y")); String z = String.valueOf(DataInputHandler.getDoubleInputValue(in, "z")); String tolerance = dataInputHandler.getValidatedStringValue(in, "tolerance"); String filter = dataInputHandler.getValidatedStringValue(in, "filter"); vo.setFromSRSCodeOne(srsName); vo.setFromSRSCode(srsName); // vo.setToSRSCodeOne(agea); // vo.setToSRSCode(agea); vo.setTolerance(tolerance); vo.setFilter(filter); if (vo.getFilter().toLowerCase().startsWith("filepath:")) { vo.setFilter(vo.getFilter().replaceAll("filePath:", "")); } LOG.debug("From SRS Code: {}", vo.getFromSRSCodeOne()); LOG.debug("Filter: {}", vo.getFilter()); // validate data inputs vo.setOriginalCoordinateX(x); vo.setOriginalCoordinateY(y); vo.setOriginalCoordinateZ(z); String transformedCoordinatesString = ""; if (vo.getFromSRSCode().equalsIgnoreCase("image")) { vo.setTransformedCoordinateX(vo.getOriginalCoordinateX()); vo.setTransformedCoordinateY(vo.getOriginalCoordinateY()); vo.setTransformedCoordinateZ(vo.getOriginalCoordinateZ()); } else if (vo.getFromSRSCode().equalsIgnoreCase(abaReference)) { vo.setTransformedCoordinateX(vo.getOriginalCoordinateX()); vo.setTransformedCoordinateY(vo.getOriginalCoordinateY()); vo.setTransformedCoordinateZ(vo.getOriginalCoordinateZ()); } else { // Call getTransformationChain method here... // ABAVoxel vo.setOriginalCoordinateX(";x=" + vo.getOriginalCoordinateX()); vo.setOriginalCoordinateY(";y=" + vo.getOriginalCoordinateY()); vo.setOriginalCoordinateZ(";z=" + vo.getOriginalCoordinateZ()); vo.setToSRSCode(abaReference); vo.setToSRSCodeOne(abaReference); // Construct GetTransformationChain URL // http://132.239.131.188:8080/atlas-ucsd?service=WPS&version=1.0.0&request=Execute&Identifier=GetTransformationChain&DataInputs=inputSrsName=Mouse_Paxinos_1.0;outputSrsName=Mouse_ABAreference_1.0;filter=Cerebellum // Start - FIXME - Uncomment below two lines and comment the // other three lines // String hostName = uri.getHost(); // String portNumber = delimitor + uri.getPort(); String delimitor = config.getValue("incf.deploy.port.delimitor"); hostName = config.getValue("incf.deploy.host.name"); portNumber = config.getValue("incf.aba.port.number"); portNumber = delimitor + portNumber; // End - FIXME // central/atlas String servicePath = "/central/atlas?service=WPS&version=1.0.0&request=Execute&Identifier=GetTransformationChain&DataInputs=inputSrsName=" + vo.getFromSRSCode() + ";outputSrsName=" + vo.getToSRSCode() + ";filter=NONE"; String transformationChainURL = "http://" + hostName + portNumber + servicePath; XMLUtilities xmlUtilities = new XMLUtilities(); transformedCoordinatesString = xmlUtilities.coordinateTransformation( transformationChainURL, vo.getOriginalCoordinateX(), vo.getOriginalCoordinateY(), vo.getOriginalCoordinateZ()); // Start - exception handling if (transformedCoordinatesString.startsWith("Error:")) { throw new OWSException("Transformed Coordinates Error: ", transformedCoordinatesString); } // End - exception handling WHSUtil util = new WHSUtil(); String[] tempArray = util.getTabDelimNumbers(transformedCoordinatesString); vo.setTransformedCoordinateX(tempArray[0]); vo.setTransformedCoordinateY(tempArray[1]); vo.setTransformedCoordinateZ(tempArray[2]); } // End AnnotationResponseDocument document = completeResponse(vo); ArrayList errorList = new ArrayList(); // opt.setErrorListener(errorList); // boolean isValid = document.validate(opt); // If the XML isn't valid, loop through the listener's contents, // printing contained messages. /* if (!isValid) { for (int i = 0; i < errorList.size(); i++) { XmlError error = (XmlError) errorList.get(i); LOG.debug("\n"); LOG.debug("Message: {}" , error.getMessage() + "\n"); LOG.debug("Location of invalid XML: {}" , error.getCursorLocation().xmlText() + "\n"); } } */ ComplexOutput complexOutput = (ComplexOutput) out.getParameter("GetAnnotationsByPOIOutput"); // get reader on document; reader --> writer XMLStreamReader reader = document.newXMLStreamReader(); XMLStreamWriter writer = complexOutput.getXMLStreamWriter(); XMLAdapter.writeElement(writer, reader); } catch (MissingParameterException e) { LOG.error(e.getMessage(), e); throw new ProcessletException(new OWSException(e)); } catch (InvalidParameterValueException e) { LOG.error(e.getMessage(), e); throw new ProcessletException(new OWSException(e)); } catch (Throwable e) { String message = "Unexpected exception occured"; LOG.error(message, e); OWSException owsException = new OWSException(message, e, ControllerException.NO_APPLICABLE_CODE); throw new ProcessletException(owsException); } }
public AnnotationResponseDocument completeResponse(WHSServiceVO vo) { LOG.debug("X1: " + vo.getTransformedCoordinateX()); LOG.debug("Y1: " + vo.getTransformedCoordinateY()); LOG.debug("Z1: " + vo.getTransformedCoordinateZ()); String x1 = vo.getTransformedCoordinateX(); String x2 = String.valueOf( Double.parseDouble(vo.getTransformedCoordinateX()) + Double.parseDouble(vo.getTolerance())); String x3 = String.valueOf( Double.parseDouble(vo.getTransformedCoordinateX()) + Double.parseDouble(vo.getTolerance())); String x4 = vo.getTransformedCoordinateX(); String y1 = vo.getTransformedCoordinateY(); String y2 = vo.getTransformedCoordinateY(); String y3 = String.valueOf( Double.parseDouble(vo.getTransformedCoordinateY()) - Double.parseDouble(vo.getTolerance())); String y4 = String.valueOf( Double.parseDouble(vo.getTransformedCoordinateY()) - Double.parseDouble(vo.getTolerance())); AnnotationResponseDocument doc = AnnotationResponseDocument.Factory.newInstance(); AnnotationResponse annResp = doc.addNewAnnotationResponse(); String polygonString = x1 + " " + y1 + "," + x2 + " " + y2 + "," + x3 + " " + y3 + "," + x4 + " " + y4 + "," + x1 + " " + y1; LOG.debug("Artibrary polygon string - {}", polygonString); ArrayList annotationDataList = new ArrayList(); WHSServiceDAOImpl daoImpl = new WHSServiceDAOImpl(); LOG.debug("*********************************SRSName outside: " + vo.getFromSRSCode()); LOG.debug("*********************************filter outside: " + vo.getFilter()); if (!vo.getFromSRSCode().equalsIgnoreCase("image")) { LOG.debug("*********************************SRSName inside Image: " + vo.getSrsName()); annotationDataList = daoImpl.getAnnotationData(vo, polygonString); } else if (vo.getFromSRSCode().equalsIgnoreCase("image")) { LOG.debug( "*********************************SRSName inside Not Actual SRSName: " + vo.getFromSRSCode()); annotationDataList = daoImpl.getAnnotationData(vo); } else { // FIXME - Put some exception code here to throw an exception LOG.debug("SRS TYPE NOT SUPPORTED"); } Iterator iterator0 = annotationDataList.iterator(); String id = ""; String path = ""; HashMap map = new HashMap(); while (iterator0.hasNext()) { vo = (WHSServiceVO) iterator0.next(); id = vo.getUniqueID(); path = vo.getOntoFilePath(); map.put(id, path); } LOG.debug("Map Size: " + map.size()); Iterator annotationsIterator = map.keySet().iterator(); String key = ""; while (annotationsIterator.hasNext()) { key = annotationsIterator.next().toString(); LOG.debug("*****************New Annotation*****************"); AnnotationType ann = annResp.addNewAnnotation(); Iterator dataIterator = annotationDataList.iterator(); GEOMETRYTYPE geom1 = null; AnnPolygonType polygon1 = null; GEOMETRIES geometries = null; geometries = ann.addNewGEOMETRIES(); geom1 = geometries.addNewGEOMETRY(); // Resource and Geometries should be only one time RESOURCE res = ann.addNewRESOURCE(); /* CentralServiceVO vo1 = null; while (dataIterator.hasNext()) { vo1 = (CentralServiceVO)dataIterator.next(); LOG.debug("**Key from Hash Map:**" + key ); LOG.debug("**Key from Collection:**" + vo1.getUniqueID() ); if (key.equals(vo1.getUniqueID())){ */ LOG.debug("*****************New Data Inside Annotation*****************"); // Loop here - New Annotation Iterator iterator1 = annotationDataList.iterator(); WHSServiceVO vo2 = null; // Delete this loop while (iterator1.hasNext()) { vo2 = (WHSServiceVO) iterator1.next(); LOG.debug("##Original Key MAP INSIDEPOLYGON:##" + key); LOG.debug("##Key from Collection INSIDE POLYGON:##" + vo2.getUniqueID()); if (vo2.getUniqueID().equals(key)) { polygon1 = geom1.addNewPOLYGON(); LOG.debug("##Inside POLYGON:##"); /* LOG.debug("Date is: " + date ); LOG.debug("Time is: " + date.getTime() ); LOG.debug("Day is: " + date.getDate() ); */ // FIXME - update the unique url below from the db res.setFilepath(vo2.getOntoFilePath()); geom1.setUserName(vo2.getUserName()); if (vo2.getSrsName() == null || vo2.getSrsName().equals("")) { polygon1.setSrsName("Undefined"); } else { polygon1.setSrsName(vo2.getSrsName()); } polygon1.setId(gmlId(vo2.getPolygonID())); // date = vo.getUpdatedTime(); // FIXME Calendar cal = Calendar.getInstance(); cal.setTime(vo.getUpdatedTime()); ann.setMODIFIEDDATE(cal); // FIXME - modifiedTime // long modifiedTime = Long.parseLong(vo1.getUpdatedTime()); Date date = null; // FIXME geom1.setModifiedTime(vo.getUpdatedTime().getTime()); AbstractRingPropertyType poly1exterior = polygon1.addNewExterior(); XmlObject ring = poly1exterior.addNewAbstractRing(); XmlObject linearRing = ring.substitute( new QName("http://www.opengis.net/gml/3.2", "LinearRing"), LinearRingType.type); DirectPositionType pos1 = ((LinearRingType) linearRing).addNewPos(); pos1.setStringValue(vo2.getTransformedCoordinates().replaceAll(",", " ")); } } GENERALONTOMODEL model1 = ann.addNewGENERALONTOMODEL(); RELATIONSTYPE relations = model1.addNewRELATIONS(); Iterator iterator2 = annotationDataList.iterator(); WHSServiceVO vo3 = null; while (iterator2.hasNext()) { vo3 = (WHSServiceVO) iterator2.next(); if (vo3.getUniqueID().equals(key)) { ONTOPROPERTYTYPE prop2 = relations.addNewONTOPROPERTY(); prop2.setTitle("has_geometry"); // Below URL never changes prop2.setHref( "http://ontology.neuinfo.org/NIF/Backend/NIFSTD_Datatype_properties.owl#hasGeometry"); prop2.setUserName(vo3.getUserName()); // FIXME - modifiedTime prop2.setModifiedTime(vo.getUpdatedTime().getTime()); SUBJECTTYPE subj2 = prop2.addNewSUBJECT(); ONTOTERMTYPE term2_1 = subj2.addNewONTOTERM(); term2_1.setTitle(vo3.getOntoName()); term2_1.setHref(vo3.getOntoURI()); term2_1.setId(gmlId(vo3.getPolygonID())); // term2_1.newCursor().insertComment(" title = onto_name, href = onto_url gml:id= // instance_id"); OBJECTTYPE obj2 = prop2.addNewOBJECT(); GEOMETRYTYPE term2_2 = obj2.addNewGEOMETRY(); term2_2.setHref(gmlIdInteralReference(gmlId(vo3.getPolygonID()))); } } ONTOTERMS terms = ann.addNewONTOTERMS(); Iterator iterator3 = annotationDataList.iterator(); WHSServiceVO vo4 = null; while (iterator3.hasNext()) { vo4 = (WHSServiceVO) iterator3.next(); if (vo4.getUniqueID().equals(key)) { ONTOTERMTYPE term2 = terms.addNewONTOTERM(); term2.setId(gmlId(vo4.getPolygonID())); term2.setHref(vo4.getOntoURI()); term2.setTitle(vo4.getOntoName()); } } // } // } } return doc; }