source: osm/applications/editors/josm/plugins/reltoolbox/src/relcontext/actions/DownloadChosenRelationAction.java@ 32395

Last change on this file since 32395 was 32395, checked in by donvip, 8 years ago

checkstyle, update to JOSM 10279

File size: 2.9 KB
Line 
1// License: GPL. For details, see LICENSE file.
2package relcontext.actions;
3
4import static org.openstreetmap.josm.tools.I18n.tr;
5
6import java.awt.event.ActionEvent;
7import java.util.Collections;
8import java.util.HashSet;
9import java.util.Set;
10
11import javax.swing.AbstractAction;
12
13import org.openstreetmap.josm.Main;
14import org.openstreetmap.josm.data.osm.OsmPrimitive;
15import org.openstreetmap.josm.data.osm.Relation;
16import org.openstreetmap.josm.data.osm.RelationMember;
17import org.openstreetmap.josm.gui.dialogs.relation.DownloadRelationMemberTask;
18import org.openstreetmap.josm.gui.dialogs.relation.DownloadRelationTask;
19import org.openstreetmap.josm.tools.ImageProvider;
20
21import relcontext.ChosenRelation;
22import relcontext.ChosenRelationListener;
23
24/**
25 * Downloads or updates chosen relation members, depending on completeness.
26 *
27 * @author Zverik
28 */
29public class DownloadChosenRelationAction extends AbstractAction implements ChosenRelationListener {
30 private ChosenRelation rel;
31
32 public DownloadChosenRelationAction(ChosenRelation rel) {
33 super();
34 // putValue(NAME, "D");
35 putValue(SMALL_ICON, ImageProvider.get("relcontext", "download"));
36 putValue(SHORT_DESCRIPTION, tr("Download incomplete members for the chosen relation"));
37 this.rel = rel;
38 rel.addChosenRelationListener(this);
39 setEnabled(false);
40 }
41
42 @Override
43 public void actionPerformed(ActionEvent e) {
44 Relation relation = rel.get();
45 if (relation == null || relation.isNew() ) return;
46 int total = relation.getMembersCount();
47 int incomplete = relation.getIncompleteMembers().size();
48 // if (incomplete <= 5 || (incomplete <= 10 && incomplete * 3 < total) )
49 if (incomplete <= 10 && incomplete * 3 < total ) {
50 downloadIncomplete(relation);
51 } else {
52 downloadMembers(relation);
53 }
54 }
55
56 @Override
57 public void chosenRelationChanged(Relation oldRelation, Relation newRelation) {
58 boolean incomplete = false;
59 if (newRelation != null) {
60 for (RelationMember m : newRelation.getMembers()) {
61 if (m.getMember().isIncomplete()) {
62 incomplete = true;
63 break;
64 }
65 }
66 }
67 setEnabled(newRelation != null && incomplete);
68 }
69
70 protected void downloadMembers(Relation rel) {
71 if (!rel.isNew()) {
72 Main.worker.submit(new DownloadRelationTask(Collections.singletonList(rel), Main.main.getEditLayer()));
73 }
74 }
75
76 protected void downloadIncomplete(Relation rel) {
77 if (rel.isNew() ) return;
78 Set<OsmPrimitive> ret = new HashSet<>();
79 ret.addAll(rel.getIncompleteMembers());
80 if (ret.isEmpty() ) return;
81 Main.worker.submit(new DownloadRelationMemberTask(Collections.singletonList(rel), ret, Main.main.getEditLayer()));
82 }
83}
Note: See TracBrowser for help on using the repository browser.