public override bool Parse(string str, ProcessDescription processDescription) { if (String.IsNullOrEmpty(str)) { return(false); } string[] tokens = str.Split(new char[] { ';' }, StringSplitOptions.RemoveEmptyEntries); if (tokens.Length != 1) { throw new ExceptionReport("One identifier is mandatory when requesting a raw data output but " + tokens.Length + " were found.", ExceptionCode.InvalidParameterValue, "RawDataOutput"); } string[] kv = str.Split(new char[] { '@' }, StringSplitOptions.RemoveEmptyEntries); if (kv.Length > 0) { OutputData outputData = processDescription.GetProcessOutputParameter(kv[0]); if (outputData == null) { throw new ExceptionReport(String.Format("The output {0} is not a valid output for the process {1}", kv[0], processDescription.Identifier), ExceptionCode.InvalidParameterValue, "rawDataOutput"); } ComplexOutput output = outputData.asComplexOutput(); if (output == null) { throw new ExceptionReport(String.Format("Only ComplexOutputs can be requested as rawDataOutput but {0} is a {1}", kv[0], outputData.GetType().ToString()), ExceptionCode.InvalidParameterValue, "rawDataOutput"); } Identifier = kv[0]; Format = output.Format; // default format Format.ParseValue(str); if (output.Formats.Find(delegate(ComplexFormat cf) { return(cf.Equals(Format)); }) == null) { throw new ExceptionReport(string.Format("Requested format for the output {0} is not supported", kv[0]), ExceptionCode.InvalidParameterValue, kv[0]); } } return(false); }
public override bool Parse(XmlNode node, ProcessDescription processDescription) { if (node == null) { return(false); } XmlNamespaceManager nsmgr = Utils.CreateWPSNamespaceManager(node.OwnerDocument); XmlNodeList childs = node.SelectNodes("ows:Identifier", nsmgr); if (childs.Count != 1) { throw new ExceptionReport("One identifier is mandatory when requesting a raw data output but " + childs.Count + " were found.", ExceptionCode.InvalidParameterValue, "wps:RawDataOutput/ows:Identifier"); } Identifier = childs[0].InnerText; OutputData outputData = processDescription.GetProcessOutputParameter(Identifier); if (outputData == null) { throw new ExceptionReport(String.Format("The output {0} is not a valid output for the process {1}", Identifier, processDescription.Identifier), ExceptionCode.InvalidParameterValue, "rawDataOutput"); } ComplexOutput processOutput = outputData.asComplexOutput(); if (processOutput == null) { throw new ExceptionReport(String.Format("Only ComplexOutputs can be requested as rawDataOutput but {0} is a {1}", Identifier, outputData.GetType().Name), ExceptionCode.InvalidParameterValue, "rawDataOutput"); } Format = processOutput.Format; Format.ParseValue(node); return(true); }