Changeset 13611 in josm for trunk/src/org


Ignore:
Timestamp:
2018-04-10T19:02:58+02:00 (7 years ago)
Author:
Don-vip
Message:

fix #16176 - NPE

Location:
trunk/src/org/openstreetmap/josm
Files:
10 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/org/openstreetmap/josm/actions/CombineWayAction.java

    r13453 r13611  
    1414import java.util.LinkedList;
    1515import java.util.List;
     16import java.util.Objects;
    1617import java.util.stream.Collectors;
    1718
     
    2829import org.openstreetmap.josm.data.osm.NodeGraph;
    2930import org.openstreetmap.josm.data.osm.OsmPrimitive;
     31import org.openstreetmap.josm.data.osm.OsmUtils;
    3032import org.openstreetmap.josm.data.osm.TagCollection;
    3133import org.openstreetmap.josm.data.osm.Way;
     
    115117            return null;
    116118
    117         List<DataSet> dataSets = ways.stream().map(Way::getDataSet).distinct().collect(Collectors.toList());
     119        List<DataSet> dataSets = ways.stream().map(Way::getDataSet).filter(Objects::nonNull).distinct().collect(Collectors.toList());
    118120        if (dataSets.size() != 1) {
    119121            throw new IllegalArgumentException("Cannot combine ways of multiple data sets.");
     
    251253    protected void updateEnabledState(Collection<? extends OsmPrimitive> selection) {
    252254        int numWays = 0;
    253         if (selection.stream().map(OsmPrimitive::getDataSet).noneMatch(DataSet::isLocked)) {
     255        if (OsmUtils.isOsmCollectionEditable(selection)) {
    254256            for (OsmPrimitive osm : selection) {
    255257                if (osm instanceof Way && !osm.isIncomplete() && ++numWays >= 2) {
  • trunk/src/org/openstreetmap/josm/actions/JosmAction.java

    r13486 r13611  
    2020import org.openstreetmap.josm.data.osm.DataSet;
    2121import org.openstreetmap.josm.data.osm.OsmPrimitive;
     22import org.openstreetmap.josm.data.osm.OsmUtils;
    2223import org.openstreetmap.josm.data.osm.event.DatasetEventManager.FireMode;
    2324import org.openstreetmap.josm.data.osm.event.SelectionEventManager;
     
    365366     */
    366367    protected final void updateEnabledStateOnModifiableSelection(Collection<? extends OsmPrimitive> selection) {
    367         setEnabled(selection != null && !selection.isEmpty()
    368                 && selection.stream().map(OsmPrimitive::getDataSet).noneMatch(DataSet::isLocked));
     368        setEnabled(OsmUtils.isOsmCollectionEditable(selection));
    369369    }
    370370
  • trunk/src/org/openstreetmap/josm/actions/MergeNodesAction.java

    r13453 r13611  
    2828import org.openstreetmap.josm.data.coor.EastNorth;
    2929import org.openstreetmap.josm.data.coor.LatLon;
    30 import org.openstreetmap.josm.data.osm.DataSet;
    3130import org.openstreetmap.josm.data.osm.DefaultNameFormatter;
    3231import org.openstreetmap.josm.data.osm.Node;
    3332import org.openstreetmap.josm.data.osm.OsmPrimitive;
     33import org.openstreetmap.josm.data.osm.OsmUtils;
    3434import org.openstreetmap.josm.data.osm.TagCollection;
    3535import org.openstreetmap.josm.data.osm.Way;
     
    365365    @Override
    366366    protected void updateEnabledState(Collection<? extends OsmPrimitive> selection) {
    367         if (selection == null || selection.isEmpty()
    368                 || selection.stream().map(OsmPrimitive::getDataSet).anyMatch(DataSet::isLocked)) {
    369             setEnabled(false);
    370             return;
    371         }
    372         boolean ok = true;
    373         for (OsmPrimitive osm : selection) {
    374             if (!(osm instanceof Node)) {
    375                 ok = false;
    376                 break;
     367        boolean ok = OsmUtils.isOsmCollectionEditable(selection);
     368        if (ok) {
     369            for (OsmPrimitive osm : selection) {
     370                if (!(osm instanceof Node)) {
     371                    ok = false;
     372                    break;
     373                }
    377374            }
    378375        }
  • trunk/src/org/openstreetmap/josm/actions/MoveNodeAction.java

    r13453 r13611  
    1111import org.openstreetmap.josm.command.MoveCommand;
    1212import org.openstreetmap.josm.data.coor.LatLon;
    13 import org.openstreetmap.josm.data.osm.DataSet;
    1413import org.openstreetmap.josm.data.osm.Node;
    1514import org.openstreetmap.josm.data.osm.OsmPrimitive;
     15import org.openstreetmap.josm.data.osm.OsmUtils;
    1616import org.openstreetmap.josm.gui.MainApplication;
    1717import org.openstreetmap.josm.gui.dialogs.LatLonDialog;
     
    6262    @Override
    6363    protected void updateEnabledState(Collection<? extends OsmPrimitive> selection) {
    64         if (selection == null || selection.isEmpty()
    65                 || selection.stream().map(OsmPrimitive::getDataSet).anyMatch(DataSet::isLocked)) {
    66             setEnabled(false);
    67             return;
    68         }
    69         if ((selection.size()) == 1 && (selection.toArray()[0] instanceof Node)) {
    70             setEnabled(true);
    71         } else {
    72             setEnabled(false);
    73         }
     64        setEnabled(OsmUtils.isOsmCollectionEditable(selection) && selection.size() == 1 && selection.toArray()[0] instanceof Node);
    7465    }
    7566}
  • trunk/src/org/openstreetmap/josm/actions/SplitWayAction.java

    r13453 r13611  
    2626import org.openstreetmap.josm.Main;
    2727import org.openstreetmap.josm.command.SplitWayCommand;
    28 import org.openstreetmap.josm.data.osm.DataSet;
    2928import org.openstreetmap.josm.data.osm.DefaultNameFormatter;
    3029import org.openstreetmap.josm.data.osm.Node;
    3130import org.openstreetmap.josm.data.osm.OsmPrimitive;
     31import org.openstreetmap.josm.data.osm.OsmUtils;
    3232import org.openstreetmap.josm.data.osm.PrimitiveId;
    3333import org.openstreetmap.josm.data.osm.Relation;
     
    296296    protected void updateEnabledState(Collection<? extends OsmPrimitive> selection) {
    297297        // Selection still can be wrong, but let SplitWayAction process and tell user what's wrong
    298         setEnabled(selection != null && !selection.isEmpty()
    299                 && selection.stream().map(OsmPrimitive::getDataSet).noneMatch(DataSet::isLocked)
     298        setEnabled(OsmUtils.isOsmCollectionEditable(selection)
    300299                && selection.stream().anyMatch(o -> o instanceof Node && !o.isIncomplete()));
    301300    }
  • trunk/src/org/openstreetmap/josm/actions/relation/AddSelectionToRelations.java

    r13453 r13611  
    1616import org.openstreetmap.josm.data.osm.DataSet;
    1717import org.openstreetmap.josm.data.osm.OsmPrimitive;
     18import org.openstreetmap.josm.data.osm.OsmUtils;
    1819import org.openstreetmap.josm.data.osm.Relation;
    1920import org.openstreetmap.josm.gui.MainApplication;
     
    7071    @Override
    7172    public void selectionChanged(final Collection<? extends OsmPrimitive> newSelection) {
    72         GuiHelper.runInEDT(() -> setEnabled(newSelection != null && !newSelection.isEmpty() && !relations.isEmpty()
    73                 && relations.stream().map(Relation::getDataSet).noneMatch(DataSet::isLocked)));
     73        GuiHelper.runInEDT(() -> setEnabled(newSelection != null && !newSelection.isEmpty()
     74                && OsmUtils.isOsmCollectionEditable(relations)));
    7475    }
    7576}
  • trunk/src/org/openstreetmap/josm/actions/relation/DeleteRelationsAction.java

    r13453 r13611  
    88
    99import org.openstreetmap.josm.actions.mapmode.DeleteAction;
    10 import org.openstreetmap.josm.data.osm.DataSet;
     10import org.openstreetmap.josm.data.osm.OsmUtils;
    1111import org.openstreetmap.josm.data.osm.Relation;
    1212import org.openstreetmap.josm.gui.MainApplication;
     
    5151    @Override
    5252    protected void updateEnabledState() {
    53         setEnabled(!relations.isEmpty() && relations.stream().map(Relation::getDataSet).noneMatch(DataSet::isLocked));
     53        setEnabled(OsmUtils.isOsmCollectionEditable(relations));
    5454    }
    5555}
  • trunk/src/org/openstreetmap/josm/actions/relation/EditRelationAction.java

    r13453 r13611  
    1313
    1414import org.openstreetmap.josm.Main;
    15 import org.openstreetmap.josm.data.osm.DataSet;
    1615import org.openstreetmap.josm.data.osm.OsmPrimitive;
     16import org.openstreetmap.josm.data.osm.OsmUtils;
    1717import org.openstreetmap.josm.data.osm.Relation;
    1818import org.openstreetmap.josm.data.osm.RelationMember;
     
    8989    protected void updateEnabledState() {
    9090        boolean enabled = false;
    91         if (relations.stream().map(Relation::getDataSet).noneMatch(DataSet::isLocked)) {
     91        if (OsmUtils.isOsmCollectionEditable(relations)) {
    9292            for (Relation r : relations) {
    9393                if (!r.isDeleted()) {
  • trunk/src/org/openstreetmap/josm/data/osm/OsmUtils.java

    r12986 r13611  
    33
    44import java.util.Arrays;
     5import java.util.Collection;
    56import java.util.HashSet;
    67import java.util.Locale;
    78import java.util.Map;
     9import java.util.Objects;
    810import java.util.Set;
    911
     
    153155        return layer1;
    154156    }
     157
     158    /**
     159     * Determines if the given collection contains primitives, and that none of them belong to a locked layer.
     160     * @param collection collection of OSM primitives
     161     * @return {@code true} if the given collection is not empty and does not contain any primitive in a locked layer.
     162     * @since 13611
     163     */
     164    public static boolean isOsmCollectionEditable(Collection<? extends OsmPrimitive> collection) {
     165        return collection != null && !collection.isEmpty()
     166            && collection.stream().map(OsmPrimitive::getDataSet).filter(Objects::nonNull).noneMatch(DataSet::isLocked);
     167    }
    155168}
  • trunk/src/org/openstreetmap/josm/data/validation/TestError.java

    r13489 r13611  
    1212
    1313import org.openstreetmap.josm.command.Command;
    14 import org.openstreetmap.josm.data.osm.DataSet;
    1514import org.openstreetmap.josm.data.osm.Node;
    1615import org.openstreetmap.josm.data.osm.OsmPrimitive;
     16import org.openstreetmap.josm.data.osm.OsmUtils;
    1717import org.openstreetmap.josm.data.osm.Relation;
    1818import org.openstreetmap.josm.data.osm.Way;
     
    360360    public boolean isFixable() {
    361361        return (fixingCommand != null || ((tester != null) && tester.isFixable(this)))
    362                 && primitives.stream().map(OsmPrimitive::getDataSet).noneMatch(DataSet::isLocked);
     362                && OsmUtils.isOsmCollectionEditable(primitives);
    363363    }
    364364
Note: See TracChangeset for help on using the changeset viewer.