Changeset 13810 in josm for trunk/src/org


Ignore:
Timestamp:
2018-05-21T20:42:27+02:00 (6 years ago)
Author:
Don-vip
Message:

support rendering of IPrimitive

Location:
trunk/src/org/openstreetmap/josm
Files:
13 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/org/openstreetmap/josm/data/osm/visitor/paint/AbstractMapRenderer.java

    r13673 r13810  
    1010
    1111import org.openstreetmap.josm.data.osm.BBox;
    12 import org.openstreetmap.josm.data.osm.DataSet;
    1312import org.openstreetmap.josm.data.osm.INode;
    14 import org.openstreetmap.josm.data.osm.Node;
    15 import org.openstreetmap.josm.data.osm.Way;
     13import org.openstreetmap.josm.data.osm.IWay;
     14import org.openstreetmap.josm.data.osm.OsmData;
    1615import org.openstreetmap.josm.data.osm.WaySegment;
    1716import org.openstreetmap.josm.gui.MapViewState;
     
    127126     * @param data The data set being rendered.
    128127     * @param bbox The bounding box being displayed.
    129      */
    130     public void drawVirtualNodes(DataSet data, BBox bbox) {
     128     * @since 13810 (signature)
     129     */
     130    public void drawVirtualNodes(OsmData<?, ?, ?, ?> data, BBox bbox) {
    131131        if (virtualNodeSize == 0 || data == null || bbox == null || data.isLocked())
    132132            return;
    133133        // print normal virtual nodes
    134134        GeneralPath path = new GeneralPath();
    135         for (Way osm : data.searchWays(bbox)) {
     135        for (IWay<?> osm : data.searchWays(bbox)) {
    136136            if (osm.isUsable() && !osm.isDisabledAndHidden() && !osm.isDisabled()) {
    137137                visitVirtual(path, osm);
     
    222222     * @param w The ways to draw node for.
    223223     * @since 10827
    224      */
    225     public void visitVirtual(Path2D path, Way w) {
    226         Iterator<Node> it = w.getNodes().iterator();
     224     * @since 13810 (signature)
     225     */
     226    public void visitVirtual(Path2D path, IWay<?> w) {
     227        Iterator<? extends INode> it = w.getNodes().iterator();
    227228        MapViewPoint lastP = null;
    228229        while (it.hasNext()) {
    229             Node n = it.next();
     230            INode n = it.next();
    230231            if (n.isLatLonKnown()) {
    231232                MapViewPoint p = mapState.getPointFor(n);
  • trunk/src/org/openstreetmap/josm/data/osm/visitor/paint/ComputeStyleListWorker.java

    r12964 r13810  
    88import java.util.concurrent.RecursiveTask;
    99
    10 import org.openstreetmap.josm.data.osm.Node;
    11 import org.openstreetmap.josm.data.osm.OsmPrimitive;
    12 import org.openstreetmap.josm.data.osm.Relation;
    13 import org.openstreetmap.josm.data.osm.Way;
    14 import org.openstreetmap.josm.data.osm.visitor.OsmPrimitiveVisitor;
     10import org.openstreetmap.josm.data.osm.INode;
     11import org.openstreetmap.josm.data.osm.IPrimitive;
     12import org.openstreetmap.josm.data.osm.IRelation;
     13import org.openstreetmap.josm.data.osm.IWay;
     14import org.openstreetmap.josm.data.osm.visitor.PrimitiveVisitor;
    1515import org.openstreetmap.josm.data.osm.visitor.paint.StyledMapRenderer.StyleRecord;
    1616import org.openstreetmap.josm.gui.NavigatableComponent;
     
    3232 * @since 11914 (extracted from StyledMapRenderer)
    3333 */
    34 public class ComputeStyleListWorker extends RecursiveTask<List<StyleRecord>> implements OsmPrimitiveVisitor {
    35     private final transient List<? extends OsmPrimitive> input;
     34public class ComputeStyleListWorker extends RecursiveTask<List<StyleRecord>> implements PrimitiveVisitor {
     35    private final transient List<? extends IPrimitive> input;
    3636    private final transient List<StyleRecord> output;
    3737
     
    5252     * @param output the list of styles to which styles will be added
    5353     * @param directExecutionTaskSize the threshold deciding whether to subdivide the tasks
     54     * @since 13810 (signature)
    5455     */
    5556    ComputeStyleListWorker(double circum, NavigatableComponent nc,
    56             final List<? extends OsmPrimitive> input, List<StyleRecord> output, int directExecutionTaskSize) {
     57            final List<? extends IPrimitive> input, List<StyleRecord> output, int directExecutionTaskSize) {
    5758        this(circum, nc, input, output, directExecutionTaskSize, MapPaintStyles.getStyles());
    5859    }
     
    6768     * @param styles the {@link ElemStyles} instance used to generate primitive {@link StyleElement}s.
    6869     * @since 12964
     70     * @since 13810 (signature)
    6971     */
    7072    ComputeStyleListWorker(double circum, NavigatableComponent nc,
    71             final List<? extends OsmPrimitive> input, List<StyleRecord> output, int directExecutionTaskSize,
     73            final List<? extends IPrimitive> input, List<StyleRecord> output, int directExecutionTaskSize,
    7274            ElemStyles styles) {
    7375        this.circum = circum;
     
    108110        MapCSSStyleSource.STYLE_SOURCE_LOCK.readLock().lock();
    109111        try {
    110             for (final OsmPrimitive osm : input) {
     112            for (final IPrimitive osm : input) {
    111113                acceptDrawable(osm);
    112114            }
     
    119121    }
    120122
    121     private void acceptDrawable(final OsmPrimitive osm) {
     123    private void acceptDrawable(final IPrimitive osm) {
    122124        try {
    123125            if (osm.isDrawable()) {
     
    130132
    131133    @Override
    132     public void visit(Node n) {
     134    public void visit(INode n) {
    133135        add(n, StyledMapRenderer.computeFlags(n, false));
    134136    }
    135137
    136138    @Override
    137     public void visit(Way w) {
     139    public void visit(IWay<?> w) {
    138140        add(w, StyledMapRenderer.computeFlags(w, true));
    139141    }
    140142
    141143    @Override
    142     public void visit(Relation r) {
     144    public void visit(IRelation<?> r) {
    143145        add(r, StyledMapRenderer.computeFlags(r, true));
    144146    }
     
    148150     * @param osm node
    149151     * @param flags flags
     152     * @since 13810 (signature)
    150153     */
    151     public void add(Node osm, int flags) {
     154    public void add(INode osm, int flags) {
    152155        StyleElementList sl = styles.get(osm, circum, nc);
    153156        for (StyleElement s : sl) {
     
    160163     * @param osm way
    161164     * @param flags flags
     165     * @since 13810 (signature)
    162166     */
    163     public void add(Way osm, int flags) {
     167    public void add(IWay<?> osm, int flags) {
    164168        StyleElementList sl = styles.get(osm, circum, nc);
    165169        for (StyleElement s : sl) {
     
    174178     * @param osm relation
    175179     * @param flags flags
     180     * @since 13810 (signature)
    176181     */
    177     public void add(Relation osm, int flags) {
     182    public void add(IRelation<?> osm, int flags) {
    178183        StyleElementList sl = styles.get(osm, circum, nc);
    179184        for (StyleElement s : sl) {
  • trunk/src/org/openstreetmap/josm/data/osm/visitor/paint/Rendering.java

    r10600 r13810  
    33
    44import org.openstreetmap.josm.data.Bounds;
    5 import org.openstreetmap.josm.data.osm.DataSet;
     5import org.openstreetmap.josm.data.osm.OsmData;
    66
    77/**
    8  * <p>An object which can render data provided by a {@link DataSet}.</p>
     8 * <p>An object which can render data provided by a {@link OsmData}.</p>
    99 * @since  4087 (creation)
    1010 * @since 10600 (functional interface)
     
    1919     * @param bbox the bounding box for the data to be rendered. Only objects within or intersecting
    2020     * with {@code bbox} are rendered
     21     * @since 13810 (signature)
    2122     */
    22     void render(DataSet data, boolean renderVirtualNodes, Bounds bbox);
     23    void render(OsmData<?, ?, ?, ?> data, boolean renderVirtualNodes, Bounds bbox);
    2324}
  • trunk/src/org/openstreetmap/josm/data/osm/visitor/paint/StyledMapRenderer.java

    r13676 r13810  
    4646import org.openstreetmap.josm.data.coor.EastNorth;
    4747import org.openstreetmap.josm.data.osm.BBox;
    48 import org.openstreetmap.josm.data.osm.DataSet;
    4948import org.openstreetmap.josm.data.osm.INode;
    5049import org.openstreetmap.josm.data.osm.IPrimitive;
     50import org.openstreetmap.josm.data.osm.IRelation;
     51import org.openstreetmap.josm.data.osm.IWay;
    5152import org.openstreetmap.josm.data.osm.Node;
     53import org.openstreetmap.josm.data.osm.OsmData;
    5254import org.openstreetmap.josm.data.osm.OsmPrimitive;
    5355import org.openstreetmap.josm.data.osm.OsmUtils;
     
    113115    public static class StyleRecord implements Comparable<StyleRecord> {
    114116        private final StyleElement style;
    115         private final OsmPrimitive osm;
     117        private final IPrimitive osm;
    116118        private final int flags;
    117119        private final long order;
    118120
    119         StyleRecord(StyleElement style, OsmPrimitive osm, int flags) {
     121        StyleRecord(StyleElement style, IPrimitive osm, int flags) {
    120122            this.style = style;
    121123            this.osm = osm;
     
    15871589
    15881590    @Override
    1589     public void render(final DataSet data, boolean renderVirtualNodes, Bounds bounds) {
     1591    public void render(final OsmData<?, ?, ?, ?> data, boolean renderVirtualNodes, Bounds bounds) {
    15901592        RenderBenchmarkCollector benchmark = benchmarkFactory.get();
    15911593        BBox bbox = bounds.toBBox();
     
    16071609    }
    16081610
    1609     private void paintWithLock(final DataSet data, boolean renderVirtualNodes, RenderBenchmarkCollector benchmark,
     1611    private void paintWithLock(final OsmData<?, ?, ?, ?> data, boolean renderVirtualNodes, RenderBenchmarkCollector benchmark,
    16101612            BBox bbox) {
    16111613        try {
     
    16141616            benchmark.renderStart(circum);
    16151617
    1616             List<Node> nodes = data.searchNodes(bbox);
    1617             List<Way> ways = data.searchWays(bbox);
    1618             List<Relation> relations = data.searchRelations(bbox);
     1618            List<? extends INode> nodes = data.searchNodes(bbox);
     1619            List<? extends IWay<?>> ways = data.searchWays(bbox);
     1620            List<? extends IRelation<?>> relations = data.searchRelations(bbox);
    16191621
    16201622            final List<StyleRecord> allStyleElems = new ArrayList<>(nodes.size()+ways.size()+relations.size());
  • trunk/src/org/openstreetmap/josm/data/osm/visitor/paint/WireframeMapRenderer.java

    r13673 r13810  
    1818import org.openstreetmap.josm.data.Bounds;
    1919import org.openstreetmap.josm.data.osm.BBox;
    20 import org.openstreetmap.josm.data.osm.DataSet;
    2120import org.openstreetmap.josm.data.osm.INode;
    22 import org.openstreetmap.josm.data.osm.Node;
    23 import org.openstreetmap.josm.data.osm.OsmPrimitive;
    24 import org.openstreetmap.josm.data.osm.Relation;
    25 import org.openstreetmap.josm.data.osm.RelationMember;
    26 import org.openstreetmap.josm.data.osm.Way;
     21import org.openstreetmap.josm.data.osm.IPrimitive;
     22import org.openstreetmap.josm.data.osm.IRelation;
     23import org.openstreetmap.josm.data.osm.IRelationMember;
     24import org.openstreetmap.josm.data.osm.IWay;
     25import org.openstreetmap.josm.data.osm.OsmData;
    2726import org.openstreetmap.josm.data.osm.WaySegment;
    28 import org.openstreetmap.josm.data.osm.visitor.OsmPrimitiveVisitor;
     27import org.openstreetmap.josm.data.osm.visitor.PrimitiveVisitor;
    2928import org.openstreetmap.josm.gui.MapViewState.MapViewPoint;
    3029import org.openstreetmap.josm.gui.MapViewState.MapViewRectangle;
     
    3938 * @since 23
    4039 */
    41 public class WireframeMapRenderer extends AbstractMapRenderer implements OsmPrimitiveVisitor {
     40public class WireframeMapRenderer extends AbstractMapRenderer implements PrimitiveVisitor {
    4241
    4342    /** Color Preference for ways not matching any other group */
     
    8483    /** Path store to draw subsequent segments of same color as one <code>Path</code>. */
    8584    protected MapPath2D currentPath = new MapPath2D();
    86     /**
    87       * <code>DataSet</code> passed to the @{link render} function to overcome the argument
    88       * limitations of @{link Visitor} interface. Only valid until end of rendering call.
    89       */
    90     private DataSet ds;
    9185
    9286    /** Helper variable for {@link #drawSegment} */
    9387    private static final ArrowPaintHelper ARROW_PAINT_HELPER = new ArrowPaintHelper(Utils.toRadians(20), 10);
    9488
    95     /** Helper variable for {@link #visit(Relation)} */
     89    /** Helper variable for {@link #visit(IRelation)} */
    9690    private final Stroke relatedWayStroke = new BasicStroke(
    9791            4, BasicStroke.CAP_SQUARE, BasicStroke.JOIN_BEVEL);
     
    153147
    154148    @Override
    155     public void render(DataSet data, boolean virtual, Bounds bounds) {
     149    public void render(OsmData<?, ?, ?, ?> data, boolean virtual, Bounds bounds) {
    156150        BBox bbox = bounds.toBBox();
    157         this.ds = data;
    158151        Rectangle clip = g.getClipBounds();
    159152        clip.grow(50, 50);
     
    161154        getSettings(virtual);
    162155
    163         for (final Relation rel : data.searchRelations(bbox)) {
    164             if (rel.isDrawable() && !ds.isSelected(rel) && !rel.isDisabledAndHidden()) {
     156        for (final IRelation<?> rel : data.searchRelations(bbox)) {
     157            if (rel.isDrawable() && !rel.isSelected() && !rel.isDisabledAndHidden()) {
    165158                rel.accept(this);
    166159            }
     
    168161
    169162        // draw tagged ways first, then untagged ways, then highlighted ways
    170         List<Way> highlightedWays = new ArrayList<>();
    171         List<Way> untaggedWays = new ArrayList<>();
    172 
    173         for (final Way way : data.searchWays(bbox)) {
    174             if (way.isDrawable() && !ds.isSelected(way) && !way.isDisabledAndHidden()) {
     163        List<IWay<?>> highlightedWays = new ArrayList<>();
     164        List<IWay<?>> untaggedWays = new ArrayList<>();
     165
     166        for (final IWay<?> way : data.searchWays(bbox)) {
     167            if (way.isDrawable() && !way.isSelected() && !way.isDisabledAndHidden()) {
    175168                if (way.isHighlighted()) {
    176169                    highlightedWays.add(way);
     
    185178
    186179        // Display highlighted ways after the other ones (fix #8276)
    187         List<Way> specialWays = new ArrayList<>(untaggedWays);
     180        List<IWay<?>> specialWays = new ArrayList<>(untaggedWays);
    188181        specialWays.addAll(highlightedWays);
    189         for (final Way way : specialWays) {
     182        for (final IWay<?> way : specialWays) {
    190183            way.accept(this);
    191184        }
     
    193186        displaySegments();
    194187
    195         for (final OsmPrimitive osm : data.getSelected()) {
     188        for (final IPrimitive osm : data.getSelected()) {
    196189            if (osm.isDrawable()) {
    197190                osm.accept(this);
     
    200193        displaySegments();
    201194
    202         for (final OsmPrimitive osm: data.searchNodes(bbox)) {
    203             if (osm.isDrawable() && !ds.isSelected(osm) && !osm.isDisabledAndHidden()) {
     195        for (final INode osm: data.searchNodes(bbox)) {
     196            if (osm.isDrawable() && !osm.isSelected() && !osm.isDisabledAndHidden()) {
    204197                osm.accept(this);
    205198            }
     
    237230     */
    238231    @Override
    239     public void visit(Node n) {
     232    public void visit(INode n) {
    240233        if (n.isIncomplete()) return;
    241234
     
    265258            }
    266259
    267             final int size = max(ds.isSelected(n) ? selectedNodeSize : 0,
     260            final int size = max(n.isSelected() ? selectedNodeSize : 0,
    268261                    isNodeTagged(n) ? taggedNodeSize : 0,
    269262                    n.isConnectionNode() ? connectionNodeSize : 0,
    270263                    unselectedNodeSize);
    271264
    272             final boolean fill = (ds.isSelected(n) && fillSelectedNode) ||
     265            final boolean fill = (n.isSelected() && fillSelectedNode) ||
    273266            (isNodeTagged(n) && fillTaggedNode) ||
    274267            (n.isConnectionNode() && fillConnectionNode) ||
     
    279272    }
    280273
    281     private static boolean isNodeTagged(Node n) {
     274    private static boolean isNodeTagged(INode n) {
    282275        return n.isTagged() || n.isAnnotated();
    283276    }
     
    288281     */
    289282    @Override
    290     public void visit(Way w) {
     283    public void visit(IWay<?> w) {
    291284        if (w.isIncomplete() || w.getNodesCount() < 2)
    292285            return;
     
    295288           (even if the tag is negated as in oneway=false) or the way is selected */
    296289
    297         boolean showThisDirectionArrow = ds.isSelected(w) || showDirectionArrow;
     290        boolean showThisDirectionArrow = w.isSelected() || showDirectionArrow;
    298291        /* head only takes over control if the option is true,
    299292           the direction should be shown at all and not only because it's selected */
    300         boolean showOnlyHeadArrowOnly = showThisDirectionArrow && showHeadArrowOnly && !ds.isSelected(w);
     293        boolean showOnlyHeadArrowOnly = showThisDirectionArrow && showHeadArrowOnly && !w.isSelected();
    301294        Color wayColor;
    302295
     
    315308        }
    316309
    317         Iterator<Node> it = w.getNodes().iterator();
     310        Iterator<? extends INode> it = w.getNodes().iterator();
    318311        if (it.hasNext()) {
    319312            MapViewPoint lastP = mapState.getPointFor(it.next());
     
    340333     */
    341334    @Override
    342     public void visit(Relation r) {
     335    public void visit(IRelation<?> r) {
    343336        if (r.isIncomplete()) return;
    344337
     
    355348        g.setColor(col);
    356349
    357         for (RelationMember m : r.getMembers()) {
     350        for (IRelationMember<?> m : r.getMembers()) {
    358351            if (m.getMember().isIncomplete() || !m.getMember().isDrawable()) {
    359352                continue;
     
    361354
    362355            if (m.isNode()) {
    363                 MapViewPoint p = mapState.getPointFor(m.getNode());
     356                MapViewPoint p = mapState.getPointFor((INode) m.getMember());
    364357                if (p.isInView()) {
    365358                    g.draw(new Ellipse2D.Double(p.getInViewX()-4, p.getInViewY()-4, 9, 9));
     
    370363
    371364                boolean first = true;
    372                 for (Node n : m.getWay().getNodes()) {
     365                for (INode n : ((IWay<?>) m.getMember()).getNodes()) {
    373366                    if (!n.isDrawable()) {
    374367                        continue;
  • trunk/src/org/openstreetmap/josm/data/validation/tests/MapCSSTagChecker.java

    r13633 r13810  
    582582                final String description2 = group == null ? null : description;
    583583                final List<OsmPrimitive> primitives;
    584                 if (env.child != null) {
    585                     primitives = Arrays.asList(p, env.child);
     584                if (env.child instanceof OsmPrimitive) {
     585                    primitives = Arrays.asList(p, (OsmPrimitive) env.child);
    586586                } else {
    587587                    primitives = Collections.singletonList(p);
  • trunk/src/org/openstreetmap/josm/gui/mappaint/ElemStyles.java

    r13636 r13810  
    1212import java.util.Optional;
    1313
     14import org.openstreetmap.josm.data.osm.IPrimitive;
    1415import org.openstreetmap.josm.data.osm.Node;
    15 import org.openstreetmap.josm.data.osm.OsmPrimitive;
    1616import org.openstreetmap.josm.data.osm.Relation;
    1717import org.openstreetmap.josm.data.osm.Way;
     
    4545 * There are several steps to derive the list of elements for display:
    4646 * <ol>
    47  * <li>{@link #generateStyles(OsmPrimitive, double, boolean)} applies the
     47 * <li>{@link #generateStyles(IPrimitive, double, boolean)} applies the
    4848 * {@link StyleSource}s one after another to get a key-value map of MapCSS
    4949 * properties. Then a preliminary set of StyleElements is derived from the
    5050 * properties map.</li>
    51  * <li>{@link #getImpl(OsmPrimitive, double, NavigatableComponent)} handles the
     51 * <li>{@link #getImpl(IPrimitive, double, NavigatableComponent)} handles the
    5252 * different forms of multipolygon tagging.</li>
    53  * <li>{@link #getStyleCacheWithRange(OsmPrimitive, double, NavigatableComponent)}
     53 * <li>{@link #getStyleCacheWithRange(IPrimitive, double, NavigatableComponent)}
    5454 * adds a default StyleElement for primitives that would be invisible otherwise.
    5555 * (For example untagged nodes and ways.)</li>
     
    131131     * @param nc display component
    132132     * @return list of styles
    133      */
    134     public StyleElementList get(OsmPrimitive osm, double scale, NavigatableComponent nc) {
     133     * @since 13810 (signature)
     134     */
     135    public StyleElementList get(IPrimitive osm, double scale, NavigatableComponent nc) {
    135136        return getStyleCacheWithRange(osm, scale, nc).a;
    136137    }
     
    145146     * @param nc navigatable component
    146147     * @return pair containing style list and range
    147      */
    148     public Pair<StyleElementList, Range> getStyleCacheWithRange(OsmPrimitive osm, double scale, NavigatableComponent nc) {
     148     * @since 13810 (signature)
     149     */
     150    public Pair<StyleElementList, Range> getStyleCacheWithRange(IPrimitive osm, double scale, NavigatableComponent nc) {
    149151        if (!osm.isCachedStyleUpToDate() || scale <= 0) {
    150152            osm.setCachedStyle(StyleCache.EMPTY_STYLECACHE);
     
    232234     * @return pair containing style list and range
    233235     */
    234     private Pair<StyleElementList, Range> getImpl(OsmPrimitive osm, double scale, NavigatableComponent nc) {
     236    private Pair<StyleElementList, Range> getImpl(IPrimitive osm, double scale, NavigatableComponent nc) {
    235237        if (osm instanceof Node)
    236238            return generateStyles(osm, scale, false);
     
    242244
    243245            // FIXME: Maybe in the future outer way styles apply to outers ignoring the multipolygon?
    244             for (OsmPrimitive referrer : osm.getReferrers()) {
     246            for (IPrimitive referrer : osm.getReferrers()) {
    245247                Relation r = (Relation) referrer;
    246248                if (!drawMultipolygon || !r.isMultipolygon() || !r.isUsable()) {
     
    310312            if (!isDefaultLines()) return p;
    311313
    312             for (OsmPrimitive referrer : osm.getReferrers()) {
     314            for (IPrimitive referrer : osm.getReferrers()) {
    313315                Relation ref = (Relation) referrer;
    314316                if (!drawMultipolygon || !ref.isMultipolygon() || !ref.isUsable()) {
     
    362364     * outer ways of a multipolygon.
    363365     * @return the generated styles and the valid range as a pair
    364      */
    365     public Pair<StyleElementList, Range> generateStyles(OsmPrimitive osm, double scale, boolean pretendWayIsClosed) {
     366     * @since 13810 (signature)
     367     */
     368    public Pair<StyleElementList, Range> generateStyles(IPrimitive osm, double scale, boolean pretendWayIsClosed) {
    366369
    367370        List<StyleElement> sl = new ArrayList<>();
     
    522525     * outer ways of a multipolygon.
    523526     * @return first AreaElement found or {@code null}.
    524      */
    525     public static AreaElement getAreaElemStyle(OsmPrimitive p, boolean pretendWayIsClosed) {
     527     * @since 13810 (signature)
     528     */
     529    public static AreaElement getAreaElemStyle(IPrimitive p, boolean pretendWayIsClosed) {
    526530        MapCSSStyleSource.STYLE_SOURCE_LOCK.readLock().lock();
    527531        try {
     
    545549     * outer ways of a multipolygon.
    546550     * @return {@code true} if primitive has an AreaElement
    547      */
    548     public static boolean hasAreaElemStyle(OsmPrimitive p, boolean pretendWayIsClosed) {
     551     * @since 13810 (signature)
     552     */
     553    public static boolean hasAreaElemStyle(IPrimitive p, boolean pretendWayIsClosed) {
    549554        return getAreaElemStyle(p, pretendWayIsClosed) != null;
    550555    }
     
    558563     * @return {@code true} if primitive has area elements, but no line elements
    559564     * @since 12700
    560      */
    561     public static boolean hasOnlyAreaElements(OsmPrimitive p) {
     565     * @since 13810 (signature)
     566     */
     567    public static boolean hasOnlyAreaElements(IPrimitive p) {
    562568        MapCSSStyleSource.STYLE_SOURCE_LOCK.readLock().lock();
    563569        try {
  • trunk/src/org/openstreetmap/josm/gui/mappaint/Environment.java

    r12378 r13810  
    22package org.openstreetmap.josm.gui.mappaint;
    33
    4 import org.openstreetmap.josm.data.osm.OsmPrimitive;
     4import org.openstreetmap.josm.data.osm.IPrimitive;
    55import org.openstreetmap.josm.data.osm.Relation;
    66import org.openstreetmap.josm.gui.mappaint.mapcss.Condition.Context;
     
    1818     * The primitive that is currently evaluated
    1919     */
    20     public OsmPrimitive osm;
     20    public IPrimitive osm;
    2121
    2222    /**
     
    4343     * is evaluated in a {@link LinkSelector} (within a child selector)
    4444     */
    45     public OsmPrimitive parent;
     45    public IPrimitive parent;
    4646
    4747    /**
    4848     * The same for parent selector. Only one of the 2 fields (parent or child) is not null in any environment.
    4949     */
    50     public OsmPrimitive child;
     50    public IPrimitive child;
    5151
    5252    /**
     
    7171     * @param osm OSM primitive
    7272     * @since 8415
    73      */
    74     public Environment(OsmPrimitive osm) {
     73     * @since 13810 (signature)
     74     */
     75    public Environment(IPrimitive osm) {
    7576        this.osm = osm;
    7677    }
     
    8283     * @param layer layer
    8384     * @param source style source
    84      */
    85     public Environment(OsmPrimitive osm, MultiCascade mc, String layer, StyleSource source) {
     85     * @since 13810 (signature)
     86     */
     87    public Environment(IPrimitive osm, MultiCascade mc, String layer, StyleSource source) {
    8688        this.osm = osm;
    8789        this.mc = mc;
     
    114116     * @return A clone of this environment, with the specified primitive
    115117     * @see #osm
    116      */
    117     public Environment withPrimitive(OsmPrimitive osm) {
     118     * @since 13810 (signature)
     119     */
     120    public Environment withPrimitive(IPrimitive osm) {
    118121        Environment e = new Environment(this);
    119122        e.osm = osm;
     
    126129     * @return A clone of this environment, with the specified parent
    127130     * @see #parent
    128      */
    129     public Environment withParent(OsmPrimitive parent) {
     131     * @since 13810 (signature)
     132     */
     133    public Environment withParent(IPrimitive parent) {
    130134        Environment e = new Environment(this);
    131135        e.parent = parent;
     
    142146     * @see #index
    143147     * @since 6175
    144      */
    145     public Environment withParentAndIndexAndLinkContext(OsmPrimitive parent, int index, int count) {
     148     * @since 13810 (signature)
     149     */
     150    public Environment withParentAndIndexAndLinkContext(IPrimitive parent, int index, int count) {
    146151        Environment e = new Environment(this);
    147152        e.parent = parent;
     
    157162     * @return A clone of this environment, with the specified child
    158163     * @see #child
    159      */
    160     public Environment withChild(OsmPrimitive child) {
     164     * @since 13810 (signature)
     165     */
     166    public Environment withChild(IPrimitive child) {
    161167        Environment e = new Environment(this);
    162168        e.child = child;
     
    173179     * @see #index
    174180     * @since 6175
    175      */
    176     public Environment withChildAndIndexAndLinkContext(OsmPrimitive child, int index, int count) {
     181     * @since 13810 (signature)
     182     */
     183    public Environment withChildAndIndexAndLinkContext(IPrimitive child, int index, int count) {
    177184        Environment e = new Environment(this);
    178185        e.child = child;
  • trunk/src/org/openstreetmap/josm/gui/mappaint/StyleSource.java

    r13647 r13810  
    2020import javax.swing.ImageIcon;
    2121
    22 import org.openstreetmap.josm.data.osm.OsmPrimitive;
     22import org.openstreetmap.josm.data.osm.IPrimitive;
    2323import org.openstreetmap.josm.data.preferences.sources.SourceEntry;
    2424import org.openstreetmap.josm.data.preferences.sources.SourceType;
     
    9494     * we pretend it is. This is useful for generating area styles from the (segmented)
    9595     * outer ways of a multipolygon.
    96      */
    97     public abstract void apply(MultiCascade mc, OsmPrimitive osm, double scale, boolean pretendWayIsClosed);
     96     * @since 13810 (signature)
     97     */
     98    public abstract void apply(MultiCascade mc, IPrimitive osm, double scale, boolean pretendWayIsClosed);
    9899
    99100    /**
  • trunk/src/org/openstreetmap/josm/gui/mappaint/mapcss/ConditionFactory.java

    r13046 r13810  
    1515import java.util.regex.PatternSyntaxException;
    1616
     17import org.openstreetmap.josm.data.osm.IPrimitive;
    1718import org.openstreetmap.josm.data.osm.Node;
    1819import org.openstreetmap.josm.data.osm.OsmPrimitive;
     
    681682         * @param e MapCSS environment
    682683         * @return {@code true} if the object has an area style
    683          * @see ElemStyles#hasAreaElemStyle(OsmPrimitive, boolean)
     684         * @see ElemStyles#hasAreaElemStyle(IPrimitive, boolean)
    684685         */
    685686        static boolean areaStyle(Environment e) { // NO_UCD (unused code)
     
    749750         */
    750751        static boolean inDownloadedArea(Environment e) { // NO_UCD (unused code)
    751             return IN_DOWNLOADED_AREA.test(e.osm);
     752            return e.osm instanceof OsmPrimitive && IN_DOWNLOADED_AREA.test((OsmPrimitive) e.osm);
    752753        }
    753754
  • trunk/src/org/openstreetmap/josm/gui/mappaint/mapcss/ExpressionFactory.java

    r13640 r13810  
    460460                if (env.osm != null) {
    461461                    // we don't have a matched parent, so just search all referrers
    462                     for (OsmPrimitive parent : env.osm.getReferrers()) {
     462                    for (IPrimitive parent : env.osm.getReferrers()) {
    463463                        String value = parent.get(key);
    464464                        if (value != null) {
     
    485485                    final Collection<String> tags = new TreeSet<>(AlphanumComparator.getInstance());
    486486                    // we don't have a matched parent, so just search all referrers
    487                     for (OsmPrimitive parent : env.osm.getReferrers()) {
     487                    for (IPrimitive parent : env.osm.getReferrers()) {
    488488                        String value = parent.get(key);
    489489                        if (value != null) {
  • trunk/src/org/openstreetmap/josm/gui/mappaint/mapcss/MapCSSStyleSource.java

    r13800 r13810  
    3030
    3131import org.openstreetmap.josm.data.Version;
     32import org.openstreetmap.josm.data.osm.IPrimitive;
    3233import org.openstreetmap.josm.data.osm.KeyValueVisitor;
    3334import org.openstreetmap.josm.data.osm.Node;
     
    357358         * @param osm the primitive to match
    358359         * @return An iterator over possible rules in the right order.
    359          */
    360         public Iterator<MapCSSRule> getRuleCandidates(OsmPrimitive osm) {
     360         * @since 13810 (signature)
     361         */
     362        public Iterator<MapCSSRule> getRuleCandidates(IPrimitive osm) {
    361363            final BitSet ruleCandidates = new BitSet(rules.size());
    362364            ruleCandidates.or(remaining);
     
    638640
    639641    @Override
    640     public void apply(MultiCascade mc, OsmPrimitive osm, double scale, boolean pretendWayIsClosed) {
     642    public void apply(MultiCascade mc, IPrimitive osm, double scale, boolean pretendWayIsClosed) {
    641643        MapCSSRuleIndex matchingRuleIndex;
    642644        if (osm instanceof Node) {
  • trunk/src/org/openstreetmap/josm/gui/mappaint/mapcss/Selector.java

    r12986 r13810  
    1414import java.util.regex.PatternSyntaxException;
    1515
     16import org.openstreetmap.josm.data.osm.INode;
     17import org.openstreetmap.josm.data.osm.IPrimitive;
     18import org.openstreetmap.josm.data.osm.IRelation;
     19import org.openstreetmap.josm.data.osm.IRelationMember;
     20import org.openstreetmap.josm.data.osm.IWay;
    1621import org.openstreetmap.josm.data.osm.Node;
    1722import org.openstreetmap.josm.data.osm.OsmPrimitive;
     
    1924import org.openstreetmap.josm.data.osm.OsmUtils;
    2025import org.openstreetmap.josm.data.osm.Relation;
    21 import org.openstreetmap.josm.data.osm.RelationMember;
    2226import org.openstreetmap.josm.data.osm.Way;
    23 import org.openstreetmap.josm.data.osm.visitor.OsmPrimitiveVisitor;
     27import org.openstreetmap.josm.data.osm.visitor.PrimitiveVisitor;
    2428import org.openstreetmap.josm.data.osm.visitor.paint.relations.MultipolygonCache;
    2529import org.openstreetmap.josm.gui.mappaint.Environment;
     
    145149         *
    146150         */
    147         private class MatchingReferrerFinder implements OsmPrimitiveVisitor {
     151        private class MatchingReferrerFinder implements PrimitiveVisitor {
    148152            private final Environment e;
    149153
     
    157161
    158162            @Override
    159             public void visit(Node n) {
     163            public void visit(INode n) {
    160164                // node should never be a referrer
    161165                throw new AssertionError();
    162166            }
    163167
    164             private <T extends OsmPrimitive> void doVisit(T parent, IntSupplier counter, IntFunction<OsmPrimitive> getter) {
     168            private <T extends IPrimitive> void doVisit(T parent, IntSupplier counter, IntFunction<IPrimitive> getter) {
    165169                // If e.parent is already set to the first matching referrer.
    166170                // We skip any following referrer injected into the visitor.
     
    187191
    188192            @Override
    189             public void visit(Way w) {
     193            public void visit(IWay<?> w) {
    190194                doVisit(w, w::getNodesCount, w::getNode);
    191195            }
    192196
    193197            @Override
    194             public void visit(Relation r) {
     198            public void visit(IRelation<?> r) {
    195199                doVisit(r, r::getMembersCount, i -> r.getMember(i).getMember());
    196200            }
    197201        }
    198202
    199         private abstract static class AbstractFinder implements OsmPrimitiveVisitor {
     203        private abstract static class AbstractFinder implements PrimitiveVisitor {
    200204            protected final Environment e;
    201205
     
    205209
    206210            @Override
    207             public void visit(Node n) {
    208             }
    209 
    210             @Override
    211             public void visit(Way w) {
    212             }
    213 
    214             @Override
    215             public void visit(Relation r) {
    216             }
    217 
    218             public void visit(Collection<? extends OsmPrimitive> primitives) {
    219                 for (OsmPrimitive p : primitives) {
     211            public void visit(INode n) {
     212            }
     213
     214            @Override
     215            public void visit(IWay<?> w) {
     216            }
     217
     218            @Override
     219            public void visit(IRelation<?> r) {
     220            }
     221
     222            public void visit(Collection<? extends IPrimitive> primitives) {
     223                for (IPrimitive p : primitives) {
    220224                    if (e.child != null) {
    221225                        // abort if first match has been found
     
    227231            }
    228232
    229             public boolean isPrimitiveUsable(OsmPrimitive p) {
     233            public boolean isPrimitiveUsable(IPrimitive p) {
    230234                return !e.osm.equals(p) && p.isUsable();
    231235            }
     
    235239
    236240            @Override
    237             public void visit(Way w) {
     241            public void visit(IWay<?> w) {
    238242                w.visitReferrers(innerVisitor);
    239243            }
     
    243247            }
    244248
    245             private final OsmPrimitiveVisitor innerVisitor = new AbstractFinder(e) {
     249            private final PrimitiveVisitor innerVisitor = new AbstractFinder(e) {
    246250                @Override
    247                 public void visit(Relation r) {
    248                     if (left.matches(e.withPrimitive(r))) {
    249                         final List<Node> openEnds = MultipolygonCache.getInstance().get(r).getOpenEnds();
     251                public void visit(IRelation<?> r) {
     252                    if (r instanceof Relation && left.matches(e.withPrimitive(r))) {
     253                        final List<Node> openEnds = MultipolygonCache.getInstance().get((Relation) r).getOpenEnds();
    250254                        final int openEndIndex = openEnds.indexOf(e.osm);
    251255                        if (openEndIndex >= 0) {
     
    265269            private CrossingFinder(Environment e) {
    266270                super(e);
    267                 CheckParameterUtil.ensureThat(e.osm instanceof Way, "Only ways are supported");
     271                CheckParameterUtil.ensureThat(e.osm instanceof IWay, "Only ways are supported");
    268272                layer = OsmUtils.getLayer(e.osm);
    269273            }
    270274
    271275            @Override
    272             public void visit(Way w) {
     276            public void visit(IWay<?> w) {
    273277                if (e.child == null && Objects.equals(layer, OsmUtils.getLayer(w))
    274278                    && left.matches(new Environment(w).withParent(e.osm))
    275                     && e.osm instanceof Way && Geometry.PolygonIntersection.CROSSING.equals(
     279                    && e.osm instanceof IWay && Geometry.PolygonIntersection.CROSSING.equals(
    276280                            Geometry.polygonIntersection(w.getNodes(), ((Way) e.osm).getNodes()))) {
    277281                    e.child = w;
     
    283287            protected ContainsFinder(Environment e) {
    284288                super(e);
    285                 CheckParameterUtil.ensureThat(!(e.osm instanceof Node), "Nodes not supported");
    286             }
    287 
    288             @Override
    289             public void visit(Node n) {
     289                CheckParameterUtil.ensureThat(!(e.osm instanceof INode), "Nodes not supported");
     290            }
     291
     292            @Override
     293            public void visit(INode n) {
    290294                if (e.child == null && left.matches(new Environment(n).withParent(e.osm))
    291                     && ((e.osm instanceof Way && Geometry.nodeInsidePolygon(n, ((Way) e.osm).getNodes()))
     295                    && ((e.osm instanceof IWay && Geometry.nodeInsidePolygon(n, ((Way) e.osm).getNodes()))
    292296                            || (e.osm instanceof Relation && (
    293297                                    (Relation) e.osm).isMultipolygon() && Geometry.isNodeInsideMultiPolygon(n, (Relation) e.osm, null)))) {
     
    297301
    298302            @Override
    299             public void visit(Way w) {
     303            public void visit(IWay<?> w) {
    300304                if (e.child == null && left.matches(new Environment(w).withParent(e.osm))
    301                     && ((e.osm instanceof Way && Geometry.PolygonIntersection.FIRST_INSIDE_SECOND.equals(
     305                    && ((e.osm instanceof IWay && Geometry.PolygonIntersection.FIRST_INSIDE_SECOND.equals(
    302306                            Geometry.polygonIntersection(w.getNodes(), ((Way) e.osm).getNodes())))
    303307                            || (e.osm instanceof Relation && (
     
    317321            if (ChildOrParentSelectorType.ELEMENT_OF.equals(type)) {
    318322
    319                 if (e.osm instanceof Node || e.osm.getDataSet() == null) {
     323                if (e.osm instanceof INode || e.osm.getDataSet() == null) {
    320324                    // nodes cannot contain elements
    321325                    return false;
     
    326330                    // if right selector also matches relations and if matched primitive is a way which is part of a multipolygon,
    327331                    // use the multipolygon for further analysis
    328                     if (!(e.osm instanceof Way)
     332                    if (!(e.osm instanceof IWay)
    329333                            || (right instanceof OptimizedGeneralSelector
    330334                            && !((OptimizedGeneralSelector) right).matchesBase(OsmPrimitiveType.RELATION))) {
     
    338342                    containsFinder = new ContainsFinder(new Environment(multipolygon)) {
    339343                        @Override
    340                         public boolean isPrimitiveUsable(OsmPrimitive p) {
     344                        public boolean isPrimitiveUsable(IPrimitive p) {
    341345                            return super.isPrimitiveUsable(p) && !members.contains(p);
    342346                        }
     
    362366                return e.child != null;
    363367
    364             } else if (ChildOrParentSelectorType.CROSSING.equals(type) && e.osm instanceof Way) {
     368            } else if (ChildOrParentSelectorType.CROSSING.equals(type) && e.osm instanceof IWay) {
    365369                e.parent = e.osm;
    366370                final CrossingFinder crossingFinder = new CrossingFinder(e);
     
    371375                return e.child != null;
    372376            } else if (ChildOrParentSelectorType.SIBLING.equals(type)) {
    373                 if (e.osm instanceof Node) {
    374                     for (Way w : Utils.filteredCollection(e.osm.getReferrers(true), Way.class)) {
    375                         final int i = w.getNodes().indexOf(e.osm);
    376                         if (i - 1 >= 0) {
    377                             final Node n = w.getNode(i - 1);
    378                             final Environment e2 = e.withPrimitive(n).withParent(w).withChild(e.osm);
    379                             if (left.matches(e2) && link.matches(e2.withLinkContext())) {
    380                                 e.child = n;
    381                                 e.index = i;
    382                                 e.count = w.getNodesCount();
    383                                 e.parent = w;
    384                                 return true;
     377                if (e.osm instanceof INode) {
     378                    for (IPrimitive ref : e.osm.getReferrers(true)) {
     379                        if (ref instanceof IWay) {
     380                            IWay<?> w = (IWay<?>) ref;
     381                            final int i = w.getNodes().indexOf(e.osm);
     382                            if (i - 1 >= 0) {
     383                                final INode n = w.getNode(i - 1);
     384                                final Environment e2 = e.withPrimitive(n).withParent(w).withChild(e.osm);
     385                                if (left.matches(e2) && link.matches(e2.withLinkContext())) {
     386                                    e.child = n;
     387                                    e.index = i;
     388                                    e.count = w.getNodesCount();
     389                                    e.parent = w;
     390                                    return true;
     391                                }
    385392                            }
    386393                        }
     
    390397                    && link.conds != null && !link.conds.isEmpty()
    391398                    && link.conds.get(0) instanceof OpenEndPseudoClassCondition) {
    392                 if (e.osm instanceof Node) {
     399                if (e.osm instanceof INode) {
    393400                    e.osm.visitReferrers(new MultipolygonOpenEndFinder(e));
    394401                    return e.parent != null;
     
    400407                    return true;
    401408            } else if (ChildOrParentSelectorType.PARENT.equals(type)) {
    402                 if (e.osm instanceof Way) {
    403                     List<Node> wayNodes = ((Way) e.osm).getNodes();
     409                if (e.osm instanceof IWay) {
     410                    List<? extends INode> wayNodes = ((IWay<?>) e.osm).getNodes();
    404411                    for (int i = 0; i < wayNodes.size(); i++) {
    405                         Node n = wayNodes.get(i);
     412                        INode n = wayNodes.get(i);
    406413                        if (left.matches(e.withPrimitive(n))
    407414                            && link.matches(e.withChildAndIndexAndLinkContext(n, i, wayNodes.size()))) {
     
    412419                        }
    413420                    }
    414                 } else if (e.osm instanceof Relation) {
    415                     List<RelationMember> members = ((Relation) e.osm).getMembers();
     421                } else if (e.osm instanceof IRelation) {
     422                    List<? extends IRelationMember<?>> members = ((IRelation<?>) e.osm).getMembers();
    416423                    for (int i = 0; i < members.size(); i++) {
    417                         OsmPrimitive member = members.get(i).getMember();
     424                        IPrimitive member = members.get(i).getMember();
    418425                        if (left.matches(e.withPrimitive(member))
    419426                            && link.matches(e.withChildAndIndexAndLinkContext(member, i, members.size()))) {
     
    624631        }
    625632
    626         public boolean matchesBase(OsmPrimitive p) {
     633        public boolean matchesBase(IPrimitive p) {
    627634            if (!matchesBase(p.getType())) {
    628635                return false;
    629636            } else {
    630                 if (p instanceof Relation) {
     637                if (p instanceof IRelation) {
    631638                    if ("area".equals(base)) {
    632                         return ((Relation) p).isMultipolygon();
     639                        return ((IRelation<?>) p).isMultipolygon();
    633640                    } else if ("canvas".equals(base)) {
    634641                        return p.get("#canvas") != null;
Note: See TracChangeset for help on using the changeset viewer.