Revision 13760

View differences:

trunk/libraries/libFMap/src/com/iver/cit/gvsig/fmap/layers/FLayers.java
1258 1258
			layer.setXMLEntity(xml);
1259 1259
		} else {
1260 1260
			// Capas Nuevas (externas)
1261
				Class clase = Class.forName(className);
1261
				Class clase = LayerFactory.getLayerClassForLayerClassName(className);
1262 1262
				layer = (FLayer) clase.newInstance();
1263 1263
				layer.setName(name);
1264 1264
				layer.setXMLEntity(xml);
trunk/libraries/libFMap/src/com/iver/cit/gvsig/fmap/layers/LayerFactory.java
44 44
import java.io.IOException;
45 45
import java.sql.SQLException;
46 46
import java.sql.Types;
47
import java.util.Hashtable;
47 48
import java.util.TreeMap;
48 49

  
49 50
import org.apache.log4j.Logger;
......
108 109
	 * de datos
109 110
	 */
110 111
	private static TreeMap sourceAdapter;
112
	
113
	/**
114
	 * This Hashtable allows to register an alternative LayerClass for
115
	 * an specific LayerClass than is attempting to create this factory
116
	 */
117
	private static Hashtable layerClassMapping = new Hashtable();
111 118

  
112 119
	/*
113 120
	 * Crea un RandomVectorialFile con el driver que se le pasa como par?metro y
......
682 689
		initializeDriverManager();
683 690
		initializeWriterManager();
684 691
	}
692
	
693
	/**
694
	 * Set a class to use instead of the originalLayerClassName.
695
	 *
696
	 * @param originalLayerClassName name of class to relpace
697
	 * @param layerClassToUse Class than implements FLayer interface to use
698
	 *
699
	 * @see  getLayerClassForLayerClassName(String,Class)
700
	 * @see  unregisterLayerClassForName(String)
701
	*/
702
	public static void registerLayerClassForName (String originalLayerClassName, Class layerClassToUse){
703
		Class[] interfaces = layerClassToUse.getInterfaces();
704
		for (int i = 0;i < interfaces.length; i++){
705
			if (interfaces[i] == FLayer.class)
706
				break;
707
		}
708

  
709
		layerClassMapping.put(originalLayerClassName,layerClassToUse);
710
	}
711

  
712
	/**
713
	 * Unregister the originalLayerClassName class replacement.
714
	 *
715
	 * @param originalLayerClassName name of class to relpace
716
	 * @param layerClassToUse Class than implements FLayer interface to use
717
	 * @return true if the class had been registered
718
	 *
719
	 * @see  getLayerClassForLayerClassName(String,Class)
720
	 * @see  unregisterLayerClassForName(String)
721
	*/
722
	public static boolean unregisterLayerClassForName (String originalLayerClassName){
723
		return layerClassMapping.remove(originalLayerClassName) != null;
724
	}
725

  
726
	/**
727
	 * Gets the class to use for the layerClassName.
728
	 * If isn't registered an alternative class for this layerClass
729
	 * the this returns 'Class.forName(layerClassName)'
730
	 *
731
	 * @param layerClassName
732
	 * @return Class implements FLayer to use
733
	 * @throws ClassNotFoundException
734
	 *
735
	 * @see  registerLayerClassForName(String,Class)
736
	 * @see  unregisterLayerClassForName(String)
737
	 */
738
	public static Class getLayerClassForLayerClassName(String layerClassName) throws ClassNotFoundException{
739
		Class layerClass = (Class)layerClassMapping.get(layerClassName);
740
		if (layerClass == null)
741
			layerClass = Class.forName(layerClassName);
742
		return layerClass;
743
	}
685 744
}

Also available in: Unified diff