Ticket #2643: linkedmembers2.diff

File linkedmembers2.diff, 3.9 KB (added by Teemu Koskinen <teemu.koskinen@…>, 16 years ago)

Updated patch

  • src/org/openstreetmap/josm/gui/dialogs/relation/GenericRelationEditor.java

     
    337337
    338338            RelationMember em = clone.members.get(i);
    339339            boolean linked = false;
    340             Node n1 = null;
    341             Node n2 = null;
    342340            RelationMember m = em;
     341            RelationMember way1 = null;
     342            RelationMember way2 = null;
     343
    343344            while (m != null) {
    344345                if (m.member instanceof Way) {
    345                     n1 = ((Way) m.member).lastNode();
     346                    way1 = m;
    346347                    break;
    347348                } else if (m.member instanceof Relation) {
    348349                    m = ((Relation)m.member).lastMember();
     
    350351                    break;
    351352                }
    352353            }
    353             if (i<clone.members.size()-1) {
    354                 m = clone.members.get(i+1);
    355                 while (m != null) {
    356                     if (m.member instanceof Way) {
    357                         n2 = ((Way) (m.member)).firstNode();
    358                         break;
    359                     } else if (m.member instanceof Relation) {
    360                         m = ((Relation)(m.member)).firstMember();
    361                     } else {
    362                         break;
     354            if (way1 != null) {
     355                int next = i+1;
     356                while (next < clone.members.size()) {
     357                    m = clone.members.get(next++);
     358                    while (m != null) {
     359                        if (m.member instanceof Way) {
     360                            way2 = m;
     361                            break;
     362                        } else if (m.member instanceof Relation) {
     363                            m = ((Relation)(m.member)).firstMember();
     364                        } else {
     365                            break;
     366                        }
    363367                    }
     368                    if (way2 != null)
     369                            break;
     370                    }
     371            }
     372
     373            if (way2 != null) {
     374                Node way1first = ((Way)(way1.member)).firstNode();
     375                Node way1last = ((Way)(way1.member)).lastNode();
     376                Node way2first = ((Way)(way2.member)).firstNode();
     377                Node way2last = ((Way)(way2.member)).lastNode();
     378                if (way1.role.equals("forward")) {
     379                    way1first = null;
     380                } else if (way1.role.equals("backward")) {
     381                    way1last = null;
    364382                }
     383                if (way2.role.equals("forward")) {
     384                    way2last = null;
     385                } else if (way2.role.equals("backward")) {
     386                    way2first = null;
     387                }
     388
     389                if (way1first != null && way2first != null && way1first.equals(way2first)) {
     390                    linked = true;
     391                } else if (way1first != null && way2last != null && way1first.equals(way2last)) {
     392                    linked = true;
     393                } else if (way1last != null && way2first != null && way1last.equals(way2first)) {
     394                    linked = true;
     395                } else if (way1last != null && way2last != null && way1last.equals(way2last)) {
     396                    linked = true;
     397                }
     398
     399                memberData.addRow(new Object[]{em.role, em.member, linked ? tr("yes") : tr("no")});
     400            } else {
     401                memberData.addRow(new Object[]{em.role, em.member, ""});
    365402            }
    366             linked = (n1 != null) && n1.equals(n2);
    367403
    368404            // end of section to determine linkedness.
    369 
    370             memberData.addRow(new Object[]{em.role, em.member, linked ? tr("yes") : tr("no")});
    371405        }
    372406        status.setText(tr("Members: {0}", clone.members.size()));
    373407    }