// License: GPL. For details, see LICENSE file.
package org.openstreetmap.josm.gui.conflict.pair.relation;
import javax.swing.JScrollPane;
import org.openstreetmap.josm.command.conflict.RelationMemberConflictResolverCommand;
import org.openstreetmap.josm.data.conflict.Conflict;
import org.openstreetmap.josm.data.osm.OsmPrimitive;
import org.openstreetmap.josm.data.osm.Relation;
import org.openstreetmap.josm.data.osm.RelationMember;
import org.openstreetmap.josm.gui.conflict.pair.AbstractListMerger;
/**
* A UI component for resolving conflicts in the member lists of two {@link Relation}s.
* @since 1631
*/
public class RelationMemberMerger extends AbstractListMerger<RelationMember, RelationMemberConflictResolverCommand> {
/**
* Constructs a new {@code RelationMemberMerger}.
*/
public RelationMemberMerger() {
super(new RelationMemberListMergeModel());
}
@Override
protected JScrollPane buildMyElementsTable() {
myEntriesTable = new RelationMemberTable(
"table.mymembers",
model,
model.getMyTableModel(),
model.getMySelectionModel()
);
return embeddInScrollPane(myEntriesTable);
}
@Override
protected JScrollPane buildMergedElementsTable() {
mergedEntriesTable = new RelationMemberTable(
"table.mergedmembers",
model,
model.getMergedTableModel(),
model.getMergedSelectionModel()
);
mergedEntriesTable.putClientProperty("terminateEditOnFocusLost", Boolean.TRUE);
return embeddInScrollPane(mergedEntriesTable);
}
@Override
protected JScrollPane buildTheirElementsTable() {
theirEntriesTable = new RelationMemberTable(
"table.theirmembers",
model,
model.getTheirTableModel(),
model.getTheirSelectionModel()
);
return embeddInScrollPane(theirEntriesTable);
}
@Override
public void populate(Conflict<? extends OsmPrimitive> conflict) {
Relation myRel = (Relation) conflict.getMy();
Relation theirRel = (Relation) conflict.getTheir();
((RelationMemberListMergeModel) model).populate(myRel, theirRel, conflict.getMergedMap());
myEntriesTable.setLayer(findLayerFor(myRel));
theirEntriesTable.setLayer(findLayerFor(theirRel));
}
@Override
public void deletePrimitive(boolean deleted) {
if (deleted) {
model.clearMerged();
model.setFrozen(true);
} else {
model.setFrozen(false);
}
}
}