Changeset 10604 in josm for trunk/src/org/openstreetmap/josm/data/osm
- Timestamp:
- 2016-07-23T14:54:19+02:00 (8 years ago)
- Location:
- trunk/src/org/openstreetmap/josm/data/osm
- Files:
-
- 3 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/org/openstreetmap/josm/data/osm/PrimitiveData.java
r10153 r10604 81 81 oos.writeInt(changesetId); 82 82 oos.writeInt(timestamp); 83 oos.writeObject(keys); 83 84 oos.defaultWriteObject(); 84 85 } … … 92 93 changesetId = ois.readInt(); 93 94 timestamp = ois.readInt(); 95 keys = (String[]) ois.readObject(); 94 96 ois.defaultReadObject(); 95 97 } -
trunk/src/org/openstreetmap/josm/data/osm/PrimitiveDeepCopy.java
r10600 r10604 2 2 package org.openstreetmap.josm.data.osm; 3 3 4 import java.awt.datatransfer.UnsupportedFlavorException; 5 import java.io.IOException; 4 6 import java.util.ArrayList; 5 7 import java.util.Collection; 6 import java.util. HashSet;8 import java.util.Collections; 7 9 import java.util.List; 8 import java.util.Set;9 import java.util.concurrent.CopyOnWriteArrayList;10 10 11 import org.openstreetmap.josm.data.osm.visitor.AbstractVisitor; 11 import org.openstreetmap.josm.Main; 12 import org.openstreetmap.josm.gui.datatransfer.ClipboardUtils; 13 import org.openstreetmap.josm.gui.datatransfer.OsmTransferHandler; 14 import org.openstreetmap.josm.gui.datatransfer.data.PrimitiveTransferData; 12 15 13 16 /** 14 17 * This class allows to create and keep a deep copy of primitives. Provides methods to access directly added 15 18 * primitives and reference primitives 19 * <p> 20 * To be removed end of 2016 16 21 * @since 2305 22 * @deprecated This has been replaced by Swing Copy+Paste support. Use {@link OsmTransferHandler} instead. 17 23 */ 24 @Deprecated 18 25 public class PrimitiveDeepCopy { 19 20 @FunctionalInterface21 public interface PasteBufferChangedListener {22 void pasteBufferChanged(PrimitiveDeepCopy pasteBuffer);23 }24 25 private final List<PrimitiveData> directlyAdded = new ArrayList<>();26 private final List<PrimitiveData> referenced = new ArrayList<>();27 private final CopyOnWriteArrayList<PasteBufferChangedListener> listeners = new CopyOnWriteArrayList<>();28 26 29 27 /** … … 35 33 36 34 /** 37 * Constructs a new {@code PrimitiveDeepCopy} of given OSM primitives. 38 * @param primitives OSM primitives to copy 39 * @since 7961 35 * Gets the list of primitives that were explicitly added to this copy. 36 * @return The added primitives 40 37 */ 41 public PrimitiveDeepCopy(final Collection<? extends OsmPrimitive> primitives) {42 makeCopy(primitives);43 }44 45 /**46 * Replace content of the object with copy of provided primitives.47 * @param primitives OSM primitives to copy48 * @since 796149 */50 public final void makeCopy(final Collection<? extends OsmPrimitive> primitives) {51 directlyAdded.clear();52 referenced.clear();53 54 final Set<Long> visitedNodeIds = new HashSet<>();55 final Set<Long> visitedWayIds = new HashSet<>();56 final Set<Long> visitedRelationIds = new HashSet<>();57 58 new AbstractVisitor() {59 private boolean firstIteration;60 61 @Override62 public void visit(Node n) {63 if (!visitedNodeIds.add(n.getUniqueId()))64 return;65 (firstIteration ? directlyAdded : referenced).add(n.save());66 }67 68 @Override69 public void visit(Way w) {70 if (!visitedWayIds.add(w.getUniqueId()))71 return;72 (firstIteration ? directlyAdded : referenced).add(w.save());73 firstIteration = false;74 for (Node n : w.getNodes()) {75 visit(n);76 }77 }78 79 @Override80 public void visit(Relation r) {81 if (!visitedRelationIds.add(r.getUniqueId()))82 return;83 (firstIteration ? directlyAdded : referenced).add(r.save());84 firstIteration = false;85 for (RelationMember m : r.getMembers()) {86 m.getMember().accept(this);87 }88 }89 90 public void visitAll() {91 for (OsmPrimitive osm : primitives) {92 firstIteration = true;93 osm.accept(this);94 }95 }96 }.visitAll();97 98 firePasteBufferChanged();99 }100 101 38 public List<PrimitiveData> getDirectlyAdded() { 102 return directlyAdded; 103 } 104 105 public List<PrimitiveData> getReferenced() { 106 return referenced; 107 } 108 109 public List<PrimitiveData> getAll() { 110 List<PrimitiveData> result = new ArrayList<>(directlyAdded.size() + referenced.size()); 111 result.addAll(directlyAdded); 112 result.addAll(referenced); 113 return result; 39 try { 40 PrimitiveTransferData data = (PrimitiveTransferData) ClipboardUtils.getClipboard().getData(PrimitiveTransferData.DATA_FLAVOR); 41 return new ArrayList<>(data.getDirectlyAdded()); 42 } catch (UnsupportedFlavorException | IOException e) { 43 Main.debug(e); 44 return Collections.emptyList(); 45 } 114 46 } 115 47 116 48 public boolean isEmpty() { 117 return directlyAdded.isEmpty() && referenced.isEmpty(); 118 } 119 120 private void firePasteBufferChanged() { 121 for (PasteBufferChangedListener listener: listeners) { 122 listener.pasteBufferChanged(this); 123 } 124 } 125 126 public void addPasteBufferChangedListener(PasteBufferChangedListener listener) { 127 listeners.addIfAbsent(listener); 128 } 129 130 public void removePasteBufferChangedListener(PasteBufferChangedListener listener) { 131 listeners.remove(listener); 49 return !ClipboardUtils.getClipboard().isDataFlavorAvailable(PrimitiveTransferData.DATA_FLAVOR); 132 50 } 133 51 } -
trunk/src/org/openstreetmap/josm/data/osm/TagMap.java
r9978 r10604 2 2 package org.openstreetmap.josm.data.osm; 3 3 4 import java.io.Serializable; 4 5 import java.util.AbstractMap; 5 6 import java.util.AbstractSet; 7 import java.util.ArrayList; 6 8 import java.util.Arrays; 7 9 import java.util.ConcurrentModificationException; 8 10 import java.util.Iterator; 11 import java.util.List; 12 import java.util.Map; 9 13 import java.util.NoSuchElementException; 10 14 import java.util.Set; … … 17 21 * @author Michael Zangl 18 22 */ 19 public class TagMap extends AbstractMap<String, String> { 23 public class TagMap extends AbstractMap<String, String> implements Serializable { 24 static final long serialVersionUID = 1; 20 25 /** 21 26 * We use this array every time we want to represent an empty map. … … 108 113 */ 109 114 public TagMap() { 110 this(null); 115 this((String[]) null); 116 } 117 118 /** 119 * Create a new tag map and load it from the other map. 120 * @param tags The map to load from. 121 * @since 10604 122 */ 123 public TagMap(Map<String, String> tags) { 124 putAll(tags); 125 } 126 127 /** 128 * Copy constructor. 129 * @param tagMap The map to copy from. 130 * @since 10604 131 */ 132 public TagMap(TagMap tagMap) { 133 this(tagMap.tags); 111 134 } 112 135 … … 210 233 211 234 /** 235 * Gets a list of all tags contained in this map. 236 * @return The list of tags in the order they were added. 237 * @since 10604 238 */ 239 public List<Tag> getTags() { 240 List<Tag> tagList = new ArrayList<>(); 241 for (int i = 0; i < tags.length; i += 2) { 242 tagList.add(new Tag(tags[i], tags[i+1])); 243 } 244 return tagList; 245 } 246 247 /** 212 248 * Finds a key in an array that is structured like the {@link #tags} array and returns the position. 213 249 * <p>
Note:
See TracChangeset
for help on using the changeset viewer.