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 ConflictCollection
conflicts
the collection of conflicts created during mergingprivate java.util.Map<PrimitiveId,PrimitiveId>
mergedMap
A map of all primitives that got replaced with other primitives.private java.util.Set<OsmPrimitive>
objectsToDelete
private 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 mergingprivate DataSet
sourceDataSet
the source dataset where primitives are merged fromprivate DataSet
targetDataSet
the 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 void
addConflict(Conflict<?> c)
protected void
addConflict(OsmPrimitive my, OsmPrimitive their)
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.protected void
fixIncomplete(Way other)
void
fixReferences()
Postprocess the dataset and fix all merged references to point to the actual data.ConflictCollection
getConflicts()
replies the map of conflictsprotected OsmPrimitive
getMergeTarget(OsmPrimitive mergeSource)
DataSet
getTargetDataSet()
replies my datasetvoid
merge()
Runs the merge operation.void
merge(ProgressMonitor progressMonitor)
Runs the merge operation.void
merge(ProgressMonitor progressMonitor, boolean mergeBounds)
Runs the merge operation.private boolean
mergeById(OsmPrimitive source)
Tries to merge a primitivesource
into an existing primitive with the same id.private void
mergeNodeList(Way source)
Merges the node list of a source way onto its target way.protected void
mergePrimitive(OsmPrimitive source, java.util.Collection<? extends OsmPrimitive> candidates)
Merges a primitive onto primitives dataset.private void
mergeRelationMembers(Relation source)
Merges the relation members of a source relation onto the corresponding target relation.private void
replaceConflict(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
sourceDataSet
ontotargetDataSet
- 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 primitivesource
into 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
source
into a target object; false, otherwise
-
merge
public void merge()
Runs the merge operation. Successfully mergedOsmPrimitive
s are ingetTargetDataSet()
.See
getConflicts()
for a map of conflicts after the merge operation.
-
merge
public void merge(ProgressMonitor progressMonitor)
Runs the merge operation. Successfully mergedOsmPrimitive
s 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 mergedOsmPrimitive
s 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
-
-