001    // License: GPL. For details, see LICENSE file.
002    package org.openstreetmap.josm.gui.conflict.pair.relation;
003    
004    import javax.swing.JScrollPane;
005    
006    import org.openstreetmap.josm.data.conflict.Conflict;
007    import org.openstreetmap.josm.data.osm.OsmPrimitive;
008    import org.openstreetmap.josm.data.osm.Relation;
009    import org.openstreetmap.josm.data.osm.RelationMember;
010    import org.openstreetmap.josm.gui.conflict.pair.IConflictResolver;
011    import org.openstreetmap.josm.gui.conflict.pair.ListMerger;
012    
013    /**
014     * A UI component for resolving conflicts in the member lists of two {@link Relation}
015     */
016    public class RelationMemberMerger extends ListMerger<RelationMember> implements IConflictResolver {
017        @Override
018        protected JScrollPane buildMyElementsTable() {
019            myEntriesTable  = new RelationMemberTable(
020                    "table.mymembers",
021                    model,
022                    model.getMyTableModel(),
023                    model.getMySelectionModel()
024            );
025            return embeddInScrollPane(myEntriesTable);
026        }
027    
028        @Override
029        protected JScrollPane buildMergedElementsTable() {
030            mergedEntriesTable  = new RelationMemberTable(
031                    "table.mergedmembers",
032                    model,
033                    model.getMergedTableModel(),
034                    model.getMergedSelectionModel()
035            );
036            mergedEntriesTable.putClientProperty("terminateEditOnFocusLost", Boolean.TRUE);
037            return embeddInScrollPane(mergedEntriesTable);
038        }
039    
040        @Override
041        protected JScrollPane buildTheirElementsTable() {
042            theirEntriesTable  = new RelationMemberTable(
043                    "table.theirmembers",
044                    model,
045                    model.getTheirTableModel(),
046                    model.getTheirSelectionModel()
047            );
048            return embeddInScrollPane(theirEntriesTable);
049        }
050    
051        public void populate(Conflict<? extends OsmPrimitive> conflict) {
052            Relation myRel = (Relation)conflict.getMy();
053            Relation theirRel = (Relation)conflict.getTheir();
054            ((RelationMemberListMergeModel)model).populate(myRel, theirRel, conflict.getMergedMap());
055            myEntriesTable.setLayer(findLayerFor(myRel));
056            theirEntriesTable.setLayer(findLayerFor(theirRel));
057        }
058    
059        public RelationMemberMerger() {
060            super(new RelationMemberListMergeModel());
061        }
062    
063        public void deletePrimitive(boolean deleted) {
064            if (deleted) {
065                model.clearMerged();
066                model.setFrozen(true);
067            } else {
068                model.setFrozen(false);
069            }
070        }
071    }