Index: CrsFactory.java
===================================================================
--- CrsFactory.java	(revision 228)
+++ CrsFactory.java	(revision 229)
@@ -37,7 +37,6 @@
  *
  *   +34 967 599 200
  */
-
 package org.gvsig.crs;
 
 import java.io.File;
@@ -56,6 +55,7 @@
 import org.gvsig.crs.repository.NoAuthRepositoryGT;
 import org.gvsig.crs.repository.UsrRepository;
 import org.gvsig.crs.repository.UsrRepositoryGT;
+import org.gvsig.tools.dispose.Disposable;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
@@ -66,204 +66,207 @@
  * @author Diego Guerrero Sevilla (diego.guerrero@uclm.es)
  *
  */
+public class CrsFactory implements ICRSFactory {
 
-public class CrsFactory implements ICRSFactory {
-    
     private static Logger logger = LoggerFactory.getLogger(CrsFactory.class);
-	static TreeMap data = new TreeMap();
+    static TreeMap data = new TreeMap();
 
-	private static File databaseFolder = null;
-	private static File projLibFolder = null;
-	
-	public CrsFactory() {
-	}
-	/**
-	 * Obtiene un CRS a partir de su código (p.e. EPSG:23030).
-	 * @param code
-	 * @return
-	 * @throws CrsException
-	 */
-	public ICrs getCRS(String code) throws CrsException {
+    private static File databaseFolder = null;
+    private static File projLibFolder = null;
 
-		/*if (data.containsKey(code))
-			return (ICrs) data.get(code);*/
+    public CrsFactory() {
+    }
 
-		String repoId = "";
-		String crsCode = "";
-		ICrs crs = null;
-		ICrsRepository repo = null;
+    /**
+     * Obtiene un CRS a partir de su código (p.e. EPSG:23030).
+     *
+     * @param code
+     * @return
+     * @throws CrsException
+     */
+    public ICrs getCRS(String code) throws CrsException {
 
-		if(code.indexOf(":", code.indexOf(":")+1)<0){
-			repoId = code.substring(0, code.indexOf(":"));
-			crsCode = code.substring(code.indexOf(":")+1);
+        /*if (data.containsKey(code))
+         return (ICrs) data.get(code);*/
+        String repoId = "";
+        String crsCode = "";
+        ICrs crs = null;
+        ICrsRepository repo = null;
 
-			if(repoId.equals("EPSG")){
-				repo = new EpsgRepositoryGT();
-				crs = repo.getCrs(crsCode);
-				if (crs==null) {
-					repo = new EpsgRepository();
-					crs = repo.getCrs(crsCode);
-				}
-			}else if (repoId.equals("IAU2000")){
-				repo = new Iau2000RepositoryGT();
-				crs = repo.getCrs(crsCode);
-				if (crs==null) {
-					repo = new Iau2000Repository();
-					crs = repo.getCrs(crsCode);
-				}
-            }else if (repoId.equals("CRS")){
-                repo = new NoAuthRepositoryGT();
-                crs = repo.getCrs(crsCode);
-                if (crs==null) {
-                    repo = new NoAuthRepository();
+        try {
+            if ( code.indexOf(":", code.indexOf(":") + 1) < 0 ) {
+                repoId = code.substring(0, code.indexOf(":"));
+                crsCode = code.substring(code.indexOf(":") + 1);
+
+                if ( repoId.equals("EPSG") ) {
+                    repo = new EpsgRepositoryGT();
                     crs = repo.getCrs(crsCode);
+                    if ( crs == null ) {
+                        repo = new EpsgRepository();
+                        crs = repo.getCrs(crsCode);
+                    }
+                } else if ( repoId.equals("IAU2000") ) {
+                    repo = new Iau2000RepositoryGT();
+                    crs = repo.getCrs(crsCode);
+                    if ( crs == null ) {
+                        repo = new Iau2000Repository();
+                        crs = repo.getCrs(crsCode);
+                    }
+                } else if ( repoId.equals("CRS") ) {
+                    repo = new NoAuthRepositoryGT();
+                    crs = repo.getCrs(crsCode);
+                    if ( crs == null ) {
+                        repo = new NoAuthRepository();
+                        crs = repo.getCrs(crsCode);
+                    }
+                } else if ( repoId.equals("ESRI") ) {
+                    repo = new EsriRepositoryGT();
+                    crs = repo.getCrs(crsCode);
+                    if ( crs == null ) {
+                        repo = new EsriRepository();
+                        crs = repo.getCrs(crsCode);
+                    }
+                } else if ( repoId.equals("USR") ) {
+                    repo = new UsrRepositoryGT();
+                    crs = repo.getCrs(crsCode);
+                    if ( crs == null ) {
+                        repo = new UsrRepository();
+                        crs = repo.getCrs(crsCode);
+                    }
                 }
-			}else if (repoId.equals("ESRI")){
-				repo = new EsriRepositoryGT();
-				crs = repo.getCrs(crsCode);
-				if (crs==null) {
-					repo = new EsriRepository();
-					crs = repo.getCrs(crsCode);
-				}
-			}else if (repoId.equals("USR")){
-				repo = new UsrRepositoryGT();
-				crs = repo.getCrs(crsCode);
-				if (crs==null) {
-					repo = new UsrRepository();
-					crs = repo.getCrs(crsCode);
-				}
-			}
-		}
-		else{
-			String sourceParams = null;
-			String targetParams = null;
+            } else {
+                String sourceParams = null;
+                String targetParams = null;
 
-			crsCode = code.substring(0,code.indexOf(":",code.indexOf(":")+1));
-			if (code.indexOf("@")==-1){
-				crsCode=crsCode.substring(0, crsCode.indexOf(","));
-			}else{
-				sourceParams = code.substring(code.indexOf("@")+1,code.lastIndexOf("@"));
-				targetParams = code.substring(code.lastIndexOf("@")+1);
+                crsCode = code.substring(0, code.indexOf(":", code.indexOf(":") + 1));
+                if ( code.indexOf("@") == -1 ) {
+                    crsCode = crsCode.substring(0, crsCode.indexOf(","));
+                } else {
+                    sourceParams = code.substring(code.indexOf("@") + 1, code.lastIndexOf("@"));
+                    targetParams = code.substring(code.lastIndexOf("@") + 1);
 
-				if (sourceParams.equals(""))
-					sourceParams = null;
-				else if (targetParams.equals("1")){ // Compativilidad con versiones de libJCrs sin soporte para transf. compuestas.
-					targetParams = sourceParams;
-					sourceParams = "";
-				}
-				if (targetParams.equals("")||targetParams.equals("0")) // Compativilidad con versiones de libJCrs sin soporte para transf. compuestas.
-					targetParams = null;
-			}
-			crs = getCRS(crsCode);
-			if (crs != null) {
-			    crs.setTransformationParams(sourceParams,targetParams);
-			}
-			
-		}
+                    if ( sourceParams.equals("") ) {
+                        sourceParams = null;
+                    } else if ( targetParams.equals("1") ) { // Compativilidad con versiones de libJCrs sin soporte para transf. compuestas.
+                        targetParams = sourceParams;
+                        sourceParams = "";
+                    }
+                    if ( targetParams.equals("") || targetParams.equals("0") ) // Compativilidad con versiones de libJCrs sin soporte para transf. compuestas.
+                    {
+                        targetParams = null;
+                    }
+                }
+                crs = getCRS(crsCode);
+                if ( crs != null ) {
+                    crs.setTransformationParams(sourceParams, targetParams);
+                }
 
-		/*code = crs.getAbrev();
+            }
 
-		data.put(code, crs);*/
+            /*code = crs.getAbrev();
 
-		if (crs == null) {
-		    logger.warn("Did not find CRS " + code + " in available repositories.");
-		} else {
-		    logger.info("Found CRS " + code +
-		        (repo == null ? "" : (" (" + repo.getClass().getSimpleName() + ")")));
-		}
-		return crs;
+             data.put(code, crs);*/
+            if ( crs == null ) {
+                logger.debug("Can't find CRS '" + code + "' in available repositories.");
+            } else {
+                logger.debug("Found CRS '" + code + "' in repository '" +
+                        (repo == null ? "unknow" : (repo.getClass().getSimpleName())) + "'.");
+            }
+            return crs;
+        } finally {
+            if( repo instanceof Disposable ) {
+                ((Disposable)repo).dispose();
+            }
+        } 
+        /*if (data.containsKey(code))
+         return (Crs) data.get(code);
 
-		/*if (data.containsKey(code))
-			return (Crs) data.get(code);
+         Crs crs = new Crs(code);
 
-		Crs crs = new Crs(code);
+         // LWS Esta línea sobra, cuando el cuadro de diálogo esté
+         // mejor hecho.
+         code = crs.getAbrev();
 
-		// LWS Esta línea sobra, cuando el cuadro de diálogo esté
-		// mejor hecho.
-		code = crs.getAbrev();
+         data.put(code, crs);
 
-		data.put(code, crs);
+         return crs;*/
+    }
 
-		return crs;*/
-	}
+    /**
+     *
+     * @param epsg_code
+     * @param code
+     * @return
+     * @throws CrsException
+     */
+    public ICrs getCRS(int epsg_code, String code) throws CrsException {
+        /*if (data.containsKey(code))
+         return (Crs) data.get(code);*/
 
-	/**
-	 *
-	 * @param epsg_code
-	 * @param code
-	 * @return
-	 * @throws CrsException
-	 */
-	public ICrs getCRS(int epsg_code, String code) throws CrsException {
-		/*if (data.containsKey(code))
-			return (Crs) data.get(code);*/
+        Crs crs = new Crs(epsg_code, code);
 
-		Crs crs = new Crs(epsg_code, code);
-
-		// LWS Esta línea sobra, cuando el cuadro de diálogo esté
-		// mejor hecho.
+        // LWS Esta línea sobra, cuando el cuadro de diálogo esté
+        // mejor hecho.
 		/*code = crs.getAbrev();
 
-		data.put(code, crs);*/
+         data.put(code, crs);*/
+        return crs;
+    }
 
-		return crs;
-	}
+    /**
+     *
+     * @param epsg_code
+     * @param code
+     * @param params
+     * @return
+     * @throws CrsException
+     */
+    public ICrs getCRS(int epsg_code, String code, String params) throws CrsException {
+        /*if (data.containsKey(code))
+         return (Crs) data.get(code);*/
 
-	/**
-	 *
-	 * @param epsg_code
-	 * @param code
-	 * @param params
-	 * @return
-	 * @throws CrsException
-	 */
-	public ICrs getCRS(int epsg_code, String code, String params) throws CrsException {
-		/*if (data.containsKey(code))
-			return (Crs) data.get(code);*/
+        Crs crs = new Crs(epsg_code, code, params);
 
-		Crs crs = new Crs(epsg_code, code,params);
-
-		// LWS Esta línea sobra, cuando el cuadro de diálogo esté
-		// mejor hecho.
+        // LWS Esta línea sobra, cuando el cuadro de diálogo esté
+        // mejor hecho.
 		/*code = crs.getAbrev();
 
-		data.put(code, crs);*/
+         data.put(code, crs);*/
+        return crs;
+    }
 
-		return crs;
-	}
+    /**
+     *
+     */
+    public IProjection get(String name) {
+        try {
+            return getCRS(name);
+        } catch (CrsException e) {
+            logger.error("Can't cget CRS name '" + name + "'.", e);
+        }
+        return null;
+    }
 
-	/**
-	 *
-	 */
-	public IProjection get(String name) {
-		try {
-			return getCRS(name);
-		} catch (CrsException e) {
-			logger.error("Can't cget CRS name '"+name+"'.",e);
-		}
-		return null;
-	}
+    /**
+     *
+     */
+    public boolean doesRigurousTransformations() {
+        return true;
+    }
 
-	/**
-	 *
-	 */
-	public boolean doesRigurousTransformations() {
-		return true;
-	}
-	
-	public static File getDataBaseFolder() {
-		return databaseFolder;
-	}
-	
-	public static void setDataBaseFolder(File folder) {
-		databaseFolder = folder;
-	}
+    public static File getDataBaseFolder() {
+        return databaseFolder;
+    }
 
-	public static File getProjLibFolder() {
-		return projLibFolder;
-	}
-	
-	public static void setProjLibFolder(File folder) {
-		projLibFolder = folder;
-	}
+    public static void setDataBaseFolder(File folder) {
+        databaseFolder = folder;
+    }
+
+    public static File getProjLibFolder() {
+        return projLibFolder;
+    }
+
+    public static void setProjLibFolder(File folder) {
+        projLibFolder = folder;
+    }
 }
