Revision 6437 trunk/libraries/libFMap/src/com/iver/cit/gvsig/fmap/layers/FLayers.java
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