Revision 229 org.gvsig.projection.jcrs/trunk/org.gvsig.projection.jcrs/org.gvsig.projection.jcrs.lib/src/main/java/org/gvsig/crs/CrsFactory.java

View differences:

CrsFactory.java
37 37
 *
38 38
 *   +34 967 599 200
39 39
 */
40

  
41 40
package org.gvsig.crs;
42 41

  
43 42
import java.io.File;
......
56 55
import org.gvsig.crs.repository.NoAuthRepositoryGT;
57 56
import org.gvsig.crs.repository.UsrRepository;
58 57
import org.gvsig.crs.repository.UsrRepositoryGT;
58
import org.gvsig.tools.dispose.Disposable;
59 59
import org.slf4j.Logger;
60 60
import org.slf4j.LoggerFactory;
61 61

  
......
66 66
 * @author Diego Guerrero Sevilla (diego.guerrero@uclm.es)
67 67
 *
68 68
 */
69
public class CrsFactory implements ICRSFactory {
69 70

  
70
public class CrsFactory implements ICRSFactory {
71
    
72 71
    private static Logger logger = LoggerFactory.getLogger(CrsFactory.class);
73
	static TreeMap data = new TreeMap();
72
    static TreeMap data = new TreeMap();
74 73

  
75
	private static File databaseFolder = null;
76
	private static File projLibFolder = null;
77
	
78
	public CrsFactory() {
79
	}
80
	/**
81
	 * Obtiene un CRS a partir de su c?digo (p.e. EPSG:23030).
82
	 * @param code
83
	 * @return
84
	 * @throws CrsException
85
	 */
86
	public ICrs getCRS(String code) throws CrsException {
74
    private static File databaseFolder = null;
75
    private static File projLibFolder = null;
87 76

  
88
		/*if (data.containsKey(code))
89
			return (ICrs) data.get(code);*/
77
    public CrsFactory() {
78
    }
90 79

  
91
		String repoId = "";
92
		String crsCode = "";
93
		ICrs crs = null;
94
		ICrsRepository repo = null;
80
    /**
81
     * Obtiene un CRS a partir de su c?digo (p.e. EPSG:23030).
82
     *
83
     * @param code
84
     * @return
85
     * @throws CrsException
86
     */
87
    public ICrs getCRS(String code) throws CrsException {
95 88

  
96
		if(code.indexOf(":", code.indexOf(":")+1)<0){
97
			repoId = code.substring(0, code.indexOf(":"));
98
			crsCode = code.substring(code.indexOf(":")+1);
89
        /*if (data.containsKey(code))
90
         return (ICrs) data.get(code);*/
91
        String repoId = "";
92
        String crsCode = "";
93
        ICrs crs = null;
94
        ICrsRepository repo = null;
99 95

  
100
			if(repoId.equals("EPSG")){
101
				repo = new EpsgRepositoryGT();
102
				crs = repo.getCrs(crsCode);
103
				if (crs==null) {
104
					repo = new EpsgRepository();
105
					crs = repo.getCrs(crsCode);
106
				}
107
			}else if (repoId.equals("IAU2000")){
108
				repo = new Iau2000RepositoryGT();
109
				crs = repo.getCrs(crsCode);
110
				if (crs==null) {
111
					repo = new Iau2000Repository();
112
					crs = repo.getCrs(crsCode);
113
				}
114
            }else if (repoId.equals("CRS")){
115
                repo = new NoAuthRepositoryGT();
116
                crs = repo.getCrs(crsCode);
117
                if (crs==null) {
118
                    repo = new NoAuthRepository();
96
        try {
97
            if ( code.indexOf(":", code.indexOf(":") + 1) < 0 ) {
98
                repoId = code.substring(0, code.indexOf(":"));
99
                crsCode = code.substring(code.indexOf(":") + 1);
100

  
101
                if ( repoId.equals("EPSG") ) {
102
                    repo = new EpsgRepositoryGT();
119 103
                    crs = repo.getCrs(crsCode);
104
                    if ( crs == null ) {
105
                        repo = new EpsgRepository();
106
                        crs = repo.getCrs(crsCode);
107
                    }
108
                } else if ( repoId.equals("IAU2000") ) {
109
                    repo = new Iau2000RepositoryGT();
110
                    crs = repo.getCrs(crsCode);
111
                    if ( crs == null ) {
112
                        repo = new Iau2000Repository();
113
                        crs = repo.getCrs(crsCode);
114
                    }
115
                } else if ( repoId.equals("CRS") ) {
116
                    repo = new NoAuthRepositoryGT();
117
                    crs = repo.getCrs(crsCode);
118
                    if ( crs == null ) {
119
                        repo = new NoAuthRepository();
120
                        crs = repo.getCrs(crsCode);
121
                    }
122
                } else if ( repoId.equals("ESRI") ) {
123
                    repo = new EsriRepositoryGT();
124
                    crs = repo.getCrs(crsCode);
125
                    if ( crs == null ) {
126
                        repo = new EsriRepository();
127
                        crs = repo.getCrs(crsCode);
128
                    }
129
                } else if ( repoId.equals("USR") ) {
130
                    repo = new UsrRepositoryGT();
131
                    crs = repo.getCrs(crsCode);
132
                    if ( crs == null ) {
133
                        repo = new UsrRepository();
134
                        crs = repo.getCrs(crsCode);
135
                    }
120 136
                }
121
			}else if (repoId.equals("ESRI")){
122
				repo = new EsriRepositoryGT();
123
				crs = repo.getCrs(crsCode);
124
				if (crs==null) {
125
					repo = new EsriRepository();
126
					crs = repo.getCrs(crsCode);
127
				}
128
			}else if (repoId.equals("USR")){
129
				repo = new UsrRepositoryGT();
130
				crs = repo.getCrs(crsCode);
131
				if (crs==null) {
132
					repo = new UsrRepository();
133
					crs = repo.getCrs(crsCode);
134
				}
135
			}
136
		}
137
		else{
138
			String sourceParams = null;
139
			String targetParams = null;
137
            } else {
138
                String sourceParams = null;
139
                String targetParams = null;
140 140

  
141
			crsCode = code.substring(0,code.indexOf(":",code.indexOf(":")+1));
142
			if (code.indexOf("@")==-1){
143
				crsCode=crsCode.substring(0, crsCode.indexOf(","));
144
			}else{
145
				sourceParams = code.substring(code.indexOf("@")+1,code.lastIndexOf("@"));
146
				targetParams = code.substring(code.lastIndexOf("@")+1);
141
                crsCode = code.substring(0, code.indexOf(":", code.indexOf(":") + 1));
142
                if ( code.indexOf("@") == -1 ) {
143
                    crsCode = crsCode.substring(0, crsCode.indexOf(","));
144
                } else {
145
                    sourceParams = code.substring(code.indexOf("@") + 1, code.lastIndexOf("@"));
146
                    targetParams = code.substring(code.lastIndexOf("@") + 1);
147 147

  
148
				if (sourceParams.equals(""))
149
					sourceParams = null;
150
				else if (targetParams.equals("1")){ // Compativilidad con versiones de libJCrs sin soporte para transf. compuestas.
151
					targetParams = sourceParams;
152
					sourceParams = "";
153
				}
154
				if (targetParams.equals("")||targetParams.equals("0")) // Compativilidad con versiones de libJCrs sin soporte para transf. compuestas.
155
					targetParams = null;
156
			}
157
			crs = getCRS(crsCode);
158
			if (crs != null) {
159
			    crs.setTransformationParams(sourceParams,targetParams);
160
			}
161
			
162
		}
148
                    if ( sourceParams.equals("") ) {
149
                        sourceParams = null;
150
                    } else if ( targetParams.equals("1") ) { // Compativilidad con versiones de libJCrs sin soporte para transf. compuestas.
151
                        targetParams = sourceParams;
152
                        sourceParams = "";
153
                    }
154
                    if ( targetParams.equals("") || targetParams.equals("0") ) // Compativilidad con versiones de libJCrs sin soporte para transf. compuestas.
155
                    {
156
                        targetParams = null;
157
                    }
158
                }
159
                crs = getCRS(crsCode);
160
                if ( crs != null ) {
161
                    crs.setTransformationParams(sourceParams, targetParams);
162
                }
163 163

  
164
		/*code = crs.getAbrev();
164
            }
165 165

  
166
		data.put(code, crs);*/
166
            /*code = crs.getAbrev();
167 167

  
168
		if (crs == null) {
169
		    logger.warn("Did not find CRS " + code + " in available repositories.");
170
		} else {
171
		    logger.info("Found CRS " + code +
172
		        (repo == null ? "" : (" (" + repo.getClass().getSimpleName() + ")")));
173
		}
174
		return crs;
168
             data.put(code, crs);*/
169
            if ( crs == null ) {
170
                logger.debug("Can't find CRS '" + code + "' in available repositories.");
171
            } else {
172
                logger.debug("Found CRS '" + code + "' in repository '" +
173
                        (repo == null ? "unknow" : (repo.getClass().getSimpleName())) + "'.");
174
            }
175
            return crs;
176
        } finally {
177
            if( repo instanceof Disposable ) {
178
                ((Disposable)repo).dispose();
179
            }
180
        } 
181
        /*if (data.containsKey(code))
182
         return (Crs) data.get(code);
175 183

  
176
		/*if (data.containsKey(code))
177
			return (Crs) data.get(code);
184
         Crs crs = new Crs(code);
178 185

  
179
		Crs crs = new Crs(code);
186
         // LWS Esta l?nea sobra, cuando el cuadro de di?logo est?
187
         // mejor hecho.
188
         code = crs.getAbrev();
180 189

  
181
		// LWS Esta l?nea sobra, cuando el cuadro de di?logo est?
182
		// mejor hecho.
183
		code = crs.getAbrev();
190
         data.put(code, crs);
184 191

  
185
		data.put(code, crs);
192
         return crs;*/
193
    }
186 194

  
187
		return crs;*/
188
	}
195
    /**
196
     *
197
     * @param epsg_code
198
     * @param code
199
     * @return
200
     * @throws CrsException
201
     */
202
    public ICrs getCRS(int epsg_code, String code) throws CrsException {
203
        /*if (data.containsKey(code))
204
         return (Crs) data.get(code);*/
189 205

  
190
	/**
191
	 *
192
	 * @param epsg_code
193
	 * @param code
194
	 * @return
195
	 * @throws CrsException
196
	 */
197
	public ICrs getCRS(int epsg_code, String code) throws CrsException {
198
		/*if (data.containsKey(code))
199
			return (Crs) data.get(code);*/
206
        Crs crs = new Crs(epsg_code, code);
200 207

  
201
		Crs crs = new Crs(epsg_code, code);
202

  
203
		// LWS Esta l?nea sobra, cuando el cuadro de di?logo est?
204
		// mejor hecho.
208
        // LWS Esta l?nea sobra, cuando el cuadro de di?logo est?
209
        // mejor hecho.
205 210
		/*code = crs.getAbrev();
206 211

  
207
		data.put(code, crs);*/
212
         data.put(code, crs);*/
213
        return crs;
214
    }
208 215

  
209
		return crs;
210
	}
216
    /**
217
     *
218
     * @param epsg_code
219
     * @param code
220
     * @param params
221
     * @return
222
     * @throws CrsException
223
     */
224
    public ICrs getCRS(int epsg_code, String code, String params) throws CrsException {
225
        /*if (data.containsKey(code))
226
         return (Crs) data.get(code);*/
211 227

  
212
	/**
213
	 *
214
	 * @param epsg_code
215
	 * @param code
216
	 * @param params
217
	 * @return
218
	 * @throws CrsException
219
	 */
220
	public ICrs getCRS(int epsg_code, String code, String params) throws CrsException {
221
		/*if (data.containsKey(code))
222
			return (Crs) data.get(code);*/
228
        Crs crs = new Crs(epsg_code, code, params);
223 229

  
224
		Crs crs = new Crs(epsg_code, code,params);
225

  
226
		// LWS Esta l?nea sobra, cuando el cuadro de di?logo est?
227
		// mejor hecho.
230
        // LWS Esta l?nea sobra, cuando el cuadro de di?logo est?
231
        // mejor hecho.
228 232
		/*code = crs.getAbrev();
229 233

  
230
		data.put(code, crs);*/
234
         data.put(code, crs);*/
235
        return crs;
236
    }
231 237

  
232
		return crs;
233
	}
238
    /**
239
     *
240
     */
241
    public IProjection get(String name) {
242
        try {
243
            return getCRS(name);
244
        } catch (CrsException e) {
245
            logger.error("Can't cget CRS name '" + name + "'.", e);
246
        }
247
        return null;
248
    }
234 249

  
235
	/**
236
	 *
237
	 */
238
	public IProjection get(String name) {
239
		try {
240
			return getCRS(name);
241
		} catch (CrsException e) {
242
			logger.error("Can't cget CRS name '"+name+"'.",e);
243
		}
244
		return null;
245
	}
250
    /**
251
     *
252
     */
253
    public boolean doesRigurousTransformations() {
254
        return true;
255
    }
246 256

  
247
	/**
248
	 *
249
	 */
250
	public boolean doesRigurousTransformations() {
251
		return true;
252
	}
253
	
254
	public static File getDataBaseFolder() {
255
		return databaseFolder;
256
	}
257
	
258
	public static void setDataBaseFolder(File folder) {
259
		databaseFolder = folder;
260
	}
257
    public static File getDataBaseFolder() {
258
        return databaseFolder;
259
    }
261 260

  
262
	public static File getProjLibFolder() {
263
		return projLibFolder;
264
	}
265
	
266
	public static void setProjLibFolder(File folder) {
267
		projLibFolder = folder;
268
	}
261
    public static void setDataBaseFolder(File folder) {
262
        databaseFolder = folder;
263
    }
264

  
265
    public static File getProjLibFolder() {
266
        return projLibFolder;
267
    }
268

  
269
    public static void setProjLibFolder(File folder) {
270
        projLibFolder = folder;
271
    }
269 272
}

Also available in: Unified diff