gvsig-publish / org.gvsig.publish / trunk / org.gvsig.publish / org.gvsig.publish.mapserver / org.gvsig.publish.lib.impl.mapserver / src / main / java / org / gvsig / publish / impl / mapserver / utils / MapServer.java @ 180
History | View | Annotate | Download (80.2 KB)
1 |
package org.gvsig.publish.impl.mapserver.utils; |
---|---|
2 |
|
3 |
import java.io.BufferedReader; |
4 |
import java.io.BufferedWriter; |
5 |
import java.io.File; |
6 |
import java.io.FileInputStream; |
7 |
import java.io.FileNotFoundException; |
8 |
import java.io.FileOutputStream; |
9 |
import java.io.FileWriter; |
10 |
import java.io.IOException; |
11 |
import java.io.InputStream; |
12 |
import java.io.InputStreamReader; |
13 |
import java.io.PrintWriter; |
14 |
import java.net.URL; |
15 |
import java.net.URLConnection; |
16 |
import java.util.ArrayList; |
17 |
import java.util.Arrays; |
18 |
import java.util.Iterator; |
19 |
import java.util.List; |
20 |
|
21 |
import javax.activation.MimetypesFileTypeMap; |
22 |
import javax.swing.JCheckBox; |
23 |
import javax.swing.JOptionPane; |
24 |
import javax.xml.bind.JAXBContext; |
25 |
import javax.xml.bind.JAXBException; |
26 |
import javax.xml.bind.Marshaller; |
27 |
import javax.xml.transform.Result; |
28 |
import javax.xml.transform.Source; |
29 |
import javax.xml.transform.Transformer; |
30 |
import javax.xml.transform.TransformerFactory; |
31 |
import javax.xml.transform.stream.StreamResult; |
32 |
import javax.xml.transform.stream.StreamSource; |
33 |
|
34 |
import org.apache.commons.io.FileUtils; |
35 |
import org.apache.commons.lang.StringUtils; |
36 |
import org.cresques.cts.IDatum; |
37 |
import org.cresques.cts.IProjection; |
38 |
import org.slf4j.Logger; |
39 |
import org.slf4j.LoggerFactory; |
40 |
|
41 |
import org.gvsig.app.project.documents.view.ViewDocument; |
42 |
import org.gvsig.complexlabel.impl.DefaultComplexLabelClass; |
43 |
import org.gvsig.complexlegend.ComplexLegendItem; |
44 |
import org.gvsig.complexlegend.VectorComplexLegend; |
45 |
import org.gvsig.fmap.dal.NewDataStoreParameters; |
46 |
import org.gvsig.fmap.dal.coverage.store.RasterDataStore; |
47 |
import org.gvsig.fmap.dal.coverage.store.props.ColorInterpretation; |
48 |
import org.gvsig.fmap.dal.coverage.store.props.ColorTable; |
49 |
import org.gvsig.fmap.dal.exception.DataException; |
50 |
import org.gvsig.fmap.dal.exception.ReadException; |
51 |
import org.gvsig.fmap.dal.exception.ValidateDataParametersException; |
52 |
import org.gvsig.fmap.dal.feature.FeatureAttributeDescriptor; |
53 |
import org.gvsig.fmap.dal.feature.FeatureStore; |
54 |
import org.gvsig.fmap.dal.serverexplorer.db.DBServerExplorer; |
55 |
import org.gvsig.fmap.dal.serverexplorer.filesystem.FilesystemServerExplorer; |
56 |
import org.gvsig.fmap.dal.serverexplorer.wfs.WFSServerExplorer; |
57 |
import org.gvsig.fmap.dal.store.db.DBStoreParameters; |
58 |
import org.gvsig.fmap.geom.primitive.Envelope; |
59 |
import org.gvsig.fmap.geom.primitive.Point; |
60 |
import org.gvsig.fmap.mapcontext.layers.FLayer; |
61 |
import org.gvsig.fmap.mapcontext.layers.FLayers; |
62 |
import org.gvsig.fmap.mapcontext.layers.operations.SingleLayer; |
63 |
import org.gvsig.fmap.mapcontext.layers.vectorial.FLyrVect; |
64 |
import org.gvsig.fmap.mapcontext.rendering.legend.IClassifiedLegend; |
65 |
import org.gvsig.fmap.mapcontext.rendering.legend.IClassifiedVectorLegend; |
66 |
import org.gvsig.fmap.mapcontext.rendering.legend.ILegend; |
67 |
import org.gvsig.fmap.mapcontext.rendering.legend.styling.ILabelClass; |
68 |
import org.gvsig.fmap.mapcontext.rendering.legend.styling.ILabelingMethod; |
69 |
import org.gvsig.fmap.mapcontext.rendering.legend.styling.ILabelingStrategy; |
70 |
import org.gvsig.fmap.mapcontext.rendering.legend.styling.IPlacementConstraints; |
71 |
import org.gvsig.fmap.mapcontext.rendering.symbols.IMultiLayerSymbol; |
72 |
import org.gvsig.fmap.mapcontext.rendering.symbols.ISymbol; |
73 |
import org.gvsig.fmap.mapcontext.rendering.symbols.ITextSymbol; |
74 |
import org.gvsig.publish.PublishLocator; |
75 |
import org.gvsig.publish.PublishManager; |
76 |
import org.gvsig.publish.PublishManager.PublishSymbolConverterFactories; |
77 |
import org.gvsig.publish.PublishProperties; |
78 |
import org.gvsig.publish.impl.DefaultPublishManager; |
79 |
import org.gvsig.publish.impl.mapserver.MapserverProperties; |
80 |
import org.gvsig.publish.impl.mapserver.MapserverToDynObjectHelper; |
81 |
import org.gvsig.publish.impl.mapserver.ToMapserverConverter; |
82 |
import org.gvsig.publish.mapserver641.AlignEnum; |
83 |
import org.gvsig.publish.mapserver641.BooleanEnum; |
84 |
import org.gvsig.publish.mapserver641.Class; |
85 |
import org.gvsig.publish.mapserver641.ExpressionType; |
86 |
import org.gvsig.publish.mapserver641.ItemType; |
87 |
import org.gvsig.publish.mapserver641.ItemType.Item; |
88 |
import org.gvsig.publish.mapserver641.Label; |
89 |
import org.gvsig.publish.mapserver641.Layer; |
90 |
import org.gvsig.publish.mapserver641.LayerSet; |
91 |
import org.gvsig.publish.mapserver641.Map; |
92 |
import org.gvsig.publish.mapserver641.OutputFormat; |
93 |
import org.gvsig.publish.mapserver641.PointType; |
94 |
import org.gvsig.publish.mapserver641.SizeType; |
95 |
import org.gvsig.publish.mapserver641.StateEnum; |
96 |
import org.gvsig.publish.mapserver641.Style; |
97 |
import org.gvsig.publish.mapserver641.Symbol; |
98 |
import org.gvsig.publish.mapserver641.Symbol.Points; |
99 |
import org.gvsig.publish.mapserver641.SymbolSet; |
100 |
import org.gvsig.publish.mapserver641.SymbolType; |
101 |
import org.gvsig.publish.mapserver641.Web; |
102 |
import org.gvsig.raster.fmap.layers.FLyrRaster; |
103 |
import org.gvsig.raster.gdal.io.GdalNative; |
104 |
import org.gvsig.raster.gdal.io.GdalProvider; |
105 |
import org.gvsig.raster.impl.provider.RasterProvider; |
106 |
import org.gvsig.raster.wms.app.wmsclient.layer.FLyrWMS; |
107 |
import org.gvsig.raster.wms.io.RemoteWMSStyle; |
108 |
import org.gvsig.raster.wms.io.WMSDataParameters; |
109 |
import org.gvsig.raster.wms.io.WMSServerExplorer; |
110 |
import org.gvsig.symbology.fmap.mapcontext.rendering.legend.styling.IAttrInTableLabelingStrategy; |
111 |
import org.gvsig.symbology.fmap.mapcontext.rendering.symbol.marker.IMarkerSymbol; |
112 |
import org.gvsig.symbology.fmap.mapcontext.rendering.symbol.marker.IPictureMarkerSymbol; |
113 |
import org.gvsig.symbology.fmap.mapcontext.rendering.symbol.text.ISimpleTextSymbol; |
114 |
import org.gvsig.symbology.fmap.rendering.VectorFilterExpressionLegend; |
115 |
import org.gvsig.timesupport.Interval; |
116 |
import org.gvsig.tools.ToolsLocator; |
117 |
import org.gvsig.tools.dataTypes.DataType; |
118 |
import org.gvsig.tools.dataTypes.DataTypes; |
119 |
import org.gvsig.tools.dynobject.DynField; |
120 |
import org.gvsig.tools.dynobject.DynObject; |
121 |
|
122 |
public class MapServer { |
123 |
|
124 |
private Logger logger = LoggerFactory.getLogger(MapServer.class); |
125 |
public static final String NAME = "Mapserver"; |
126 |
|
127 |
public static final String MAPSERVER_MAP_PROPERTIES = "MapServer-map-properties"; |
128 |
public static final String MAPSERVER_PANEL_PROPERTIES = "MapServer-panel-properties"; |
129 |
|
130 |
public static final String MAPSERVER_LAYER_PROPERTIES = "MapServer-layer-properties"; |
131 |
public static final String MAPSERVER_LAYERPANEL_PROPERTIES = "MapServer-layer-panel-properties"; |
132 |
|
133 |
public static final String MAPSERVER_SYMBOL_PROPERTIES = "MapServer-symbol-properties"; |
134 |
|
135 |
public static final String MAPFILE_FILE = "mapfile.map"; |
136 |
public static final String SYMBOLSET_FILE = "SymbolSet.sym"; |
137 |
public static final String TEMP_DIR = "mapserver"; |
138 |
public static final String IMAGE_FOLDER = "img"; |
139 |
|
140 |
private static final String WMS_PATH = "wms"; |
141 |
private static final String WFS_PATH = "wfs"; |
142 |
private static final String WCS_PATH = "wcs"; |
143 |
|
144 |
private static final int LAYER_MODE = 1; |
145 |
private static final int PROJECT_MODE = 2; |
146 |
|
147 |
public static final String FONTSET_FOLDER = "Font"; |
148 |
public static final String FONTSET_FILE = "FontSet.txt"; |
149 |
|
150 |
public static final String DEFAULT_FONT = "Arial"; |
151 |
public static final String DEFAULT_FILE = "Arial.ttf"; |
152 |
|
153 |
private SymbolSet symbolset;
|
154 |
private File symbolSetFile; |
155 |
private File fontSetFile; |
156 |
|
157 |
private PublishProperties properties;
|
158 |
|
159 |
private String srs_used = ""; |
160 |
private File file; |
161 |
|
162 |
private boolean isWMSService; |
163 |
private boolean isWFSService; |
164 |
private boolean isWCSService; |
165 |
|
166 |
private String overrideFiles; |
167 |
|
168 |
private boolean usesImages = false; |
169 |
private boolean usesFont = false; |
170 |
private boolean usesSymbols = false; |
171 |
private List<OutputFormat> auxOutputEdited = new ArrayList<OutputFormat>(); |
172 |
private boolean isEditedMapFile = false; |
173 |
private boolean isEditedLayer; |
174 |
private boolean hasLayer; |
175 |
private boolean hasLabels; |
176 |
private boolean isPropertiesPanel = false; |
177 |
|
178 |
|
179 |
private static String DEBUG = "5"; |
180 |
|
181 |
public MapServer(PublishProperties publishProperties) {
|
182 |
this.properties = publishProperties;
|
183 |
srs_used = getPublishProperties().getDefaultSRS(); |
184 |
} |
185 |
|
186 |
public Map publish(){ |
187 |
return publish(true); |
188 |
} |
189 |
|
190 |
|
191 |
public Map publish(boolean loadLayers) { |
192 |
isEditedMapFile = false;
|
193 |
|
194 |
ViewDocument doc = MapServerUtils.getCurrentViewDocument(); |
195 |
if (doc == null) { |
196 |
return null; |
197 |
} |
198 |
|
199 |
Map map = getPublishedMap(MapServerUtils.getCurrentViewDocument());
|
200 |
Web web = null;
|
201 |
if(isEditedMapFile && !map.getWeb().isEmpty()){
|
202 |
web = map.getWeb().get(0);
|
203 |
}else{
|
204 |
web = new Web();
|
205 |
} |
206 |
|
207 |
|
208 |
boolean isAllInSameDocument = false; |
209 |
boolean isSplitByLayer = false; |
210 |
if(getPublishProperties() instanceof MapserverProperties){ |
211 |
isAllInSameDocument = ((MapserverProperties) getPublishProperties()).getAllInSameDocument(); |
212 |
isSplitByLayer = ((MapserverProperties) getPublishProperties()).getIsSplitByLayer(); |
213 |
} |
214 |
|
215 |
|
216 |
ItemType itemType3 = new ItemType();
|
217 |
|
218 |
symbolset = new SymbolSet();
|
219 |
|
220 |
if(map == null){ |
221 |
map = new Map(); |
222 |
|
223 |
|
224 |
map.setDebug(DEBUG); |
225 |
try {
|
226 |
if (doc.getMapContext() != null |
227 |
&& doc.getMapContext().getFullEnvelope() != null) {
|
228 |
|
229 |
Envelope env = doc.getMapContext().getFullEnvelope(); |
230 |
Point lower = env.getLowerCorner();
|
231 |
Point upper = env.getUpperCorner();
|
232 |
if(lower != null){ |
233 |
map.getExtent().add(MapServerUtils.getDecreasedMin(lower.getX())); |
234 |
map.getExtent().add(MapServerUtils.getDecreasedMin(lower.getY())); |
235 |
} |
236 |
if(upper != null){ |
237 |
map.getExtent().add(MapServerUtils.getIncrementedMax(upper.getX())); |
238 |
map.getExtent().add(MapServerUtils.getIncrementedMax(upper.getY())); |
239 |
} |
240 |
} |
241 |
} catch (ReadException e2) {
|
242 |
logger.debug("Error reading MapServer properties");
|
243 |
} |
244 |
map.setImageColor(MapServerUtils.getRgbColorType(doc.getMapContext().getViewPort() |
245 |
.getBackColor())); |
246 |
map.setName(doc.getName()); |
247 |
IProjection proj = doc.getMapContext().getProjection(); |
248 |
IDatum datum = proj.getDatum(); |
249 |
map.getProjection().add(getCorrectProjection(proj.getAbrev())); |
250 |
map.setScaleDenom((double) doc.getMapContext().getScaleView());
|
251 |
if (!getPublishProperties().isDefaultPath() &&
|
252 |
!getPublishProperties().isAbsolutePath()) { |
253 |
map.setShapePath(getPublishProperties().getShapePath()); |
254 |
} |
255 |
SizeType st = new SizeType();
|
256 |
st.setX(MapServerUtils.getBigInteger(doc.getMapContext().getViewPort().getImageWidth())); |
257 |
st.setY(MapServerUtils.getBigInteger(doc.getMapContext().getViewPort().getImageHeight())); |
258 |
map.setSize(st); |
259 |
map.setUnits(MapServerUtils.getCorrectUnits(doc.getMapContext().getDistanceName().toLowerCase())); |
260 |
|
261 |
|
262 |
addItemProperty(itemType3, "ows_enable_request", "*"); |
263 |
|
264 |
String proxy_url = System.getProperty("http.proxyHost"); |
265 |
String proxy_port = System.getProperty("http.proxyPort"); |
266 |
if (isWMSService) {
|
267 |
addItemProperty(itemType3, "wms_title", getPublishProperties().getServiceName());
|
268 |
addItemProperty(itemType3, "wms_abstract", getPublishProperties().getServiceDescription());
|
269 |
if (!StringUtils.isBlank(srs_used)) {
|
270 |
addItemProperty(itemType3, "wms_srs", srs_used.toUpperCase());
|
271 |
} |
272 |
addItemProperty(itemType3, "wms_encoding", "UTF-8"); |
273 |
// if (proxy_url != null && proxy_url != "" && proxy_port != null
|
274 |
// && proxy_port != "" ) {
|
275 |
// addItemProperty(itemType3, "wms_proxy_auth_type", "basic");
|
276 |
// addItemProperty(itemType3, "wms_proxy_host", proxy_url);
|
277 |
// addItemProperty(itemType3, "wms_proxy_port", proxy_port);
|
278 |
// addItemProperty(itemType3, "wms_proxy_username", System.getProperty("http.proxyUserName"));
|
279 |
// addItemProperty(itemType3, "wms_proxy_password", System.getProperty("http.proxyPassword"));
|
280 |
// addItemProperty(itemType3, "wms_proxy_type", "http");
|
281 |
// }
|
282 |
} |
283 |
if (isWFSService) {
|
284 |
addItemProperty(itemType3, "wfs_title", getPublishProperties().getServiceName());
|
285 |
addItemProperty(itemType3, "wfs_abstract", getPublishProperties().getServiceDescription());
|
286 |
if (!StringUtils.isBlank(srs_used)) {
|
287 |
addItemProperty(itemType3, "wfs_srs", srs_used.toUpperCase());
|
288 |
} |
289 |
addItemProperty(itemType3, "wfs_encoding", "UTF-8"); |
290 |
addItemProperty(itemType3, "wfs_getfeature_formatlist", "shape-zip,geojson"); |
291 |
|
292 |
} |
293 |
if (isWCSService) {
|
294 |
addItemProperty(itemType3, "wcs_name", getPublishProperties().getServiceName());
|
295 |
addItemProperty(itemType3, "wcs_title", getPublishProperties().getServiceName());
|
296 |
addItemProperty(itemType3, "wcs_abstract", getPublishProperties().getServiceDescription());
|
297 |
addItemProperty(itemType3, "wcs_description", getPublishProperties().getServiceDescription());
|
298 |
if (!StringUtils.isBlank(srs_used)) {
|
299 |
addItemProperty(itemType3, "wcs_srs", srs_used.toUpperCase());
|
300 |
} |
301 |
addItemProperty(itemType3, "wcs_encoding", "UTF-8"); |
302 |
} |
303 |
|
304 |
if (!map.getExtent().isEmpty()){
|
305 |
if(map.getExtent().size()>3){ |
306 |
String ext1 = map.getExtent().get(0) + " "+ |
307 |
map.getExtent().get(1) + " "+ |
308 |
map.getExtent().get(2) + " "+ |
309 |
map.getExtent().get(3);
|
310 |
if (isWMSService) {
|
311 |
addItemProperty(itemType3, "wms_extent", ext1);
|
312 |
} |
313 |
if (isWFSService) {
|
314 |
addItemProperty(itemType3, "wfs_extent", ext1);
|
315 |
} |
316 |
if (isWCSService) {
|
317 |
addItemProperty(itemType3, "wcs_extent", ext1);
|
318 |
} |
319 |
} |
320 |
|
321 |
} |
322 |
|
323 |
|
324 |
} |
325 |
|
326 |
List<Layer> layerList = new ArrayList<Layer>(); |
327 |
if(loadLayers){
|
328 |
/**
|
329 |
* LAYER PARAMETERS
|
330 |
*/
|
331 |
|
332 |
symbolSetFile = null;
|
333 |
fontSetFile = null;
|
334 |
auxOutputEdited = new ArrayList<OutputFormat>(); |
335 |
overrideFiles = "";
|
336 |
usesImages = false;
|
337 |
usesFont = false;
|
338 |
usesSymbols = false;
|
339 |
|
340 |
|
341 |
getLayerInfo(doc.getMapContext().getLayers(), layerList, isAllInSameDocument, isSplitByLayer); |
342 |
} |
343 |
if(isWCSService && !auxOutputEdited.isEmpty()){
|
344 |
for(int k=0;k<auxOutputEdited.size(); k++){ |
345 |
if(!MapServerUtils.isOutputLoaded(map.getOutputFormat(), auxOutputEdited.get(k))){
|
346 |
OutputFormat out = auxOutputEdited.get(k); |
347 |
out.setName(MapServerUtils.createUniqueOutputFormatName( |
348 |
map.getOutputFormat(), |
349 |
out.getName())); |
350 |
map.getOutputFormat().add(out); |
351 |
} |
352 |
} |
353 |
}else{
|
354 |
if(map.getOutputFormat().isEmpty() && isWCSService){
|
355 |
map.getOutputFormat().addAll(MapServerUtils.getOutputFormatList()); |
356 |
} |
357 |
} |
358 |
|
359 |
if(isWFSService){
|
360 |
map.getOutputFormat().addAll(MapServerUtils.getWFSDefaultOutputFormat()); |
361 |
} |
362 |
|
363 |
if(file != null){ |
364 |
if (usesImages) {
|
365 |
web.setImagePath( |
366 |
MapServerUtils.relativePath( |
367 |
new File( |
368 |
file.getParent() + File.separator + IMAGE_FOLDER)
|
369 |
.getAbsolutePath(), |
370 |
file.getParent())); |
371 |
} |
372 |
if (usesFont) {
|
373 |
map.setFontSet(MapServerUtils.relativePath( |
374 |
getFontSetFile().getAbsolutePath(), file.getParent())); |
375 |
} |
376 |
map.setSymbolSet(MapServerUtils.relativePath( |
377 |
getSymbolSetFile().getAbsolutePath(), file.getParent())); |
378 |
}else{
|
379 |
//web.setLog("." + File.separator);
|
380 |
if (usesImages) {
|
381 |
web.setImagePath("./" + IMAGE_FOLDER);
|
382 |
} |
383 |
if (usesFont) {
|
384 |
map.setFontSet("./" + FONTSET_FILE);
|
385 |
} |
386 |
map.setSymbolSet("./" + SYMBOLSET_FILE);
|
387 |
} |
388 |
|
389 |
if(!isEditedMapFile){
|
390 |
web.setMetadata(getCorrectMetadata(itemType3)); |
391 |
|
392 |
if (!itemType3.getItem().isEmpty()) {
|
393 |
web.setMetadata(itemType3); |
394 |
} |
395 |
//web.setTempPath(System.getProperty("java.io.tmpdir"));
|
396 |
map.getWeb().add(web); |
397 |
}else{
|
398 |
web.setMetadata(getCorrectMetadata(web.getMetadata())); |
399 |
if(!isWCSService){
|
400 |
for(int i=map.getOutputFormat().size()-1; i>=0; i--){ |
401 |
map.getOutputFormat().remove(i); |
402 |
} |
403 |
} |
404 |
|
405 |
} |
406 |
|
407 |
if(file != null && hasMapfile()){ |
408 |
|
409 |
if(!file.exists() || getPublishProperties().getOverrideCurrentProject()){
|
410 |
parserFile(map, file); |
411 |
if(!isSplitByLayer){
|
412 |
SymbolSet auxSymbolSet = getSymbolSet(getSymbolSetFile()); |
413 |
loadSymbolsImages(auxSymbolSet); |
414 |
parserFile(auxSymbolSet, getSymbolSetFile()); |
415 |
} |
416 |
}else{
|
417 |
// if(getPublishProperties().getJoinToCurrent()){
|
418 |
if(!isSplitByLayer){
|
419 |
/** Merge de las capas **/
|
420 |
|
421 |
|
422 |
|
423 |
/** Merge de los s?mbolos **/
|
424 |
SymbolSet newsymbolset = new SymbolSet();
|
425 |
newsymbolset = (SymbolSet) parserFile(getSymbolSetFile(), newsymbolset); |
426 |
SymbolSet auxsset = new SymbolSet();
|
427 |
if(newsymbolset != null && |
428 |
auxsset.getSymbol() != null &&
|
429 |
newsymbolset.getSymbol() != null){
|
430 |
auxsset.getSymbol().addAll(newsymbolset.getSymbol()); |
431 |
} |
432 |
auxsset.getSymbol().addAll(getSymbolSet().getSymbol()); |
433 |
for(int i=0; i<getSymbolSet().getSymbol().size(); i++){ |
434 |
Symbol symAux = getSymbolSet().getSymbol().get(i); |
435 |
String name = MapServerUtils.createUniqueSymbolName(auxsset, symAux.getName());
|
436 |
if(!name.equals(symAux.getName())){
|
437 |
updateSymbolName(layerList, symAux.getName(), name); |
438 |
symAux.setName(name); |
439 |
} |
440 |
newsymbolset.getSymbol().add(symAux); |
441 |
auxsset.getSymbol().add(symAux); |
442 |
} |
443 |
|
444 |
loadSymbolsImages(newsymbolset); |
445 |
parserFile(newsymbolset, getSymbolSetFile()); |
446 |
} |
447 |
|
448 |
// }else{
|
449 |
// // TODO Merge de la definici?n en el mapfile.map
|
450 |
// }
|
451 |
} |
452 |
|
453 |
if(isAllInSameDocument){
|
454 |
map.getLayer().addAll(layerList); |
455 |
}else{
|
456 |
Map newmap = new Map(); |
457 |
newmap = (Map) parserFile(file, newmap);
|
458 |
|
459 |
if(getPublishProperties().getJoinToCurrent()){
|
460 |
mergeLayerDefinition(file, newmap, layerList, PROJECT_MODE); |
461 |
} |
462 |
|
463 |
if(!isSplitByLayer){
|
464 |
File mapfile = createMapFile(file, MapServerUtils.getCurrentViewDocument().getName());
|
465 |
if(!layerList.isEmpty()){
|
466 |
LayerSet layerset = new LayerSet();
|
467 |
layerset.getLayer().addAll(layerList); |
468 |
parserFile(layerset, mapfile); |
469 |
map.getInclude().add(mapfile.getName()); |
470 |
} |
471 |
//parserFile(map, file);
|
472 |
} |
473 |
if(!StringUtils.isBlank(map.getFontSet())){
|
474 |
newmap.setFontSet(map.getFontSet()); |
475 |
} |
476 |
if(!StringUtils.isBlank(map.getSymbolSet())){
|
477 |
newmap.setSymbolSet(map.getSymbolSet()); |
478 |
} |
479 |
|
480 |
Web auxWeb = new Web();
|
481 |
boolean isNewWeb = true; |
482 |
if(!newmap.getWeb().isEmpty()
|
483 |
&& !StringUtils.isBlank(newmap.getWeb().get(0).getImagePath())){
|
484 |
auxWeb = newmap.getWeb().get(0);
|
485 |
isNewWeb = false;
|
486 |
} |
487 |
|
488 |
if(!map.getWeb().isEmpty()){
|
489 |
for(int wmap = 0; wmap<map.getWeb().size(); wmap++){ |
490 |
Web wweb = map.getWeb().get(wmap); |
491 |
if(!StringUtils.isBlank(wweb.getImagePath())){
|
492 |
auxWeb.setImagePath(wweb.getImagePath()); |
493 |
if(isNewWeb){
|
494 |
newmap.getWeb().add(auxWeb); |
495 |
isNewWeb = false;
|
496 |
} |
497 |
} |
498 |
} |
499 |
} |
500 |
|
501 |
newmap.getInclude().addAll(map.getInclude()); |
502 |
parserFile(newmap, file); |
503 |
|
504 |
|
505 |
|
506 |
|
507 |
} |
508 |
|
509 |
} |
510 |
|
511 |
|
512 |
return map;
|
513 |
} |
514 |
|
515 |
|
516 |
private void loadSymbolsImages(SymbolSet newsymbolset) { |
517 |
if(newsymbolset != null){ |
518 |
for(int i=0; i<newsymbolset.getSymbol().size(); i++){ |
519 |
loadSymbolImages(newsymbolset.getSymbol().get(i)); |
520 |
} |
521 |
} |
522 |
} |
523 |
|
524 |
protected String addImageUrl(String url) { |
525 |
File originalFile = new File(MapServerUtils.getCorrectFilePathFromUrl(url)); |
526 |
String legFileName = originalFile.getName();
|
527 |
|
528 |
PublishManager manager = PublishLocator.getServiceManager().getPublishManager(); |
529 |
|
530 |
File file = getCurrentFile();
|
531 |
|
532 |
if(file != null){ |
533 |
File parentFile = new File(getCorrectPath(file.getParent())); |
534 |
|
535 |
if(parentFile.isDirectory()
|
536 |
&& parentFile.canWrite()){ |
537 |
File legfile = new File(getCorrectPath(parentFile.getAbsolutePath() |
538 |
+ File.separator + MapServer.IMAGE_FOLDER + File.separator + legFileName)); |
539 |
if(legfile.exists()){
|
540 |
if(!legfile.getAbsolutePath().equals(originalFile.getAbsolutePath())){
|
541 |
Object[] options = {manager.getTranslation("accept_all"), manager.getTranslation("accept"), |
542 |
manager.getTranslation("cancel"), manager.getTranslation("cancell_all")}; |
543 |
int n = -1; |
544 |
if(StringUtils.isBlank(getOverrideFiles())){
|
545 |
n = JOptionPane.showOptionDialog(null, |
546 |
legfile.getAbsolutePath()+"\n"+
|
547 |
manager.getTranslation("file_exists3")+"\n"+ |
548 |
manager.getTranslation("file_exists2"),
|
549 |
manager.getTranslation("file_exists"),
|
550 |
JOptionPane.YES_NO_OPTION,
|
551 |
JOptionPane.WARNING_MESSAGE,
|
552 |
null,
|
553 |
options, |
554 |
options[0]);
|
555 |
} |
556 |
if(n==0){ |
557 |
setOverrideFiles("true");
|
558 |
} |
559 |
if(n==3){ |
560 |
setOverrideFiles("false");
|
561 |
} |
562 |
if(n==1 || getOverrideFiles().equalsIgnoreCase("true")){ |
563 |
try {
|
564 |
FileUtils.copyFile(originalFile, legfile); |
565 |
} catch (IOException e) { |
566 |
logger.debug("Error copying MapServer file: " + originalFile);
|
567 |
} |
568 |
return legfile.getAbsolutePath();
|
569 |
} |
570 |
} |
571 |
}else{
|
572 |
try {
|
573 |
legfile.getParentFile().mkdirs(); |
574 |
FileUtils.copyFile(originalFile, legfile); |
575 |
} catch (IOException e) { |
576 |
logger.debug("Error copying Mapserver file: " + originalFile);
|
577 |
} |
578 |
return legfile.getAbsolutePath();
|
579 |
} |
580 |
} |
581 |
} |
582 |
return null; |
583 |
} |
584 |
|
585 |
private void loadSymbolImages(Symbol newsymbol) { |
586 |
if(newsymbol.getImage() != null && newsymbol.getImage() != ""){ |
587 |
String fileImageURL = addImageUrl(newsymbol.getImage());
|
588 |
|
589 |
String path = ""; |
590 |
if(fileImageURL != null){ |
591 |
File imageFile = new File(fileImageURL); |
592 |
path = getCorrectPath(imageFile.getAbsolutePath()); |
593 |
if(getCurrentFile() != null){ |
594 |
path = MapServerUtils.relativePath(imageFile.getAbsolutePath(), getCurrentFile().getParent()); |
595 |
} |
596 |
}else{
|
597 |
path = newsymbol.getImage(); |
598 |
} |
599 |
|
600 |
newsymbol.setImage(path.replace(File.separator, "/")); |
601 |
} |
602 |
} |
603 |
|
604 |
private void getLayerInfo(FLayers layers, List<Layer> layerList, boolean isAllInSameDocument, boolean isSplitByLayer) { |
605 |
for (int i = 0; i < layers.getLayersCount(); i++) { |
606 |
FLayer layer = layers.getLayer(i); |
607 |
if(layer instanceof FLayers){ |
608 |
getLayerInfo((FLayers) layer, layerList, isAllInSameDocument, isSplitByLayer); |
609 |
}else{
|
610 |
try{
|
611 |
if(layer instanceof FLyrRaster && isWFSService && !isWMSService && !isWCSService){ |
612 |
continue;
|
613 |
} |
614 |
}catch(NoClassDefFoundError e1){ |
615 |
logger.info("No est? instalada la extensi?n de raster");
|
616 |
} |
617 |
if(layer instanceof FLyrVect && !isWFSService && !isWMSService && isWCSService){ |
618 |
continue;
|
619 |
} |
620 |
if(hasMapfile()){
|
621 |
Layer mapserverLayer = getPublishedLayer(layer); |
622 |
|
623 |
MapserverToDynObjectHelper helper = new MapserverToDynObjectHelper();
|
624 |
DynObject dynlayer = ToolsLocator.getDynObjectManager().createDynObject(helper.getLayerDefinition()); |
625 |
Layer auxLayer = helper.clone(mapserverLayer); |
626 |
|
627 |
if(isWFSService){
|
628 |
auxLayer.setLabelCache(null);
|
629 |
auxLayer.setOffsite(null);
|
630 |
auxLayer.setPostLabelCache(null);
|
631 |
auxLayer.setOpacity(null);
|
632 |
} |
633 |
//if(isEditedLayer){
|
634 |
auxLayer.setMetadata(getCorrectMetadata(auxLayer.getMetadata())); |
635 |
//}
|
636 |
|
637 |
SymbolSet sset = getPublishedSymbol(layer); |
638 |
List<Symbol> symIt = sset.getSymbol();
|
639 |
int m=0; |
640 |
while(m<symIt.size()){
|
641 |
Symbol sm = (Symbol) symIt.get(m); |
642 |
if(!isSharedWithOtherViews(layer, sm)){
|
643 |
if(!isSymbolInSet(sset, sm)){
|
644 |
sset.getSymbol().add(sm); |
645 |
} |
646 |
} |
647 |
m++; |
648 |
} |
649 |
mergeSymbolSet(this.symbolset, sset, PROJECT_MODE);
|
650 |
|
651 |
if(file != null){ |
652 |
if(!isAllInSameDocument && isSplitByLayer){
|
653 |
// File mapfile = createMapFile(file, mapserverLayer.getName());
|
654 |
// LayerSet layerset = new LayerSet();
|
655 |
// layerset.getLayer().add(mapserverLayer);
|
656 |
// parserFile(layerset, mapfile);
|
657 |
// map.getInclude().add(mapfile.getName());
|
658 |
//
|
659 |
// if(!sset.getSymbol().isEmpty()){
|
660 |
// File symbolsetfile = createSymbolSetFile(file, mapserverLayer.getName());
|
661 |
// parserFile(sset, symbolsetfile);
|
662 |
// map.getInclude().add(symbolsetfile.getName());
|
663 |
// }
|
664 |
// map.setSymbolSet("");
|
665 |
}else{
|
666 |
layerList.add(auxLayer); |
667 |
} |
668 |
} |
669 |
} |
670 |
} |
671 |
} |
672 |
} |
673 |
|
674 |
public Layer makepublish(FLayer layer) {
|
675 |
ViewDocument view = MapServerUtils.getViewDocumentFromLayer(layer); |
676 |
SymbolSet localSymbolSet = new SymbolSet();
|
677 |
hasLabels = false;
|
678 |
Layer lyr = new Layer();
|
679 |
ItemType itemType = new ItemType();
|
680 |
|
681 |
lyr.setTolerance(3.0);
|
682 |
|
683 |
if(layer.getParentLayer() != null && layer.getParentLayer().getName() != null && layer.getParentLayer().getName() != "root layer"){ |
684 |
lyr.setGroup("/"+layer.getParentLayer().getName());
|
685 |
// }else{
|
686 |
// lyr.setGroup("/"+view.getName());
|
687 |
} |
688 |
|
689 |
lyr.setDebug(DEBUG); |
690 |
String extent = ""; |
691 |
try {
|
692 |
if (layer.getFullEnvelope() != null) { |
693 |
Envelope env = layer.getFullEnvelope(); |
694 |
Point lower = env.getLowerCorner();
|
695 |
Point upper = env.getUpperCorner();
|
696 |
extent = MapServerUtils.getDecreasedMin(lower.getX()) + " " +
|
697 |
MapServerUtils.getDecreasedMin(lower.getY()) + " " +
|
698 |
MapServerUtils.getIncrementedMax(upper.getX())+ " " +
|
699 |
MapServerUtils.getIncrementedMax(upper.getY()); |
700 |
lyr.getExtent().add(MapServerUtils.getDecreasedMin(lower.getX())); |
701 |
lyr.getExtent().add(MapServerUtils.getDecreasedMin(lower.getY())); |
702 |
lyr.getExtent().add(MapServerUtils.getIncrementedMax(upper.getX())); |
703 |
lyr.getExtent().add(MapServerUtils.getIncrementedMax(upper.getY())); |
704 |
} |
705 |
} catch (ReadException e2) {
|
706 |
logger.debug("Error reading MapServer properties");
|
707 |
} |
708 |
if (layer.getMaxScale() != -1) |
709 |
lyr.setMaxScaleDenom(layer.getMaxScale()); |
710 |
if (layer.getMinScale() != -1) |
711 |
lyr.setMinScaleDenom(layer.getMinScale()); |
712 |
lyr.setName(layer.getName()); |
713 |
String projection = ""; |
714 |
if (layer.getProjection() != null) { |
715 |
lyr.getProjection().add( |
716 |
getCorrectProjection(layer.getProjection().getAbrev())); |
717 |
projection = layer.getProjection().getAbrev(); |
718 |
} |
719 |
lyr.setStatus(MapServerUtils.getStatus(layer.isVisible())); |
720 |
|
721 |
if (layer instanceof SingleLayer) { |
722 |
SingleLayer singlelayer = (SingleLayer) layer; |
723 |
String contype = MapServerUtils.getProviderName(singlelayer.getDataStore()
|
724 |
.getProviderName()); |
725 |
if (!contype.equals("local")) { |
726 |
lyr.setConnectionType(contype); |
727 |
} |
728 |
} |
729 |
|
730 |
if (isWMSService) {
|
731 |
addItemProperty(itemType, "wms_title", MapServerUtils.getNameWithoutExtension(layer.getName()));
|
732 |
addItemProperty(itemType, "wms_name", MapServerUtils.getNameWithoutExtension(layer.getName()));
|
733 |
addItemProperty(itemType, "wms_abstract", MapServerUtils.getNameWithoutExtension(layer.getName()));
|
734 |
|
735 |
String group = ""; |
736 |
if(layer.getParentLayer() != null && layer.getParentLayer().getName() != null && layer.getParentLayer().getName() != "root layer"){ |
737 |
group = "/"+layer.getParentLayer().getName();
|
738 |
}else{
|
739 |
group= "/"+view.getName();
|
740 |
} |
741 |
|
742 |
addItemProperty(itemType, "wms_layer_group", group);
|
743 |
if (extent != "") { |
744 |
addItemProperty(itemType, "wms_extent", extent);
|
745 |
} |
746 |
if (projection != null) { |
747 |
addItemProperty(itemType, "wms_srs", projection);
|
748 |
} |
749 |
addItemProperty(itemType, "gml_include_items", "all"); |
750 |
//addItemProperty(itemType, "gml_types", "auto");
|
751 |
|
752 |
lyr.setDump(BooleanEnum.TRUE); |
753 |
lyr.setTemplate(".");
|
754 |
} |
755 |
|
756 |
if (isWFSService) {
|
757 |
addItemProperty(itemType, "wfs_title", MapServerUtils.getNameWithoutExtension(layer.getName()));
|
758 |
addItemProperty(itemType, "wfs_abstract", MapServerUtils.getNameWithoutExtension(layer.getName()));
|
759 |
if (extent != "") { |
760 |
addItemProperty(itemType, "wfs_extent", extent);
|
761 |
} |
762 |
if (projection != null) { |
763 |
addItemProperty(itemType, "wfs_srs", projection);
|
764 |
} |
765 |
addItemProperty(itemType, "wfs_typename", MapServerUtils.getNameWithoutExtension(layer.getName()));
|
766 |
addIfNotExistsItemProperty(itemType, "gml_include_items", "all"); |
767 |
//addItemProperty(itemType, "gml_types", "auto");
|
768 |
} |
769 |
|
770 |
if(isWCSService){
|
771 |
addItemProperty(itemType, "wcs_label", MapServerUtils.getNameWithoutExtension(layer.getName()));
|
772 |
addItemProperty(itemType, "wcs_name", MapServerUtils.getNameWithoutExtension(layer.getName()));
|
773 |
addItemProperty(itemType, "wcs_abstract", MapServerUtils.getNameWithoutExtension(layer.getName()));
|
774 |
addItemProperty(itemType, "wcs_description", MapServerUtils.getNameWithoutExtension(layer.getName()));
|
775 |
if (extent != "") { |
776 |
addItemProperty(itemType, "wcs_extent", extent);
|
777 |
} |
778 |
if (projection != null) { |
779 |
addItemProperty(itemType, "ows_srs", projection);
|
780 |
} |
781 |
} |
782 |
|
783 |
if (layer instanceof FLyrVect) { |
784 |
FLyrVect flyrvect = (FLyrVect) layer; |
785 |
int alpha = (flyrvect.getTransparency() + 1) * 100 / 256; |
786 |
lyr.setOpacity("" + alpha);
|
787 |
try {
|
788 |
lyr.setType(MapServerUtils.getLayerType(flyrvect.getTypeVectorLayer())); |
789 |
} catch (Exception e) { |
790 |
logger.debug("Error setting type tp MapServer layer");
|
791 |
} |
792 |
|
793 |
try {
|
794 |
FeatureStore fstore = flyrvect.getFeatureStore(); |
795 |
if(isWFSService){
|
796 |
FeatureAttributeDescriptor[] pks = fstore
|
797 |
.getDefaultFeatureType().getPrimaryKey(); |
798 |
boolean isFirst = true; |
799 |
String keys = ""; |
800 |
for (int ix = 0; ix < pks.length; ix++) { |
801 |
if (!isFirst) {
|
802 |
keys += ", ";
|
803 |
} |
804 |
keys += pks[ix].getName(); |
805 |
isFirst = false;
|
806 |
} |
807 |
if(!StringUtils.isBlank(keys)){
|
808 |
addItemProperty(itemType, "gml_featureid", keys);
|
809 |
} |
810 |
|
811 |
|
812 |
DynField[] dynfields = fstore.getDefaultFeatureType().getDeclaredDynFields();
|
813 |
String geoattrName = fstore.getDefaultFeatureType().getDefaultGeometryAttributeName();
|
814 |
|
815 |
for(int fi =0; fi<dynfields.length; fi++){ |
816 |
DynField field = dynfields[fi]; |
817 |
String name = field.getName();
|
818 |
if(!geoattrName.equals(name)){
|
819 |
DataType type = field.getDataType(); |
820 |
String typeName = getMapserverTypeName(type);
|
821 |
if(typeName != null){ |
822 |
addItemProperty(itemType, "gml_"+name+"_type", typeName); |
823 |
} |
824 |
} |
825 |
} |
826 |
} |
827 |
|
828 |
if (fstore.getExplorer() != null) { |
829 |
if (fstore.getExplorer() instanceof FilesystemServerExplorer) { |
830 |
FilesystemServerExplorer fileExplorer = (FilesystemServerExplorer) fstore |
831 |
.getExplorer(); |
832 |
lyr.setData(getCorrectPath(fstore.getFullName())); |
833 |
if(isWFSService){
|
834 |
addItemProperty(itemType, "gml_featureid", "ID"); |
835 |
} |
836 |
} else {
|
837 |
lyr.setConnection(MapServerUtils.getHostWithoutParametersFromURL(getCorrectPath(fstore |
838 |
.getFullName()))); |
839 |
} |
840 |
|
841 |
try{
|
842 |
if (fstore.getExplorer() instanceof WFSServerExplorer) { |
843 |
WFSServerExplorer wfsExplorer = (WFSServerExplorer) fstore.getExplorer(); |
844 |
lyr.setMaxFeatures(MapServerUtils.getBigInteger(wfsExplorer.getMaxFeatures())); |
845 |
|
846 |
if (isWFSService) {
|
847 |
addItemProperty(itemType, "wfs_title", wfsExplorer.getTitle());
|
848 |
addItemProperty(itemType, "wfs_abstract", wfsExplorer.getAbstract());
|
849 |
if (extent != "") { |
850 |
addItemProperty(itemType, "wfs_extent", extent);
|
851 |
} |
852 |
if (projection != null) { |
853 |
addItemProperty(itemType, "wfs_srs", projection);
|
854 |
} |
855 |
} |
856 |
|
857 |
if (isWMSService) {
|
858 |
addItemProperty(itemType, "wms_title", wfsExplorer.getTitle());
|
859 |
addItemProperty(itemType, "wms_name", lyr.getName());
|
860 |
addItemProperty(itemType, "wms_abstract", wfsExplorer.getAbstract());
|
861 |
if (extent != "") { |
862 |
addItemProperty(itemType, "wms_extent", extent);
|
863 |
} |
864 |
if (projection != null) { |
865 |
addItemProperty(itemType, "wms_srs", projection);
|
866 |
} |
867 |
} |
868 |
|
869 |
addItemProperty(itemType, "wfs_typename", lyr.getName());
|
870 |
addItemProperty(itemType, "wfs_maxfeatures", wfsExplorer.getMaxFeatures()+""); |
871 |
addItemProperty(itemType, "wfs_version", wfsExplorer.getVersion());
|
872 |
addItemProperty(itemType, "wfs_connectiontimeout", wfsExplorer.getTimeOut()+""); |
873 |
|
874 |
} |
875 |
}catch(NoClassDefFoundError e1){ |
876 |
logger.info("No est? instalada la extensi?n de WFS");
|
877 |
} |
878 |
|
879 |
if (fstore.getExplorer() instanceof DBServerExplorer) { |
880 |
DBServerExplorer fileExplorer = (DBServerExplorer) fstore |
881 |
.getExplorer(); |
882 |
|
883 |
NewDataStoreParameters newdata = fileExplorer |
884 |
.getAddParameters(); |
885 |
DynField[] newfields = newdata.getDynClass()
|
886 |
.getDeclaredDynFields(); |
887 |
String connection = ""; |
888 |
String[] aux = fstore.getFullName().split(":"); |
889 |
if (aux.length > 1) { |
890 |
connection = aux[2];
|
891 |
} |
892 |
String proje = ""; |
893 |
String[] aux2 = getCorrectProjection( |
894 |
fstore.getSRSDefaultGeometry().getAbrev()) |
895 |
.split(":");
|
896 |
if (aux2.length > 0) { |
897 |
proje = aux2[1];
|
898 |
} |
899 |
|
900 |
FeatureAttributeDescriptor[] pks = fstore
|
901 |
.getDefaultFeatureType().getPrimaryKey(); |
902 |
boolean isFirst = true; |
903 |
String keys = ""; |
904 |
for (int ix = 0; ix < pks.length; ix++) { |
905 |
if (!isFirst) {
|
906 |
keys += ", ";
|
907 |
} |
908 |
keys += pks[ix].getName(); |
909 |
isFirst = false;
|
910 |
} |
911 |
|
912 |
// "the_geom from cartografia_base.aepptorg000 using unique gid using srid=4189"
|
913 |
if (connection != "" && proje != "" && keys != "") { |
914 |
String dataQuery = fstore.getDefaultFeatureType()
|
915 |
.getDefaultGeometryAttribute().getName() |
916 |
+ " from "
|
917 |
+ connection.replace("\"", ""); |
918 |
if(!StringUtils.isBlank(keys)){
|
919 |
dataQuery = dataQuery + " using unique " + keys;
|
920 |
} |
921 |
dataQuery = dataQuery + " using srid=" + proje;
|
922 |
if(lyr.getProjection().isEmpty()){
|
923 |
lyr.getProjection().add(getCorrectProjection( |
924 |
fstore.getSRSDefaultGeometry().getAbrev())); |
925 |
} |
926 |
lyr.setData(dataQuery); |
927 |
if(isWFSService){
|
928 |
addItemProperty(itemType, "gml_featureid", keys);
|
929 |
} |
930 |
} |
931 |
} |
932 |
|
933 |
//if(isWFSService){
|
934 |
String geoattrName = fstore.getDefaultFeatureType().getDefaultGeometryAttributeName();
|
935 |
//addItemProperty(itemType, "gml_geometries", geoattrName);
|
936 |
addItemProperty(itemType, "gml_geometries", "geometry"); |
937 |
|
938 |
String valid_type = MapServerUtils.getValidLayerType(lyr.getType());
|
939 |
if(valid_type != null){ |
940 |
//addItemProperty(itemType, "gml_"+geoattrName+"_type", valid_type);
|
941 |
addItemProperty(itemType, "gml_geometry_type", valid_type);
|
942 |
} |
943 |
//}
|
944 |
} |
945 |
} catch (Exception e1) { |
946 |
logger.debug("Error parsing MapServer project");
|
947 |
} |
948 |
|
949 |
if (flyrvect.getFeatureStore().getParameters() instanceof DBStoreParameters) { |
950 |
DBStoreParameters dbStore = (DBStoreParameters) flyrvect |
951 |
.getDataStore().getParameters(); |
952 |
lyr.setConnection("user=" + dbStore.getUser() + " password=" |
953 |
+ dbStore.getPassword() + " host=" + dbStore.getHost()
|
954 |
+ " port=" + dbStore.getPort() + " dbname=" |
955 |
+ dbStore.getDBName()); |
956 |
lyr.getProcessing().add("CLOSE_CONNECTION=DEFER");
|
957 |
lyr.setDump(BooleanEnum.TRUE); |
958 |
lyr.setConnectionType("POSTGIS");
|
959 |
} |
960 |
|
961 |
|
962 |
|
963 |
|
964 |
/**
|
965 |
* LEGEND PARAMETERS
|
966 |
*/
|
967 |
if(!isWFSService || isWMSService || isWCSService){
|
968 |
ILegend legend = flyrvect.getLegend(); |
969 |
try{
|
970 |
if(legend instanceof VectorComplexLegend){ |
971 |
VectorComplexLegend clegend = (VectorComplexLegend) legend; |
972 |
Iterator<ComplexLegendItem> it = clegend.getLegends().iterator();
|
973 |
while(it.hasNext()){
|
974 |
ComplexLegendItem item = (ComplexLegendItem) it.next(); |
975 |
getMapClass( |
976 |
layer, |
977 |
lyr, |
978 |
localSymbolSet, |
979 |
item.getLegend(), |
980 |
item.getMinScale(), |
981 |
item.getMaxScale()); |
982 |
} |
983 |
}else{
|
984 |
getMapClass(layer, lyr, localSymbolSet, legend, -1, -1); |
985 |
} |
986 |
}catch(NoClassDefFoundError e1){ |
987 |
logger.info("No est? instalada la extensi?n de leyendas complejas");
|
988 |
getMapClass(layer, lyr, localSymbolSet, legend, -1, -1); |
989 |
} |
990 |
} |
991 |
|
992 |
} |
993 |
|
994 |
try{
|
995 |
if (layer instanceof FLyrRaster) { |
996 |
FLyrRaster flyrraster = (FLyrRaster) layer; |
997 |
lyr.setType("RASTER");
|
998 |
lyr.setStatus(MapServerUtils.getStatus(false));
|
999 |
lyr.setConnectionType("RASTER");
|
1000 |
|
1001 |
if (flyrraster.getFileLayer() != null) { |
1002 |
lyr.setData(getCorrectPath(flyrraster.getURI().getPath())); |
1003 |
} |
1004 |
|
1005 |
RasterDataStore rasterstore = flyrraster.getDataStore(); |
1006 |
if(rasterstore != null && rasterstore.getProvider() != null){ |
1007 |
RasterProvider provider = (RasterProvider) rasterstore.getProvider(); |
1008 |
|
1009 |
|
1010 |
String outputName = flyrraster.getFileFormat();
|
1011 |
String extension = flyrraster.getFileFormat();
|
1012 |
String mimeType = ""; |
1013 |
if(outputName != "WMS" && extension != "WMS"){ |
1014 |
mimeType = URLConnection.guessContentTypeFromStream(
|
1015 |
new FileInputStream(flyrraster.getURI().getPath())); |
1016 |
if( mimeType == null){ |
1017 |
File f = new File(flyrraster.getURI()); |
1018 |
mimeType = MimetypesFileTypeMap.getDefaultFileTypeMap().getContentType(f); |
1019 |
} |
1020 |
} |
1021 |
String imageMode = MapServerUtils.getBandTypeName(rasterstore.getBands().getBandsDataType());
|
1022 |
|
1023 |
String[] formats = provider.getFormatList(); |
1024 |
Interval interval = provider.getInterval(); |
1025 |
|
1026 |
|
1027 |
if(provider instanceof GdalProvider){ |
1028 |
GdalProvider gdalprovider = (GdalProvider) provider; |
1029 |
int[] tps = gdalprovider.getDataType(); |
1030 |
|
1031 |
|
1032 |
if(gdalprovider.getNative() != null){ |
1033 |
GdalNative gdalnative = gdalprovider.getNative(); |
1034 |
|
1035 |
outputName = gdalnative.getDriverShortName(); |
1036 |
if(!StringUtils.isBlank(outputName)){
|
1037 |
if(MapServerUtils.getDefaultOutputFormatByName(outputName) != null){ |
1038 |
if(isWCSService){
|
1039 |
addItemProperty(itemType, "wcs_nativeformat", outputName);
|
1040 |
} |
1041 |
} |
1042 |
} |
1043 |
|
1044 |
ColorTable colortable = gdalnative.getColorTable(); |
1045 |
int[] types = gdalnative.getDataType(); |
1046 |
String gdalDriver = gdalnative.getGdalShortName();
|
1047 |
// STRING[] METADATS = PROVIDER.GETMETADATA().GETMETADATASTRING();
|
1048 |
// METADATS[0] = TIFFTAG_IMAGEDESCRIPTION:?XS1 XS2 XS3 SWIR
|
1049 |
// METADATS[1] = TIFFTAG_DATETIME:?2009:10:06 20:20:01
|
1050 |
|
1051 |
} |
1052 |
|
1053 |
if(isWCSService){
|
1054 |
addItemProperty(itemType, "wcs_bandcount", provider.getBandCount()+""); |
1055 |
String bandNames = ""; |
1056 |
ColorInterpretation colorint = provider.getColorInterpretation(); |
1057 |
for(int ci = 0; ci < colorint.length(); ci ++){ |
1058 |
String color = colorint.get(ci);
|
1059 |
bandNames = bandNames + " " + color;
|
1060 |
} |
1061 |
if(!StringUtils.isBlank(bandNames)){
|
1062 |
addItemProperty(itemType, "wcs_band_names", bandNames);
|
1063 |
} |
1064 |
|
1065 |
if(!StringUtils.isBlank(imageMode)){
|
1066 |
addItemProperty(itemType, "wcs_imagemode", imageMode);
|
1067 |
} |
1068 |
addItemProperty(itemType, "wcs_size", provider.getWidth() + " " + provider.getHeight()); |
1069 |
|
1070 |
|
1071 |
|
1072 |
for(int bi = 0; bi < rasterstore.getBandCount(); bi++){ |
1073 |
|
1074 |
OutputFormat aux = MapServerUtils.getDefaultOutputFormatByExtension(extension); |
1075 |
MapserverToDynObjectHelper helper = new MapserverToDynObjectHelper();
|
1076 |
DynObject dynOutputFormat = helper.createOutputFormat(aux); |
1077 |
OutputFormat outputFormat = helper.createOutputFormat(dynOutputFormat); |
1078 |
if(outputFormat == null){ |
1079 |
outputFormat = new OutputFormat();
|
1080 |
outputFormat.setExtension(extension); |
1081 |
outputFormat.setTransparent(StateEnum.OFF); |
1082 |
outputFormat.setMimeType(mimeType); |
1083 |
outputFormat.setImageMode(imageMode); |
1084 |
} |
1085 |
|
1086 |
outputFormat.setName( |
1087 |
MapServerUtils.createUniqueOutputFormatName(auxOutputEdited, outputName)); |
1088 |
//outputFormat.setImageMode(imageMode);
|
1089 |
outputFormat.setImageMode( |
1090 |
MapServerUtils.getBandTypeName(rasterstore.getBands().getBand(bi).getDataType())); |
1091 |
|
1092 |
// System.out.println("Info del documento:\n" + flyrraster.getURI() );
|
1093 |
// System.out.println(" Name: " + outputFormat.getName());
|
1094 |
// System.out.println(" Extensi?n: " + outputFormat.getExtension());
|
1095 |
// System.out.println(" Mime-type: " + outputFormat.getMimeType());
|
1096 |
// System.out.println(" Driver: " + outputFormat.getDriver());
|
1097 |
// System.out.println(" ImageMode: " + outputFormat.getImageMode());
|
1098 |
// System.out.println(" FormatOption: ----" );
|
1099 |
// System.out.println(" Transparent: OFF" );
|
1100 |
|
1101 |
this.auxOutputEdited.add(outputFormat);
|
1102 |
} |
1103 |
} |
1104 |
} |
1105 |
} |
1106 |
if (layer instanceof FLyrWMS) { |
1107 |
FLyrWMS flyrWMS = (FLyrWMS) layer; |
1108 |
RasterDataStore store = flyrWMS.getDataStore(); |
1109 |
if(store != null){ |
1110 |
IProjection proj = store.getProjection(); |
1111 |
if(lyr.getProjection().isEmpty() && proj != null){ |
1112 |
lyr.getProjection().add( |
1113 |
getCorrectProjection(proj.getAbrev())); |
1114 |
} |
1115 |
// String name2 = store.getFullName();
|
1116 |
// int index1 = name2.indexOf("[");
|
1117 |
// int index2 = name2.indexOf("]");
|
1118 |
// if(index1 >= 0 && index2 >= 0 && index1 < index2){
|
1119 |
// lyr.setName(name2.substring(index1+1, index2));
|
1120 |
// }else{
|
1121 |
// lyr.setName(name2);
|
1122 |
// }
|
1123 |
} |
1124 |
//lyr.setName(flyrWMS.getName());
|
1125 |
lyr.setStatus("OFF");
|
1126 |
lyr.setConnectionType("WMS");
|
1127 |
WMSServerExplorer explorer = (WMSServerExplorer) rasterstore |
1128 |
.getExplorer(); |
1129 |
lyr.setConnection(MapServerUtils.getHostWithoutParametersFromURL(explorer.getHost())); |
1130 |
if (isWMSService) {
|
1131 |
if(store != null){ |
1132 |
String name2 = store.getFullName();
|
1133 |
int index1 = name2.indexOf("["); |
1134 |
int index2 = name2.indexOf("]"); |
1135 |
if(index1 >= 0 && index2 >= 0 && index1 < index2){ |
1136 |
replaceItemProperty(itemType, "wms_name", name2.substring(index1+1, index2)); |
1137 |
} |
1138 |
} |
1139 |
addItemProperty(itemType, "wms_onlineresource",
|
1140 |
MapServerUtils.getHostWithoutParametersFromURL(explorer.getHost())); |
1141 |
} |
1142 |
addItemProperty(itemType, "wms_server_version", "1.1.1"); |
1143 |
if(lyr.getProjection().isEmpty()){
|
1144 |
addItemProperty(itemType, "wms_srs", "AUTO"); |
1145 |
} |
1146 |
|
1147 |
WMSDataParameters wmsparams = flyrWMS.getParameters(); |
1148 |
if (wmsparams.getStyles() != null) { |
1149 |
Iterator it4 = wmsparams.getStyles().iterator();
|
1150 |
while (it4.hasNext()) {
|
1151 |
RemoteWMSStyle wmsStyle = (RemoteWMSStyle) it4 |
1152 |
.next(); |
1153 |
if(wmsStyle != null && wmsStyle.getParent() != null){ |
1154 |
lyr.setName(wmsStyle.getParent().getName()); |
1155 |
|
1156 |
if (isWMSService) {
|
1157 |
//replaceItemProperty(itemType, "wms_title", wmsStyle.getParent().getTitle());
|
1158 |
addIfNotExistsItemProperty(itemType, "wms_name", wmsStyle.getParent().getName());
|
1159 |
replaceItemProperty(itemType, "wms_abstract", wmsStyle.getParent().getAbstract());
|
1160 |
replaceItemProperty(itemType, "wms_extent", extent);
|
1161 |
|
1162 |
if (wmsparams.getDynValue("srsstr") != null |
1163 |
&& wmsparams.getDynValue("srsstr") instanceof String) { |
1164 |
replaceItemProperty(itemType, "wms_srs", (String) wmsparams |
1165 |
.getDynValue("srsstr"));
|
1166 |
} |
1167 |
} |
1168 |
|
1169 |
if (isWFSService) {
|
1170 |
//addItemProperty(itemType, "wfs_title", wmsStyle.getParent().getTitle());
|
1171 |
replaceItemProperty(itemType, "wfs_typename", wmsStyle.getParent().getName());
|
1172 |
replaceItemProperty(itemType, "wfs_abstract", wmsStyle.getParent().getAbstract());
|
1173 |
replaceItemProperty(itemType, "wfs_extent", extent);
|
1174 |
|
1175 |
if (wmsparams.getDynValue("srsstr") != null |
1176 |
&& wmsparams.getDynValue("srsstr") instanceof String) { |
1177 |
addItemProperty(itemType, "wfs_srs", (String) wmsparams |
1178 |
.getDynValue("srsstr"));
|
1179 |
} |
1180 |
} |
1181 |
} |
1182 |
|
1183 |
if(explorer.getVersion() == "1.1.1" || |
1184 |
explorer.getVersion() == "1.0.0"){
|
1185 |
replaceItemProperty(itemType, "wms_server_version", explorer.getVersion());
|
1186 |
} |
1187 |
addItemProperty(itemType, "wms_format", wmsparams.getFormat());
|
1188 |
} |
1189 |
} |
1190 |
} |
1191 |
} |
1192 |
} catch (ValidateDataParametersException e) {
|
1193 |
logger.info("Error validating Mapserver data");
|
1194 |
} catch (DataException e) {
|
1195 |
logger.info("Error getting Mapserver data");
|
1196 |
} catch(NoClassDefFoundError e1){ |
1197 |
logger.info("No est? instalada la extensi?n de raster");
|
1198 |
} catch (Exception e) { |
1199 |
logger.info("Error getting Mapserver data");
|
1200 |
} |
1201 |
|
1202 |
if (!itemType.getItem().isEmpty()) {
|
1203 |
lyr.setMetadata(getCorrectMetadata(itemType)); |
1204 |
} |
1205 |
|
1206 |
layer.setProperty(MAPSERVER_SYMBOL_PROPERTIES, localSymbolSet); |
1207 |
mergeSymbolSet(getSymbolSet(), localSymbolSet, PROJECT_MODE); |
1208 |
|
1209 |
if(hasLabels){
|
1210 |
lyr.getProcessing().add("LABEL_NO_CLIP=True");
|
1211 |
} |
1212 |
|
1213 |
return lyr;
|
1214 |
} |
1215 |
|
1216 |
|
1217 |
|
1218 |
private void getMapClass( |
1219 |
FLayer layer, |
1220 |
Layer lyr, |
1221 |
SymbolSet localSymbolSet, |
1222 |
ILegend legend, |
1223 |
double minScale,
|
1224 |
double maxScale){
|
1225 |
FLyrVect flyrvect = (FLyrVect) layer; |
1226 |
|
1227 |
ISymbol[] syms = null; |
1228 |
if (legend instanceof IClassifiedLegend) { |
1229 |
IClassifiedLegend classLeg = (IClassifiedLegend) legend; |
1230 |
syms = classLeg.getSymbols(); |
1231 |
} else {
|
1232 |
syms = new ISymbol[1]; |
1233 |
syms[0] = legend.getDefaultSymbol();
|
1234 |
} |
1235 |
|
1236 |
|
1237 |
for (int li = 0; li < syms.length; li++) { |
1238 |
ISymbol sy = syms[li]; |
1239 |
org.gvsig.publish.mapserver641.Class mapClass = new org.gvsig.publish.mapserver641.Class();
|
1240 |
if(!StringUtils.isBlank(sy.getDescription())){
|
1241 |
sy.setDescription(sy.getDescription().replace("\"", "")); |
1242 |
} |
1243 |
if(maxScale != -1){ |
1244 |
mapClass.setMaxScaleDenom(maxScale); |
1245 |
} |
1246 |
if(minScale != -1){ |
1247 |
mapClass.setMinScaleDenom(minScale); |
1248 |
} |
1249 |
|
1250 |
try{
|
1251 |
if (legend instanceof IClassifiedVectorLegend && |
1252 |
!(legend instanceof VectorFilterExpressionLegend)) {
|
1253 |
IClassifiedVectorLegend classvectLeg = (IClassifiedVectorLegend) legend; |
1254 |
if(classvectLeg.getClassifyingFieldNames().length > 0){ |
1255 |
lyr.setClassItem(classvectLeg.getClassifyingFieldNames()[0]);
|
1256 |
} |
1257 |
ExpressionType expression = new ExpressionType();
|
1258 |
expression.setType("String");
|
1259 |
expression.setValue("\"" + sy.getDescription() + "\""); |
1260 |
List<ISymbol> symbolsleg = Arrays.asList(classvectLeg.getSymbols()); |
1261 |
int indexleg = symbolsleg.indexOf(sy);
|
1262 |
if(indexleg >= 0){ |
1263 |
Object[] values = classvectLeg.getValues(); |
1264 |
Object value = classvectLeg.getValues()[indexleg];
|
1265 |
if(value instanceof Double){ |
1266 |
Double doublevalue = (Double) value; |
1267 |
long longvalue = doublevalue.longValue();
|
1268 |
if(doublevalue == longvalue){
|
1269 |
String x = String.valueOf(doublevalue.longValue()); |
1270 |
expression.setValue("\"" + x + "\""); |
1271 |
}else{
|
1272 |
expression.setValue("\"" + doublevalue.toString() + "\""); |
1273 |
} |
1274 |
}else{
|
1275 |
expression.setValue("\"" + value + "\""); |
1276 |
} |
1277 |
} |
1278 |
mapClass.setExpression(expression); |
1279 |
} |
1280 |
|
1281 |
if (legend instanceof VectorFilterExpressionLegend) { |
1282 |
VectorFilterExpressionLegend expressionLegend = (VectorFilterExpressionLegend) legend; |
1283 |
Object[] values = expressionLegend.getValues(); |
1284 |
if(values.length > li){
|
1285 |
ExpressionType expression = new ExpressionType();
|
1286 |
expression.setType("String");
|
1287 |
expression.setValue("\"" + values[li].toString().replace("\"", "") + "\""); |
1288 |
mapClass.setExpression(expression); |
1289 |
} |
1290 |
} |
1291 |
} |
1292 |
catch(NoClassDefFoundError e1){ |
1293 |
logger.info("No est? instalada la extensi?n de base legends (org.gvsig.legend.vectorfilterexpression.app.mainplugin)");
|
1294 |
if (legend instanceof IClassifiedVectorLegend) { |
1295 |
IClassifiedVectorLegend classvectLeg = (IClassifiedVectorLegend) legend; |
1296 |
if(classvectLeg.getClassifyingFieldNames().length > 0){ |
1297 |
lyr.setClassItem(classvectLeg.getClassifyingFieldNames()[0]);
|
1298 |
} |
1299 |
} |
1300 |
} |
1301 |
|
1302 |
|
1303 |
//Label label = new Label();
|
1304 |
|
1305 |
|
1306 |
if(sy instanceof IMultiLayerSymbol){ |
1307 |
IMultiLayerSymbol multisy = (IMultiLayerSymbol) sy; |
1308 |
for(int fv=0; fv < multisy.getLayerCount(); fv++){ |
1309 |
mapClass = createMapClassObject(multisy.getLayer(fv), mapClass, localSymbolSet, layer, lyr, li); |
1310 |
} |
1311 |
}else{
|
1312 |
mapClass = createMapClassObject(sy, mapClass, localSymbolSet, layer, lyr, li); |
1313 |
} |
1314 |
|
1315 |
lyr.getClazz().add(mapClass); |
1316 |
|
1317 |
ILabelingStrategy labelingStrategy = flyrvect |
1318 |
.getLabelingStrategy(); |
1319 |
if (labelingStrategy != null){ |
1320 |
if (labelingStrategy.getUsedFields().length > 0) { |
1321 |
if(flyrvect.isLabeled()){
|
1322 |
|
1323 |
lyr.setLabelItem(labelingStrategy.getUsedFields()[0]);
|
1324 |
ILabelingMethod labelingMethod = labelingStrategy |
1325 |
.getLabelingMethod(); |
1326 |
|
1327 |
// IZoomConstraints zoomConstraints = labelingStrategy.getZoomConstraints();
|
1328 |
// if(zoomConstraints != null){
|
1329 |
// mapClass.setMaxScaleDenom((double) zoomConstraints.getMaxScale());
|
1330 |
// mapClass.setMinScaleDenom((double) zoomConstraints.getMinScale());
|
1331 |
// }
|
1332 |
|
1333 |
|
1334 |
|
1335 |
if(labelingStrategy instanceof IAttrInTableLabelingStrategy){ |
1336 |
Label label = new Label(); |
1337 |
label.setPosition("uc");
|
1338 |
if (sy instanceof ISimpleTextSymbol) { |
1339 |
ISimpleTextSymbol stextSym = (ISimpleTextSymbol) sy; |
1340 |
label.setAngle(stextSym.getRotation() + "");
|
1341 |
} |
1342 |
IPlacementConstraints placementConstraints = labelingStrategy.getPlacementConstraints(); |
1343 |
if(placementConstraints != null){ |
1344 |
String npos = MapServerUtils.getPositionFromPlacementConstraints(placementConstraints);
|
1345 |
if(npos != null){ |
1346 |
label.setPosition(npos); |
1347 |
} |
1348 |
String nang = MapServerUtils.getAngleFromPlacementConstraints(placementConstraints);
|
1349 |
if(nang != null){ |
1350 |
label.setAngle(nang); |
1351 |
} |
1352 |
} |
1353 |
IAttrInTableLabelingStrategy attr = (IAttrInTableLabelingStrategy) labelingStrategy; |
1354 |
if(attr.getColorFont() != null){ |
1355 |
label.setColor(MapServerUtils.getRgbColorType(attr.getColorFont())); |
1356 |
}else{
|
1357 |
if(attr.getFixedColor() != null){ |
1358 |
label.setColor(MapServerUtils.getRgbColorType(attr.getFixedColor())); |
1359 |
} |
1360 |
} |
1361 |
|
1362 |
label.setFont(getFontName(attr.getFont().getName())); |
1363 |
usesFont = true;
|
1364 |
label.setSize(attr.getFont().getSize() + "");
|
1365 |
if(attr.getFixedSize() >0 && attr.getFixedSize() > attr.getFont().getSize()){ |
1366 |
label.setSize(attr.getFixedSize()+"");
|
1367 |
} |
1368 |
label.setText("["+labelingStrategy.getUsedFields()[0]+"]"); |
1369 |
label.setType("TRUETYPE");
|
1370 |
label.setWrap(" ");
|
1371 |
label.setMaxLength(MapServerUtils.getBigInteger(15));
|
1372 |
label.setAlign(AlignEnum.LEFT); |
1373 |
|
1374 |
SizeType labelOffset = new SizeType();
|
1375 |
labelOffset.setX(MapServerUtils.getBigInteger(0));
|
1376 |
labelOffset.setY(MapServerUtils.getBigInteger(9));
|
1377 |
label.setOffset(labelOffset); |
1378 |
label.setPartials(BooleanEnum.FALSE); |
1379 |
label.setForce(BooleanEnum.FALSE); |
1380 |
|
1381 |
ILabelClass[] labelClasses = attr.getLabelingMethod().getLabelClasses();
|
1382 |
for(int i=0; i<labelClasses.length; i++){ |
1383 |
ILabelClass labelClass = (ILabelClass) labelClasses[i]; |
1384 |
if(labelClass instanceof DefaultComplexLabelClass){ |
1385 |
DefaultComplexLabelClass clabelClass = (DefaultComplexLabelClass) labelClass; |
1386 |
if(!(clabelClass.getMaxScale() < 0 || clabelClass.getMaxScale() == 1000000001)){ |
1387 |
label.setMaxScaleDenom(Double.toString(clabelClass.getMaxScale()));
|
1388 |
} |
1389 |
if(!(clabelClass.getMinScale() < 0)){ |
1390 |
label.setMinScaleDenom(Double.toString(clabelClass.getMinScale()));
|
1391 |
} |
1392 |
} |
1393 |
|
1394 |
} |
1395 |
|
1396 |
if(label.getText() != null && !label.getText().equals("[]") && !label.getText().equals("")){ |
1397 |
mapClass.getLabel().add(label); |
1398 |
}else{
|
1399 |
if(label.getText() == null){ |
1400 |
mapClass.getLabel().add(label); |
1401 |
} |
1402 |
} |
1403 |
hasLabels = true;
|
1404 |
}else{
|
1405 |
|
1406 |
for (int fg = 0; fg < labelingMethod.getLabelClasses().length; fg++) { |
1407 |
Label label = new Label(); |
1408 |
label.setPosition("uc");
|
1409 |
if (sy instanceof ISimpleTextSymbol) { |
1410 |
ISimpleTextSymbol stextSym = (ISimpleTextSymbol) sy; |
1411 |
label.setAngle(stextSym.getRotation() + "");
|
1412 |
} |
1413 |
IPlacementConstraints placementConstraints = labelingStrategy.getPlacementConstraints(); |
1414 |
if(placementConstraints != null){ |
1415 |
String npos = MapServerUtils.getPositionFromPlacementConstraints(placementConstraints);
|
1416 |
if(npos != null){ |
1417 |
label.setPosition(npos); |
1418 |
} |
1419 |
String nang = MapServerUtils.getAngleFromPlacementConstraints(placementConstraints);
|
1420 |
if(nang != null){ |
1421 |
label.setAngle(nang); |
1422 |
} |
1423 |
} |
1424 |
ILabelClass labelClass = labelingMethod |
1425 |
.getLabelClasses()[fg]; |
1426 |
ITextSymbol textLabel = labelClass.getTextSymbol(); |
1427 |
label.setColor(MapServerUtils.getRgbColorType(textLabel.getColor())); |
1428 |
// label.setMaxSize(MapServerUtils.getBigInteger(textLabel.getBounds()
|
1429 |
// .getWidth()));
|
1430 |
label.setFont(getFontName(textLabel.getFont().getName())); |
1431 |
usesFont = true;
|
1432 |
label.setSize(textLabel.getFont().getSize() + "");
|
1433 |
if(textLabel.isDrawWithHalo()){
|
1434 |
label.setOutlineColor(MapServerUtils.getRgbColorType(textLabel |
1435 |
.getHaloColor())); |
1436 |
label.setOutlineWidth(MapServerUtils.getBigInteger(textLabel |
1437 |
.getHaloWidth())); |
1438 |
} |
1439 |
label.setWrap(" ");
|
1440 |
label.setMaxLength(MapServerUtils.getBigInteger(15));
|
1441 |
label.setAlign(AlignEnum.LEFT); |
1442 |
|
1443 |
label.setType("TRUETYPE");
|
1444 |
SizeType labelOffset = new SizeType();
|
1445 |
labelOffset.setX(MapServerUtils.getBigInteger(0));
|
1446 |
labelOffset.setY(MapServerUtils.getBigInteger(9));
|
1447 |
label.setOffset(labelOffset); |
1448 |
label.setPartials(BooleanEnum.FALSE); |
1449 |
label.setForce(BooleanEnum.FALSE); |
1450 |
if(labelClass.getLabelExpressions().length>0){ |
1451 |
label.setText("["+labelClass.getLabelExpressions()[0]+"]"); |
1452 |
} |
1453 |
|
1454 |
if(labelClass instanceof DefaultComplexLabelClass){ |
1455 |
DefaultComplexLabelClass clabelClass = (DefaultComplexLabelClass) labelClass; |
1456 |
if(!(clabelClass.getMaxScale() < 0 || clabelClass.getMaxScale() == 1000000001)){ |
1457 |
label.setMaxScaleDenom(Double.toString(clabelClass.getMaxScale()));
|
1458 |
} |
1459 |
if(!(clabelClass.getMinScale() < 0)){ |
1460 |
label.setMinScaleDenom(Double.toString(clabelClass.getMinScale()));
|
1461 |
} |
1462 |
} |
1463 |
|
1464 |
|
1465 |
if(label.getText() != null && !label.getText().equals("[]") && !label.getText().equals("")){ |
1466 |
mapClass.getLabel().add(label); |
1467 |
}else{
|
1468 |
if(label.getText() == null){ |
1469 |
mapClass.getLabel().add(label); |
1470 |
} |
1471 |
} |
1472 |
lyr.setLabelCache(StateEnum.ON); |
1473 |
hasLabels = true;
|
1474 |
} |
1475 |
} |
1476 |
} |
1477 |
} |
1478 |
} |
1479 |
} |
1480 |
|
1481 |
} |
1482 |
|
1483 |
|
1484 |
private org.gvsig.publish.mapserver641.Class createMapClassObject(ISymbol sy,
|
1485 |
org.gvsig.publish.mapserver641.Class mapClass, SymbolSet localSymbolSet, FLayer layer, Layer lyr, int li){
|
1486 |
MapserverSymbol mapserverSymbol = null;
|
1487 |
List<Style> classStyles = null; |
1488 |
Symbol symbolStyle = null;
|
1489 |
|
1490 |
mapserverSymbol = toMapserver(sy); |
1491 |
classStyles = mapserverSymbol.getStyle(); |
1492 |
symbolStyle = mapserverSymbol.getSymbol(); |
1493 |
|
1494 |
String symbolName = symbolStyle.getName();
|
1495 |
if(StringUtils.isBlank(symbolStyle.getName())){
|
1496 |
if (StringUtils.isBlank(sy.getDescription())) {
|
1497 |
symbolName = layer.getName(); |
1498 |
} else {
|
1499 |
symbolName = layer.getName() + "-" + sy.getDescription();
|
1500 |
} |
1501 |
symbolName = MapServerUtils.createUniqueSymbolName(localSymbolSet, symbolName); |
1502 |
} |
1503 |
|
1504 |
mapserverSymbol.getSymbol().setName(symbolName); |
1505 |
SymbolType stype = new SymbolType();
|
1506 |
stype.setType("String");
|
1507 |
stype.setValue("\"" + symbolName + "\""); |
1508 |
|
1509 |
/**
|
1510 |
* CLASS PARAMETERS
|
1511 |
*/
|
1512 |
for(int is =0; is<classStyles.size(); is++){ |
1513 |
if (sy instanceof IPictureMarkerSymbol) { |
1514 |
usesImages = true;
|
1515 |
} |
1516 |
|
1517 |
if (!StringUtils.isBlank(sy.getDescription())) {
|
1518 |
mapClass.setName(sy.getDescription()); |
1519 |
} else {
|
1520 |
String className = MapServerUtils.getNameWithoutExtension(layer.getName());
|
1521 |
if (li > 0) { |
1522 |
className += "-" + li;
|
1523 |
} |
1524 |
mapClass.setName(className); |
1525 |
} |
1526 |
|
1527 |
if (sy instanceof IMarkerSymbol) { |
1528 |
IMarkerSymbol markSym = (IMarkerSymbol) sy; |
1529 |
mapClass.setSize(MapServerUtils.getBigInteger(markSym.getSize())); |
1530 |
} |
1531 |
|
1532 |
mapClass.setStatus(MapServerUtils.getStateEnumSymbol(sy.isShapeVisible())); |
1533 |
|
1534 |
|
1535 |
if (sy instanceof ITextSymbol) { |
1536 |
ITextSymbol textSym = (ITextSymbol) sy; |
1537 |
// mapClass.setText(textSym.getText());
|
1538 |
|
1539 |
// LabelLeader lleader = new LabelLeader();
|
1540 |
// lleader.setGridstep(getBigInteger(5));
|
1541 |
// lleader.setMaxdistance(getBigInteger(10));
|
1542 |
// Style lleaderStyle = new Style();
|
1543 |
// lleaderStyle.setColor(getRgbColorType(Color.RED));
|
1544 |
// lleaderStyle.setWidth("1");
|
1545 |
// lleader.getStyle().add(lleaderStyle);
|
1546 |
// mapClass.setLabelLeader(lleader);
|
1547 |
Label label = new Label(); |
1548 |
label.setColor(MapServerUtils.getRgbColorType(textSym.getColor())); |
1549 |
// label.setMaxSize(MapServerUtils.getBigInteger(textSym.getBounds()
|
1550 |
// .getWidth()));
|
1551 |
label.setFont(getFontName(textSym.getFont().getName())); |
1552 |
usesFont = true;
|
1553 |
label.setSize(textSym.getFont().getSize() + "");
|
1554 |
label.setOutlineColor(MapServerUtils.getRgbColorType(textSym |
1555 |
.getHaloColor())); |
1556 |
label.setOutlineWidth(MapServerUtils.getBigInteger(textSym.getHaloWidth())); |
1557 |
// label.setText(textSym.getText());
|
1558 |
label.setType("TRUETYPE");
|
1559 |
label.setWrap(" ");
|
1560 |
label.setMaxLength(MapServerUtils.getBigInteger(15));
|
1561 |
label.setAlign(AlignEnum.LEFT); |
1562 |
label.setPosition("uc");
|
1563 |
SizeType labelOffset = new SizeType();
|
1564 |
labelOffset.setX(MapServerUtils.getBigInteger(0));
|
1565 |
labelOffset.setY(MapServerUtils.getBigInteger(9));
|
1566 |
label.setOffset(labelOffset); |
1567 |
label.setPartials(BooleanEnum.FALSE); |
1568 |
|
1569 |
if (sy instanceof ISimpleTextSymbol) { |
1570 |
ISimpleTextSymbol stextSym = (ISimpleTextSymbol) sy; |
1571 |
label.setAngle(stextSym.getRotation() + "");
|
1572 |
} |
1573 |
if(label.getText() != null && !label.getText().equals("[]") && !label.getText().equals("")){ |
1574 |
mapClass.getLabel().add(label); |
1575 |
}else{
|
1576 |
if(label.getText() == null){ |
1577 |
mapClass.getLabel().add(label); |
1578 |
} |
1579 |
} |
1580 |
hasLabels = true;
|
1581 |
} |
1582 |
|
1583 |
if (classStyles.get(is).getSymbol() == null |
1584 |
&& lyr.getType() == "POINT"
|
1585 |
&& StringUtils.isBlank(symbolStyle.getImage()) |
1586 |
&& StringUtils.isBlank(symbolStyle.getType())) { |
1587 |
// Defino el Punto por defecto
|
1588 |
if (StringUtils.isBlank(symbolName)) {
|
1589 |
symbolName = MapServerUtils.getNameWithoutExtension(lyr.getName()) + "-sym";
|
1590 |
} |
1591 |
|
1592 |
symbolStyle.setName(symbolName); |
1593 |
symbolStyle.setFilled(BooleanEnum.TRUE); |
1594 |
symbolStyle.setType("ellipse");
|
1595 |
Points points = new Points();
|
1596 |
PointType pointType = new PointType();
|
1597 |
pointType.setX((float) 1); |
1598 |
pointType.setY((float) 1); |
1599 |
points.getPoint().add(pointType); |
1600 |
symbolStyle.setPoints(points); |
1601 |
|
1602 |
SymbolType syty = new SymbolType();
|
1603 |
stype.setType("String");
|
1604 |
stype.setValue("\"" + symbolName + "\""); |
1605 |
if(StringUtils.isBlank(classStyles.get(is).getSize())){
|
1606 |
classStyles.get(is).setSize("4");
|
1607 |
} |
1608 |
if(!StringUtils.isBlank(syty.getValue())){
|
1609 |
classStyles.get(is).setSymbol(syty); |
1610 |
} |
1611 |
} |
1612 |
|
1613 |
|
1614 |
if (!StringUtils.isBlank(symbolStyle.getType())) {
|
1615 |
String name = null; |
1616 |
// Busco si existe en el SymbolSet general
|
1617 |
if(!this.isPropertiesPanel ){ |
1618 |
for(int j=0; j<getSymbolSet().getSymbol().size(); j++){ |
1619 |
name = MapserverToDynObjectHelper.equals(getSymbolSet().getSymbol().get(j), symbolStyle); |
1620 |
} |
1621 |
} |
1622 |
if( name == null){ |
1623 |
//Busco coincidencias en el symbolset local
|
1624 |
for(int k=0; k<localSymbolSet.getSymbol().size(); k++){ |
1625 |
name = MapserverToDynObjectHelper.equals(localSymbolSet.getSymbol().get(k), symbolStyle); |
1626 |
} |
1627 |
//Si no hay coincidencias, a?ado al local
|
1628 |
if(name == null){ |
1629 |
name = symbolStyle.getName(); |
1630 |
localSymbolSet.getSymbol().add(symbolStyle); |
1631 |
} |
1632 |
} |
1633 |
|
1634 |
|
1635 |
if(!StringUtils.isBlank(name)){
|
1636 |
stype.setValue("\"" + name + "\""); |
1637 |
classStyles.get(is).setSymbol(stype); |
1638 |
usesSymbols = true;
|
1639 |
} |
1640 |
|
1641 |
} |
1642 |
|
1643 |
// if(!StringUtils.isBlank(symbolStyle.getType()) &&
|
1644 |
// (symbolStyle.getType().equalsIgnoreCase("svg") ||
|
1645 |
// symbolStyle.getType().equalsIgnoreCase("pixmap"))){
|
1646 |
// MapserverToDynObjectHelper helper = new MapserverToDynObjectHelper();
|
1647 |
// DynObject newDynStyle = helper.createStyle(classStyles.get(is));
|
1648 |
// Style newStyle = new Style();
|
1649 |
// helper.copyTo(newDynStyle, newStyle);
|
1650 |
//
|
1651 |
//
|
1652 |
// newStyle.setSymbol(null);
|
1653 |
// classStyles.get(is).setColor(null);
|
1654 |
// classStyles.get(is).setOutlineColor(null);
|
1655 |
//
|
1656 |
// mapClass.getStyle().remove(symbolStyle);
|
1657 |
// mapClass.getStyle().add(newStyle);
|
1658 |
// }
|
1659 |
|
1660 |
mapClass.getStyle().add(classStyles.get(is)); |
1661 |
|
1662 |
} |
1663 |
|
1664 |
return mapClass;
|
1665 |
} |
1666 |
|
1667 |
|
1668 |
|
1669 |
private String getMapserverTypeName(DataType type) { |
1670 |
switch(type.getType()){
|
1671 |
case DataTypes.BOOLEAN:
|
1672 |
return "xsd:boolean"; |
1673 |
case DataTypes.DATE:
|
1674 |
return "xsd:date"; |
1675 |
case DataTypes.INT:
|
1676 |
case DataTypes.LONG:
|
1677 |
return "xsd:integer"; |
1678 |
case DataTypes.DOUBLE:
|
1679 |
case DataTypes.FLOAT:
|
1680 |
return "xsd:double"; |
1681 |
case DataTypes.STRING:
|
1682 |
return "xsd:string"; |
1683 |
} |
1684 |
return "xsd:string"; |
1685 |
} |
1686 |
|
1687 |
public PublishProperties getPublishProperties() {
|
1688 |
return properties;
|
1689 |
} |
1690 |
|
1691 |
|
1692 |
|
1693 |
public boolean createWMSProject(){ |
1694 |
boolean exit = true; |
1695 |
if(!StringUtils.isBlank(getPublishProperties().getMapFile())){
|
1696 |
String servicePath = ""; |
1697 |
if(getPublishProperties().isWMSService()){
|
1698 |
servicePath = File.separator + WMS_PATH;
|
1699 |
exit = exit && createFile(servicePath); |
1700 |
} |
1701 |
} |
1702 |
return exit;
|
1703 |
} |
1704 |
|
1705 |
public boolean createWFSProject(){ |
1706 |
boolean exit = true; |
1707 |
if(!StringUtils.isBlank(getPublishProperties().getMapFile())){
|
1708 |
String servicePath = ""; |
1709 |
if(getPublishProperties().isWFSService()){
|
1710 |
servicePath = File.separator + WFS_PATH;
|
1711 |
exit = exit && createFile(servicePath); |
1712 |
} |
1713 |
} |
1714 |
return exit;
|
1715 |
} |
1716 |
|
1717 |
public boolean createWCSProject(){ |
1718 |
boolean exit = true; |
1719 |
if(!StringUtils.isBlank(getPublishProperties().getMapFile())){
|
1720 |
String servicePath = ""; |
1721 |
if(getPublishProperties().isWCSService()){
|
1722 |
servicePath = File.separator + WCS_PATH;
|
1723 |
exit = exit && createFile(servicePath); |
1724 |
} |
1725 |
} |
1726 |
return exit;
|
1727 |
} |
1728 |
|
1729 |
private boolean createFile(String path){ |
1730 |
file = new File(MapServerUtils.getCorrectFilePathFromUrl(getPublishProperties().getMapFile()) |
1731 |
+ path + File.separator + MAPFILE_FILE);
|
1732 |
File tempFile = null; |
1733 |
try {
|
1734 |
tempFile = File.createTempFile("gvSIG-publish-XML-", null); |
1735 |
} catch (IOException e2) { |
1736 |
logger.error("[MapserverPublishService - publish()] Error creating the file: "
|
1737 |
+ tempFile.getAbsolutePath() + " \n" + e2);
|
1738 |
return false; |
1739 |
} |
1740 |
if (!file.exists()) {
|
1741 |
try {
|
1742 |
file.getParentFile().mkdirs(); |
1743 |
if (hasMapfile()) {
|
1744 |
file.createNewFile(); |
1745 |
} |
1746 |
} catch (IOException e) { |
1747 |
logger.error("[MapserverPublishService - publish()] Error creating the file: "
|
1748 |
+ file.getAbsolutePath() + " \n" + e);
|
1749 |
return false; |
1750 |
} |
1751 |
}else{
|
1752 |
if (!file.canWrite()) {
|
1753 |
logger.error("[MapserverPublishService - publish()] Error writing in file: "
|
1754 |
+ file.getAbsolutePath()); |
1755 |
return false; |
1756 |
} |
1757 |
} |
1758 |
|
1759 |
return true; |
1760 |
} |
1761 |
|
1762 |
|
1763 |
public Map getPublishedMap(ViewDocument viewDoc) { |
1764 |
if(viewDoc.getProperty(MAPSERVER_PANEL_PROPERTIES) != null && |
1765 |
viewDoc.getProperty(MAPSERVER_PANEL_PROPERTIES) instanceof Boolean){ |
1766 |
boolean active = (Boolean) viewDoc.getProperty(MAPSERVER_PANEL_PROPERTIES); |
1767 |
if(active){
|
1768 |
Object prop = viewDoc.getProperty(MAPSERVER_MAP_PROPERTIES);
|
1769 |
if (prop != null && prop instanceof Map){ |
1770 |
Map aux = (Map) viewDoc.getProperty(MAPSERVER_MAP_PROPERTIES); |
1771 |
MapserverToDynObjectHelper helper = new MapserverToDynObjectHelper();
|
1772 |
DynObject dynMap = helper.createMap(aux); |
1773 |
isEditedMapFile = true;
|
1774 |
return helper.createMap(dynMap);
|
1775 |
} |
1776 |
} |
1777 |
} |
1778 |
return null; |
1779 |
} |
1780 |
|
1781 |
private boolean isSharedWithOtherViews(FLayer layer, Symbol sm) { |
1782 |
ViewDocument view = MapServerUtils.getViewDocumentFromLayer(layer); |
1783 |
Object obj = view.getProperty(MAPSERVER_SYMBOL_PROPERTIES);
|
1784 |
if (obj != null && obj instanceof SymbolSet) { |
1785 |
SymbolSet sset = (SymbolSet) obj; |
1786 |
return isSymbolInSet(sset, sm);
|
1787 |
}else{
|
1788 |
return isSymbolInSet(getSymbolSet(), sm);
|
1789 |
} |
1790 |
} |
1791 |
|
1792 |
private boolean isSymbolInSet(SymbolSet sset, Symbol sm){ |
1793 |
for (int i = 0; i < sset.getSymbol().size(); i++) { |
1794 |
if (sset.getSymbol().get(i).getName() != null && |
1795 |
sset.getSymbol().get(i).getName().equals(sm.getName()) && |
1796 |
sset.getSymbol().get(i).getType().equalsIgnoreCase(sm.getType())) { |
1797 |
return true; |
1798 |
} |
1799 |
} |
1800 |
return false; |
1801 |
} |
1802 |
|
1803 |
private SymbolSet getSymbolSet() {
|
1804 |
if (this.symbolset == null) { |
1805 |
this.symbolset = new SymbolSet(); |
1806 |
} |
1807 |
return this.symbolset; |
1808 |
} |
1809 |
|
1810 |
private SymbolSet getSymbolSet(File file) { |
1811 |
SymbolSet aux = new SymbolSet();
|
1812 |
if (this.symbolset != null) { |
1813 |
for (int i = 0; i < symbolset.getSymbol().size(); i++) { |
1814 |
|
1815 |
Symbol sym = symbolset.getSymbol().get(i); |
1816 |
MapserverToDynObjectHelper helper = new MapserverToDynObjectHelper();
|
1817 |
|
1818 |
|
1819 |
Symbol sym2 = new Symbol();
|
1820 |
helper.copyTo(helper.createSymbol(sym), sym2); |
1821 |
if (sym2.getImage() != null && sym2.getImage() != "") { |
1822 |
if(file != null){ |
1823 |
sym2.setImage(MapServerUtils.relativePath(sym.getImage(), file.getParent()).replace(File.separator, "/")); |
1824 |
} |
1825 |
} |
1826 |
aux.getSymbol().add(sym2); |
1827 |
} |
1828 |
} |
1829 |
return aux;
|
1830 |
} |
1831 |
|
1832 |
private SymbolSet getPublishedSymbol(FLayer layer) {
|
1833 |
if (layer.getProperty(MAPSERVER_SYMBOL_PROPERTIES) != null && |
1834 |
layer.getProperty(MAPSERVER_SYMBOL_PROPERTIES) instanceof SymbolSet){
|
1835 |
SymbolSet auxSymbols = (SymbolSet) layer.getProperty(MAPSERVER_SYMBOL_PROPERTIES); |
1836 |
for(int i=0; i<auxSymbols.getSymbol().size(); i++){ |
1837 |
Symbol auxSym = auxSymbols.getSymbol().get(i); |
1838 |
if(auxSym.getImage() != null && auxSym.getImage() != ""){ |
1839 |
usesImages = true;
|
1840 |
break;
|
1841 |
} |
1842 |
} |
1843 |
return auxSymbols;
|
1844 |
} |
1845 |
return getSymbolSet();
|
1846 |
} |
1847 |
|
1848 |
private File getSymbolSetFile() { |
1849 |
if (symbolSetFile == null) { |
1850 |
symbolSetFile = new File(file.getParentFile() |
1851 |
.getAbsolutePath() + File.separator + SYMBOLSET_FILE);
|
1852 |
} |
1853 |
return symbolSetFile;
|
1854 |
} |
1855 |
|
1856 |
|
1857 |
/**
|
1858 |
* MAPSERVER UTILS MANIPULATION
|
1859 |
*/
|
1860 |
|
1861 |
private void addItemProperty(ItemType itemType, String name, String value) { |
1862 |
if(!StringUtils.isBlank(name) && !StringUtils.isBlank(value)){
|
1863 |
Item item = new Item();
|
1864 |
item.setName(name); |
1865 |
item.setValue(value.trim()); |
1866 |
itemType.getItem().add(item); |
1867 |
} |
1868 |
} |
1869 |
|
1870 |
private void replaceItemProperty(ItemType itemType, String name, String value) { |
1871 |
if(!StringUtils.isBlank(name) && !StringUtils.isBlank(value)){
|
1872 |
boolean isReplaced = false; |
1873 |
for(int i=0; i<itemType.getItem().size(); i++){ |
1874 |
Item item = itemType.getItem().get(i); |
1875 |
if(item.getName() == name){
|
1876 |
item.setValue(value); |
1877 |
isReplaced = true;
|
1878 |
} |
1879 |
} |
1880 |
if(!isReplaced){
|
1881 |
addItemProperty(itemType, name, value); |
1882 |
} |
1883 |
} |
1884 |
} |
1885 |
|
1886 |
private void addIfNotExistsItemProperty(ItemType itemType, String name, String value) { |
1887 |
if(!StringUtils.isBlank(name) && !StringUtils.isBlank(value)){
|
1888 |
boolean exists = false; |
1889 |
for(int i=0; i<itemType.getItem().size(); i++){ |
1890 |
Item item = itemType.getItem().get(i); |
1891 |
if(item.getName() == name){
|
1892 |
exists = true;
|
1893 |
} |
1894 |
} |
1895 |
if(!exists){
|
1896 |
addItemProperty(itemType, name, value); |
1897 |
} |
1898 |
} |
1899 |
} |
1900 |
|
1901 |
public String getCorrectProjection(String abrev) { |
1902 |
if(srs_used == null){ |
1903 |
srs_used = "";
|
1904 |
} |
1905 |
if(!srs_used.toLowerCase().contains(abrev.toLowerCase())){
|
1906 |
srs_used = abrev + " " + srs_used;
|
1907 |
} |
1908 |
return "init=" + abrev.toLowerCase(); |
1909 |
} |
1910 |
|
1911 |
public String getCorrectPath(String fileFormat){ |
1912 |
return getCorrectPath(fileFormat, file);
|
1913 |
} |
1914 |
|
1915 |
public String getCorrectPath(String fileFormat, File origen) { |
1916 |
if (!getPublishProperties().isAbsolutePath()) {
|
1917 |
if(!getPublishProperties().isDefaultPath()
|
1918 |
&& !getPublishProperties().isAbsolutePath()){ |
1919 |
String spath = getPublishProperties().getShapePath();
|
1920 |
if(StringUtils.isBlank(getPublishProperties().getShapePath())){
|
1921 |
spath = "";
|
1922 |
} |
1923 |
String shapeFile = origen.getParent();
|
1924 |
if(getPublishProperties().getMapFile().endsWith("/")){ |
1925 |
shapeFile = shapeFile + spath; |
1926 |
}else{
|
1927 |
shapeFile = shapeFile + "/" + spath;
|
1928 |
} |
1929 |
//if(fileFormat.startsWith(getPublishProperties().getShapePath())){
|
1930 |
//fileFormat = MapServerUtils.relativePath(fileFormat, shapeFile);
|
1931 |
//}
|
1932 |
if(fileFormat.contains("/")){ |
1933 |
String[] aux = fileFormat.split("/"); |
1934 |
if(aux.length > 0){ |
1935 |
fileFormat = aux[aux.length-1];
|
1936 |
} |
1937 |
} |
1938 |
} |
1939 |
}else{
|
1940 |
if(!getPublishProperties().isDefaultPath()){
|
1941 |
String localPath = getPublishProperties().getLocalPath();
|
1942 |
if (localPath != null |
1943 |
&& fileFormat.startsWith(getPublishProperties() |
1944 |
.getLocalPath())) { |
1945 |
|
1946 |
if (!localPath.endsWith("/")) { |
1947 |
localPath = localPath + "/";
|
1948 |
} |
1949 |
String remotePath = getPublishProperties().getRemotePath();
|
1950 |
if (!remotePath.endsWith("/")) { |
1951 |
remotePath = remotePath + "/";
|
1952 |
} |
1953 |
fileFormat = fileFormat.replace(localPath, remotePath); |
1954 |
//fileFormat = "." + "/" + fileFormat;
|
1955 |
//fileFormat = MapServerUtils.getCorrectFilePathFromUrl(fileFormat);
|
1956 |
} |
1957 |
} |
1958 |
} |
1959 |
|
1960 |
return fileFormat;
|
1961 |
} |
1962 |
|
1963 |
private MapserverSymbol toMapserver(ISymbol sym) {
|
1964 |
PublishManager manager = PublishLocator.getServiceManager() |
1965 |
.getPublishManager(); |
1966 |
|
1967 |
List<PublishSymbolConverterFactories> facts = manager
|
1968 |
.getSymbolConverterFactories(sym, NAME); |
1969 |
Iterator<PublishSymbolConverterFactories> it = facts.iterator();
|
1970 |
|
1971 |
List<Style> styles = new ArrayList<Style>(); |
1972 |
styles.add(new Style()); |
1973 |
MapserverSymbol symbol = new MapserverSymbol(new Symbol(), styles, new Label()); |
1974 |
|
1975 |
int maxAccurance = 0; |
1976 |
while (it.hasNext()) {
|
1977 |
PublishSymbolConverterFactories fs = (PublishSymbolConverterFactories) it |
1978 |
.next(); |
1979 |
if (fs.getAccurance() > 0) { |
1980 |
if (fs.getFactory().createConverter(sym) instanceof ToMapserverConverter) { |
1981 |
ToMapserverConverter converter = (ToMapserverConverter) fs |
1982 |
.getFactory().createConverter(sym); |
1983 |
converter.setMapserverService(this);
|
1984 |
if (fs.getAccurance() == 100) { |
1985 |
return converter.convert(sym);
|
1986 |
} else {
|
1987 |
if(fs.getAccurance() > maxAccurance){
|
1988 |
maxAccurance = fs.getAccurance(); |
1989 |
symbol = converter.convert(sym, symbol); |
1990 |
} |
1991 |
} |
1992 |
} |
1993 |
} |
1994 |
} |
1995 |
|
1996 |
return symbol;
|
1997 |
} |
1998 |
|
1999 |
public void setOverrideFiles(String b) { |
2000 |
this.overrideFiles = b;
|
2001 |
} |
2002 |
|
2003 |
public String getOverrideFiles() { |
2004 |
return this.overrideFiles; |
2005 |
} |
2006 |
|
2007 |
public File getCurrentFile() { |
2008 |
return file;
|
2009 |
} |
2010 |
|
2011 |
public void resetCurrentFile(){ |
2012 |
setCurrentFile(null);
|
2013 |
} |
2014 |
|
2015 |
public void setCurrentFile(File f) { |
2016 |
file = f; |
2017 |
} |
2018 |
|
2019 |
private File createMapFile(File file2, String name2) { |
2020 |
int loop = 1; |
2021 |
String end = ""; |
2022 |
File f = new File(file2.getParent() + File.separator + name2 + ".map"); |
2023 |
while(f.exists()){
|
2024 |
if(loop > 1){ |
2025 |
end = "-" + loop;
|
2026 |
} |
2027 |
f = new File(file2.getParent() + File.separator + name2 + end+ ".map"); |
2028 |
loop++; |
2029 |
} |
2030 |
return f;
|
2031 |
} |
2032 |
|
2033 |
private File createSymbolSetFile(File file2, String name2) { |
2034 |
int loop = 1; |
2035 |
String end = ""; |
2036 |
File f = new File(file2.getParent() + File.separator + name2 + "-sym.map"); |
2037 |
while(f.exists()){
|
2038 |
if(loop > 1){ |
2039 |
end = "-" + loop;
|
2040 |
} |
2041 |
f = new File(file2.getParent() + File.separator + name2 + "-sym"+ end+ ".map"); |
2042 |
loop++; |
2043 |
} |
2044 |
return f;
|
2045 |
} |
2046 |
|
2047 |
private File getFontSetFile() { |
2048 |
if (fontSetFile == null && file != null) { |
2049 |
fontSetFile = new File(file.getParentFile() |
2050 |
.getAbsolutePath() + File.separator + FONTSET_FILE);
|
2051 |
if(!fontSetFile.exists()){
|
2052 |
try {
|
2053 |
fontSetFile.createNewFile(); |
2054 |
} catch (IOException e) { |
2055 |
logger.warn("Error creating FontSet.txt file ", e);
|
2056 |
} |
2057 |
} |
2058 |
} |
2059 |
return fontSetFile;
|
2060 |
} |
2061 |
|
2062 |
private void mergeLayerDefinition(File file2, Map map, List<Layer> layerList, int layerMode) { |
2063 |
switch(layerMode){
|
2064 |
case LAYER_MODE:
|
2065 |
//
|
2066 |
|
2067 |
break;
|
2068 |
case PROJECT_MODE:
|
2069 |
for(int i=0; i<map.getInclude().size(); i++){ |
2070 |
String auxPath = map.getInclude().get(i).replace("//", File.separator); |
2071 |
File auxFile = new File(file2.getParentFile() |
2072 |
.getAbsolutePath() + File.separator + auxPath);
|
2073 |
|
2074 |
LayerSet auxLayerSet = (LayerSet) parserFile(auxFile, new LayerSet());
|
2075 |
boolean auxLayersModified = false; |
2076 |
boolean dontShow = false; |
2077 |
int n = -1; |
2078 |
for(int j=auxLayerSet.getLayer().size()-1; j>=0; j--){ |
2079 |
Layer auxLayer = auxLayerSet.getLayer().get(j); |
2080 |
for(int k=layerList.size()-1; k>=0; k--){ |
2081 |
Layer auxCurrentLayer = layerList.get(k); |
2082 |
if(auxLayer.getName().equals(auxCurrentLayer.getName())){
|
2083 |
if(!dontShow){
|
2084 |
PublishManager manager = getPublishProperties().getManager(); |
2085 |
Object[] options = {manager.getTranslation("keep_previous"), manager.getTranslation("update_to_new"), |
2086 |
manager.getTranslation("keep_both")};
|
2087 |
|
2088 |
JCheckBox checkbox = new JCheckBox(manager.getTranslation("not_again")); |
2089 |
String message = auxPath+" "+ |
2090 |
manager.getTranslation("layer_exists3")+
|
2091 |
" '"+ auxCurrentLayer.getName() +"'\n"+ |
2092 |
manager.getTranslation("layer_exists2");
|
2093 |
Object[] params = {message, checkbox}; |
2094 |
|
2095 |
n = JOptionPane.showOptionDialog(null, |
2096 |
params, |
2097 |
manager.getTranslation("layer_exists"),
|
2098 |
JOptionPane.YES_NO_OPTION,
|
2099 |
JOptionPane.WARNING_MESSAGE,
|
2100 |
null,
|
2101 |
options, |
2102 |
options[0]);
|
2103 |
|
2104 |
|
2105 |
dontShow = checkbox.isSelected(); |
2106 |
} |
2107 |
|
2108 |
if(n==0){ |
2109 |
layerList.remove(auxCurrentLayer); |
2110 |
} |
2111 |
|
2112 |
if(n==1){ |
2113 |
auxLayerSet.getLayer().remove(auxLayer); |
2114 |
auxLayersModified = true;
|
2115 |
} |
2116 |
} |
2117 |
} |
2118 |
} |
2119 |
if(auxLayerSet.getLayer().size()==0){ |
2120 |
map.getInclude().remove(i); |
2121 |
i = i--; |
2122 |
} |
2123 |
|
2124 |
if(auxLayersModified){
|
2125 |
parserFile(auxLayerSet, auxFile); |
2126 |
} |
2127 |
|
2128 |
|
2129 |
} |
2130 |
break;
|
2131 |
} |
2132 |
} |
2133 |
|
2134 |
private void mergeSymbolSet(SymbolSet symbolSet, SymbolSet localSymbolSet, int layerMode) { |
2135 |
switch(layerMode){
|
2136 |
case LAYER_MODE:
|
2137 |
//
|
2138 |
|
2139 |
break;
|
2140 |
case PROJECT_MODE:
|
2141 |
Iterator<Symbol> it = localSymbolSet.getSymbol().iterator();
|
2142 |
while(it.hasNext()){
|
2143 |
Symbol sym = (Symbol) it.next(); |
2144 |
if(sym.getType().equalsIgnoreCase("svg") || sym.getType().equalsIgnoreCase("pixmap")){ |
2145 |
File originalFile = new File(sym.getImage()); |
2146 |
// if(originalFile.isFile()){
|
2147 |
// sym.setImage(MapServerUtils.relativePath(
|
2148 |
// originalFile.getAbsolutePath(),
|
2149 |
// originalFile.getParentFile().getParent()));
|
2150 |
// }
|
2151 |
} |
2152 |
boolean isAnUpdate= false; |
2153 |
for(int i=0; i<symbolSet.getSymbol().size(); i++){ |
2154 |
if(symbolSet.getSymbol().get(i).getName().equals(sym.getName())){
|
2155 |
symbolSet.getSymbol().set(i, sym); |
2156 |
isAnUpdate = true;
|
2157 |
} |
2158 |
} |
2159 |
if(!isAnUpdate){
|
2160 |
symbolSet.getSymbol().add(sym); |
2161 |
} |
2162 |
} |
2163 |
break;
|
2164 |
} |
2165 |
} |
2166 |
|
2167 |
private Layer getPublishedLayer(FLayer flayer) {
|
2168 |
isEditedLayer = false;
|
2169 |
if(flayer.getProperty(MAPSERVER_LAYERPANEL_PROPERTIES) != null && |
2170 |
flayer.getProperty(MAPSERVER_LAYERPANEL_PROPERTIES) instanceof Boolean){ |
2171 |
boolean active = (Boolean) flayer.getProperty(MAPSERVER_LAYERPANEL_PROPERTIES); |
2172 |
if(active){
|
2173 |
Object prop = flayer.getProperty(MAPSERVER_LAYER_PROPERTIES);
|
2174 |
if (prop != null && prop instanceof Layer){ |
2175 |
isEditedLayer = true;
|
2176 |
Layer auxLayer = (Layer) flayer.getProperty(MAPSERVER_LAYER_PROPERTIES); |
2177 |
for(int i=0; i<auxLayer.getClazz().size();i++){ |
2178 |
Class auxClass = auxLayer.getClazz().get(i);
|
2179 |
for(int j=0; j<auxClass.getLabel().size(); j++){ |
2180 |
Label auxLabel = auxClass.getLabel().get(j);
|
2181 |
usesFont = true;
|
2182 |
if(!StringUtils.isBlank(auxLabel.getFont())){
|
2183 |
getFontName(auxLabel.getFont().replace("\"", "")); |
2184 |
} |
2185 |
} |
2186 |
} |
2187 |
return auxLayer;
|
2188 |
} |
2189 |
} |
2190 |
} |
2191 |
return makepublish(flayer);
|
2192 |
} |
2193 |
|
2194 |
|
2195 |
|
2196 |
|
2197 |
private void updateSymbolName(List<Layer> layerList, String oldName, String newName) { |
2198 |
for(int i=0; i<layerList.size(); i++){ |
2199 |
List<org.gvsig.publish.mapserver641.Class> clss = layerList.get(i).getClazz();
|
2200 |
for(int j=0; j<clss.size(); j++){ |
2201 |
List<Style> styles = clss.get(j).getStyle(); |
2202 |
Iterator<Style> it = styles.iterator(); |
2203 |
while(it.hasNext()){
|
2204 |
Style style = (Style) it.next(); |
2205 |
if(style.getSymbol() != null && |
2206 |
!StringUtils.isBlank(style.getSymbol().getValue()) && |
2207 |
style.getSymbol().getValue().equals("\""+oldName+"\"")){ |
2208 |
style.getSymbol().setValue("\""+newName+"\""); |
2209 |
} |
2210 |
} |
2211 |
} |
2212 |
} |
2213 |
} |
2214 |
|
2215 |
|
2216 |
|
2217 |
private String getFontName(String name2) { |
2218 |
String auxName = name2.replace(" ", "_").toLowerCase(); |
2219 |
if (!isFontLoaded(auxName)) {
|
2220 |
auxName = addFontFile(auxName); |
2221 |
} |
2222 |
return "\"" + auxName + "\""; |
2223 |
} |
2224 |
|
2225 |
private String addFontFile(String fontName) { |
2226 |
InputStream input = DefaultPublishManager.class
|
2227 |
.getResourceAsStream("/org/gvsig/publish/impl/mapserver/Font/"
|
2228 |
+ FONTSET_FILE); |
2229 |
String fontFile = getFontFile(input, fontName);
|
2230 |
if (fontFile == null) { |
2231 |
fontName = DEFAULT_FONT; |
2232 |
fontFile = DEFAULT_FILE; |
2233 |
} |
2234 |
if (!isFontLoaded(fontName) && file != null) { |
2235 |
try {
|
2236 |
PrintWriter out = new PrintWriter(new BufferedWriter( |
2237 |
new FileWriter(getFontSetFile(), true))); |
2238 |
String filePath = FONTSET_FOLDER + "/" + fontFile; |
2239 |
URL srcFile = DefaultPublishManager.class
|
2240 |
.getResource("/org/gvsig/publish/impl/mapserver/Font/" + fontFile);
|
2241 |
out.println(fontName + " " + filePath);
|
2242 |
out.close(); |
2243 |
|
2244 |
File origen = new File(srcFile.getFile()); |
2245 |
File destino = new File(getCorrectPath(file.getParent() |
2246 |
+ File.separator + filePath));
|
2247 |
FileUtils.copyURLToFile(srcFile, |
2248 |
new File(getCorrectPath(file.getParent() |
2249 |
+ File.separator + filePath)));
|
2250 |
} catch (IOException e) { |
2251 |
// exception handling left as an exercise for the reader
|
2252 |
} |
2253 |
} |
2254 |
return fontName;
|
2255 |
} |
2256 |
|
2257 |
private boolean isFontLoaded(String fontName) { |
2258 |
try {
|
2259 |
File fontFile = getFontSetFile();
|
2260 |
if (fontFile == null) { |
2261 |
return false; |
2262 |
} |
2263 |
InputStream input = new FileInputStream(fontFile); |
2264 |
String fontFileName = getFontFile(input, fontName);
|
2265 |
if (fontFileName != null) { |
2266 |
return true; |
2267 |
} |
2268 |
} catch (FileNotFoundException e) { |
2269 |
logger.info("Error getting Mapserver fonts file");
|
2270 |
} |
2271 |
return false; |
2272 |
} |
2273 |
|
2274 |
private String getFontFile(InputStream input, String fontName) { |
2275 |
BufferedReader in = new BufferedReader(new InputStreamReader(input)); |
2276 |
try {
|
2277 |
String line = in.readLine();
|
2278 |
while (line != null) { |
2279 |
if (line.toLowerCase().startsWith(fontName.toLowerCase())) {
|
2280 |
String[] fields = line.split("\\s"); |
2281 |
if (fields.length > 1) { |
2282 |
return fields[fields.length - 1]; |
2283 |
} |
2284 |
} |
2285 |
line = in.readLine(); |
2286 |
} |
2287 |
} catch (IOException e) { |
2288 |
logger.info("Error reading Mapserver fonts file");
|
2289 |
return null; |
2290 |
} |
2291 |
return null; |
2292 |
} |
2293 |
|
2294 |
private ItemType getCorrectMetadata(ItemType itemType3) {
|
2295 |
for(int i=itemType3.getItem().size()-1; i>=0; i--){ |
2296 |
Item item = itemType3.getItem().get(i); |
2297 |
if(!isWMSService
|
2298 |
&& item.getName().startsWith("wms_")){
|
2299 |
itemType3.getItem().remove(item); |
2300 |
} |
2301 |
if(!isWFSService
|
2302 |
&& item.getName().startsWith("wfs_")){
|
2303 |
itemType3.getItem().remove(item); |
2304 |
} |
2305 |
if(!isWCSService
|
2306 |
&& item.getName().startsWith("wcs_")){
|
2307 |
itemType3.getItem().remove(item); |
2308 |
} |
2309 |
if(!isWMSService
|
2310 |
&& !isWFSService |
2311 |
&& !isWCSService |
2312 |
&& item.getName().startsWith("ows_")){
|
2313 |
itemType3.getItem().remove(item); |
2314 |
} |
2315 |
} |
2316 |
return itemType3;
|
2317 |
} |
2318 |
|
2319 |
|
2320 |
public void loadWMSService(){ |
2321 |
isWMSService = true;
|
2322 |
isWFSService = false;
|
2323 |
isWCSService = false;
|
2324 |
} |
2325 |
|
2326 |
public void loadWFSService(){ |
2327 |
isWMSService = false;
|
2328 |
isWFSService = true;
|
2329 |
isWCSService = false;
|
2330 |
} |
2331 |
|
2332 |
public void loadWCSService(){ |
2333 |
isWMSService = false;
|
2334 |
isWFSService = false;
|
2335 |
isWCSService = true;
|
2336 |
} |
2337 |
|
2338 |
public void loadAllServices(){ |
2339 |
isWMSService = true;
|
2340 |
isWFSService = true;
|
2341 |
isWCSService = true;
|
2342 |
} |
2343 |
|
2344 |
public void unloadAllServices(){ |
2345 |
isWMSService = false;
|
2346 |
isWFSService = false;
|
2347 |
isWCSService = false;
|
2348 |
} |
2349 |
|
2350 |
public boolean hasMapfile(){ |
2351 |
return isWMSService || isWFSService || isWCSService;
|
2352 |
} |
2353 |
|
2354 |
|
2355 |
public Object parserFile(File file, Object mapObject) { |
2356 |
File tempFile = new File(MapServerUtils.getNameWithoutExtension(file.getAbsolutePath())+".xml"); |
2357 |
|
2358 |
if(!tempFile.exists()){
|
2359 |
return null; |
2360 |
} |
2361 |
JAXBContext jaxbContext2; |
2362 |
try {
|
2363 |
jaxbContext2 = JAXBContext.newInstance(mapObject.getClass()); |
2364 |
javax.xml.bind.Unmarshaller jaxbUnMarshaller2 = jaxbContext2.createUnmarshaller(); |
2365 |
//jaxbUnMarshaller2.setProperty(Unmarshaller.JAXB_FORMATTED_OUTPUT, true);
|
2366 |
Object obj = jaxbUnMarshaller2.unmarshal(tempFile);
|
2367 |
return obj;
|
2368 |
} catch (JAXBException e) {
|
2369 |
logger.info("Error umarshalling Mapserver data");
|
2370 |
} |
2371 |
|
2372 |
return null; |
2373 |
} |
2374 |
|
2375 |
public void parserFile(Object mapObject, File file) { |
2376 |
parserFile(mapObject, file, false);
|
2377 |
} |
2378 |
|
2379 |
public void parserFile(Object mapObject, File file, boolean removeTemporal) { |
2380 |
FileOutputStream fos = null; |
2381 |
try {
|
2382 |
String extension = ".xml"; |
2383 |
if(removeTemporal){
|
2384 |
extension = ".tmp" + extension;
|
2385 |
} |
2386 |
File tempFile = new File(MapServerUtils.getNameWithoutExtension(file.getAbsolutePath())+extension); |
2387 |
|
2388 |
// Proceso de transformaci?n de los datos
|
2389 |
JAXBContext jaxbContext2 = JAXBContext.newInstance(mapObject.getClass()); |
2390 |
javax.xml.bind.Marshaller jaxbMarshaller2 = jaxbContext2.createMarshaller(); |
2391 |
jaxbMarshaller2.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true);
|
2392 |
jaxbMarshaller2.marshal(mapObject, tempFile); |
2393 |
|
2394 |
Source xmlSource2 = new StreamSource(tempFile); |
2395 |
InputStream input = DefaultPublishManager.class
|
2396 |
.getResourceAsStream("/org/gvsig/publish/impl/mapserver/mapfile.xsl");
|
2397 |
Source xsltSource2 = new StreamSource(input); |
2398 |
|
2399 |
// create an instance of TransformerFactory
|
2400 |
TransformerFactory transFact2 = new org.apache.xalan.processor.TransformerFactoryImpl(); |
2401 |
Transformer trans2 = transFact2.newTransformer(xsltSource2);
|
2402 |
|
2403 |
fos = new FileOutputStream(file); |
2404 |
Result fileResult = new StreamResult(fos); |
2405 |
trans2.transform(xmlSource2, fileResult); |
2406 |
|
2407 |
if(removeTemporal){
|
2408 |
tempFile.delete(); |
2409 |
} |
2410 |
|
2411 |
|
2412 |
} catch (Exception e) { |
2413 |
logger.warn("", e);
|
2414 |
}finally {
|
2415 |
if (fos != null) { |
2416 |
try {
|
2417 |
fos.close(); |
2418 |
} catch (IOException e) { |
2419 |
logger.info("Error parsing Mapserver data to a file");
|
2420 |
} |
2421 |
} |
2422 |
} |
2423 |
} |
2424 |
|
2425 |
public void restoreFile(File xmlFile, File file2){ |
2426 |
FileOutputStream fos = null; |
2427 |
try {
|
2428 |
Source xmlSource2 = new StreamSource(xmlFile); |
2429 |
InputStream input2 = DefaultPublishManager.class
|
2430 |
.getResourceAsStream("/org/gvsig/publish/impl/mapserver/mapfile.xsl");
|
2431 |
Source xsltSource2 = new StreamSource(input2); |
2432 |
|
2433 |
// // create an instance of TransformerFactory
|
2434 |
TransformerFactory transFact2 = new org.apache.xalan.processor.TransformerFactoryImpl(); |
2435 |
Transformer trans2 = transFact2.newTransformer(xsltSource2);
|
2436 |
|
2437 |
fos = new FileOutputStream(file2); |
2438 |
Result fileResult = new StreamResult(fos); |
2439 |
trans2.transform(xmlSource2, fileResult); |
2440 |
|
2441 |
|
2442 |
|
2443 |
//tempFile.delete();
|
2444 |
|
2445 |
} catch (Exception e) { |
2446 |
logger.warn("", e);
|
2447 |
}finally {
|
2448 |
if (fos != null) { |
2449 |
try {
|
2450 |
fos.close(); |
2451 |
} catch (IOException e) { |
2452 |
logger.info("Error restoring Mapserver data");
|
2453 |
} |
2454 |
} |
2455 |
} |
2456 |
|
2457 |
} |
2458 |
|
2459 |
public Layer makepublish(FLayer lyr, boolean b) { |
2460 |
this.isPropertiesPanel = b;
|
2461 |
return makepublish(lyr);
|
2462 |
} |
2463 |
} |