Revision 43215 trunk/org.gvsig.desktop/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.api/src/main/java/org/gvsig/fmap/mapcontext/layers/vectorial/ReprojectDefaultGeometry.java

View differences:

ReprojectDefaultGeometry.java
50 50
 * @author jmvivo
51 51
 *
52 52
 */
53
public class ReprojectDefaultGeometry extends AbstractFeatureStoreTransform {
53
public class ReprojectDefaultGeometry
54
    extends AbstractFeatureStoreTransform {
54 55

  
55
	private IProjection targetSRS;
56
	private ICoordTrans ct;
57
	private IProjection sourceSRS;
58
	private FeatureType orgDefFeatureType;
59
	private List orgFeatureTypes;
56
    private IProjection targetSRS;
57
    private ICoordTrans ct;
58
    private IProjection sourceSRS;
59
    private FeatureType orgDefFeatureType;
60
    private List orgFeatureTypes;
60 61

  
61
	public ReprojectDefaultGeometry(){
62
		
63
	}
64
	
62
    public ReprojectDefaultGeometry() {
63

  
64
    }
65

  
65 66
//	public ReprojectDefaultGeometry(IProjection targetSRS){
66 67
//		super("ReprojectDefaultGeometry", "ReprojectDefaultGeometry");
67 68
//		this.targetSRS = targetSRS;
......
72 73
//		super("ReprojectDefaultGeometry", "ReprojectDefaultGeometry");
73 74
//		this.ct = ct;
74 75
//	}
75
		
76
	public IProjection getTargetSRS() {
77
		return targetSRS;
78
	}
76
    public IProjection getTargetSRS() {
77
        return targetSRS;
78
    }
79 79

  
80
	public void setTargetSRS(IProjection targetSRS) {
81
		this.targetSRS = targetSRS;
82
	}
83
	
80
    public void setTargetSRS(IProjection targetSRS) {
81
        this.targetSRS = targetSRS;
82
    }
83

  
84 84
//	public void setCoordTrans(ICoordTrans ct){
85 85
//		this.ct = ct;
86 86
//		if ( getFeatureStore() != null ){
......
88 88
//		}
89 89
//	}
90 90

  
91
	/* (non-Javadoc)
91
    /* (non-Javadoc)
92 92
	 * @see org.gvsig.fmap.dal.feature.FeatureStoreTransform#applyTransform(org.gvsig.fmap.dal.feature.Feature, org.gvsig.fmap.dal.feature.EditableFeature)
93
	 */
94
	public void applyTransform(Feature source, EditableFeature target)
95
			throws DataException {
96
		FeatureAttributeDescriptor attr;
97
		Iterator iter = target.getType().iterator();
98
		int defGeomIndex = target.getType().getDefaultGeometryAttributeIndex();
99
		while (iter.hasNext()) {
100
			attr = (FeatureAttributeDescriptor)iter.next();
101
			if (attr.getIndex() == defGeomIndex) {
102
				Geometry geom =source.getDefaultGeometry();
103
				geom.reProject(ct);
104
				target.setDefaultGeometry(geom);
105
			} else {
106
				target.set(attr.getIndex(), source.get(attr.getName()));
107
			}
93
     */
94
    public void applyTransform(Feature source, EditableFeature target)
95
        throws DataException {
96
        FeatureAttributeDescriptor attr;
97
        Iterator iter = target.getType().iterator();
98
        int defGeomIndex = target.getType().getDefaultGeometryAttributeIndex();
99
        while( iter.hasNext() ) {
100
            attr = (FeatureAttributeDescriptor) iter.next();
101
            if( attr.getIndex() == defGeomIndex ) {
102
                Geometry geom = source.getDefaultGeometry();
103
                geom.reProject(ct);
104
                target.setDefaultGeometry(geom);
105
            } else {
106
                target.set(attr.getIndex(), source.get(attr.getName()));
107
            }
108 108

  
109
		}
109
        }
110 110

  
111
	}
111
    }
112 112

  
113
	public void setFeatureStore(FeatureStore store) {
114
		try {
115
			orgDefFeatureType = store.getDefaultFeatureType();
116
			orgFeatureTypes = store.getFeatureTypes();
117
			EditableFeatureType defFType = orgDefFeatureType
118
					.getEditable();
119
			EditableFeatureAttributeDescriptor attr = (EditableFeatureAttributeDescriptor) defFType
120
					.getAttributeDescriptor(defFType
121
							.getDefaultGeometryAttributeName());
113
    @Override
114
    public void setUp() {
115
        try {
116
            FeatureStore store = this.getFeatureStore();
117
            orgDefFeatureType = store.getDefaultFeatureType();
118
            orgFeatureTypes = store.getFeatureTypes();
119
            EditableFeatureType defFType = orgDefFeatureType
120
                .getEditable();
121
            EditableFeatureAttributeDescriptor attr = (EditableFeatureAttributeDescriptor) defFType
122
                .getAttributeDescriptor(defFType
123
                    .getDefaultGeometryAttributeName());
122 124
//			if (ct!=null){
123 125
//				targetSRS = ct.getPDest();
124 126
//				sourceSRS = ct.getPOrig();
125 127
//			} else {
126
				sourceSRS = attr.getSRS();
127
				ct = sourceSRS.getCT(targetSRS);
128
            sourceSRS = attr.getSRS();
129
            ct = sourceSRS.getCT(targetSRS);
128 130
//			}
129
			attr.setSRS(this.targetSRS);
130
			FeatureType defaultType = defFType.getNotEditableCopy();
131
			List types = new ArrayList();
132
			Iterator iter = orgFeatureTypes.iterator();
133
			FeatureType tmp;
134
			while (iter.hasNext()) {
135
				tmp = (FeatureType) iter.next();
136
				if (tmp.getId().equals(defaultType.getId())) {
137
					types.add(defaultType);
138
				} else {
139
					types.add(tmp);
140
				}
141
			}
131
            attr.setSRS(this.targetSRS);
132
            FeatureType defaultType = defFType.getNotEditableCopy();
133
            List types = new ArrayList();
134
            Iterator iter = orgFeatureTypes.iterator();
135
            FeatureType tmp;
136
            while( iter.hasNext() ) {
137
                tmp = (FeatureType) iter.next();
138
                if( tmp.getId().equals(defaultType.getId()) ) {
139
                    types.add(defaultType);
140
                } else {
141
                    types.add(tmp);
142
                }
143
            }
142 144

  
143
			this.setFeatureTypes(types, defaultType);
144
		} catch (DataException e) {
145
			// FIXME
146
			throw new RuntimeException(e);
147
		}
145
            this.setFeatureTypes(types, defaultType);
146
        } catch (DataException e) {
147
            // FIXME
148
            throw new RuntimeException(e);
149
        }
150
    }
148 151

  
149
		super.setFeatureStore(store);
150
	}
151

  
152
	/* (non-Javadoc)
152
    /* (non-Javadoc)
153 153
	 * @see org.gvsig.fmap.dal.feature.FeatureStoreTransform#getSourceFeatureTypeFrom(org.gvsig.fmap.dal.feature.FeatureType)
154
	 */
155
	public FeatureType getSourceFeatureTypeFrom(FeatureType targetFeatureType) {
156
		EditableFeatureType result = null;
157
		FeatureType tmp;
158
		EditableFeatureAttributeDescriptor attr;
159
		Iterator iter = orgFeatureTypes.iterator();
160
		Iterator iterAttr;
161
		while (iter.hasNext()) {
162
			tmp = (FeatureType) iter.next();
163
			if (tmp.getId().equals(targetFeatureType.getId())) {
164
				result = tmp.getEditable();
165
				iterAttr = result.iterator();
166
				while (iterAttr.hasNext()) {
167
					attr = (EditableFeatureAttributeDescriptor) iterAttr.next();
168
					if (targetFeatureType.getIndex(attr.getName()) < 0) {
169
						iterAttr.remove();
170
					}
171
				}
172
				break;
173
			}
174
		}
175
		return result.getNotEditableCopy();
176
	}
154
     */
155
    public FeatureType getSourceFeatureTypeFrom(FeatureType targetFeatureType) {
156
        EditableFeatureType result = null;
157
        FeatureType tmp;
158
        EditableFeatureAttributeDescriptor attr;
159
        Iterator iter = orgFeatureTypes.iterator();
160
        Iterator iterAttr;
161
        while( iter.hasNext() ) {
162
            tmp = (FeatureType) iter.next();
163
            if( tmp.getId().equals(targetFeatureType.getId()) ) {
164
                result = tmp.getEditable();
165
                iterAttr = result.iterator();
166
                while( iterAttr.hasNext() ) {
167
                    attr = (EditableFeatureAttributeDescriptor) iterAttr.next();
168
                    if( targetFeatureType.getIndex(attr.getName()) < 0 ) {
169
                        iterAttr.remove();
170
                    }
171
                }
172
                break;
173
            }
174
        }
175
        return result.getNotEditableCopy();
176
    }
177 177

  
178
	/* (non-Javadoc)
178
    /* (non-Javadoc)
179 179
	 * @see org.gvsig.fmap.dal.feature.FeatureStoreTransform#isTransformsOriginalValues()
180
	 */
181
	public boolean isTransformsOriginalValues() {
182
		return true;
183
	}
180
     */
181
    public boolean isTransformsOriginalValues() {
182
        return true;
183
    }
184 184

  
185
	/* (non-Javadoc)
185
    /* (non-Javadoc)
186 186
	 * @see org.gvsig.tools.persistence.Persistent#loadState(org.gvsig.tools.persistence.PersistentState)
187
	 */
188
	public void saveToState(PersistentState state) throws PersistenceException {
189
		super.saveToState(state);
190
		
191
		state.set("source_crs", this.sourceSRS);
192
		state.set("source_defaultFeatureType", this.orgDefFeatureType);
193
		state.set("source_featureTypes", this.orgFeatureTypes);
194
		state.set("target_crs", this.targetSRS);
195
		state.set("coordtrans", this.ct);
196
	}
187
     */
188
    public void saveToState(PersistentState state) throws PersistenceException {
189
        super.saveToState(state);
197 190

  
198
	/* (non-Javadoc)
191
        state.set("source_crs", this.sourceSRS);
192
        state.set("source_defaultFeatureType", this.orgDefFeatureType);
193
        state.set("source_featureTypes", this.orgFeatureTypes);
194
        state.set("target_crs", this.targetSRS);
195
        state.set("coordtrans", this.ct);
196
    }
197

  
198
    /* (non-Javadoc)
199 199
	 * @see org.gvsig.tools.persistence.Persistent#loadFromState(org.gvsig.tools.persistence.PersistentState)
200
	 */
201
	public void loadFromState(PersistentState state) throws PersistenceException {
202
		super.loadFromState(state);
203
		this.sourceSRS = (IProjection) state.get("source_crs");
204
		this.orgDefFeatureType = (FeatureType) state.get("source_defaultFeatureType");
205
		this.orgFeatureTypes = new ArrayList( (List) state.get("source_featureTypes"));
206
		this.targetSRS = (IProjection) state.get("target_crs");
207
		this.ct = (ICoordTrans) state.get("coordtrans");
208
	}
200
     */
201
    public void loadFromState(PersistentState state) throws PersistenceException {
202
        super.loadFromState(state);
203
        this.sourceSRS = (IProjection) state.get("source_crs");
204
        this.orgDefFeatureType = (FeatureType) state.get("source_defaultFeatureType");
205
        this.orgFeatureTypes = new ArrayList((List) state.get("source_featureTypes"));
206
        this.targetSRS = (IProjection) state.get("target_crs");
207
        this.ct = (ICoordTrans) state.get("coordtrans");
208
    }
209 209

  
210
    public static class RegisterPersistence implements Callable {
210
    public static class RegisterPersistence
211
        implements Callable {
211 212

  
212 213
        public Object call() {
213
		PersistenceManager manager = ToolsLocator.getPersistenceManager();
214
		DynStruct definition = manager.addDefinition(
215
				ReprojectDefaultGeometry.class,
216
				"ReprojectDefaultGeometry",
217
				"ReprojectDefaultGeometry Persistence definition",
218
				null, 
219
				null
220
		);
221
		definition.extend( manager.getDefinition(AbstractFeatureStoreTransform.class));
222
		
223
		definition.addDynFieldObject("source_crs")
224
			.setClassOfValue(IProjection.class)
225
			.setMandatory(true);
226
		definition.addDynFieldObject("source_defaultFeatureType")
227
			.setClassOfValue(FeatureType.class)
228
			.setMandatory(true);
229
		definition.addDynFieldList("source_featureTypes")
230
			.setClassOfItems(FeatureType.class)
231
			.setMandatory(true);
232
		definition.addDynFieldObject("target_crs")
233
			.setClassOfValue(IProjection.class)
234
			.setMandatory(true);
235
		definition.addDynFieldObject("coordtrans")
236
			.setClassOfValue(ICoordTrans.class)
237
			.setMandatory(true);
238
            
214
            PersistenceManager manager = ToolsLocator.getPersistenceManager();
215
            DynStruct definition = manager.addDefinition(
216
                ReprojectDefaultGeometry.class,
217
                "ReprojectDefaultGeometry",
218
                "ReprojectDefaultGeometry Persistence definition",
219
                null,
220
                null
221
            );
222
            definition.extend(manager.getDefinition(AbstractFeatureStoreTransform.class));
223

  
224
            definition.addDynFieldObject("source_crs")
225
                .setClassOfValue(IProjection.class)
226
                .setMandatory(true);
227
            definition.addDynFieldObject("source_defaultFeatureType")
228
                .setClassOfValue(FeatureType.class)
229
                .setMandatory(true);
230
            definition.addDynFieldList("source_featureTypes")
231
                .setClassOfItems(FeatureType.class)
232
                .setMandatory(true);
233
            definition.addDynFieldObject("target_crs")
234
                .setClassOfValue(IProjection.class)
235
                .setMandatory(true);
236
            definition.addDynFieldObject("coordtrans")
237
                .setClassOfValue(ICoordTrans.class)
238
                .setMandatory(true);
239

  
239 240
            return Boolean.TRUE;
240 241
        }
241 242
    }

Also available in: Unified diff