Statistics
| Revision:

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 @ 123

History | View | Annotate | Download (80.1 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.gvsig.app.project.documents.view.ViewDocument;
39
import org.gvsig.complexlabel.impl.DefaultComplexLabelClass;
40
import org.gvsig.complexlegend.ComplexLegendItem;
41
import org.gvsig.complexlegend.VectorComplexLegend;
42
import org.gvsig.fmap.dal.NewDataStoreParameters;
43
import org.gvsig.fmap.dal.coverage.store.RasterDataStore;
44
import org.gvsig.fmap.dal.coverage.store.props.ColorInterpretation;
45
import org.gvsig.fmap.dal.coverage.store.props.ColorTable;
46
import org.gvsig.fmap.dal.exception.DataException;
47
import org.gvsig.fmap.dal.exception.ReadException;
48
import org.gvsig.fmap.dal.exception.ValidateDataParametersException;
49
import org.gvsig.fmap.dal.feature.FeatureAttributeDescriptor;
50
import org.gvsig.fmap.dal.feature.FeatureStore;
51
import org.gvsig.fmap.dal.serverexplorer.db.DBServerExplorer;
52
import org.gvsig.fmap.dal.serverexplorer.filesystem.FilesystemServerExplorer;
53
import org.gvsig.fmap.dal.serverexplorer.wfs.WFSServerExplorer;
54
import org.gvsig.fmap.dal.store.db.DBStoreParameters;
55
import org.gvsig.fmap.geom.primitive.Envelope;
56
import org.gvsig.fmap.geom.primitive.Point;
57
import org.gvsig.fmap.mapcontext.layers.FLayer;
58
import org.gvsig.fmap.mapcontext.layers.FLayers;
59
import org.gvsig.fmap.mapcontext.layers.operations.SingleLayer;
60
import org.gvsig.fmap.mapcontext.layers.vectorial.FLyrVect;
61
import org.gvsig.fmap.mapcontext.rendering.legend.IClassifiedLegend;
62
import org.gvsig.fmap.mapcontext.rendering.legend.IClassifiedVectorLegend;
63
import org.gvsig.fmap.mapcontext.rendering.legend.ILegend;
64
import org.gvsig.fmap.mapcontext.rendering.legend.styling.ILabelClass;
65
import org.gvsig.fmap.mapcontext.rendering.legend.styling.ILabelingMethod;
66
import org.gvsig.fmap.mapcontext.rendering.legend.styling.ILabelingStrategy;
67
import org.gvsig.fmap.mapcontext.rendering.legend.styling.IPlacementConstraints;
68
import org.gvsig.fmap.mapcontext.rendering.symbols.IMultiLayerSymbol;
69
import org.gvsig.fmap.mapcontext.rendering.symbols.ISymbol;
70
import org.gvsig.fmap.mapcontext.rendering.symbols.ITextSymbol;
71
import org.gvsig.publish.PublishLocator;
72
import org.gvsig.publish.PublishManager;
73
import org.gvsig.publish.PublishManager.PublishSymbolConverterFactories;
74
import org.gvsig.publish.PublishProperties;
75
import org.gvsig.publish.impl.DefaultPublishManager;
76
import org.gvsig.publish.impl.mapserver.MapserverProperties;
77
import org.gvsig.publish.impl.mapserver.MapserverService;
78
import org.gvsig.publish.impl.mapserver.MapserverToDynObjectHelper;
79
import org.gvsig.publish.impl.mapserver.ToMapserverConverter;
80
import org.gvsig.publish.mapserver641.AlignEnum;
81
import org.gvsig.publish.mapserver641.BooleanEnum;
82
import org.gvsig.publish.mapserver641.Class;
83
import org.gvsig.publish.mapserver641.ExpressionType;
84
import org.gvsig.publish.mapserver641.ItemType;
85
import org.gvsig.publish.mapserver641.ItemType.Item;
86
import org.gvsig.publish.mapserver641.Label;
87
import org.gvsig.publish.mapserver641.Layer;
88
import org.gvsig.publish.mapserver641.LayerSet;
89
import org.gvsig.publish.mapserver641.Map;
90
import org.gvsig.publish.mapserver641.OutputFormat;
91
import org.gvsig.publish.mapserver641.PointType;
92
import org.gvsig.publish.mapserver641.SizeType;
93
import org.gvsig.publish.mapserver641.StateEnum;
94
import org.gvsig.publish.mapserver641.Style;
95
import org.gvsig.publish.mapserver641.Symbol;
96
import org.gvsig.publish.mapserver641.Symbol.Points;
97
import org.gvsig.publish.mapserver641.SymbolSet;
98
import org.gvsig.publish.mapserver641.SymbolType;
99
import org.gvsig.publish.mapserver641.Web;
100
import org.gvsig.raster.fmap.layers.FLyrRaster;
101
import org.gvsig.raster.gdal.io.GdalNative;
102
import org.gvsig.raster.gdal.io.GdalProvider;
103
import org.gvsig.raster.impl.provider.RasterProvider;
104
import org.gvsig.raster.wms.app.wmsclient.layer.FLyrWMS;
105
import org.gvsig.raster.wms.io.RemoteWMSStyle;
106
import org.gvsig.raster.wms.io.WMSDataParameters;
107
import org.gvsig.raster.wms.io.WMSServerExplorer;
108
import org.gvsig.symbology.fmap.mapcontext.rendering.legend.styling.IAttrInTableLabelingStrategy;
109
import org.gvsig.symbology.fmap.mapcontext.rendering.symbol.marker.IMarkerSymbol;
110
import org.gvsig.symbology.fmap.mapcontext.rendering.symbol.marker.IPictureMarkerSymbol;
111
import org.gvsig.symbology.fmap.mapcontext.rendering.symbol.text.ISimpleTextSymbol;
112
import org.gvsig.symbology.fmap.rendering.VectorFilterExpressionLegend;
113
import org.gvsig.timesupport.Interval;
114
import org.gvsig.tools.ToolsLocator;
115
import org.gvsig.tools.dataTypes.DataType;
116
import org.gvsig.tools.dataTypes.DataTypes;
117
import org.gvsig.tools.dynobject.DynField;
118
import org.gvsig.tools.dynobject.DynObject;
119
import org.slf4j.Logger;
120
import org.slf4j.LoggerFactory;
121

    
122
public class MapServer {
123

    
124
        private Logger logger = LoggerFactory.getLogger(MapServer.class);
125
        public static final String NAME = "Mapserver";
126

    
127
        private static final String MAPSERVER_MAP_PROPERTIES = "MapServer-map-properties";
128
        private static final String MAPSERVER_PANEL_PROPERTIES = "MapServer-panel-properties";
129

    
130
        private static final String MAPSERVER_LAYER_PROPERTIES = "MapServer-layer-properties";
131
        private static final String MAPSERVER_LAYERPANEL_PROPERTIES = "MapServer-layer-panel-properties";
132

    
133
        private 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
                                e2.printStackTrace();
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
                for(int i=0; i<newsymbolset.getSymbol().size(); i++){
518
                        loadSymbolImages(newsymbolset.getSymbol().get(i));
519
                }
520
        }
521
        
522
        protected String addImageUrl(String url) {
523
                File originalFile = new File(MapServerUtils.getCorrectFilePathFromUrl(url));
524
                String legFileName = originalFile.getName();
525

    
526
                PublishManager manager = PublishLocator.getServiceManager().getPublishManager();
527
                
528
                File file = getCurrentFile();
529
                
530
                if(file != null){
531
                        File parentFile = new File(getCorrectPath(file.getParent()));
532
        
533
                        if(parentFile.isDirectory() 
534
                                        && parentFile.canWrite()){
535
                                File legfile = new File(getCorrectPath(parentFile.getAbsolutePath()
536
                                                + File.separator + MapServer.IMAGE_FOLDER + File.separator + legFileName));
537
                                if(legfile.exists()){
538
                                        if(!legfile.getAbsolutePath().equals(originalFile.getAbsolutePath())){
539
                                                Object[] options = {manager.getTranslation("accept_all"), manager.getTranslation("accept"),
540
                                                                manager.getTranslation("cancel"), manager.getTranslation("cancell_all")};
541
                                                int n = -1;
542
                                                if(StringUtils.isBlank(getOverrideFiles())){
543
                                                        n = JOptionPane.showOptionDialog(null,
544
                                                                legfile.getAbsolutePath()+"\n"+
545
                                                                                manager.getTranslation("file_exists3")+"\n"+
546
                                                                                manager.getTranslation("file_exists2"),
547
                                                                                manager.getTranslation("file_exists"),
548
                                                                                JOptionPane.YES_NO_OPTION,
549
                                                                                JOptionPane.WARNING_MESSAGE,
550
                                                                                null,
551
                                                                                options,
552
                                                                                options[0]);
553
                                                }
554
                                                if(n==0){
555
                                                        setOverrideFiles("true");
556
                                                }
557
                                                if(n==3){
558
                                                        setOverrideFiles("false");
559
                                                }
560
                                                if(n==1 || getOverrideFiles().equalsIgnoreCase("true")){
561
                                                        try {
562
                                                                FileUtils.copyFile(originalFile, legfile);
563
                                                        } catch (IOException e) {
564
                                                                // TODO Auto-generated catch block
565
                                                                e.printStackTrace();
566
                                                        }
567
                                                        return legfile.getAbsolutePath();
568
                                                }
569
                                        }
570
                                }else{
571
                                        try {
572
                                                legfile.getParentFile().mkdirs();
573
                                                FileUtils.copyFile(originalFile, legfile);
574
                                        } catch (IOException e) {
575
                                                // TODO Auto-generated catch block
576
                                                e.printStackTrace();
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
                        // TODO Auto-generated catch block
707
                        e2.printStackTrace();
708
                }
709
                if (layer.getMaxScale() != -1)
710
                        lyr.setMaxScaleDenom(layer.getMaxScale());
711
                if (layer.getMinScale() != -1)
712
                        lyr.setMinScaleDenom(layer.getMinScale());
713
                lyr.setName(layer.getName());
714
                String projection = "";
715
                if (layer.getProjection() != null) {
716
                        lyr.getProjection().add(
717
                                        getCorrectProjection(layer.getProjection().getAbrev()));
718
                        projection = layer.getProjection().getAbrev();
719
                }
720
                lyr.setStatus(MapServerUtils.getStatus(layer.isVisible()));
721

    
722
                if (layer instanceof SingleLayer) {
723
                        SingleLayer singlelayer = (SingleLayer) layer;
724
                        String contype = MapServerUtils.getProviderName(singlelayer.getDataStore()
725
                                        .getProviderName());
726
                        if (!contype.equals("local")) {
727
                                lyr.setConnectionType(contype);
728
                        }
729
                }
730

    
731
                if (isWMSService) {
732
                        addItemProperty(itemType, "wms_title", MapServerUtils.getNameWithoutExtension(layer.getName()));
733
                        addItemProperty(itemType, "wms_name", MapServerUtils.getNameWithoutExtension(layer.getName()));
734
                        addItemProperty(itemType, "wms_abstract", MapServerUtils.getNameWithoutExtension(layer.getName()));
735

    
736
                        String group = "";
737
                        if(layer.getParentLayer() != null && layer.getParentLayer().getName() != null && layer.getParentLayer().getName() != "root layer"){
738
                                group = "/"+layer.getParentLayer().getName();
739
                        }else{
740
                                group= "/"+view.getName();
741
                        }
742

    
743
                        addItemProperty(itemType, "wms_layer_group", group);
744
                        if (extent != "") {
745
                                addItemProperty(itemType, "wms_extent", extent);
746
                        }
747
                        if (projection != null) {
748
                                addItemProperty(itemType, "wms_srs", projection);
749
                        }
750
                        addItemProperty(itemType, "gml_include_items", "all");
751
                        //addItemProperty(itemType, "gml_types", "auto");
752

    
753
                        lyr.setDump(BooleanEnum.TRUE);
754
                        lyr.setTemplate(".");
755
                }
756

    
757
                if (isWFSService) {
758
                        addItemProperty(itemType, "wfs_title", MapServerUtils.getNameWithoutExtension(layer.getName()));
759
                        addItemProperty(itemType, "wfs_abstract", MapServerUtils.getNameWithoutExtension(layer.getName()));
760
                        if (extent != "") {
761
                                addItemProperty(itemType, "wfs_extent", extent);
762
                        }
763
                        if (projection != null) {
764
                                addItemProperty(itemType, "wfs_srs", projection);
765
                        }
766
                        addItemProperty(itemType, "wfs_typename", MapServerUtils.getNameWithoutExtension(layer.getName()));
767
                        addIfNotExistsItemProperty(itemType, "gml_include_items", "all");
768
                        //addItemProperty(itemType, "gml_types", "auto");
769
                }
770

    
771
                if(isWCSService){
772
                        addItemProperty(itemType, "wcs_label", MapServerUtils.getNameWithoutExtension(layer.getName()));
773
                        addItemProperty(itemType, "wcs_name", MapServerUtils.getNameWithoutExtension(layer.getName()));
774
                        addItemProperty(itemType, "wcs_abstract", MapServerUtils.getNameWithoutExtension(layer.getName()));
775
                        addItemProperty(itemType, "wcs_description", MapServerUtils.getNameWithoutExtension(layer.getName()));
776
                        if (extent != "") {
777
                                addItemProperty(itemType, "wcs_extent", extent);
778
                        }
779
                        if (projection != null) {
780
                                addItemProperty(itemType, "ows_srs", projection);
781
                        }
782
                }
783

    
784
                if (layer instanceof FLyrVect) {
785
                        FLyrVect flyrvect = (FLyrVect) layer;
786
                        int alpha = (flyrvect.getTransparency() + 1) * 100 / 256;
787
                        lyr.setOpacity("" + alpha);
788
                        try {
789
                                lyr.setType(MapServerUtils.getLayerType(flyrvect.getTypeVectorLayer()));
790
                        } catch (Exception e) {
791
                                e.printStackTrace();
792
                        }
793

    
794
                        try {
795
                                FeatureStore fstore = flyrvect.getFeatureStore();
796
                                if(isWFSService){
797
                                        FeatureAttributeDescriptor[] pks = fstore
798
                                                        .getDefaultFeatureType().getPrimaryKey();
799
                                        boolean isFirst = true;
800
                                        String keys = "";
801
                                        for (int ix = 0; ix < pks.length; ix++) {
802
                                                if (!isFirst) {
803
                                                        keys += ", ";
804
                                                }
805
                                                keys += pks[ix].getName();
806
                                                isFirst = false;
807
                                        }
808
                                        if(!StringUtils.isBlank(keys)){
809
                                                addItemProperty(itemType, "gml_featureid", keys);
810
                                        }
811

    
812

    
813
                                        DynField[] dynfields = fstore.getDefaultFeatureType().getDeclaredDynFields();
814
                                        String geoattrName = fstore.getDefaultFeatureType().getDefaultGeometryAttributeName();
815

    
816
                                        for(int fi =0; fi<dynfields.length; fi++){
817
                                                DynField field = dynfields[fi];
818
                                                String name = field.getName();
819
                                                if(!geoattrName.equals(name)){
820
                                                        DataType type = field.getDataType();
821
                                                        String typeName = getMapserverTypeName(type);
822
                                                        if(typeName != null){
823
                                                                addItemProperty(itemType, "gml_"+name+"_type", typeName);
824
                                                        }
825
                                                }
826
                                        }
827
                                }
828

    
829
                                if (fstore.getExplorer() != null) {
830
                                        if (fstore.getExplorer() instanceof FilesystemServerExplorer) {
831
                                                FilesystemServerExplorer fileExplorer = (FilesystemServerExplorer) fstore
832
                                                                .getExplorer();
833
                                                lyr.setData(getCorrectPath(fstore.getFullName()));
834
                                                if(isWFSService){
835
                                                        addItemProperty(itemType, "gml_featureid", "ID");
836
                                                }
837
                                        } else {
838
                                                lyr.setConnection(MapServerUtils.getHostWithoutParametersFromURL(getCorrectPath(fstore
839
                                                                .getFullName())));
840
                                        }
841

    
842
                                        try{
843
                                                if (fstore.getExplorer() instanceof WFSServerExplorer) {
844
                                                        WFSServerExplorer wfsExplorer = (WFSServerExplorer) fstore.getExplorer();
845
                                                        lyr.setMaxFeatures(MapServerUtils.getBigInteger(wfsExplorer.getMaxFeatures()));
846

    
847
                                                        if (isWFSService) {
848
                                                                addItemProperty(itemType, "wfs_title", wfsExplorer.getTitle());
849
                                                                addItemProperty(itemType, "wfs_abstract", wfsExplorer.getAbstract());
850
                                                                if (extent != "") {
851
                                                                        addItemProperty(itemType, "wfs_extent", extent);
852
                                                                }
853
                                                                if (projection != null) {
854
                                                                        addItemProperty(itemType, "wfs_srs", projection);
855
                                                                }
856
                                                        }
857

    
858
                                                        if (isWMSService) {
859
                                                                addItemProperty(itemType, "wms_title", wfsExplorer.getTitle());
860
                                                                addItemProperty(itemType, "wms_name", lyr.getName());
861
                                                                addItemProperty(itemType, "wms_abstract", wfsExplorer.getAbstract());
862
                                                                if (extent != "") {
863
                                                                        addItemProperty(itemType, "wms_extent", extent);
864
                                                                }
865
                                                                if (projection != null) {
866
                                                                        addItemProperty(itemType, "wms_srs", projection);
867
                                                                }
868
                                                        }
869

    
870
                                                        addItemProperty(itemType, "wfs_typename", lyr.getName());
871
                                                        addItemProperty(itemType, "wfs_maxfeatures", wfsExplorer.getMaxFeatures()+"");
872
                                                        addItemProperty(itemType, "wfs_version", wfsExplorer.getVersion());
873
                                                        addItemProperty(itemType, "wfs_connectiontimeout", wfsExplorer.getTimeOut()+"");
874

    
875
                                                }
876
                                        }catch(NoClassDefFoundError e1){
877
                                                logger.info("No est? instalada la extensi?n de WFS");
878
                                        }
879

    
880
                                        if (fstore.getExplorer() instanceof DBServerExplorer) {
881
                                                DBServerExplorer fileExplorer = (DBServerExplorer) fstore
882
                                                                .getExplorer();
883

    
884
                                                NewDataStoreParameters newdata = fileExplorer
885
                                                                .getAddParameters();
886
                                                DynField[] newfields = newdata.getDynClass()
887
                                                                .getDeclaredDynFields();
888
                                                String connection = "";
889
                                                String[] aux = fstore.getFullName().split(":");
890
                                                if (aux.length > 1) {
891
                                                        connection = aux[2];
892
                                                }
893
                                                String proje = "";
894
                                                String[] aux2 = getCorrectProjection(
895
                                                                fstore.getSRSDefaultGeometry().getAbrev())
896
                                                                .split(":");
897
                                                if (aux2.length > 0) {
898
                                                        proje = aux2[1];
899
                                                }
900

    
901
                                                FeatureAttributeDescriptor[] pks = fstore
902
                                                                .getDefaultFeatureType().getPrimaryKey();
903
                                                boolean isFirst = true;
904
                                                String keys = "";
905
                                                for (int ix = 0; ix < pks.length; ix++) {
906
                                                        if (!isFirst) {
907
                                                                keys += ", ";
908
                                                        }
909
                                                        keys += pks[ix].getName();
910
                                                        isFirst = false;
911
                                                }
912

    
913
                                                // "the_geom from cartografia_base.aepptorg000 using unique gid using srid=4189"
914
                                                if (connection != "" && proje != "" && keys != "") {
915
                                                        String dataQuery = fstore.getDefaultFeatureType()
916
                                                                        .getDefaultGeometryAttribute().getName()
917
                                                                        + " from "
918
                                                                        + connection.replace("\"", "");
919
                                                        if(!StringUtils.isBlank(keys)){
920
                                                                dataQuery = dataQuery + " using unique " + keys;
921
                                                        }
922
                                                        dataQuery = dataQuery + " using srid=" + proje;
923
                                                        if(lyr.getProjection().isEmpty()){
924
                                                                lyr.getProjection().add(getCorrectProjection(
925
                                                                                fstore.getSRSDefaultGeometry().getAbrev()));
926
                                                        }
927
                                                        lyr.setData(dataQuery);
928
                                                        if(isWFSService){
929
                                                                addItemProperty(itemType, "gml_featureid", keys);
930
                                                        }
931
                                                }
932
                                        }
933

    
934
                                        //if(isWFSService){
935
                                        String geoattrName = fstore.getDefaultFeatureType().getDefaultGeometryAttributeName();
936
                                        //addItemProperty(itemType, "gml_geometries", geoattrName);
937
                                        addItemProperty(itemType, "gml_geometries", "geometry");
938

    
939
                                        String valid_type = MapServerUtils.getValidLayerType(lyr.getType());
940
                                        if(valid_type != null){
941
                                                //addItemProperty(itemType, "gml_"+geoattrName+"_type", valid_type);
942
                                                addItemProperty(itemType, "gml_geometry_type", valid_type);
943
                                        }
944
                                        //}
945
                                }
946
                        } catch (Exception e1) {
947
                                e1.printStackTrace();
948
                        } 
949

    
950
                        if (flyrvect.getFeatureStore().getParameters() instanceof DBStoreParameters) {
951
                                DBStoreParameters dbStore = (DBStoreParameters) flyrvect
952
                                                .getDataStore().getParameters();
953
                                lyr.setConnection("user=" + dbStore.getUser() + " password="
954
                                                + dbStore.getPassword() + " host=" + dbStore.getHost()
955
                                                + " port=" + dbStore.getPort() + " dbname="
956
                                                + dbStore.getDBName());
957
                                lyr.getProcessing().add("CLOSE_CONNECTION=DEFER");
958
                                lyr.setDump(BooleanEnum.TRUE);
959
                                lyr.setConnectionType("POSTGIS");
960
                        }
961

    
962

    
963

    
964

    
965
                        /**
966
                         * LEGEND PARAMETERS
967
                         */
968
                        if(!isWFSService || isWMSService || isWCSService){
969
                                ILegend legend = flyrvect.getLegend();
970
                                try{
971
                                        if(legend instanceof VectorComplexLegend){
972
                                                VectorComplexLegend clegend = (VectorComplexLegend) legend;
973
                                                Iterator<ComplexLegendItem> it = clegend.getLegends().iterator();
974
                                                while(it.hasNext()){
975
                                                        ComplexLegendItem item = (ComplexLegendItem) it.next();
976
                                                        getMapClass(
977
                                                                        layer, 
978
                                                                        lyr, 
979
                                                                        localSymbolSet, 
980
                                                                        item.getLegend(), 
981
                                                                        item.getMinScale(), 
982
                                                                        item.getMaxScale());
983
                                                }
984
                                        }else{
985
                                                getMapClass(layer, lyr, localSymbolSet, legend, -1, -1);
986
                                        }
987
                                }catch(NoClassDefFoundError e1){
988
                                        logger.info("No est? instalada la extensi?n de leyendas complejas");
989
                                        getMapClass(layer, lyr, localSymbolSet, legend, -1, -1);
990
                                }
991
                        }
992

    
993
                }
994

    
995
                try{
996
                        if (layer instanceof FLyrRaster) {
997
                                FLyrRaster flyrraster = (FLyrRaster) layer;
998
                                lyr.setType("RASTER");
999
                                lyr.setStatus(MapServerUtils.getStatus(false));
1000
                                lyr.setConnectionType("RASTER");
1001

    
1002
                                if (flyrraster.getFileLayer() != null) {
1003
                                        lyr.setData(getCorrectPath(flyrraster.getURI()));
1004
                                } 
1005

    
1006
                                RasterDataStore rasterstore = flyrraster.getDataStore();
1007
                                if(rasterstore != null && rasterstore.getProvider() != null){
1008
                                        RasterProvider provider = (RasterProvider) rasterstore.getProvider();
1009

    
1010

    
1011
                                        String outputName =  flyrraster.getFileFormat();
1012
                                        String extension = flyrraster.getFileFormat();
1013
                                        String mimeType = "";
1014
                                        if(outputName != "WMS" && extension != "WMS"){
1015
                                                mimeType = URLConnection.guessContentTypeFromStream(
1016
                                                                new FileInputStream(flyrraster.getURI()));
1017
                                                if( mimeType == null){
1018
                                                        File f = new File(flyrraster.getURI());
1019
                                                        mimeType = MimetypesFileTypeMap.getDefaultFileTypeMap().getContentType(f);
1020
                                                }
1021
                                        }
1022
                                        String imageMode =  MapServerUtils.getBandTypeName(rasterstore.getBands().getBandsDataType());
1023

    
1024
                                        String[] formats = provider.getFormatList();
1025
                                        Interval interval = provider.getInterval();
1026

    
1027

    
1028
                                        if(provider instanceof GdalProvider){
1029
                                                GdalProvider gdalprovider = (GdalProvider) provider;
1030
                                                int[] tps = gdalprovider.getDataType();
1031

    
1032

    
1033
                                                if(gdalprovider.getNative() != null){
1034
                                                        GdalNative gdalnative =  gdalprovider.getNative();
1035

    
1036
                                                        outputName = gdalnative.getDriverShortName();
1037
                                                        if(!StringUtils.isBlank(outputName)){
1038
                                                                if(MapServerUtils.getDefaultOutputFormatByName(outputName) != null){
1039
                                                                        if(isWCSService){
1040
                                                                                addItemProperty(itemType, "wcs_nativeformat", outputName);
1041
                                                                        }
1042
                                                                }
1043
                                                        }
1044

    
1045
                                                        ColorTable colortable = gdalnative.getColorTable();
1046
                                                        int[] types = gdalnative.getDataType();
1047
                                                        String gdalDriver = gdalnative.getGdalShortName();
1048
                                                        //                                                        STRING[] METADATS = PROVIDER.GETMETADATA().GETMETADATASTRING();
1049
                                                        //                                                                METADATS[0] = TIFFTAG_IMAGEDESCRIPTION:?XS1 XS2 XS3 SWIR
1050
                                                        //                                                                METADATS[1] = TIFFTAG_DATETIME:?2009:10:06 20:20:01
1051

    
1052
                                                }
1053

    
1054
                                                if(isWCSService){
1055
                                                        addItemProperty(itemType, "wcs_bandcount", provider.getBandCount()+"");
1056
                                                        String bandNames = "";
1057
                                                        ColorInterpretation colorint = provider.getColorInterpretation();
1058
                                                        for(int ci = 0; ci < colorint.length(); ci ++){
1059
                                                                String color = colorint.get(ci);
1060
                                                                bandNames = bandNames + " " + color;
1061
                                                        }
1062
                                                        if(!StringUtils.isBlank(bandNames)){
1063
                                                                addItemProperty(itemType, "wcs_band_names", bandNames);
1064
                                                        }
1065

    
1066
                                                        if(!StringUtils.isBlank(imageMode)){
1067
                                                                addItemProperty(itemType, "wcs_imagemode", imageMode);
1068
                                                        }
1069
                                                        addItemProperty(itemType, "wcs_size", provider.getWidth() + " " + provider.getHeight());
1070

    
1071

    
1072

    
1073
                                                        for(int bi = 0; bi < rasterstore.getBandCount(); bi++){
1074

    
1075
                                                                OutputFormat aux = MapServerUtils.getDefaultOutputFormatByExtension(extension);
1076
                                                                MapserverToDynObjectHelper helper = new MapserverToDynObjectHelper();
1077
                                                                DynObject dynOutputFormat = helper.createOutputFormat(aux);
1078
                                                                OutputFormat outputFormat = helper.createOutputFormat(dynOutputFormat);
1079
                                                                if(outputFormat == null){
1080
                                                                        outputFormat = new OutputFormat();
1081
                                                                        outputFormat.setExtension(extension);
1082
                                                                        outputFormat.setTransparent(StateEnum.OFF);
1083
                                                                        outputFormat.setMimeType(mimeType);
1084
                                                                        outputFormat.setImageMode(imageMode);
1085
                                                                }
1086

    
1087
                                                                outputFormat.setName(
1088
                                                                                MapServerUtils.createUniqueOutputFormatName(auxOutputEdited, outputName));
1089
                                                                //outputFormat.setImageMode(imageMode);
1090
                                                                outputFormat.setImageMode(
1091
                                                                                MapServerUtils.getBandTypeName(rasterstore.getBands().getBand(bi).getDataType()));
1092

    
1093
                                                                //                                                        System.out.println("Info del documento:\n" + flyrraster.getURI() );
1094
                                                                //                                                        System.out.println("   Name: " + outputFormat.getName());
1095
                                                                //                                                        System.out.println("   Extensi?n: " + outputFormat.getExtension());
1096
                                                                //                                                        System.out.println("   Mime-type: " + outputFormat.getMimeType());
1097
                                                                //                                                        System.out.println("   Driver: " + outputFormat.getDriver());
1098
                                                                //                                                        System.out.println("   ImageMode: " + outputFormat.getImageMode());
1099
                                                                //                                                        System.out.println("   FormatOption: ----" );
1100
                                                                //                                                        System.out.println("   Transparent: OFF" );
1101

    
1102
                                                                this.auxOutputEdited.add(outputFormat);
1103
                                                        }
1104
                                                }
1105
                                        }
1106
                                }
1107
                                if (layer instanceof FLyrWMS) {
1108
                                        FLyrWMS flyrWMS = (FLyrWMS) layer;
1109
                                        RasterDataStore store = flyrWMS.getDataStore();
1110
                                        if(store != null){
1111
                                                IProjection proj = store.getProjection();
1112
                                                if(lyr.getProjection().isEmpty() && proj != null){
1113
                                                        lyr.getProjection().add(
1114
                                                                        getCorrectProjection(proj.getAbrev()));
1115
                                                }
1116
                                                //                                                        String name2 = store.getFullName();
1117
                                                //                                                        int index1 = name2.indexOf("[");
1118
                                                //                                                        int index2 = name2.indexOf("]");
1119
                                                //                                                        if(index1 >= 0 && index2 >= 0 && index1 < index2){
1120
                                                //                                                                lyr.setName(name2.substring(index1+1, index2));
1121
                                                //                                                        }else{
1122
                                                //                                                                lyr.setName(name2);
1123
                                                //                                                        }
1124
                                        }
1125
                                        //lyr.setName(flyrWMS.getName());
1126
                                        lyr.setStatus("OFF");
1127
                                        lyr.setConnectionType("WMS");
1128
                                        WMSServerExplorer explorer = (WMSServerExplorer) rasterstore
1129
                                                        .getExplorer();
1130
                                        lyr.setConnection(MapServerUtils.getHostWithoutParametersFromURL(explorer.getHost()));
1131
                                        if (isWMSService) {
1132
                                                if(store != null){
1133
                                                        String name2 = store.getFullName();
1134
                                                        int index1 = name2.indexOf("[");
1135
                                                        int index2 = name2.indexOf("]");
1136
                                                        if(index1 >= 0 && index2 >= 0 && index1 < index2){
1137
                                                                replaceItemProperty(itemType, "wms_name", name2.substring(index1+1, index2));
1138
                                                        }
1139
                                                }
1140
                                                addItemProperty(itemType, "wms_onlineresource", 
1141
                                                                MapServerUtils.getHostWithoutParametersFromURL(explorer.getHost()));
1142
                                        }
1143
                                        addItemProperty(itemType, "wms_server_version", "1.1.1");
1144
                                        if(lyr.getProjection().isEmpty()){
1145
                                                addItemProperty(itemType, "wms_srs", "AUTO");
1146
                                        }
1147

    
1148
                                        WMSDataParameters wmsparams = flyrWMS.getParameters();
1149
                                        if (wmsparams.getStyles() != null) {
1150
                                                Iterator it4 = wmsparams.getStyles().iterator();
1151
                                                while (it4.hasNext()) {
1152
                                                        RemoteWMSStyle wmsStyle = (RemoteWMSStyle) it4
1153
                                                                        .next();
1154
                                                        if(wmsStyle != null && wmsStyle.getParent() != null){
1155
                                                                lyr.setName(wmsStyle.getParent().getName());
1156

    
1157
                                                                if (isWMSService) {
1158
                                                                        //replaceItemProperty(itemType, "wms_title", wmsStyle.getParent().getTitle());
1159
                                                                        addIfNotExistsItemProperty(itemType, "wms_name", wmsStyle.getParent().getName());
1160
                                                                        replaceItemProperty(itemType, "wms_abstract", wmsStyle.getParent().getAbstract());
1161
                                                                        replaceItemProperty(itemType, "wms_extent", extent);
1162

    
1163
                                                                        if (wmsparams.getDynValue("srsstr") != null
1164
                                                                                        && wmsparams.getDynValue("srsstr") instanceof String) {
1165
                                                                                replaceItemProperty(itemType, "wms_srs", (String) wmsparams
1166
                                                                                                .getDynValue("srsstr"));
1167
                                                                        }
1168
                                                                }
1169

    
1170
                                                                if (isWFSService) {
1171
                                                                        //addItemProperty(itemType, "wfs_title", wmsStyle.getParent().getTitle());
1172
                                                                        replaceItemProperty(itemType, "wfs_typename", wmsStyle.getParent().getName());
1173
                                                                        replaceItemProperty(itemType, "wfs_abstract", wmsStyle.getParent().getAbstract());
1174
                                                                        replaceItemProperty(itemType, "wfs_extent", extent);
1175

    
1176
                                                                        if (wmsparams.getDynValue("srsstr") != null
1177
                                                                                        && wmsparams.getDynValue("srsstr") instanceof String) {
1178
                                                                                addItemProperty(itemType, "wfs_srs", (String) wmsparams
1179
                                                                                                .getDynValue("srsstr"));
1180
                                                                        }
1181
                                                                }
1182
                                                        }
1183

    
1184
                                                        if(explorer.getVersion() == "1.1.1" || 
1185
                                                                        explorer.getVersion() == "1.0.0"){
1186
                                                                replaceItemProperty(itemType, "wms_server_version", explorer.getVersion());
1187
                                                        }
1188
                                                        addItemProperty(itemType, "wms_format", wmsparams.getFormat());
1189
                                                }
1190
                                        }
1191
                                }
1192
                        }
1193
                } catch (ValidateDataParametersException e) {
1194
                        // TODO Auto-generated catch block
1195
                        e.printStackTrace();
1196
                } catch (DataException e) {
1197
                        // TODO Auto-generated catch block
1198
                        e.printStackTrace();
1199
                } catch(NoClassDefFoundError e1){
1200
                        logger.info("No est? instalada la extensi?n de raster");
1201
                } catch (Exception e) {
1202
                        // TODO Auto-generated catch block
1203
                        e.printStackTrace();
1204
                }
1205

    
1206
                if (!itemType.getItem().isEmpty()) {
1207
                        lyr.setMetadata(getCorrectMetadata(itemType));
1208
                }
1209

    
1210
                layer.setProperty(MAPSERVER_SYMBOL_PROPERTIES, localSymbolSet);
1211
                mergeSymbolSet(getSymbolSet(), localSymbolSet, PROJECT_MODE);
1212

    
1213
                if(hasLabels){
1214
                        lyr.getProcessing().add("LABEL_NO_CLIP=True");
1215
                }
1216

    
1217
                return lyr;
1218
        }
1219

    
1220

    
1221

    
1222
        private void getMapClass(
1223
                        FLayer layer, 
1224
                        Layer lyr, 
1225
                        SymbolSet localSymbolSet, 
1226
                        ILegend legend,
1227
                        double minScale,
1228
                        double maxScale){
1229
                FLyrVect flyrvect = (FLyrVect) layer;
1230

    
1231
                ISymbol[] syms = null;
1232
                if (legend instanceof IClassifiedLegend) {
1233
                        IClassifiedLegend classLeg = (IClassifiedLegend) legend;
1234
                        syms = classLeg.getSymbols();
1235
                } else {
1236
                        syms = new ISymbol[1];
1237
                        syms[0] = legend.getDefaultSymbol();
1238
                }
1239

    
1240

    
1241
                for (int li = 0; li < syms.length; li++) {
1242
                        ISymbol sy = syms[li];
1243
                        org.gvsig.publish.mapserver641.Class mapClass = new org.gvsig.publish.mapserver641.Class();
1244
                        if(!StringUtils.isBlank(sy.getDescription())){
1245
                                sy.setDescription(sy.getDescription().replace("\"", ""));
1246
                        }
1247
                        if(maxScale != -1){
1248
                                mapClass.setMaxScaleDenom(maxScale);
1249
                        }
1250
                        if(minScale != -1){
1251
                                mapClass.setMinScaleDenom(minScale);
1252
                        }
1253

    
1254
                        try{
1255
                                if (legend instanceof IClassifiedVectorLegend && 
1256
                                                !(legend instanceof VectorFilterExpressionLegend)) {
1257
                                        IClassifiedVectorLegend classvectLeg = (IClassifiedVectorLegend) legend;
1258
                                        if(classvectLeg.getClassifyingFieldNames().length > 0){
1259
                                                lyr.setClassItem(classvectLeg.getClassifyingFieldNames()[0]);
1260
                                        }
1261
                                        ExpressionType expression = new ExpressionType();
1262
                                        expression.setType("String");
1263
                                        expression.setValue("\"" + sy.getDescription() + "\""); 
1264
                                        List<ISymbol> symbolsleg = Arrays.asList(classvectLeg.getSymbols());
1265
                                        int indexleg = symbolsleg.indexOf(sy);
1266
                                        if(indexleg >= 0){
1267
                                                Object[] values = classvectLeg.getValues();
1268
                                                Object value = classvectLeg.getValues()[indexleg];
1269
                                                if(value instanceof Double){
1270
                                                        Double doublevalue = (Double) value;
1271
                                                        long longvalue = doublevalue.longValue();
1272
                                                        if(doublevalue == longvalue){
1273
                                                                String x = String.valueOf(doublevalue.longValue());
1274
                                                                expression.setValue("\"" + x + "\"");
1275
                                                        }else{
1276
                                                                expression.setValue("\"" + doublevalue.toString() + "\"");
1277
                                                        }
1278
                                                }else{
1279
                                                        expression.setValue("\"" + value + "\"");
1280
                                                }
1281
                                        }
1282
                                        mapClass.setExpression(expression);
1283
                                }
1284

    
1285
                                if (legend instanceof VectorFilterExpressionLegend) {
1286
                                        VectorFilterExpressionLegend expressionLegend = (VectorFilterExpressionLegend) legend;
1287
                                        Object[] values = expressionLegend.getValues();
1288
                                        if(values.length > li){
1289
                                                ExpressionType expression = new ExpressionType();
1290
                                                expression.setType("String");
1291
                                                expression.setValue("\"" + values[li].toString().replace("\"", "") + "\""); 
1292
                                                mapClass.setExpression(expression);
1293
                                        }
1294
                                }
1295
                        }
1296
                        catch(NoClassDefFoundError e1){
1297
                                logger.info("No est? instalada la extensi?n de base legends (org.gvsig.legend.vectorfilterexpression.app.mainplugin)");
1298
                                if (legend instanceof IClassifiedVectorLegend) {
1299
                                        IClassifiedVectorLegend classvectLeg = (IClassifiedVectorLegend) legend;
1300
                                        if(classvectLeg.getClassifyingFieldNames().length > 0){
1301
                                                lyr.setClassItem(classvectLeg.getClassifyingFieldNames()[0]);
1302
                                        }
1303
                                }
1304
                        }
1305

    
1306

    
1307
                        //Label label = new Label();
1308

    
1309

    
1310
                        if(sy instanceof IMultiLayerSymbol){
1311
                                IMultiLayerSymbol multisy = (IMultiLayerSymbol) sy;
1312
                                for(int fv=0; fv < multisy.getLayerCount();  fv++){
1313
                                        mapClass = createMapClassObject(multisy.getLayer(fv), mapClass, localSymbolSet, layer, lyr, li);
1314
                                }
1315
                        }else{
1316
                                mapClass = createMapClassObject(sy, mapClass, localSymbolSet, layer, lyr, li);
1317
                        }
1318

    
1319
                        lyr.getClazz().add(mapClass);
1320

    
1321
                        ILabelingStrategy labelingStrategy = flyrvect
1322
                                        .getLabelingStrategy();
1323
                        if (labelingStrategy != null){
1324
                                if (labelingStrategy.getUsedFields().length > 0) {
1325
                                        if(flyrvect.isLabeled()){
1326

    
1327
                                                lyr.setLabelItem(labelingStrategy.getUsedFields()[0]);
1328
                                                ILabelingMethod labelingMethod = labelingStrategy
1329
                                                                .getLabelingMethod();
1330

    
1331
                                                //                                                IZoomConstraints zoomConstraints = labelingStrategy.getZoomConstraints();
1332
                                                //                                                if(zoomConstraints != null){
1333
                                                //                                                        mapClass.setMaxScaleDenom((double) zoomConstraints.getMaxScale());
1334
                                                //                                                        mapClass.setMinScaleDenom((double) zoomConstraints.getMinScale());
1335
                                                //                                                }
1336

    
1337

    
1338

    
1339
                                                if(labelingStrategy instanceof IAttrInTableLabelingStrategy){
1340
                                                        Label label = new Label();
1341
                                                        label.setPosition("uc");
1342
                                                        if (sy instanceof ISimpleTextSymbol) {
1343
                                                                ISimpleTextSymbol stextSym = (ISimpleTextSymbol) sy;
1344
                                                                label.setAngle(stextSym.getRotation() + "");
1345
                                                        }
1346
                                                        IPlacementConstraints placementConstraints = labelingStrategy.getPlacementConstraints();
1347
                                                        if(placementConstraints != null){
1348
                                                                String npos = MapServerUtils.getPositionFromPlacementConstraints(placementConstraints);
1349
                                                                if(npos != null){
1350
                                                                        label.setPosition(npos);
1351
                                                                }
1352
                                                                String nang = MapServerUtils.getAngleFromPlacementConstraints(placementConstraints);
1353
                                                                if(nang != null){
1354
                                                                        label.setAngle(nang);
1355
                                                                }
1356
                                                        }
1357
                                                        IAttrInTableLabelingStrategy attr = (IAttrInTableLabelingStrategy) labelingStrategy;
1358
                                                        if(attr.getColorFont() != null){
1359
                                                                label.setColor(MapServerUtils.getRgbColorType(attr.getColorFont()));
1360
                                                        }else{
1361
                                                                if(attr.getFixedColor() != null){
1362
                                                                        label.setColor(MapServerUtils.getRgbColorType(attr.getFixedColor()));
1363
                                                                }
1364
                                                        }
1365

    
1366
                                                        label.setFont(getFontName(attr.getFont().getName()));
1367
                                                        usesFont = true;
1368
                                                        label.setSize(attr.getFont().getSize() + "");
1369
                                                        if(attr.getFixedSize() >0 && attr.getFixedSize() > attr.getFont().getSize()){
1370
                                                                label.setSize(attr.getFixedSize()+"");
1371
                                                        }
1372
                                                        label.setText("["+labelingStrategy.getUsedFields()[0]+"]");
1373
                                                        label.setType("TRUETYPE");
1374
                                                        label.setWrap(" ");
1375
                                                        label.setMaxLength(MapServerUtils.getBigInteger(15));
1376
                                                        label.setAlign(AlignEnum.LEFT);
1377
                                                        
1378
                                                        SizeType labelOffset = new SizeType();
1379
                                                        labelOffset.setX(MapServerUtils.getBigInteger(0));
1380
                                                        labelOffset.setY(MapServerUtils.getBigInteger(9));
1381
                                                        label.setOffset(labelOffset);
1382
                                                        label.setPartials(BooleanEnum.FALSE);
1383
                                                        label.setForce(BooleanEnum.FALSE);
1384

    
1385
                                                        ILabelClass[] labelClasses = attr.getLabelingMethod().getLabelClasses();
1386
                                                        for(int i=0; i<labelClasses.length; i++){
1387
                                                                ILabelClass labelClass = (ILabelClass) labelClasses[i];
1388
                                                                if(labelClass instanceof DefaultComplexLabelClass){
1389
                                                                        DefaultComplexLabelClass clabelClass = (DefaultComplexLabelClass) labelClass;
1390
                                                                        if(!(clabelClass.getMaxScale() < 0 || clabelClass.getMaxScale() == 1000000001)){
1391
                                                                                label.setMaxScaleDenom(Double.toString(clabelClass.getMaxScale()));
1392
                                                                        }
1393
                                                                        if(!(clabelClass.getMinScale() < 0)){
1394
                                                                                label.setMinScaleDenom(Double.toString(clabelClass.getMinScale()));
1395
                                                                        }
1396
                                                                }
1397

    
1398
                                                        }
1399

    
1400
                                                        if(label.getText() != null && !label.getText().equals("[]") && !label.getText().equals("")){
1401
                                                                mapClass.getLabel().add(label);
1402
                                                        }else{
1403
                                                                if(label.getText() == null){
1404
                                                                        mapClass.getLabel().add(label);
1405
                                                                }
1406
                                                        }
1407
                                                        hasLabels = true;
1408
                                                }else{
1409

    
1410
                                                        for (int fg = 0; fg < labelingMethod.getLabelClasses().length; fg++) {
1411
                                                                Label label = new Label();
1412
                                                                label.setPosition("uc");
1413
                                                                if (sy instanceof ISimpleTextSymbol) {
1414
                                                                        ISimpleTextSymbol stextSym = (ISimpleTextSymbol) sy;
1415
                                                                        label.setAngle(stextSym.getRotation() + "");
1416
                                                                }
1417
                                                                IPlacementConstraints placementConstraints = labelingStrategy.getPlacementConstraints();
1418
                                                                if(placementConstraints != null){
1419
                                                                        String npos = MapServerUtils.getPositionFromPlacementConstraints(placementConstraints);
1420
                                                                        if(npos != null){
1421
                                                                                label.setPosition(npos);
1422
                                                                        }
1423
                                                                        String nang = MapServerUtils.getAngleFromPlacementConstraints(placementConstraints);
1424
                                                                        if(nang != null){
1425
                                                                                label.setAngle(nang);
1426
                                                                        }
1427
                                                                }
1428
                                                                ILabelClass labelClass = labelingMethod
1429
                                                                                .getLabelClasses()[fg];
1430
                                                                ITextSymbol textLabel = labelClass.getTextSymbol();
1431
                                                                label.setColor(MapServerUtils.getRgbColorType(textLabel.getColor()));
1432
                                                                //                                                        label.setMaxSize(MapServerUtils.getBigInteger(textLabel.getBounds()
1433
                                                                //                                                                        .getWidth()));
1434
                                                                label.setFont(getFontName(textLabel.getFont().getName()));
1435
                                                                usesFont = true;
1436
                                                                label.setSize(textLabel.getFont().getSize() + "");
1437
                                                                if(textLabel.isDrawWithHalo()){
1438
                                                                        label.setOutlineColor(MapServerUtils.getRgbColorType(textLabel
1439
                                                                                        .getHaloColor()));
1440
                                                                        label.setOutlineWidth(MapServerUtils.getBigInteger(textLabel
1441
                                                                                        .getHaloWidth()));
1442
                                                                }
1443
                                                                label.setWrap(" ");
1444
                                                                label.setMaxLength(MapServerUtils.getBigInteger(15));
1445
                                                                label.setAlign(AlignEnum.LEFT);
1446
                                                                
1447
                                                                label.setType("TRUETYPE");
1448
                                                                SizeType labelOffset = new SizeType();
1449
                                                                labelOffset.setX(MapServerUtils.getBigInteger(0));
1450
                                                                labelOffset.setY(MapServerUtils.getBigInteger(9));
1451
                                                                label.setOffset(labelOffset);
1452
                                                                label.setPartials(BooleanEnum.FALSE);
1453
                                                                label.setForce(BooleanEnum.FALSE);
1454
                                                                if(labelClass.getLabelExpressions().length>0){
1455
                                                                        label.setText("["+labelClass.getLabelExpressions()[0]+"]");
1456
                                                                }
1457

    
1458
                                                                if(labelClass instanceof DefaultComplexLabelClass){
1459
                                                                        DefaultComplexLabelClass clabelClass = (DefaultComplexLabelClass) labelClass;
1460
                                                                        if(!(clabelClass.getMaxScale() < 0 || clabelClass.getMaxScale() == 1000000001)){
1461
                                                                                label.setMaxScaleDenom(Double.toString(clabelClass.getMaxScale()));
1462
                                                                        }
1463
                                                                        if(!(clabelClass.getMinScale() < 0)){
1464
                                                                                label.setMinScaleDenom(Double.toString(clabelClass.getMinScale()));
1465
                                                                        }
1466
                                                                }
1467

    
1468

    
1469
                                                                if(label.getText() != null && !label.getText().equals("[]") && !label.getText().equals("")){
1470
                                                                        mapClass.getLabel().add(label);
1471
                                                                }else{
1472
                                                                        if(label.getText() == null){
1473
                                                                                mapClass.getLabel().add(label);
1474
                                                                        }
1475
                                                                }
1476
                                                                lyr.setLabelCache(StateEnum.ON);
1477
                                                                hasLabels = true;
1478
                                                        }
1479
                                                }
1480
                                        }
1481
                                }
1482
                        }
1483
                }
1484

    
1485
        }
1486

    
1487

    
1488
        private org.gvsig.publish.mapserver641.Class createMapClassObject(ISymbol sy, 
1489
                        org.gvsig.publish.mapserver641.Class mapClass, SymbolSet localSymbolSet, FLayer layer, Layer lyr, int li){
1490
                MapserverSymbol mapserverSymbol = null;
1491
                List<Style> classStyles = null;
1492
                Symbol symbolStyle = null;
1493

    
1494
                mapserverSymbol = toMapserver(sy);
1495
                classStyles = mapserverSymbol.getStyle();
1496
                symbolStyle = mapserverSymbol.getSymbol();
1497

    
1498
                String symbolName = symbolStyle.getName();
1499
                if(StringUtils.isBlank(symbolStyle.getName())){
1500
                        if (StringUtils.isBlank(sy.getDescription())) {
1501
                                symbolName = layer.getName();
1502
                        } else {
1503
                                symbolName = layer.getName() + "-" + sy.getDescription();
1504
                        }
1505
                        symbolName = MapServerUtils.createUniqueSymbolName(localSymbolSet, symbolName);
1506
                }
1507

    
1508
                mapserverSymbol.getSymbol().setName(symbolName);
1509
                SymbolType stype = new SymbolType();
1510
                stype.setType("String");
1511
                stype.setValue("\"" + symbolName + "\"");
1512

    
1513
                /**
1514
                 * CLASS PARAMETERS
1515
                 */
1516
                for(int is =0; is<classStyles.size(); is++){
1517
                        if (sy instanceof IPictureMarkerSymbol) {
1518
                                usesImages = true;
1519
                        }
1520

    
1521
                        if (!StringUtils.isBlank(sy.getDescription())) {
1522
                                mapClass.setName(sy.getDescription());
1523
                        } else {
1524
                                String className = MapServerUtils.getNameWithoutExtension(layer.getName());
1525
                                if (li > 0) {
1526
                                        className += "-" + li;
1527
                                }
1528
                                mapClass.setName(className);
1529
                        }
1530

    
1531
                        if (sy instanceof IMarkerSymbol) {
1532
                                IMarkerSymbol markSym = (IMarkerSymbol) sy;
1533
                                mapClass.setSize(MapServerUtils.getBigInteger(markSym.getSize()));
1534
                        }
1535

    
1536
                        mapClass.setStatus(MapServerUtils.getStateEnumSymbol(sy.isShapeVisible()));
1537

    
1538

    
1539
                        if (sy instanceof ITextSymbol) {
1540
                                ITextSymbol textSym = (ITextSymbol) sy;
1541
                                // mapClass.setText(textSym.getText());
1542

    
1543
                                // LabelLeader lleader = new LabelLeader();
1544
                                // lleader.setGridstep(getBigInteger(5));
1545
                                // lleader.setMaxdistance(getBigInteger(10));
1546
                                // Style lleaderStyle = new Style();
1547
                                // lleaderStyle.setColor(getRgbColorType(Color.RED));
1548
                                // lleaderStyle.setWidth("1");
1549
                                // lleader.getStyle().add(lleaderStyle);
1550
                                // mapClass.setLabelLeader(lleader);
1551
                                Label label = new Label();
1552
                                label.setColor(MapServerUtils.getRgbColorType(textSym.getColor()));
1553
                                //                                label.setMaxSize(MapServerUtils.getBigInteger(textSym.getBounds()
1554
                                //                                                .getWidth()));
1555
                                label.setFont(getFontName(textSym.getFont().getName()));
1556
                                usesFont = true;
1557
                                label.setSize(textSym.getFont().getSize() + "");
1558
                                label.setOutlineColor(MapServerUtils.getRgbColorType(textSym
1559
                                                .getHaloColor()));
1560
                                label.setOutlineWidth(MapServerUtils.getBigInteger(textSym.getHaloWidth()));
1561
                                // label.setText(textSym.getText());
1562
                                label.setType("TRUETYPE");
1563
                                label.setWrap(" ");
1564
                                label.setMaxLength(MapServerUtils.getBigInteger(15));
1565
                                label.setAlign(AlignEnum.LEFT);
1566
                                label.setPosition("uc");
1567
                                SizeType labelOffset = new SizeType();
1568
                                labelOffset.setX(MapServerUtils.getBigInteger(0));
1569
                                labelOffset.setY(MapServerUtils.getBigInteger(9));
1570
                                label.setOffset(labelOffset);
1571
                                label.setPartials(BooleanEnum.FALSE);
1572

    
1573
                                if (sy instanceof ISimpleTextSymbol) {
1574
                                        ISimpleTextSymbol stextSym = (ISimpleTextSymbol) sy;
1575
                                        label.setAngle(stextSym.getRotation() + "");
1576
                                }
1577
                                if(label.getText() != null && !label.getText().equals("[]") && !label.getText().equals("")){
1578
                                        mapClass.getLabel().add(label);
1579
                                }else{
1580
                                        if(label.getText() == null){
1581
                                                mapClass.getLabel().add(label);
1582
                                        }
1583
                                }
1584
                                hasLabels = true;
1585
                        }
1586

    
1587
                        if (classStyles.get(is).getSymbol() == null
1588
                                        && lyr.getType() == "POINT"
1589
                                        && StringUtils.isBlank(symbolStyle.getImage())
1590
                                        && StringUtils.isBlank(symbolStyle.getType())) {
1591
                                // Defino el Punto por defecto
1592
                                if (StringUtils.isBlank(symbolName)) {
1593
                                        symbolName = MapServerUtils.getNameWithoutExtension(lyr.getName()) + "-sym";
1594
                                }
1595

    
1596
                                symbolStyle.setName(symbolName);
1597
                                symbolStyle.setFilled(BooleanEnum.TRUE);
1598
                                symbolStyle.setType("ellipse");
1599
                                Points points = new Points();
1600
                                PointType pointType = new PointType();
1601
                                pointType.setX((float) 1);
1602
                                pointType.setY((float) 1);
1603
                                points.getPoint().add(pointType);
1604
                                symbolStyle.setPoints(points);
1605

    
1606
                                SymbolType syty = new SymbolType();
1607
                                stype.setType("String");
1608
                                stype.setValue("\"" + symbolName + "\"");
1609
                                if(StringUtils.isBlank(classStyles.get(is).getSize())){
1610
                                        classStyles.get(is).setSize("4");
1611
                                }
1612
                                if(!StringUtils.isBlank(syty.getValue())){
1613
                                        classStyles.get(is).setSymbol(syty);
1614
                                }
1615
                        }
1616

    
1617

    
1618
                        if (!StringUtils.isBlank(symbolStyle.getType())) {
1619
                                String name = null;
1620
                                // Busco si existe en el SymbolSet general
1621
                                if(!this.isPropertiesPanel ){
1622
                                        for(int j=0; j<getSymbolSet().getSymbol().size(); j++){
1623
                                                name = MapserverToDynObjectHelper.equals(getSymbolSet().getSymbol().get(j), symbolStyle);
1624
                                        }
1625
                                }
1626
                                if( name == null){
1627
                                        //Busco coincidencias en el symbolset local
1628
                                        for(int k=0; k<localSymbolSet.getSymbol().size(); k++){
1629
                                                name = MapserverToDynObjectHelper.equals(localSymbolSet.getSymbol().get(k), symbolStyle);
1630
                                        }
1631
                                        //Si no hay coincidencias, a?ado al local
1632
                                        if(name == null){
1633
                                                name = symbolStyle.getName();
1634
                                                localSymbolSet.getSymbol().add(symbolStyle);
1635
                                        }
1636
                                }
1637

    
1638

    
1639
                                if(!StringUtils.isBlank(name)){
1640
                                        stype.setValue("\"" + name + "\"");
1641
                                        classStyles.get(is).setSymbol(stype);
1642
                                        usesSymbols = true;
1643
                                }
1644

    
1645
                        }
1646

    
1647
                        //                        if(!StringUtils.isBlank(symbolStyle.getType()) && 
1648
                        //                                        (symbolStyle.getType().equalsIgnoreCase("svg") || 
1649
                        //                                        symbolStyle.getType().equalsIgnoreCase("pixmap"))){
1650
                        //                                MapserverToDynObjectHelper helper = new MapserverToDynObjectHelper();
1651
                        //                                DynObject newDynStyle = helper.createStyle(classStyles.get(is));
1652
                        //                                Style newStyle = new Style();
1653
                        //                                helper.copyTo(newDynStyle, newStyle);
1654
                        //                                
1655
                        //                                
1656
                        //                                newStyle.setSymbol(null);
1657
                        //                                classStyles.get(is).setColor(null);
1658
                        //                                classStyles.get(is).setOutlineColor(null);
1659
                        //                                
1660
                        //                                mapClass.getStyle().remove(symbolStyle);
1661
                        //                                mapClass.getStyle().add(newStyle);
1662
                        //                        }
1663

    
1664
                        mapClass.getStyle().add(classStyles.get(is));
1665

    
1666
                }
1667

    
1668
                return mapClass;
1669
        }
1670

    
1671

    
1672

    
1673
        private String getMapserverTypeName(DataType type) {
1674
                switch(type.getType()){
1675
                case DataTypes.BOOLEAN:
1676
                        return "xsd:boolean";
1677
                case DataTypes.DATE:
1678
                        return "xsd:date";
1679
                case DataTypes.INT:
1680
                case DataTypes.LONG:
1681
                        return "xsd:integer";
1682
                case DataTypes.DOUBLE:
1683
                case DataTypes.FLOAT:
1684
                        return "xsd:double";
1685
                case DataTypes.STRING:
1686
                        return "xsd:string";
1687
                }
1688
                return "xsd:string";
1689
        }
1690

    
1691
        public PublishProperties getPublishProperties() {
1692
                return properties;
1693
        }
1694

    
1695

    
1696

    
1697
        public boolean createWMSProject(){
1698
                boolean exit = true;
1699
                if(!StringUtils.isBlank(getPublishProperties().getMapFile())){
1700
                        String servicePath = "";
1701
                        if(getPublishProperties().isWMSService()){
1702
                                servicePath = File.separator + WMS_PATH;
1703
                                exit = exit && createFile(servicePath);
1704
                        }
1705
                }
1706
                return exit;
1707
        }
1708

    
1709
        public boolean createWFSProject(){
1710
                boolean exit = true;
1711
                if(!StringUtils.isBlank(getPublishProperties().getMapFile())){
1712
                        String servicePath = "";
1713
                        if(getPublishProperties().isWFSService()){
1714
                                servicePath = File.separator + WFS_PATH;
1715
                                exit = exit && createFile(servicePath);
1716
                        }
1717
                }
1718
                return exit;
1719
        }
1720

    
1721
        public boolean createWCSProject(){
1722
                boolean exit = true;
1723
                if(!StringUtils.isBlank(getPublishProperties().getMapFile())){
1724
                        String servicePath = "";
1725
                        if(getPublishProperties().isWCSService()){
1726
                                servicePath = File.separator + WCS_PATH;
1727
                                exit = exit && createFile(servicePath);
1728
                        }
1729
                }
1730
                return exit;
1731
        }
1732

    
1733
        private boolean createFile(String path){
1734
                file = new File(MapServerUtils.getCorrectFilePathFromUrl(getPublishProperties().getMapFile())
1735
                                + path + File.separator + MAPFILE_FILE);
1736
                File tempFile = null;
1737
                try {
1738
                        tempFile = File.createTempFile("gvSIG-publish-XML-", null);
1739
                } catch (IOException e2) {
1740
                        logger.error("[MapserverPublishService - publish()] Error creating the file: "
1741
                                        + tempFile.getAbsolutePath() + " \n" + e2);
1742
                        return false;
1743
                }
1744
                if (!file.exists()) {
1745
                        try {
1746
                                file.getParentFile().mkdirs();
1747
                                if (hasMapfile()) {
1748
                                        file.createNewFile();
1749
                                }
1750
                        } catch (IOException e) {
1751
                                logger.error("[MapserverPublishService - publish()] Error creating the file: "
1752
                                                + file.getAbsolutePath() + " \n" + e);
1753
                                return false;
1754
                        }
1755
                }else{
1756
                        if (!file.canWrite()) {
1757
                                logger.error("[MapserverPublishService - publish()] Error writing in file: "
1758
                                                + file.getAbsolutePath());
1759
                                return false;
1760
                        }
1761
                }
1762

    
1763
                return true;
1764
        }
1765

    
1766

    
1767
        public Map getPublishedMap(ViewDocument viewDoc) {
1768
                if(viewDoc.getProperty(MAPSERVER_PANEL_PROPERTIES) != null && 
1769
                                viewDoc.getProperty(MAPSERVER_PANEL_PROPERTIES) instanceof Boolean){
1770
                        boolean active = (Boolean) viewDoc.getProperty(MAPSERVER_PANEL_PROPERTIES);
1771
                        if(active){
1772
                                Object prop = viewDoc.getProperty(MAPSERVER_MAP_PROPERTIES);
1773
                                if (prop != null && prop instanceof Map){
1774
                                        Map aux = (Map) viewDoc.getProperty(MAPSERVER_MAP_PROPERTIES);
1775
                                        MapserverToDynObjectHelper helper = new MapserverToDynObjectHelper();
1776
                                        DynObject dynMap = helper.createMap(aux);
1777
                                        isEditedMapFile  = true;
1778
                                        return helper.createMap(dynMap);
1779
                                }
1780
                        }
1781
                }
1782
                return null;
1783
        }
1784

    
1785
        private boolean isSharedWithOtherViews(FLayer layer, Symbol sm) {
1786
                ViewDocument view = MapServerUtils.getViewDocumentFromLayer(layer);
1787
                Object obj = view.getProperty(MAPSERVER_SYMBOL_PROPERTIES);
1788
                if (obj != null && obj instanceof SymbolSet) {
1789
                        SymbolSet sset = (SymbolSet) obj;
1790
                        return isSymbolInSet(sset, sm);
1791
                }else{
1792
                        return isSymbolInSet(getSymbolSet(), sm);
1793
                }
1794
        }
1795

    
1796
        private boolean isSymbolInSet(SymbolSet sset, Symbol sm){
1797
                for (int i = 0; i < sset.getSymbol().size(); i++) {
1798
                        if (sset.getSymbol().get(i).getName() != null && 
1799
                                        sset.getSymbol().get(i).getName().equals(sm.getName()) && 
1800
                                        sset.getSymbol().get(i).getType().equalsIgnoreCase(sm.getType())) {
1801
                                return true;
1802
                        }
1803
                }
1804
                return false;
1805
        }
1806

    
1807
        private SymbolSet getSymbolSet() {
1808
                if (this.symbolset == null) {
1809
                        this.symbolset = new SymbolSet();
1810
                }
1811
                return this.symbolset;
1812
        }
1813

    
1814
        private SymbolSet getSymbolSet(File file) {
1815
                        SymbolSet aux = new SymbolSet();
1816
                                if (this.symbolset != null) {
1817
                                for (int i = 0; i < symbolset.getSymbol().size(); i++) {
1818
                                        
1819
                                        Symbol sym = symbolset.getSymbol().get(i);
1820
                                        MapserverToDynObjectHelper helper = new MapserverToDynObjectHelper();
1821
                                        
1822
                                        
1823
                                        Symbol sym2 = new Symbol();
1824
                                        helper.copyTo(helper.createSymbol(sym), sym2); 
1825
                                        if (sym2.getImage() != null && sym2.getImage() != "") {
1826
                                                if(file != null){
1827
                                                        sym2.setImage(MapServerUtils.relativePath(sym.getImage(), file.getParent()).replace(File.separator, "/"));
1828
                                                }
1829
                                        }
1830
                                        aux.getSymbol().add(sym2);
1831
                                }
1832
                        }        
1833
                        return aux;
1834
        }
1835

    
1836
        private SymbolSet getPublishedSymbol(FLayer layer) {
1837
                if (layer.getProperty(MAPSERVER_SYMBOL_PROPERTIES) != null && 
1838
                                layer.getProperty(MAPSERVER_SYMBOL_PROPERTIES) instanceof SymbolSet){
1839
                        SymbolSet auxSymbols = (SymbolSet) layer.getProperty(MAPSERVER_SYMBOL_PROPERTIES);
1840
                        for(int i=0; i<auxSymbols.getSymbol().size(); i++){
1841
                                Symbol auxSym = auxSymbols.getSymbol().get(i);
1842
                                if(auxSym.getImage() != null && auxSym.getImage() != ""){
1843
                                        usesImages = true;
1844
                                        break;
1845
                                }
1846
                        }
1847
                        return auxSymbols;
1848
                }
1849
                return getSymbolSet();
1850
        }
1851

    
1852
        private File getSymbolSetFile() {
1853
                if (symbolSetFile == null) {
1854
                        symbolSetFile = new File(file.getParentFile()
1855
                                        .getAbsolutePath() + File.separator + SYMBOLSET_FILE);
1856
                }
1857
                return symbolSetFile;
1858
        }
1859

    
1860

    
1861
        /**
1862
         * MAPSERVER UTILS MANIPULATION
1863
         */
1864

    
1865
        private void addItemProperty(ItemType itemType, String name, String value) {
1866
                if(!StringUtils.isBlank(name) && !StringUtils.isBlank(value)){
1867
                        Item item = new Item();
1868
                        item.setName(name);
1869
                        item.setValue(value.trim());
1870
                        itemType.getItem().add(item);
1871
                }
1872
        }
1873

    
1874
        private void replaceItemProperty(ItemType itemType, String name, String value) {
1875
                if(!StringUtils.isBlank(name) && !StringUtils.isBlank(value)){
1876
                        boolean isReplaced = false;
1877
                        for(int i=0; i<itemType.getItem().size(); i++){
1878
                                Item item = itemType.getItem().get(i);
1879
                                if(item.getName() == name){
1880
                                        item.setValue(value);
1881
                                        isReplaced = true;
1882
                                }
1883
                        }
1884
                        if(!isReplaced){
1885
                                addItemProperty(itemType, name, value);
1886
                        }
1887
                }
1888
        }
1889

    
1890
        private void addIfNotExistsItemProperty(ItemType itemType, String name, String value) {
1891
                if(!StringUtils.isBlank(name) && !StringUtils.isBlank(value)){
1892
                        boolean exists = false;
1893
                        for(int i=0; i<itemType.getItem().size(); i++){
1894
                                Item item = itemType.getItem().get(i);
1895
                                if(item.getName() == name){
1896
                                        exists = true;
1897
                                }
1898
                        }
1899
                        if(!exists){
1900
                                addItemProperty(itemType, name, value);
1901
                        }
1902
                }
1903
        }
1904

    
1905
        public String getCorrectProjection(String abrev) {
1906
                if(srs_used == null){
1907
                        srs_used = "";
1908
                }
1909
                if(!srs_used.toLowerCase().contains(abrev.toLowerCase())){
1910
                        srs_used = abrev + " " + srs_used;
1911
                }
1912
                return "init=" + abrev.toLowerCase();
1913
        }
1914

    
1915
        public String getCorrectPath(String fileFormat){
1916
                return getCorrectPath(fileFormat, file);
1917
        }
1918

    
1919
        public String getCorrectPath(String fileFormat, File origen) {
1920
                if (!getPublishProperties().isAbsolutePath()) {
1921
                        if(!getPublishProperties().isDefaultPath() 
1922
                                        && !getPublishProperties().isAbsolutePath()){
1923
                                String spath = getPublishProperties().getShapePath();
1924
                                if(StringUtils.isBlank(getPublishProperties().getShapePath())){
1925
                                        spath = "";
1926
                                }
1927
                                String shapeFile = origen.getParent();
1928
                                if(getPublishProperties().getMapFile().endsWith("/")){
1929
                                        shapeFile = shapeFile + spath;
1930
                                }else{
1931
                                        shapeFile = shapeFile + "/" + spath;
1932
                                }
1933
                                //if(fileFormat.startsWith(getPublishProperties().getShapePath())){
1934
                                fileFormat = MapServerUtils.relativePath(fileFormat, shapeFile);
1935
                                //}
1936
                        }
1937
                }else{
1938
                        if(!getPublishProperties().isDefaultPath()){
1939
                                String localPath = getPublishProperties().getLocalPath();
1940
                                if (localPath != null
1941
                                                && fileFormat.startsWith(getPublishProperties()
1942
                                                                .getLocalPath())) {
1943

    
1944
                                        if (!localPath.endsWith("/")) {
1945
                                                localPath = localPath + "/";
1946
                                        }
1947
                                        String remotePath = getPublishProperties().getRemotePath();
1948
                                        if (!remotePath.endsWith("/")) {
1949
                                                remotePath = remotePath + "/";
1950
                                        }
1951
                                        fileFormat = fileFormat.replace(localPath, remotePath);
1952
                                        //fileFormat = "." + "/" + fileFormat;
1953
                                        //fileFormat = MapServerUtils.getCorrectFilePathFromUrl(fileFormat);
1954
                                }
1955
                        }
1956
                }
1957

    
1958
                return fileFormat;
1959
        }
1960

    
1961
        private MapserverSymbol toMapserver(ISymbol sym) {
1962
                PublishManager manager = PublishLocator.getServiceManager()
1963
                                .getPublishManager();
1964

    
1965
                List<PublishSymbolConverterFactories> facts = manager
1966
                                .getSymbolConverterFactories(sym, NAME);
1967
                Iterator<PublishSymbolConverterFactories> it = facts.iterator();
1968

    
1969
                List<Style> styles = new ArrayList<Style>();
1970
                styles.add(new Style());
1971
                MapserverSymbol symbol = new MapserverSymbol(new Symbol(), styles, new Label());
1972

    
1973
                int maxAccurance = 0;
1974
                while (it.hasNext()) {
1975
                        PublishSymbolConverterFactories fs = (PublishSymbolConverterFactories) it
1976
                                        .next();
1977
                        if (fs.getAccurance() > 0) {
1978
                                if (fs.getFactory().createConverter(sym) instanceof ToMapserverConverter) {
1979
                                        ToMapserverConverter converter = (ToMapserverConverter) fs
1980
                                                        .getFactory().createConverter(sym);
1981
                                        converter.setMapserverService(this);
1982
                                        if (fs.getAccurance() == 100) {
1983
                                                return converter.convert(sym);
1984
                                        } else {
1985
                                                if(fs.getAccurance() > maxAccurance){
1986
                                                        maxAccurance = fs.getAccurance();
1987
                                                        symbol = converter.convert(sym, symbol);
1988
                                                }
1989
                                        }
1990
                                }
1991
                        }
1992
                }
1993

    
1994
                return symbol;
1995
        }
1996

    
1997
        public void setOverrideFiles(String b) {
1998
                this.overrideFiles = b;
1999
        }
2000

    
2001
        public String getOverrideFiles() {
2002
                return this.overrideFiles;
2003
        }
2004

    
2005
        public File getCurrentFile() {
2006
                return file;
2007
        }
2008

    
2009
        public void resetCurrentFile(){
2010
                setCurrentFile(null);
2011
        }
2012

    
2013
        public void setCurrentFile(File f) {
2014
                file = f;
2015
        }
2016

    
2017
        private File createMapFile(File file2, String name2) {
2018
                int loop = 1;
2019
                String end = "";
2020
                File f = new File(file2.getParent() + File.separator + name2 + ".map");
2021
                while(f.exists()){
2022
                        if(loop > 1){
2023
                                end = "-" + loop;
2024
                        }
2025
                        f = new File(file2.getParent() + File.separator + name2 +  end+ ".map");
2026
                        loop++;
2027
                }
2028
                return f;
2029
        }
2030

    
2031
        private File createSymbolSetFile(File file2, String name2) {
2032
                int loop = 1;
2033
                String end = "";
2034
                File f = new File(file2.getParent() + File.separator + name2 + "-sym.map");
2035
                while(f.exists()){
2036
                        if(loop > 1){
2037
                                end = "-" + loop;
2038
                        }
2039
                        f = new File(file2.getParent() + File.separator + name2 + "-sym"+ end+ ".map");
2040
                        loop++;
2041
                }
2042
                return f;
2043
        }
2044

    
2045
        private File getFontSetFile() {
2046
                if (fontSetFile == null && file != null) {
2047
                        fontSetFile = new File(file.getParentFile()
2048
                                        .getAbsolutePath() + File.separator + FONTSET_FILE);
2049
                        if(!fontSetFile.exists()){
2050
                                try {
2051
                                        fontSetFile.createNewFile();
2052
                                } catch (IOException e) {
2053
                                        logger.warn("Error creating FontSet.txt file ", e);
2054
                                }
2055
                        }
2056
                }
2057
                return fontSetFile;
2058
        }
2059

    
2060
        private void mergeLayerDefinition(File file2, Map map, List<Layer> layerList, int layerMode) {
2061
                switch(layerMode){
2062
                case LAYER_MODE:
2063
                        //
2064

    
2065
                        break;
2066
                case PROJECT_MODE:
2067
                        for(int i=0; i<map.getInclude().size(); i++){
2068
                                String auxPath = map.getInclude().get(i).replace("//", File.separator);
2069
                                File auxFile = new File(file2.getParentFile()
2070
                                                .getAbsolutePath() + File.separator + auxPath);
2071

    
2072
                                LayerSet auxLayerSet = (LayerSet) parserFile(auxFile, new LayerSet());
2073
                                boolean auxLayersModified = false;
2074
                                boolean dontShow = false;
2075
                                int n = -1;
2076
                                for(int j=auxLayerSet.getLayer().size()-1; j>=0; j--){
2077
                                        Layer auxLayer = auxLayerSet.getLayer().get(j);
2078
                                        for(int k=layerList.size()-1; k>=0; k--){
2079
                                                Layer auxCurrentLayer = layerList.get(k);
2080
                                                if(auxLayer.getName().equals(auxCurrentLayer.getName())){
2081
                                                        if(!dontShow){
2082
                                                                PublishManager manager = getPublishProperties().getManager();
2083
                                                                Object[] options = {manager.getTranslation("keep_previous"), manager.getTranslation("update_to_new"),
2084
                                                                                manager.getTranslation("keep_both")};
2085

    
2086
                                                                JCheckBox checkbox = new JCheckBox(manager.getTranslation("not_again"));
2087
                                                                String message = auxPath+" "+
2088
                                                                                manager.getTranslation("layer_exists3")+
2089
                                                                                " '"+ auxCurrentLayer.getName() +"'\n"+
2090
                                                                                manager.getTranslation("layer_exists2");
2091
                                                                Object[] params = {message, checkbox};
2092

    
2093
                                                                n = JOptionPane.showOptionDialog(null,
2094
                                                                                params,
2095
                                                                                manager.getTranslation("layer_exists"),
2096
                                                                                JOptionPane.YES_NO_OPTION,
2097
                                                                                JOptionPane.WARNING_MESSAGE,
2098
                                                                                null,
2099
                                                                                options,
2100
                                                                                options[0]);
2101

    
2102

    
2103
                                                                dontShow = checkbox.isSelected();
2104
                                                        }
2105

    
2106
                                                        if(n==0){
2107
                                                                layerList.remove(auxCurrentLayer);
2108
                                                        }
2109

    
2110
                                                        if(n==1){
2111
                                                                auxLayerSet.getLayer().remove(auxLayer);
2112
                                                                auxLayersModified = true;
2113
                                                        }
2114
                                                }
2115
                                        }
2116
                                }
2117
                                if(auxLayerSet.getLayer().size()==0){
2118
                                        map.getInclude().remove(i);
2119
                                        i = i--;
2120
                                }
2121

    
2122
                                if(auxLayersModified){
2123
                                        parserFile(auxLayerSet, auxFile);
2124
                                }
2125

    
2126

    
2127
                        }
2128
                        break;
2129
                }
2130
        }
2131

    
2132
        private void mergeSymbolSet(SymbolSet symbolSet, SymbolSet localSymbolSet, int layerMode) {
2133
                switch(layerMode){
2134
                case LAYER_MODE:
2135
                        //
2136

    
2137
                        break;
2138
                case PROJECT_MODE:
2139
                        Iterator<Symbol> it = localSymbolSet.getSymbol().iterator();
2140
                        while(it.hasNext()){
2141
                                Symbol sym = (Symbol) it.next();
2142
                                if(sym.getType().equalsIgnoreCase("svg") || sym.getType().equalsIgnoreCase("pixmap")){
2143
                                        File originalFile = new File(sym.getImage());
2144
//                                        if(originalFile.isFile()){
2145
//                                                sym.setImage(MapServerUtils.relativePath(
2146
//                                                                originalFile.getAbsolutePath(), 
2147
//                                                                originalFile.getParentFile().getParent()));
2148
//                                        }
2149
                                }
2150
                                boolean isAnUpdate= false;
2151
                                for(int i=0; i<symbolSet.getSymbol().size(); i++){
2152
                                        if(symbolSet.getSymbol().get(i).getName().equals(sym.getName())){
2153
                                                symbolSet.getSymbol().set(i, sym);
2154
                                                isAnUpdate = true;
2155
                                        }
2156
                                }
2157
                                if(!isAnUpdate){
2158
                                        symbolSet.getSymbol().add(sym);
2159
                                }
2160
                        }
2161
                        break;
2162
                }
2163
        }
2164

    
2165
        private Layer getPublishedLayer(FLayer flayer) {
2166
                isEditedLayer = false;
2167
                if(flayer.getProperty(MAPSERVER_LAYERPANEL_PROPERTIES) != null && 
2168
                                flayer.getProperty(MAPSERVER_LAYERPANEL_PROPERTIES) instanceof Boolean){
2169
                        boolean active = (Boolean) flayer.getProperty(MAPSERVER_LAYERPANEL_PROPERTIES);
2170
                        if(active){
2171
                                Object prop = flayer.getProperty(MAPSERVER_LAYER_PROPERTIES);
2172
                                if (prop != null && prop instanceof Layer){
2173
                                        isEditedLayer = true;
2174
                                        Layer auxLayer = (Layer) flayer.getProperty(MAPSERVER_LAYER_PROPERTIES);
2175
                                        for(int i=0; i<auxLayer.getClazz().size();i++){
2176
                                                Class auxClass = auxLayer.getClazz().get(i);
2177
                                                for(int j=0; j<auxClass.getLabel().size(); j++){
2178
                                                        Label auxLabel = auxClass.getLabel().get(j);
2179
                                                        usesFont = true;
2180
                                                        if(!StringUtils.isBlank(auxLabel.getFont())){
2181
                                                                getFontName(auxLabel.getFont().replace("\"", ""));
2182
                                                        }
2183
                                                }
2184
                                        }
2185
                                        return auxLayer;
2186
                                }
2187
                        }
2188
                }
2189
                return makepublish(flayer);
2190
        }
2191

    
2192

    
2193

    
2194

    
2195
        private void updateSymbolName(List<Layer> layerList, String oldName, String newName) {
2196
                for(int i=0; i<layerList.size(); i++){
2197
                        List<org.gvsig.publish.mapserver641.Class> clss = layerList.get(i).getClazz();
2198
                        for(int j=0; j<clss.size(); j++){
2199
                                List<Style> styles = clss.get(j).getStyle();
2200
                                Iterator<Style> it = styles.iterator();
2201
                                while(it.hasNext()){
2202
                                        Style style = (Style) it.next();
2203
                                        if(style.getSymbol() != null && 
2204
                                                        !StringUtils.isBlank(style.getSymbol().getValue()) &&
2205
                                                        style.getSymbol().getValue().equals("\""+oldName+"\"")){
2206
                                                style.getSymbol().setValue("\""+newName+"\"");
2207
                                        }
2208
                                }
2209
                        }
2210
                }
2211
        }
2212

    
2213

    
2214

    
2215
        private String getFontName(String name2) {
2216
                String auxName = name2.replace(" ", "_").toLowerCase();
2217
                if (!isFontLoaded(auxName)) {
2218
                        auxName = addFontFile(auxName);
2219
                }
2220
                return "\"" + auxName + "\"";
2221
        }
2222

    
2223
        private String addFontFile(String fontName) {
2224
                InputStream input = DefaultPublishManager.class
2225
                                .getResourceAsStream("/org/gvsig/publish/impl/mapserver/Font/"
2226
                                                + FONTSET_FILE);
2227
                String fontFile = getFontFile(input, fontName);
2228
                if (fontFile == null) {
2229
                        fontName = DEFAULT_FONT;
2230
                        fontFile = DEFAULT_FILE;
2231
                }
2232
                if (!isFontLoaded(fontName) && file != null) {
2233
                        try {
2234
                                PrintWriter out = new PrintWriter(new BufferedWriter(
2235
                                                new FileWriter(getFontSetFile(), true)));
2236
                                String filePath = FONTSET_FOLDER + "/" + fontFile;
2237
                                URL srcFile = DefaultPublishManager.class
2238
                                                .getResource("/org/gvsig/publish/impl/mapserver/Font/" + fontFile);
2239
                                out.println(fontName + " " + filePath);
2240
                                out.close();
2241

    
2242
                                File origen = new File(srcFile.getFile());
2243
                                File destino = new File(getCorrectPath(file.getParent()
2244
                                                + File.separator + filePath));
2245
                                FileUtils.copyURLToFile(srcFile,
2246
                                                new File(getCorrectPath(file.getParent()
2247
                                                                + File.separator + filePath)));
2248
                        } catch (IOException e) {
2249
                                // exception handling left as an exercise for the reader
2250
                        }
2251
                }
2252
                return fontName;
2253
        }
2254

    
2255
        private boolean isFontLoaded(String fontName) {
2256
                try {
2257
                        File fontFile = getFontSetFile();
2258
                        if (fontFile == null) {
2259
                                return false;
2260
                        }
2261
                        InputStream input = new FileInputStream(fontFile);
2262
                        String fontFileName = getFontFile(input, fontName);
2263
                        if (fontFileName != null) {
2264
                                return true;
2265
                        }
2266
                } catch (FileNotFoundException e) {
2267
                        e.printStackTrace();
2268
                }
2269
                return false;
2270
        }
2271

    
2272
        private String getFontFile(InputStream input, String fontName) {
2273
                BufferedReader in = new BufferedReader(new InputStreamReader(input));
2274
                try {
2275
                        String line = in.readLine();
2276
                        while (line != null) {
2277
                                if (line.toLowerCase().startsWith(fontName.toLowerCase())) {
2278
                                        String[] fields = line.split("\\s");
2279
                                        if (fields.length > 1) {
2280
                                                return fields[fields.length - 1];
2281
                                        }
2282
                                }
2283
                                line = in.readLine();
2284
                        }
2285
                } catch (IOException e) {
2286
                        e.printStackTrace();
2287
                        return null;
2288
                }
2289
                return null;
2290
        }
2291

    
2292
        private ItemType getCorrectMetadata(ItemType itemType3) {
2293
                for(int i=itemType3.getItem().size()-1; i>=0; i--){
2294
                        Item item = itemType3.getItem().get(i);
2295
                        if(!isWMSService
2296
                                        && item.getName().startsWith("wms_")){
2297
                                itemType3.getItem().remove(item);
2298
                        }
2299
                        if(!isWFSService
2300
                                        && item.getName().startsWith("wfs_")){
2301
                                itemType3.getItem().remove(item);
2302
                        }
2303
                        if(!isWCSService
2304
                                        && item.getName().startsWith("wcs_")){
2305
                                itemType3.getItem().remove(item);
2306
                        }
2307
                        if(!isWMSService
2308
                                        && !isWFSService
2309
                                        && !isWCSService
2310
                                        && item.getName().startsWith("ows_")){
2311
                                itemType3.getItem().remove(item);
2312
                        }
2313
                }
2314
                return itemType3;
2315
        }
2316

    
2317

    
2318
        public void loadWMSService(){
2319
                isWMSService = true;
2320
                isWFSService = false;
2321
                isWCSService = false;
2322
        }
2323

    
2324
        public void loadWFSService(){
2325
                isWMSService = false;
2326
                isWFSService = true;
2327
                isWCSService = false;
2328
        }
2329

    
2330
        public void loadWCSService(){
2331
                isWMSService = false;
2332
                isWFSService = false;
2333
                isWCSService = true;
2334
        }
2335

    
2336
        public void loadAllServices(){
2337
                isWMSService = true;
2338
                isWFSService = true;
2339
                isWCSService = true;
2340
        }
2341

    
2342
        public void unloadAllServices(){
2343
                isWMSService = false;
2344
                isWFSService = false;
2345
                isWCSService = false;
2346
        }
2347

    
2348
        public boolean hasMapfile(){
2349
                return isWMSService || isWFSService || isWCSService;
2350
        }
2351

    
2352

    
2353
        public Object parserFile(File file, Object mapObject) {
2354
                File tempFile = new File(MapServerUtils.getNameWithoutExtension(file.getAbsolutePath())+".xml");
2355

    
2356
                if(!tempFile.exists()){
2357
                        return null;
2358
                }
2359
                JAXBContext jaxbContext2;
2360
                try {
2361
                        jaxbContext2 = JAXBContext.newInstance(mapObject.getClass());
2362
                        javax.xml.bind.Unmarshaller jaxbUnMarshaller2 = jaxbContext2.createUnmarshaller();
2363
                        //jaxbUnMarshaller2.setProperty(Unmarshaller.JAXB_FORMATTED_OUTPUT, true);
2364
                        Object obj = jaxbUnMarshaller2.unmarshal(tempFile);
2365
                        return obj;
2366
                } catch (JAXBException e) {
2367
                        // TODO Auto-generated catch block
2368
                        e.printStackTrace();
2369
                }
2370

    
2371
                return null;
2372
        }
2373

    
2374
        public void parserFile(Object mapObject, File file) {
2375
                parserFile(mapObject, file, false);
2376
        }
2377

    
2378
        public void parserFile(Object mapObject, File file, boolean removeTemporal) {
2379
                FileOutputStream fos = null;
2380
                try {
2381
                        String extension = ".xml";
2382
                        if(removeTemporal){
2383
                                extension = ".tmp" + extension;
2384
                        }
2385
                        File tempFile = new File(MapServerUtils.getNameWithoutExtension(file.getAbsolutePath())+extension);
2386

    
2387
                        // Proceso de transformaci?n de los datos
2388
                        JAXBContext jaxbContext2 = JAXBContext.newInstance(mapObject.getClass());
2389
                        javax.xml.bind.Marshaller jaxbMarshaller2 = jaxbContext2.createMarshaller();
2390
                        jaxbMarshaller2.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true);
2391
                        jaxbMarshaller2.marshal(mapObject, tempFile);
2392

    
2393
                        Source xmlSource2 = new StreamSource(tempFile);
2394
                        InputStream input = DefaultPublishManager.class
2395
                                        .getResourceAsStream("/org/gvsig/publish/impl/mapserver/mapfile.xsl");
2396
                        Source xsltSource2 = new StreamSource(input);
2397

    
2398
                        //  create an instance of TransformerFactory
2399
                        TransformerFactory transFact2 = new org.apache.xalan.processor.TransformerFactoryImpl();
2400
                        Transformer trans2 = transFact2.newTransformer(xsltSource2);
2401

    
2402
                        fos = new FileOutputStream(file);
2403
                        Result fileResult = new StreamResult(fos);
2404
                        trans2.transform(xmlSource2, fileResult);
2405

    
2406
                        if(removeTemporal){
2407
                                tempFile.delete();
2408
                        }
2409

    
2410

    
2411
                } catch (Exception e) {
2412
                        logger.warn("", e);
2413
                }finally {
2414
                        if (fos != null) {
2415
                                try {
2416
                                        fos.close();
2417
                                } catch (IOException e) {
2418
                                        // TODO Auto-generated catch block
2419
                                        e.printStackTrace();
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
                                        // TODO Auto-generated catch block
2453
                                        e.printStackTrace();
2454
                                }
2455
                        }
2456
                }
2457

    
2458
        }
2459

    
2460
        public Layer makepublish(FLayer lyr, boolean b) {
2461
                this.isPropertiesPanel = b;
2462
                return makepublish(lyr);
2463
        }
2464
}