Ignore:
Timestamp:
2011-01-27T21:18:27+01:00 (9 years ago)
Author:
bastiK
Message:

Separate styles from style generation. This may seem a little over the top, but its just an intermediate state of development, should make sense later. Regarding performance: execution time is the same, memory use is similar, or a little less (due to intern pool for StyleCache). Tested, but can have still some bugs.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/org/openstreetmap/josm/data/validation/tests/MultipolygonTest.java

    r3803 r3824  
    2626import org.openstreetmap.josm.gui.mappaint.ElemStyles;
    2727import org.openstreetmap.josm.gui.mappaint.MapPaintStyles;
     28import org.openstreetmap.josm.gui.mappaint.StyleCache;
     29import org.openstreetmap.josm.gui.mappaint.xml.AreaPrototype;
    2830
    2931public class MultipolygonTest extends Test {
     
    5355    public void initialize() throws Exception {
    5456        styles = MapPaintStyles.getStyles();
    55     }
     57}
    5658
    5759    private List<List<Node>> joinWays(Collection<Way> ways) {
     
    113115    public void visit(Way w) {
    114116        if (styles != null && !w.isClosed()) {
    115             ElemStyle e = styles.getArea(w);
    116             if (e instanceof AreaElemStyle && !((AreaElemStyle)e).closed) {
     117            AreaPrototype e = styles.getAreaProto(w);
     118            if (e != null && ! e.closed) {
    117119                errors.add( new TestError(this, Severity.WARNING, tr("Area style way is not closed"), NOT_CLOSED,  w));
    118120            }
     
    140142            List<List<Node>> innerWays = joinWays(polygon.getInnerWays()); // Side effect - sets nonClosedWays
    141143            List<List<Node>> outerWays = joinWays(polygon.getOuterWays());
    142 
    143144            if (styles != null) {
    144                 ElemStyle wayStyle = styles.get(r);
    145 
     145                StyleCache sc = styles.get(r);
     146
     147                AreaElemStyle area = null;
     148                for (ElemStyle s : sc.getStyles()) {
     149                    if (s instanceof AreaElemStyle) {
     150                        area = (AreaElemStyle) s;
     151                        break;
     152                    }
     153                }
    146154                // If area style was not found for relation then use style of ways
    147                 if (!(wayStyle instanceof AreaElemStyle)) {
     155                if (area == null) {
    148156                    errors.add( new TestError(this, Severity.OTHER, tr("No style in multipolygon relation"),
    149157                    NO_STYLE_POLYGON, r));
    150158                    for (Way w : polygon.getOuterWays()) {
    151                         wayStyle = styles.getArea(w);
    152                         if(wayStyle != null) {
     159
     160                        for (ElemStyle s : styles.getArea(w).getStyles()) {
     161                            if (s instanceof AreaElemStyle) {
     162                                area = (AreaElemStyle) s;
     163                                break;
     164                            }
     165                        }
     166                        if (area != null) {
    153167                            break;
    154168                        }
     
    156170                }
    157171
    158                 if (wayStyle instanceof AreaElemStyle) {
     172                if (area != null) {
    159173                    for (Way wInner : polygon.getInnerWays()) {
    160                         ElemStyle innerStyle = styles.get(wInner);
    161                         if (wayStyle != null && wayStyle.equals(innerStyle)) {
     174                        AreaElemStyle areaInner = null;
     175                        for (ElemStyle s : styles.get(wInner).getStyles()) {
     176                            if (s instanceof AreaElemStyle) {
     177                                areaInner = (AreaElemStyle) s;
     178                                break;
     179                            }
     180                        }
     181
     182                        if (areaInner != null && area.equals(areaInner)) {
    162183                            List<OsmPrimitive> l = new ArrayList<OsmPrimitive>();
    163184                            l.add(r);
     
    168189                    }
    169190                    for (Way wOuter : polygon.getOuterWays()) {
    170                         ElemStyle outerStyle = styles.get(wOuter);
    171                         if (outerStyle instanceof AreaElemStyle && !wayStyle.equals(outerStyle)) {
     191                        AreaElemStyle areaOuter = null;
     192                        for (ElemStyle s : styles.get(wOuter).getStyles()) {
     193                            if (s instanceof AreaElemStyle) {
     194                                areaOuter = (AreaElemStyle) s;
     195                                break;
     196                            }
     197                        }
     198                        if (areaOuter != null && !area.equals(areaOuter)) {
    172199                            List<OsmPrimitive> l = new ArrayList<OsmPrimitive>();
    173200                            l.add(r);
Note: See TracChangeset for help on using the changeset viewer.