Changeset 16187 in josm for trunk/src/org/openstreetmap/josm/data/osm/DataSet.java
- Timestamp:
- 2020-03-21T21:27:36+01:00 (4 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/org/openstreetmap/josm/data/osm/DataSet.java
r16119 r16187 24 24 import java.util.function.Function; 25 25 import java.util.function.Predicate; 26 import java.util.function.Supplier; 26 27 import java.util.stream.Collectors; 27 28 import java.util.stream.Stream; … … 256 257 public DataSet(OsmPrimitive... osmPrimitives) { 257 258 this(); 258 beginUpdate(); 259 try { 259 update(() -> { 260 260 for (OsmPrimitive o : osmPrimitives) { 261 261 addPrimitive(o); 262 262 } 263 } finally { 264 endUpdate(); 265 } 263 }); 266 264 } 267 265 … … 499 497 Objects.requireNonNull(primitive, "primitive"); 500 498 checkModifiable(); 501 beginUpdate(); 502 try { 499 update(() -> { 503 500 if (getPrimitiveById(primitive) != null) 504 501 throw new DataIntegrityProblemException( … … 511 508 store.addPrimitive(primitive); 512 509 firePrimitivesAdded(Collections.singletonList(primitive), false); 513 } finally { 514 endUpdate(); 515 } 510 }); 516 511 } 517 512 … … 528 523 public void removePrimitive(PrimitiveId primitiveId) { 529 524 checkModifiable(); 530 beginUpdate(); 531 try { 525 update(() -> { 532 526 OsmPrimitive primitive = getPrimitiveByIdChecked(primitiveId); 533 527 if (primitive == null) … … 535 529 removePrimitiveImpl(primitive); 536 530 firePrimitivesRemoved(Collections.singletonList(primitive), false); 537 } finally { 538 endUpdate(); 539 } 531 }); 540 532 } 541 533 … … 552 544 void removePrimitive(OsmPrimitive primitive) { 553 545 checkModifiable(); 554 beginUpdate(); 555 try { 546 update(() -> { 556 547 removePrimitiveImpl(primitive); 557 548 firePrimitivesRemoved(Collections.singletonList(primitive), false); 558 } finally { 559 endUpdate(); 560 } 549 }); 561 550 } 562 551 … … 804 793 public Set<Way> unlinkNodeFromWays(Node node) { 805 794 checkModifiable(); 806 Set<Way> result = new HashSet<>(); 807 beginUpdate(); 808 try { 795 return update(() -> { 796 Set<Way> result = new HashSet<>(); 809 797 for (Way way : node.getParentWays()) { 810 798 List<Node> wayNodes = way.getNodes(); … … 818 806 } 819 807 } 820 } finally { 821 endUpdate(); 822 } 823 return result; 808 return result; 809 }); 824 810 } 825 811 … … 833 819 public Set<Relation> unlinkPrimitiveFromRelations(OsmPrimitive primitive) { 834 820 checkModifiable(); 835 Set<Relation> result = new HashSet<>(); 836 beginUpdate(); 837 try { 821 return update(() -> { 822 Set<Relation> result = new HashSet<>(); 838 823 for (Relation relation : getRelations()) { 839 824 List<RelationMember> members = relation.getMembers(); … … 854 839 } 855 840 } 856 } finally { 857 endUpdate(); 858 } 859 return result; 841 return result; 842 }); 860 843 } 861 844 … … 869 852 public Set<OsmPrimitive> unlinkReferencesToPrimitive(OsmPrimitive referencedPrimitive) { 870 853 checkModifiable(); 871 Set<OsmPrimitive> result = new HashSet<>(); 872 beginUpdate(); 873 try { 854 return update(() -> { 855 Set<OsmPrimitive> result = new HashSet<>(); 874 856 if (referencedPrimitive instanceof Node) { 875 857 result.addAll(unlinkNodeFromWays((Node) referencedPrimitive)); 876 858 } 877 859 result.addAll(unlinkPrimitiveFromRelations(referencedPrimitive)); 878 } finally { 879 endUpdate(); 880 } 881 return result; 860 return result; 861 }); 882 862 } 883 863 … … 979 959 } 980 960 961 /** 962 * Performs the update runnable between {@link #beginUpdate()} / {@link #endUpdate()} calls. 963 * @param runnable update action 964 * @since 16187 965 */ 966 public void update(Runnable runnable) { 967 beginUpdate(); 968 try { 969 runnable.run(); 970 } finally { 971 endUpdate(); 972 } 973 } 974 975 /** 976 * Performs the update function between {@link #beginUpdate()} / {@link #endUpdate()} calls. 977 * @param function update function 978 * @param t function argument 979 * @param <T> argument type 980 * @param <R> result type 981 * @return function result 982 * @since 16187 983 */ 984 public <T, R> R update(Function<T, R> function, T t) { 985 beginUpdate(); 986 try { 987 return function.apply(t); 988 } finally { 989 endUpdate(); 990 } 991 } 992 993 /** 994 * Performs the update supplier between {@link #beginUpdate()} / {@link #endUpdate()} calls. 995 * @param supplier update supplier 996 * @param <R> result type 997 * @return supplier result 998 * @since 16187 999 */ 1000 public <R> R update(Supplier<R> supplier) { 1001 beginUpdate(); 1002 try { 1003 return supplier.get(); 1004 } finally { 1005 endUpdate(); 1006 } 1007 } 1008 981 1009 private void fireEventToListeners(AbstractDatasetChangedEvent event) { 982 1010 for (DataSetListener listener : listeners) { … … 1044 1072 * Invalidates the internal cache of projected east/north coordinates. 1045 1073 * 1046 * This method can be invoked after the globally configured projection method 1047 * changed. 1074 * This method can be invoked after the globally configured projection method changed. 1048 1075 */ 1049 1076 public void invalidateEastNorthCache() { 1050 1077 if (ProjectionRegistry.getProjection() == null) 1051 1078 return; // sanity check 1052 beginUpdate(); 1053 try { 1054 for (Node n : getNodes()) { 1055 n.invalidateEastNorthCache(); 1056 } 1057 } finally { 1058 endUpdate(); 1059 } 1079 update(() -> getNodes().forEach(Node::invalidateEastNorthCache)); 1060 1080 } 1061 1081 … … 1064 1084 */ 1065 1085 public void cleanupDeletedPrimitives() { 1066 beginUpdate(); 1067 try { 1086 update(() -> { 1068 1087 Collection<OsmPrimitive> toCleanUp = getPrimitives( 1069 1088 primitive -> primitive.isDeleted() && (!primitive.isVisible() || primitive.isNew())); … … 1076 1095 firePrimitivesRemoved(toCleanUp, false); 1077 1096 } 1078 } finally { 1079 endUpdate(); 1080 } 1097 }); 1081 1098 } 1082 1099 … … 1091 1108 //TODO: Report listeners that are still active (should be none) 1092 1109 checkModifiable(); 1093 beginUpdate(); 1094 try { 1110 update(() -> { 1095 1111 clearSelection(); 1096 1112 for (OsmPrimitive primitive : allPrimitives) { … … 1099 1115 store.clear(); 1100 1116 allPrimitives.clear(); 1101 } finally { 1102 endUpdate(); 1103 } 1117 }); 1104 1118 } 1105 1119
Note:
See TracChangeset
for help on using the changeset viewer.