Changeset 36217 in osm for applications/editors/josm/plugins/reltoolbox/src/relcontext/relationfix/PublicTransportFixer.java
- Timestamp:
- 2024-03-03T10:25:25+01:00 (22 months ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
applications/editors/josm/plugins/reltoolbox/src/relcontext/relationfix/PublicTransportFixer.java
r36103 r36217 4 4 import static org.openstreetmap.josm.tools.I18n.tr; 5 5 6 import org.openstreetmap.josm.command.ChangeCommand; 6 import java.util.ArrayList; 7 import java.util.List; 8 9 import org.openstreetmap.josm.command.ChangeMembersCommand; 7 10 import org.openstreetmap.josm.command.Command; 8 11 import org.openstreetmap.josm.data.osm.DataSet; … … 11 14 import org.openstreetmap.josm.data.osm.RelationMember; 12 15 import org.openstreetmap.josm.gui.MainApplication; 16 import org.openstreetmap.josm.tools.Utils; 13 17 14 import org.openstreetmap.josm.tools.Utils;15 18 import relcontext.actions.PublicTransportHelper; 16 19 … … 26 29 } 27 30 28 /*protected PublicTransportFixer(String...types) {29 super(types);30 }*/31 32 31 @Override 33 32 public boolean isRelationGood(Relation rel) { 34 33 for (RelationMember m : rel.getMembers()) { 35 if (m.getType() .equals(OsmPrimitiveType.NODE)34 if (m.getType() == OsmPrimitiveType.NODE 36 35 && !(m.getRole().startsWith(PublicTransportHelper.STOP) || m.getRole().startsWith(PublicTransportHelper.PLATFORM))) { 37 36 setWarningMessage(tr("Node without ''stop'' or ''platform'' role found")); 38 37 return false; 39 38 } 40 if (m.getType() .equals(OsmPrimitiveType.WAY)39 if (m.getType() == OsmPrimitiveType.WAY 41 40 && PublicTransportHelper.isWayPlatform(m) 42 41 && !m.getRole().startsWith(PublicTransportHelper.PLATFORM)) { … … 49 48 } 50 49 51 /*@Override52 public boolean isFixerApplicable(Relation rel) {53 return true;54 }*/55 56 50 @Override 57 51 public Command fixRelation(Relation rel) { 58 Relation r = rel; 59 Relation rr = fixStopPlatformRole(r); 60 boolean fixed = false; 61 if (rr != null) { 62 fixed = true; 63 r = rr; 64 } 65 if (fixed) { 52 List<RelationMember> members = fixStopPlatformRole(rel.getMembers()); 53 if (!members.equals(rel.getMembers())) { 66 54 final DataSet ds = Utils.firstNonNull(rel.getDataSet(), MainApplication.getLayerManager().getEditDataSet()); 67 return new ChangeCommand(ds, rel, r); 55 return new ChangeMembersCommand(ds, rel, rel.getMembers()); 68 56 } 69 57 return null; 70 58 } 71 59 72 private Relation fixStopPlatformRole(Relation source) { 73 Relation r = new Relation(source); 74 boolean fixed = false; 75 for (int i = 0; i < r.getMembersCount(); i++) { 76 RelationMember m = r.getMember(i); 60 /** 61 * Fix roles of members. 62 * @param origMembers original list of relation members 63 * @return either the original and unmodified list or a new one with at least one new item 64 */ 65 private static List<RelationMember> fixStopPlatformRole(List<RelationMember> origMembers) { 66 List<RelationMember> members = origMembers; 67 for (int i = 0; i < members.size(); i++) { 68 RelationMember m = members.get(i); 77 69 String role = PublicTransportHelper.getRoleByMember(m); 78 70 79 71 if (role != null && !m.getRole().startsWith(role)) { 80 r.setMember(i, new RelationMember(role, m.getMember())); 81 fixed = true; 72 if (members == origMembers) { 73 members = new ArrayList<>(origMembers); 74 } 75 members.set(i, new RelationMember(role, m.getMember())); 82 76 } 83 77 } 84 return fixed ? r : null;78 return members; 85 79 } 86 80 }
Note:
See TracChangeset
for help on using the changeset viewer.
