41 |
41 |
import javax.swing.WindowConstants;
|
42 |
42 |
|
43 |
43 |
import org.cresques.cts.IProjection;
|
44 |
|
import org.gvsig.editing.EditingNotificationManager;
|
45 |
44 |
import org.gvsig.fmap.crs.CRSFactory;
|
46 |
45 |
import org.gvsig.fmap.dal.DALLocator;
|
47 |
46 |
import org.gvsig.fmap.dal.DataManager;
|
... | ... | |
51 |
50 |
import org.gvsig.fmap.dal.exception.ProviderNotRegisteredException;
|
52 |
51 |
import org.gvsig.fmap.dal.exception.ValidateDataParametersException;
|
53 |
52 |
import org.gvsig.fmap.dal.feature.FeatureStore;
|
|
53 |
import org.gvsig.fmap.geom.primitive.Envelope;
|
|
54 |
import org.gvsig.fmap.mapcontext.MapContext;
|
54 |
55 |
import org.gvsig.fmap.mapcontext.MapContextLocator;
|
55 |
56 |
import org.gvsig.fmap.mapcontext.MapContextManager;
|
56 |
57 |
import org.gvsig.fmap.mapcontext.exceptions.LoadLayerException;
|
57 |
58 |
import org.gvsig.fmap.mapcontext.layers.FLayer;
|
58 |
|
import org.gvsig.fmap.mapcontext.layers.LayerFactory;
|
59 |
59 |
import org.gvsig.fmap.mapcontext.layers.order.impl.TrivialLayerOrderManager;
|
|
60 |
import org.gvsig.fmap.mapcontext.layers.vectorial.FLyrVect;
|
60 |
61 |
import org.gvsig.fmap.mapcontrol.MapControl;
|
61 |
62 |
import org.gvsig.fmap.mapcontrol.MapControlCreationException;
|
62 |
63 |
import org.gvsig.fmap.mapcontrol.MapControlLocator;
|
63 |
64 |
import org.gvsig.fmap.mapcontrol.MapControlManager;
|
|
65 |
import org.gvsig.fmap.mapcontrol.tools.PanListenerImpl;
|
|
66 |
import org.gvsig.fmap.mapcontrol.tools.ZoomInListenerImpl;
|
|
67 |
import org.gvsig.fmap.mapcontrol.tools.ZoomOutRightButtonListener;
|
64 |
68 |
import org.gvsig.fmap.mapcontrol.tools.Behavior.Behavior;
|
|
69 |
import org.gvsig.fmap.mapcontrol.tools.Behavior.MoveBehavior;
|
|
70 |
import org.gvsig.fmap.mapcontrol.tools.Behavior.PointBehavior;
|
|
71 |
import org.gvsig.fmap.mapcontrol.tools.Behavior.RectangleBehavior;
|
65 |
72 |
import org.gvsig.tools.library.impl.DefaultLibrariesInitializer;
|
66 |
|
import org.gvsig.vectorediting.lib.api.EditingBehavior;
|
67 |
73 |
import org.gvsig.vectorediting.lib.api.EditingLocator;
|
68 |
74 |
import org.gvsig.vectorediting.lib.api.EditingManager;
|
69 |
|
import org.gvsig.vectorediting.lib.impl.DefaultEditingBehavior;
|
|
75 |
import org.gvsig.vectorediting.lib.prov.circlecr.CircleCREditingProviderFactory;
|
|
76 |
import org.gvsig.vectorediting.lib.prov.insertpoint.InsertPointEditingProviderFactory;
|
70 |
77 |
import org.gvsig.vectorediting.lib.spi.EditingProviderLocator;
|
71 |
78 |
import org.gvsig.vectorediting.lib.spi.EditingProviderManager;
|
|
79 |
import org.gvsig.vectorediting.swing.api.EditingBehavior;
|
|
80 |
import org.gvsig.vectorediting.swing.api.EditingSwingLocator;
|
|
81 |
import org.gvsig.vectorediting.swing.api.EditingSwingManager;
|
|
82 |
import org.gvsig.vectorediting.swing.impl.DefaultEditingBehavior;
|
72 |
83 |
import org.slf4j.Logger;
|
73 |
84 |
import org.slf4j.LoggerFactory;
|
74 |
85 |
|
... | ... | |
84 |
95 |
|
85 |
96 |
final EditingManager manager;
|
86 |
97 |
|
|
98 |
final EditingSwingManager swingManager;
|
|
99 |
|
87 |
100 |
final EditingProviderManager providerManager;
|
88 |
101 |
|
89 |
102 |
final MapControlManager mapControlManager;
|
... | ... | |
98 |
111 |
|
99 |
112 |
FeatureStore store;
|
100 |
113 |
|
|
114 |
FLyrVect currentLayer;
|
|
115 |
|
101 |
116 |
final String DEFAULT_CRS_CODE = "EPSG:4326";
|
102 |
117 |
|
103 |
118 |
IProjection defaultProjection;
|
... | ... | |
108 |
123 |
|
109 |
124 |
JFrame addLayerFrame;
|
110 |
125 |
|
|
126 |
JFrame paletteTools;
|
|
127 |
|
111 |
128 |
JTextField shpField;
|
112 |
129 |
|
113 |
130 |
// Actions
|
|
131 |
AbstractAction pan;
|
|
132 |
|
|
133 |
AbstractAction zoom;
|
|
134 |
|
|
135 |
AbstractAction zoomall;
|
|
136 |
|
|
137 |
AbstractAction cleanMap;
|
|
138 |
|
|
139 |
AbstractAction openAddLayerDialog;
|
|
140 |
|
|
141 |
AbstractAction openPaletteTools;
|
|
142 |
|
114 |
143 |
AbstractAction editingExtensionAction;
|
115 |
144 |
|
116 |
|
AbstractAction insertPointAction;
|
|
145 |
AbstractAction insertPoint;
|
117 |
146 |
|
118 |
147 |
AbstractAction exit;
|
119 |
148 |
|
120 |
149 |
AbstractAction addLayer;
|
121 |
150 |
|
122 |
|
AbstractAction openAddLayerDialog;
|
|
151 |
AbstractAction circleCr;
|
123 |
152 |
|
124 |
153 |
public static void main(String args[]) {
|
125 |
154 |
new DefaultLibrariesInitializer().fullInitialize();
|
... | ... | |
129 |
158 |
|
130 |
159 |
public Main() {
|
131 |
160 |
manager = EditingLocator.getManager();
|
|
161 |
swingManager = EditingSwingLocator.getSwingManager();
|
132 |
162 |
providerManager = EditingProviderLocator.getProviderManager();
|
133 |
163 |
mapControlManager = MapControlLocator.getMapControlManager();
|
134 |
164 |
dataManager = DALLocator.getDataManager();
|
... | ... | |
142 |
172 |
try {
|
143 |
173 |
mapControl = mapControlManager.createJMapControlPanel();
|
144 |
174 |
editingBehavior = new DefaultEditingBehavior(mapControl);
|
145 |
|
}
|
146 |
|
catch (MapControlCreationException e) {
|
147 |
|
// TODO Auto-generated catch block
|
148 |
|
e.printStackTrace();
|
149 |
|
}
|
|
175 |
mapControl.addBehavior("zoom", new Behavior[] {
|
|
176 |
new RectangleBehavior(new ZoomInListenerImpl(mapControl)),
|
|
177 |
new PointBehavior(new ZoomOutRightButtonListener(mapControl)) });
|
|
178 |
mapControl.addBehavior("pan", new MoveBehavior(new PanListenerImpl(
|
|
179 |
mapControl)));
|
150 |
180 |
|
151 |
|
IProjection defaultProjection = CRSFactory.getCRS(DEFAULT_CRS_CODE);
|
152 |
|
mapControl.getViewPort().setProjection(defaultProjection);
|
153 |
|
mapControl.addBehavior("VectorEditing", (Behavior) editingBehavior);
|
154 |
181 |
|
155 |
|
// Create actions
|
156 |
|
try {
|
|
182 |
IProjection defaultProjection = CRSFactory.getCRS(DEFAULT_CRS_CODE);
|
|
183 |
mapControl.getViewPort().setProjection(defaultProjection);
|
|
184 |
mapControl.addBehavior("VectorEditing", (Behavior) editingBehavior);
|
|
185 |
|
|
186 |
// Create actions
|
157 |
187 |
createActions();
|
158 |
188 |
}
|
159 |
189 |
catch (MapControlCreationException e) {
|
160 |
|
// TODO Auto-generated catch block
|
161 |
|
e.printStackTrace();
|
|
190 |
logger.error("Can't create mapControl");
|
162 |
191 |
}
|
163 |
192 |
|
164 |
193 |
// Create JFrame to show data
|
165 |
194 |
mainFrame = new JFrame("Editing test app");
|
166 |
195 |
mainFrame.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
|
167 |
|
mainFrame.setPreferredSize(new Dimension(600, 480));
|
|
196 |
mainFrame.setPreferredSize(new Dimension(800, 680));
|
168 |
197 |
mainFrame.add(mapControl, BorderLayout.CENTER);
|
169 |
198 |
|
170 |
199 |
// Create JFrame to add layer
|
171 |
200 |
createAddLayerJFrame();
|
172 |
201 |
|
|
202 |
// create JFrame palette tools
|
|
203 |
createShowPaletteTools();
|
|
204 |
|
173 |
205 |
// Create menu bar
|
174 |
206 |
createMenu();
|
175 |
207 |
|
... | ... | |
178 |
210 |
|
179 |
211 |
// Display the window.
|
180 |
212 |
mainFrame.pack();
|
181 |
|
mainFrame.setLocation(100, 100);
|
|
213 |
mainFrame.setLocation(500, 0);
|
182 |
214 |
mainFrame.setVisible(true);
|
183 |
215 |
}
|
184 |
216 |
|
... | ... | |
202 |
234 |
|
203 |
235 |
}
|
204 |
236 |
|
|
237 |
private void createShowPaletteTools() {
|
|
238 |
paletteTools = new JFrame("Palette tools");
|
|
239 |
paletteTools.setLayout(new GridLayout(20, 1, 1, 5));
|
|
240 |
paletteTools.setPreferredSize(new Dimension(200, 600));
|
|
241 |
paletteTools.pack();
|
|
242 |
paletteTools.setLocation(0, 0);
|
|
243 |
paletteTools.setDefaultCloseOperation(WindowConstants.HIDE_ON_CLOSE);
|
|
244 |
|
|
245 |
JButton insertPointButton = new JButton(insertPoint);
|
|
246 |
JButton circleCrButton = new JButton(circleCr);
|
|
247 |
|
|
248 |
paletteTools.add(new JLabel("Insert tools"));
|
|
249 |
paletteTools.add(insertPointButton);
|
|
250 |
paletteTools.add(circleCrButton);
|
|
251 |
}
|
|
252 |
|
205 |
253 |
private void createToolBar() {
|
206 |
254 |
JToolBar toolBar = new JToolBar();
|
207 |
255 |
|
208 |
256 |
toolBar.add(new JButton(openAddLayerDialog));
|
209 |
257 |
toolBar.add(new JButton(editingExtensionAction));
|
210 |
|
toolBar.add(new JButton(insertPointAction));
|
|
258 |
toolBar.add(new JButton(pan));
|
|
259 |
toolBar.add(new JButton(zoom));
|
|
260 |
toolBar.add(new JButton(zoomall));
|
|
261 |
toolBar.add(new JButton(cleanMap));
|
|
262 |
toolBar.add(new JButton(openPaletteTools));
|
211 |
263 |
|
212 |
264 |
mainFrame.add(toolBar, BorderLayout.PAGE_START);
|
213 |
265 |
}
|
... | ... | |
222 |
274 |
|
223 |
275 |
JMenu menuLayer = new JMenu("Layer");
|
224 |
276 |
menuLayer.add(new JMenuItem(openAddLayerDialog));
|
|
277 |
menuLayer.add(new JMenuItem(pan));
|
|
278 |
menuLayer.add(new JMenuItem(zoom));
|
|
279 |
menuLayer.add(new JMenuItem(zoomall));
|
|
280 |
menuLayer.add(new JMenuItem(cleanMap));
|
225 |
281 |
|
226 |
282 |
JMenu menuTool = new JMenu("Tools");
|
227 |
283 |
menuTool.add(new JMenuItem(editingExtensionAction));
|
228 |
284 |
menuTool.addSeparator();
|
229 |
|
menuTool.add(new JMenuItem(insertPointAction));
|
|
285 |
menuTool.add(new JMenuItem(insertPoint));
|
|
286 |
menuTool.add(new JMenuItem(circleCr));
|
230 |
287 |
|
231 |
288 |
menuBar.add(menuFile);
|
232 |
289 |
menuBar.add(menuTool);
|
... | ... | |
237 |
294 |
@SuppressWarnings("serial")
|
238 |
295 |
private void createActions() throws MapControlCreationException {
|
239 |
296 |
|
|
297 |
pan = new AbstractAction("Pan") {
|
|
298 |
|
|
299 |
public void actionPerformed(ActionEvent e) {
|
|
300 |
mapControl.setTool("pan");
|
|
301 |
}
|
|
302 |
};
|
|
303 |
|
|
304 |
zoom = new AbstractAction("Zoom") {
|
|
305 |
|
|
306 |
public void actionPerformed(ActionEvent e) {
|
|
307 |
mapControl.setTool("zoom");
|
|
308 |
}
|
|
309 |
};
|
|
310 |
|
|
311 |
zoomall = new AbstractAction("Zoom all") {
|
|
312 |
|
|
313 |
public void actionPerformed(ActionEvent e) {
|
|
314 |
zoomAll();
|
|
315 |
}
|
|
316 |
};
|
|
317 |
|
|
318 |
cleanMap = new AbstractAction("Clean Map") {
|
|
319 |
|
|
320 |
public void actionPerformed(ActionEvent e) {
|
|
321 |
MapContext mapContext = mapControl.getMapContext();
|
|
322 |
mapContext.beginAtomicEvent();
|
|
323 |
while (mapContext.getLayers().getLayersCount() > 0) {
|
|
324 |
mapContext.getLayers().removeLayer(0);
|
|
325 |
}
|
|
326 |
mapContext.endAtomicEvent();
|
|
327 |
}
|
|
328 |
};
|
|
329 |
|
240 |
330 |
openAddLayerDialog = new AbstractAction("Add layer") {
|
241 |
331 |
|
242 |
332 |
public void actionPerformed(ActionEvent e) {
|
... | ... | |
244 |
334 |
}
|
245 |
335 |
};
|
246 |
336 |
|
|
337 |
openPaletteTools = new AbstractAction("Show palette tools") {
|
|
338 |
|
|
339 |
public void actionPerformed(ActionEvent e) {
|
|
340 |
paletteTools.setVisible(true);
|
|
341 |
}
|
|
342 |
};
|
|
343 |
|
247 |
344 |
addLayer = new AbstractAction("OK") {
|
248 |
345 |
|
249 |
346 |
public void actionPerformed(ActionEvent e) {
|
... | ... | |
270 |
367 |
editingExtensionAction = new AbstractAction("EditingExtension") {
|
271 |
368 |
|
272 |
369 |
public void actionPerformed(ActionEvent e) {
|
273 |
|
mapControl.setTool("VectorEditing");
|
274 |
370 |
try {
|
275 |
|
store.edit();
|
|
371 |
swingManager.beginEdition(currentLayer, mapControl);
|
276 |
372 |
}
|
277 |
373 |
catch (DataException e1) {
|
278 |
|
// TODO Auto-generated catch block
|
279 |
374 |
e1.printStackTrace();
|
280 |
375 |
}
|
281 |
|
|
282 |
376 |
updateControls();
|
283 |
377 |
}
|
284 |
378 |
};
|
285 |
379 |
|
286 |
|
insertPointAction = new AbstractAction("InsertPointAction") {
|
|
380 |
insertPoint = new AbstractAction("InsertPointAction") {
|
287 |
381 |
|
288 |
382 |
public void actionPerformed(ActionEvent e) {
|
289 |
|
activateTool("InsertPoint");
|
|
383 |
|
|
384 |
swingManager.activateTool(
|
|
385 |
InsertPointEditingProviderFactory.PROVIDER_NAME, mapControl);
|
290 |
386 |
}
|
291 |
387 |
|
292 |
388 |
};
|
293 |
|
insertPointAction.setEnabled(false);
|
294 |
389 |
|
|
390 |
circleCr = new AbstractAction("CircleCrAction") {
|
|
391 |
|
|
392 |
public void actionPerformed(ActionEvent e) {
|
|
393 |
swingManager.activateTool(CircleCREditingProviderFactory.PROVIDER_NAME,
|
|
394 |
mapControl);
|
|
395 |
}
|
|
396 |
};
|
295 |
397 |
}
|
296 |
398 |
|
297 |
399 |
private void updateControls() {
|
298 |
|
insertPointAction.setEnabled(true);
|
|
400 |
editingExtensionAction.setEnabled(false);
|
|
401 |
insertPoint.setEnabled(true);
|
|
402 |
circleCr.setEnabled(true);
|
299 |
403 |
}
|
300 |
404 |
|
301 |
|
private void activateTool(String name) {
|
302 |
|
manager.activateTool(name, mapControl);
|
303 |
|
}
|
304 |
|
|
305 |
|
public void addLayer(String shpPath)
|
306 |
|
throws InitializeException, ProviderNotRegisteredException,
|
307 |
|
ValidateDataParametersException, LoadLayerException {
|
|
405 |
public void addLayer(String shpPath) throws InitializeException,
|
|
406 |
ProviderNotRegisteredException, ValidateDataParametersException,
|
|
407 |
LoadLayerException {
|
308 |
408 |
DataStoreParameters params;
|
309 |
409 |
params = dataManager.createStoreParameters("Shape");
|
310 |
|
|
311 |
|
String dbfPath = shpPath.substring(0, shpPath.length()-3).concat("dbf");
|
312 |
|
String shxPath = shpPath.substring(0, shpPath.length()-3).concat("shx");
|
313 |
|
|
|
410 |
|
|
411 |
String dbfPath = shpPath.substring(0, shpPath.length() - 3).concat("dbf");
|
|
412 |
String shxPath = shpPath.substring(0, shpPath.length() - 3).concat("shx");
|
|
413 |
|
314 |
414 |
File shpFile = new File(shpPath);
|
315 |
415 |
File dbFile = new File(dbfPath);
|
316 |
416 |
File shxFile = new File(shxPath);
|
... | ... | |
325 |
425 |
FLayer layer = mapContextManager.createLayer("prueba", store);
|
326 |
426 |
mapControl.getMapContext().setOrderManager(layerOrderManager);
|
327 |
427 |
mapControl.getMapContext().getLayers().addLayer(layer);
|
|
428 |
mapControl.getMapContext().getLayers().setActive(true);
|
|
429 |
try {
|
|
430 |
currentLayer = (FLyrVect) layer;
|
|
431 |
}
|
|
432 |
catch (Exception e) {
|
|
433 |
logger.error("Can't load layer " + e.getMessage());
|
|
434 |
}
|
|
435 |
|
328 |
436 |
}
|
329 |
437 |
|
|
438 |
private void zoomAll() {
|
|
439 |
MapContext mapContext = mapControl.getMapContext();
|
|
440 |
Envelope all = mapContext.getLayers().getFullEnvelope();
|
|
441 |
logger.info("Full extdents " + all.toString());
|
|
442 |
mapContext.getViewPort().setEnvelope(all);
|
|
443 |
mapContext.invalidate();
|
|
444 |
}
|
|
445 |
|
330 |
446 |
public JFrame getJFrame() {
|
331 |
447 |
return this.addLayerFrame;
|
332 |
448 |
}
|