Revision 6437 trunk/libraries/libFMap/src/com/iver/cit/gvsig/fmap/layers/FLayers.java

View differences:

FLayers.java
770 770
		// try {
771 771
		fmap.clearErrors();
772 772
			for (int i = 0; i < numLayers; i++) {
773
				FLayer layer = null;
774
				try {
773
				this.addLayerFromXML(xml.getChild(i),s[i]);
775 774

  
776 775

  
777
				String className = xml.getChild(i).getStringProperty("className");
778

  
779
				if (className.equals(FLyrVect.class.getName())) {
780
					String type = xml.getChild(i).getStringProperty("type");
781
					if ("vectorial".equals(type)){
782
						//String recordsetName = xml.getChild(i).getStringProperty("recordset-name");
783
                        IProjection proj = null;
784
                        if (xml.getChild(i).contains("proj")) {
785
                            proj = CRSFactory.getCRS(xml.getChild(i).getStringProperty("proj"));
786
                        }
787
                        else
788
                        {
789
                            proj = this.getFMap().getViewPort().getProjection();
790
                        }
791
						if (xml.getChild(i).contains("file")) {
792
							Driver d;
793
							try {
794
								d = LayerFactory.getDM().getDriver(xml.getChild(i).getStringProperty("driverName"));
795
							} catch (DriverLoadException e1) {
796
								throw new XMLException(e1);
797
							}
798
							layer = LayerFactory.createLayer(s[i], (VectorialFileDriver) d,
799
															new File(xml.getChild(i).getStringProperty("file")),
800
															proj);
801

  
802

  
803
						}
804
                        if (xml.getChild(i).contains("db")) {
805

  
806
                            String driverName = xml.getChild(i).getStringProperty("db");
807
                            VectorialDatabaseDriver driver;
808
                            try {
809
                                driver = (VectorialDatabaseDriver) LayerFactory.getDM().getDriver(driverName);
810
                                //Hay que separar la carga de los datos del XMLEntity del load.
811
                                driver.setXMLEntity(xml.getChild(i).getChild(2));
812
                                
813
                                ((DefaultDBDriver)driver).load();
814
                                layer = LayerFactory.createDBLayer(driver, s[i], proj);
815
                                
816
                            } catch (DriverLoadException e) {
817
                                e.printStackTrace();
818
                                throw new XMLException(e);
819
                            }
820

  
821
                        }
822
                        // Clases con algun driver gen?rico creado por otro
823
                        // programador
824
                        if (xml.getChild(i).contains("other")) {
825

  
826
                            String driverName = xml.getChild(i).getStringProperty("other");
827
                            VectorialDriver driver = null;
828
                            try {
829
                                driver = (VectorialDriver) LayerFactory.getDM().getDriver(driverName);
830
                            } catch (DriverLoadException e) {
831
                                // Si no existe ese driver, no pasa nada.
832
                                // Puede que el desarrollador no quiera que
833
                                // aparezca en el cuadro de di?logo y ha metido
834
                                // el jar con sus clases en nuestro directorio lib.
835
                                // Intentamos cargar esa clase "a pelo".
836
                                if (xml.getChild(i).getChild(2).contains("className"))
837
                                {
838
                                    String className2 = xml.getChild(i).getChild(2).getStringProperty("className");
839
                                    try {
840
                                        driver = (VectorialDriver) Class.forName(className2).newInstance();
841
                                    } catch (Exception e1) {
842
                                        throw new XMLException(e1);
843
                                    }
844
                                }
845
                            } catch (NullPointerException npe) {
846
                                // Si no existe ese driver, no pasa nada.
847
                                // Puede que el desarrollador no quiera que
848
                                // aparezca en el cuadro de di?logo y ha metido
849
                                // el jar con sus clases en nuestro directorio lib.
850
                                // Intentamos cargar esa clase "a pelo".
851
                                if (xml.getChild(i).getChild(2).contains("className"))
852
                                {
853
                                    String className2 = xml.getChild(i).getChild(2).getStringProperty("className");
854
                                    try {
855
                                        driver = (VectorialDriver) Class.forName(className2).newInstance();
856
                                    } catch (Exception e1) {
857
                                        throw new XMLException(e1);
858
                                    }
859
                                }
860
                            }
861
                            if (driver instanceof IPersistance)
862
                            {
863
                                IPersistance persist = (IPersistance) driver;
864
                                persist.setXMLEntity(xml.getChild(i).getChild(2));
865
                            }
866
                            layer = LayerFactory.createLayer(s[i], driver, proj);
867
                        }
868

  
869

  
870
					} else if ("raster".equals(type)) {
871
/*						if (xml.getChild(i).contains("file")) {
872
							Driver d = LayerFactory.getDM().getDriver(xml.getChild(i).getStringProperty("driverName"));
873
													layer = LayerFactory.createLayer(s[i],
874
															,
875
															new File(xml.getChild(i).getStringProperty("file")),
876
															this.getFMap().getViewPort().getProjection());
877

  
878
						}
879
*/					}
880

  
881
					layer.setXMLEntity(xml.getChild(i));
882

  
883
//				} else if (className.equals(FLyrWMS.class.getName())) {
884
//					try {
885
//						layer = LayerFactory.createLayer(s[i],
886
//								StringUtilities.string2Rect(
887
//									xml.getChild(i).getStringProperty("fullExtent")),
888
//								new URL(xml.getChild(i).getStringProperty("host")),
889
//								xml.getChild(i).getStringProperty("format"),
890
//								xml.getChild(i).getStringProperty("layerQuery"),
891
//								xml.getChild(i).getStringProperty("infoLayerQuery"),
892
//								xml.getChild(i).getStringProperty("srs"));
893
//						layer.setXMLEntity(xml.getChild(i));
894
//					} catch (MalformedURLException e) {
895
//						throw new XMLException(e);
896
//					}
897
				} else if (className.equals((FLyrRaster.class.getName()))) {
898
					//if (xml.getChild(i).contains("file")) {
899
					/*layer = LayerFactory.createLayer(s[i],
900
							xml.getChild(i).getStringProperty("driverName"),
901
							new File(xml.getChild(i).getStringProperty("file")),
902
							this.getFMap().getViewPort().getProjection());*/
903
					layer = new FLyrRaster();
904
					layer.setName(s[i]);
905
					if (!xml.getChild(i).contains("proj"))
906
						((FLyrRaster)layer).setProjection(this.getFMap().getViewPort().getProjection());
907
					layer.setXMLEntity(xml.getChild(i));
908
					try {
909
						layer.load();
910
					} catch (DriverIOException e) {
911
						throw new XMLException(e);
912
					}
913

  
914
				}else if (className.equals((FLayers.class.getName()))) {
915
					layer = new FLayers(getFMap(),this);
916
					layer.setXMLEntity(xml.getChild(i));
917
				} else {
918
					// Capas Nuevas (externas)
919
						Class clase = Class.forName(className);
920
						layer = (FLayer) clase.newInstance();
921
						layer.setName(s[i]);
922
						layer.setXMLEntity(xml.getChild(i));
923
						try {
924
							layer.load();
925
						}catch (DriverIOException e) {
926
							throw new XMLException(e);
927
						}
928

  
929
				}
930

  
931
				this.addLayer(layer);
932
				logger.debug("capa :"+ layer.getName() +"cargada");
933
				// Comprobar que la proyecci?n es la misma que la de FMap
934
                // Si no lo es, es una capa que est? reproyectada al vuelo
935
                IProjection proj = layer.getProjection();
936
                if ((proj != null))
937
                    if (proj != getFMap().getProjection())
938
                    {
939
                        ICoordTrans ct = proj.getCT(getFMap().getProjection());
940
                        // TODO: REVISAR CON LUIS
941
                        // Se lo fijamos a todas, luego cada una que se reproyecte
942
                        // si puede, o que no haga nada
943
                        layer.setCoordTrans(ct);
944
                        // NOTA: DESPU?S DE ESTO DEBER?AMOS CREAR LAS ETIQUETAS
945
                        // SI ES NECESARIO.
946
                        // TODO: REVISAR A FONDO ESTO, PORQUE LAS ETIQUETAS SE CREAN
947
                        // 2 VECES SI HAY REPROYECC?N
948
                        if (layer instanceof FLyrVect)
949
                        {
950
                            FLyrVect lyrVect = (FLyrVect)layer;
951
                            VectorialLegend legend = (VectorialLegend) lyrVect.getLegend();
952
                            if (legend.getLabelField() != null) {
953
                                lyrVect.createLabelLayer(lyrVect.getRecordset());
954
                            }
955

  
956
                        }
957
                    }
958
                }catch (Exception e) {
959
                		fmap.addLayerError(xml.getChild(i).getStringProperty("name"));
960
    					//loadLayerException.addException(e);
961
    				/*if (layer!=null){
962
                	layer.setActive(false);
963
					layer.setVisible(false);
964
					this.addLayer(layer);
965
                	}*/
966
					//throw new XMLException(e);
967
                    System.err.println("No se ha podido cargar la capa : "+xml.getChild(i).getStringProperty("name"));
968
                    logger.debug("No se ha podido cargar la capa : "+xml.getChild(i).getStringProperty("name") + ". Raz?n:");
969
                    // logger.debug(e.fillInStackTrace());
970
                    e.printStackTrace();
971
                }
972

  
973 776
			}
974 777
		/* } catch (DriverException e) {
975 778
			throw new XMLException(e);
......
1187 990
		}
1188 991

  
1189 992
	}
993
	
994
	public boolean addLayerFromXMLEntity(XMLEntity xml, String name) {
995
		fmap.clearErrors();
996
		this.addLayerFromXML(xml,name);
997
		
998
		return (fmap.getLayersError().size() == 0); 
1190 999

  
1000
	}
1191 1001

  
1002
	private void addLayerFromXML(XMLEntity xml, String name) {
1003
		FLayer layer = null;	
1004
		
1005
		try {
1006
		if (name == null) name = xml.getName();
1007

  
1008

  
1009
		String className = xml.getStringProperty("className");
1010

  
1011
		if (className.equals(FLyrVect.class.getName())) {
1012
			String type = xml.getStringProperty("type");
1013
			if ("vectorial".equals(type)){
1014
				//String recordsetName = xml.getChild(i).getStringProperty("recordset-name");
1015
                IProjection proj = null;
1016
                if (xml.contains("proj")) {
1017
                    proj = CRSFactory.getCRS(xml.getStringProperty("proj"));
1018
                }
1019
                else
1020
                {
1021
                    proj = this.getFMap().getViewPort().getProjection();
1022
                }
1023
				if (xml.contains("file")) {
1024
					Driver d;
1025
					try {
1026
						d = LayerFactory.getDM().getDriver(xml.getStringProperty("driverName"));
1027
					} catch (DriverLoadException e1) {
1028
						throw new XMLException(e1);
1029
					}
1030
					layer = LayerFactory.createLayer(name, (VectorialFileDriver) d,
1031
													new File(xml.getStringProperty("file")),
1032
													proj);
1033

  
1034

  
1035
				}
1036
                if (xml.contains("db")) {
1037

  
1038
                    String driverName = xml.getStringProperty("db");
1039
                    VectorialDatabaseDriver driver;
1040
                    try {
1041
                        driver = (VectorialDatabaseDriver) LayerFactory.getDM().getDriver(driverName);
1042
                        //Hay que separar la carga de los datos del XMLEntity del load.
1043
                        driver.setXMLEntity(xml.getChild(2));
1044
                        
1045
                        ((DefaultDBDriver)driver).load();
1046
                        layer = LayerFactory.createDBLayer(driver, name, proj);
1047
                        
1048
                    } catch (DriverLoadException e) {
1049
                        e.printStackTrace();
1050
                        throw new XMLException(e);
1051
                    }
1052

  
1053
                }
1054
                // Clases con algun driver gen?rico creado por otro
1055
                // programador
1056
                if (xml.contains("other")) {
1057

  
1058
                    String driverName = xml.getStringProperty("other");
1059
                    VectorialDriver driver = null;
1060
                    try {
1061
                        driver = (VectorialDriver) LayerFactory.getDM().getDriver(driverName);
1062
                    } catch (DriverLoadException e) {
1063
                        // Si no existe ese driver, no pasa nada.
1064
                        // Puede que el desarrollador no quiera que
1065
                        // aparezca en el cuadro de di?logo y ha metido
1066
                        // el jar con sus clases en nuestro directorio lib.
1067
                        // Intentamos cargar esa clase "a pelo".
1068
                        if (xml.getChild(2).contains("className"))
1069
                        {
1070
                            String className2 = xml.getChild(2).getStringProperty("className");
1071
                            try {
1072
                                driver = (VectorialDriver) Class.forName(className2).newInstance();
1073
                            } catch (Exception e1) {
1074
                                throw new XMLException(e1);
1075
                            }
1076
                        }
1077
                    } catch (NullPointerException npe) {
1078
                        // Si no existe ese driver, no pasa nada.
1079
                        // Puede que el desarrollador no quiera que
1080
                        // aparezca en el cuadro de di?logo y ha metido
1081
                        // el jar con sus clases en nuestro directorio lib.
1082
                        // Intentamos cargar esa clase "a pelo".
1083
                        if (xml.getChild(2).contains("className"))
1084
                        {
1085
                            String className2 = xml.getChild(2).getStringProperty("className");
1086
                            try {
1087
                                driver = (VectorialDriver) Class.forName(className2).newInstance();
1088
                            } catch (Exception e1) {
1089
                                throw new XMLException(e1);
1090
                            }
1091
                        }
1092
                    }
1093
                    if (driver instanceof IPersistance)
1094
                    {
1095
                        IPersistance persist = (IPersistance) driver;
1096
                        persist.setXMLEntity(xml.getChild(2));
1097
                    }
1098
                    layer = LayerFactory.createLayer(name, driver, proj);
1099
                }
1100

  
1101

  
1102
			} else if ("raster".equals(type)) {
1103
/*						if (xml.getChild(i).contains("file")) {
1104
					Driver d = LayerFactory.getDM().getDriver(xml.getChild(i).getStringProperty("driverName"));
1105
											layer = LayerFactory.createLayer(s[i],
1106
													,
1107
													new File(xml.getChild(i).getStringProperty("file")),
1108
													this.getFMap().getViewPort().getProjection());
1109

  
1110
				}
1111
*/					}
1112

  
1113
			layer.setXMLEntity(xml);
1114

  
1115
//		} else if (className.equals(FLyrWMS.class.getName())) {
1116
//			try {
1117
//				layer = LayerFactory.createLayer(s[i],
1118
//						StringUtilities.string2Rect(
1119
//							xml.getChild(i).getStringProperty("fullExtent")),
1120
//						new URL(xml.getChild(i).getStringProperty("host")),
1121
//						xml.getChild(i).getStringProperty("format"),
1122
//						xml.getChild(i).getStringProperty("layerQuery"),
1123
//						xml.getChild(i).getStringProperty("infoLayerQuery"),
1124
//						xml.getChild(i).getStringProperty("srs"));
1125
//				layer.setXMLEntity(xml.getChild(i));
1126
//			} catch (MalformedURLException e) {
1127
//				throw new XMLException(e);
1128
//			}
1129
		} else if (className.equals((FLyrRaster.class.getName()))) {
1130
			//if (xml.getChild(i).contains("file")) {
1131
			/*layer = LayerFactory.createLayer(s[i],
1132
					xml.getChild(i).getStringProperty("driverName"),
1133
					new File(xml.getChild(i).getStringProperty("file")),
1134
					this.getFMap().getViewPort().getProjection());*/
1135
			layer = new FLyrRaster();
1136
			layer.setName(name);
1137
			if (!xml.contains("proj"))
1138
				((FLyrRaster)layer).setProjection(this.getFMap().getViewPort().getProjection());
1139
			layer.setXMLEntity(xml);
1140
			try {
1141
				layer.load();
1142
			} catch (DriverIOException e) {
1143
				throw new XMLException(e);
1144
			}
1145

  
1146
		}else if (className.equals((FLayers.class.getName()))) {
1147
			layer = new FLayers(getFMap(),this);
1148
			layer.setXMLEntity(xml);
1149
		} else {
1150
			// Capas Nuevas (externas)
1151
				Class clase = Class.forName(className);
1152
				layer = (FLayer) clase.newInstance();
1153
				layer.setName(name);
1154
				layer.setXMLEntity(xml);
1155
				try {
1156
					layer.load();
1157
				}catch (DriverIOException e) {
1158
					throw new XMLException(e);
1159
				}
1160

  
1161
		}
1162

  
1163
		this.addLayer(layer);
1164
		logger.debug("capa :"+ layer.getName() +"cargada");
1165
		// Comprobar que la proyecci?n es la misma que la de FMap
1166
        // Si no lo es, es una capa que est? reproyectada al vuelo
1167
        IProjection proj = layer.getProjection();
1168
        if ((proj != null))
1169
            if (proj != getFMap().getProjection())
1170
            {
1171
                ICoordTrans ct = proj.getCT(getFMap().getProjection());
1172
                // TODO: REVISAR CON LUIS
1173
                // Se lo fijamos a todas, luego cada una que se reproyecte
1174
                // si puede, o que no haga nada
1175
                layer.setCoordTrans(ct);
1176
                // NOTA: DESPU?S DE ESTO DEBER?AMOS CREAR LAS ETIQUETAS
1177
                // SI ES NECESARIO.
1178
                // TODO: REVISAR A FONDO ESTO, PORQUE LAS ETIQUETAS SE CREAN
1179
                // 2 VECES SI HAY REPROYECC?N
1180
                if (layer instanceof FLyrVect)
1181
                {
1182
                    FLyrVect lyrVect = (FLyrVect)layer;
1183
                    VectorialLegend legend = (VectorialLegend) lyrVect.getLegend();
1184
                    if (legend.getLabelField() != null) {
1185
                        lyrVect.createLabelLayer(lyrVect.getRecordset());
1186
                    }
1187

  
1188
                }
1189
            }
1190
        }catch (Exception e) {
1191
        		fmap.addLayerError(xml.getStringProperty("name"));
1192
				//loadLayerException.addException(e);
1193
			/*if (layer!=null){
1194
        	layer.setActive(false);
1195
			layer.setVisible(false);
1196
			this.addLayer(layer);
1197
        	}*/
1198
			//throw new XMLException(e);
1199
            System.err.println("No se ha podido cargar la capa : "+xml.getStringProperty("name"));
1200
            logger.debug("No se ha podido cargar la capa : "+xml.getStringProperty("name") + ". Raz?n:");
1201
            // logger.debug(e.fillInStackTrace());
1202
            e.printStackTrace();
1203
        }		
1204
	}
1205

  
1192 1206
}

Also available in: Unified diff