Ignore:
Timestamp:
2018-04-08T16:38:27+02:00 (7 years ago)
Author:
donvip
Message:

checkstyle + Eclipse formatting

Location:
applications/editors/josm/plugins/CustomizePublicTransportStop/src/ru/rodsoft/openstreetmap/josm/plugins/customizepublictransportstop
Files:
12 edited

Legend:

Unmodified
Added
Removed
  • applications/editors/josm/plugins/CustomizePublicTransportStop/src/ru/rodsoft/openstreetmap/josm/plugins/customizepublictransportstop/CreateNewStopPointOperation.java

    r33811 r34156  
     1// License: GPL. For details, see LICENSE file.
    12package ru.rodsoft.openstreetmap.josm.plugins.customizepublictransportstop;
    23
     
    2425
    2526/**
     27 * Operation of creation of new stop point
    2628 *
    2729 * @author Rodion Scherbakov
    28  * Operation of creation of new stop point
    2930 */
    30 public class CreateNewStopPointOperation extends StopAreaOperationBase
    31 {
    32 
    33         /**
    34          * Constructor of operation object
    35          * @param currentDataSet Current Josm data set
    36          */
    37         public CreateNewStopPointOperation(DataSet currentDataSet)
    38         {
    39                 super(currentDataSet);
    40         }
    41        
    42     /**
    43      * The *result* does not depend on the current map selection state,
    44      * neither does the result *order*.
    45      * It solely depends on the distance to point p.
     31public class CreateNewStopPointOperation extends StopAreaOperationBase {
     32
     33    /**
     34     * Constructor of operation object
     35     *
     36     * @param currentDataSet Current Josm data set
     37     */
     38    public CreateNewStopPointOperation(DataSet currentDataSet) {
     39        super(currentDataSet);
     40    }
     41
     42    /**
     43     * The *result* does not depend on the current map selection state, neither does
     44     * the result *order*. It solely depends on the distance to point p.
    4645     *
    4746     * This code is coped from JOSM code
    4847     *
    49      * @return a sorted map with the keys representing the distance of
    50      *      their associated nodes to point p.
     48     * @return a sorted map with the keys representing the distance of their
     49     *        associated nodes to point p.
    5150     */
    5251    private Map<Double, List<Node>> getNearestNodesImpl(Point p) {
     
    5958
    6059            for (Node n : ds.searchNodes(getBBox(p, 200))) {
    61                 if ((dist = MainApplication.getMap().mapView.getPoint2D(n).distanceSq(p)) < snapDistanceSq)
    62                 {
     60                if ((dist = MainApplication.getMap().mapView.getPoint2D(n).distanceSq(p)) < snapDistanceSq) {
    6361                    List<Node> nlist;
    6462                    if (nearestMap.containsKey(dist)) {
     
    7876    /**
    7977     * Selection of area for search of roads
     78     *
    8079     * @param p Current point
    8180     * @param snapDistance Distance for search
     
    8584        MapView mapView = MainApplication.getMap().mapView;
    8685        return new BBox(mapView.getLatLon(p.x - snapDistance, p.y - snapDistance),
    87                                 mapView.getLatLon(p.x + snapDistance, p.y + snapDistance));
    88     }
    89 
    90     /**
    91      * Search of nearest points on ways
    92      * @param platformCoord Platform coordinates
     86                mapView.getLatLon(p.x + snapDistance, p.y + snapDistance));
     87    }
     88
     89    /**
     90     * Search of nearest points on ways
     91     *
     92     * @param platformCoord Platform coordinates
    9393     * @param stopArea Stop area object
    9494     * @return Dictionary of founded points and distances from platform
    9595     */
    96     public AbstractMap.SimpleEntry<Double, Node> getNearestNode(LatLon platformCoord, StopArea stopArea)
    97     {
    98         Point p = MainApplication.getMap().mapView.getPoint(platformCoord);
    99         Map<Double, List<Node>> dist_nodes = getNearestNodesImpl(p);
    100         Double[] distances = dist_nodes.keySet().toArray(new Double[0]);
    101         distances = sort(distances);
    102         Integer distanceIndex = -1;
    103         Node nearestNode = null;
    104         while(++distanceIndex < distances.length && nearestNode == null)
    105         {
    106                 List<Node> nodes = dist_nodes.get(distances[distanceIndex]);
    107                 for(Node node : nodes)
    108                 {
    109                         for(Way way : getCurrentDataSet().getWays())
    110                         {
    111                                 if(way.getNodes().contains(node) && testWay(way, stopArea))
    112                                 {
    113                                         nearestNode = node;
    114                                         return new AbstractMap.SimpleEntry<Double, Node> (distances[distanceIndex], nearestNode);
    115                                 }
    116                         }
    117                         if(nearestNode != null)
    118                                 break;
    119                 }
    120         }
    121                 return null;
     96    public AbstractMap.SimpleEntry<Double, Node> getNearestNode(LatLon platformCoord, StopArea stopArea) {
     97        Point p = MainApplication.getMap().mapView.getPoint(platformCoord);
     98        Map<Double, List<Node>> dist_nodes = getNearestNodesImpl(p);
     99        Double[] distances = dist_nodes.keySet().toArray(new Double[0]);
     100        distances = sort(distances);
     101        Integer distanceIndex = -1;
     102        Node nearestNode = null;
     103        while (++distanceIndex < distances.length && nearestNode == null) {
     104            List<Node> nodes = dist_nodes.get(distances[distanceIndex]);
     105            for (Node node : nodes) {
     106                for (Way way : getCurrentDataSet().getWays()) {
     107                    if (way.getNodes().contains(node) && testWay(way, stopArea)) {
     108                        nearestNode = node;
     109                        return new AbstractMap.SimpleEntry<Double, Node>(distances[distanceIndex], nearestNode);
     110                    }
     111                }
     112                if (nearestNode != null)
     113                    break;
     114            }
     115        }
     116        return null;
    122117    }
    123118
    124119    /**
    125120     * Sorting of founded points by distance
     121     *
    126122     * @param distances Array of distances
    127123     * @return Sorted array of distances
    128124     */
    129     public Double[] sort(Double[] distances)
    130     {
    131         for(Integer i = 0; i < distances.length - 1; i++)
    132         for(Integer j = i + 1; j < distances.length; j++)
    133         {
    134                 if(distances[i]>distances[j])
    135                 {
    136                         Double d = distances[i];
    137                         distances[i] = distances[j];
    138                         distances[j] = d;
    139                 }
    140         }
    141         return distances;
    142     }
    143    
     125    public Double[] sort(Double[] distances) {
     126        for (Integer i = 0; i < distances.length - 1; i++) {
     127            for (Integer j = i + 1; j < distances.length; j++) {
     128                if (distances[i] > distances[j]) {
     129                    Double d = distances[i];
     130                    distances[i] = distances[j];
     131                    distances[j] = d;
     132                }
     133            }
     134        }
     135        return distances;
     136    }
     137
    144138    /**
    145139     * Selection of ways for stop position by type of way and type of stop
     140     *
    146141     * @param way The way
    147142     * @param stopArea Stop area
    148143     * @return true, if way can contain stop position
    149144     */
    150     public Boolean testWay(Way way, StopArea stopArea)
    151     {
    152         if(stopArea.isTrainStation || stopArea.isTrainStop)
    153         {
    154                 if(OSMTags.RAIL_TAG_VALUE.equals(way.getKeys().get(OSMTags.RAILWAY_TAG)) && OSMTags.MAIN_TAG_VALUE.equals(way.getKeys().get(OSMTags.USAGE_TAG)))
    155                         return true;
    156                 return false;
    157         }
    158 
    159         if(stopArea.isTram)
    160         {
    161                 if(OSMTags.TRAM_TAG_VALUE.equals(way.getKeys().get(OSMTags.RAILWAY_TAG)))
    162                         return true;
    163                 return false;
    164         }
    165        
    166         String[] highwayValues = {OSMTags.TRUNK_TAG_VALUE, OSMTags.PRIMARY_TAG_VALUE, OSMTags.SECONDARY_TAG_VALUE, OSMTags.TERTIARY_TAG_VALUE,
    167                         OSMTags.UNCLASSIFIED_TAG_VALUE, OSMTags.RESIDENTIAL_TAG_VALUE, OSMTags.SERVICE_TAG_VALUE,
    168                         OSMTags.BUS_GUIDEWAY_TAG_VALUE, OSMTags.ROAD_TAG_VALUE, OSMTags.TRUNK_LINK_TAG_VALUE,
    169                         OSMTags.PRIMARY_LINK_TAG_VALUE, OSMTags.SECONDARY_LINK_TAG_VALUE, OSMTags.TERTIARY_LINK_TAG_VALUE };
    170         if(stopArea.isBus || stopArea.isTrolleybus || stopArea.isShareTaxi)
    171         {
    172                 String highway = way.getKeys().get(OSMTags.HIGHWAY_TAG);
    173                 if(highway != null)
    174                 for(Integer i = 0; i < highwayValues.length; i++)
    175                 {
    176                         if(highwayValues[i].equals(highway))
    177                                 return true;
    178                 }
    179         }
    180         return false;
    181     }
    182    
    183     /**
    184      * The *result* does not depend on the current map selection state,
    185      * neither does the result *order*.
    186      * It solely depends on the distance to point p.
     145    public Boolean testWay(Way way, StopArea stopArea) {
     146        if (stopArea.isTrainStation || stopArea.isTrainStop) {
     147            if (OSMTags.RAIL_TAG_VALUE.equals(way.getKeys().get(OSMTags.RAILWAY_TAG))
     148                    && OSMTags.MAIN_TAG_VALUE.equals(way.getKeys().get(OSMTags.USAGE_TAG)))
     149                return true;
     150            return false;
     151        }
     152
     153        if (stopArea.isTram) {
     154            if (OSMTags.TRAM_TAG_VALUE.equals(way.getKeys().get(OSMTags.RAILWAY_TAG)))
     155                return true;
     156            return false;
     157        }
     158
     159        String[] highwayValues = {OSMTags.TRUNK_TAG_VALUE, OSMTags.PRIMARY_TAG_VALUE, OSMTags.SECONDARY_TAG_VALUE,
     160                OSMTags.TERTIARY_TAG_VALUE, OSMTags.UNCLASSIFIED_TAG_VALUE, OSMTags.RESIDENTIAL_TAG_VALUE,
     161                OSMTags.SERVICE_TAG_VALUE, OSMTags.BUS_GUIDEWAY_TAG_VALUE, OSMTags.ROAD_TAG_VALUE,
     162                OSMTags.TRUNK_LINK_TAG_VALUE, OSMTags.PRIMARY_LINK_TAG_VALUE, OSMTags.SECONDARY_LINK_TAG_VALUE,
     163                OSMTags.TERTIARY_LINK_TAG_VALUE};
     164        if (stopArea.isBus || stopArea.isTrolleybus || stopArea.isShareTaxi) {
     165            String highway = way.getKeys().get(OSMTags.HIGHWAY_TAG);
     166            if (highway != null)
     167                for (Integer i = 0; i < highwayValues.length; i++) {
     168                    if (highwayValues[i].equals(highway))
     169                        return true;
     170                }
     171        }
     172        return false;
     173    }
     174
     175    /**
     176     * The *result* does not depend on the current map selection state, neither does
     177     * the result *order*. It solely depends on the distance to point p.
    187178     *
    188179     * This code is coped from JOSM code
    189180     *
    190      * @return a sorted map with the keys representing the perpendicular
    191      *      distance of their associated way segments to point p.
     181     * @return a sorted map with the keys representing the perpendicular distance of
     182     *        their associated way segments to point p.
    192183     */
    193184    private Map<Double, List<WaySegment>> getNearestWaySegmentsImpl(Point p) {
     
    204195                for (Node n : w.getNodes()) {
    205196                    i++;
    206                     if (n.isDeleted() || n.isIncomplete()) { //FIXME: This shouldn't happen, raise exception?
     197                    if (n.isDeleted() || n.isIncomplete()) { // FIXME: This shouldn't happen, raise exception?
    207198                        continue;
    208199                    }
     
    218209                    double b = p.distanceSq(A);
    219210
    220                     /* perpendicular distance squared
    221                      * loose some precision to account for possible deviations in the calculation above
    222                      * e.g. if identical (A and B) come about reversed in another way, values may differ
    223                      * -- zero out least significant 32 dual digits of mantissa..
     211                    /*
     212                     * perpendicular distance squared loose some precision to account for possible
     213                     * deviations in the calculation above e.g. if identical (A and B) come about
     214                     * reversed in another way, values may differ -- zero out least significant 32
     215                     * dual digits of mantissa..
    224216                     */
    225217                    double perDistSq = Double.longBitsToDouble(
    226                             Double.doubleToLongBits( a - (a - b + c) * (a - b + c) / 4 / c )
    227                             >> 32 << 32); // resolution in numbers with large exponent not needed here..
     218                            // resolution in numbers with large exponent not needed here..
     219                            Double.doubleToLongBits(a - (a - b + c) * (a - b + c) / 4 / c) >> 32 << 32);
    228220
    229221                    if (perDistSq < snapDistanceSq && a < c + snapDistanceSq && b < c + snapDistanceSq) {
     
    245237        return nearestMap;
    246238    }
    247    
     239
    248240    /**
    249241     * Selection of nearest way for stop position
     242     *
    250243     * @param platformCoord Platform coordinates
    251244     * @param stopArea Stop area
    252245     * @return Nearest way segment
    253246     */
    254     protected NearestWaySegment getNearestWaySegment(LatLon platformCoord, StopArea stopArea)
    255     {
     247    protected NearestWaySegment getNearestWaySegment(LatLon platformCoord, StopArea stopArea) {
    256248        MapView mapView = MainApplication.getMap().mapView;
    257         Point p = mapView.getPoint(platformCoord);
    258         Map<Double, List<WaySegment>> dist_waySegments = getNearestWaySegmentsImpl(p);
    259         for(Map.Entry<Double, List<WaySegment>> entry : dist_waySegments.entrySet())
    260         {
    261                 for(WaySegment waySegment : entry.getValue())
    262                 {
    263                         if(testWay(waySegment.way, stopArea))
    264                         {
    265                                 Node n = waySegment.getFirstNode();
    266                                 Node lastN = waySegment.getSecondNode();
    267                
    268                         EastNorth newPosition = Geometry.closestPointToSegment(n.getEastNorth(),
    269                                  lastN.getEastNorth(), Main.getProjection().latlon2eastNorth(platformCoord));
    270                         LatLon newNodePosition = Main.getProjection().eastNorth2latlon(newPosition);
    271                         Point2D lastN2D = mapView.getPoint2D(lastN);
    272                         Point2D n2D = mapView.getPoint2D(n);
    273                         Point2D newNodePosition2D = mapView.getPoint2D(newNodePosition);
    274                         Double distCurrenNodes =lastN2D.distance(n2D);
    275                         if((newNodePosition2D.distance(lastN2D) < distCurrenNodes) && (newNodePosition2D.distance(n2D) < distCurrenNodes))
    276                         {
    277                                         return new NearestWaySegment(entry.getKey(), waySegment, new Node(newNodePosition));
    278                         }
    279                         }
    280                 }
    281         }
    282         return null;
     249        Point p = mapView.getPoint(platformCoord);
     250        Map<Double, List<WaySegment>> dist_waySegments = getNearestWaySegmentsImpl(p);
     251        for (Map.Entry<Double, List<WaySegment>> entry : dist_waySegments.entrySet()) {
     252            for (WaySegment waySegment : entry.getValue()) {
     253                if (testWay(waySegment.way, stopArea)) {
     254                    Node n = waySegment.getFirstNode();
     255                    Node lastN = waySegment.getSecondNode();
     256
     257                    EastNorth newPosition = Geometry.closestPointToSegment(n.getEastNorth(), lastN.getEastNorth(),
     258                            Main.getProjection().latlon2eastNorth(platformCoord));
     259                    LatLon newNodePosition = Main.getProjection().eastNorth2latlon(newPosition);
     260                    Point2D lastN2D = mapView.getPoint2D(lastN);
     261                    Point2D n2D = mapView.getPoint2D(n);
     262                    Point2D newNodePosition2D = mapView.getPoint2D(newNodePosition);
     263                    Double distCurrenNodes = lastN2D.distance(n2D);
     264                    if ((newNodePosition2D.distance(lastN2D) < distCurrenNodes)
     265                            && (newNodePosition2D.distance(n2D) < distCurrenNodes)) {
     266                        return new NearestWaySegment(entry.getKey(), waySegment, new Node(newNodePosition));
     267                    }
     268                }
     269            }
     270        }
     271        return null;
    283272    }
    284273
    285274    /**
    286275     * Creation of stop position node on nearest way
     276     *
    287277     * @param newStopNode New stop position node
    288278     * @param waySegment Way segment including stop position node
    289279     * @return Stop position node
    290280     */
    291     protected Node createNodeOnWay(Node newStopNode, WaySegment waySegment)
    292     {
    293         Main.main.undoRedo.add(new AddCommand(MainApplication.getLayerManager().getEditDataSet(), newStopNode));
    294         List<Node> wayNodes = waySegment.way.getNodes();
    295         wayNodes.add(waySegment.lowerIndex + 1, newStopNode);
    296         Way newWay = new Way(waySegment.way);
    297         newWay.setNodes(wayNodes);
    298         Main.main.undoRedo.add(new ChangeCommand(waySegment.way, newWay));
    299         return newStopNode;
     281    protected Node createNodeOnWay(Node newStopNode, WaySegment waySegment) {
     282        Main.main.undoRedo.add(new AddCommand(MainApplication.getLayerManager().getEditDataSet(), newStopNode));
     283        List<Node> wayNodes = waySegment.way.getNodes();
     284        wayNodes.add(waySegment.lowerIndex + 1, newStopNode);
     285        Way newWay = new Way(waySegment.way);
     286        newWay.setNodes(wayNodes);
     287        Main.main.undoRedo.add(new ChangeCommand(waySegment.way, newWay));
     288        return newStopNode;
    300289    }
    301290
    302291    /**
    303292     * Creation of stop position
     293     *
    304294     * @param stopArea Stop Area
    305295     */
    306296    @Override
    307     public StopArea performCustomizing(StopArea stopArea)
    308     {
    309                 LatLon platformCoord = null;
    310                 if(stopArea.selectedObject instanceof Node)
    311                 {
    312                         platformCoord = ((Node) stopArea.selectedObject).getCoor();
    313                 }
    314                 else
    315                         platformCoord = getCenterOfWay(stopArea.selectedObject);
    316                 if(platformCoord == null)
    317                         return stopArea;
    318                 AbstractMap.SimpleEntry<Double, Node> nearestNode = getNearestNode(platformCoord, stopArea);
    319                 NearestWaySegment nearestWaySegment = getNearestWaySegment(platformCoord, stopArea);
    320                 Node newStopPointNode = null;
    321                 if(nearestNode != null && nearestWaySegment != null)
    322                 {
    323                     MapView mapView = MainApplication.getMap().mapView;
    324                         Double segmentDist = mapView.getPoint2D(platformCoord).distanceSq(mapView.getPoint2D(nearestWaySegment.newNode));
    325                         Double nodeDistSq =  nearestNode.getKey();
    326 //                      nodeDistSq *= nodeDistSq - 2;
    327                         if(segmentDist < nodeDistSq - 2)
    328                         {
    329 //                              MessageBox.ok("new stop node v2 "  + segmentDist.toString() + "   " + nodeDistSq.toString());
    330                                 newStopPointNode = createNodeOnWay(nearestWaySegment.newNode, nearestWaySegment.waySegment);
    331                         }
    332                         else
    333                         {
    334 //                              MessageBox.ok("new stop node v3 "  + segmentDist.toString() + "   " + nodeDistSq.toString());
    335                                 newStopPointNode = nearestNode.getValue();
    336                         }
    337                 }
    338                 else
    339                         if(nearestNode != null && nearestWaySegment == null)
    340                         {
    341                                 newStopPointNode = nearestNode.getValue();
    342                         }
    343                         else
    344                                 if(nearestNode == null && nearestWaySegment != null)
    345                                 {
    346 //                                      MessageBox.ok("new stop node2");
    347                                         newStopPointNode = createNodeOnWay(nearestWaySegment.newNode, nearestWaySegment.waySegment);
    348                                 }
    349                 if(newStopPointNode != null)
    350                 {
    351                         stopArea.stopPoints.add(newStopPointNode);
    352                 }
    353                 return stopArea;
    354         }
    355    
     297    public StopArea performCustomizing(StopArea stopArea) {
     298        LatLon platformCoord = null;
     299        if (stopArea.selectedObject instanceof Node) {
     300            platformCoord = ((Node) stopArea.selectedObject).getCoor();
     301        } else
     302            platformCoord = getCenterOfWay(stopArea.selectedObject);
     303        if (platformCoord == null)
     304            return stopArea;
     305        AbstractMap.SimpleEntry<Double, Node> nearestNode = getNearestNode(platformCoord, stopArea);
     306        NearestWaySegment nearestWaySegment = getNearestWaySegment(platformCoord, stopArea);
     307        Node newStopPointNode = null;
     308        if (nearestNode != null && nearestWaySegment != null) {
     309            MapView mapView = MainApplication.getMap().mapView;
     310            Double segmentDist = mapView.getPoint2D(platformCoord)
     311                    .distanceSq(mapView.getPoint2D(nearestWaySegment.newNode));
     312            Double nodeDistSq = nearestNode.getKey();
     313            // nodeDistSq *= nodeDistSq - 2;
     314            if (segmentDist < nodeDistSq - 2) {
     315                // MessageBox.ok("new stop node v2 " + segmentDist.toString() + " " +
     316                // nodeDistSq.toString());
     317                newStopPointNode = createNodeOnWay(nearestWaySegment.newNode, nearestWaySegment.waySegment);
     318            } else {
     319                // MessageBox.ok("new stop node v3 " + segmentDist.toString() + " " +
     320                // nodeDistSq.toString());
     321                newStopPointNode = nearestNode.getValue();
     322            }
     323        } else if (nearestNode != null && nearestWaySegment == null) {
     324            newStopPointNode = nearestNode.getValue();
     325        } else if (nearestNode == null && nearestWaySegment != null) {
     326            // MessageBox.ok("new stop node2");
     327            newStopPointNode = createNodeOnWay(nearestWaySegment.newNode, nearestWaySegment.waySegment);
     328        }
     329        if (newStopPointNode != null) {
     330            stopArea.stopPoints.add(newStopPointNode);
     331        }
     332        return stopArea;
     333    }
     334
    356335}
  • applications/editors/josm/plugins/CustomizePublicTransportStop/src/ru/rodsoft/openstreetmap/josm/plugins/customizepublictransportstop/CreateStopAreaFromSelectedObjectOperation.java

    r32840 r34156  
     1// License: GPL. For details, see LICENSE file.
    12package ru.rodsoft.openstreetmap.josm.plugins.customizepublictransportstop;
    23
     
    1112
    1213/**
     14 * Operation of constructing of stop area object from selected JOSM object
    1315 *
    1416 * @author Rodion Scherbakov
    15  * Operation of constructing of stop area object from selected JOSM object
    1617 */
    17 public class CreateStopAreaFromSelectedObjectOperation extends
    18                 StopAreaOperationBase
    19 {
     18public class CreateStopAreaFromSelectedObjectOperation extends StopAreaOperationBase {
    2019
    21         /**
    22         * Constructor of operation object
    23          * @param currentDataSet Current Josm data set
    24          */
    25         public CreateStopAreaFromSelectedObjectOperation(DataSet currentDataSet)
    26         {
    27                 super(currentDataSet);
    28         }
     20    /**
     21    * Constructor of operation object
     22     *
     23     * @param currentDataSet Current Josm data set
     24     */
     25    public CreateStopAreaFromSelectedObjectOperation(DataSet currentDataSet) {
     26        super(currentDataSet);
     27    }
    2928
    30         /**
    31          * Parsing of josm object tags and customizing of stop area object
    32          * @param member Josm object
    33          */
    34         public void parseTags(StopArea stopArea, OsmPrimitive member)
    35         {
    36                 if(stopArea.name == null)
    37                         stopArea.name = getTagValue(member, OSMTags.NAME_TAG);
    38                 if(stopArea.nameEn == null)
    39                         stopArea.nameEn = getTagValue(member, OSMTags.NAME_EN_TAG);
    40                 if(stopArea.operator == null)
    41                         stopArea.operator = getTagValue(member, OSMTags.OPERATOR_TAG);
    42                 if(stopArea.network == null)
    43                         stopArea.network = getTagValue(member, OSMTags.NETWORK_TAG);
    44                 if(stopArea.service == null)
    45                         stopArea.service = getTagValue(member, OSMTags.SERVICE_TAG);
    46                 if(OSMTags.LOCAL_NETWORK_TAG_VALUE.equals(stopArea.service))
    47                         stopArea.service = OSMTags.COMMUTER_NETWORK_TAG_VALUE;
    48                 if(compareTag(member, OSMTags.BUS_TAG, OSMTags.YES_TAG_VALUE))
    49                         stopArea.isBus = true;
    50                 if(compareTag(member, OSMTags.TROLLEYBUS_TAG, OSMTags.YES_TAG_VALUE))
    51                         stopArea.isTrolleybus = true;
    52                 if(compareTag(member, OSMTags.SHARE_TAXI_TAG, OSMTags.YES_TAG_VALUE))
    53                         stopArea.isShareTaxi = true;
    54                 if(!(stopArea.isBus || stopArea.isShareTaxi || stopArea.isTrolleybus) && compareTag(member, OSMTags.HIGHWAY_TAG, OSMTags.BUS_STOP_TAG_VALUE))
    55                         stopArea.isBus = true;
    56                 if(compareTag(member, OSMTags.TRAM_TAG, OSMTags.YES_TAG_VALUE) || compareTag(member, OSMTags.RAILWAY_TAG, OSMTags.TRAM_STOP_TAG_VALUE))
    57                         stopArea.isTram = true;
    58                 if(compareTag(member, OSMTags.RAILWAY_TAG, OSMTags.HALT_TAG_VALUE))
    59                         stopArea.isTrainStop = true;
    60                 if(compareTag(member, OSMTags.RAILWAY_TAG, OSMTags.STATION_TAG_VALUE))
    61                         stopArea.isTrainStation = true;
    62                 if(compareTag(member, OSMTags.AMENITY_TAG, OSMTags.BUS_STATION_TAG_VALUE))
    63                 {
    64                         stopArea.isBusStation = true;
    65                 }
    66                 if(member == stopArea.selectedObject)
    67                 {
    68                         if(compareTag(member, OSMTags.BENCH_TAG, OSMTags.YES_TAG_VALUE))
    69                                 stopArea.isBench = true;
    70                         if(compareTag(member, OSMTags.SHELTER_TAG, OSMTags.YES_TAG_VALUE))
    71                                 stopArea.isShelter = true;
    72                         if(compareTag(member, OSMTags.COVERED_TAG, OSMTags.YES_TAG_VALUE))
    73                                 stopArea.isCovered = true;
    74                         if(compareTag(member, OSMTags.AREA_TAG, OSMTags.YES_TAG_VALUE))
    75                                 stopArea.isArea = true;
    76                 }
    77         }
    78        
    79         /**
    80          * Test, are transport types assigned to platforms
    81          * @param platform Platform object
    82          * @return true, if transport types assigned to this platforms
    83          */
    84         public boolean testIsTransportTypeAssigned(OsmPrimitive platform)
    85         {
    86                 String[] transportTypes = new String[] { OSMTags.BUS_TAG, OSMTags.TROLLEYBUS_TAG, OSMTags.SHARE_TAXI_TAG, OSMTags.TRAM_TAG, OSMTags.TRAIN_TAG };
    87                 for(String transportType : transportTypes)
    88                 {
    89                         if(compareTag(platform, transportType, OSMTags.YES_TAG_VALUE))
    90                                 return true;                   
    91                 }
    92                 return false;
    93         }
    94        
    95         /**
    96          * Setting of stop area from selected josm object
    97          * @param selectedObject Selected josm object
    98          */
    99         public void fromSelectedObject(StopArea stopArea)
    100         {
    101                 Collection<OsmPrimitive> selectedObjects = new ArrayList<OsmPrimitive>();
    102                 selectedObjects.add(stopArea.selectedObject);
    103                 for(Relation rel : OsmPrimitive.getParentRelations(selectedObjects))
    104                 {
    105                         if(compareTag(rel, OSMTags.TYPE_TAG, OSMTags.PUBLIC_TRANSPORT_TAG) && compareTag(rel, OSMTags.PUBLIC_TRANSPORT_TAG, OSMTags.STOP_AREA_TAG_VALUE))
    106                         {
    107                                 stopArea.stopAreaRelation = rel;
    108                         }
    109                         if(stopArea.stopAreaRelation != null)
    110                                 break;
    111                 }
    112                
    113                 if(stopArea.stopAreaRelation != null)
    114                 {
    115                         parseTags(stopArea, stopArea.stopAreaRelation);
    116                         parseTags(stopArea, stopArea.selectedObject);
    117                         for(RelationMember member : stopArea.stopAreaRelation.getMembers())
    118                         {                               
    119                                 if(member.getMember() instanceof Node && compareTag(member.getMember(), OSMTags.PUBLIC_TRANSPORT_TAG, OSMTags.STOP_POSITION_TAG_VALUE))
    120                                 {
    121                                         stopArea.isStopPointExists = true;
    122                                         stopArea.stopPoints.add(member.getNode());
    123                                 }
    124                                 else
    125                                         if(compareTag(member.getMember(), OSMTags.PUBLIC_TRANSPORT_TAG, OSMTags.PLATFORM_TAG_VALUE))
    126                                         {
    127                                                 stopArea.platforms.add(member.getMember());
    128                                         }
    129                                         else
    130                                         {
    131                                                 stopArea.otherMembers.add(member.getMember());
    132                                         }
    133                                 parseTags(stopArea, member.getMember());
    134                         }
    135                         if(!stopArea.platforms.contains(stopArea.selectedObject))
    136                         {
    137                                 parseTags(stopArea, stopArea.selectedObject);
    138                                 stopArea.platforms.add(stopArea.selectedObject);
    139                         }
    140                 }
    141                 else
    142                 {
    143                         parseTags(stopArea, stopArea.selectedObject);
    144                         stopArea.platforms.add(stopArea.selectedObject);
    145                 }
    146                 for(OsmPrimitive platform : stopArea.platforms)
    147                 {
    148                         if(testIsTransportTypeAssigned(platform))
    149                         {
    150                                 stopArea.isAssignTransportType = true;
    151                                 break;
    152                         }
    153                 }
    154                 if(!(stopArea.isBus || stopArea.isTrolleybus || stopArea.isShareTaxi) && stopArea.selectedObject != null && (compareTag(stopArea.selectedObject, OSMTags.HIGHWAY_TAG, OSMTags.BUS_STOP_TAG_VALUE) || stopArea.isBusStation))
    155                 {
    156                         stopArea.isBus = true;
    157                 }               
    158         }
     29    /**
     30     * Parsing of josm object tags and customizing of stop area object
     31     *
     32     * @param member Josm object
     33     */
     34    public void parseTags(StopArea stopArea, OsmPrimitive member) {
     35        if (stopArea.name == null)
     36            stopArea.name = getTagValue(member, OSMTags.NAME_TAG);
     37        if (stopArea.nameEn == null)
     38            stopArea.nameEn = getTagValue(member, OSMTags.NAME_EN_TAG);
     39        if (stopArea.operator == null)
     40            stopArea.operator = getTagValue(member, OSMTags.OPERATOR_TAG);
     41        if (stopArea.network == null)
     42            stopArea.network = getTagValue(member, OSMTags.NETWORK_TAG);
     43        if (stopArea.service == null)
     44            stopArea.service = getTagValue(member, OSMTags.SERVICE_TAG);
     45        if (OSMTags.LOCAL_NETWORK_TAG_VALUE.equals(stopArea.service))
     46            stopArea.service = OSMTags.COMMUTER_NETWORK_TAG_VALUE;
     47        if (compareTag(member, OSMTags.BUS_TAG, OSMTags.YES_TAG_VALUE))
     48            stopArea.isBus = true;
     49        if (compareTag(member, OSMTags.TROLLEYBUS_TAG, OSMTags.YES_TAG_VALUE))
     50            stopArea.isTrolleybus = true;
     51        if (compareTag(member, OSMTags.SHARE_TAXI_TAG, OSMTags.YES_TAG_VALUE))
     52            stopArea.isShareTaxi = true;
     53        if (!(stopArea.isBus || stopArea.isShareTaxi || stopArea.isTrolleybus)
     54                && compareTag(member, OSMTags.HIGHWAY_TAG, OSMTags.BUS_STOP_TAG_VALUE))
     55            stopArea.isBus = true;
     56        if (compareTag(member, OSMTags.TRAM_TAG, OSMTags.YES_TAG_VALUE)
     57                || compareTag(member, OSMTags.RAILWAY_TAG, OSMTags.TRAM_STOP_TAG_VALUE))
     58            stopArea.isTram = true;
     59        if (compareTag(member, OSMTags.RAILWAY_TAG, OSMTags.HALT_TAG_VALUE))
     60            stopArea.isTrainStop = true;
     61        if (compareTag(member, OSMTags.RAILWAY_TAG, OSMTags.STATION_TAG_VALUE))
     62            stopArea.isTrainStation = true;
     63        if (compareTag(member, OSMTags.AMENITY_TAG, OSMTags.BUS_STATION_TAG_VALUE)) {
     64            stopArea.isBusStation = true;
     65        }
     66        if (member == stopArea.selectedObject) {
     67            if (compareTag(member, OSMTags.BENCH_TAG, OSMTags.YES_TAG_VALUE))
     68                stopArea.isBench = true;
     69            if (compareTag(member, OSMTags.SHELTER_TAG, OSMTags.YES_TAG_VALUE))
     70                stopArea.isShelter = true;
     71            if (compareTag(member, OSMTags.COVERED_TAG, OSMTags.YES_TAG_VALUE))
     72                stopArea.isCovered = true;
     73            if (compareTag(member, OSMTags.AREA_TAG, OSMTags.YES_TAG_VALUE))
     74                stopArea.isArea = true;
     75        }
     76    }
    15977
    160         /**
    161          * Construct stop area object from selected JOSM object
    162          * @param stopArea Original stop area object
    163          * @return Stop area objects with settings of selected JOSM object and included it stop area relation
    164          */
    165         @Override
    166         public StopArea performCustomizing(StopArea stopArea)
    167         {
    168                 if(getCurrentDataSet() == null)
    169                         return null;
    170                 OsmPrimitive selectedObject = getCurrentDataSet().getSelectedNodesAndWays().iterator().next();
    171                 if(selectedObject == null)
    172                         return null;
    173                 if(stopArea == null)
    174                         stopArea = new StopArea(selectedObject);
    175                 fromSelectedObject(stopArea);
    176                 return stopArea;
    177         }
     78    /**
     79     * Test, are transport types assigned to platforms
     80     *
     81     * @param platform Platform object
     82     * @return true, if transport types assigned to this platforms
     83     */
     84    public boolean testIsTransportTypeAssigned(OsmPrimitive platform) {
     85        String[] transportTypes = new String[] {OSMTags.BUS_TAG, OSMTags.TROLLEYBUS_TAG, OSMTags.SHARE_TAXI_TAG,
     86                OSMTags.TRAM_TAG, OSMTags.TRAIN_TAG};
     87        for (String transportType : transportTypes) {
     88            if (compareTag(platform, transportType, OSMTags.YES_TAG_VALUE))
     89                return true;
     90        }
     91        return false;
     92    }
     93
     94    /**
     95     * Setting of stop area from selected josm object
     96     *
     97     * @param selectedObject Selected josm object
     98     */
     99    public void fromSelectedObject(StopArea stopArea) {
     100        Collection<OsmPrimitive> selectedObjects = new ArrayList<OsmPrimitive>();
     101        selectedObjects.add(stopArea.selectedObject);
     102        for (Relation rel : OsmPrimitive.getParentRelations(selectedObjects)) {
     103            if (compareTag(rel, OSMTags.TYPE_TAG, OSMTags.PUBLIC_TRANSPORT_TAG)
     104                    && compareTag(rel, OSMTags.PUBLIC_TRANSPORT_TAG, OSMTags.STOP_AREA_TAG_VALUE)) {
     105                stopArea.stopAreaRelation = rel;
     106            }
     107            if (stopArea.stopAreaRelation != null)
     108                break;
     109        }
     110
     111        if (stopArea.stopAreaRelation != null) {
     112            parseTags(stopArea, stopArea.stopAreaRelation);
     113            parseTags(stopArea, stopArea.selectedObject);
     114            for (RelationMember member : stopArea.stopAreaRelation.getMembers()) {
     115                if (member.getMember() instanceof Node && compareTag(member.getMember(), OSMTags.PUBLIC_TRANSPORT_TAG,
     116                        OSMTags.STOP_POSITION_TAG_VALUE)) {
     117                    stopArea.isStopPointExists = true;
     118                    stopArea.stopPoints.add(member.getNode());
     119                } else if (compareTag(member.getMember(), OSMTags.PUBLIC_TRANSPORT_TAG, OSMTags.PLATFORM_TAG_VALUE)) {
     120                    stopArea.platforms.add(member.getMember());
     121                } else {
     122                    stopArea.otherMembers.add(member.getMember());
     123                }
     124                parseTags(stopArea, member.getMember());
     125            }
     126            if (!stopArea.platforms.contains(stopArea.selectedObject)) {
     127                parseTags(stopArea, stopArea.selectedObject);
     128                stopArea.platforms.add(stopArea.selectedObject);
     129            }
     130        } else {
     131            parseTags(stopArea, stopArea.selectedObject);
     132            stopArea.platforms.add(stopArea.selectedObject);
     133        }
     134        for (OsmPrimitive platform : stopArea.platforms) {
     135            if (testIsTransportTypeAssigned(platform)) {
     136                stopArea.isAssignTransportType = true;
     137                break;
     138            }
     139        }
     140        if (!(stopArea.isBus || stopArea.isTrolleybus || stopArea.isShareTaxi) && stopArea.selectedObject != null
     141                && (compareTag(stopArea.selectedObject, OSMTags.HIGHWAY_TAG, OSMTags.BUS_STOP_TAG_VALUE)
     142                        || stopArea.isBusStation)) {
     143            stopArea.isBus = true;
     144        }
     145    }
     146
     147    /**
     148     * Construct stop area object from selected JOSM object
     149     *
     150     * @param stopArea Original stop area object
     151     * @return Stop area objects with settings of selected JOSM object and included
     152     *         it stop area relation
     153     */
     154    @Override
     155    public StopArea performCustomizing(StopArea stopArea) {
     156        if (getCurrentDataSet() == null)
     157            return null;
     158        OsmPrimitive selectedObject = getCurrentDataSet().getSelectedNodesAndWays().iterator().next();
     159        if (selectedObject == null)
     160            return null;
     161        if (stopArea == null)
     162            stopArea = new StopArea(selectedObject);
     163        fromSelectedObject(stopArea);
     164        return stopArea;
     165    }
    178166
    179167}
  • applications/editors/josm/plugins/CustomizePublicTransportStop/src/ru/rodsoft/openstreetmap/josm/plugins/customizepublictransportstop/CustomizePublicTransportStopDialog.java

    r32840 r34156  
     1// License: GPL. For details, see LICENSE file.
    12package ru.rodsoft.openstreetmap.josm.plugins.customizepublictransportstop;
    23
     
    2425import org.openstreetmap.josm.Main;
    2526
    26 import ru.rodsoft.openstreetmap.josm.plugins.customizepublictransportstop.MessageBox;
    27 
    2827/**
     28 * Dialog for setting stop area properties
    2929 *
    3030 * @author Rodion Scherbakov
    31  * Dialog for setting stop area properties
    3231 */
    33 public class CustomizePublicTransportStopDialog implements ActionListener, ItemListener
    34 {
    35         private static final String CANCEL_COMMAND = "cancel";
    36         private static final String SAVE_COMMAND = "save";
    37         private static final String CANCEL_BUTTON_CAPTION = "Cancel";
    38         private static final String SAVE_BUTTON_CAPTION = "Save";
    39         private static final String AREA_CAPTION = "Area";
    40         private static final String COVER_CAPTION = "Cover";
    41         private static final String SHELDER_CAPTION = "Shelder";
    42         private static final String BENCH_CAPTION = "Bench";
    43         private static final String RAILWAY_STOP_CAPTION = "Railway stop";
    44         private static final String RAILWAY_STATION_CAPTION = "Railway station";
    45         private static final String TRAM_CAPTION = "Tram";
    46         private static final String TROLLEYBUS_CAPTION = "Trolleybus";
    47         private static final String SHARE_TAXI_CAPTION = "Share taxi";
    48         private static final String BUS_CAPTION = "Bus";
    49         private static final String BUS_STATION_CAPTION = "Bus station";
    50         private static final String ASSIGN_TRANSPORT_TYPE_CAPTION = "Assign transport type to platform";
    51         private static final String NETWORK_LEVEL_CAPTION = "Network level";
    52         private static final String OPERATOR_CAPTION = "Operator";
    53         private static final String NETWORK_CAPTION = "Network";
    54         private static final String NAME_EN_CAPTION = "Name (en.)";
    55         private static final String NAME_CAPTION = "Name";
    56         private static final String STOP_CUSTOMIZING_DIALOG_CAPTION = "Stop customizing";
    57         public static final String LONG_DISTANCE_NETWORK_CAPTION = "Long distance";
    58         public static final String REGIONAL_NETWORK_CAPTION = "Regional";
    59         public static final String COMMUTER_NETWORK_CAPTION = "Commuter";
    60         public static final String CITY_NETWORK_CAPTION = "City transport";
    61         public static final String HIGH_SPEED_NETWORK_CAPTION = "High speed";
    62        
    63         private String[] serviceCaptionStrings = { CITY_NETWORK_CAPTION, COMMUTER_NETWORK_CAPTION, REGIONAL_NETWORK_CAPTION, LONG_DISTANCE_NETWORK_CAPTION, HIGH_SPEED_NETWORK_CAPTION };
    64     private String[] serviceStrings = { OSMTags.CITY_NETWORK_TAG_VALUE, OSMTags.COMMUTER_NETWORK_TAG_VALUE,
    65                                                                         OSMTags.REGIONAL_NETWORK_TAG_VALUE, OSMTags.LONG_DISTANCE_NETWORK_TAG_VALUE, OSMTags.HIGH_SPEED_NETWORK_TAG_VALUE };
     32public class CustomizePublicTransportStopDialog implements ActionListener, ItemListener {
     33    private static final String CANCEL_COMMAND = "cancel";
     34    private static final String SAVE_COMMAND = "save";
     35    private static final String CANCEL_BUTTON_CAPTION = "Cancel";
     36    private static final String SAVE_BUTTON_CAPTION = "Save";
     37    private static final String AREA_CAPTION = "Area";
     38    private static final String COVER_CAPTION = "Cover";
     39    private static final String SHELDER_CAPTION = "Shelder";
     40    private static final String BENCH_CAPTION = "Bench";
     41    private static final String RAILWAY_STOP_CAPTION = "Railway stop";
     42    private static final String RAILWAY_STATION_CAPTION = "Railway station";
     43    private static final String TRAM_CAPTION = "Tram";
     44    private static final String TROLLEYBUS_CAPTION = "Trolleybus";
     45    private static final String SHARE_TAXI_CAPTION = "Share taxi";
     46    private static final String BUS_CAPTION = "Bus";
     47    private static final String BUS_STATION_CAPTION = "Bus station";
     48    private static final String ASSIGN_TRANSPORT_TYPE_CAPTION = "Assign transport type to platform";
     49    private static final String NETWORK_LEVEL_CAPTION = "Network level";
     50    private static final String OPERATOR_CAPTION = "Operator";
     51    private static final String NETWORK_CAPTION = "Network";
     52    private static final String NAME_EN_CAPTION = "Name (en.)";
     53    private static final String NAME_CAPTION = "Name";
     54    private static final String STOP_CUSTOMIZING_DIALOG_CAPTION = "Stop customizing";
     55    public static final String LONG_DISTANCE_NETWORK_CAPTION = "Long distance";
     56    public static final String REGIONAL_NETWORK_CAPTION = "Regional";
     57    public static final String COMMUTER_NETWORK_CAPTION = "Commuter";
     58    public static final String CITY_NETWORK_CAPTION = "City transport";
     59    public static final String HIGH_SPEED_NETWORK_CAPTION = "High speed";
     60
     61    private String[] serviceCaptionStrings = {CITY_NETWORK_CAPTION, COMMUTER_NETWORK_CAPTION, REGIONAL_NETWORK_CAPTION,
     62            LONG_DISTANCE_NETWORK_CAPTION, HIGH_SPEED_NETWORK_CAPTION};
     63    private String[] serviceStrings = {OSMTags.CITY_NETWORK_TAG_VALUE, OSMTags.COMMUTER_NETWORK_TAG_VALUE,
     64            OSMTags.REGIONAL_NETWORK_TAG_VALUE, OSMTags.LONG_DISTANCE_NETWORK_TAG_VALUE,
     65            OSMTags.HIGH_SPEED_NETWORK_TAG_VALUE};
    6666
    6767    private JDialog jDialog = null;
    68         private JTextField textFieldName = null;
    69         private JTextField textFieldNameEn;
    70         private JTextField textFieldNetwork;
    71         private JTextField textFieldOperator;
    72         private JComboBox<String> comboBoxService;
    73         private JCheckBox checkBoxIsBus;
    74         private JCheckBox checkBoxIsTrolleybus;
    75         private JCheckBox checkBoxIsShareTaxi;
    76         private JCheckBox checkBoxIsBusStation;
    77         private JCheckBox checkBoxIsAssignTransportType;
    78         private JCheckBox checkBoxIsTram;
    79         private JCheckBox checkBoxIsTrainStation;
    80         private JCheckBox checkBoxIsTrainStop;
    81         private JCheckBox checkBoxIsBench;
    82         private JCheckBox checkBoxIsShelder;
    83         private JCheckBox checkBoxIsCover;
    84         private JCheckBox checkBoxIsArea;
    85 
    86         /**
    87          * Stop area
    88          */
    89         private StopArea stopArea;
    90         /**
    91          * Customize stop action object for callback
    92          */
    93         private CustomizeStopAction customizeStopAction;
    94        
    95         /**
    96          * Map of check boxes
    97          */
    98         private HashMap<JCheckBox, Boolean> checkBoxValues = new HashMap<JCheckBox,Boolean>();
    99        
    100         /**
    101          * Previous stop name
    102          */
    103         private static String previousName;
    104         /**
    105          * Previous english stop name
    106          */
    107         private static String previousNameEn;   
    108         /**
    109          * Network name at previous call
    110          */
    111         private static String previousNetwork = null;
    112         /**
    113          * Operator name at previous call
    114          */
    115         private static String previousOperator = null;
    116        
    117         /**
    118          * Reference to dialog object
    119          */
    120         private static CustomizePublicTransportStopDialog customizePublicTransportStopDialogInstance;
    121        
    122         /**
    123          * Construct dialog and fill controls
    124          * @param customizeStopAction Stop area customizing action
    125          * @param stopArea Stop area
    126          * @return Reference to dialog
    127          */
    128         public static CustomizePublicTransportStopDialog showCustomizePublicTransportStopDialog(CustomizeStopAction customizeStopAction, StopArea stopArea)
    129         {
    130                 if(customizePublicTransportStopDialogInstance == null)
    131                 {
    132                         customizePublicTransportStopDialogInstance = new CustomizePublicTransportStopDialog(customizeStopAction, stopArea);
    133                 }
    134                 else
    135                 {
    136                         customizePublicTransportStopDialogInstance.setCustomizeStopAction(customizeStopAction);
    137                         customizePublicTransportStopDialogInstance.setStopArea(stopArea);
    138                 }
    139                 customizePublicTransportStopDialogInstance.setVisible(true);
    140                 return customizePublicTransportStopDialogInstance;
    141         }
    142        
    143         /**
    144          * Constructor of dialog
    145          */
    146         public CustomizePublicTransportStopDialog()
    147         {
    148             Frame frame = JOptionPane.getFrameForComponent(Main.parent);
    149             jDialog = new JDialog(frame, tr(STOP_CUSTOMIZING_DIALOG_CAPTION), false);
    150             JPanel contentPane = new JPanel();
    151             GridBagLayout gridbag = new GridBagLayout();
    152             contentPane.setLayout(gridbag);
    153             GridBagConstraints layoutCons = new GridBagConstraints();
    154             JLabel label = new JLabel(tr(NAME_CAPTION));
    155             layoutCons.gridx = 0;
    156             layoutCons.gridy = 0;
    157             layoutCons.weightx = 0.5;
    158             layoutCons.fill = GridBagConstraints.HORIZONTAL;
    159             gridbag.setConstraints(label, layoutCons);
    160             contentPane.add(label);
    161            
    162             textFieldName = new JTextField("", 25);
    163             layoutCons.gridx = 1;
    164             layoutCons.gridy = 0;
    165             layoutCons.weightx = 0.5;
    166             layoutCons.fill = GridBagConstraints.HORIZONTAL;
    167             gridbag.setConstraints(textFieldName, layoutCons);
    168             contentPane.add(textFieldName);
    169        
    170             JLabel labelNameEn = new JLabel(tr(NAME_EN_CAPTION));
    171             layoutCons.gridx = 0;
    172             layoutCons.gridy = 1;
    173             layoutCons.weightx = 0.5;
    174             layoutCons.fill = GridBagConstraints.HORIZONTAL;
    175             gridbag.setConstraints(labelNameEn, layoutCons);
    176             contentPane.add(labelNameEn);
    177 
    178             textFieldNameEn = new JTextField("", 25);
    179             layoutCons.gridx = 1;
    180             layoutCons.gridy = 1;
    181             layoutCons.weightx = 0.5;
    182             layoutCons.fill = GridBagConstraints.HORIZONTAL;
    183             gridbag.setConstraints(textFieldNameEn, layoutCons);
    184             contentPane.add(textFieldNameEn);
    185 
    186             JLabel labelNetwork = new JLabel(tr(NETWORK_CAPTION));
    187             layoutCons.gridx = 0;
    188             layoutCons.gridy = 2;
    189             layoutCons.weightx = 0.5;
    190             layoutCons.fill = GridBagConstraints.HORIZONTAL;
    191             gridbag.setConstraints(labelNetwork, layoutCons);
    192             contentPane.add(labelNetwork);
    193 
    194             textFieldNetwork = new JTextField("", 25);
    195             layoutCons.gridx = 1;
    196             layoutCons.gridy = 2;
    197             layoutCons.weightx = 0.5;
    198             layoutCons.fill = GridBagConstraints.HORIZONTAL;
    199             gridbag.setConstraints(textFieldNetwork, layoutCons);
    200             contentPane.add(textFieldNetwork);
    201 
    202             JLabel labelOperator = new JLabel(tr(OPERATOR_CAPTION));
    203             layoutCons.gridx = 0;
    204             layoutCons.gridy = 3;
    205             layoutCons.weightx = 0.5;
    206             layoutCons.fill = GridBagConstraints.HORIZONTAL;
    207             gridbag.setConstraints(labelOperator, layoutCons);
    208             contentPane.add(labelOperator);
    209 
    210             textFieldOperator = new JTextField("", 25);
    211             layoutCons.gridx = 1;
    212             layoutCons.gridy = 3;
    213             layoutCons.weightx = 0.5;
    214             layoutCons.fill = GridBagConstraints.HORIZONTAL;
    215             gridbag.setConstraints(textFieldOperator, layoutCons);
    216             contentPane.add(textFieldOperator);
    217        
    218             JLabel labelService = new JLabel(tr(NETWORK_LEVEL_CAPTION));
    219             layoutCons.gridx = 0;
    220             layoutCons.gridy = 4;
    221             layoutCons.weightx = 0.5;
    222             layoutCons.fill = GridBagConstraints.HORIZONTAL;
    223             gridbag.setConstraints(labelService, layoutCons);
    224             contentPane.add(labelService);
    225            
    226             String[] serviceTransStrings = new String[serviceCaptionStrings.length];
    227             for(int i = 0; i < serviceCaptionStrings.length; i++)
    228                 serviceTransStrings[i]  = tr(serviceCaptionStrings[i]);
    229             comboBoxService = new JComboBox<String>(serviceTransStrings);
    230             comboBoxService.setSelectedIndex(0);
    231             layoutCons.gridx = 1;
    232             layoutCons.gridy = 4;
    233             layoutCons.weightx = 0.5;
    234             layoutCons.fill = GridBagConstraints.HORIZONTAL;
    235             gridbag.setConstraints(comboBoxService, layoutCons);
     68    private JTextField textFieldName = null;
     69    private JTextField textFieldNameEn;
     70    private JTextField textFieldNetwork;
     71    private JTextField textFieldOperator;
     72    private JComboBox<String> comboBoxService;
     73    private JCheckBox checkBoxIsBus;
     74    private JCheckBox checkBoxIsTrolleybus;
     75    private JCheckBox checkBoxIsShareTaxi;
     76    private JCheckBox checkBoxIsBusStation;
     77    private JCheckBox checkBoxIsAssignTransportType;
     78    private JCheckBox checkBoxIsTram;
     79    private JCheckBox checkBoxIsTrainStation;
     80    private JCheckBox checkBoxIsTrainStop;
     81    private JCheckBox checkBoxIsBench;
     82    private JCheckBox checkBoxIsShelder;
     83    private JCheckBox checkBoxIsCover;
     84    private JCheckBox checkBoxIsArea;
     85
     86    /**
     87     * Stop area
     88     */
     89    private StopArea stopArea;
     90    /**
     91     * Customize stop action object for callback
     92     */
     93    private CustomizeStopAction customizeStopAction;
     94
     95    /**
     96     * Map of check boxes
     97     */
     98    private HashMap<JCheckBox, Boolean> checkBoxValues = new HashMap<JCheckBox, Boolean>();
     99
     100    /**
     101     * Previous stop name
     102     */
     103    private static String previousName;
     104    /**
     105     * Previous english stop name
     106     */
     107    private static String previousNameEn;
     108    /**
     109     * Network name at previous call
     110     */
     111    private static String previousNetwork = null;
     112    /**
     113     * Operator name at previous call
     114     */
     115    private static String previousOperator = null;
     116
     117    /**
     118     * Reference to dialog object
     119     */
     120    private static CustomizePublicTransportStopDialog customizePublicTransportStopDialogInstance;
     121
     122    /**
     123     * Construct dialog and fill controls
     124     *
     125     * @param customizeStopAction Stop area customizing action
     126     * @param stopArea Stop area
     127     * @return Reference to dialog
     128     */
     129    public static CustomizePublicTransportStopDialog showCustomizePublicTransportStopDialog(
     130            CustomizeStopAction customizeStopAction, StopArea stopArea) {
     131        if (customizePublicTransportStopDialogInstance == null) {
     132            customizePublicTransportStopDialogInstance = new CustomizePublicTransportStopDialog(customizeStopAction,
     133                    stopArea);
     134        } else {
     135            customizePublicTransportStopDialogInstance.setCustomizeStopAction(customizeStopAction);
     136            customizePublicTransportStopDialogInstance.setStopArea(stopArea);
     137        }
     138        customizePublicTransportStopDialogInstance.setVisible(true);
     139        return customizePublicTransportStopDialogInstance;
     140    }
     141
     142    /**
     143     * Constructor of dialog
     144     */
     145    public CustomizePublicTransportStopDialog() {
     146        Frame frame = JOptionPane.getFrameForComponent(Main.parent);
     147        jDialog = new JDialog(frame, tr(STOP_CUSTOMIZING_DIALOG_CAPTION), false);
     148        JPanel contentPane = createContentPane();
     149
     150        jDialog.add(contentPane);
     151
     152        jDialog.pack();
     153        jDialog.setLocationRelativeTo(frame);
     154    }
     155
     156    private JPanel createContentPane() {
     157        JPanel contentPane = new JPanel();
     158        GridBagLayout gridbag = new GridBagLayout();
     159        contentPane.setLayout(gridbag);
     160        GridBagConstraints layoutCons = new GridBagConstraints();
     161        JLabel label = new JLabel(tr(NAME_CAPTION));
     162        layoutCons.gridx = 0;
     163        layoutCons.gridy = 0;
     164        layoutCons.weightx = 0.5;
     165        layoutCons.fill = GridBagConstraints.HORIZONTAL;
     166        gridbag.setConstraints(label, layoutCons);
     167        contentPane.add(label);
     168
     169        textFieldName = new JTextField("", 25);
     170        layoutCons.gridx = 1;
     171        layoutCons.gridy = 0;
     172        layoutCons.weightx = 0.5;
     173        layoutCons.fill = GridBagConstraints.HORIZONTAL;
     174        gridbag.setConstraints(textFieldName, layoutCons);
     175        contentPane.add(textFieldName);
     176
     177        JLabel labelNameEn = new JLabel(tr(NAME_EN_CAPTION));
     178        layoutCons.gridx = 0;
     179        layoutCons.gridy = 1;
     180        layoutCons.weightx = 0.5;
     181        layoutCons.fill = GridBagConstraints.HORIZONTAL;
     182        gridbag.setConstraints(labelNameEn, layoutCons);
     183        contentPane.add(labelNameEn);
     184
     185        textFieldNameEn = new JTextField("", 25);
     186        layoutCons.gridx = 1;
     187        layoutCons.gridy = 1;
     188        layoutCons.weightx = 0.5;
     189        layoutCons.fill = GridBagConstraints.HORIZONTAL;
     190        gridbag.setConstraints(textFieldNameEn, layoutCons);
     191        contentPane.add(textFieldNameEn);
     192
     193        JLabel labelNetwork = new JLabel(tr(NETWORK_CAPTION));
     194        layoutCons.gridx = 0;
     195        layoutCons.gridy = 2;
     196        layoutCons.weightx = 0.5;
     197        layoutCons.fill = GridBagConstraints.HORIZONTAL;
     198        gridbag.setConstraints(labelNetwork, layoutCons);
     199        contentPane.add(labelNetwork);
     200
     201        textFieldNetwork = new JTextField("", 25);
     202        layoutCons.gridx = 1;
     203        layoutCons.gridy = 2;
     204        layoutCons.weightx = 0.5;
     205        layoutCons.fill = GridBagConstraints.HORIZONTAL;
     206        gridbag.setConstraints(textFieldNetwork, layoutCons);
     207        contentPane.add(textFieldNetwork);
     208
     209        JLabel labelOperator = new JLabel(tr(OPERATOR_CAPTION));
     210        layoutCons.gridx = 0;
     211        layoutCons.gridy = 3;
     212        layoutCons.weightx = 0.5;
     213        layoutCons.fill = GridBagConstraints.HORIZONTAL;
     214        gridbag.setConstraints(labelOperator, layoutCons);
     215        contentPane.add(labelOperator);
     216
     217        textFieldOperator = new JTextField("", 25);
     218        layoutCons.gridx = 1;
     219        layoutCons.gridy = 3;
     220        layoutCons.weightx = 0.5;
     221        layoutCons.fill = GridBagConstraints.HORIZONTAL;
     222        gridbag.setConstraints(textFieldOperator, layoutCons);
     223        contentPane.add(textFieldOperator);
     224
     225        JLabel labelService = new JLabel(tr(NETWORK_LEVEL_CAPTION));
     226        layoutCons.gridx = 0;
     227        layoutCons.gridy = 4;
     228        layoutCons.weightx = 0.5;
     229        layoutCons.fill = GridBagConstraints.HORIZONTAL;
     230        gridbag.setConstraints(labelService, layoutCons);
     231        contentPane.add(labelService);
     232
     233        String[] serviceTransStrings = new String[serviceCaptionStrings.length];
     234        for (int i = 0; i < serviceCaptionStrings.length; i++) {
     235            serviceTransStrings[i] = tr(serviceCaptionStrings[i]);
     236        }
     237        comboBoxService = new JComboBox<String>(serviceTransStrings);
     238        comboBoxService.setSelectedIndex(0);
     239        layoutCons.gridx = 1;
     240        layoutCons.gridy = 4;
     241        layoutCons.weightx = 0.5;
     242        layoutCons.fill = GridBagConstraints.HORIZONTAL;
     243        gridbag.setConstraints(comboBoxService, layoutCons);
    236244        contentPane.add(comboBoxService);
    237            
    238             checkBoxIsBus = new JCheckBox(tr(BUS_CAPTION));
    239             layoutCons.gridx = 0;
    240             layoutCons.gridy = 5;
    241             layoutCons.weightx = 0.5;
    242             layoutCons.fill = GridBagConstraints.HORIZONTAL;
    243             gridbag.setConstraints(checkBoxIsBus, layoutCons);
    244             checkBoxIsBus.addItemListener(this);
    245             contentPane.add(checkBoxIsBus);
    246 
    247             checkBoxIsShareTaxi = new JCheckBox(tr(SHARE_TAXI_CAPTION));
    248             layoutCons.gridx = 1;
    249             layoutCons.gridy = 5;
    250             layoutCons.weightx = 0.5;
    251             layoutCons.fill = GridBagConstraints.HORIZONTAL;
    252             gridbag.setConstraints(checkBoxIsShareTaxi, layoutCons);
    253             checkBoxIsShareTaxi.addItemListener(this);
    254             contentPane.add(checkBoxIsShareTaxi);
    255 
    256             checkBoxIsTrolleybus = new JCheckBox(tr(TROLLEYBUS_CAPTION));
    257             layoutCons.gridx = 0;
    258             layoutCons.gridy = 6;
    259             layoutCons.weightx = 0.5;
    260             layoutCons.fill = GridBagConstraints.HORIZONTAL;
    261             gridbag.setConstraints(checkBoxIsTrolleybus, layoutCons);
    262             checkBoxIsTrolleybus.addItemListener(this);
    263             contentPane.add(checkBoxIsTrolleybus);
    264            
    265             checkBoxIsBusStation = new JCheckBox(tr(BUS_STATION_CAPTION));
    266             layoutCons.gridx = 1;
    267             layoutCons.gridy = 6;
    268             layoutCons.weightx = 0.5;
    269             layoutCons.fill = GridBagConstraints.HORIZONTAL;
    270             gridbag.setConstraints(checkBoxIsBusStation, layoutCons);
    271             checkBoxIsBusStation.addItemListener(this);
    272             contentPane.add(checkBoxIsBusStation);
    273 
    274             checkBoxIsTram = new JCheckBox(tr(TRAM_CAPTION));
    275             layoutCons.gridx = 0;
    276             layoutCons.gridy = 7;
    277             layoutCons.weightx = 0.5;
    278             layoutCons.fill = GridBagConstraints.HORIZONTAL;
    279             gridbag.setConstraints(checkBoxIsTram, layoutCons);
    280             checkBoxIsTram.addItemListener(this);
    281             contentPane.add(checkBoxIsTram);
    282 
    283             checkBoxIsTrainStation = new JCheckBox(tr(RAILWAY_STATION_CAPTION));
    284             layoutCons.gridx = 0;
    285             layoutCons.gridy = 8;
    286             layoutCons.weightx = 0.5;
    287             layoutCons.fill = GridBagConstraints.HORIZONTAL;
    288             gridbag.setConstraints(checkBoxIsTrainStation, layoutCons);
    289             checkBoxIsTrainStation.addItemListener(this);
    290             contentPane.add(checkBoxIsTrainStation);
    291 
    292             checkBoxIsTrainStop = new JCheckBox(tr(RAILWAY_STOP_CAPTION));
    293             layoutCons.gridx = 1;
    294             layoutCons.gridy = 8;
    295             layoutCons.weightx = 0.5;
    296             layoutCons.fill = GridBagConstraints.HORIZONTAL;
    297             gridbag.setConstraints(checkBoxIsTrainStop, layoutCons);
    298             checkBoxIsTrainStop.addItemListener(this);
    299             contentPane.add(checkBoxIsTrainStop);
    300 
    301             checkBoxIsAssignTransportType = new JCheckBox(tr(ASSIGN_TRANSPORT_TYPE_CAPTION));
    302             layoutCons.gridx = 0;
    303             layoutCons.gridy = 9;
    304             layoutCons.weightx = 0.5;
    305             layoutCons.fill = GridBagConstraints.HORIZONTAL;
    306             gridbag.setConstraints(checkBoxIsAssignTransportType, layoutCons);
    307             checkBoxIsAssignTransportType.addItemListener(this);
    308             contentPane.add(checkBoxIsAssignTransportType);
    309 
    310             checkBoxIsBench = new JCheckBox(tr(BENCH_CAPTION));
    311             layoutCons.gridx = 0;
    312             layoutCons.gridy = 10;
    313             layoutCons.weightx = 0.5;
    314             layoutCons.fill = GridBagConstraints.HORIZONTAL;
    315             gridbag.setConstraints(checkBoxIsBench, layoutCons);
    316             checkBoxIsBench.addItemListener(this);
    317             contentPane.add(checkBoxIsBench);
    318 
    319             checkBoxIsShelder = new JCheckBox(tr(SHELDER_CAPTION));
    320             layoutCons.gridx = 1;
    321             layoutCons.gridy = 10;
    322             layoutCons.weightx = 0.5;
    323             layoutCons.fill = GridBagConstraints.HORIZONTAL;
    324             gridbag.setConstraints(checkBoxIsShelder, layoutCons);
    325             checkBoxIsShelder.addItemListener(this);
    326             contentPane.add(checkBoxIsShelder);
    327 
    328             checkBoxIsCover = new JCheckBox(tr(COVER_CAPTION));
    329             layoutCons.gridx = 0;
    330             layoutCons.gridy = 11;
    331             layoutCons.weightx = 0.5;
    332             layoutCons.fill = GridBagConstraints.HORIZONTAL;
    333             gridbag.setConstraints(checkBoxIsCover, layoutCons);
    334             checkBoxIsCover.addItemListener(this);
    335             contentPane.add(checkBoxIsCover);
    336            
    337             checkBoxIsArea = new JCheckBox(tr(AREA_CAPTION));
    338             layoutCons.gridx = 1;
    339             layoutCons.gridy = 11;
    340             layoutCons.weightx = 0.5;
    341             layoutCons.fill = GridBagConstraints.HORIZONTAL;
    342             gridbag.setConstraints(checkBoxIsArea, layoutCons);
    343             checkBoxIsArea.addItemListener(this);
    344             contentPane.add(checkBoxIsArea);
    345 
    346             JButton buttonSave = new JButton(tr(SAVE_BUTTON_CAPTION));
    347             layoutCons.gridx = 0;
    348             layoutCons.gridy = 12;
    349             layoutCons.weightx = 0.5;
    350             layoutCons.fill = GridBagConstraints.HORIZONTAL;
    351             layoutCons.insets = new Insets(10, 0 , 0, 0);
    352             gridbag.setConstraints(buttonSave, layoutCons);
    353             buttonSave.setActionCommand(SAVE_COMMAND);
    354             buttonSave.addActionListener(this);
    355             contentPane.add(buttonSave);
    356            
    357             JButton buttonCancel = new JButton(tr(CANCEL_BUTTON_CAPTION));
    358             layoutCons.gridx = 1;
    359             layoutCons.gridy = 12;
    360             layoutCons.weightx = 0.5;
    361             layoutCons.fill = GridBagConstraints.LINE_START;
    362             layoutCons.insets = new Insets(10, 0 , 0, 0);
    363             gridbag.setConstraints(buttonCancel, layoutCons);
    364             buttonCancel.setActionCommand(CANCEL_COMMAND);
    365             buttonCancel.addActionListener(this);
    366             contentPane.add(buttonCancel);
    367 
    368             jDialog.add(contentPane);
    369 
    370             jDialog.pack();
    371             jDialog.setLocationRelativeTo(frame);
    372         }
    373        
    374         /**
    375          * Constructor of dialog with filling of controls
    376          * @param customizeStopAction Stop area customizing action
    377          * @param stopArea Stop area
    378          */
    379         public CustomizePublicTransportStopDialog(CustomizeStopAction customizeStopAction, StopArea stopArea)
    380         {
    381                 this();
    382                 setValues(stopArea);
    383                 this.customizeStopAction = customizeStopAction;
    384                 this.stopArea = stopArea;
    385         }
    386        
    387         /**
    388          * Return stop area
    389          * @return Stop area
    390          */
    391         public StopArea getStopArea()
    392         {
    393                 return stopArea;
    394         }
    395        
    396         /**
    397          * Set stop area and fill controls
    398          * @param newStopArea Stop area
    399          */
    400         public void setStopArea(StopArea newStopArea)
    401         {
    402                 setValues(newStopArea);
    403                 this.stopArea = newStopArea;
    404         }
    405        
    406         /**
    407          * Returns stop area customizing action
    408          * @return Stop area customizing action
    409          */
    410         public CustomizeStopAction getCustomizeStopAction()
    411         {
    412                 return customizeStopAction;
    413         }
    414        
    415         /**
    416          * Set stop area customizing action
    417          * @param newCustomizeStopAction Stop area customizing action
    418          */
    419         public void setCustomizeStopAction(CustomizeStopAction newCustomizeStopAction)
    420         {
    421                 customizeStopAction = newCustomizeStopAction;
    422         }
    423        
    424         /**
    425          * Set value in check boxes map
    426          * @param checkBox Check box
    427          * @param value Value of check box
    428          */
    429         public void setCheckBoxValue(JCheckBox checkBox, Boolean value)
    430         {
    431                 checkBoxValues.put(checkBox, value);
    432                 checkBox.setSelected(value);
    433         }
    434        
    435         /**
    436          * Returns value of check box
    437          * @param checkBox Check box
    438          * @return Value of check box
    439          */
    440         public Boolean getCheckBoxValue(JCheckBox checkBox)
    441         {
    442                 try
    443                 {
    444                         if(checkBoxValues.containsKey(checkBox))
    445                         {
    446                                 return checkBoxValues.get(checkBox);
    447                         }
    448                         return false;
    449                 }
    450                 catch(Exception ex)
    451                 {
    452                         MessageBox.ok(ex.getMessage());
    453                 }
    454                 return false;
    455         }
    456        
    457         /**
    458          * Callback method for check boxes
    459          * Set values in check boxes map
    460          */
    461         @Override
    462         public void itemStateChanged(ItemEvent event)
    463         {
    464                 JCheckBox checkBox = (JCheckBox)event.getSource();
    465                 if(event.getStateChange() == ItemEvent.DESELECTED)
    466                 {
    467                         checkBoxValues.put(checkBox, false);
    468                 }
    469                 else
    470                         if(event.getStateChange() == ItemEvent.SELECTED)
    471                         {
    472                                 checkBoxValues.put(checkBox, true);
    473                         }
    474         }
    475        
    476         /**
    477          * Show or hide dialog
    478          * @param isVisible Flag of dialog visibility
    479          */
    480         public void setVisible(Boolean isVisible)
    481         {
    482                 if(jDialog != null)
    483                         jDialog.setVisible(isVisible);
    484         }
    485        
    486         /**
    487          * Get index of network level
    488          * @param service Network level name
    489          * @return Index of network level
    490          */
    491         private int getServiceIndex(String service)
    492         {
    493                 for(int i = 0; i < serviceStrings.length; i++)
    494                 {
    495                         if(serviceStrings[i].equals(service))
    496                         {
    497                                 return i;
    498                         }
    499                 }
    500                 return 0;
    501         }
    502        
    503         /**
    504          * Setting values of controls from stop area
    505          * @param stopArea Stop area
    506          */
    507         public void setValues(StopArea stopArea)
    508         {
    509                 if(stopArea == null)
    510                         return;
    511                 if(stopArea.name != null)
    512                         textFieldName.setText(stopArea.name);
    513                 else
    514                         if(previousName != null)
    515                                 textFieldName.setText(previousName);
    516                 if(stopArea.nameEn != null)
    517                         textFieldNameEn.setText(stopArea.nameEn);
    518                 else
    519                         if(previousNameEn != null)
    520                                 textFieldNameEn.setText(previousNameEn);
    521                 if(stopArea.network != null)                   
    522                         textFieldNetwork.setText(stopArea.network);
    523                 else
    524                         if(previousNetwork != null)
    525                                 textFieldNetwork.setText(previousNetwork);
    526                 if(stopArea.operator != null)
    527                         textFieldOperator.setText(stopArea.operator);
    528                 else
    529                         if(previousOperator != null)
    530                                 textFieldOperator.setText(previousOperator);
    531                 comboBoxService.setSelectedIndex(getServiceIndex(stopArea.service));
    532                 setCheckBoxValue(checkBoxIsBus, stopArea.isBus);
    533                 setCheckBoxValue(checkBoxIsShareTaxi, stopArea.isShareTaxi);
    534                 setCheckBoxValue(checkBoxIsTrolleybus, stopArea.isTrolleybus);
    535                 setCheckBoxValue(checkBoxIsBusStation, stopArea.isBusStation);
    536                 setCheckBoxValue(checkBoxIsAssignTransportType, stopArea.isAssignTransportType);               
    537                 setCheckBoxValue(checkBoxIsTram, stopArea.isTram);
    538                 setCheckBoxValue(checkBoxIsTrainStation, stopArea.isTrainStation);
    539                 setCheckBoxValue(checkBoxIsTrainStop, stopArea.isTrainStation);
    540                 setCheckBoxValue(checkBoxIsTrainStop, stopArea.isTrainStop);
    541                 setCheckBoxValue(checkBoxIsBench, stopArea.isBench);
    542                 setCheckBoxValue(checkBoxIsShelder, stopArea.isShelter);
    543                 setCheckBoxValue(checkBoxIsCover, stopArea.isCovered);         
    544                 setCheckBoxValue(checkBoxIsArea, stopArea.isArea);             
    545         }
    546        
    547         /**
    548          * Returns text box value or null
    549          * @param textField Text box
    550          * @return Text box value or null
    551          */
    552         public String getTextFromControl(JTextField textField)
    553         {
    554                 if(textField.getText().isEmpty())
    555                         return null;
    556                 return textField.getText();
    557         }
    558        
    559         /**
    560          * Load values from controls and saving in stop area fields
    561          * @return Stop area
    562          */
    563         public StopArea saveValues()
    564         {
    565                 StopArea stopArea = this.stopArea;
    566                 try
    567                 {
    568                         if(stopArea == null)
    569                                 stopArea = new StopArea();
    570                         stopArea.name = getTextFromControl(textFieldName);
    571                         previousName = stopArea.name;
    572                         stopArea.nameEn = getTextFromControl(textFieldNameEn);
    573                         previousNameEn = stopArea.nameEn;
    574                         stopArea.network = getTextFromControl(textFieldNetwork);
    575                         previousNetwork = stopArea.network;
    576                         stopArea.operator = getTextFromControl(textFieldOperator);
    577                         previousOperator = stopArea.operator;
    578                         stopArea.service = serviceStrings[comboBoxService.getSelectedIndex()];
    579                         stopArea.isBus = getCheckBoxValue(checkBoxIsBus);
    580                         stopArea.isShareTaxi = getCheckBoxValue(checkBoxIsShareTaxi);
    581                         stopArea.isTrolleybus = getCheckBoxValue(checkBoxIsTrolleybus);
    582                         stopArea.isBusStation = getCheckBoxValue(checkBoxIsBusStation);
    583                         stopArea.isAssignTransportType = getCheckBoxValue(checkBoxIsAssignTransportType);
    584                         stopArea.isTram = getCheckBoxValue(checkBoxIsTram);
    585                         stopArea.isTrainStation = getCheckBoxValue(checkBoxIsTrainStation);
    586                         stopArea.isTrainStop = getCheckBoxValue(checkBoxIsTrainStop);
    587                         stopArea.isBench = getCheckBoxValue(checkBoxIsBench);
    588                         stopArea.isShelter = getCheckBoxValue(checkBoxIsShelder);
    589                         stopArea.isCovered = getCheckBoxValue(checkBoxIsCover);
    590                         stopArea.isArea = getCheckBoxValue(checkBoxIsArea);
    591                 }
    592                 catch(Exception ex)
    593                 {
    594                         MessageBox.ok(ex.getMessage());
    595                 }
    596                 return stopArea;
    597         }
    598        
    599         /**
    600          * Callback method for buttons event
    601          */
    602         public void actionPerformed(ActionEvent event)
    603         {
    604                 if(SAVE_COMMAND.equals(event.getActionCommand()))
    605                 {
    606                         setVisible(false);
    607                         if(customizeStopAction != null)
    608                         {
    609                                 StopArea stopArea = saveValues();
    610                                 customizeStopAction.performCustomizing(stopArea);
    611                         }
    612                 }
    613                 else
    614                 {
    615                         setVisible(false);
    616                 }
    617         }
     245
     246        checkBoxIsBus = new JCheckBox(tr(BUS_CAPTION));
     247        layoutCons.gridx = 0;
     248        layoutCons.gridy = 5;
     249        layoutCons.weightx = 0.5;
     250        layoutCons.fill = GridBagConstraints.HORIZONTAL;
     251        gridbag.setConstraints(checkBoxIsBus, layoutCons);
     252        checkBoxIsBus.addItemListener(this);
     253        contentPane.add(checkBoxIsBus);
     254
     255        checkBoxIsShareTaxi = new JCheckBox(tr(SHARE_TAXI_CAPTION));
     256        layoutCons.gridx = 1;
     257        layoutCons.gridy = 5;
     258        layoutCons.weightx = 0.5;
     259        layoutCons.fill = GridBagConstraints.HORIZONTAL;
     260        gridbag.setConstraints(checkBoxIsShareTaxi, layoutCons);
     261        checkBoxIsShareTaxi.addItemListener(this);
     262        contentPane.add(checkBoxIsShareTaxi);
     263
     264        checkBoxIsTrolleybus = new JCheckBox(tr(TROLLEYBUS_CAPTION));
     265        layoutCons.gridx = 0;
     266        layoutCons.gridy = 6;
     267        layoutCons.weightx = 0.5;
     268        layoutCons.fill = GridBagConstraints.HORIZONTAL;
     269        gridbag.setConstraints(checkBoxIsTrolleybus, layoutCons);
     270        checkBoxIsTrolleybus.addItemListener(this);
     271        contentPane.add(checkBoxIsTrolleybus);
     272
     273        checkBoxIsBusStation = new JCheckBox(tr(BUS_STATION_CAPTION));
     274        layoutCons.gridx = 1;
     275        layoutCons.gridy = 6;
     276        layoutCons.weightx = 0.5;
     277        layoutCons.fill = GridBagConstraints.HORIZONTAL;
     278        gridbag.setConstraints(checkBoxIsBusStation, layoutCons);
     279        checkBoxIsBusStation.addItemListener(this);
     280        contentPane.add(checkBoxIsBusStation);
     281
     282        checkBoxIsTram = new JCheckBox(tr(TRAM_CAPTION));
     283        layoutCons.gridx = 0;
     284        layoutCons.gridy = 7;
     285        layoutCons.weightx = 0.5;
     286        layoutCons.fill = GridBagConstraints.HORIZONTAL;
     287        gridbag.setConstraints(checkBoxIsTram, layoutCons);
     288        checkBoxIsTram.addItemListener(this);
     289        contentPane.add(checkBoxIsTram);
     290
     291        checkBoxIsTrainStation = new JCheckBox(tr(RAILWAY_STATION_CAPTION));
     292        layoutCons.gridx = 0;
     293        layoutCons.gridy = 8;
     294        layoutCons.weightx = 0.5;
     295        layoutCons.fill = GridBagConstraints.HORIZONTAL;
     296        gridbag.setConstraints(checkBoxIsTrainStation, layoutCons);
     297        checkBoxIsTrainStation.addItemListener(this);
     298        contentPane.add(checkBoxIsTrainStation);
     299
     300        checkBoxIsTrainStop = new JCheckBox(tr(RAILWAY_STOP_CAPTION));
     301        layoutCons.gridx = 1;
     302        layoutCons.gridy = 8;
     303        layoutCons.weightx = 0.5;
     304        layoutCons.fill = GridBagConstraints.HORIZONTAL;
     305        gridbag.setConstraints(checkBoxIsTrainStop, layoutCons);
     306        checkBoxIsTrainStop.addItemListener(this);
     307        contentPane.add(checkBoxIsTrainStop);
     308
     309        checkBoxIsAssignTransportType = new JCheckBox(tr(ASSIGN_TRANSPORT_TYPE_CAPTION));
     310        layoutCons.gridx = 0;
     311        layoutCons.gridy = 9;
     312        layoutCons.weightx = 0.5;
     313        layoutCons.fill = GridBagConstraints.HORIZONTAL;
     314        gridbag.setConstraints(checkBoxIsAssignTransportType, layoutCons);
     315        checkBoxIsAssignTransportType.addItemListener(this);
     316        contentPane.add(checkBoxIsAssignTransportType);
     317
     318        checkBoxIsBench = new JCheckBox(tr(BENCH_CAPTION));
     319        layoutCons.gridx = 0;
     320        layoutCons.gridy = 10;
     321        layoutCons.weightx = 0.5;
     322        layoutCons.fill = GridBagConstraints.HORIZONTAL;
     323        gridbag.setConstraints(checkBoxIsBench, layoutCons);
     324        checkBoxIsBench.addItemListener(this);
     325        contentPane.add(checkBoxIsBench);
     326
     327        checkBoxIsShelder = new JCheckBox(tr(SHELDER_CAPTION));
     328        layoutCons.gridx = 1;
     329        layoutCons.gridy = 10;
     330        layoutCons.weightx = 0.5;
     331        layoutCons.fill = GridBagConstraints.HORIZONTAL;
     332        gridbag.setConstraints(checkBoxIsShelder, layoutCons);
     333        checkBoxIsShelder.addItemListener(this);
     334        contentPane.add(checkBoxIsShelder);
     335
     336        checkBoxIsCover = new JCheckBox(tr(COVER_CAPTION));
     337        layoutCons.gridx = 0;
     338        layoutCons.gridy = 11;
     339        layoutCons.weightx = 0.5;
     340        layoutCons.fill = GridBagConstraints.HORIZONTAL;
     341        gridbag.setConstraints(checkBoxIsCover, layoutCons);
     342        checkBoxIsCover.addItemListener(this);
     343        contentPane.add(checkBoxIsCover);
     344
     345        checkBoxIsArea = new JCheckBox(tr(AREA_CAPTION));
     346        layoutCons.gridx = 1;
     347        layoutCons.gridy = 11;
     348        layoutCons.weightx = 0.5;
     349        layoutCons.fill = GridBagConstraints.HORIZONTAL;
     350        gridbag.setConstraints(checkBoxIsArea, layoutCons);
     351        checkBoxIsArea.addItemListener(this);
     352        contentPane.add(checkBoxIsArea);
     353
     354        JButton buttonSave = new JButton(tr(SAVE_BUTTON_CAPTION));
     355        layoutCons.gridx = 0;
     356        layoutCons.gridy = 12;
     357        layoutCons.weightx = 0.5;
     358        layoutCons.fill = GridBagConstraints.HORIZONTAL;
     359        layoutCons.insets = new Insets(10, 0, 0, 0);
     360        gridbag.setConstraints(buttonSave, layoutCons);
     361        buttonSave.setActionCommand(SAVE_COMMAND);
     362        buttonSave.addActionListener(this);
     363        contentPane.add(buttonSave);
     364
     365        JButton buttonCancel = new JButton(tr(CANCEL_BUTTON_CAPTION));
     366        layoutCons.gridx = 1;
     367        layoutCons.gridy = 12;
     368        layoutCons.weightx = 0.5;
     369        layoutCons.fill = GridBagConstraints.LINE_START;
     370        layoutCons.insets = new Insets(10, 0, 0, 0);
     371        gridbag.setConstraints(buttonCancel, layoutCons);
     372        buttonCancel.setActionCommand(CANCEL_COMMAND);
     373        buttonCancel.addActionListener(this);
     374        contentPane.add(buttonCancel);
     375        return contentPane;
     376    }
     377
     378    /**
     379     * Constructor of dialog with filling of controls
     380     *
     381     * @param customizeStopAction Stop area customizing action
     382     * @param stopArea Stop area
     383     */
     384    public CustomizePublicTransportStopDialog(CustomizeStopAction customizeStopAction, StopArea stopArea) {
     385        this();
     386        setValues(stopArea);
     387        this.customizeStopAction = customizeStopAction;
     388        this.stopArea = stopArea;
     389    }
     390
     391    /**
     392     * Return stop area
     393     *
     394     * @return Stop area
     395     */
     396    public StopArea getStopArea() {
     397        return stopArea;
     398    }
     399
     400    /**
     401     * Set stop area and fill controls
     402     *
     403     * @param newStopArea Stop area
     404     */
     405    public void setStopArea(StopArea newStopArea) {
     406        setValues(newStopArea);
     407        this.stopArea = newStopArea;
     408    }
     409
     410    /**
     411     * Returns stop area customizing action
     412     *
     413     * @return Stop area customizing action
     414     */
     415    public CustomizeStopAction getCustomizeStopAction() {
     416        return customizeStopAction;
     417    }
     418
     419    /**
     420     * Set stop area customizing action
     421     *
     422     * @param newCustomizeStopAction Stop area customizing action
     423     */
     424    public void setCustomizeStopAction(CustomizeStopAction newCustomizeStopAction) {
     425        customizeStopAction = newCustomizeStopAction;
     426    }
     427
     428    /**
     429     * Set value in check boxes map
     430     *
     431     * @param checkBox Check box
     432     * @param value Value of check box
     433     */
     434    public void setCheckBoxValue(JCheckBox checkBox, Boolean value) {
     435        checkBoxValues.put(checkBox, value);
     436        checkBox.setSelected(value);
     437    }
     438
     439    /**
     440     * Returns value of check box
     441     *
     442     * @param checkBox Check box
     443     * @return Value of check box
     444     */
     445    public Boolean getCheckBoxValue(JCheckBox checkBox) {
     446        try {
     447            if (checkBoxValues.containsKey(checkBox)) {
     448                return checkBoxValues.get(checkBox);
     449            }
     450            return false;
     451        } catch (Exception ex) {
     452            MessageBox.ok(ex.getMessage());
     453        }
     454        return false;
     455    }
     456
     457    /**
     458     * Callback method for check boxes Set values in check boxes map
     459     */
     460    @Override
     461    public void itemStateChanged(ItemEvent event) {
     462        JCheckBox checkBox = (JCheckBox) event.getSource();
     463        if (event.getStateChange() == ItemEvent.DESELECTED) {
     464            checkBoxValues.put(checkBox, false);
     465        } else if (event.getStateChange() == ItemEvent.SELECTED) {
     466            checkBoxValues.put(checkBox, true);
     467        }
     468    }
     469
     470    /**
     471     * Show or hide dialog
     472     *
     473     * @param isVisible Flag of dialog visibility
     474     */
     475    public void setVisible(Boolean isVisible) {
     476        if (jDialog != null)
     477            jDialog.setVisible(isVisible);
     478    }
     479
     480    /**
     481     * Get index of network level
     482     *
     483     * @param service Network level name
     484     * @return Index of network level
     485     */
     486    private int getServiceIndex(String service) {
     487        for (int i = 0; i < serviceStrings.length; i++) {
     488            if (serviceStrings[i].equals(service)) {
     489                return i;
     490            }
     491        }
     492        return 0;
     493    }
     494
     495    /**
     496     * Setting values of controls from stop area
     497     *
     498     * @param stopArea Stop area
     499     */
     500    public void setValues(StopArea stopArea) {
     501        if (stopArea == null)
     502            return;
     503        if (stopArea.name != null)
     504            textFieldName.setText(stopArea.name);
     505        else if (previousName != null)
     506            textFieldName.setText(previousName);
     507        if (stopArea.nameEn != null)
     508            textFieldNameEn.setText(stopArea.nameEn);
     509        else if (previousNameEn != null)
     510            textFieldNameEn.setText(previousNameEn);
     511        if (stopArea.network != null)
     512            textFieldNetwork.setText(stopArea.network);
     513        else if (previousNetwork != null)
     514            textFieldNetwork.setText(previousNetwork);
     515        if (stopArea.operator != null)
     516            textFieldOperator.setText(stopArea.operator);
     517        else if (previousOperator != null)
     518            textFieldOperator.setText(previousOperator);
     519        comboBoxService.setSelectedIndex(getServiceIndex(stopArea.service));
     520        setCheckBoxValue(checkBoxIsBus, stopArea.isBus);
     521        setCheckBoxValue(checkBoxIsShareTaxi, stopArea.isShareTaxi);
     522        setCheckBoxValue(checkBoxIsTrolleybus, stopArea.isTrolleybus);
     523        setCheckBoxValue(checkBoxIsBusStation, stopArea.isBusStation);
     524        setCheckBoxValue(checkBoxIsAssignTransportType, stopArea.isAssignTransportType);
     525        setCheckBoxValue(checkBoxIsTram, stopArea.isTram);
     526        setCheckBoxValue(checkBoxIsTrainStation, stopArea.isTrainStation);
     527        setCheckBoxValue(checkBoxIsTrainStop, stopArea.isTrainStation);
     528        setCheckBoxValue(checkBoxIsTrainStop, stopArea.isTrainStop);
     529        setCheckBoxValue(checkBoxIsBench, stopArea.isBench);
     530        setCheckBoxValue(checkBoxIsShelder, stopArea.isShelter);
     531        setCheckBoxValue(checkBoxIsCover, stopArea.isCovered);
     532        setCheckBoxValue(checkBoxIsArea, stopArea.isArea);
     533    }
     534
     535    /**
     536     * Returns text box value or null
     537     *
     538     * @param textField Text box
     539     * @return Text box value or null
     540     */
     541    public String getTextFromControl(JTextField textField) {
     542        if (textField.getText().isEmpty())
     543            return null;
     544        return textField.getText();
     545    }
     546
     547    /**
     548     * Load values from controls and saving in stop area fields
     549     *
     550     * @return Stop area
     551     */
     552    public StopArea saveValues() {
     553        StopArea stopArea = this.stopArea;
     554        try {
     555            if (stopArea == null)
     556                stopArea = new StopArea();
     557            stopArea.name = getTextFromControl(textFieldName);
     558            previousName = stopArea.name;
     559            stopArea.nameEn = getTextFromControl(textFieldNameEn);
     560            previousNameEn = stopArea.nameEn;
     561            stopArea.network = getTextFromControl(textFieldNetwork);
     562            previousNetwork = stopArea.network;
     563            stopArea.operator = getTextFromControl(textFieldOperator);
     564            previousOperator = stopArea.operator;
     565            stopArea.service = serviceStrings[comboBoxService.getSelectedIndex()];
     566            stopArea.isBus = getCheckBoxValue(checkBoxIsBus);
     567            stopArea.isShareTaxi = getCheckBoxValue(checkBoxIsShareTaxi);
     568            stopArea.isTrolleybus = getCheckBoxValue(checkBoxIsTrolleybus);
     569            stopArea.isBusStation = getCheckBoxValue(checkBoxIsBusStation);
     570            stopArea.isAssignTransportType = getCheckBoxValue(checkBoxIsAssignTransportType);
     571            stopArea.isTram = getCheckBoxValue(checkBoxIsTram);
     572            stopArea.isTrainStation = getCheckBoxValue(checkBoxIsTrainStation);
     573            stopArea.isTrainStop = getCheckBoxValue(checkBoxIsTrainStop);
     574            stopArea.isBench = getCheckBoxValue(checkBoxIsBench);
     575            stopArea.isShelter = getCheckBoxValue(checkBoxIsShelder);
     576            stopArea.isCovered = getCheckBoxValue(checkBoxIsCover);
     577            stopArea.isArea = getCheckBoxValue(checkBoxIsArea);
     578        } catch (Exception ex) {
     579            MessageBox.ok(ex.getMessage());
     580        }
     581        return stopArea;
     582    }
     583
     584    /**
     585     * Callback method for buttons event
     586     */
     587    public void actionPerformed(ActionEvent event) {
     588        if (SAVE_COMMAND.equals(event.getActionCommand())) {
     589            setVisible(false);
     590            if (customizeStopAction != null) {
     591                StopArea stopArea = saveValues();
     592                customizeStopAction.performCustomizing(stopArea);
     593            }
     594        } else {
     595            setVisible(false);
     596        }
     597    }
    618598
    619599}
  • applications/editors/josm/plugins/CustomizePublicTransportStop/src/ru/rodsoft/openstreetmap/josm/plugins/customizepublictransportstop/CustomizePublicTransportStopPlugin.java

    r33811 r34156  
     1// License: GPL. For details, see LICENSE file.
    12package ru.rodsoft.openstreetmap.josm.plugins.customizepublictransportstop;
    23
     
    67
    78/**
     9 * Class of plugin of customizing of stop area Plugin for josm editor
    810 *
    911 * @author Rodion Scherbakov
    10  * Class of plugin of customizing of stop area
    11  * Plugin for josm editor
    1212 */
    13 public class CustomizePublicTransportStopPlugin  extends Plugin
    14 {
    15         /**
    16          * Stop area customizing action
    17          */
    18         private CustomizeStopAction stopAreaCreatorAction;
     13public class CustomizePublicTransportStopPlugin extends Plugin {
     14    /**
     15     * Stop area customizing action
     16     */
     17    private CustomizeStopAction stopAreaCreatorAction;
    1918
    20         /**
    21          * Constructor of plug-in object
    22          * @param info Plug-in properties
    23          */
     19    /**
     20     * Constructor of plug-in object
     21     *
     22     * @param info Plug-in properties
     23     */
    2424    public CustomizePublicTransportStopPlugin(PluginInformation info) {
    2525        super(info);
     
    2727        MainApplication.getMenu().toolsMenu.add(stopAreaCreatorAction);
    2828    }
    29    
     29
    3030}
  • applications/editors/josm/plugins/CustomizePublicTransportStop/src/ru/rodsoft/openstreetmap/josm/plugins/customizepublictransportstop/CustomizeStopAction.java

    r33990 r34156  
     1// License: GPL. For details, see LICENSE file.
    12package ru.rodsoft.openstreetmap.josm.plugins.customizepublictransportstop;
    23
     
    1011import org.openstreetmap.josm.tools.Shortcut;
    1112
    12 import ru.rodsoft.openstreetmap.josm.plugins.customizepublictransportstop.CustomizePublicTransportStopDialog;
    13 
    1413/**
     14 * Class of customizing of stop area Action for josm editor
    1515 *
    1616 * @author Rodion Scherbakov
    17  * Class of customizing of stop area
    18  * Action for josm editor
    1917 */
    20 public class CustomizeStopAction extends JosmAction implements IStopAreaCustomizer
    21 {
     18public class CustomizeStopAction extends JosmAction implements IStopAreaCustomizer {
    2219
    23         /**
    24         * Menu icon file name
    25         */
    26         private static final String CUSTOMIZE_STOP_ACTION_ICON_NAME = "bus.png";
    27         /**
    28         * Menu item tooltip
    29         */
    30         private static final String CUSTOMIZE_STOP_ACTION_MENU_TOOLTIP = "Customize stop under osm public transit standard v2";
    31         /**
    32         * Menu item caption
    33         */
    34         private static final String CUSTOMIZE_STOP_ACTION_MENU_NAME = "Customize stop";
    35         /**
    36         * Serialization UID
    37         */
    38         private static final long serialVersionUID = 6769508902749446137L;
     20    /**
     21    * Menu icon file name
     22    */
     23    private static final String CUSTOMIZE_STOP_ACTION_ICON_NAME = "bus.png";
     24    /**
     25    * Menu item tooltip
     26    */
     27    private static final String CUSTOMIZE_STOP_ACTION_MENU_TOOLTIP = "Customize stop under osm public transit standard v2";
     28    /**
     29    * Menu item caption
     30    */
     31    private static final String CUSTOMIZE_STOP_ACTION_MENU_NAME = "Customize stop";
     32    /**
     33    * Serialization UID
     34    */
     35    private static final long serialVersionUID = 6769508902749446137L;
    3936
    40         /**
    41         * Constructor of stop area customizing action
    42          * @param name Name of action in josm menu
    43          * @param iconName Name of icon file for josm menu
    44          * @param tooltip Tooltip of action in josm menu
    45          * @param shortcut Short key of action on josm
    46          * @param registerInToolbar Flag of registration in josm menu
    47          */
    48         protected CustomizeStopAction(String name, String iconName, String tooltip,
    49             Shortcut shortcut, boolean registerInToolbar)
    50         {
     37    /**
     38    * Constructor of stop area customizing action
     39     *
     40     * @param name Name of action in josm menu
     41     * @param iconName Name of icon file for josm menu
     42     * @param tooltip Tooltip of action in josm menu
     43     * @param shortcut Short key of action on josm
     44     * @param registerInToolbar Flag of registration in josm menu
     45     */
     46    protected CustomizeStopAction(String name, String iconName, String tooltip, Shortcut shortcut,
     47            boolean registerInToolbar) {
    5148        super(name, iconName, tooltip, shortcut, registerInToolbar);
    5249    }
     
    5451    /**
    5552     * Constructs a stop area customizing action.
     53     *
    5654     * @return the stop area customizing action
    5755     */
    58     public static CustomizeStopAction createCustomizeStopAction()
    59     {
     56    public static CustomizeStopAction createCustomizeStopAction() {
    6057        // CHECKSTYLE.OFF: LineLength
    61         CustomizeStopAction action = new CustomizeStopAction(
    62                 tr(CUSTOMIZE_STOP_ACTION_MENU_NAME), CUSTOMIZE_STOP_ACTION_ICON_NAME,
    63                 tr(CUSTOMIZE_STOP_ACTION_MENU_TOOLTIP),
    64                 Shortcut.registerShortcut("tools:customizestop", tr("Tool: {0}", tr(CUSTOMIZE_STOP_ACTION_MENU_NAME)), KeyEvent.VK_U, Shortcut.DIRECT),
     58        CustomizeStopAction action = new CustomizeStopAction(tr(CUSTOMIZE_STOP_ACTION_MENU_NAME),
     59                CUSTOMIZE_STOP_ACTION_ICON_NAME, tr(CUSTOMIZE_STOP_ACTION_MENU_TOOLTIP),
     60                Shortcut.registerShortcut("tools:customizestop", tr("Tool: {0}", tr(CUSTOMIZE_STOP_ACTION_MENU_NAME)),
     61                        KeyEvent.VK_U, Shortcut.DIRECT),
    6562                true);
    6663        action.putValue("help", ht("/Action/CustomizeStopAction"));
     
    7067
    7168    /**
    72      * Realization of action
    73      * Construct stop area object from selected object and show settings dialog
     69     * Realization of action Construct stop area object from selected object and
     70     * show settings dialog
    7471     */
    7572    @Override
    76         public void actionPerformed(ActionEvent arg0)
    77     {
    78                 if (!isEnabled())
    79                         return;
    80                 CreateStopAreaFromSelectedObjectOperation createStopAreaFromSelectedObjectOperation = new CreateStopAreaFromSelectedObjectOperation(getLayerManager().getEditDataSet());
    81                 StopArea stopArea = createStopAreaFromSelectedObjectOperation.performCustomizing(null);
    82                 if(stopArea == null)
    83                         return;
    84                 CustomizePublicTransportStopDialog dialog = new CustomizePublicTransportStopDialog(this, stopArea);
    85                 dialog.setVisible(true);
    86         }
     73    public void actionPerformed(ActionEvent arg0) {
     74        if (!isEnabled())
     75            return;
     76        CreateStopAreaFromSelectedObjectOperation createStopAreaFromSelectedObjectOperation = new CreateStopAreaFromSelectedObjectOperation(
     77                getLayerManager().getEditDataSet());
     78        StopArea stopArea = createStopAreaFromSelectedObjectOperation.performCustomizing(null);
     79        if (stopArea == null)
     80            return;
     81        CustomizePublicTransportStopDialog dialog = new CustomizePublicTransportStopDialog(this, stopArea);
     82        dialog.setVisible(true);
     83    }
    8784
    88         /**
    89          * Perform stop area customizing under user selection
    90          * This method is launched by stop area settings dialog
    91          * @param stopArea Stop area object with new settings
    92          */
    93         @Override
    94         public StopArea performCustomizing(StopArea stopArea)
    95         {
    96                 CustomizeStopAreaOperation customizeStopAreaOperation = new CustomizeStopAreaOperation(getLayerManager().getEditDataSet());
    97                 return customizeStopAreaOperation.performCustomizing(stopArea);
    98         }
    99    
     85    /**
     86     * Perform stop area customizing under user selection This method is launched by
     87     * stop area settings dialog
     88     *
     89     * @param stopArea Stop area object with new settings
     90     */
     91    @Override
     92    public StopArea performCustomizing(StopArea stopArea) {
     93        CustomizeStopAreaOperation customizeStopAreaOperation = new CustomizeStopAreaOperation(
     94                getLayerManager().getEditDataSet());
     95        return customizeStopAreaOperation.performCustomizing(stopArea);
     96    }
     97
    10098}
  • applications/editors/josm/plugins/CustomizePublicTransportStop/src/ru/rodsoft/openstreetmap/josm/plugins/customizepublictransportstop/CustomizeStopAreaOperation.java

    r33811 r34156  
     1// License: GPL. For details, see LICENSE file.
    12package ru.rodsoft.openstreetmap.josm.plugins.customizepublictransportstop;
    23
     
    2021import org.openstreetmap.josm.data.osm.Way;
    2122import org.openstreetmap.josm.gui.MainApplication;
     23import org.openstreetmap.josm.tools.Logging;
    2224
    2325/**
    24  * Operation of creation and customizing stop area relation and its members under user selection
     26 * Operation of creation and customizing stop area relation and its members
     27 * under user selection
     28 *
    2529 * @author Rodion Scherbakov
    2630 */
    27 public class CustomizeStopAreaOperation extends StopAreaOperationBase
    28 {
    29 
    30         /**
    31          * Operation name in undo list
    32          */
     31public class CustomizeStopAreaOperation extends StopAreaOperationBase {
     32
     33    /**
     34     * Operation name in undo list
     35     */
    3336    private static final String TAG_ASSIGN_COMMAND_NAME = "Stop area tag assign";
    3437
    35         /**
    36          * Constructor of operation object
    37          * @param currentDataSet Current Josm data set
    38          */
    39         public CustomizeStopAreaOperation(DataSet currentDataSet)
    40         {
    41                 super(currentDataSet);
    42         }
    43 
    44     /**
    45          * Forming commands for josm for saving name and name:en attributes stop of area members and relation attributes
    46          * @param target Stop area member or relation
    47          * @param commands List of commands
    48          * @param stopArea Stop area object
    49          * @return Resulting list of commands
    50          */
    51     public List<Command> nameTagAssign(OsmPrimitive target, List<Command> commands, StopArea stopArea)
    52     {
    53         if(commands == null)
    54                 commands = new ArrayList<Command>();
    55        
    56         commands = assignTag(commands, target, OSMTags.NAME_TAG, "".equals(stopArea.name) ? null : stopArea.name);
    57         commands = assignTag(commands, target, OSMTags.NAME_EN_TAG, "".equals(stopArea.nameEn) ? null : stopArea.nameEn);
    58         return commands;
    59     }
    60        
     38    /**
     39     * Constructor of operation object
     40     *
     41     * @param currentDataSet Current Josm data set
     42     */
     43    public CustomizeStopAreaOperation(DataSet currentDataSet) {
     44        super(currentDataSet);
     45    }
     46
     47    /**
     48     * Forming commands for josm for saving name and name:en attributes stop of area
     49     * members and relation attributes
     50     *
     51     * @param target Stop area member or relation
     52     * @param commands List of commands
     53     * @param stopArea Stop area object
     54     * @return Resulting list of commands
     55     */
     56    public List<Command> nameTagAssign(OsmPrimitive target, List<Command> commands, StopArea stopArea) {
     57        if (commands == null)
     58            commands = new ArrayList<Command>();
     59
     60        commands = assignTag(commands, target, OSMTags.NAME_TAG, "".equals(stopArea.name) ? null : stopArea.name);
     61        commands = assignTag(commands, target, OSMTags.NAME_EN_TAG,
     62                "".equals(stopArea.nameEn) ? null : stopArea.nameEn);
     63        return commands;
     64    }
     65
    6166    /**
    6267     * Clear transport type tags
    63      * @param target Josm object for tag clearing
     68     *
     69     * @param target Josm object for tag clearing
    6470     * @param commands Command list
    6571     * @return Resulting list of commands
    6672     */
    67         protected List<Command> transportTypeTagClearing(OsmPrimitive target,
    68                         List<Command> commands) {
    69                 commands = clearTag(commands, target, OSMTags.BUS_TAG);
    70                 commands = clearTag(commands, target, OSMTags.SHARE_TAXI_TAG);
    71                 commands = clearTag(commands, target, OSMTags.TROLLEYBUS_TAG);
    72                 commands = clearTag(commands, target, OSMTags.TRAM_TAG);
    73                 commands = clearTag(commands, target, OSMTags.TRAIN_TAG);
    74                 return commands;
    75         }
    76 
    77         /**
     73    protected List<Command> transportTypeTagClearing(OsmPrimitive target, List<Command> commands) {
     74        commands = clearTag(commands, target, OSMTags.BUS_TAG);
     75        commands = clearTag(commands, target, OSMTags.SHARE_TAXI_TAG);
     76        commands = clearTag(commands, target, OSMTags.TROLLEYBUS_TAG);
     77        commands = clearTag(commands, target, OSMTags.TRAM_TAG);
     78        commands = clearTag(commands, target, OSMTags.TRAIN_TAG);
     79        return commands;
     80    }
     81
     82    /**
    7883     * Assign transport type tags to node
    79      * @param target Josm object for tag assigning
     84     *
     85     * @param target Josm object for tag assigning
    8086     * @param commands Command list
    81         * @param stopArea Stop area object
     87    * @param stopArea Stop area object
    8288     * @param isStopPoint Flag of stop point
    83          * @return Resulting list of commands
    84     */
    85         protected List<Command> transportTypeTagAssign(OsmPrimitive target, List<Command> commands, StopArea stopArea, Boolean isStopPoint)
    86         {
    87         if(commands == null)
    88                 commands = new ArrayList<Command>();
    89 
    90         if(isStopPoint)
    91                 {
    92                         if(stopArea.isTrainStop || stopArea.isTrainStation)
    93                 {
    94                                 commands = clearTag(commands, target, OSMTags.BUS_TAG);
    95                                 commands = clearTag(commands, target, OSMTags.SHARE_TAXI_TAG);
    96                                 commands = clearTag(commands, target, OSMTags.TROLLEYBUS_TAG);
    97                                 commands = clearTag(commands, target, OSMTags.TRAM_TAG);
    98                         commands = assignTag(commands, target, OSMTags.TRAIN_TAG, OSMTags.YES_TAG_VALUE);
    99                 }
    100                 else
    101                 {
    102                         commands = assignTag(commands, target, OSMTags.BUS_TAG, stopArea.isBus ? OSMTags.YES_TAG_VALUE : null);
    103                         commands = assignTag(commands, target, OSMTags.SHARE_TAXI_TAG, stopArea.isShareTaxi ? OSMTags.YES_TAG_VALUE : null);
    104                         commands = assignTag(commands, target, OSMTags.TROLLEYBUS_TAG, stopArea.isTrolleybus ? OSMTags.YES_TAG_VALUE : null);
    105                         commands = assignTag(commands, target, OSMTags.TRAM_TAG, stopArea.isTram ? OSMTags.YES_TAG_VALUE : null);
    106                         commands = assignTag(commands, target, OSMTags.TRAIN_TAG, stopArea.isTrainStation || stopArea.isTrainStop ? OSMTags.YES_TAG_VALUE : null);
    107                 }
    108                 }
    109                 else
    110                 {
    111                         if(stopArea.isAssignTransportType)
    112                 {
    113                         commands = assignTag(commands, target, OSMTags.BUS_TAG, stopArea.isBus ? OSMTags.YES_TAG_VALUE : null);
    114                         commands = assignTag(commands, target, OSMTags.SHARE_TAXI_TAG, stopArea.isShareTaxi ? OSMTags.YES_TAG_VALUE : null);
    115                         commands = assignTag(commands, target, OSMTags.TROLLEYBUS_TAG, stopArea.isTrolleybus ? OSMTags.YES_TAG_VALUE : null);
    116                         commands = assignTag(commands, target, OSMTags.TRAM_TAG, stopArea.isTram ? OSMTags.YES_TAG_VALUE : null);
    117                         commands = assignTag(commands, target, OSMTags.TRAIN_TAG, stopArea.isTrainStation || stopArea.isTrainStop ? OSMTags.YES_TAG_VALUE : null);
    118                 }
    119                         else
    120                         {
    121                         commands = transportTypeTagClearing(target, commands);                 
    122                         }
    123                 }
    124                 return commands;
    125         }
    126 
    127         /**
    128          * Forming commands for josm for saving general attributes of stop area members and relation
    129          * @param target Stop area member or relation
    130          * @param commands List of commands
    131          * @param stopArea Stop area object
    132          * @return Resulting list of commands
    133          */
    134     public List<Command> generalTagAssign(OsmPrimitive target, List<Command> commands, StopArea stopArea)
    135     {
    136         if(commands == null)
    137                 commands = new ArrayList<Command>();
    138        
    139         commands = nameTagAssign(target,commands, stopArea);
    140         commands = assignTag(commands, target, OSMTags.NETWORK_TAG, "".equals(stopArea.network) ? null : stopArea.network);
    141         commands = assignTag(commands, target, OSMTags.OPERATOR_TAG, "".equals(stopArea.operator) ? null : stopArea.operator);
    142         commands = assignTag(commands, target, OSMTags.SERVICE_TAG, null == stopArea.service || OSMTags.CITY_NETWORK_TAG_VALUE.equals(stopArea.service) ? null : stopArea.service);
    143        
    144         return commands;
    145     }
    146 
    147    
     89     * @return Resulting list of commands
     90     */
     91    protected List<Command> transportTypeTagAssign(OsmPrimitive target, List<Command> commands, StopArea stopArea,
     92            Boolean isStopPoint) {
     93        if (commands == null)
     94            commands = new ArrayList<Command>();
     95
     96        if (isStopPoint) {
     97            if (stopArea.isTrainStop || stopArea.isTrainStation) {
     98                commands = clearTag(commands, target, OSMTags.BUS_TAG);
     99                commands = clearTag(commands, target, OSMTags.SHARE_TAXI_TAG);
     100                commands = clearTag(commands, target, OSMTags.TROLLEYBUS_TAG);
     101                commands = clearTag(commands, target, OSMTags.TRAM_TAG);
     102                commands = assignTag(commands, target, OSMTags.TRAIN_TAG, OSMTags.YES_TAG_VALUE);
     103            } else {
     104                commands = assignTag(commands, target, OSMTags.BUS_TAG, stopArea.isBus ? OSMTags.YES_TAG_VALUE : null);
     105                commands = assignTag(commands, target, OSMTags.SHARE_TAXI_TAG,
     106                        stopArea.isShareTaxi ? OSMTags.YES_TAG_VALUE : null);
     107                commands = assignTag(commands, target, OSMTags.TROLLEYBUS_TAG,
     108                        stopArea.isTrolleybus ? OSMTags.YES_TAG_VALUE : null);
     109                commands = assignTag(commands, target, OSMTags.TRAM_TAG,
     110                        stopArea.isTram ? OSMTags.YES_TAG_VALUE : null);
     111                commands = assignTag(commands, target, OSMTags.TRAIN_TAG,
     112                        stopArea.isTrainStation || stopArea.isTrainStop ? OSMTags.YES_TAG_VALUE : null);
     113            }
     114        } else {
     115            if (stopArea.isAssignTransportType) {
     116                commands = assignTag(commands, target, OSMTags.BUS_TAG, stopArea.isBus ? OSMTags.YES_TAG_VALUE : null);
     117                commands = assignTag(commands, target, OSMTags.SHARE_TAXI_TAG,
     118                        stopArea.isShareTaxi ? OSMTags.YES_TAG_VALUE : null);
     119                commands = assignTag(commands, target, OSMTags.TROLLEYBUS_TAG,
     120                        stopArea.isTrolleybus ? OSMTags.YES_TAG_VALUE : null);
     121                commands = assignTag(commands, target, OSMTags.TRAM_TAG,
     122                        stopArea.isTram ? OSMTags.YES_TAG_VALUE : null);
     123                commands = assignTag(commands, target, OSMTags.TRAIN_TAG,
     124                        stopArea.isTrainStation || stopArea.isTrainStop ? OSMTags.YES_TAG_VALUE : null);
     125            } else {
     126                commands = transportTypeTagClearing(target, commands);
     127            }
     128        }
     129        return commands;
     130    }
     131
     132    /**
     133     * Forming commands for josm for saving general attributes of stop area members
     134     * and relation
     135     *
     136     * @param target Stop area member or relation
     137     * @param commands List of commands
     138     * @param stopArea Stop area object
     139     * @return Resulting list of commands
     140     */
     141    public List<Command> generalTagAssign(OsmPrimitive target, List<Command> commands, StopArea stopArea) {
     142        if (commands == null)
     143            commands = new ArrayList<Command>();
     144
     145        commands = nameTagAssign(target, commands, stopArea);
     146        commands = assignTag(commands, target, OSMTags.NETWORK_TAG,
     147                "".equals(stopArea.network) ? null : stopArea.network);
     148        commands = assignTag(commands, target, OSMTags.OPERATOR_TAG,
     149                "".equals(stopArea.operator) ? null : stopArea.operator);
     150        commands = assignTag(commands, target, OSMTags.SERVICE_TAG,
     151                null == stopArea.service || OSMTags.CITY_NETWORK_TAG_VALUE.equals(stopArea.service) ? null
     152                        : stopArea.service);
     153
     154        return commands;
     155    }
     156
    148157    /**
    149158     * Forming commands for josm for saving stop position attributes
     159     *
    150160     * @param target Stop position node
    151161     * @param commands Original command list
    152         * @param stopArea Stop area object
     162    * @param stopArea Stop area object
    153163     * @param isFirst true, if target is first stop position in stop area
    154164     * @return Resulting command list
    155165     */
    156     public List<Command> stopPointTagAssign(OsmPrimitive target, List<Command> commands, StopArea stopArea, Boolean isFirst)
    157     {
    158         if(commands == null)
    159                 commands = new ArrayList<Command>();
    160        
    161         commands = generalTagAssign(target, commands, stopArea);
    162         commands = transportTypeTagAssign(target, commands, stopArea, true);
    163         if(isFirst)
    164         {
    165                 if(stopArea.isTrainStop)
    166                 {
    167                         commands = assignTag(commands, target, OSMTags.RAILWAY_TAG, OSMTags.HALT_TAG_VALUE);
    168                 }
    169                 else
    170                         if(stopArea.isTrainStation)
    171                         {
    172                                 commands = assignTag(commands, target, OSMTags.RAILWAY_TAG, OSMTags.STATION_TAG_VALUE);
    173                         }
    174                         else
    175                                 if(stopArea.isTram)
    176                                         commands = assignTag(commands, target, OSMTags.RAILWAY_TAG, OSMTags.TRAM_STOP_TAG_VALUE);
    177                                 else
    178                                         commands = clearTag(commands, target, OSMTags.RAILWAY_TAG);
    179         }
    180         else
    181         {
    182                 commands = clearTag(commands, target, OSMTags.RAILWAY_TAG);
    183         }
    184         if(compareTag(target, OSMTags.HIGHWAY_TAG, OSMTags.BUS_STOP_TAG_VALUE))
    185                 commands = clearTag(commands, target, OSMTags.HIGHWAY_TAG);
    186         if(compareTag(target, OSMTags.AMENITY_TAG, OSMTags.BUS_STATION_TAG_VALUE))
    187                 commands = clearTag(commands, target, OSMTags.AMENITY_TAG);
    188         commands = assignTag(commands, target, OSMTags.PUBLIC_TRANSPORT_TAG, OSMTags.STOP_POSITION_TAG_VALUE);
    189         return commands;               
    190     }
    191    
     166    public List<Command> stopPointTagAssign(OsmPrimitive target, List<Command> commands, StopArea stopArea,
     167            Boolean isFirst) {
     168        if (commands == null)
     169            commands = new ArrayList<Command>();
     170
     171        commands = generalTagAssign(target, commands, stopArea);
     172        commands = transportTypeTagAssign(target, commands, stopArea, true);
     173        if (isFirst) {
     174            if (stopArea.isTrainStop) {
     175                commands = assignTag(commands, target, OSMTags.RAILWAY_TAG, OSMTags.HALT_TAG_VALUE);
     176            } else if (stopArea.isTrainStation) {
     177                commands = assignTag(commands, target, OSMTags.RAILWAY_TAG, OSMTags.STATION_TAG_VALUE);
     178            } else if (stopArea.isTram)
     179                commands = assignTag(commands, target, OSMTags.RAILWAY_TAG, OSMTags.TRAM_STOP_TAG_VALUE);
     180            else
     181                commands = clearTag(commands, target, OSMTags.RAILWAY_TAG);
     182        } else {
     183            commands = clearTag(commands, target, OSMTags.RAILWAY_TAG);
     184        }
     185        if (compareTag(target, OSMTags.HIGHWAY_TAG, OSMTags.BUS_STOP_TAG_VALUE))
     186            commands = clearTag(commands, target, OSMTags.HIGHWAY_TAG);
     187        if (compareTag(target, OSMTags.AMENITY_TAG, OSMTags.BUS_STATION_TAG_VALUE))
     188            commands = clearTag(commands, target, OSMTags.AMENITY_TAG);
     189        commands = assignTag(commands, target, OSMTags.PUBLIC_TRANSPORT_TAG, OSMTags.STOP_POSITION_TAG_VALUE);
     190        return commands;
     191    }
     192
    192193    /**
    193194     * Forming commands for josm for saving platform attributes
     195     *
    194196     * @param target Platform node or way
    195197     * @param commands Original command list
    196         * @param stopArea Stop area object
     198    * @param stopArea Stop area object
    197199     * @param isSelected true, if this platform is selected in editor
    198200     * @param isFirst true, if this platform is first in stop area
    199201     * @return Resulting command list
    200202     */
    201     public List<Command> platformTagAssign(OsmPrimitive target, List<Command> commands, StopArea stopArea, Boolean isFirst)
    202     {
    203         if(commands == null)
    204                 commands = new ArrayList<Command>();
    205        
    206         commands = generalTagAssign(target, commands, stopArea);
    207         commands = transportTypeTagAssign(target, commands, stopArea, false);
    208        
    209         if(compareTag(target, OSMTags.RAILWAY_TAG, OSMTags.HALT_TAG_VALUE) || compareTag(target, OSMTags.RAILWAY_TAG, OSMTags.STATION_TAG_VALUE))
    210                 commands = clearTag(commands, target, OSMTags.RAILWAY_TAG);
    211         if(target instanceof Way && (stopArea.isTrainStop || stopArea.isTrainStation || stopArea.isTram))
    212                 commands = assignTag(commands, target, OSMTags.RAILWAY_TAG, OSMTags.PLATFORM_TAG_VALUE);
    213         if(stopArea.isBus || stopArea.isShareTaxi || stopArea.isTrolleybus)
    214         {
    215                 if(target instanceof Way)
    216                         commands = assignTag(commands, target, OSMTags.HIGHWAY_TAG, OSMTags.PLATFORM_TAG_VALUE);
    217                 else
    218                         if(isFirst && !stopArea.isBusStation)
    219                                 commands = assignTag(commands, target, OSMTags.HIGHWAY_TAG, OSMTags.BUS_STOP_TAG_VALUE);
    220         }
    221         commands = assignTag(commands, target, OSMTags.PUBLIC_TRANSPORT_TAG, OSMTags.PLATFORM_TAG_VALUE);
    222         if(target == stopArea.selectedObject)
    223         {
    224                 commands = assignTag(commands, target, OSMTags.BENCH_TAG, stopArea.isBench ? OSMTags.YES_TAG_VALUE : null);
    225                 commands = assignTag(commands, target, OSMTags.SHELTER_TAG, stopArea.isShelter ? OSMTags.YES_TAG_VALUE : null);
    226                 commands = assignTag(commands, target, OSMTags.COVERED_TAG, stopArea.isCovered ? OSMTags.YES_TAG_VALUE : null);
    227                 commands = assignTag(commands, target, OSMTags.AREA_TAG, stopArea.isArea ? OSMTags.YES_TAG_VALUE : null);
    228         }
    229         return commands;
    230     }
    231    
    232     /**
    233      * Forming commands for josm for saving attributes of non stop position or platform
    234      * @param target Member of stop area relation
    235      * @param commands Original command list
    236          * @param stopArea Stop area object
    237      * @return Resulting command list
    238      */
    239     public List<Command> otherMemberTagAssign(OsmPrimitive target, List<Command> commands, StopArea stopArea)
    240     {
    241         if(commands == null)
    242                 commands = new ArrayList<Command>();
    243        
    244         commands = nameTagAssign(target, commands, stopArea);
    245         commands = clearTag(commands, target, OSMTags.NETWORK_TAG);
    246         commands = clearTag(commands, target, OSMTags.OPERATOR_TAG);
    247         commands = clearTag(commands, target, OSMTags.SERVICE_TAG);
    248         if(compareTag(target, OSMTags.RAILWAY_TAG, OSMTags.HALT_TAG_VALUE) || compareTag(target, OSMTags.RAILWAY_TAG, OSMTags.STATION_TAG_VALUE))
    249                 commands = clearTag(commands, target, OSMTags.RAILWAY_TAG);
    250         return commands;
    251     }   
    252        
     203    public List<Command> platformTagAssign(OsmPrimitive target, List<Command> commands, StopArea stopArea,
     204            Boolean isFirst) {
     205        if (commands == null)
     206            commands = new ArrayList<Command>();
     207
     208        commands = generalTagAssign(target, commands, stopArea);
     209        commands = transportTypeTagAssign(target, commands, stopArea, false);
     210
     211        if (compareTag(target, OSMTags.RAILWAY_TAG, OSMTags.HALT_TAG_VALUE)
     212                || compareTag(target, OSMTags.RAILWAY_TAG, OSMTags.STATION_TAG_VALUE))
     213            commands = clearTag(commands, target, OSMTags.RAILWAY_TAG);
     214        if (target instanceof Way && (stopArea.isTrainStop || stopArea.isTrainStation || stopArea.isTram))
     215            commands = assignTag(commands, target, OSMTags.RAILWAY_TAG, OSMTags.PLATFORM_TAG_VALUE);
     216        if (stopArea.isBus || stopArea.isShareTaxi || stopArea.isTrolleybus) {
     217            if (target instanceof Way)
     218                commands = assignTag(commands, target, OSMTags.HIGHWAY_TAG, OSMTags.PLATFORM_TAG_VALUE);
     219            else if (isFirst && !stopArea.isBusStation)
     220                commands = assignTag(commands, target, OSMTags.HIGHWAY_TAG, OSMTags.BUS_STOP_TAG_VALUE);
     221        }
     222        commands = assignTag(commands, target, OSMTags.PUBLIC_TRANSPORT_TAG, OSMTags.PLATFORM_TAG_VALUE);
     223        if (target == stopArea.selectedObject) {
     224            commands = assignTag(commands, target, OSMTags.BENCH_TAG, stopArea.isBench ? OSMTags.YES_TAG_VALUE : null);
     225            commands = assignTag(commands, target, OSMTags.SHELTER_TAG,
     226                    stopArea.isShelter ? OSMTags.YES_TAG_VALUE : null);
     227            commands = assignTag(commands, target, OSMTags.COVERED_TAG,
     228                    stopArea.isCovered ? OSMTags.YES_TAG_VALUE : null);
     229            commands = assignTag(commands, target, OSMTags.AREA_TAG, stopArea.isArea ? OSMTags.YES_TAG_VALUE : null);
     230        }
     231        return commands;
     232    }
     233
     234    /**
     235     * Forming commands for josm for saving attributes of non stop position or
     236     * platform
     237     *
     238     * @param target Member of stop area relation
     239     * @param commands Original command list
     240     * @param stopArea Stop area object
     241     * @return Resulting command list
     242     */
     243    public List<Command> otherMemberTagAssign(OsmPrimitive target, List<Command> commands, StopArea stopArea) {
     244        if (commands == null)
     245            commands = new ArrayList<Command>();
     246
     247        commands = nameTagAssign(target, commands, stopArea);
     248        commands = clearTag(commands, target, OSMTags.NETWORK_TAG);
     249        commands = clearTag(commands, target, OSMTags.OPERATOR_TAG);
     250        commands = clearTag(commands, target, OSMTags.SERVICE_TAG);
     251        if (compareTag(target, OSMTags.RAILWAY_TAG, OSMTags.HALT_TAG_VALUE)
     252                || compareTag(target, OSMTags.RAILWAY_TAG, OSMTags.STATION_TAG_VALUE))
     253            commands = clearTag(commands, target, OSMTags.RAILWAY_TAG);
     254        return commands;
     255    }
     256
    253257    /**
    254258     * Forming commands for josm for saving stop area relation attributes
    255      * @param commands Original command list
    256          * @param stopArea Stop area object
    257      * @return Resulting command list
    258      */
    259         private List<Command> createStopAreaRelation(List<Command> commands, StopArea stopArea)
    260         {
    261         if(commands == null)
    262                 commands = new ArrayList<Command>();
    263 
    264         Relation newRelation = new Relation();
    265                 for(Node node : stopArea.stopPoints)
    266                 {
    267                         newRelation.addMember(new RelationMember(OSMTags.STOP_ROLE, node));
    268                 }
    269                 for(OsmPrimitive platform : stopArea.platforms)
    270                 {
    271                         newRelation.addMember(new RelationMember(OSMTags.PLATFORM_ROLE, platform));
    272                 }
    273                 for(OsmPrimitive otherMember : stopArea.otherMembers)
    274                 {
    275                         newRelation.addMember(new RelationMember("", otherMember));
    276                 }
    277                 Main.main.undoRedo.add(new AddCommand(MainApplication.getLayerManager().getEditDataSet(), newRelation));
    278                 commands = generalTagAssign(newRelation, commands, stopArea);
    279                 commands = assignTag(commands, newRelation, OSMTags.TYPE_TAG, OSMTags.PUBLIC_TRANSPORT_TAG);
    280                 commands = assignTag(commands, newRelation, OSMTags.PUBLIC_TRANSPORT_TAG, OSMTags.STOP_AREA_TAG_VALUE);
    281         return commands;
    282         }
    283 
    284         /**
    285          * Adding of new stop area members to relation
    286          * @param commands Original command list
    287          * @param targetRelation Stop area relation
    288          * @param member Stop area relation member
    289          * @param roleName Role name
    290          * @return Resulting command list
    291          */
    292         public static List<Command> addNewRelationMember(List<Command> commands, Relation targetRelation, OsmPrimitive member, String roleName)
    293         {
    294         if(commands == null)
    295                 commands = new ArrayList<Command>();
    296 
    297         for(RelationMember relationMember : targetRelation.getMembers())
    298                 {
    299                         if(relationMember.getMember() == member)
    300                         {
    301                                 if(relationMember.getRole() == roleName)
    302                                 {
    303                                         return commands;
    304                                 }
    305                                 return commands;
    306                         }
    307                 }
    308                 targetRelation.addMember(new RelationMember(roleName, member));
    309                 commands.add(new ChangeCommand(targetRelation, targetRelation));
    310                 return commands;       
    311         }
    312        
    313         /**
    314          * Adding new stop area members to relation
    315          * @param commands Original command list
    316          * @param stopArea Stop area object
    317          * @return Resulting command list
    318          */
    319         private List<Command> addNewRelationMembers(List<Command> commands, StopArea stopArea)
    320         {
    321         if(commands == null)
    322                 commands = new ArrayList<Command>();
    323 
    324         for(OsmPrimitive stopPoint : stopArea.stopPoints)
    325                 {
    326                         commands = addNewRelationMember(commands, stopArea.stopAreaRelation, stopPoint, OSMTags.STOP_ROLE);
    327                 }
    328                 for(OsmPrimitive platform : stopArea.platforms)
    329                 {
    330                         commands = addNewRelationMember(commands, stopArea.stopAreaRelation, platform, OSMTags.PLATFORM_ROLE);
    331                 }
    332                 for(OsmPrimitive otherMember : stopArea.otherMembers)
    333                 {
    334                         commands = addNewRelationMember(commands, stopArea.stopAreaRelation, otherMember, null);
    335                 }
    336                 return commands;
    337         }
    338 
    339         /**
    340          * Testing, is josm object bus stop node or contains bus stop node, defined by tag and its value
    341          * @param member Josm object
    342          * @param tag Tag name
    343          * @param tagValue Tag value
    344          * @return true, if josm object is bus stop node or contains bus stop node
    345          */
    346         private Node searchBusStop(OsmPrimitive member, String tag, String tagValue)
    347         {
    348                 if(member instanceof Node)
    349                 {                       
    350                         if(compareTag(member, tag, tagValue))
    351                         {
    352                                 return (Node)member;
    353                         }
    354                 }
    355                 else
    356                 {
    357                         Way memberWay = (Way) member;
    358                         for(Node node : memberWay.getNodes())
    359                         {
    360                                 if(compareTag(node, tag, tagValue))
    361                                 {
    362                                         return node;
    363                                 }                                       
    364                         }
    365                 }
    366                 return null;
    367         }
    368 
    369         /**
    370          * Testing, do stop area contains bus stop node, defined by tag and its value
    371          * @param tag Tag name
    372          * @param tagValue Tag value
    373          * @return true, if stop area contains bus stop node
    374          */
    375         public Node searchBusStop(StopArea stopArea, String tag, String tagValue)
    376         {
    377                 for(OsmPrimitive platform : stopArea.platforms)
    378                 {
    379                         Node busStopNode = searchBusStop(platform, tag, tagValue);
    380                         if(busStopNode != null)
    381                                 return busStopNode;
    382                 }
    383                 for(OsmPrimitive otherMember : stopArea.otherMembers)
    384                 {
    385                         Node busStopNode = searchBusStop(otherMember, tag, tagValue);
    386                         if(busStopNode != null)
    387                                 return busStopNode;
    388                 }
    389                 return null;
    390         }
    391 
    392         /**
    393          * Testing, must stop area to have separate bus stop node
    394          * @param stopArea Stop area object
    395          * @param firstPlatform First platform of stop area JOSM object
    396          * @return True, stop area must to have separate bus stop node
    397          */
    398         public boolean needSeparateBusStop(StopArea stopArea, OsmPrimitive firstPlatform)
    399         {
    400                 if(((stopArea.isBus || stopArea.isShareTaxi || stopArea.isTrolleybus) && (firstPlatform instanceof Way)))
    401                 {
    402                         return true;
    403                 }
    404                 return false;
    405         }
    406        
    407         /**
    408          * Clear excess tags from JOSM object and its nodes
    409          * @param commands Original command list
    410          * @param target JOSM object
    411          * @param tag Tag name
    412          * @param tagValue Tag value
    413          * @return Resulting command list
    414          */
    415         private List<Command> clearExcessTags(List<Command> commands, OsmPrimitive target, String tag, String tagValue)
    416         {
    417         if(commands == null)
    418                 commands = new ArrayList<Command>();
    419 
    420         if(compareTag(target, tag, tagValue))
    421                 {
    422                         commands = clearTag(commands, target, tag);
    423                 }
    424                 if(target instanceof Way)
    425                 {
    426                         Way memberWay = (Way) target;
    427                         for(Node node : memberWay.getNodes())
    428                         {
    429                                 if(compareTag(node, tag, tagValue))
    430                                 {
    431                                         commands = clearTag(commands, target, tag);
    432                                 }                                       
    433                         }
    434                 }
    435                 return commands;
    436         }
    437 
    438         /**
    439          * Clear excess tags from JOSM object and its nodes
    440          * @param commands Command list
    441          * @param stopArea Stop area object
    442          * @param tag Tag name
    443          * @param tagValue Tag value
    444          * @return Resulting command list
    445          */
    446         public List<Command> clearExcessTags(List<Command> commands, StopArea stopArea, String tag, String tagValue)
    447         {
    448         if(commands == null)
    449                 commands = new ArrayList<Command>();
    450 
    451         for(OsmPrimitive stopPoint : stopArea.stopPoints)
    452                 {
    453                         clearExcessTags(commands, stopPoint, tag, tagValue);
    454                 }
    455                 for(OsmPrimitive platform : stopArea.platforms)
    456                 {
    457                         clearExcessTags(commands, platform, tag, tagValue);
    458                 }
    459                 for(OsmPrimitive otherMember : stopArea.otherMembers)
    460                 {
    461                         clearExcessTags(commands, otherMember, tag, tagValue);
    462                 }
    463                 return commands;
    464         }
    465 
    466        
    467         /**
    468          * Create separate bus stop node or assign bus stop tag to platform node
    469          * @param commands Original command list
    470          * @param stopArea Stop area object
    471          * @param firstPlatform First platform in stop area relation
    472          * @param tag Tag name
    473          * @param tagValue Tag value
    474          * @return Resulting command list
    475          */
    476         protected List<Command> createSeparateBusStopNode(List<Command> commands, StopArea stopArea, OsmPrimitive firstPlatform, String tag, String tagValue)
    477         {
    478         if(commands == null)
    479                 commands = new ArrayList<Command>();
    480 
    481         LatLon centerOfPlatform = getCenterOfWay(firstPlatform);
    482                 if(firstPlatform instanceof Way)
    483                 {
    484                         if(centerOfPlatform != null)
    485                         {
    486                                 Node newNode =new Node();
    487                                 newNode.setCoor(centerOfPlatform);
    488                         Main.main.undoRedo.add(new AddCommand(MainApplication.getLayerManager().getEditDataSet(), newNode));
    489                         Main.main.undoRedo.add(new ChangePropertyCommand(newNode, tag, tagValue));
    490                                 commands = assignTag(commands, newNode, tag, tagValue);
    491                                 stopArea.otherMembers.add(newNode);
    492                         }
    493                 }
    494                 else
    495                 {
    496                 commands = assignTag(commands, firstPlatform, tag, tagValue);
    497                 }
    498                 return commands;
    499         }
    500 
    501         /**
    502          * Forming commands for JOSM for saving stop area members and relation attributes
    503          * @param stopArea Stop area object
    504          * @return Resulting command list
    505          */
    506         public List<Command> customize(StopArea stopArea)
    507         {
    508                 try
    509                 {
    510                         List<Command> commands = new ArrayList<Command>();
    511                         Node separateBusStopNode = searchBusStop(stopArea, OSMTags.AMENITY_TAG, OSMTags.BUS_STATION_TAG_VALUE);
    512                         if(separateBusStopNode == null)
    513                                 separateBusStopNode = searchBusStop(stopArea, OSMTags.HIGHWAY_TAG, OSMTags.BUS_STOP_TAG_VALUE);
    514                         if(stopArea.isBusStation)
    515                         {
    516                                 commands = clearExcessTags(commands, stopArea, OSMTags.HIGHWAY_TAG, OSMTags.BUS_STOP_TAG_VALUE);
    517                         }
    518                         else
    519                         {
    520                                 commands = clearExcessTags(commands, stopArea, OSMTags.AMENITY_TAG, OSMTags.BUS_STATION_TAG_VALUE);
    521                         }
    522                         if(!(stopArea.isBus || stopArea.isShareTaxi || stopArea.isTrolleybus))
    523                         {
    524                                 commands = clearExcessTags(commands, stopArea, OSMTags.HIGHWAY_TAG, OSMTags.BUS_STOP_TAG_VALUE);
    525                         }
    526                         if(stopArea.stopPoints.size() == 0)
    527                         {
    528                                 CreateNewStopPointOperation createNewStopPointOperation = new CreateNewStopPointOperation(getCurrentDataSet());
    529                                 createNewStopPointOperation.performCustomizing(stopArea);
    530                         }
    531                         Boolean isFirst = true;
    532                         for(Node node : stopArea.stopPoints)
    533                         {
    534                                 commands = stopPointTagAssign(node, commands, stopArea, isFirst);
    535                                 isFirst = false;
    536                         }
    537                         isFirst = true;
    538                         OsmPrimitive firstPlatform = null;
    539                         for(OsmPrimitive platform : stopArea.platforms)
    540                         {
    541                                 commands = platformTagAssign(platform, commands, stopArea, isFirst);
    542                                 if(isFirst)
    543                                         firstPlatform = platform;
    544                                 isFirst = false;
    545                         }
    546                         if(needSeparateBusStop(stopArea, firstPlatform))
    547                         {
    548                                 if(stopArea.isBusStation)
    549                                 {
    550                                         if(separateBusStopNode == null)
    551                                         {
    552                                                 commands = createSeparateBusStopNode(commands, stopArea, firstPlatform, OSMTags.AMENITY_TAG, OSMTags.BUS_STATION_TAG_VALUE);
    553                                         }       
    554                                         else
    555                                         {
    556                                                 commands = assignTag(commands, separateBusStopNode, OSMTags.AMENITY_TAG, OSMTags.BUS_STATION_TAG_VALUE);
    557                                         }
    558                                 }
    559                                 else
    560                                 {
    561                                         if(separateBusStopNode == null)
    562                                         {
    563                                                 commands = createSeparateBusStopNode(commands, stopArea, firstPlatform, OSMTags.HIGHWAY_TAG, OSMTags.BUS_STOP_TAG_VALUE);
    564                                         }       
    565                                         else
    566                                         {
    567                                                 commands = assignTag(commands, separateBusStopNode, OSMTags.HIGHWAY_TAG, OSMTags.BUS_STOP_TAG_VALUE);
    568                                         }
    569                                 }
    570                         }
    571                         else
    572                         {
    573                                 if(stopArea.isBusStation)
    574                                 {
    575                                         commands = assignTag(commands, firstPlatform, OSMTags.AMENITY_TAG, OSMTags.BUS_STATION_TAG_VALUE);
    576                                 }
    577                                 else
    578                                         if(stopArea.isBus || stopArea.isTrolleybus || stopArea.isShareTaxi)
    579                                         {
    580                                                 commands = assignTag(commands, firstPlatform, OSMTags.HIGHWAY_TAG, OSMTags.BUS_STOP_TAG_VALUE);
    581                                         }
    582                         }
    583                         for(OsmPrimitive otherMember : stopArea.otherMembers)
    584                         {
    585                                 commands = otherMemberTagAssign(otherMember, commands, stopArea);
    586                         }
    587                         if(stopArea.stopAreaRelation == null)
    588                         {
    589                                 if(stopArea.stopPoints.size() + stopArea.platforms.size() + stopArea.otherMembers.size() > 1)
    590                                 {
    591                                         commands = createStopAreaRelation(commands, stopArea);
    592                                 }
    593                         }
    594                         else
    595                         {
    596                                 commands = generalTagAssign(stopArea.stopAreaRelation, commands, stopArea);
    597                                 commands = transportTypeTagClearing(stopArea.stopAreaRelation, commands);
    598                                 commands = addNewRelationMembers(commands, stopArea);
    599                         }
    600                         return commands;
    601                 }
    602                 catch(Exception ex)
    603                 {
    604                         MessageBox.ok(ex.getMessage());
    605                 }
    606                 return null;
    607         }
    608 
    609         /**
    610          * Construct and executing command list for customizing of stop area relation and its members
    611          * @param stopArea Stop area object
    612          * @return Stop area object
    613          */
    614         @Override
    615         public StopArea performCustomizing(StopArea stopArea)
    616         {
    617                 List<Command> commands = customize(stopArea);
    618                 if(commands != null && !commands.isEmpty())
    619                         try
    620                         {
    621                                 Main.main.undoRedo.add(new SequenceCommand(tr(TAG_ASSIGN_COMMAND_NAME), commands));
    622                                 return stopArea;
    623                         }
    624                         catch(Exception ex)
    625                         {
    626                         }
    627                 return stopArea;
    628         }
     259     *
     260     * @param commands Original command list
     261     * @param stopArea Stop area object
     262     * @return Resulting command list
     263     */
     264    private List<Command> createStopAreaRelation(List<Command> commands, StopArea stopArea) {
     265        if (commands == null)
     266            commands = new ArrayList<Command>();
     267
     268        Relation newRelation = new Relation();
     269        for (Node node : stopArea.stopPoints) {
     270            newRelation.addMember(new RelationMember(OSMTags.STOP_ROLE, node));
     271        }
     272        for (OsmPrimitive platform : stopArea.platforms) {
     273            newRelation.addMember(new RelationMember(OSMTags.PLATFORM_ROLE, platform));
     274        }
     275        for (OsmPrimitive otherMember : stopArea.otherMembers) {
     276            newRelation.addMember(new RelationMember("", otherMember));
     277        }
     278        Main.main.undoRedo.add(new AddCommand(MainApplication.getLayerManager().getEditDataSet(), newRelation));
     279        commands = generalTagAssign(newRelation, commands, stopArea);
     280        commands = assignTag(commands, newRelation, OSMTags.TYPE_TAG, OSMTags.PUBLIC_TRANSPORT_TAG);
     281        commands = assignTag(commands, newRelation, OSMTags.PUBLIC_TRANSPORT_TAG, OSMTags.STOP_AREA_TAG_VALUE);
     282        return commands;
     283    }
     284
     285    /**
     286     * Adding of new stop area members to relation
     287     *
     288     * @param commands Original command list
     289     * @param targetRelation Stop area relation
     290     * @param member Stop area relation member
     291     * @param roleName Role name
     292     * @return Resulting command list
     293     */
     294    public static List<Command> addNewRelationMember(List<Command> commands, Relation targetRelation,
     295            OsmPrimitive member, String roleName) {
     296        if (commands == null)
     297            commands = new ArrayList<Command>();
     298
     299        for (RelationMember relationMember : targetRelation.getMembers()) {
     300            if (relationMember.getMember() == member) {
     301                if (relationMember.getRole() == roleName) {
     302                    return commands;
     303                }
     304                return commands;
     305            }
     306        }
     307        targetRelation.addMember(new RelationMember(roleName, member));
     308        commands.add(new ChangeCommand(targetRelation, targetRelation));
     309        return commands;
     310    }
     311
     312    /**
     313     * Adding new stop area members to relation
     314     *
     315     * @param commands Original command list
     316     * @param stopArea Stop area object
     317     * @return Resulting command list
     318     */
     319    private List<Command> addNewRelationMembers(List<Command> commands, StopArea stopArea) {
     320        if (commands == null)
     321            commands = new ArrayList<Command>();
     322
     323        for (OsmPrimitive stopPoint : stopArea.stopPoints) {
     324            commands = addNewRelationMember(commands, stopArea.stopAreaRelation, stopPoint, OSMTags.STOP_ROLE);
     325        }
     326        for (OsmPrimitive platform : stopArea.platforms) {
     327            commands = addNewRelationMember(commands, stopArea.stopAreaRelation, platform, OSMTags.PLATFORM_ROLE);
     328        }
     329        for (OsmPrimitive otherMember : stopArea.otherMembers) {
     330            commands = addNewRelationMember(commands, stopArea.stopAreaRelation, otherMember, null);
     331        }
     332        return commands;
     333    }
     334
     335    /**
     336     * Testing, is josm object bus stop node or contains bus stop node, defined by
     337     * tag and its value
     338     *
     339     * @param member Josm object
     340     * @param tag Tag name
     341     * @param tagValue Tag value
     342     * @return true, if josm object is bus stop node or contains bus stop node
     343     */
     344    private Node searchBusStop(OsmPrimitive member, String tag, String tagValue) {
     345        if (member instanceof Node) {
     346            if (compareTag(member, tag, tagValue)) {
     347                return (Node) member;
     348            }
     349        } else {
     350            Way memberWay = (Way) member;
     351            for (Node node : memberWay.getNodes()) {
     352                if (compareTag(node, tag, tagValue)) {
     353                    return node;
     354                }
     355            }
     356        }
     357        return null;
     358    }
     359
     360    /**
     361     * Testing, do stop area contains bus stop node, defined by tag and its value
     362     *
     363     * @param tag Tag name
     364     * @param tagValue Tag value
     365     * @return true, if stop area contains bus stop node
     366     */
     367    public Node searchBusStop(StopArea stopArea, String tag, String tagValue) {
     368        for (OsmPrimitive platform : stopArea.platforms) {
     369            Node busStopNode = searchBusStop(platform, tag, tagValue);
     370            if (busStopNode != null)
     371                return busStopNode;
     372        }
     373        for (OsmPrimitive otherMember : stopArea.otherMembers) {
     374            Node busStopNode = searchBusStop(otherMember, tag, tagValue);
     375            if (busStopNode != null)
     376                return busStopNode;
     377        }
     378        return null;
     379    }
     380
     381    /**
     382     * Testing, must stop area to have separate bus stop node
     383     *
     384     * @param stopArea Stop area object
     385     * @param firstPlatform First platform of stop area JOSM object
     386     * @return True, stop area must to have separate bus stop node
     387     */
     388    public boolean needSeparateBusStop(StopArea stopArea, OsmPrimitive firstPlatform) {
     389        if (((stopArea.isBus || stopArea.isShareTaxi || stopArea.isTrolleybus) && (firstPlatform instanceof Way))) {
     390            return true;
     391        }
     392        return false;
     393    }
     394
     395    /**
     396     * Clear excess tags from JOSM object and its nodes
     397     *
     398     * @param commands Original command list
     399     * @param target JOSM object
     400     * @param tag Tag name
     401     * @param tagValue Tag value
     402     * @return Resulting command list
     403     */
     404    private List<Command> clearExcessTags(List<Command> commands, OsmPrimitive target, String tag, String tagValue) {
     405        if (commands == null)
     406            commands = new ArrayList<Command>();
     407
     408        if (compareTag(target, tag, tagValue)) {
     409            commands = clearTag(commands, target, tag);
     410        }
     411        if (target instanceof Way) {
     412            Way memberWay = (Way) target;
     413            for (Node node : memberWay.getNodes()) {
     414                if (compareTag(node, tag, tagValue)) {
     415                    commands = clearTag(commands, target, tag);
     416                }
     417            }
     418        }
     419        return commands;
     420    }
     421
     422    /**
     423     * Clear excess tags from JOSM object and its nodes
     424     *
     425     * @param commands Command list
     426     * @param stopArea Stop area object
     427     * @param tag Tag name
     428     * @param tagValue Tag value
     429     * @return Resulting command list
     430     */
     431    public List<Command> clearExcessTags(List<Command> commands, StopArea stopArea, String tag, String tagValue) {
     432        if (commands == null)
     433            commands = new ArrayList<Command>();
     434
     435        for (OsmPrimitive stopPoint : stopArea.stopPoints) {
     436            clearExcessTags(commands, stopPoint, tag, tagValue);
     437        }
     438        for (OsmPrimitive platform : stopArea.platforms) {
     439            clearExcessTags(commands, platform, tag, tagValue);
     440        }
     441        for (OsmPrimitive otherMember : stopArea.otherMembers) {
     442            clearExcessTags(commands, otherMember, tag, tagValue);
     443        }
     444        return commands;
     445    }
     446
     447    /**
     448     * Create separate bus stop node or assign bus stop tag to platform node
     449     *
     450     * @param commands Original command list
     451     * @param stopArea Stop area object
     452     * @param firstPlatform First platform in stop area relation
     453     * @param tag Tag name
     454     * @param tagValue Tag value
     455     * @return Resulting command list
     456     */
     457    protected List<Command> createSeparateBusStopNode(List<Command> commands, StopArea stopArea,
     458            OsmPrimitive firstPlatform, String tag, String tagValue) {
     459        if (commands == null)
     460            commands = new ArrayList<Command>();
     461
     462        LatLon centerOfPlatform = getCenterOfWay(firstPlatform);
     463        if (firstPlatform instanceof Way) {
     464            if (centerOfPlatform != null) {
     465                Node newNode = new Node();
     466                newNode.setCoor(centerOfPlatform);
     467                Main.main.undoRedo.add(new AddCommand(MainApplication.getLayerManager().getEditDataSet(), newNode));
     468                Main.main.undoRedo.add(new ChangePropertyCommand(newNode, tag, tagValue));
     469                commands = assignTag(commands, newNode, tag, tagValue);
     470                stopArea.otherMembers.add(newNode);
     471            }
     472        } else {
     473            commands = assignTag(commands, firstPlatform, tag, tagValue);
     474        }
     475        return commands;
     476    }
     477
     478    /**
     479     * Forming commands for JOSM for saving stop area members and relation
     480     * attributes
     481     *
     482     * @param stopArea Stop area object
     483     * @return Resulting command list
     484     */
     485    public List<Command> customize(StopArea stopArea) {
     486        try {
     487            List<Command> commands = new ArrayList<Command>();
     488            Node separateBusStopNode = searchBusStop(stopArea, OSMTags.AMENITY_TAG, OSMTags.BUS_STATION_TAG_VALUE);
     489            if (separateBusStopNode == null)
     490                separateBusStopNode = searchBusStop(stopArea, OSMTags.HIGHWAY_TAG, OSMTags.BUS_STOP_TAG_VALUE);
     491            if (stopArea.isBusStation) {
     492                commands = clearExcessTags(commands, stopArea, OSMTags.HIGHWAY_TAG, OSMTags.BUS_STOP_TAG_VALUE);
     493            } else {
     494                commands = clearExcessTags(commands, stopArea, OSMTags.AMENITY_TAG, OSMTags.BUS_STATION_TAG_VALUE);
     495            }
     496            if (!(stopArea.isBus || stopArea.isShareTaxi || stopArea.isTrolleybus)) {
     497                commands = clearExcessTags(commands, stopArea, OSMTags.HIGHWAY_TAG, OSMTags.BUS_STOP_TAG_VALUE);
     498            }
     499            if (stopArea.stopPoints.size() == 0) {
     500                CreateNewStopPointOperation createNewStopPointOperation = new CreateNewStopPointOperation(
     501                        getCurrentDataSet());
     502                createNewStopPointOperation.performCustomizing(stopArea);
     503            }
     504            Boolean isFirst = true;
     505            for (Node node : stopArea.stopPoints) {
     506                commands = stopPointTagAssign(node, commands, stopArea, isFirst);
     507                isFirst = false;
     508            }
     509            isFirst = true;
     510            OsmPrimitive firstPlatform = null;
     511            for (OsmPrimitive platform : stopArea.platforms) {
     512                commands = platformTagAssign(platform, commands, stopArea, isFirst);
     513                if (isFirst)
     514                    firstPlatform = platform;
     515                isFirst = false;
     516            }
     517            if (needSeparateBusStop(stopArea, firstPlatform)) {
     518                if (stopArea.isBusStation) {
     519                    if (separateBusStopNode == null) {
     520                        commands = createSeparateBusStopNode(commands, stopArea, firstPlatform, OSMTags.AMENITY_TAG,
     521                                OSMTags.BUS_STATION_TAG_VALUE);
     522                    } else {
     523                        commands = assignTag(commands, separateBusStopNode, OSMTags.AMENITY_TAG,
     524                                OSMTags.BUS_STATION_TAG_VALUE);
     525                    }
     526                } else {
     527                    if (separateBusStopNode == null) {
     528                        commands = createSeparateBusStopNode(commands, stopArea, firstPlatform, OSMTags.HIGHWAY_TAG,
     529                                OSMTags.BUS_STOP_TAG_VALUE);
     530                    } else {
     531                        commands = assignTag(commands, separateBusStopNode, OSMTags.HIGHWAY_TAG,
     532                                OSMTags.BUS_STOP_TAG_VALUE);
     533                    }
     534                }
     535            } else {
     536                if (stopArea.isBusStation) {
     537                    commands = assignTag(commands, firstPlatform, OSMTags.AMENITY_TAG, OSMTags.BUS_STATION_TAG_VALUE);
     538                } else if (stopArea.isBus || stopArea.isTrolleybus || stopArea.isShareTaxi) {
     539                    commands = assignTag(commands, firstPlatform, OSMTags.HIGHWAY_TAG, OSMTags.BUS_STOP_TAG_VALUE);
     540                }
     541            }
     542            for (OsmPrimitive otherMember : stopArea.otherMembers) {
     543                commands = otherMemberTagAssign(otherMember, commands, stopArea);
     544            }
     545            if (stopArea.stopAreaRelation == null) {
     546                if (stopArea.stopPoints.size() + stopArea.platforms.size() + stopArea.otherMembers.size() > 1) {
     547                    commands = createStopAreaRelation(commands, stopArea);
     548                }
     549            } else {
     550                commands = generalTagAssign(stopArea.stopAreaRelation, commands, stopArea);
     551                commands = transportTypeTagClearing(stopArea.stopAreaRelation, commands);
     552                commands = addNewRelationMembers(commands, stopArea);
     553            }
     554            return commands;
     555        } catch (Exception ex) {
     556            MessageBox.ok(ex.getMessage());
     557        }
     558        return null;
     559    }
     560
     561    /**
     562     * Construct and executing command list for customizing of stop area relation
     563     * and its members
     564     *
     565     * @param stopArea Stop area object
     566     * @return Stop area object
     567     */
     568    @Override
     569    public StopArea performCustomizing(StopArea stopArea) {
     570        List<Command> commands = customize(stopArea);
     571        if (commands != null && !commands.isEmpty())
     572            try {
     573                Main.main.undoRedo.add(new SequenceCommand(tr(TAG_ASSIGN_COMMAND_NAME), commands));
     574                return stopArea;
     575            } catch (Exception ex) {
     576                Logging.error(ex);
     577            }
     578        return stopArea;
     579    }
    629580
    630581}
  • applications/editors/josm/plugins/CustomizePublicTransportStop/src/ru/rodsoft/openstreetmap/josm/plugins/customizepublictransportstop/IStopAreaCustomizer.java

    r32048 r34156  
     1// License: GPL. For details, see LICENSE file.
    12package ru.rodsoft.openstreetmap.josm.plugins.customizepublictransportstop;
    23
    34/**
     5 * Interface of operation of stop area customizing
    46 *
    57 * @author Rodion Scherbakov
    6  * Interface of operation of stop area customizing
    78 */
    8 public interface IStopAreaCustomizer
    9 {
    10         /**
    11          * Perform operation of customizing of stop area
    12         * @param stopArea Stop area
    13         * @return Stop area after customizing
    14         */
    15         public StopArea performCustomizing(StopArea stopArea);
     9public interface IStopAreaCustomizer {
     10    /**
     11     * Perform operation of customizing of stop area
     12     *
     13    * @param stopArea Stop area
     14    * @return Stop area after customizing
     15    */
     16    StopArea performCustomizing(StopArea stopArea);
    1617}
  • applications/editors/josm/plugins/CustomizePublicTransportStop/src/ru/rodsoft/openstreetmap/josm/plugins/customizepublictransportstop/MessageBox.java

    r32048 r34156  
     1// License: GPL. For details, see LICENSE file.
    12package ru.rodsoft.openstreetmap.josm.plugins.customizepublictransportstop;
     3
    24import javax.swing.JOptionPane;
    35import java.awt.Component;
    4 /**
     6
     7/**
     8 * MessageBox static class It is used for debug. Source: Java forums
     9 * <a>http://www.java-forums.org/java-tip/6578-messagebox-example.html</a>
    510 *
    611 * @author Moderator
    7  * MessageBox static class
    8  * It is used for debug
    9  * Source: Java forums <a>http://www.java-forums.org/java-tip/6578-messagebox-example.html</a>
    1012 */
    11 public class MessageBox {
    12             /*
    13             These are a list of STATIC MODAL dialogs
    14          
    15             int return codes of button pressed:
    16          
    17                 -1 - WINDOW CLOSED - the X PRESSED
    18                  0 - YES and OK
    19                  1 - NO
    20                  2 - CANCEL
    21          
    22             (thanks to flipside for the idea)
    23              */
    24          
    25         /**
    26          * Show message box with "yes" and "no" buttons
    27          * @param theMessage Message for user
    28          * @return Code of pressed button
    29          */
    30             public static int yesno(String theMessage){
    31                 int result = JOptionPane.showConfirmDialog((Component)
    32                         null, theMessage, "alert", JOptionPane.YES_NO_OPTION);
    33                 return result;
    34             }
    35          
    36                 /**
    37                  * Show message box with "yes", "no" and "cancel" buttons
    38                  * @param theMessage Message for user
    39                  * @return Code of pressed button
    40                  */
    41             public static int yesnocancel(String theMessage){
    42                 int result = JOptionPane.showConfirmDialog((Component)
    43                         null, theMessage, "alert", JOptionPane.YES_NO_CANCEL_OPTION);
    44                 return result;
    45             }
    46          
    47                 /**
    48                  * Show message box with "Ok" and "Cancel" buttons
    49                  * @param theMessage Message for user
    50                  * @return Code of pressed button
    51                  */
    52             public static int okcancel(String theMessage){
    53                 int result = JOptionPane.showConfirmDialog((Component)
    54                         null, theMessage, "alert", JOptionPane.OK_CANCEL_OPTION);
    55                 return result;
    56             }
    57          
    58                 /**
    59                  * Show message box with "ok" button
    60                  * @param theMessage Message for user
    61                  * @return Code of pressed button
    62                  */
    63             public static int ok(String theMessage){
    64                 int result = JOptionPane.showConfirmDialog((Component)
    65                         null, theMessage, "alert", JOptionPane.DEFAULT_OPTION);
    66                 return result;
    67             }
    68          
    69             /**
    70              * Main method for test launch
    71              *
    72              * @param args Arguments of command line
    73              */
    74             public static void main(String args[]){
    75                 int i = MessageBox.yesno("Are your sure ?");
    76                 System.out.println("ret : " + i );
    77                 i = MessageBox.yesnocancel("Are your sure ?");
    78                 System.out.println("ret : " + i );
    79                 i = MessageBox.okcancel("Are your sure ?");
    80                 System.out.println("ret : " + i );
    81                 i = MessageBox.ok("Done.");
    82                 System.out.println("ret : " + i );
    83             }
     13public final class MessageBox {
     14    /*
     15     * These are a list of STATIC MODAL dialogs
     16     *
     17     * int return codes of button pressed:
     18     *
     19     * -1 - WINDOW CLOSED - the X PRESSED 0 - YES and OK 1 - NO 2 - CANCEL
     20     *
     21     * (thanks to flipside for the idea)
     22     */
     23
     24    /**
     25     * Show message box with "yes" and "no" buttons
     26     *
     27     * @param theMessage Message for user
     28     * @return Code of pressed button
     29     */
     30    public static int yesno(String theMessage) {
     31        int result = JOptionPane.showConfirmDialog((Component) null, theMessage, "alert", JOptionPane.YES_NO_OPTION);
     32        return result;
     33    }
     34
     35    /**
     36     * Show message box with "yes", "no" and "cancel" buttons
     37     *
     38     * @param theMessage Message for user
     39     * @return Code of pressed button
     40     */
     41    public static int yesnocancel(String theMessage) {
     42        int result = JOptionPane.showConfirmDialog((Component) null, theMessage, "alert",
     43                JOptionPane.YES_NO_CANCEL_OPTION);
     44        return result;
     45    }
     46
     47    /**
     48     * Show message box with "Ok" and "Cancel" buttons
     49     *
     50     * @param theMessage Message for user
     51     * @return Code of pressed button
     52     */
     53    public static int okcancel(String theMessage) {
     54        int result = JOptionPane.showConfirmDialog((Component) null, theMessage, "alert", JOptionPane.OK_CANCEL_OPTION);
     55        return result;
     56    }
     57
     58    /**
     59     * Show message box with "ok" button
     60     *
     61     * @param theMessage Message for user
     62     * @return Code of pressed button
     63     */
     64    public static int ok(String theMessage) {
     65        int result = JOptionPane.showConfirmDialog((Component) null, theMessage, "alert", JOptionPane.DEFAULT_OPTION);
     66        return result;
     67    }
     68
     69    /**
     70     * Main method for test launch
     71     *
     72     * @param args Arguments of command line
     73     */
     74    public static void main(String[] args) {
     75        int i = MessageBox.yesno("Are your sure ?");
     76        System.out.println("ret : " + i);
     77        i = MessageBox.yesnocancel("Are your sure ?");
     78        System.out.println("ret : " + i);
     79        i = MessageBox.okcancel("Are your sure ?");
     80        System.out.println("ret : " + i);
     81        i = MessageBox.ok("Done.");
     82        System.out.println("ret : " + i);
     83    }
     84
     85    private MessageBox() {
     86        // Hide default constructor
     87    }
    8488}
  • applications/editors/josm/plugins/CustomizePublicTransportStop/src/ru/rodsoft/openstreetmap/josm/plugins/customizepublictransportstop/NearestWaySegment.java

    r32048 r34156  
     1// License: GPL. For details, see LICENSE file.
    12package ru.rodsoft.openstreetmap.josm.plugins.customizepublictransportstop;
    23
     
    56
    67/**
     8 * Distance from platform to ways
    79 *
    810 * @author Rodion Scherbakov
    9  * Distance from platform to ways
    1011 */
    11 public class NearestWaySegment
    12 {
    13         /**
    14          * Square of distance
    15          */
    16         public Double distanceSq = 1000000000.0;
    17         /**
    18          * Way segment
    19          */
    20         public WaySegment waySegment;
    21         /**
    22          * Node
    23          */
    24         public Node newNode;
    25        
    26         /**
    27          * Constructor
    28          * @param distanceSq Square of distance
    29          * @param waySegment Way segment
    30          * @param newNode Node
    31          */
    32         public NearestWaySegment(Double distanceSq, WaySegment waySegment, Node newNode)
    33         {
    34                 this.distanceSq = distanceSq;
    35                 this.waySegment = waySegment;
    36                 this.newNode = newNode;
    37         }
     12public class NearestWaySegment {
     13    /**
     14     * Square of distance
     15     */
     16    public Double distanceSq = 1000000000.0;
     17    /**
     18     * Way segment
     19     */
     20    public WaySegment waySegment;
     21    /**
     22     * Node
     23     */
     24    public Node newNode;
     25
     26    /**
     27     * Constructor
     28     *
     29     * @param distanceSq Square of distance
     30     * @param waySegment Way segment
     31     * @param newNode Node
     32     */
     33    public NearestWaySegment(Double distanceSq, WaySegment waySegment, Node newNode) {
     34        this.distanceSq = distanceSq;
     35        this.waySegment = waySegment;
     36        this.newNode = newNode;
     37    }
    3838}
  • applications/editors/josm/plugins/CustomizePublicTransportStop/src/ru/rodsoft/openstreetmap/josm/plugins/customizepublictransportstop/OSMTags.java

    r32840 r34156  
     1// License: GPL. For details, see LICENSE file.
    12package ru.rodsoft.openstreetmap.josm.plugins.customizepublictransportstop;
    23
    34/**
     5 * OSM object tags
    46 *
    57 * @author Rodion Scherbakov
    6  * OSM object tags
    78 */
    8 public class OSMTags
    9 {
    10         public static final String TERTIARY_LINK_TAG_VALUE = "tertiary_link";
    11         public static final String SECONDARY_LINK_TAG_VALUE = "secondary_link";
    12         public static final String PRIMARY_LINK_TAG_VALUE = "primary_link";
    13         public static final String TRUNK_LINK_TAG_VALUE = "trunk_link";
    14         public static final String ROAD_TAG_VALUE = "road";
    15         public static final String BUS_GUIDEWAY_TAG_VALUE = "bus_guideway";
    16         public static final String SERVICE_TAG_VALUE = "service";
    17         public static final String RESIDENTIAL_TAG_VALUE = "residential";
    18         public static final String UNCLASSIFIED_TAG_VALUE = "unclassified";
    19         public static final String TERTIARY_TAG_VALUE = "tertiary";
    20         public static final String SECONDARY_TAG_VALUE = "secondary";
    21         public static final String PRIMARY_TAG_VALUE = "primary";
    22         public static final String TRUNK_TAG_VALUE = "trunk";
    23         public static final String TRAM_TAG_VALUE = "tram";
    24         public static final String USAGE_TAG = "usage";
    25         public static final String MAIN_TAG_VALUE = "main";
    26         public static final String RAIL_TAG_VALUE = "rail";
     9public final class OSMTags {
     10    public static final String TERTIARY_LINK_TAG_VALUE = "tertiary_link";
     11    public static final String SECONDARY_LINK_TAG_VALUE = "secondary_link";
     12    public static final String PRIMARY_LINK_TAG_VALUE = "primary_link";
     13    public static final String TRUNK_LINK_TAG_VALUE = "trunk_link";
     14    public static final String ROAD_TAG_VALUE = "road";
     15    public static final String BUS_GUIDEWAY_TAG_VALUE = "bus_guideway";
     16    public static final String SERVICE_TAG_VALUE = "service";
     17    public static final String RESIDENTIAL_TAG_VALUE = "residential";
     18    public static final String UNCLASSIFIED_TAG_VALUE = "unclassified";
     19    public static final String TERTIARY_TAG_VALUE = "tertiary";
     20    public static final String SECONDARY_TAG_VALUE = "secondary";
     21    public static final String PRIMARY_TAG_VALUE = "primary";
     22    public static final String TRUNK_TAG_VALUE = "trunk";
     23    public static final String TRAM_TAG_VALUE = "tram";
     24    public static final String USAGE_TAG = "usage";
     25    public static final String MAIN_TAG_VALUE = "main";
     26    public static final String RAIL_TAG_VALUE = "rail";
    2727
    28         public static final String AREA_TAG = "area";
    29         public static final String COVERED_TAG = "covered";
    30         public static final String SHELTER_TAG = "shelter";
    31         public static final String BENCH_TAG = "bench";
    32         public static final String TRAIN_TAG = "train";
    33         public static final String STOP_POSITION_TAG_VALUE = "stop_position";
    34         public static final String STATION_TAG_VALUE = "station";
    35         public static final String HALT_TAG_VALUE = "halt";
    36         public static final String YES_TAG_VALUE = "yes";
    37         public static final String RAILWAY_TAG = "railway";
    38         public static final String TRAM_STOP_TAG_VALUE = "tram_stop";
    39         public static final String TRAM_TAG = "tram";
    40         public static final String SHARE_TAXI_TAG = "share_taxi";
    41         public static final String TROLLEYBUS_TAG = "trolleybus";
    42         public static final String BUS_TAG = "bus";
    43         public static final String NETWORK_TAG = "network";
    44         public static final String OPERATOR_TAG = "operator";
    45         public static final String NAME_EN_TAG = "name:en";
    46         public static final String NAME_TAG = "name";
    47         public static final String HIGHWAY_TAG = "highway";
    48         public static final String AMENITY_TAG = "amenity";
    49         public static final String BUS_STATION_TAG_VALUE = "bus_station";
    50        
    51         public static final String BUS_STOP_TAG_VALUE = "bus_stop";
    52         public static final String TYPE_TAG = "type";
    53         public static final String PUBLIC_TRANSPORT_TAG = "public_transport";
    54         public static final String STOP_AREA_TAG_VALUE = "stop_area";
    55         public static final String STOP_ROLE = "stop";
    56         public static final String PLATFORM_ROLE = "platform";
    57         public static final String PLATFORM_TAG_VALUE = "platform";
    58         public static final String SERVICE_TAG = "service";
     28    public static final String AREA_TAG = "area";
     29    public static final String COVERED_TAG = "covered";
     30    public static final String SHELTER_TAG = "shelter";
     31    public static final String BENCH_TAG = "bench";
     32    public static final String TRAIN_TAG = "train";
     33    public static final String STOP_POSITION_TAG_VALUE = "stop_position";
     34    public static final String STATION_TAG_VALUE = "station";
     35    public static final String HALT_TAG_VALUE = "halt";
     36    public static final String YES_TAG_VALUE = "yes";
     37    public static final String RAILWAY_TAG = "railway";
     38    public static final String TRAM_STOP_TAG_VALUE = "tram_stop";
     39    public static final String TRAM_TAG = "tram";
     40    public static final String SHARE_TAXI_TAG = "share_taxi";
     41    public static final String TROLLEYBUS_TAG = "trolleybus";
     42    public static final String BUS_TAG = "bus";
     43    public static final String NETWORK_TAG = "network";
     44    public static final String OPERATOR_TAG = "operator";
     45    public static final String NAME_EN_TAG = "name:en";
     46    public static final String NAME_TAG = "name";
     47    public static final String HIGHWAY_TAG = "highway";
     48    public static final String AMENITY_TAG = "amenity";
     49    public static final String BUS_STATION_TAG_VALUE = "bus_station";
    5950
    60         public static final String CITY_NETWORK_TAG_VALUE = "city";
    61         public static final String COMMUTER_NETWORK_TAG_VALUE = "commuter";
    62         public static final String LOCAL_NETWORK_TAG_VALUE = "local";
    63         public static final String REGIONAL_NETWORK_TAG_VALUE = "regional";
     51    public static final String BUS_STOP_TAG_VALUE = "bus_stop";
     52    public static final String TYPE_TAG = "type";
     53    public static final String PUBLIC_TRANSPORT_TAG = "public_transport";
     54    public static final String STOP_AREA_TAG_VALUE = "stop_area";
     55    public static final String STOP_ROLE = "stop";
     56    public static final String PLATFORM_ROLE = "platform";
     57    public static final String PLATFORM_TAG_VALUE = "platform";
     58    public static final String SERVICE_TAG = "service";
     59
     60    public static final String CITY_NETWORK_TAG_VALUE = "city";
     61    public static final String COMMUTER_NETWORK_TAG_VALUE = "commuter";
     62    public static final String LOCAL_NETWORK_TAG_VALUE = "local";
     63    public static final String REGIONAL_NETWORK_TAG_VALUE = "regional";
    6464    public static final String LONG_DISTANCE_NETWORK_TAG_VALUE = "long_distance";
    6565    public static final String HIGH_SPEED_NETWORK_TAG_VALUE = "high_speed";
    6666
     67    private OSMTags() {
     68        // Hide default constructor
     69    }
    6770}
  • applications/editors/josm/plugins/CustomizePublicTransportStop/src/ru/rodsoft/openstreetmap/josm/plugins/customizepublictransportstop/StopArea.java

    r32048 r34156  
     1// License: GPL. For details, see LICENSE file.
    12package ru.rodsoft.openstreetmap.josm.plugins.customizepublictransportstop;
    23
     
    910
    1011/**
     12 * Stop area settings
    1113 *
    1214 * @author Rodion Scherbakov
    13  * Stop area settings
    1415 */
    1516public class StopArea {
    1617
    17         /**
    18          * Name of stop area
    19          */
    20         public String name = null;
    21         /**
    22          * English name of stop area
    23          */
    24         public String nameEn = null;
    25         /**
    26          * Operator of stop area
    27          */
    28         public String operator = null;
    29         /**
    30          * Network name
    31          */
    32         public String network = null;
    33         /**
    34          * Level of network including this stop area
    35          */
    36         public String service = null;
    37         /**
    38          * Flag of bus stop area
    39          */
    40         public Boolean isBus = false;
    41         /**
    42          * Flag of trolleybus stop area
    43          */
    44         public Boolean isTrolleybus = false;
    45         /**
    46          * Flag of share taxi stop area
    47          */
    48         public Boolean isShareTaxi = false;
    49         /**
    50          * Flag of bus station stop area
    51          */
    52         public Boolean isBusStation = false;
    53         /**
    54          * Flag of tram stop area
    55          */
    56         public Boolean isTram = false;
    57         /**
    58          * Flag of railway stop area
    59          */
    60         public Boolean isTrainStop = false;
    61         /**
    62          * Flag of railway station
    63          */
    64         public Boolean isTrainStation = false;
    65         /**
    66          * Flag of bench on selected platform
    67          */
    68         public Boolean isAssignTransportType = false;
    69         /**
    70          * Flag of bench near platform
    71          */
    72         public Boolean isBench = false;
    73         /**
    74          * Flag of covered platform
    75          */
    76         public Boolean isCovered = false;
    77         /**
    78          * Flag of shelter on selected platform
    79          */
    80         public Boolean isShelter = false;
    81         /**
    82          * Relation of stop area
    83          */
    84         public Relation stopAreaRelation = null;
    85         /**
    86          * Flag of existing of stop position
    87          */
    88         public Boolean isStopPointExists = false;
    89         /**
    90          * Flag of area platform
    91          */
    92         public Boolean isArea = false;
    93         /**
    94          * Separate node of bus stop or bus station
    95          */
    96         public Node separateBusStopNode = null;
    97        
    98         /**
    99          * List of nodes of stop positions
    100          */
    101         public final ArrayList<Node> stopPoints = new ArrayList<Node>();
    102         /**
    103          * List of josm objects of platforms
    104          */
    105         public final ArrayList<OsmPrimitive> platforms = new ArrayList<OsmPrimitive>();
    106         /**
    107          * List of non stop positions or platform stop area members
    108          */
    109         public final ArrayList<OsmPrimitive> otherMembers = new ArrayList<OsmPrimitive>();
    110        
    111         /**
    112          * Selected josm objects. Must be a platform
    113          */
    114         public OsmPrimitive selectedObject = null;
     18    /**
     19     * Name of stop area
     20     */
     21    public String name = null;
     22    /**
     23     * English name of stop area
     24     */
     25    public String nameEn = null;
     26    /**
     27     * Operator of stop area
     28     */
     29    public String operator = null;
     30    /**
     31     * Network name
     32     */
     33    public String network = null;
     34    /**
     35     * Level of network including this stop area
     36     */
     37    public String service = null;
     38    /**
     39     * Flag of bus stop area
     40     */
     41    public Boolean isBus = false;
     42    /**
     43     * Flag of trolleybus stop area
     44     */
     45    public Boolean isTrolleybus = false;
     46    /**
     47     * Flag of share taxi stop area
     48     */
     49    public Boolean isShareTaxi = false;
     50    /**
     51     * Flag of bus station stop area
     52     */
     53    public Boolean isBusStation = false;
     54    /**
     55     * Flag of tram stop area
     56     */
     57    public Boolean isTram = false;
     58    /**
     59     * Flag of railway stop area
     60     */
     61    public Boolean isTrainStop = false;
     62    /**
     63     * Flag of railway station
     64     */
     65    public Boolean isTrainStation = false;
     66    /**
     67     * Flag of bench on selected platform
     68     */
     69    public Boolean isAssignTransportType = false;
     70    /**
     71     * Flag of bench near platform
     72     */
     73    public Boolean isBench = false;
     74    /**
     75     * Flag of covered platform
     76     */
     77    public Boolean isCovered = false;
     78    /**
     79     * Flag of shelter on selected platform
     80     */
     81    public Boolean isShelter = false;
     82    /**
     83     * Relation of stop area
     84     */
     85    public Relation stopAreaRelation = null;
     86    /**
     87     * Flag of existing of stop position
     88     */
     89    public Boolean isStopPointExists = false;
     90    /**
     91     * Flag of area platform
     92     */
     93    public Boolean isArea = false;
     94    /**
     95     * Separate node of bus stop or bus station
     96     */
     97    public Node separateBusStopNode = null;
    11598
    116        
    117         /**
    118          * Constructor of stop area object
    119          */
    120         public StopArea()
    121         { }
    122        
    123         /**
    124          * Constructor of stop area object from selected object
    125          * @param selectedObject Selected object
    126          */
    127         public StopArea(OsmPrimitive selectedObject)
    128         {
    129                 this.selectedObject = selectedObject;
    130         }
    131        
    132         /**
    133          * Get selected in editor node
    134          * @return Selected node or null
    135          */
    136         public Node getSelectedNode()
    137         {
    138                 if(selectedObject instanceof Node)
    139                         return (Node)selectedObject;
    140                 return null;
    141         }
    142        
    143         /**
    144          * Get selected way
    145          * @return Selected way or null
    146          */
    147         public Way getSelectedWay()
    148         {
    149                 if(selectedObject instanceof Way)
    150                         return (Way)selectedObject;
    151                 return null;
    152         }
    153        
     99    /**
     100     * List of nodes of stop positions
     101     */
     102    public final ArrayList<Node> stopPoints = new ArrayList<Node>();
     103    /**
     104     * List of josm objects of platforms
     105     */
     106    public final ArrayList<OsmPrimitive> platforms = new ArrayList<OsmPrimitive>();
     107    /**
     108     * List of non stop positions or platform stop area members
     109     */
     110    public final ArrayList<OsmPrimitive> otherMembers = new ArrayList<OsmPrimitive>();
     111
     112    /**
     113     * Selected josm objects. Must be a platform
     114     */
     115    public OsmPrimitive selectedObject = null;
     116
     117    /**
     118     * Constructor of stop area object
     119     */
     120    public StopArea() {
     121    }
     122
     123    /**
     124     * Constructor of stop area object from selected object
     125     *
     126     * @param selectedObject Selected object
     127     */
     128    public StopArea(OsmPrimitive selectedObject) {
     129        this.selectedObject = selectedObject;
     130    }
     131
     132    /**
     133     * Get selected in editor node
     134     *
     135     * @return Selected node or null
     136     */
     137    public Node getSelectedNode() {
     138        if (selectedObject instanceof Node)
     139            return (Node) selectedObject;
     140        return null;
     141    }
     142
     143    /**
     144     * Get selected way
     145     *
     146     * @return Selected way or null
     147     */
     148    public Way getSelectedWay() {
     149        if (selectedObject instanceof Way)
     150            return (Way) selectedObject;
     151        return null;
     152    }
    154153}
  • applications/editors/josm/plugins/CustomizePublicTransportStop/src/ru/rodsoft/openstreetmap/josm/plugins/customizepublictransportstop/StopAreaOperationBase.java

    r32048 r34156  
     1// License: GPL. For details, see LICENSE file.
    12package ru.rodsoft.openstreetmap.josm.plugins.customizepublictransportstop;
    23
     
    1314
    1415/**
     16 * Base class of operation of customizing of stop area
     17 *
    1518 * @author Rodion Scherbakov
    16  * Base class of operation of customizing of stop area
    1719 */
    18 public abstract class StopAreaOperationBase implements IStopAreaCustomizer
    19 {
     20public abstract class StopAreaOperationBase implements IStopAreaCustomizer {
    2021
    21         /**
    22          * Current dataset of Josm
    23          */
    24         private DataSet _CurrentDataSet;
    25        
    26         /**
    27          * Constructor of operation of customizing of stop area
    28          * @param currentDataSet Current data set of JOSM
    29          */
    30         public StopAreaOperationBase(DataSet currentDataSet)
    31         {
    32                 _CurrentDataSet = currentDataSet;
    33         }
     22    /**
     23     * Current dataset of Josm
     24     */
     25    private DataSet _CurrentDataSet;
    3426
    35         /**
    36          * Get current dataset of Josm
    37          * Used for comparability wit previous version
    38          * @return Current dataset of Josm
    39          */
    40         protected DataSet getCurrentDataSet()
    41         {
    42                 return _CurrentDataSet;
    43         }
    44        
    45         /**
    46          * Perform operation of customizing of stop area
    47          * @param stopArea Stop area object
    48          * @return stopArea Resulting stop area object
    49          */
    50         @Override
    51         public abstract StopArea performCustomizing(StopArea stopArea);
     27    /**
     28     * Constructor of operation of customizing of stop area
     29     *
     30     * @param currentDataSet Current data set of JOSM
     31     */
     32    public StopAreaOperationBase(DataSet currentDataSet) {
     33        _CurrentDataSet = currentDataSet;
     34    }
    5235
    53         /**
    54          * Get tag value of JOSM object
    55          * @param member JOSM object
    56          * @param tagName Tag name
    57          * @return Tag value
    58          */
    59         public static String getTagValue(OsmPrimitive member, String tagName)
    60         {
    61                 return member.getKeys().get(tagName);
    62         }
    63        
    64         /**
    65          * Comparing of value of tag for josm object
    66          * @param osmObject JOSM object
    67          * @param tagName Tag name
    68          * @param tagValue Tag value
    69          * @return true, if tag exists and equals tagValue
    70          */
    71         public static Boolean compareTag (OsmPrimitive osmObject, String tagName, String tagValue)
    72         {
    73                 String value = osmObject.getKeys().get(tagName);
    74                 if(value != null)
    75                         return value.equals(tagValue);
    76                 return false;
    77         }
    78        
    79         /**
    80          * Assign tag value to JOSM object
    81          * @param commands Command list
    82          * @param target Target OSM object
    83          * @param tag Tag name
    84          * @param tagValue Tag value
    85          * @return Resulting command list
    86          */
    87         public static List<Command> assignTag(List<Command> commands, OsmPrimitive target, String tag, String tagValue)
    88         {
    89                 if(commands == null)
    90                         commands = new ArrayList<Command>();
    91                 commands.add(new ChangePropertyCommand(target, tag, tagValue));
    92                 return commands;
    93         }
    94        
    95         /**
    96          * Clear tag value of JOSM object
    97          * @param commands Command list
    98          * @param target Target OSM object
    99          * @param tag Tag name
    100          * @return Resulting command list
    101          */
    102         public static List<Command> clearTag(List<Command> commands, OsmPrimitive target, String tag)
    103         {
    104                 return assignTag(commands, target, tag, null);
    105         }
    106        
     36    /**
     37     * Get current dataset of Josm Used for comparability wit previous version
     38     *
     39     * @return Current dataset of Josm
     40     */
     41    protected DataSet getCurrentDataSet() {
     42        return _CurrentDataSet;
     43    }
     44
     45    /**
     46     * Perform operation of customizing of stop area
     47     *
     48     * @param stopArea Stop area object
     49     * @return stopArea Resulting stop area object
     50     */
     51    @Override
     52    public abstract StopArea performCustomizing(StopArea stopArea);
     53
     54    /**
     55     * Get tag value of JOSM object
     56     *
     57     * @param member JOSM object
     58     * @param tagName Tag name
     59     * @return Tag value
     60     */
     61    public static String getTagValue(OsmPrimitive member, String tagName) {
     62        return member.getKeys().get(tagName);
     63    }
     64
     65    /**
     66     * Comparing of value of tag for josm object
     67     *
     68     * @param osmObject JOSM object
     69     * @param tagName Tag name
     70     * @param tagValue Tag value
     71     * @return true, if tag exists and equals tagValue
     72     */
     73    public static Boolean compareTag(OsmPrimitive osmObject, String tagName, String tagValue) {
     74        String value = osmObject.getKeys().get(tagName);
     75        if (value != null)
     76            return value.equals(tagValue);
     77        return false;
     78    }
     79
     80    /**
     81     * Assign tag value to JOSM object
     82     *
     83     * @param commands Command list
     84     * @param target Target OSM object
     85     * @param tag Tag name
     86     * @param tagValue Tag value
     87     * @return Resulting command list
     88     */
     89    public static List<Command> assignTag(List<Command> commands, OsmPrimitive target, String tag, String tagValue) {
     90        if (commands == null)
     91            commands = new ArrayList<Command>();
     92        commands.add(new ChangePropertyCommand(target, tag, tagValue));
     93        return commands;
     94    }
     95
     96    /**
     97     * Clear tag value of JOSM object
     98     *
     99     * @param commands Command list
     100     * @param target Target OSM object
     101     * @param tag Tag name
     102     * @return Resulting command list
     103     */
     104    public static List<Command> clearTag(List<Command> commands, OsmPrimitive target, String tag) {
     105        return assignTag(commands, target, tag, null);
     106    }
     107
    107108    /**
    108109     * Calculation of center of platform, if platform is way
     110     *
    109111     * @param platform Platform primitive
    110112     * @return Coordinates of center of platform
    111113     */
    112     public static LatLon getCenterOfWay(OsmPrimitive platform)
    113     {
    114                 if(platform instanceof Way)
    115                 {
    116                         //p = mapView.getPoint((Node) stopArea.selectedObject);
    117                         Double sumLat = 0.0;
    118                         Double sumLon = 0.0;
    119                         Integer countNode = 0;
    120                         for(Node node : ((Way) platform).getNodes())
    121                         {
    122                                 LatLon coord = node.getCoor();
    123                                 sumLat += coord.getX();
    124                                 sumLon += coord.getY();
    125                                 countNode++;
    126                         }
    127                         return new LatLon(sumLon / countNode, sumLat / countNode);             
    128                 }
    129                 return null;
     114    public static LatLon getCenterOfWay(OsmPrimitive platform) {
     115        if (platform instanceof Way) {
     116            // p = mapView.getPoint((Node) stopArea.selectedObject);
     117            Double sumLat = 0.0;
     118            Double sumLon = 0.0;
     119            Integer countNode = 0;
     120            for (Node node : ((Way) platform).getNodes()) {
     121                LatLon coord = node.getCoor();
     122                sumLat += coord.getX();
     123                sumLon += coord.getY();
     124                countNode++;
     125            }
     126            return new LatLon(sumLon / countNode, sumLat / countNode);
     127        }
     128        return null;
    130129    }
    131130
    132 
    133131}
Note: See TracChangeset for help on using the changeset viewer.