Statistics
| Revision:

root / org.gvsig.toolbox / trunk / org.gvsig.toolbox / org.gvsig.toolbox.core / src / main / java / es / unex / sextante / parameters / ParameterVectorLayer.java @ 202

History | View | Annotate | Download (5.88 KB)

1
package es.unex.sextante.parameters;
2

    
3
import java.io.IOException;
4

    
5
import org.kxml2.io.KXmlParser;
6
import org.kxml2.io.KXmlSerializer;
7
import org.xmlpull.v1.XmlPullParser;
8
import org.xmlpull.v1.XmlPullParserException;
9

    
10
import es.unex.sextante.additionalInfo.AdditionalInfo;
11
import es.unex.sextante.additionalInfo.AdditionalInfoDataObject;
12
import es.unex.sextante.additionalInfo.AdditionalInfoVectorLayer;
13
import es.unex.sextante.dataObjects.I3DRasterLayer;
14
import es.unex.sextante.dataObjects.IRasterLayer;
15
import es.unex.sextante.dataObjects.ITable;
16
import es.unex.sextante.dataObjects.IVectorLayer;
17
import es.unex.sextante.exceptions.NullParameterAdditionalInfoException;
18
import es.unex.sextante.exceptions.NullParameterValueException;
19
import es.unex.sextante.exceptions.WrongParameterTypeException;
20

    
21
/**
22
 * A parameter representing a vector layer
23
 *
24
 * @author volaya
25
 *
26
 */
27
public class ParameterVectorLayer
28
         extends
29
            ParameterDataObject {
30

    
31

    
32
   private static final String TYPE = "shape_type";
33

    
34

    
35
   @Override
36
   public String getParameterTypeName() {
37

    
38
      return "Vector Layer";
39

    
40
   }
41

    
42

    
43
   @Override
44
   public IRasterLayer getParameterValueAsRasterLayer() throws WrongParameterTypeException {
45

    
46
      throw new WrongParameterTypeException();
47

    
48
   }
49

    
50

    
51
   @Override
52
   public I3DRasterLayer getParameterValueAs3DRasterLayer() throws WrongParameterTypeException {
53

    
54
      throw new WrongParameterTypeException();
55

    
56
   }
57

    
58

    
59
   @Override
60
   public ITable getParameterValueAsTable() throws WrongParameterTypeException {
61

    
62
      throw new WrongParameterTypeException();
63

    
64
   }
65

    
66

    
67
   @Override
68
   public IVectorLayer getParameterValueAsVectorLayer() throws NullParameterValueException {
69

    
70
      if (m_ParameterValue != null) {
71
         return (IVectorLayer) m_ParameterValue;
72
      }
73
      if (((AdditionalInfoVectorLayer) m_ParameterAdditionalInfo).getIsMandatory()) {
74
         throw new NullParameterValueException();
75
      }
76
      else {
77
         return null;
78
      }
79
   }
80

    
81

    
82
   @Override
83
   public boolean setParameterAdditionalInfo(final AdditionalInfo additionalInfo) {
84

    
85
      if (additionalInfo instanceof AdditionalInfoVectorLayer) {
86
         m_ParameterAdditionalInfo = additionalInfo;
87
         return true;
88
      }
89
      else {
90
         return false;
91
      }
92

    
93
   }
94

    
95

    
96
   @Override
97
   public boolean setParameterValue(final Object value) {
98

    
99
        if (value instanceof IVectorLayer) {
100
            final AdditionalInfoVectorLayer ai = (AdditionalInfoVectorLayer) m_ParameterAdditionalInfo;
101
            if (ai.isAvailableForShapeType(((IVectorLayer) value).getShapeType())) {
102
                m_ParameterValue = value;
103
                return true;
104
            } else {
105
                return false;
106
            }
107
        }
108
      else if (value == null) {
109
         if (((AdditionalInfoVectorLayer) m_ParameterAdditionalInfo).getIsMandatory()) {
110
            return false;
111
         }
112
         else {
113
            m_ParameterValue = null;
114
            return true;
115
         }
116
      }
117
      else {
118
         return false;
119
      }
120

    
121
   }
122

    
123

    
124
   @Override
125
   public Class getParameterClass() {
126

    
127
      return IVectorLayer.class;
128

    
129
   }
130

    
131

    
132
   @Override
133
   protected void serializeAttributes(final KXmlSerializer serializer) throws NullParameterAdditionalInfoException, IOException {
134

    
135
      super.serializeAttributes(serializer);
136

    
137
      final AdditionalInfoVectorLayer aivl = (AdditionalInfoVectorLayer) m_ParameterAdditionalInfo;
138
      if (aivl != null) {
139
         serializer.text("\n");
140
         serializer.text("\t\t\t");
141
         serializer.startTag(null, ATTRIBUTE);
142
         serializer.attribute(null, NAME, TYPE);
143
         serializer.attribute(null, VALUE, new Integer(aivl.getShapeType()).toString());
144
         serializer.endTag(null, ATTRIBUTE);
145
      }
146
      else {
147
         throw new NullParameterAdditionalInfoException();
148
      }
149

    
150
   }
151

    
152

    
153
   public static Parameter deserialize(final KXmlParser parser) throws XmlPullParserException, IOException {
154

    
155
      boolean bMandatory = false;
156
      int iShapeType = 0;
157

    
158
      int tag = parser.nextTag();
159

    
160
      boolean bOver = false;
161
      while (!bOver) {
162
         switch (tag) {
163
            case XmlPullParser.START_TAG:
164
               if (parser.getName().compareTo(ATTRIBUTE) == 0) {
165
                  final String sName = parser.getAttributeValue("", NAME);
166
                  if (sName.compareTo(MANDATORY) == 0) {
167
                     bMandatory = parser.getAttributeValue("", VALUE).equals("true");
168
                  }
169
                  else if (sName.compareTo(TYPE) == 0) {
170
                     iShapeType = Integer.parseInt(parser.getAttributeValue("", VALUE));
171
                  }
172
               }
173
               break;
174
            case XmlPullParser.END_TAG:
175
               if (parser.getName().compareTo(INPUT) == 0) {
176
                  bOver = true;
177
               }
178
               break;
179
            case XmlPullParser.TEXT:
180
               break;
181
         }
182

    
183
         if (!bOver) {
184
            tag = parser.next();
185
         }
186

    
187
      }
188

    
189

    
190
      final ParameterVectorLayer param = new ParameterVectorLayer();
191
      final AdditionalInfoVectorLayer ai = new AdditionalInfoVectorLayer(iShapeType, bMandatory);
192
      param.setParameterAdditionalInfo(ai);
193

    
194
      return param;
195

    
196
   }
197

    
198

    
199
   @Override
200
   public String getCommandLineParameter() {
201

    
202
      final IVectorLayer layer = (IVectorLayer) m_ParameterValue;
203

    
204
      if (layer == null) {
205
         return "\"#\"";
206
      }
207
      else {
208
         return "\"" + layer.getName() + "\"";
209
      }
210

    
211
   }
212

    
213

    
214
   @Override
215
   public boolean isParameterValueCorrect() {
216

    
217
      final AdditionalInfoDataObject aido = (AdditionalInfoDataObject) m_ParameterAdditionalInfo;
218
      if (m_ParameterValue == null) {
219
         return !aido.getIsMandatory();
220
      }
221
      else {
222
         return true;
223
      }
224

    
225
   }
226

    
227
}