Esempio n. 1
0
        public override bool Parse(string str, ProcessDescription processDescription)
        {
            if (String.IsNullOrEmpty(str))
            {
                return(false);
            }

            string[] tokens = str.Split(new char[] { ';' }, StringSplitOptions.RemoveEmptyEntries);

            ExceptionReport exception = null;

            foreach (string param in tokens)
            {
                string[] kv = param.Split(new char[] { '@' }, StringSplitOptions.RemoveEmptyEntries);
                if (kv.Length > 0)
                {
                    OutputData output = processDescription.GetProcessOutputParameter(kv[0]);
                    if (output != null)
                    {
                        OutputData myoutput = output.Clone();
                        try
                        {
                            myoutput.Parse(param);
                            Outputs.Add(myoutput);
                        }
                        catch (ExceptionReport e)
                        {
                            exception = new ExceptionReport(e, exception);
                        }
                    }
                    else
                    {
                        exception = new ExceptionReport(exception, "The output "
                                                        + kv[0] + " is not a valid output for the process " + processDescription.Identifier,
                                                        ExceptionCode.InvalidParameterValue, "responseDocument");
                    }
                }
            }

            if (exception != null)
            {
                throw exception;
            }

            return(tokens.Length != 0);
        }
Esempio n. 2
0
        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);
        }
Esempio n. 3
0
        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);
        }
Esempio n. 4
0
        public override bool Parse(string str, ProcessDescription processDescription)
        {
            if (String.IsNullOrEmpty(str)) return false;

            string[] tokens = str.Split(new char[] { ';' }, StringSplitOptions.RemoveEmptyEntries);

            ExceptionReport exception = null;

            foreach (string param in tokens)
            {
                string[] kv = param.Split(new char[] { '@' }, StringSplitOptions.RemoveEmptyEntries);
                if (kv.Length > 0)
                {
                    OutputData output = processDescription.GetProcessOutputParameter(kv[0]);
                    if (output != null)
                    {
                        OutputData myoutput = output.Clone();
                        try
                        {
                            myoutput.Parse(param);
                            Outputs.Add(myoutput);
                        }
                        catch (ExceptionReport e)
                        {
                            exception = new ExceptionReport(e, exception);
                        }
                    }
                    else
                    {
                        exception = new ExceptionReport(exception, "The output "
                                + kv[0] + " is not a valid output for the process " + processDescription.Identifier,
                                ExceptionCode.InvalidParameterValue, "responseDocument");
                    }
                }
            }

            if (exception != null) throw exception;

            return tokens.Length != 0;
        }
Esempio n. 5
0
        public override bool Parse(XmlNode node, ProcessDescription processDescription)
        {
            if (node == null) return false;

            // Create an XmlNamespaceManager for resolving namespaces.
            XmlNamespaceManager nsmgr = Utils.CreateWPSNamespaceManager(node.OwnerDocument);

            lineage = Boolean.Parse(Utils.GetXmlAttributesValue(node, "lineage", "false"));
            status = Boolean.Parse(Utils.GetXmlAttributesValue(node, "status", "false"));
            storeExecuteResponse = Boolean.Parse(Utils.GetXmlAttributesValue(node, "storeExecuteResponse", "false"));

            XmlNodeList outputs = node.SelectNodes("wps:Output", nsmgr);
            if (outputs.Count == 0)
                throw new ExceptionReport(String.Format("No 'wps:Output' node was found inside the 'wps:ResponseDocument' node for the process '{0}'. Please check your request.",
                            processDescription.Identifier),
                            ExceptionCode.MissingParameterValue, processDescription.Identifier);

            ExceptionReport exception = null;

            foreach (XmlNode output in outputs)
            {
                XmlNode id = output.SelectSingleNode("ows:Identifier", nsmgr);
                XmlNode abst = output.SelectSingleNode("ows:Abstract", nsmgr);
                XmlNode title = output.SelectSingleNode("ows:Title", nsmgr);

                string identifier = id.InnerText;
                string titleStr = title != null ? title.InnerText : "";
                string abstStr = abst != null ? abst.InnerText : "";

                OutputData processOutput = processDescription.GetProcessOutputParameter(identifier);
                if (processOutput != null)
                {
                    OutputData myoutput = processOutput.Clone();
                    myoutput.Title = titleStr;
                    myoutput.Abstract = abstStr;
                    myoutput.asReference = Boolean.Parse(Utils.GetXmlAttributesValue(output, "asReference", "false"));
                    if (myoutput.asReference && !processDescription.storeSupported)
                        exception = new ExceptionReport(exception,
                            String.Format("The storage of response is not supported for the process {0} but is requested for the output {1}.",
                            processDescription.Identifier, identifier),
                            ExceptionCode.StorageNotSupported);
                    try
                    {
                        myoutput.Parse(output);
                        Outputs.Add(myoutput);
                    }
                    catch (ExceptionReport e)
                    {
                        exception = new ExceptionReport(e, exception);
                    }
                }
                else
                {
                    exception = new ExceptionReport(exception, String.Format("The output {0} is not a valid output for the process {1}",
                            identifier, processDescription.Identifier), ExceptionCode.InvalidParameterValue, "responseDocument");
                }
            }

            if (exception != null) throw exception;

            return true;
        }
Esempio n. 6
0
        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;
        }
Esempio n. 7
0
        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;
        }
Esempio n. 8
0
        public override bool Parse(XmlNode node, ProcessDescription processDescription)
        {
            if (node == null)
            {
                return(false);
            }

            // Create an XmlNamespaceManager for resolving namespaces.
            XmlNamespaceManager nsmgr = Utils.CreateWPSNamespaceManager(node.OwnerDocument);

            lineage = Boolean.Parse(Utils.GetXmlAttributesValue(node, "lineage", "false"));
            status  = Boolean.Parse(Utils.GetXmlAttributesValue(node, "status", "false"));
            storeExecuteResponse = Boolean.Parse(Utils.GetXmlAttributesValue(node, "storeExecuteResponse", "false"));

            XmlNodeList outputs = node.SelectNodes("wps:Output", nsmgr);

            if (outputs.Count == 0)
            {
                throw new ExceptionReport(String.Format("No 'wps:Output' node was found inside the 'wps:ResponseDocument' node for the process '{0}'. Please check your request.",
                                                        processDescription.Identifier),
                                          ExceptionCode.MissingParameterValue, processDescription.Identifier);
            }

            ExceptionReport exception = null;

            foreach (XmlNode output in outputs)
            {
                XmlNode id    = output.SelectSingleNode("ows:Identifier", nsmgr);
                XmlNode abst  = output.SelectSingleNode("ows:Abstract", nsmgr);
                XmlNode title = output.SelectSingleNode("ows:Title", nsmgr);

                string identifier = id.InnerText;
                string titleStr   = title != null ? title.InnerText : "";
                string abstStr    = abst != null ? abst.InnerText : "";

                OutputData processOutput = processDescription.GetProcessOutputParameter(identifier);
                if (processOutput != null)
                {
                    OutputData myoutput = processOutput.Clone();
                    myoutput.Title       = titleStr;
                    myoutput.Abstract    = abstStr;
                    myoutput.asReference = Boolean.Parse(Utils.GetXmlAttributesValue(output, "asReference", "false"));
                    if (myoutput.asReference && !processDescription.storeSupported)
                    {
                        exception = new ExceptionReport(exception,
                                                        String.Format("The storage of response is not supported for the process {0} but is requested for the output {1}.",
                                                                      processDescription.Identifier, identifier),
                                                        ExceptionCode.StorageNotSupported);
                    }
                    try
                    {
                        myoutput.Parse(output);
                        Outputs.Add(myoutput);
                    }
                    catch (ExceptionReport e)
                    {
                        exception = new ExceptionReport(e, exception);
                    }
                }
                else
                {
                    exception = new ExceptionReport(exception, String.Format("The output {0} is not a valid output for the process {1}",
                                                                             identifier, processDescription.Identifier), ExceptionCode.InvalidParameterValue, "responseDocument");
                }
            }

            if (exception != null)
            {
                throw exception;
            }

            return(true);
        }