Statistics
| Revision:

svn-gvsig-desktop / branches / v2_0_0_prep / extensions / extDalTransformEventTheme / src / org / gvsig / app / eventtheme / dal / feature / EventThemeTransform.java @ 28895

History | View | Annotate | Download (5.93 KB)

1
/* gvSIG. Geographic Information System of the Valencian Government
2
*
3
* Copyright (C) 2007-2008 Infrastructures and Transports Department
4
* of the Valencian Government (CIT)
5
* 
6
* This program is free software; you can redistribute it and/or
7
* modify it under the terms of the GNU General Public License
8
* as published by the Free Software Foundation; either version 2
9
* of the License, or (at your option) any later version.
10
* 
11
* This program is distributed in the hope that it will be useful,
12
* but WITHOUT ANY WARRANTY; without even the implied warranty of
13
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
14
* GNU General Public License for more details.
15
* 
16
* You should have received a copy of the GNU General Public License
17
* along with this program; if not, write to the Free Software
18
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, 
19
* MA  02110-1301, USA.
20
* 
21
*/
22

    
23
/*
24
* AUTHORS (In addition to CIT):
25
* 2009 {Iver T.I.}   {Task}
26
*/
27
 
28
package org.gvsig.app.eventtheme.dal.feature;
29

    
30
import java.util.Arrays;
31

    
32
import org.gvsig.fmap.dal.DataTypes;
33
import org.gvsig.fmap.dal.exception.DataException;
34
import org.gvsig.fmap.dal.feature.AbstractFeatureStoreTransform;
35
import org.gvsig.fmap.dal.feature.EditableFeature;
36
import org.gvsig.fmap.dal.feature.EditableFeatureAttributeDescriptor;
37
import org.gvsig.fmap.dal.feature.EditableFeatureType;
38
import org.gvsig.fmap.dal.feature.Feature;
39
import org.gvsig.fmap.dal.feature.FeatureAttributeDescriptor;
40
import org.gvsig.fmap.dal.feature.FeatureStore;
41
import org.gvsig.fmap.dal.feature.FeatureType;
42
import org.gvsig.fmap.geom.GeometryLocator;
43
import org.gvsig.fmap.geom.GeometryManager;
44
import org.gvsig.fmap.geom.Geometry.SUBTYPES;
45
import org.gvsig.fmap.geom.Geometry.TYPES;
46
import org.gvsig.fmap.geom.exception.CreateGeometryException;
47
import org.gvsig.fmap.geom.primitive.Point;
48
import org.gvsig.tools.persistence.PersistenceException;
49
import org.gvsig.tools.persistence.PersistentState;
50

    
51
/**
52
 * @author <a href="mailto:jpiera@gvsig.org">Jorge Piera</a>
53
 */
54
public class EventThemeTransform extends AbstractFeatureStoreTransform {
55
        private String xFieldName = null;
56
        private String yFieldName = null;
57
        private String geometryFieldName = null;
58
        private FeatureType originalFeatureType;
59
        private static final GeometryManager geometryManager = GeometryLocator.getGeometryManager();
60
                
61
        public EventThemeTransform() {
62
                super();
63
        }
64

    
65
        public void initialize(FeatureStore store, String geometryFieldName, String xFieldName, String yFieldName) throws DataException{
66
                setFeatureStore(store);
67
                this.xFieldName = xFieldName;
68
                this.yFieldName = yFieldName;
69
                if ((geometryFieldName == null) || (geometryFieldName.equals(""))){
70
                        this.geometryFieldName = "the_geom";
71
                }else{
72
                        this.geometryFieldName = geometryFieldName;
73
                }
74
                this.originalFeatureType = this.getFeatureStore()
75
                .getDefaultFeatureType();
76
                
77
                EditableFeatureType type = this.getFeatureStore().getDefaultFeatureType().getEditable();
78
                if (type.get(this.geometryFieldName) == null){
79
                        EditableFeatureAttributeDescriptor attributeDescriptor = type.add(this.geometryFieldName,  DataTypes.GEOMETRY);
80
                        attributeDescriptor.setGeometryType(TYPES.POINT);
81
                        attributeDescriptor.setGeometrySubType(SUBTYPES.GEOM2D);                        
82
                }
83
                
84
                type.setDefaultGeometryAttributeName(this.geometryFieldName);
85
                FeatureType[] types = new FeatureType[] { type.getNotEditableCopy() };
86
                setFeatureTypes(Arrays.asList(types), types[0]);
87
        }
88
        
89
        /* (non-Javadoc)
90
         * @see org.gvsig.fmap.dal.feature.FeatureStoreTransform#applyTransform(org.gvsig.fmap.dal.feature.Feature, org.gvsig.fmap.dal.feature.EditableFeature)
91
         */
92
        public void applyTransform(Feature source, EditableFeature target)
93
                        throws DataException {
94
                this.copySourceToTarget(source, target);
95
                
96
                Object x = source.get(xFieldName);
97
                Object y = source.get(yFieldName);
98
                Double dx = Double.valueOf(x.toString());
99
                Double dy = Double.valueOf(y.toString());
100
                try {                        
101
                        Point point = geometryManager.createPoint(dx, dy, SUBTYPES.GEOM2D);
102
                        target.set(geometryFieldName, point);
103
                        target.setDefaultGeometry(point);                                
104
                } catch (CreateGeometryException e) {
105
                        throw new org.gvsig.fmap.dal.feature.exception.CreateGeometryException(TYPES.POINT, SUBTYPES.GEOM2D, e);
106
                }                
107
        }
108
        
109
        /**
110
         * @param source
111
         * @param target
112
         */
113
        private void copySourceToTarget(Feature source, EditableFeature target) {
114
                FeatureAttributeDescriptor attr, attrTrg;
115
                FeatureType ftSrc = source.getType();
116
                FeatureType ftTrg = target.getType();
117

    
118

    
119
                for (int i = 0; i < source.getType().size(); i++) {
120
                        attr = ftSrc.getAttributeDescriptor(i);
121
                        if (ftTrg.getIndex(attr.getName()) > -1) {
122
                                try {
123
                                        target.set(attr.getName(), source.get(i));
124
                                } catch (IllegalArgumentException e) {
125
                                        attrTrg = ftTrg.getAttributeDescriptor(attr.getName());
126
                                        target.set(attrTrg.getIndex(), attrTrg.getDefaultValue());
127
                                }
128

    
129
                        }
130
                }
131

    
132
        }
133

    
134
        /* (non-Javadoc)
135
         * @see org.gvsig.fmap.dal.feature.FeatureStoreTransform#getSourceFeatureTypeFrom(org.gvsig.fmap.dal.feature.FeatureType)
136
         */
137
        public FeatureType getSourceFeatureTypeFrom(FeatureType targetFeatureType) {
138
                return this.originalFeatureType;
139
        }
140

    
141
        /* (non-Javadoc)
142
         * @see org.gvsig.fmap.dal.feature.FeatureStoreTransform#isTransformsOriginalValues()
143
         */
144
        public boolean isTransformsOriginalValues() {
145
                return true;
146
        }
147

    
148
        /* (non-Javadoc)
149
         * @see org.gvsig.tools.persistence.Persistent#saveToState(org.gvsig.tools.persistence.PersistentState)
150
         */
151
        public void saveToState(PersistentState state) throws PersistenceException {
152
                // TODO Auto-generated method stub
153
                
154
        }
155

    
156
        /* (non-Javadoc)
157
         * @see org.gvsig.tools.persistence.Persistent#setState(org.gvsig.tools.persistence.PersistentState)
158
         */
159
        public void setState(PersistentState state) throws PersistenceException {
160
                // TODO Auto-generated method stub
161
                
162
        }
163

    
164
        /* (non-Javadoc)
165
         * @see org.gvsig.tools.persistence.Persistent#loadFromState(org.gvsig.tools.persistence.PersistentState)
166
         */
167
        public void loadFromState(PersistentState state)
168
                        throws PersistenceException {
169
                // TODO Auto-generated method stub
170
                
171
        }
172

    
173
}
174