source: josm/trunk/src/org/openstreetmap/josm/command/AddPrimitivesCommand.java@ 3275

Last change on this file since 3275 was 3262, checked in by bastiK, 14 years ago

extended command list dialog; added inspection panel

  • Property svn:eol-style set to native
  • Property svn:mime-type set to text/plain
File size: 2.5 KB
Line 
1// License: GPL. For details, see LICENSE file.
2package org.openstreetmap.josm.command;
3
4import static org.openstreetmap.josm.tools.I18n.trn;
5
6import java.util.ArrayList;
7import java.util.Collection;
8import java.util.HashSet;
9import java.util.List;
10
11import javax.swing.JLabel;
12
13import org.openstreetmap.josm.data.osm.Node;
14import org.openstreetmap.josm.data.osm.OsmPrimitive;
15import org.openstreetmap.josm.data.osm.PrimitiveData;
16
17public class AddPrimitivesCommand extends Command {
18
19 private final List<PrimitiveData> data = new ArrayList<PrimitiveData>();
20
21 public AddPrimitivesCommand(List<PrimitiveData> data) {
22 this.data.addAll(data);
23 }
24
25 @Override public boolean executeCommand() {
26
27 List<OsmPrimitive> createdPrimitives = new ArrayList<OsmPrimitive>(data.size());
28
29 for (PrimitiveData pd:data) {
30 createdPrimitives.add(getLayer().data.getPrimitiveById(pd, true));
31 }
32
33 // Load nodes first to prevent ways with null coordinates
34 for (int i=0; i<createdPrimitives.size(); i++) {
35 if (createdPrimitives.get(i) instanceof Node) {
36 createdPrimitives.get(i).load(data.get(i));
37 }
38 }
39
40 // Now load ways and relations
41 for (int i=0; i<createdPrimitives.size(); i++) {
42 if (!(createdPrimitives.get(i) instanceof Node)) {
43 createdPrimitives.get(i).load(data.get(i));
44 }
45 }
46
47 getLayer().data.setSelected(createdPrimitives);
48 return true;
49 }
50
51 @Override public void undoCommand() {
52 for (PrimitiveData p:data) {
53 getLayer().data.removePrimitive(p);
54 }
55 }
56
57 @Override public JLabel getDescription() {
58 return new JLabel(trn("Added {0} object", "Added {0} objects", data.size(), data.size()), null,
59 JLabel.HORIZONTAL
60 );
61 }
62
63 @Override
64 public void fillModifiedData(Collection<OsmPrimitive> modified, Collection<OsmPrimitive> deleted,
65 Collection<OsmPrimitive> added) {
66 // Does nothing because we don't want to create OsmPrimitives.
67 }
68
69 @Override
70 public Collection<? extends OsmPrimitive> getParticipatingPrimitives() {
71 Collection<OsmPrimitive> prims = new HashSet<OsmPrimitive>();
72 for (PrimitiveData d : data) {
73 OsmPrimitive osm = getLayer().data.getPrimitiveById(d);
74 if (osm == null)
75 throw new RuntimeException();
76 prims.add(osm);
77 }
78 return prims;
79 }
80}
Note: See TracBrowser for help on using the repository browser.