| 1 | // License: GPL. v2 and later. Copyright 2008-2009 by Pieren <pieren3@gmail.com> and others
|
|---|
| 2 | package cadastre_fr;
|
|---|
| 3 |
|
|---|
| 4 | import static org.openstreetmap.josm.tools.I18n.tr;
|
|---|
| 5 |
|
|---|
| 6 | import java.awt.GridBagLayout;
|
|---|
| 7 | import java.awt.event.ActionEvent;
|
|---|
| 8 | import java.util.ArrayList;
|
|---|
| 9 |
|
|---|
| 10 | import javax.swing.JComboBox;
|
|---|
| 11 | import javax.swing.JLabel;
|
|---|
| 12 | import javax.swing.JOptionPane;
|
|---|
| 13 | import javax.swing.JPanel;
|
|---|
| 14 | import javax.swing.JTextField;
|
|---|
| 15 |
|
|---|
| 16 | import org.openstreetmap.josm.Main;
|
|---|
| 17 | import org.openstreetmap.josm.actions.JosmAction;
|
|---|
| 18 | import org.openstreetmap.josm.data.projection.Lambert;
|
|---|
| 19 | import org.openstreetmap.josm.data.projection.LambertCC9Zones;
|
|---|
| 20 | import org.openstreetmap.josm.data.projection.UTM_France_DOM;
|
|---|
| 21 | import org.openstreetmap.josm.gui.layer.Layer;
|
|---|
| 22 | import org.openstreetmap.josm.tools.GBC;
|
|---|
| 23 |
|
|---|
| 24 | public class MenuActionNewLocation extends JosmAction {
|
|---|
| 25 |
|
|---|
| 26 | private static final long serialVersionUID = 1L;
|
|---|
| 27 |
|
|---|
| 28 | private static final String departements[] = {
|
|---|
| 29 | "", tr("(optional)"),
|
|---|
| 30 | "001", "01 - Ain", "002", "02 - Aisne", "003", "03 - Allier", "004", "04 - Alpes de Haute-Provence", "005", "05 - Hautes-Alpes",
|
|---|
| 31 | "006", "06 - Alpes-Maritimes", "007", "07 - Ard\u00eache", "008", "08 - Ardennes", "009", "09 - Ari\u00e8ge", "010", "10 - Aube",
|
|---|
| 32 | "011", "11 - Aude", "012", "12 - Aveyron", "013", "13 - Bouches-du-Rh\u00f4ne", "014", "14 - Calvados", "015", "15 - Cantal",
|
|---|
| 33 | "016", "16 - Charente", "017", "17 - Charente-Maritime", "018", "18 - Cher", "019", "19 - Corr\u00e8ze",
|
|---|
| 34 | "02A", "2A - Corse-du-Sud", "02B", "2B - Haute-Corse",
|
|---|
| 35 | "021", "21 - C\u00f4te-d'Or", "022", "22 - C\u00f4tes d'Armor", "023", "23 - Creuse", "024", "24 - Dordogne", "025", "25 - Doubs",
|
|---|
| 36 | "026", "26 - Dr\u00f4me", "027", "27 - Eure", "028", "28 - Eure-et-Loir", "029", "29 - Finist\u00e8re", "030", "30 - Gard",
|
|---|
| 37 | "031", "31 - Haute-Garonne", "032", "32 - Gers", "033", "33 - Gironde", "034", "34 - H\u00e9rault", "035", "35 - Ille-et-Vilaine",
|
|---|
| 38 | "036", "36 - Indre", "037", "37 - Indre-et-Loire", "038", "38 - Is\u00e8re", "039", "39 - Jura", "040", "40 - Landes",
|
|---|
| 39 | "041", "41 - Loir-et-Cher", "042", "42 - Loire", "043", "43 - Haute-Loire", "044", "44 - Loire-Atlantique", "045", "45 - Loiret",
|
|---|
| 40 | "046", "46 - Lot", "047", "47 - Lot-et-Garonne", "048", "48 - Loz\u00e8re", "049", "49 - Maine-et-Loire", "050", "50 - Manche",
|
|---|
| 41 | "051", "51 - Marne", "052", "52 - Haute-Marne", "053", "53 - Mayenne", "054", "54 - Meurthe-et-Moselle", "055", "55 - Meuse",
|
|---|
| 42 | "056", "56 - Morbihan", "057", "57 - Moselle", "058", "58 - Ni\u00e8vre", "059", "59 - Nord", "060", "60 - Oise",
|
|---|
| 43 | "061", "61 - Orne", "062", "62 - Pas-de-Calais", "063", "63 - Puy-de-D\u00f4me", "064", "64 - Pyr\u00e9n\u00e9es-Atlantiques", "065", "65 - Hautes-Pyr\u00e9n\u00e9es",
|
|---|
| 44 | "066", "66 - Pyr\u00e9n\u00e9es-Orientales", "067", "67 - Bas-Rhin", "068", "68 - Haut-Rhin", "069", "69 - Rh\u00f4ne", "070", "70 - Haute-Sa\u00f4ne",
|
|---|
| 45 | "071", "71 - Sa\u00f4ne-et-Loire", "072", "72 - Sarthe", "073", "73 - Savoie", "074", "74 - Haute-Savoie", "075", "75 - Paris",
|
|---|
| 46 | "076", "76 - Seine-Maritime", "077", "77 - Seine-et-Marne", "078", "78 - Yvelines", "079", "79 - Deux-S\u00e8vres", "080", "80 - Somme",
|
|---|
| 47 | "081", "81 - Tarn", "082", "82 - Tarn-et-Garonne", "083", "83 - Var", "084", "84 - Vaucluse", "085", "85 - Vend\u00e9e",
|
|---|
| 48 | "086", "86 - Vienne", "087", "87 - Haute-Vienne", "088", "88 - Vosges", "089", "89 - Yonne", "090", "90 - Territoire de Belfort",
|
|---|
| 49 | "091", "91 - Essonne", "092", "92 - Hauts-de-Seine", "093", "93 - Seine-Saint-Denis", "094", "94 - Val-de-Marne", "095", "95 - Val-d'Oise",
|
|---|
| 50 | "971", "971 - Guadeloupe", "972", "972 - Martinique", "973", "973 - Guyane", "974", "974 - R\u00e9union"
|
|---|
| 51 | };
|
|---|
| 52 |
|
|---|
| 53 | public MenuActionNewLocation() {
|
|---|
| 54 | super(tr("Change location"), "cadastre_small", tr("Set a new location for the next request"), null, false);
|
|---|
| 55 | }
|
|---|
| 56 |
|
|---|
| 57 | public void actionPerformed(ActionEvent e) {
|
|---|
| 58 | WMSLayer wmsLayer = addNewLayer(new ArrayList<WMSLayer>());
|
|---|
| 59 | if (wmsLayer != null)
|
|---|
| 60 | DownloadWMSVectorImage.download(wmsLayer, false);
|
|---|
| 61 | }
|
|---|
| 62 |
|
|---|
| 63 | public WMSLayer addNewLayer(ArrayList<WMSLayer> existingLayers) {
|
|---|
| 64 | String location = "";
|
|---|
| 65 | String codeDepartement = "";
|
|---|
| 66 | String codeCommune = "";
|
|---|
| 67 | boolean changeInterface = false;
|
|---|
| 68 | JLabel labelSectionNewLocation = new JLabel(tr("Add a new municipality layer"));
|
|---|
| 69 | JPanel p = new JPanel(new GridBagLayout());
|
|---|
| 70 | JLabel labelLocation = new JLabel(tr("Commune"));
|
|---|
| 71 | final JTextField inputTown = new JTextField( Main.pref.get("cadastrewms.location") );
|
|---|
| 72 | inputTown.setToolTipText(tr("<html>Enter the town,village or city name.<br>"
|
|---|
| 73 | + "Use the syntax and punctuation known by www.cadastre.gouv.fr .</html>"));
|
|---|
| 74 | JLabel labelDepartement = new JLabel(tr("Departement"));
|
|---|
| 75 | final JComboBox inputDepartement = new JComboBox();
|
|---|
| 76 | for (int i=1; i<departements.length; i+=2) {
|
|---|
| 77 | inputDepartement.addItem(departements[i]);
|
|---|
| 78 | }
|
|---|
| 79 | inputDepartement.setToolTipText(tr("<html>Departement number (optional)</html>"));
|
|---|
| 80 | if (!Main.pref.get("cadastrewms.codeDepartement").equals("")) {
|
|---|
| 81 | for (int i=0; i < departements.length; i=i+2)
|
|---|
| 82 | if (departements[i].equals(Main.pref.get("cadastrewms.codeDepartement")))
|
|---|
| 83 | inputDepartement.setSelectedIndex(i/2);
|
|---|
| 84 | }
|
|---|
| 85 | p.add(labelSectionNewLocation, GBC.eol());
|
|---|
| 86 | p.add(labelLocation, GBC.std().insets(10, 0, 0, 0));
|
|---|
| 87 | p.add(inputTown, GBC.eol().fill(GBC.HORIZONTAL).insets(5, 0, 0, 5));
|
|---|
| 88 | p.add(labelDepartement, GBC.std().insets(10, 0, 0, 0));
|
|---|
| 89 | p.add(inputDepartement, GBC.eol().fill(GBC.HORIZONTAL).insets(5, 0, 0, 5));
|
|---|
| 90 | JOptionPane pane = new JOptionPane(p, JOptionPane.INFORMATION_MESSAGE, JOptionPane.OK_CANCEL_OPTION, null) {
|
|---|
| 91 | private static final long serialVersionUID = 1L;
|
|---|
| 92 |
|
|---|
| 93 | @Override
|
|---|
| 94 | public void selectInitialValue() {
|
|---|
| 95 | inputTown.requestFocusInWindow();
|
|---|
| 96 | inputTown.selectAll();
|
|---|
| 97 | }
|
|---|
| 98 | };
|
|---|
| 99 | pane.createDialog(Main.parent, tr("Add new layer")).setVisible(true);
|
|---|
| 100 | if (!Integer.valueOf(JOptionPane.OK_OPTION).equals(pane.getValue()))
|
|---|
| 101 | return null;
|
|---|
| 102 |
|
|---|
| 103 | WMSLayer wmsLayer = null;
|
|---|
| 104 | if (!inputTown.getText().equals("")) {
|
|---|
| 105 | location = inputTown.getText().toUpperCase();
|
|---|
| 106 | codeDepartement = departements[inputDepartement.getSelectedIndex()*2];
|
|---|
| 107 | changeInterface = true;
|
|---|
| 108 | Main.pref.put("cadastrewms.location", location);
|
|---|
| 109 | Main.pref.put("cadastrewms.codeCommune", codeCommune);
|
|---|
| 110 | Main.pref.put("cadastrewms.codeDepartement", codeDepartement);
|
|---|
| 111 | if (Main.map != null) {
|
|---|
| 112 | for (Layer l : Main.map.mapView.getAllLayers()) {
|
|---|
| 113 | if (l instanceof WMSLayer && l.getName().equalsIgnoreCase(location)) {
|
|---|
| 114 | return null;
|
|---|
| 115 | }
|
|---|
| 116 | }
|
|---|
| 117 | }
|
|---|
| 118 | // add the layer if it doesn't exist
|
|---|
| 119 | int zone = -1;
|
|---|
| 120 | if (Main.proj instanceof LambertCC9Zones)
|
|---|
| 121 | zone = ((LambertCC9Zones)Main.proj).getLayoutZone();
|
|---|
| 122 | else if (Main.proj instanceof Lambert)
|
|---|
| 123 | zone = ((Lambert)Main.proj).getLayoutZone();
|
|---|
| 124 | else if (Main.proj instanceof UTM_France_DOM)
|
|---|
| 125 | zone = ((UTM_France_DOM)Main.proj).getCurrentGeodesic();
|
|---|
| 126 | wmsLayer = new WMSLayer(location, codeCommune, zone);
|
|---|
| 127 | wmsLayer.setDepartement(codeDepartement);
|
|---|
| 128 | CadastrePlugin.addWMSLayer(wmsLayer);
|
|---|
| 129 | System.out.println("Add new layer with Location:" + inputTown.getText());
|
|---|
| 130 | } else if (existingLayers != null && existingLayers.size() > 0 && Main.map.mapView.getActiveLayer() instanceof WMSLayer) {
|
|---|
| 131 | wmsLayer = (WMSLayer)Main.map.mapView.getActiveLayer();
|
|---|
| 132 | changeInterface = true;
|
|---|
| 133 | }
|
|---|
| 134 |
|
|---|
| 135 | if (changeInterface)
|
|---|
| 136 | CadastrePlugin.cadastreGrabber.getWmsInterface().resetInterfaceRefIfNewLayer(wmsLayer.getName());
|
|---|
| 137 | return wmsLayer;
|
|---|
| 138 | }
|
|---|
| 139 |
|
|---|
| 140 | }
|
|---|