Ignore:
Timestamp:
2012-06-24T21:02:36+02:00 (12 years ago)
Author:
Don-vip
Message:

see #4899, see #7266, see #7333: Resolved NPE in conflict manager when copying a member created by merging two layers

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/org/openstreetmap/josm/gui/conflict/pair/ListMergeModel.java

    r5297 r5298  
    1515import java.util.HashMap;
    1616import java.util.List;
     17import java.util.Map;
    1718import java.util.Observable;
    1819
     
    2122import javax.swing.DefaultListSelectionModel;
    2223import javax.swing.JOptionPane;
     24import javax.swing.JTable;
     25import javax.swing.ListSelectionModel;
    2326import javax.swing.table.DefaultTableModel;
    2427import javax.swing.table.TableModel;
    2528
    2629import org.openstreetmap.josm.Main;
     30import org.openstreetmap.josm.data.osm.DataSet;
    2731import org.openstreetmap.josm.data.osm.OsmPrimitive;
    2832import org.openstreetmap.josm.data.osm.PrimitiveId;
     
    3034import org.openstreetmap.josm.gui.help.HelpUtil;
    3135import org.openstreetmap.josm.gui.widgets.OsmPrimitivesTableModel;
     36import org.openstreetmap.josm.tools.CheckParameterUtil;
    3237
    3338/**
     
    6368 * @see ListMerger
    6469 */
    65 public abstract class ListMergeModel<T> extends Observable {
     70public abstract class ListMergeModel<T extends PrimitiveId> extends Observable {
    6671    public static final String FROZEN_PROP = ListMergeModel.class.getName() + ".frozen";
    6772
     
    8186    private boolean isFrozen = false;
    8287    private final ComparePairListModel comparePairListModel;
     88   
     89    private DataSet myDataset;
     90    private Map<PrimitiveId, PrimitiveId> mergedMap;
    8391
    8492    /**
     
    118126     * @return Primitive from my dataset referenced by entry
    119127     */
    120     protected abstract OsmPrimitive getMyPrimitive(T entry);
     128    protected OsmPrimitive getMyPrimitive(T entry) {
     129        return getMyPrimitiveDefault(entry);
     130    }
     131   
     132    protected final OsmPrimitive getMyPrimitiveDefault(PrimitiveId entry) {
     133        OsmPrimitive result = myDataset.getPrimitiveById(entry);
     134        if (result == null && mergedMap != null) {
     135            PrimitiveId id = mergedMap.get(entry);
     136            if (id == null && entry instanceof OsmPrimitive) {
     137                id = mergedMap.get(((OsmPrimitive)entry).getPrimitiveId());
     138            }
     139            if (id != null) {
     140                result = myDataset.getPrimitiveById(id);
     141            }
     142        }
     143        return result;
     144    }
    121145
    122146    protected void buildMyEntriesTableModel() {
     
    310334        getMergedEntries().clear();
    311335        fireModelDataChanged();
     336    }
     337   
     338    protected final void initPopulate(OsmPrimitive my, OsmPrimitive their, Map<PrimitiveId, PrimitiveId> mergedMap) {
     339        CheckParameterUtil.ensureParameterNotNull(my, "my");
     340        CheckParameterUtil.ensureParameterNotNull(their, "their");
     341        this.myDataset = my.getDataSet();
     342        this.mergedMap = mergedMap;
     343        getMergedEntries().clear();
     344        getMyEntries().clear();
     345        getTheirEntries().clear();
    312346    }
    313347
Note: See TracChangeset for help on using the changeset viewer.