Ignore:
Timestamp:
2014-10-19T01:27:04+02:00 (10 years ago)
Author:
donvip
Message:

[josm_plugins] fix java 7 warnings / global usage of try-with-resource

Location:
applications/editors/josm/plugins/sds
Files:
18 edited

Legend:

Unmodified
Added
Removed
  • applications/editors/josm/plugins/sds/.settings/org.eclipse.jdt.core.prefs

    r30736 r30738  
    4040org.eclipse.jdt.core.compiler.problem.missingOverrideAnnotation=ignore
    4141org.eclipse.jdt.core.compiler.problem.missingOverrideAnnotationForInterfaceMethodImplementation=enabled
    42 org.eclipse.jdt.core.compiler.problem.missingSerialVersion=warning
     42org.eclipse.jdt.core.compiler.problem.missingSerialVersion=ignore
    4343org.eclipse.jdt.core.compiler.problem.missingSynchronizedOnInheritedMethod=ignore
    4444org.eclipse.jdt.core.compiler.problem.noEffectAssignment=warning
  • applications/editors/josm/plugins/sds/src/org/openstreetmap/hot/sds/DetermineSdsModificationsUploadHook.java

    r30737 r30738  
    3232public class DetermineSdsModificationsUploadHook implements UploadHook
    3333{
    34         private SeparateDataStorePlugin plugin;
     34    private SeparateDataStorePlugin plugin;
    3535
    36         DetermineSdsModificationsUploadHook(SeparateDataStorePlugin plugin)     {
    37                 this.plugin = plugin;
    38         }
    39        
     36    DetermineSdsModificationsUploadHook(SeparateDataStorePlugin plugin)    {
     37        this.plugin = plugin;
     38    }
     39   
    4040    public boolean checkUpload(APIDataSet apiDataSet) {
    41        
    42         ArrayList<OsmPrimitive> droplist = new ArrayList<>();
    43        
    44         // check deleted primitives for special tags.
    45         for (OsmPrimitive del : apiDataSet.getPrimitivesToDelete()) {
    46                 IPrimitive old = plugin.getOriginalPrimitive(del);
    47                 if (hasSpecialTags(old)) {
    48                         // request deletion of all tags for this object on special server.
    49                         plugin.enqueueForUpload(del, new HashMap<String, String>(), false);
    50                 }
    51         }
     41       
     42        ArrayList<OsmPrimitive> droplist = new ArrayList<>();
     43       
     44        // check deleted primitives for special tags.
     45        for (OsmPrimitive del : apiDataSet.getPrimitivesToDelete()) {
     46            IPrimitive old = plugin.getOriginalPrimitive(del);
     47            if (hasSpecialTags(old)) {
     48                // request deletion of all tags for this object on special server.
     49                plugin.enqueueForUpload(del, new HashMap<String, String>(), false);
     50            }
     51        }
    5252
    53         // check modified primitives.
    54         for (OsmPrimitive upd : apiDataSet.getPrimitivesToUpdate()) {
    55                 
    56                 HashSet<String> allKeys = new HashSet<>();
    57                 boolean specialTags = false;
    58                 
    59                 // process tags of new object
    60                 for (String key : upd.keySet()) {
    61                         allKeys.add(key);
    62                         if (!specialTags && isSpecialKey(key)) specialTags = true;
    63                 }
    64                 
    65                 // process tags of old object
    66                 IPrimitive old = plugin.getOriginalPrimitive(upd);
    67                 for (String key : old.keySet()) {
    68                         allKeys.add(key);
    69                         if (!specialTags && isSpecialKey(key)) specialTags = true;
    70                 }
     53        // check modified primitives.
     54           for (OsmPrimitive upd : apiDataSet.getPrimitivesToUpdate()) {
     55              
     56               HashSet<String> allKeys = new HashSet<>();
     57               boolean specialTags = false;
     58              
     59               // process tags of new object
     60               for (String key : upd.keySet()) {
     61                   allKeys.add(key);
     62                   if (!specialTags && isSpecialKey(key)) specialTags = true;
     63               }
     64              
     65               // process tags of old object
     66               IPrimitive old = plugin.getOriginalPrimitive(upd);
     67               for (String key : old.keySet()) {
     68                   allKeys.add(key);
     69                  if (!specialTags && isSpecialKey(key)) specialTags = true;
     70               }
    7171
    72                 // if neither has special tags, done with this object.
    73                 if (!specialTags) continue;
    74                 
    75                 // special tags are involved. find out what, exactly, has changed.
    76                 boolean changeInSpecialTags = false;
    77                 boolean changeInOtherTags = false;
    78                 for (String key : allKeys) {
    79                         if (old.get(key) == null || upd.get(key) == null || !old.get(key).equals(upd.get(key))) {
    80                                 if (isSpecialKey(key)) changeInSpecialTags = true; else changeInOtherTags = true;
    81                                 if (changeInSpecialTags && changeInOtherTags) break;
    82                         }
    83                 }
    84                 
    85                 // change *only* in standard tags - done with this object.
    86                 if (!changeInSpecialTags) continue;
    87                 
    88                 // assemble new set of special tags. might turn out to be empty.
    89                 HashMap<String, String> newSpecialTags = new HashMap<>();
    90                 for (String key : upd.keySet()) {
    91                         if (isSpecialKey(key)) newSpecialTags.put(key, upd.get(key));
    92                 }
    93                 
    94                 boolean uploadToOsm = changeInOtherTags;
    95                 
    96                 // not done yet: if no changes in standard tags, we need to find out if
    97                 // there were changes in the other properties (node: lat/lon, way/relation:
    98                 // member list). If the answer is no, then the object must be removed from
    99                 // JOSM's normal upload queue, else we would be uploading a non-edit.
    100                 if (!changeInOtherTags) {
    101                         switch(old.getType()) {
    102                         case NODE:
    103                                 INode nold = (INode) old;
    104                                 INode nupd = (INode) upd;
    105                                 uploadToOsm = !(nold.getCoor().equals(nupd.getCoor()));
    106                                 break;
    107                         case WAY:
    108                                 IWay wold = (IWay) old;
    109                                 IWay wupd = (IWay) upd;
    110                                 if (wold.getNodesCount() != wupd.getNodesCount()) {
    111                                         uploadToOsm = true;
    112                                         break;
    113                                 }
    114                                 for (int i = 0; i < wold.getNodesCount(); i++) {
    115                                         if (wold.getNodeId(i) != wupd.getNodeId(i)) {
    116                                                 uploadToOsm = true;
    117                                                 break;
    118                                         }
    119                                 }
    120                                 break;
    121                         case RELATION:
    122                                 IRelation rold = (IRelation) old;
    123                                 IRelation rupd = (IRelation) upd;
    124                                 if (rold.getMembersCount()!= rupd.getMembersCount()) {
    125                                         uploadToOsm = true;
    126                                         break;
    127                                 }
    128                                 for (int i = 0; i < rold.getMembersCount(); i++) {
    129                                         if (rold.getMemberType(i) != rupd.getMemberType(i) ||
    130                                                 rold.getMemberId(i) != rupd.getMemberId(i)) {
    131                                                 uploadToOsm = true;
    132                                                 break;
    133                                         }
    134                                 }
    135                                 break;
    136                         }
    137                 }
    138                 
    139                 // request that new set of special tags be uploaded
    140                 plugin.enqueueForUpload(upd, newSpecialTags, !uploadToOsm);
    141                 
    142                 // we cannot remove from getPrimitivesToUpdate, this would result in a
    143                 // ConcurrentModificationException.
    144                 if (!uploadToOsm) droplist.add(upd);
    145                 
    146         }
    147         
    148         apiDataSet.getPrimitivesToUpdate().removeAll(droplist);
    149                        
    150         // check added primitives.
    151         for (OsmPrimitive add : apiDataSet.getPrimitivesToAdd()) {
    152                 // assemble new set of special tags. might turn out to be empty.
    153                 HashMap<String, String> newSpecialTags = new HashMap<>();
    154                 for (String key : add.keySet()) {
    155                         if (isSpecialKey(key)) newSpecialTags.put(key, add.get(key));
    156                 }
    157                 if (!newSpecialTags.isEmpty()) plugin.enqueueForUpload(add, newSpecialTags, false);
    158         }
    159        
    160         // FIXME it is possible that the list of OSM edits is totally empty.
    161                 return true;
     72               // if neither has special tags, done with this object.
     73               if (!specialTags) continue;
     74              
     75               // special tags are involved. find out what, exactly, has changed.
     76               boolean changeInSpecialTags = false;
     77               boolean changeInOtherTags = false;
     78               for (String key : allKeys) {
     79                   if (old.get(key) == null || upd.get(key) == null || !old.get(key).equals(upd.get(key))) {
     80                       if (isSpecialKey(key)) changeInSpecialTags = true; else changeInOtherTags = true;
     81                       if (changeInSpecialTags && changeInOtherTags) break;
     82                   }
     83               }
     84              
     85               // change *only* in standard tags - done with this object.
     86               if (!changeInSpecialTags) continue;
     87              
     88               // assemble new set of special tags. might turn out to be empty.
     89               HashMap<String, String> newSpecialTags = new HashMap<>();
     90               for (String key : upd.keySet()) {
     91                   if (isSpecialKey(key)) newSpecialTags.put(key, upd.get(key));
     92               }
     93              
     94               boolean uploadToOsm = changeInOtherTags;
     95              
     96               // not done yet: if no changes in standard tags, we need to find out if
     97               // there were changes in the other properties (node: lat/lon, way/relation:
     98               // member list). If the answer is no, then the object must be removed from
     99               // JOSM's normal upload queue, else we would be uploading a non-edit.
     100               if (!changeInOtherTags) {
     101                   switch(old.getType()) {
     102                   case NODE:
     103                       INode nold = (INode) old;
     104                       INode nupd = (INode) upd;
     105                       uploadToOsm = !(nold.getCoor().equals(nupd.getCoor()));
     106                       break;
     107                   case WAY:
     108                       IWay wold = (IWay) old;
     109                       IWay wupd = (IWay) upd;
     110                       if (wold.getNodesCount() != wupd.getNodesCount()) {
     111                           uploadToOsm = true;
     112                           break;
     113                       }
     114                       for (int i = 0; i < wold.getNodesCount(); i++) {
     115                           if (wold.getNodeId(i) != wupd.getNodeId(i)) {
     116                               uploadToOsm = true;
     117                               break;
     118                           }
     119                       }
     120                       break;
     121                   case RELATION:
     122                       IRelation rold = (IRelation) old;
     123                       IRelation rupd = (IRelation) upd;
     124                       if (rold.getMembersCount()!= rupd.getMembersCount()) {
     125                           uploadToOsm = true;
     126                           break;
     127                       }
     128                       for (int i = 0; i < rold.getMembersCount(); i++) {
     129                           if (rold.getMemberType(i) != rupd.getMemberType(i) ||
     130                               rold.getMemberId(i) != rupd.getMemberId(i)) {
     131                               uploadToOsm = true;
     132                               break;
     133                           }
     134                       }
     135                       break;
     136                   }
     137               }
     138              
     139               // request that new set of special tags be uploaded
     140               plugin.enqueueForUpload(upd, newSpecialTags, !uploadToOsm);
     141              
     142               // we cannot remove from getPrimitivesToUpdate, this would result in a
     143               // ConcurrentModificationException.
     144               if (!uploadToOsm) droplist.add(upd);
     145              
     146        }
     147          
     148        apiDataSet.getPrimitivesToUpdate().removeAll(droplist);
     149                   
     150           // check added primitives.
     151           for (OsmPrimitive add : apiDataSet.getPrimitivesToAdd()) {
     152               // assemble new set of special tags. might turn out to be empty.
     153               HashMap<String, String> newSpecialTags = new HashMap<>();
     154               for (String key : add.keySet()) {
     155                   if (isSpecialKey(key)) newSpecialTags.put(key, add.get(key));
     156               }
     157               if (!newSpecialTags.isEmpty()) plugin.enqueueForUpload(add, newSpecialTags, false);
     158        }
     159       
     160           // FIXME it is possible that the list of OSM edits is totally empty.
     161        return true;
    162162
    163163    }
    164164   
    165165    boolean hasSpecialTags(IPrimitive p) {
    166         for (String key : p.keySet()) {
    167                 if (isSpecialKey(key)) return true;
    168         }   
    169         return false;
     166        for (String key : p.keySet()) {
     167            if (isSpecialKey(key)) return true;
     168        }   
     169        return false;
    170170    }
    171171   
    172172    boolean isSpecialKey(String key) {
    173         return key.startsWith(plugin.getIgnorePrefix());
     173        return key.startsWith(plugin.getIgnorePrefix());
    174174    }
    175175}
  • applications/editors/josm/plugins/sds/src/org/openstreetmap/hot/sds/ReadPostprocessor.java

    r30737 r30738  
    2424
    2525public class ReadPostprocessor implements OsmServerReadPostprocessor {
    26        
    27         private ArrayList<Long> nodeList;
    28         private ArrayList<Long> wayList;
    29         private ArrayList<Long> relationList;
    30        
    31         private SeparateDataStorePlugin plugin;
     26   
     27    private ArrayList<Long> nodeList;
     28    private ArrayList<Long> wayList;
     29    private ArrayList<Long> relationList;
     30   
     31    private SeparateDataStorePlugin plugin;
    3232
    33         public ReadPostprocessor(SeparateDataStorePlugin plugin) {
    34                 this.plugin = plugin;
    35         }
    36        
     33    public ReadPostprocessor(SeparateDataStorePlugin plugin) {
     34        this.plugin = plugin;
     35    }
     36   
    3737    @Override
    3838    public void postprocessDataSet(DataSet ds, ProgressMonitor progress) {
    3939       
    40                 nodeList = new ArrayList<>();
    41                 wayList = new ArrayList<>();
    42                 relationList = new ArrayList<>();
     40        nodeList = new ArrayList<>();
     41        wayList = new ArrayList<>();
     42        relationList = new ArrayList<>();
    4343
    44                 Visitor adder = new Visitor() {
    45                         @Override
    46                         public void visit(Node n) {
    47                                 nodeList.add(n.getId());
    48                                 plugin.originalNodes.put(n.getId(), n.save());
    49                         }
    50                         @Override
    51                         public void visit(Way w) {
    52                                 wayList.add(w.getId());
    53                                 plugin.originalWays.put(w.getId(), w.save());
    54                         }
    55                         @Override
    56                         public void visit(Relation e) {
    57                                 relationList.add(e.getId());
    58                                 plugin.originalNodes.put(e.getId(), e.save());
    59                         }
    60                         @Override
    61                         public void visit(Changeset cs) {}
    62                 };
    63                
    64                 for (OsmPrimitive p : ds.allPrimitives()) {
    65                         p.accept(adder);
    66                 }
    67                        
    68                 SdsApi api = SdsApi.getSdsApi();
    69                 String rv = "";
    70                 try {
    71                         rv = api.requestShadowsFromSds(nodeList, wayList, relationList, progress);
    72                 } catch (SdsTransferException e) {
    73                         // TODO Auto-generated catch block
    74                         e.printStackTrace();
    75                 }
    76                
    77                 // this is slightly inefficient, as we're re-making the string into
    78                 // an input stream when there was an input stream to be had inside the
    79                 // SdsApi already, but this encapsulates things better.
     44        Visitor adder = new Visitor() {
     45            @Override
     46            public void visit(Node n) {
     47                nodeList.add(n.getId());
     48                plugin.originalNodes.put(n.getId(), n.save());
     49            }
     50            @Override
     51            public void visit(Way w) {
     52                wayList.add(w.getId());
     53                plugin.originalWays.put(w.getId(), w.save());
     54            }
     55            @Override
     56            public void visit(Relation e) {
     57                relationList.add(e.getId());
     58                plugin.originalNodes.put(e.getId(), e.save());
     59            }
     60            @Override
     61            public void visit(Changeset cs) {}
     62        };
     63       
     64        for (OsmPrimitive p : ds.allPrimitives()) {
     65            p.accept(adder);
     66        }
     67           
     68        SdsApi api = SdsApi.getSdsApi();
     69        String rv = "";
     70        try {
     71            rv = api.requestShadowsFromSds(nodeList, wayList, relationList, progress);
     72        } catch (SdsTransferException e) {
     73            // TODO Auto-generated catch block
     74            e.printStackTrace();
     75        }
     76       
     77        // this is slightly inefficient, as we're re-making the string into
     78        // an input stream when there was an input stream to be had inside the
     79        // SdsApi already, but this encapsulates things better.
    8080        InputStream xmlStream;
    81                 try {
    82                         xmlStream = new ByteArrayInputStream(rv.getBytes("UTF-8"));
    83                 InputSource inputSource = new InputSource(xmlStream);
    84                         SAXParserFactory.newInstance().newSAXParser().parse(inputSource, new SdsParser(ds, plugin));
    85                 } catch (UnsupportedEncodingException e1) {
    86                         // TODO Auto-generated catch block
    87                         e1.printStackTrace();
    88                 } catch (SAXException e) {
    89                         // TODO Auto-generated catch block
    90                         e.printStackTrace();
    91                 } catch (IOException e) {
    92                         // TODO Auto-generated catch block
    93                         e.printStackTrace();
    94                 } catch (ParserConfigurationException e) {
    95                         // TODO Auto-generated catch block
    96                         e.printStackTrace();
    97                 }
     81        try {
     82            xmlStream = new ByteArrayInputStream(rv.getBytes("UTF-8"));
     83            InputSource inputSource = new InputSource(xmlStream);
     84            SAXParserFactory.newInstance().newSAXParser().parse(inputSource, new SdsParser(ds, plugin));
     85        } catch (UnsupportedEncodingException e1) {
     86            // TODO Auto-generated catch block
     87            e1.printStackTrace();
     88        } catch (SAXException e) {
     89            // TODO Auto-generated catch block
     90            e.printStackTrace();
     91        } catch (IOException e) {
     92            // TODO Auto-generated catch block
     93            e.printStackTrace();
     94        } catch (ParserConfigurationException e) {
     95            // TODO Auto-generated catch block
     96            e.printStackTrace();
     97        }
    9898
    9999    }
  • applications/editors/josm/plugins/sds/src/org/openstreetmap/hot/sds/SdsApi.java

    r30737 r30738  
    3434 *
    3535 * This is modeled after JOSM's own OsmAPI class.
    36  * 
     36 *
    3737 */
    3838public class SdsApi extends SdsConnection {
     
    4242    /** the collection of instantiated OSM APIs */
    4343    private static HashMap<String, SdsApi> instances = new HashMap<>();
    44    
     44
    4545    /**
    4646     * replies the {@see OsmApi} for a given server URL
     
    123123     * @param osm the primitive
    124124     * @throws SdsTransferException if something goes wrong
    125      
     125
    126126    public void createPrimitive(IPrimitive osm, ProgressMonitor monitor) throws SdsTransferException {
    127127        String ret = "";
     
    144144     * @param monitor the progress monitor
    145145     * @throws SdsTransferException if something goes wrong
    146      
     146
    147147    public void modifyPrimitive(IPrimitive osm, ProgressMonitor monitor) throws SdsTransferException {
    148148        String ret = null;
     
    165165     * @param osm the primitive
    166166     * @throws SdsTransferException if something goes wrong
    167      
     167
    168168    public void deletePrimitive(IPrimitive osm, ProgressMonitor monitor) throws SdsTransferException {
    169169        ensureValidChangeset();
     
    182182     * @param list the list of changed OSM Primitives
    183183     * @param  monitor the progress monitor
    184      * @return 
     184     * @return
    185185     * @return list of processed primitives
    186      * @throws SdsTransferException 
     186     * @throws SdsTransferException
    187187     * @throws SdsTransferException if something is wrong
    188      
     188
    189189    public Collection<IPrimitive> uploadDiff(Collection<? extends IPrimitive> list, ProgressMonitor monitor) throws SdsTransferException {
    190190        try {
     
    227227    }
    228228    */
    229    
     229
    230230    public String requestShadowsFromSds(List<Long> nodes, List<Long> ways, List<Long> relations, ProgressMonitor pm) throws SdsTransferException {
    231        
    232         StringBuilder request = new StringBuilder();
    233         String delim = "";
    234         String comma = "";
    235        
    236         if (nodes != null && !nodes.isEmpty()) {
    237                 request.append(delim);
    238                 delim = "&";
    239                 comma = "";
    240                 request.append("nodes=");
    241                 for (long i : nodes) {
    242                         request.append(comma);
    243                         comma = ",";
    244                         request.append(i);
    245                 }
    246         }
    247         if (ways != null && !ways.isEmpty()) {
    248                 request.append(delim);
    249                 delim = "&";
    250                 comma = "";
    251                 request.append("ways=");
    252                 for (long i : ways) {
    253                         request.append(comma);
    254                         comma = ",";
    255                         request.append(i);
    256                 }
    257         }
    258         if (relations != null && !relations.isEmpty()) {
    259                 request.append(delim);
    260                 delim = "&";
    261                 comma = "";
    262                 request.append("relations=");
    263                 for (long i : relations) {
    264                         request.append(comma);
    265                         comma = ",";
    266                         request.append(i);
    267                 }
    268         }
    269        
    270         return sendRequest("POST", "collectshadows", request.toString(), pm ,true);
    271    
     231
     232        StringBuilder request = new StringBuilder();
     233        String delim = "";
     234        String comma = "";
     235
     236        if (nodes != null && !nodes.isEmpty()) {
     237            request.append(delim);
     238            delim = "&";
     239            comma = "";
     240            request.append("nodes=");
     241            for (long i : nodes) {
     242                request.append(comma);
     243                comma = ",";
     244                request.append(i);
     245            }
     246        }
     247        if (ways != null && !ways.isEmpty()) {
     248            request.append(delim);
     249            delim = "&";
     250            comma = "";
     251            request.append("ways=");
     252            for (long i : ways) {
     253                request.append(comma);
     254                comma = ",";
     255                request.append(i);
     256            }
     257        }
     258        if (relations != null && !relations.isEmpty()) {
     259            request.append(delim);
     260            delim = "&";
     261            comma = "";
     262            request.append("relations=");
     263            for (long i : relations) {
     264                request.append(comma);
     265                comma = ",";
     266                request.append(i);
     267            }
     268        }
     269
     270        return sendRequest("POST", "collectshadows", request.toString(), pm ,true);
     271
    272272    }
    273273
     
    304304        return sendRequest(requestMethod, urlSuffix, requestBody, monitor, doAuth, false);
    305305    }
    306    
     306
    307307    public boolean updateSds(String message, ProgressMonitor pm) {
    308         try {
    309                         sendRequest("POST", "createshadows", message, pm);
    310                 } catch (SdsTransferException e) {
    311                         // TODO Auto-generated catch block
    312                         e.printStackTrace();
    313                 }
    314         return true;
     308        try {
     309            sendRequest("POST", "createshadows", message, pm);
     310        } catch (SdsTransferException e) {
     311            // TODO Auto-generated catch block
     312            e.printStackTrace();
     313        }
     314        return true;
    315315    }
    316316
     
    352352                    activeConnection.setDoOutput(true);
    353353                    activeConnection.setRequestProperty("Content-type", "application/x-www-form-urlencoded");
    354                     OutputStream out = activeConnection.getOutputStream();
    355 
    356                     // It seems that certain bits of the Ruby API are very unhappy upon
    357                     // receipt of a PUT/POST message without a Content-length header,
    358                     // even if the request has no payload.
    359                     // Since Java will not generate a Content-length header unless
    360                     // we use the output stream, we create an output stream for PUT/POST
    361                     // even if there is no payload.
    362                     if (requestBody != null) {
    363                         BufferedWriter bwr = new BufferedWriter(new OutputStreamWriter(out, "UTF-8"));
    364                         bwr.write(requestBody);
    365                         bwr.flush();
     354                    try (OutputStream out = activeConnection.getOutputStream()) {
     355
     356                        // It seems that certain bits of the Ruby API are very unhappy upon
     357                        // receipt of a PUT/POST message without a Content-length header,
     358                        // even if the request has no payload.
     359                        // Since Java will not generate a Content-length header unless
     360                        // we use the output stream, we create an output stream for PUT/POST
     361                        // even if there is no payload.
     362                        if (requestBody != null) {
     363                            BufferedWriter bwr = new BufferedWriter(new OutputStreamWriter(out, "UTF-8"));
     364                            bwr.write(requestBody);
     365                            bwr.flush();
     366                        }
    366367                    }
    367                     out.close();
    368368                }
    369369
     
    442442        }
    443443    }
    444    
     444
    445445    protected InputStream getInputStream(String urlStr, ProgressMonitor progressMonitor) throws SdsTransferException {
    446446        urlStr = getBaseUrl() + urlStr;
    447         try {
     447        try {
    448448            URL url = null;
    449449            try {
  • applications/editors/josm/plugins/sds/src/org/openstreetmap/hot/sds/SdsConnection.java

    r29854 r30738  
    2121 */
    2222public class SdsConnection {
    23        
     23   
    2424    protected boolean cancel = false;
    2525    protected HttpURLConnection activeConnection;
  • applications/editors/josm/plugins/sds/src/org/openstreetmap/hot/sds/SdsCredentialAgent.java

    r30737 r30738  
    120120    }
    121121
    122         @Override
    123         public void storeOAuthAccessToken(OAuthToken accessToken)
    124                         throws CredentialsAgentException {
    125                 // no-op
    126                
    127         }
    128        
     122    @Override
     123    public void storeOAuthAccessToken(OAuthToken accessToken)
     124            throws CredentialsAgentException {
     125        // no-op
     126       
     127    }
     128   
    129129    @Override
    130130    public CredentialsAgentResponse getCredentials(RequestorType requestorType, String host, boolean noSuccessWithLastResponse) throws CredentialsAgentException{
  • applications/editors/josm/plugins/sds/src/org/openstreetmap/hot/sds/SdsCredentialDialog.java

    r28160 r30738  
    1111public class SdsCredentialDialog extends CredentialDialog {
    1212
    13         static public SdsCredentialDialog getSdsApiCredentialDialog(String username, String password, String host, String saveUsernameAndPasswordCheckboxText) {
     13    static public SdsCredentialDialog getSdsApiCredentialDialog(String username, String password, String host, String saveUsernameAndPasswordCheckboxText) {
    1414        SdsCredentialDialog dialog = new SdsCredentialDialog(saveUsernameAndPasswordCheckboxText);
    1515        dialog.prepareForSdsApiCredentials(username, password);
     
    2121
    2222    public SdsCredentialDialog(String saveUsernameAndPasswordCheckboxText) {
    23         super(saveUsernameAndPasswordCheckboxText);
     23        super(saveUsernameAndPasswordCheckboxText);
    2424    }
    25        
     25       
    2626    public void prepareForSdsApiCredentials(String username, String password) {
    2727        setTitle(tr("Enter credentials for Separate Data Store API"));
     
    3333    private static class SdsApiCredentialsPanel extends CredentialPanel {
    3434
    35                 @Override
     35        @Override
    3636        protected void build() {
    3737            super.build();
  • applications/editors/josm/plugins/sds/src/org/openstreetmap/hot/sds/SdsDiskAccessAction.java

    r30666 r30738  
    1616@SuppressWarnings("serial")
    1717public abstract class SdsDiskAccessAction extends DiskAccessAction {
    18        
     18   
    1919    public SdsDiskAccessAction(String name, String iconName, String tooltip,
    20                         Shortcut shortcut) {
    21                 super(name, iconName, tooltip, shortcut);
    22         }
     20            Shortcut shortcut) {
     21        super(name, iconName, tooltip, shortcut);
     22    }
    2323
    24         public static SwingFileChooser createAndOpenFileChooser(boolean open, boolean multiple, String title) {
     24    public static SwingFileChooser createAndOpenFileChooser(boolean open, boolean multiple, String title) {
    2525        String curDir = Main.pref.get("lastDirectory");
    2626        if (curDir.equals("")) {
     
    3535        fc.setMultiSelectionEnabled(multiple);
    3636        fc.setAcceptAllFileFilterUsed(false);
    37                        
     37               
    3838        fc.setFileFilter(new FileFilter() {
    39                 public boolean accept(File pathname) { return pathname.getName().endsWith(".sds") || pathname.isDirectory(); }
    40                         public String getDescription() { return (tr("SDS data file")); }
     39            public boolean accept(File pathname) { return pathname.getName().endsWith(".sds") || pathname.isDirectory(); }
     40            public String getDescription() { return (tr("SDS data file")); }
    4141        });     
    4242
     
    8383       
    8484        fc.setFileFilter(new FileFilter() {
    85                 public boolean accept(File pathname) { return pathname.getName().endsWith(".sds") || pathname.isDirectory(); }
    86                         public String getDescription() { return (tr("SDS data file")); }
     85            public boolean accept(File pathname) { return pathname.getName().endsWith(".sds") || pathname.isDirectory(); }
     86            public String getDescription() { return (tr("SDS data file")); }
    8787        });
    8888       
  • applications/editors/josm/plugins/sds/src/org/openstreetmap/hot/sds/SdsLoadAction.java

    r30737 r30738  
    2626@SuppressWarnings("serial")
    2727public class SdsLoadAction extends SdsDiskAccessAction {
    28        
    29         private SeparateDataStorePlugin plugin;
     28   
     29    private SeparateDataStorePlugin plugin;
    3030
    3131    public SdsLoadAction(SeparateDataStorePlugin p) {
    3232        super(tr("Load..."), "sds_load", tr("Load separate data store data from a file."), null);
    33         plugin = p;
     33        plugin = p;
    3434    }
    3535   
  • applications/editors/josm/plugins/sds/src/org/openstreetmap/hot/sds/SdsMenu.java

    r29854 r30738  
    5656
    5757    void setEnabledState() {
    58         boolean en = (Main.map != null) && (Main.map.mapView != null) && (Main.map.mapView.getActiveLayer() instanceof OsmDataLayer);
    59         loadItem.setEnabled(en);
    60         saveItem.setEnabled(en);
     58        boolean en = (Main.map != null) && (Main.map.mapView != null) && (Main.map.mapView.getActiveLayer() instanceof OsmDataLayer);
     59        loadItem.setEnabled(en);
     60        saveItem.setEnabled(en);
    6161    }
    6262 
    63         @Override
    64         public void activeLayerChange(Layer oldLayer, Layer newLayer) { setEnabledState(); }
     63    @Override
     64    public void activeLayerChange(Layer oldLayer, Layer newLayer) {    setEnabledState(); }
    6565
    66         @Override
    67         public void layerAdded(Layer newLayer) { setEnabledState(); }
     66    @Override
     67    public void layerAdded(Layer newLayer) { setEnabledState(); }
    6868
    69         @Override
    70         public void layerRemoved(Layer oldLayer) { setEnabledState(); }
     69    @Override
     70    public void layerRemoved(Layer oldLayer) { setEnabledState(); }
    7171
    72         private class SdsAboutAction extends JosmAction {
     72    private class SdsAboutAction extends JosmAction {
    7373
    74             public SdsAboutAction() {
    75                 super(tr("About"), "sds", tr("Information about SDS."), null, true);
    76             }
     74        public SdsAboutAction() {
     75            super(tr("About"), "sds", tr("Information about SDS."), null, true);
     76        }
    7777
    78             public void actionPerformed(ActionEvent e) {
    79                 JPanel about = new JPanel();
     78        public void actionPerformed(ActionEvent e) {
     79            JPanel about = new JPanel();
    8080
    81                 JTextArea l = new JTextArea();
    82                 l.setLineWrap(true);
    83                 l.setWrapStyleWord(true);
    84                 l.setEditable(false);
    85                 l.setText("Separate Data Store\n\nThis plugin provides access to a \"Separate Data Store\" server. " +
    86                                 "Whenever data is loaded from the OSM API, it queries the SDS for additional tags that have been stored for the objects just loaded, " +
    87                                 "and adds these tags. When you upload data to JOSM, SDS tags will again be separated and, instead of sending them to OSM, they will be uplaoded to SDS." +
    88                                 "\n\n" +
    89                                 "This depends on SDS tags starting with a special prefix, which can be configured in the SDS preferences." +
    90                                 "\n\n" +
    91                                 "Using the SDS server will usually require an account to be set up there, which is completely independent of your OSM account.");
    92                
    93                 l.setBorder(BorderFactory.createEmptyBorder(5,5,5,5));
    94                 l.setOpaque(false);
    95                 l.setPreferredSize(new Dimension(500,300));
    96                 JScrollPane sp = new JScrollPane(l);
    97                 sp.setBorder(null);
    98                 sp.setOpaque(false);
    99                                
    100                 about.add(sp);
    101                
    102                 about.setPreferredSize(new Dimension(500,300));
     81            JTextArea l = new JTextArea();
     82            l.setLineWrap(true);
     83            l.setWrapStyleWord(true);
     84            l.setEditable(false);
     85            l.setText("Separate Data Store\n\nThis plugin provides access to a \"Separate Data Store\" server. " +
     86                    "Whenever data is loaded from the OSM API, it queries the SDS for additional tags that have been stored for the objects just loaded, " +
     87                    "and adds these tags. When you upload data to JOSM, SDS tags will again be separated and, instead of sending them to OSM, they will be uplaoded to SDS." +
     88                    "\n\n" +
     89                    "This depends on SDS tags starting with a special prefix, which can be configured in the SDS preferences." +
     90                    "\n\n" +
     91                    "Using the SDS server will usually require an account to be set up there, which is completely independent of your OSM account.");
     92           
     93            l.setBorder(BorderFactory.createEmptyBorder(5,5,5,5));
     94            l.setOpaque(false);
     95            l.setPreferredSize(new Dimension(500,300));
     96            JScrollPane sp = new JScrollPane(l);
     97            sp.setBorder(null);
     98            sp.setOpaque(false);
     99                       
     100            about.add(sp);
     101           
     102            about.setPreferredSize(new Dimension(500,300));
    103103
    104                 JOptionPane.showMessageDialog(Main.parent, about, tr("About SDS..."),
    105                         JOptionPane.INFORMATION_MESSAGE, null);
    106             }
    107         }
    108        
    109         private class SdsPreferencesAction extends JosmAction implements Runnable {
     104            JOptionPane.showMessageDialog(Main.parent, about, tr("About SDS..."),
     105                    JOptionPane.INFORMATION_MESSAGE, null);
     106        }
     107    }
     108   
     109    private class SdsPreferencesAction extends JosmAction implements Runnable {
    110110
    111             private SdsPreferencesAction() {
    112                 super(tr("Preferences..."), "preference", tr("Open a preferences dialog for SDS."),
    113                         null, true);
    114                 putValue("help", ht("/Action/Preferences"));
    115             }
     111        private SdsPreferencesAction() {
     112            super(tr("Preferences..."), "preference", tr("Open a preferences dialog for SDS."),
     113                    null, true);
     114            putValue("help", ht("/Action/Preferences"));
     115        }
    116116
    117             /**
    118              * Launch the preferences dialog.
    119              */
    120             public void actionPerformed(ActionEvent e) {
    121                 run();
    122             }
     117        /**
     118         * Launch the preferences dialog.
     119         */
     120        public void actionPerformed(ActionEvent e) {
     121            run();
     122        }
    123123
    124             public void run() {
    125                 PreferenceDialog pd = new PreferenceDialog(Main.parent);
    126                 // unusual reflection mechanism to cater for older JOSM versions where
    127                 // the selectPreferencesTabByName method was not public
    128                 try {
    129                         Method sptbn = pd.getClass().getMethod("selectPreferencesTabByName", String.class);
    130                         sptbn.invoke(pd, "sds");
    131                 } catch (Exception ex) {
    132                         // ignore
    133                 }
    134                 pd.setVisible(true);
    135             }
    136         }
     124        public void run() {
     125            PreferenceDialog pd = new PreferenceDialog(Main.parent);
     126            // unusual reflection mechanism to cater for older JOSM versions where
     127            // the selectPreferencesTabByName method was not public
     128            try {
     129                Method sptbn = pd.getClass().getMethod("selectPreferencesTabByName", String.class);
     130                sptbn.invoke(pd, "sds");
     131            } catch (Exception ex) {
     132                // ignore
     133            }
     134            pd.setVisible(true);
     135        }
     136    }
    137137
    138138
  • applications/editors/josm/plugins/sds/src/org/openstreetmap/hot/sds/SdsOsmWriter.java

    r30737 r30738  
    2727public class SdsOsmWriter extends OsmWriter {
    2828
    29         private SeparateDataStorePlugin plugin;
    30        
     29    private SeparateDataStorePlugin plugin;
     30   
    3131    public SdsOsmWriter(SeparateDataStorePlugin plugin, PrintWriter out, boolean osmConform, String version) {
    3232        super(out, osmConform, version);
     
    4343            Collections.sort(entries, byKeyComparator);
    4444            for (Entry<String, String> e : entries) {
    45                 String key = e.getKey();
     45                String key = e.getKey();
    4646                if (!(osm instanceof Changeset) && ("created_by".equals(key))) continue;
    4747                if (key.startsWith(plugin.getIgnorePrefix())) continue;         
  • applications/editors/josm/plugins/sds/src/org/openstreetmap/hot/sds/SdsOsmWriterFactory.java

    r28160 r30738  
    1515public class SdsOsmWriterFactory extends OsmWriterFactory {
    1616
    17         SeparateDataStorePlugin plugin;
    18        
    19         public SdsOsmWriterFactory(SeparateDataStorePlugin plugin) {
    20                 this.plugin = plugin;
    21         }
    22        
    23         @Override
     17    SeparateDataStorePlugin plugin;
     18   
     19    public SdsOsmWriterFactory(SeparateDataStorePlugin plugin) {
     20        this.plugin = plugin;
     21    }
     22   
     23    @Override
    2424    protected OsmWriter createOsmWriterImpl(PrintWriter out, boolean osmConform, String version) {
    2525        return new SdsOsmWriter(plugin, out, osmConform, version);
  • applications/editors/josm/plugins/sds/src/org/openstreetmap/hot/sds/SdsParser.java

    r28160 r30738  
    5454        {
    5555            String type = atts.getValue("osm_type");
    56             String id = atts.getValue("osm_id");        
     56            String id = atts.getValue("osm_id");        
    5757            currentPrimitive = dataSet.getPrimitiveById(Long.parseLong(id), OsmPrimitiveType.fromApiTypeName(type));
    5858            if (currentPrimitive == null && ensureMatch) {
  • applications/editors/josm/plugins/sds/src/org/openstreetmap/hot/sds/SdsPluginPreferences.java

    r28160 r30738  
    3535   
    3636    public SdsPluginPreferences() {
    37         super("sds", tr("Separate Data Store"), tr("Configures access to the Separate Data Store."));
     37        super("sds", tr("Separate Data Store"), tr("Configures access to the Separate Data Store."));
    3838    }
    3939    @Override
    4040    public void addGui(final PreferenceTabbedPane gui) {
    4141        final JPanel tab = gui.createPreferenceTab(this);
    42                
     42           
    4343        final JPanel access = new JPanel(new GridBagLayout());
    4444        access.setBorder(BorderFactory.createTitledBorder(tr("Server")));
  • applications/editors/josm/plugins/sds/src/org/openstreetmap/hot/sds/SdsSaveAction.java

    r29854 r30738  
    66import java.awt.event.ActionEvent;
    77import java.io.File;
    8 import java.io.FileInputStream;
    9 import java.io.FileNotFoundException;
    108import java.io.FileOutputStream;
    119import java.io.IOException;
     
    2119import org.openstreetmap.josm.gui.layer.Layer;
    2220import org.openstreetmap.josm.gui.layer.OsmDataLayer;
     21import org.openstreetmap.josm.tools.Utils;
    2322
    24 @SuppressWarnings("serial")
    2523public class SdsSaveAction extends SdsDiskAccessAction {
    2624
     
    3028    }
    3129
     30    @Override
    3231    public void actionPerformed(ActionEvent e) {
    3332        if (!isEnabled())
     
    4039        if (Main.isDisplayingMapView() && (Main.map.mapView.getActiveLayer() instanceof OsmDataLayer))
    4140            layer = Main.map.mapView.getActiveLayer();
    42        
     41
    4342        if (layer == null)
    4443            return false;
     
    6463            if (file.exists()) {
    6564                tmpFile = new File(file.getPath() + "~");
    66                 copy(file, tmpFile);
     65                Utils.copyFile(file, tmpFile);
    6766            }
    6867
     
    7069            Writer writer = new OutputStreamWriter(out, "UTF-8");
    7170
    72             SdsWriter w = new SdsWriter(new PrintWriter(writer));
    7371            layer.data.getReadLock().lock();
    74             try {
     72            try (SdsWriter w = new SdsWriter(new PrintWriter(writer))) {
    7573                w.header();
    7674                for (IPrimitive p : layer.data.allNonDeletedPrimitives()) {
     
    7876                }
    7977                w.footer();
    80                 w.close();
    8178            } finally {
    8279                layer.data.getReadLock().unlock();
     
    8784            }
    8885        } catch (IOException e) {
    89             e.printStackTrace();
     86            Main.error(e);
    9087            JOptionPane.showMessageDialog(
    9188                    Main.parent,
     
    9996                // be deleted.  So, restore the backup if we made one.
    10097                if (tmpFile != null && tmpFile.exists()) {
    101                     copy(tmpFile, file);
     98                    Utils.copyFile(tmpFile, file);
    10299                }
    103100            } catch (IOException e2) {
    104                 e2.printStackTrace();
     101                Main.error(e2);
    105102                JOptionPane.showMessageDialog(
    106103                        Main.parent,
     
    113110        return true;
    114111    }
    115 
    116     private void copy(File src, File dst) throws IOException {
    117         FileInputStream srcStream;
    118         FileOutputStream dstStream;
    119         try {
    120             srcStream = new FileInputStream(src);
    121             dstStream = new FileOutputStream(dst);
    122         } catch (FileNotFoundException e) {
    123             JOptionPane.showMessageDialog(Main.parent, tr("Could not back up file. Exception is: {0}", e
    124                     .getMessage()), tr("Error"), JOptionPane.ERROR_MESSAGE);
    125             return;
    126         }
    127         byte buf[] = new byte[1 << 16];
    128         int len;
    129         while ((len = srcStream.read(buf)) != -1) {
    130             dstStream.write(buf, 0, len);
    131         }
    132         srcStream.close();
    133         dstStream.close();
    134     }
    135112}
  • applications/editors/josm/plugins/sds/src/org/openstreetmap/hot/sds/SdsWriter.java

    r28160 r30738  
    2929
    3030    public void write(IPrimitive what, Map<String,String> tags) {
    31         out.print("<osm_shadow osm_type=\"");
    32         out.print(what.getType().getAPIName());
    33         out.print("\" osm_id=\"");
    34         out.print(what.getId());
    35         out.println("\">");
     31        out.print("<osm_shadow osm_type=\"");
     32        out.print(what.getType().getAPIName());
     33        out.print("\" osm_id=\"");
     34        out.print(what.getId());
     35        out.println("\">");
    3636       
    37         if (tags != null) {
    38                 for(Entry<String,String> e : tags.entrySet()) {
    39                         out.println("    <tag k='"+ XmlWriter.encode(e.getKey()) +
    40                                         "' v='"+XmlWriter.encode(e.getValue())+ "' />");
    41                 }
    42         }
    43        
    44         out.println("</osm_shadow>");
     37        if (tags != null) {
     38            for(Entry<String,String> e : tags.entrySet()) {
     39                out.println("    <tag k='"+ XmlWriter.encode(e.getKey()) +
     40                        "' v='"+XmlWriter.encode(e.getValue())+ "' />");
     41            }
     42        }
     43       
     44        out.println("</osm_shadow>");
    4545    }
    4646
  • applications/editors/josm/plugins/sds/src/org/openstreetmap/hot/sds/SeparateDataStorePlugin.java

    r30737 r30738  
    2929{
    3030
    31         public HashMap<Long, IPrimitive> originalNodes = new HashMap<>();
    32         public HashMap<Long, IPrimitive> originalWays = new HashMap<>();
    33         public HashMap<Long, IPrimitive> originalRelations = new HashMap<>();
    34        
    35         public ArrayList<QueueItem> uploadQueue = new ArrayList<>();
    36        
    37         private PrimitiveVisitor learnVisitor = new PrimitiveVisitor() {
    38                 public void visit(INode i) { originalNodes.put(i.getId(), i); }
    39                 public void visit(IWay i) { originalWays.put(i.getId(), i); }
    40                 public void visit(IRelation i) { originalRelations.put(i.getId(), i); }
    41         };
    42        
    43         class QueueItem {
    44                 public IPrimitive primitive;
    45                 public HashMap<String,String> tags;
    46                 public boolean sdsOnly;
    47                 public boolean processed;
    48                 public QueueItem(IPrimitive p, HashMap<String,String> t, boolean s) {
    49                         primitive = p;
    50                         tags = t;
    51                         sdsOnly = s;
    52                         processed = false;
    53                 }
    54         }
    55        
     31    public HashMap<Long, IPrimitive> originalNodes = new HashMap<>();
     32    public HashMap<Long, IPrimitive> originalWays = new HashMap<>();
     33    public HashMap<Long, IPrimitive> originalRelations = new HashMap<>();
     34   
     35    public ArrayList<QueueItem> uploadQueue = new ArrayList<>();
     36   
     37    private PrimitiveVisitor learnVisitor = new PrimitiveVisitor() {
     38        public void visit(INode i) { originalNodes.put(i.getId(), i); }
     39        public void visit(IWay i) { originalWays.put(i.getId(), i); }
     40        public void visit(IRelation i) { originalRelations.put(i.getId(), i); }
     41    };
     42   
     43    class QueueItem {
     44        public IPrimitive primitive;
     45        public HashMap<String,String> tags;
     46        public boolean sdsOnly;
     47        public boolean processed;
     48        public QueueItem(IPrimitive p, HashMap<String,String> t, boolean s) {
     49            primitive = p;
     50            tags = t;
     51            sdsOnly = s;
     52            processed = false;
     53        }
     54    }
     55   
    5656    /**
    5757     * Creates the plugin
     
    6060    {
    6161        super(info);
    62         System.out.println("initializing SDS plugin");
    63        
    64         // this lets us see what JOSM load from the server, and augment it with our data:
     62        System.out.println("initializing SDS plugin");
     63       
     64        // this lets us see what JOSM load from the server, and augment it with our data:
    6565        OsmReader.registerPostprocessor(new ReadPostprocessor(this));
    6666       
     
    7979    }
    8080
    81         public String getIgnorePrefix() {
     81    public String getIgnorePrefix() {
    8282        return Main.pref.get("sds-server.tag-prefix", "hot:");
    83         }
    84        
    85         public IPrimitive getOriginalPrimitive(IPrimitive other) {
    86                 switch (other.getType()) {
    87                 case NODE: return originalNodes.get(other.getId());
    88                 case WAY: return originalWays.get(other.getId());
    89                 case RELATION: return originalRelations.get(other.getId());
    90                 }
    91                 return null;   
    92         }
    93        
    94         protected void enqueueForUpload(IPrimitive prim, HashMap<String, String> tags, boolean onlySds) {
    95                 uploadQueue.add(new QueueItem(prim, tags, onlySds));
    96         }
    97        
    98         /**
    99         * Stores the given primitive in the plugin's cache in order to
    100         * determine changes later.
    101         * @param prim
    102         */
    103         protected void learn(IPrimitive prim) {
    104                 if (prim instanceof OsmPrimitive) {
    105                         ((OsmPrimitive)prim).save().accept(learnVisitor);
    106                 } else {
    107                         prim.accept(learnVisitor);
    108                 }
    109         }
    110        
    111         /**
    112         * removes all elements from the upload queue that have the processed flag set.
    113         */
    114         protected void clearQueue() {
    115                 ArrayList<QueueItem> newQueue = new ArrayList<>();
    116                 for (QueueItem q : uploadQueue) {
    117                         if (!q.processed) newQueue.add(q);
    118                 }
    119                 uploadQueue = newQueue;
    120         }
    121        
    122         /**
    123         * reset the processed flag for all elements of the queue.
    124         */
    125         protected void resetQueue() {
    126                 for (QueueItem q : uploadQueue) {
    127                         q.processed = false;
    128                 }
    129         }
     83    }
     84   
     85    public IPrimitive getOriginalPrimitive(IPrimitive other) {
     86        switch (other.getType()) {
     87        case NODE: return originalNodes.get(other.getId());
     88        case WAY: return originalWays.get(other.getId());
     89        case RELATION: return originalRelations.get(other.getId());
     90        }
     91        return null;   
     92    }
     93   
     94    protected void enqueueForUpload(IPrimitive prim, HashMap<String, String> tags, boolean onlySds) {
     95        uploadQueue.add(new QueueItem(prim, tags, onlySds));
     96    }
     97   
     98    /**
     99    * Stores the given primitive in the plugin's cache in order to
     100    * determine changes later.
     101    * @param prim
     102    */
     103    protected void learn(IPrimitive prim) {
     104        if (prim instanceof OsmPrimitive) {
     105            ((OsmPrimitive)prim).save().accept(learnVisitor);
     106        } else {
     107            prim.accept(learnVisitor);
     108        }
     109    }
     110   
     111    /**
     112    * removes all elements from the upload queue that have the processed flag set.
     113    */
     114    protected void clearQueue() {
     115        ArrayList<QueueItem> newQueue = new ArrayList<>();
     116        for (QueueItem q : uploadQueue) {
     117            if (!q.processed) newQueue.add(q);
     118        }
     119        uploadQueue = newQueue;
     120    }
     121   
     122    /**
     123    * reset the processed flag for all elements of the queue.
     124    */
     125    protected void resetQueue() {
     126        for (QueueItem q : uploadQueue) {
     127            q.processed = false;
     128        }
     129    }
    130130
    131131    public PreferenceSetting getPreferenceSetting() {
  • applications/editors/josm/plugins/sds/src/org/openstreetmap/hot/sds/WritePostprocessor.java

    r29854 r30738  
    1313public class WritePostprocessor implements OsmServerWritePostprocessor {
    1414
    15         SeparateDataStorePlugin plugin;
     15    SeparateDataStorePlugin plugin;
    1616
    17         public WritePostprocessor(SeparateDataStorePlugin plugin) {
    18                 this.plugin = plugin;
    19         }       
     17    public WritePostprocessor(SeparateDataStorePlugin plugin) {
     18        this.plugin = plugin;
     19    }
    2020
    21         @Override
    22         public void postprocessUploadedPrimitives(Collection<IPrimitive> primitives,
    23                         ProgressMonitor progress) {
    24                
    25             StringWriter swriter = new StringWriter();
    26             SdsWriter sdsWriter = new SdsWriter(new PrintWriter(swriter));
    27             sdsWriter.header();
    28             boolean somethingWritten = false;
    29            
    30             for (IPrimitive p : primitives) {
    31                         for (QueueItem q : plugin.uploadQueue) {
    32                                 if (q.primitive.equals(p) && !q.sdsOnly) {
    33                                         sdsWriter.write(q.primitive, q.tags);
    34                                         somethingWritten = true;
    35                                         q.processed = true;
    36                                         continue;
    37                                 }
    38                         }
    39             }
    40            
    41                 for (QueueItem q : plugin.uploadQueue) {
    42                         if (q.sdsOnly) {
    43                                 sdsWriter.write(q.primitive, q.tags);
    44                                 somethingWritten = true;
    45                                 q.processed = true;
    46                         }
    47                 }
     21    @Override
     22    public void postprocessUploadedPrimitives(Collection<IPrimitive> primitives, ProgressMonitor progress) {
    4823
    49                 if (somethingWritten) {
    50                         sdsWriter.footer();
     24        StringWriter swriter = new StringWriter();
     25        try (SdsWriter sdsWriter = new SdsWriter(new PrintWriter(swriter))) {
     26            sdsWriter.header();
     27            boolean somethingWritten = false;
    5128
    52                         SdsApi api = SdsApi.getSdsApi();
    53                         System.out.println("sending message:\n" + swriter.toString());
    54                         api.updateSds(swriter.toString(), progress);
    55                 }
    56                
    57                 sdsWriter.close();
    58                
    59                 for (IPrimitive p : primitives) {
    60                         plugin.learn(p);
    61                 }
     29            for (IPrimitive p : primitives) {
     30                for (QueueItem q : plugin.uploadQueue) {
     31                    if (q.primitive.equals(p) && !q.sdsOnly) {
     32                        sdsWriter.write(q.primitive, q.tags);
     33                        somethingWritten = true;
     34                        q.processed = true;
     35                        continue;
     36                    }
     37                }
     38            }
    6239
    63                 for (QueueItem q : plugin.uploadQueue) {
    64                         if (q.sdsOnly) {
    65                                 q.primitive.setModified(false);
    66                                 plugin.learn(q.primitive);
    67                         }
    68                 }
    69                
    70                 plugin.clearQueue();
    71                 // TODO: if exception -> resetQueue
    72         }
     40            for (QueueItem q : plugin.uploadQueue) {
     41                if (q.sdsOnly) {
     42                    sdsWriter.write(q.primitive, q.tags);
     43                    somethingWritten = true;
     44                    q.processed = true;
     45                }
     46            }
     47
     48            if (somethingWritten) {
     49                sdsWriter.footer();
     50
     51                SdsApi api = SdsApi.getSdsApi();
     52                System.out.println("sending message:\n" + swriter.toString());
     53                api.updateSds(swriter.toString(), progress);
     54            }
     55        }
     56
     57        for (IPrimitive p : primitives) {
     58            plugin.learn(p);
     59        }
     60
     61        for (QueueItem q : plugin.uploadQueue) {
     62            if (q.sdsOnly) {
     63                q.primitive.setModified(false);
     64                plugin.learn(q.primitive);
     65            }
     66        }
     67
     68        plugin.clearQueue();
     69        // TODO: if exception -> resetQueue
     70    }
    7371
    7472}
Note: See TracChangeset for help on using the changeset viewer.