Package org.openstreetmap.josm.data.osm
Class DataSetMerger
- java.lang.Object
-
- org.openstreetmap.josm.data.osm.DataSetMerger
-
public class DataSetMerger extends java.lang.Object
A dataset merger which takes a target and a source dataset and merges the source data set onto the target dataset.
-
-
Field Summary
Fields Modifier and Type Field Description private ConflictCollectionconflictsthe collection of conflicts created during mergingprivate java.util.Map<PrimitiveId,PrimitiveId>mergedMapA map of all primitives that got replaced with other primitives.private java.util.Set<OsmPrimitive>objectsToDeleteprivate java.util.Set<PrimitiveId>objectsWithChildrenToMergea set of primitive ids for which we have to fix references (to nodes and to relation members) after the first phase of mergingprivate DataSetsourceDataSetthe source dataset where primitives are merged fromprivate DataSettargetDataSetthe target dataset for merging
-
Constructor Summary
Constructors Constructor Description DataSetMerger(DataSet targetDataSet, DataSet sourceDataSet)constructor
-
Method Summary
All Methods Instance Methods Concrete Methods Modifier and Type Method Description protected voidaddConflict(Conflict<?> c)protected voidaddConflict(OsmPrimitive my, OsmPrimitive their)protected voiddeleteMarkedObjects()Deleted objects in objectsToDelete set and create conflicts for objects that cannot be deleted because they're referenced in the target dataset.protected voidfixIncomplete(Way other)voidfixReferences()Postprocess the dataset and fix all merged references to point to the actual data.ConflictCollectiongetConflicts()replies the map of conflictsprotected OsmPrimitivegetMergeTarget(OsmPrimitive mergeSource)DataSetgetTargetDataSet()replies my datasetvoidmerge()Runs the merge operation.voidmerge(ProgressMonitor progressMonitor)Runs the merge operation.voidmerge(ProgressMonitor progressMonitor, boolean mergeBounds)Runs the merge operation.private booleanmergeById(OsmPrimitive source)Tries to merge a primitivesourceinto an existing primitive with the same id.private voidmergeNodeList(Way source)Merges the node list of a source way onto its target way.protected voidmergePrimitive(OsmPrimitive source, java.util.Collection<? extends OsmPrimitive> candidates)Merges a primitive onto primitives dataset.private voidmergeRelationMembers(Relation source)Merges the relation members of a source relation onto the corresponding target relation.private voidreplaceConflict(Conflict<?> oldConflict, Conflict<?> newConflict)
-
-
-
Field Detail
-
conflicts
private final ConflictCollection conflicts
the collection of conflicts created during merging
-
targetDataSet
private final DataSet targetDataSet
the target dataset for merging
-
sourceDataSet
private final DataSet sourceDataSet
the source dataset where primitives are merged from
-
mergedMap
private final java.util.Map<PrimitiveId,PrimitiveId> mergedMap
A map of all primitives that got replaced with other primitives. Key is the PrimitiveId in their dataset, the value is the PrimitiveId in my dataset
-
objectsWithChildrenToMerge
private final java.util.Set<PrimitiveId> objectsWithChildrenToMerge
a set of primitive ids for which we have to fix references (to nodes and to relation members) after the first phase of merging
-
objectsToDelete
private final java.util.Set<OsmPrimitive> objectsToDelete
-
-
Constructor Detail
-
DataSetMerger
public DataSetMerger(DataSet targetDataSet, DataSet sourceDataSet)
constructorThe visitor will merge
sourceDataSetontotargetDataSet- Parameters:
targetDataSet- dataset with my primitives. Must not be null.sourceDataSet- dataset with their primitives. Ignored, if null.- Throws:
java.lang.IllegalArgumentException- if myDataSet is null
-
-
Method Detail
-
mergePrimitive
protected void mergePrimitive(OsmPrimitive source, java.util.Collection<? extends OsmPrimitive> candidates)
Merges a primitive onto primitives dataset.If other.id != 0 it tries to merge it with an corresponding primitive from my dataset with the same id. If this is not possible a conflict is remembered in
conflicts.If other.id == 0 (new primitive) it tries to find a primitive in my dataset with id == 0 which is semantically equal. If it finds one it merges its technical attributes onto my primitive.
- Parameters:
source- the primitive to mergecandidates- a set of possible candidates for a new primitive
-
getMergeTarget
protected OsmPrimitive getMergeTarget(OsmPrimitive mergeSource)
-
addConflict
protected void addConflict(Conflict<?> c)
-
addConflict
protected void addConflict(OsmPrimitive my, OsmPrimitive their)
-
replaceConflict
private void replaceConflict(Conflict<?> oldConflict, Conflict<?> newConflict)
-
fixIncomplete
protected void fixIncomplete(Way other)
-
fixReferences
public void fixReferences()
Postprocess the dataset and fix all merged references to point to the actual data.
-
deleteMarkedObjects
protected void deleteMarkedObjects()
Deleted objects in objectsToDelete set and create conflicts for objects that cannot be deleted because they're referenced in the target dataset.
-
mergeNodeList
private void mergeNodeList(Way source)
Merges the node list of a source way onto its target way.- Parameters:
source- the source way- Throws:
java.lang.IllegalStateException- if no target way can be found for the source wayjava.lang.IllegalStateException- if there isn't a target node for one of the nodes in the source way
-
mergeRelationMembers
private void mergeRelationMembers(Relation source)
Merges the relation members of a source relation onto the corresponding target relation.- Parameters:
source- the source relation- Throws:
java.lang.IllegalStateException- if there is no corresponding target relationjava.lang.IllegalStateException- if there isn't a corresponding target object for one of the relation members in source
-
mergeById
private boolean mergeById(OsmPrimitive source)
Tries to merge a primitivesourceinto an existing primitive with the same id.- Parameters:
source- the source primitive which is to be merged into a target primitive- Returns:
- true, if this method was able to merge
sourceinto a target object; false, otherwise
-
merge
public void merge()
Runs the merge operation. Successfully mergedOsmPrimitives are ingetTargetDataSet().See
getConflicts()for a map of conflicts after the merge operation.
-
merge
public void merge(ProgressMonitor progressMonitor)
Runs the merge operation. Successfully mergedOsmPrimitives are ingetTargetDataSet().See
getConflicts()for a map of conflicts after the merge operation.- Parameters:
progressMonitor- The progress monitor
-
merge
public void merge(ProgressMonitor progressMonitor, boolean mergeBounds)
Runs the merge operation. Successfully mergedOsmPrimitives are ingetTargetDataSet().See
getConflicts()for a map of conflicts after the merge operation.- Parameters:
progressMonitor- The progress monitormergeBounds- Whether or not to merge the bounds of the new DataSet to the existing DataSet- Since:
- 15127
-
getTargetDataSet
public DataSet getTargetDataSet()
replies my dataset- Returns:
- the own (target) data set
-
getConflicts
public ConflictCollection getConflicts()
replies the map of conflicts- Returns:
- the map of conflicts
-
-