package org.perfsonar.service.measurementArchive.metadataConfig.queryGenerator; import org.perfsonar.commons.auxiliary.AuxiliaryComponentManager; import org.perfsonar.commons.auxiliary.ComponentNames; import org.perfsonar.commons.auxiliary.components.logger.LoggerComponent; import org.perfsonar.service.commons.exceptions.SystemException; import org.perfsonar.service.commons.exceptions.RequestException; import org.ggf.ns.nmwg.base.v2_0.Message; import org.ggf.ns.nmwg.base.v2_0.Metadata; import org.ggf.ns.nmwg.base.v2_0.Parameters; import org.ggf.ns.nmwg.base.v2_0.Parameter; import org.ggf.ns.nmwg.topology.v2_0.EndPointPair; import org.ggf.ns.nmwg.topology.v2_0.Dst; import org.ggf.ns.nmwg.topology.v2_0.Src; import org.ggf.ns.nmwg.tools.traceroute.v2_0.Subject; /** * * @author Mohammad Asif * Created on January 2, 2007, 1:29 PM */ public class TracerouteQueryGenerator implements MetadataQueryGenerator { // -------------------------------------- class fields protected LoggerComponent logger = null; // -------------------------------------- constructors public TracerouteQueryGenerator() throws SystemException { try { this.logger = (LoggerComponent) AuxiliaryComponentManager. getInstance(). getComponent(ComponentNames.LOGGER); } catch (SystemException e) { throw new SystemException( "error.common.no_logger", "TracerpiteQueryGenerator.constructor: " + "Cannot get logger component"); } } /** * Returns xpath query created using the information * stored in Message object. */ public String getMetadataQuery(Message query) throws SystemException, RequestException { if (query == null) throw new SystemException( "error.ma.query", "TracerouteQueryGenerator.getMetadataQuery: " + "Input message is null"); String src="" ; String dst = ""; String startTime = ""; String endTime = ""; String eventType = ""; String metaId = ""; Metadata metadata = null; try { Metadata[] metadataArray = (query.getMetadataArray()); metadata = metadataArray[0]; System.out.println (metadata.getId()); } catch (Exception ex) { logger.error( "TracerouteQueryGenerator.getMetadataQuery: " + "Unable to get metadata from the message"); throw new RequestException( "error.ma.query", "TracerouteQueryGenerator.getMetadataQuery: " + "Unable to get metadata from the message; " + ex.toString()); } if (metadata != null) { metaId = metadata.getId(); eventType = (metadata.getEventType() != null ? metadata.getEventType().getEventType().trim() : ""); System.out.println ("EventType: "+ eventType); Subject subject = (Subject) metadata.getSubject(); EndPointPair end = subject.getEndPointPair(); /* Parameters params = metadata.getParameters(); Parameter paramStartTime = params.getParameterByName("startTime"); Parameter paramEndTime = params.getParameterByName("endTime") ; */ if (end != null) { src = (end.getSourceElement() != null ? end.getSourceElement().getValue().trim() : ""); dst = (end.getDestinationElement() != null ? end.getDestinationElement().getValue().trim() : ""); } /* if (paramStartTime != null) startTime = (paramStartTime.getParameterValue() != null ? paramStartTime.getParameterValue().trim() : ""); if (paramEndTime != null) endTime = (paramEndTime.getParameterValue() != null ? paramEndTime.getParameterValue().trim() : ""); */ } String xQuery = "\n" + "declare namespace nmwg='http://ggf.org/ns/nmwg/base/2.0/'; " + "declare namespace traceroute='http://ggf.org/ns/nmwg/tools/traceroute/2.0/'; " + "declare namespace nmwgt='http://ggf.org/ns/nmwg/topology/2.0/'; \n\n"; xQuery += " let $res := \n" + " for $i in //nmwg:metadata \n" + " where 1 \n"; if (eventType != "") xQuery += "and $i/nmwg:parameters/nmwg:parameter[(text()='" + eventType + "' and @name='supportedEventType') " + "or (@value='" + eventType + "' and @name='supportedEventType')]"; if (src != "") xQuery += "and $i/traceroute:subject/nmwgt:endPointPair/nmwgt:src[@value='" + src + "']"; if (dst != "") xQuery += "and $i/traceroute:subject/nmwgt:endPointPair/nmwgt:dst[@value='" + dst + "']"; /* if (startTime != "") xQuery += "and $i/trace:parameters/nmwg:parameter[(text()='" + startTime + "' and @name='startTime') " + "or (@value='" + startTime + "' and @name='startTime')]"; if (endTime != "") xQuery += "and $i/trace:parameters/nmwg:parameter[(text()='" + endTime + "' and @name='endTime') " + "or (@value='" + endTime + "' and @name='endTime')]"; */ xQuery += "\n" + " return $i \n" + " \n" + " let $metaids := \n" + " for $j in $res \n" + " return fn:data($j/@id) \n" + " \n" + " let $datas := \n" + " for $k in $metaids \n" + " let $d := \n" + " for $l in //nmwg:data \n" + " where $l/@metadataIdRef = $k \n" + " return $l \n" + " return $d \n" + " \n" + " return ($res, $datas) \n"; return xQuery; }