001    //$HeadURL: svn+ssh://rbezema@svn.wald.intevation.org/deegree/base/branches/2.2_testing/src/org/deegree/ogcwebservices/wps/describeprocess/ProcessDescription.java $
002    /*----------------    FILE HEADER  ------------------------------------------
003    
004     This file is part of deegree.
005     Copyright (C) 2001-2008 by:
006     EXSE, Department of Geography, University of Bonn
007     http://www.giub.uni-bonn.de/exse/
008     lat/lon GmbH
009     http://www.lat-lon.de
010    
011     This library is free software; you can redistribute it and/or
012     modify it under the terms of the GNU Lesser General Public
013     License as published by the Free Software Foundation; either
014     version 2.1 of the License, or (at your option) any later version.
015    
016     This library is distributed in the hope that it will be useful,
017     but WITHOUT ANY WARRANTY; without even the implied warranty of
018     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
019     Lesser General Public License for more details.
020    
021     You should have received a copy of the GNU Lesser General Public
022     License along with this library; if not, write to the Free Software
023     Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
024    
025     Contact:
026    
027     Andreas Poth
028     lat/lon GmbH
029     Aennchenstraße 19
030     53177 Bonn
031     Germany
032     E-Mail: poth@lat-lon.de
033    
034     Prof. Dr. Klaus Greve
035     Department of Geography
036     University of Bonn
037     Meckenheimer Allee 166
038     53115 Bonn
039     Germany
040     E-Mail: greve@giub.uni-bonn.de
041     
042     ---------------------------------------------------------------------------*/
043    package org.deegree.ogcwebservices.wps.describeprocess;
044    
045    import java.util.ArrayList;
046    import java.util.List;
047    
048    import org.deegree.datatypes.Code;
049    import org.deegree.ogcwebservices.MetadataType;
050    import org.deegree.ogcwebservices.wps.ProcessBrief;
051    
052    /**
053     * 
054     * ProcessDescription.java
055     * 
056     * Created on 09.03.2006. 22:39:07h
057     * 
058     * Full description of a process.
059     * 
060     * @author <a href="mailto:christian@kiehle.org">Christian Kiehle</a>
061     * @author <a href="mailto:christian.heier@gmx.de">Christian Heier</a>
062     * @author last edited by: $Author:wanhoff$
063     * 
064     * @version $Revision: 9345 $, $Date:20.03.2007$
065     */
066    public class ProcessDescription extends ProcessBrief {
067    
068        /**
069         * 
070         * @param resonsibleClass
071         * @param identifier
072         * @param title
073         * @param _abstract
074         * @param processVersion
075         * @param metadata
076         * @param inputs
077         * @param outputs
078         * @param statusSupported
079         * @param storeSupported
080         */
081        public ProcessDescription( String resonsibleClass, Code identifier, String title,
082                                   String _abstract, String processVersion,
083                                   List<MetadataType> metadata, DataInputs inputs,
084                                   ProcessOutputs outputs, Boolean statusSupported,
085                                   Boolean storeSupported ) {
086            super( identifier, title, _abstract, processVersion, metadata );
087            this.responsibleClass = resonsibleClass;
088            this.dataInputs = inputs;
089            this.processOutputs = outputs;
090            this.statusSupported = statusSupported;
091            this.storeSupported = storeSupported;
092        }
093    
094        /**
095         * 
096         */
097        protected String responsibleClass;
098    
099        /**
100         * List of the inputs to this process. In almost all cases, at least one process input is
101         * required. However, no process inputs may be identified when all the inputs are predetermined
102         * fixed resources. In this case, those resources shall be identified in the ows:Abstract
103         * element that describes the process
104         */
105        protected DataInputs dataInputs;
106    
107        /**
108         * List of outputs which will or can result from executing the process.
109         */
110        protected ProcessOutputs processOutputs;
111    
112        /**
113         * Indicates if the Execute operation response can be returned quickly with status information,
114         * or will not be returned until process execution is complete. If "statusSupported" is "true",
115         * the Execute operation request may include "status" equals "true", directing that the Execute
116         * operation response be returned quickly with status information. By default, status
117         * information is not provided for this process, and the Execute operation response is not
118         * returned until process execution is complete.
119         */
120        protected Boolean statusSupported;
121    
122        /**
123         * Indicates if the ComplexData outputs from this process can be stored by the WPS server as
124         * web-accessible resources. If "storeSupported" is "true", the Execute operation request may
125         * include "store" equals "true", directing that all ComplexData outputs of the process be
126         * stored so that the client can retrieve them as required. By default for this process, storage
127         * is not supported and all outputs are returned encoded in the Execute response.
128         */
129        protected Boolean storeSupported;
130    
131        /**
132         * @return Returns the dataInputs.
133         */
134        public DataInputs getDataInputs() {
135            return dataInputs;
136        }
137    
138        /**
139         * @param value
140         *            The dataInputs to set.
141         */
142        public void setDataInputs( DataInputs value ) {
143            this.dataInputs = value;
144        }
145    
146        /**
147         * @return Returns the processOutputs.
148         */
149        public ProcessOutputs getProcessOutputs() {
150            return processOutputs;
151        }
152    
153        /**
154         * @param value
155         *            The processOutputs to set.
156         */
157        public void setProcessOutputs( ProcessOutputs value ) {
158            this.processOutputs = value;
159        }
160    
161        /**
162         * 
163         * @return
164         */
165        public boolean isStatusSupported() {
166            return statusSupported != null;
167        }
168    
169        /**
170         * @param value
171         *            The statusSupported to set.
172         */
173        public void setStatusSupported( Boolean value ) {
174            this.statusSupported = value;
175        }
176    
177        /**
178         * 
179         * @return
180         */
181        public boolean isStoreSupported() {
182            return storeSupported != null;
183        }
184    
185        /**
186         * @param value
187         *            The storeSupported to set.
188         */
189        public void setStoreSupported( Boolean value ) {
190            this.storeSupported = value;
191        }
192    
193        /**
194         * TODO add documentation here
195         * 
196         * @author <a href="mailto:poth@lat-lon.de">Andreas Poth </a>
197         * @author last edited by: $Author:wanhoff$
198         * 
199         * @version $Revision: 9345 $, $Date:20.03.2007$
200         */
201        public static class DataInputs {
202    
203            /**
204             * 
205             * 
206             * Unordered list of one or more descriptions of the inputs that can be accepted by this
207             * process, including all required and optional inputs. Where an input is optional because a
208             * default value exists, that default value must be identified in the "ows:Abstract" element
209             * for that input, except in the case of LiteralData, where the default must be indicated in
210             * the corresponding ows:DefaultValue element. Where an input is optional because it depends
211             * on the value(s) of other inputs, this must be indicated in the ows:Abstract element for
212             * that input.
213             * 
214             * 
215             */
216            private List<InputDescription> inputDescriptions;
217    
218            /**
219             * @return Returns the input.
220             */
221            public List<InputDescription> getInputDescriptions() {
222                if ( inputDescriptions == null ) {
223                    inputDescriptions = new ArrayList<InputDescription>();
224                }
225                return this.inputDescriptions;
226            }
227    
228            /**
229             * @param inputDescriptions
230             */
231            public void setInputDescriptions( List<InputDescription> inputDescriptions ) {
232                this.inputDescriptions = inputDescriptions;
233            }
234    
235        }
236    
237        /**
238         * TODO add documentation here
239         * 
240         * @author <a href="mailto:poth@lat-lon.de">Andreas Poth </a>
241         * @author last edited by: $Author:wanhoff$
242         * 
243         * @version $Revision: 9345 $, $Date:20.03.2007$
244         */
245        public static class ProcessOutputs {
246    
247            /**
248             * Unordered list of one or more descriptions of all the outputs that can result from
249             * executing this process. At least one output is required from each process.
250             */
251            protected List<OutputDescription> output;
252    
253            /**
254             * @return Returns the output.
255             */
256            public List<OutputDescription> getOutput() {
257                if ( output == null ) {
258                    output = new ArrayList<OutputDescription>();
259                }
260                return this.output;
261            }
262    
263        }
264    
265        /**
266         * @return Returns the responsibleClass.
267         */
268        public String getResponsibleClass() {
269            return responsibleClass;
270        }
271    
272    }