Index: /trunk/src/org/openstreetmap/josm/actions/DownloadPrimitiveAction.java
===================================================================
--- /trunk/src/org/openstreetmap/josm/actions/DownloadPrimitiveAction.java (revision 4496)
+++ /trunk/src/org/openstreetmap/josm/actions/DownloadPrimitiveAction.java (revision 4497)
@@ -10,4 +10,5 @@
import java.awt.GridBagLayout;
import java.awt.event.ActionEvent;
+import java.awt.event.ActionListener;
import java.awt.event.KeyEvent;
import java.lang.reflect.InvocationTargetException;
@@ -94,5 +95,5 @@
JLabel lbl1 = new JLabel(tr("Object type:"));
- OsmPrimitiveTypesComboBox cbType = new OsmPrimitiveTypesComboBox();
+ final OsmPrimitiveTypesComboBox cbType = new OsmPrimitiveTypesComboBox();
cbType.addItem(trc("osm object types", "mixed"));
cbType.setToolTipText(tr("Choose the OSM object type"));
@@ -113,7 +114,11 @@
layer.setToolTipText(tr("Select if the data should be downloaded into a new layer"));
layer.setSelected(Main.pref.getBoolean("download.newlayer"));
- JCheckBox referrers = new JCheckBox(tr("Download referrers"));
- referrers.setToolTipText(tr("Select if the referrers of the object should be downloaded as well"));
+ final JCheckBox referrers = new JCheckBox(tr("Download referrers (parent relations)"));
+ referrers.setToolTipText(tr("Select if the referrers of the object should be downloaded as well, i.e.,"
+ + "parent relations and for nodes, additionally, parent ways"));
referrers.setSelected(Main.pref.getBoolean("downloadprimitive.referrers"));
+ JCheckBox full = new JCheckBox(tr("Download relation members"));
+ full.setToolTipText(tr("Select if the members of a relation should be downloaded as well"));
+ full.setSelected(Main.pref.getBoolean("downloadprimitive.full", true));
HtmlPanel help = new HtmlPanel(tr("Object IDs can be separated by comma or space.
"
+ " Examples:
"
@@ -129,7 +134,18 @@
.addComponent(cbId, GroupLayout.PREFERRED_SIZE, GroupLayout.PREFERRED_SIZE, GroupLayout.PREFERRED_SIZE))
.addComponent(referrers)
+ .addComponent(full)
.addComponent(layer)
.addComponent(help)
);
+
+ cbType.addActionListener(new ActionListener() {
+
+ @Override
+ public void actionPerformed(ActionEvent ae) {
+ referrers.setText(cbType.getType() == OsmPrimitiveType.NODE
+ ? tr("Download referrers (parent relations and ways)")
+ : tr("Download referrers (parent relations)"));
+ }
+ });
layout.setHorizontalGroup(layout.createParallelGroup()
@@ -144,4 +160,5 @@
)
.addComponent(referrers)
+ .addComponent(full)
.addComponent(layer)
.addComponent(help)
@@ -165,4 +182,5 @@
Main.pref.putInteger("downloadprimitive.lasttype", cbType.getSelectedIndex());
Main.pref.put("downloadprimitive.referrers", referrers.isSelected());
+ Main.pref.put("downloadprimitive.full", full.isSelected());
Main.pref.put("download.newlayer", layer.isSelected());
@@ -179,8 +197,8 @@
}
remindPrimitivesHistory(cbId);
- processItems(layer.isSelected(), tfId.getIds(), referrers.isSelected());
- }
-
- void processItems(boolean newLayer, final List ids, boolean downloadReferrers) {
+ processItems(layer.isSelected(), tfId.getIds(), referrers.isSelected(), full.isSelected());
+ }
+
+ void processItems(boolean newLayer, final List ids, boolean downloadReferrers, boolean full) {
OsmDataLayer layer = getEditLayer();
if ((layer == null) || newLayer) {
@@ -188,5 +206,5 @@
Main.main.addLayer(layer);
}
- final DownloadPrimitivesTask task = new DownloadPrimitivesTask(layer, ids);
+ final DownloadPrimitivesTask task = new DownloadPrimitivesTask(layer, ids, full);
Main.worker.submit(task);
Index: /trunk/src/org/openstreetmap/josm/gui/io/DownloadPrimitivesTask.java
===================================================================
--- /trunk/src/org/openstreetmap/josm/gui/io/DownloadPrimitivesTask.java (revision 4496)
+++ /trunk/src/org/openstreetmap/josm/gui/io/DownloadPrimitivesTask.java (revision 4497)
@@ -39,4 +39,5 @@
private OsmDataLayer layer;
+ private boolean fullRelation;
private MultiFetchServerObjectReader multiObjectReader;
private OsmServerObjectReader objectReader;
@@ -48,11 +49,14 @@
* @param toUpdate a collection of primitives to update from the server. Set to
* the empty collection if null.
+ * @param fullRelation true if a full download is required, i.e.,
+ * a download including the immediate children of a relation.
* @throws IllegalArgumentException thrown if layer is null.
*/
- public DownloadPrimitivesTask(OsmDataLayer layer, List ids) throws IllegalArgumentException {
+ public DownloadPrimitivesTask(OsmDataLayer layer, List ids, boolean fullRelation) throws IllegalArgumentException {
super(tr("Download objects"), false /* don't ignore exception */);
ensureParameterNotNull(layer, "layer");
this.ids = ids;
this.layer = layer;
+ this.fullRelation = fullRelation;
}
@@ -145,5 +149,5 @@
synchronized(this) {
if (canceled) return;
- objectReader = new OsmServerObjectReader(r.getId(), OsmPrimitiveType.RELATION, true /* full */);
+ objectReader = new OsmServerObjectReader(r.getId(), OsmPrimitiveType.RELATION, fullRelation);
}
theirDataSet = objectReader.parseOsm(progressMonitor.createSubTaskMonitor(ProgressMonitor.ALL_TICKS, false));