001    // License: GPL. For details, see LICENSE file.
002    package org.openstreetmap.josm.gui.preferences.projection;
003    
004    import static org.openstreetmap.josm.tools.I18n.tr;
005    
006    import java.awt.event.ActionListener;
007    import java.util.Collection;
008    import java.util.Collections;
009    
010    import javax.swing.JLabel;
011    import javax.swing.JPanel;
012    
013    import org.openstreetmap.josm.tools.GBC;
014    import org.openstreetmap.josm.tools.ImageProvider;
015    
016    public class LambertCC9ZonesProjectionChoice extends ListProjectionChoice {
017    
018        private static String[] lambert9zones = {
019            tr("{0} ({1} to {2} degrees)", 1,41,43),
020            tr("{0} ({1} to {2} degrees)", 2,42,44),
021            tr("{0} ({1} to {2} degrees)", 3,43,45),
022            tr("{0} ({1} to {2} degrees)", 4,44,46),
023            tr("{0} ({1} to {2} degrees)", 5,45,47),
024            tr("{0} ({1} to {2} degrees)", 6,46,48),
025            tr("{0} ({1} to {2} degrees)", 7,47,49),
026            tr("{0} ({1} to {2} degrees)", 8,48,50),
027            tr("{0} ({1} to {2} degrees)", 9,49,51)
028        };
029    
030        public LambertCC9ZonesProjectionChoice() {
031            super(tr("Lambert CC9 Zone (France)"), "core:lambertcc9", lambert9zones, tr("Lambert CC Zone"));
032        }
033    
034        private class LambertCC9CBPanel extends CBPanel {
035            public LambertCC9CBPanel(Object[] entries, int initialIndex, String label, ActionListener listener) {
036                super(entries, initialIndex, label, listener);
037                this.add(new JLabel(ImageProvider.get("data/projection", "LambertCC9Zones.png")), GBC.eol().fill(GBC.HORIZONTAL));
038                this.add(GBC.glue(1, 1), GBC.eol().fill(GBC.BOTH));
039            }
040        }
041    
042        @Override
043        public JPanel getPreferencePanel(ActionListener listener) {
044            return new LambertCC9CBPanel(entries, index, label, listener);
045        }
046    
047        @Override
048        public String getCurrentCode() {
049            return "EPSG:" + Integer.toString(3942+index); //CC42 is EPSG:3942 (up to EPSG:3950 for CC50)
050        }
051    
052        @Override
053        public String getProjectionName() {
054            return tr("Lambert CC9 Zone (France)");
055        }
056    
057        @Override
058        public String[] allCodes() {
059            String[] codes = new String[9];
060            for (int zone = 0; zone < 9; zone++) {
061                codes[zone] = "EPSG:" + (3942 + zone);
062            }
063            return codes;
064        }
065    
066        @Override
067        public Collection<String> getPreferencesFromCode(String code) {
068            //zone 1=CC42=EPSG:3942 up to zone 9=CC50=EPSG:3950
069            if (code.startsWith("EPSG:39") && code.length() == 9) {
070                try {
071                    String zonestring = code.substring(5,9);
072                    int zoneval = Integer.parseInt(zonestring)-3942;
073                    if(zoneval >= 0 && zoneval <= 8)
074                        return Collections.singleton(String.valueOf(zoneval+1));
075                } catch(NumberFormatException ex) {}
076            }
077            return null;
078        }
079        
080        @Override
081        protected String indexToZone(int index) {
082            return Integer.toString(index + 1);
083        }
084    
085        @Override
086        protected int zoneToIndex(String zone) {
087            try {
088                return Integer.parseInt(zone) - 1;
089            } catch(NumberFormatException e) {}
090            return defaultIndex;
091        }
092    
093    }