001 // License: GPL. For details, see LICENSE file. 002 package org.openstreetmap.josm.gui.preferences.projection; 003 004 import org.openstreetmap.josm.data.projection.CustomProjection; 005 import org.openstreetmap.josm.data.projection.Projection; 006 import org.openstreetmap.josm.data.projection.Projections; 007 008 abstract public class AbstractProjectionChoice implements ProjectionChoice { 009 010 protected String name; 011 protected String id; 012 protected String cacheDir; 013 014 /** 015 * Constructor. 016 * 017 * @param name short name of the projection choice as shown in the GUI 018 * @param id unique identifier for the projection choice 019 * @param cacheDir a cache directory name 020 */ 021 public AbstractProjectionChoice(String name, String id, String cacheDir) { 022 this.name = name; 023 this.id = id; 024 this.cacheDir = cacheDir; 025 } 026 027 /** 028 * Constructor (without cacheDir argument). 029 * 030 * Only for core projection choices, where chacheDir is the same as 031 * the second part of the id. 032 */ 033 public AbstractProjectionChoice(String name, String id) { 034 this(name, id, null); 035 if (!id.startsWith("core:")) throw new IllegalArgumentException(); 036 this.cacheDir = id.substring(5); 037 } 038 039 @Override 040 public String getId() { 041 return id; 042 } 043 044 public String getCacheDir() { 045 return cacheDir; 046 } 047 048 @Override 049 public String toString() { 050 return name; 051 } 052 053 abstract public String getCurrentCode(); 054 055 abstract public String getProjectionName(); 056 057 @Override 058 public Projection getProjection() { 059 String code = getCurrentCode(); 060 String pref = Projections.getInit(code); 061 if (pref == null) 062 throw new AssertionError("Error: Unkown projection code"); 063 return new CustomProjection(getProjectionName(), code, pref, getCacheDir()); 064 } 065 066 }