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