Ignore:
Timestamp:
2009-11-28T17:05:44+01:00 (15 years ago)
Author:
pieren
Message:

Fix minor issues if Grab is called without layer (possible since projection rework)

Location:
applications/editors/josm/plugins/cadastre-fr/src/cadastre_fr
Files:
7 edited

Legend:

Unmodified
Added
Removed
  • applications/editors/josm/plugins/cadastre-fr/src/cadastre_fr/CacheControl.java

    r18720 r18838  
    106106                // till here
    107107
    108                 if (reply == JOptionPane.OK_OPTION) {
    109                     return loadCache(file, wmsLayer.getLambertZone());
    110                 } else
    111                     file.delete();
     108                if (reply == JOptionPane.OK_OPTION && loadCache(file, wmsLayer.getLambertZone())) {
     109                    return true;
     110                } else {
     111                    delete(file);
     112                }
    112113            }
    113114        } catch (Exception e) {
     
    122123            if (Main.proj instanceof LambertCC9Zones)
    123124                extension = cLambertCC9Z + extension;
    124             File file = new File(CadastrePlugin.cacheDir + wmsLayer.getName() + "." + extension);
    125             if (file.exists())
    126                 file.delete();
     125            delete(new File(CadastrePlugin.cacheDir + wmsLayer.getName() + "." + extension));
    127126        } catch (Exception e) {
    128127            e.printStackTrace(System.out);
    129128        }
    130129    }
     130   
     131    private void delete(File file) {
     132        System.out.println("Delete file "+file);
     133        if (file.exists())
     134            file.delete();
     135        while (file.exists()) // wait until file is really gone (otherwise appends to existing one)
     136            CadastrePlugin.safeSleep(500);
     137    }
    131138
    132139    public boolean loadCache(File file, int currentLambertZone) {
     140        boolean successfulRead = false;
    133141        try {
    134142            FileInputStream fis = new FileInputStream(file);
    135143            ObjectInputStream ois = new ObjectInputStream(fis);
    136             if (wmsLayer.read(ois, currentLambertZone) == false)
    137                 return false;
     144            successfulRead = wmsLayer.read(ois, currentLambertZone);
    138145            ois.close();
    139146            fis.close();
    140147        } catch (Exception ex) {
    141148            ex.printStackTrace(System.out);
    142             JOptionPane.showMessageDialog(Main.parent, tr("Error loading file"), tr("Error"), JOptionPane.ERROR_MESSAGE);
     149            JOptionPane.showMessageDialog(Main.parent, tr("Error loading file.\nProbably an old version of the cache file."), tr("Error"), JOptionPane.ERROR_MESSAGE);
    143150            return false;
    144151        }
    145         if (wmsLayer.isRaster()) {
     152        if (successfulRead && wmsLayer.isRaster()) {
    146153            // serialized raster bufferedImage hangs-up on Java6. Recreate them here
    147154            wmsLayer.images.get(0).image = RasterImageModifier.fixRasterImage(wmsLayer.images.get(0).image);
    148155        }
    149         return true;
     156        return successfulRead;
    150157    }
    151158
  • applications/editors/josm/plugins/cadastre-fr/src/cadastre_fr/CadastreInterface.java

    r18544 r18838  
    182182            System.out.println("GET "+interfaceURL);
    183183            BufferedReader in = new BufferedReader(new InputStreamReader(urlConn.getInputStream()));
    184             //while(in.readLine() != null) {}  // read the buffer otherwise we sent POST too early
     184            // read the buffer otherwise we sent POST too early
    185185            while ((ln = in.readLine()) != null) {
    186186                lines += ln;
  • applications/editors/josm/plugins/cadastre-fr/src/cadastre_fr/CadastrePlugin.java

    r18743 r18838  
    8686 *                   support of subprojections in preferences for zones setting and UTM20N
    8787 *                 - removed autosourcing of empty new nodes
     88 * 1.6 28-Nov-2009 - Fix minor issues if Grab is called without layer (possible since projection rework)
    8889 */
    8990public class CadastrePlugin extends Plugin {
    90     static String VERSION = "1.4";
     91    static String VERSION = "1.6";
    9192
    9293    static JMenu cadastreJMenu;
  • applications/editors/josm/plugins/cadastre-fr/src/cadastre_fr/DownloadWMSVectorImage.java

    r18544 r18838  
    88import org.openstreetmap.josm.Main;
    99import org.openstreetmap.josm.data.Bounds;
    10 import org.openstreetmap.josm.data.projection.LambertCC9Zones;
    1110import org.openstreetmap.josm.gui.MapView;
    1211import org.openstreetmap.josm.gui.PleaseWaitRunnable;
     
    3231        try {
    3332            if (grabber.getWmsInterface().retrieveInterface(wmsLayer)) {
     33                boolean useFactor = true;
    3434                if (wmsLayer.images.isEmpty()) {
    3535                    // first time we grab an image for this layer
    3636                    if (CacheControl.cacheEnabled) {
    3737                        if (wmsLayer.getCacheControl().loadCacheIfExist()) {
    38                             Main.map.mapView.repaint();
     38                            Main.map.mapView.zoomTo(wmsLayer.getCommuneBBox().toBounds());
     39                            //Main.map.mapView.repaint();
    3940                            return;
    4041                        }
     
    4647                        // set vectorized commune bounding box by opening the standard web window
    4748                        grabber.getWmsInterface().retrieveCommuneBBox(wmsLayer);
    48                         // if it is the first layer, use the communeBBox as grab bbox
    49                         if (Main.proj instanceof LambertCC9Zones && Main.map.mapView.getAllLayers().size() == 1 ) {
     49                        // if it is the first layer, use the communeBBox as grab bbox (and not divided)
     50                        if (Main.map.mapView.getAllLayers().size() == 1 ) {
    5051                            bounds = wmsLayer.getCommuneBBox().toBounds();
    5152                            Main.map.mapView.zoomTo(bounds);
     53                            useFactor = false;
    5254                        }
    5355                    }
    5456                }
    5557                // grab new images from wms server into active layer
    56                 wmsLayer.grab(grabber, bounds);
     58                wmsLayer.grab(grabber, bounds, useFactor);
    5759            }
    5860        } catch (DuplicateLayerException e) {
  • applications/editors/josm/plugins/cadastre-fr/src/cadastre_fr/MenuActionGrab.java

    r18544 r18838  
    1111import org.openstreetmap.josm.Main;
    1212import org.openstreetmap.josm.actions.JosmAction;
    13 import org.openstreetmap.josm.data.projection.LambertCC9Zones;
    1413import org.openstreetmap.josm.tools.Shortcut;
    1514
     
    3029
    3130    public void actionPerformed(ActionEvent e) {
    32         // with the new projection LambertCC9Zones, we are able to determin the zone and thus lat/lon of
    33         // downloaded commune bounding box
    34         if (Main.map != null || Main.proj instanceof LambertCC9Zones) {
     31        if (Main.map != null) {
    3532            if (CadastrePlugin.isCadastreProjection()) {
    3633                WMSLayer wmsLayer = WMSDownloadAction.getLayer();
     
    4340                         + "projections and retry"));
    4441            }
    45         }
     42        } else
     43            new MenuActionNewLocation().actionPerformed(e);
    4644    }
    4745
  • applications/editors/josm/plugins/cadastre-fr/src/cadastre_fr/MenuActionNewLocation.java

    r18720 r18838  
    3636
    3737    public WMSLayer addNewLayer(ArrayList<WMSLayer> existingLayers) {
    38         /*if (Main.map == null) {
    39             JOptionPane.showMessageDialog(Main.parent,
    40                     tr("Open a layer first (GPX, OSM, cache)"));
     38        String location = "";
     39        String codeDepartement = "";
     40        String codeCommune = "";
     41        boolean resetCookie = false;
     42        JLabel labelSectionNewLocation = new JLabel(tr("Add a new layer"));
     43        JPanel p = new JPanel(new GridBagLayout());
     44        JLabel labelLocation = new JLabel(tr("Location"));
     45        final JTextField inputTown = new JTextField( Main.pref.get("cadastrewms.location") );
     46        inputTown.setToolTipText(tr("<html>Enter the town,village or city name.<br>"
     47                + "Use the syntax and punctuation known by www.cadastre.gouv.fr .</html>"));
     48
     49        p.add(labelSectionNewLocation, GBC.eol());
     50        p.add(labelLocation, GBC.std().insets(10, 0, 0, 0));
     51        p.add(inputTown, GBC.eol().fill(GBC.HORIZONTAL).insets(5, 0, 0, 5));
     52        JOptionPane pane = new JOptionPane(p, JOptionPane.INFORMATION_MESSAGE, JOptionPane.OK_CANCEL_OPTION, null) {
     53            private static final long serialVersionUID = 1L;
     54
     55            @Override
     56            public void selectInitialValue() {
     57                inputTown.requestFocusInWindow();
     58                inputTown.selectAll();
     59            }
     60        };
     61        pane.createDialog(Main.parent, tr("Add new layer")).setVisible(true);
     62        if (!Integer.valueOf(JOptionPane.OK_OPTION).equals(pane.getValue()))
    4163            return null;
    42         } else {*/
    43             String location = "";
    44             String codeDepartement = "";
    45             String codeCommune = "";
    46             boolean resetCookie = false;
    47             JLabel labelSectionNewLocation = new JLabel(tr("Add a new layer"));
    48             JPanel p = new JPanel(new GridBagLayout());
    49             JLabel labelLocation = new JLabel(tr("Location"));
    50             final JTextField inputTown = new JTextField( Main.pref.get("cadastrewms.location") );
    51             inputTown.setToolTipText(tr("<html>Enter the town,village or city name.<br>"
    52                     + "Use the syntax and punctuation known by www.cadastre.gouv.fr .</html>"));
    5364
    54             p.add(labelSectionNewLocation, GBC.eol());
    55             p.add(labelLocation, GBC.std().insets(10, 0, 0, 0));
    56             p.add(inputTown, GBC.eol().fill(GBC.HORIZONTAL).insets(5, 0, 0, 5));
    57             JOptionPane pane = new JOptionPane(p, JOptionPane.INFORMATION_MESSAGE, JOptionPane.OK_CANCEL_OPTION, null) {
    58                 private static final long serialVersionUID = 1L;
    59 
    60                 @Override
    61                 public void selectInitialValue() {
    62                     inputTown.requestFocusInWindow();
    63                     inputTown.selectAll();
    64                 }
    65             };
    66             pane.createDialog(Main.parent, tr("Add new layer")).setVisible(true);
    67             if (!Integer.valueOf(JOptionPane.OK_OPTION).equals(pane.getValue()))
    68                 return null;
    69 
    70             WMSLayer wmsLayer = null;
    71             if (!inputTown.getText().equals("")) {
    72                 location = inputTown.getText().toUpperCase();
    73                 resetCookie = true;
    74                 Main.pref.put("cadastrewms.location", location);
    75                 Main.pref.put("cadastrewms.codeCommune", codeCommune);
    76                 if (Main.map != null) {
    77                     for (Layer l : Main.map.mapView.getAllLayers()) {
    78                         if (l instanceof WMSLayer && l.getName().equalsIgnoreCase(location + codeDepartement)) {
    79                             return null;
    80                         }
     65        WMSLayer wmsLayer = null;
     66        if (!inputTown.getText().equals("")) {
     67            location = inputTown.getText().toUpperCase();
     68            resetCookie = true;
     69            Main.pref.put("cadastrewms.location", location);
     70            Main.pref.put("cadastrewms.codeCommune", codeCommune);
     71            if (Main.map != null) {
     72                for (Layer l : Main.map.mapView.getAllLayers()) {
     73                    if (l instanceof WMSLayer && l.getName().equalsIgnoreCase(location + codeDepartement)) {
     74                        return null;
    8175                    }
    8276                }
    83                 // add the layer if it doesn't exist
    84                 int zone = -1;
    85                 if (Main.proj instanceof LambertCC9Zones)
    86                     zone = ((LambertCC9Zones)Main.proj).getLayoutZone();
    87                 else if (Main.proj instanceof Lambert)
    88                     zone = ((Lambert)Main.proj).getLayoutZone();
    89                 else if (Main.proj instanceof UTM_20N_France_DOM)
    90                     zone = ((UTM_20N_France_DOM)Main.proj).getCurrentGeodesic();
    91                 wmsLayer = new WMSLayer(location, codeCommune, zone);
    92                 Main.main.addLayer(wmsLayer);
    93                 System.out.println("Add new layer with Location:" + inputTown.getText());
    94             } else if (existingLayers != null && existingLayers.size() > 0 && Main.map.mapView.getActiveLayer() instanceof WMSLayer) {
    95                 wmsLayer = (WMSLayer)Main.map.mapView.getActiveLayer();
    96                 resetCookie = true;
    9777            }
     78            // add the layer if it doesn't exist
     79            int zone = -1;
     80            if (Main.proj instanceof LambertCC9Zones)
     81                zone = ((LambertCC9Zones)Main.proj).getLayoutZone();
     82            else if (Main.proj instanceof Lambert)
     83                zone = ((Lambert)Main.proj).getLayoutZone();
     84            else if (Main.proj instanceof UTM_20N_France_DOM)
     85                zone = ((UTM_20N_France_DOM)Main.proj).getCurrentGeodesic();
     86            wmsLayer = new WMSLayer(location, codeCommune, zone);
     87            Main.main.addLayer(wmsLayer);
     88            System.out.println("Add new layer with Location:" + inputTown.getText());
     89        } else if (existingLayers != null && existingLayers.size() > 0 && Main.map.mapView.getActiveLayer() instanceof WMSLayer) {
     90            wmsLayer = (WMSLayer)Main.map.mapView.getActiveLayer();
     91            resetCookie = true;
     92        }
    9893
    99             if (resetCookie)
    100                 CadastrePlugin.cadastreGrabber.getWmsInterface().resetCookieIfNewLayer(wmsLayer.getName());
    101             return wmsLayer;
    102         //}
     94        if (resetCookie)
     95            CadastrePlugin.cadastreGrabber.getWmsInterface().resetCookieIfNewLayer(wmsLayer.getName());
     96        return wmsLayer;
    10397    }
    10498
  • applications/editors/josm/plugins/cadastre-fr/src/cadastre_fr/WMSLayer.java

    r18720 r18838  
    100100
    101101    public void grab(CadastreGrabber grabber, Bounds b) throws IOException {
    102         if (isRaster) {
    103             b = new Bounds(Main.proj.eastNorth2latlon(rasterMin), Main.proj.eastNorth2latlon(rasterMax));
    104             divideBbox(b, Integer.parseInt(Main.pref.get("cadastrewms.rasterDivider",
    105                     CadastrePreferenceSetting.DEFAULT_RASTER_DIVIDER)));
     102        grab(grabber, b, true);
     103    }
     104   
     105    public void grab(CadastreGrabber grabber, Bounds b, boolean useFactor) throws IOException {
     106        if (useFactor) {
     107            if (isRaster) {
     108                b = new Bounds(Main.proj.eastNorth2latlon(rasterMin), Main.proj.eastNorth2latlon(rasterMax));
     109                divideBbox(b, Integer.parseInt(Main.pref.get("cadastrewms.rasterDivider",
     110                        CadastrePreferenceSetting.DEFAULT_RASTER_DIVIDER)));
     111            } else
     112                divideBbox(b, Integer.parseInt(Main.pref.get("cadastrewms.scale", Scale.X1.toString())));
    106113        } else
    107             divideBbox(b, Integer.parseInt(Main.pref.get("cadastrewms.scale", Scale.X1.toString())));
     114            divideBbox(b, 1);
    108115
    109116        for (EastNorthBound n : dividedBbox) {
     
    440447            }
    441448        }
     449        System.out.println("Cache loaded for location "+location+" with "+images.size()+" images");
    442450        return true;
    443451    }
Note: See TracChangeset for help on using the changeset viewer.