Revision 22629

View differences:

org.gvsig.raster/tags/org.gvsig.raster-2.2.270/org.gvsig.raster.app/org.gvsig.raster.app.common/buildNumber.properties
1
#Sun Jun 16 20:50:17 CEST 2024
2
buildNumber=280
org.gvsig.raster/tags/org.gvsig.raster-2.2.270/org.gvsig.raster.app/org.gvsig.raster.app.common/src/main/resources-plugin/scripting/lib/gvsig_raster.py
1
from gvsig import *
2
from org.gvsig.fmap.dal import DALLocator
3
from org.gvsig.fmap.mapcontext import MapContextLocator
4
from org.gvsig.fmap.dal.coverage import RasterLocator
5
from org.gvsig.fmap.dal.coverage.store.parameter import NewRasterStoreParameters
6
from org.gvsig.fmap.dal.coverage.dataset import Buffer
7
from org.gvsig.fmap.dal.serverexplorer.filesystem import FilesystemServerExplorer
8
from org.gvsig.raster.fmap.layers import FLyrRaster
9
from java.lang import Byte,Short,Integer,Float,Double
10
from java.io import File
11
from java.awt.geom import AffineTransform
12
import os
13

  
14
from os.path import splitext
15

  
16
global sourceFileName
17
sourceFileName = []
18
sourceFileName.append(None)
19

  
20

  
21
##
22
#
23
# Loads the raster layer given the filepath
24
#
25
# @params rasterfile the filename of the input layer
26
#
27
# @returns None loads the raster layer 
28
def loadRasterLayer (rasterfile, mode = "r" ):
29
    ## Load a Raster file in a Layer
30
    sourceFileName[0]=rasterfile
31
    if not isinstance (rasterfile,File):
32
        rasterfile = File(rasterfile)
33

  
34
    name, ext = splitext(rasterfile.getName())
35

  
36
    view = currentView()
37
  
38
    # Get the manager to use
39
    dalManager = DALLocator.getDataManager()
40
    mapContextManager = MapContextLocator.getMapContextManager()
41

  
42
    if ext.lower() == ".ecw" or ext.lower() == ".jp2" :
43
        # FIXME
44
        pass
45
    elif ext.lower() == ".mrsid":
46
        # FIXME
47
        pass
48
    else:
49
        # Create the parameters to open the raster store based in GDAL
50
        params = dalManager.createStoreParameters("Gdal Store")
51
        params.setFile(rasterfile)
52

  
53
    # Create the raster store
54
    dataStore = dalManager.createStore(params)
55

  
56
    # Create a raster layer based in this raster store
57
    layer = mapContextManager.createLayer(name, dataStore);
58

  
59
    view.addLayer(layer)
60
    return layer
61

  
62

  
63
## @cond FALSE
64
rasterLayerExtensions = dict ()
65

  
66

  
67
class RasterLayerExtensions(object):
68
    ##This class hold aditional properties and operations need to manage the scripting raster layer
69
    def __init__(self, store=None):
70
        self.store = store
71
        self.buffer = None
72
        self.query = None
73
        self.values = None
74
        self.kernel = None
75
        self.setElem = None
76
        self.getElem = None
77

  
78
    def prepareQuery(self):
79
        ## See RasterManager in javadocs for more info
80
        self.query = RasterLocator.getManager().createQuery();
81
        ## See RasterQuery in javadocs for more
82
        self.query.setAllDrawableBands()
83
        self.query.setAreaOfInterest()
84
        self.buffer = None
85
        self.values = None
86
        self.kernel = None
87

  
88
    def loadStore (self,rasterfile, mode = "r" ):
89
        if not isinstance(rasterfile,File):
90
            rasterfile = File(rasterfile)
91

  
92
        name, ext = splitext(rasterfile.getName())
93

  
94
        dalManager = DALLocator.getDataManager()
95

  
96
        if ext.lower() == ".ecw" or ext.lower() == ".jp2" :
97
           # FIXME
98
           pass
99
        elif ext.lower() == ".mrsid":
100
           # FIXME
101
           pass
102
        else:
103
           # Create the parameters to open the raster store based in GDAL
104
           params = dalManager.createStoreParameters("Gdal Store")
105
           params.setFile(rasterfile)
106

  
107
        # Create the raster store
108
        dataStore = dalManager.createStore(params)
109
        return dataStore
110

  
111
    def createBuffer(self):
112
        if sourceFileName[0] == None:
113
            self.buffer = self.store.query(self.getQuery())
114
        else:
115
            queryStore = self.loadStore(sourceFileName[0])
116
            self.buffer = queryStore.query(self.getQuery())
117
        #print self.buffer.getBandCount()
118

  
119
    def createNewBuffer(self,width, height, bandcount, datatype):
120
        if self.store != None:
121
            raise RuntimeException("Can't create a new buffer associated to a store")
122

  
123
        # FIXME: workaround to work with a jython bug passing byte, short and
124
        # double values as parameters
125
        if datatype in (Buffer.TYPE_BYTE, Buffer.TYPE_SHORT, Buffer.TYPE_INT):
126
            datatype = Buffer.TYPE_INT
127
        else:
128
            datatype = Buffer.TYPE_FLOAT
129
        # End workaround
130

  
131
        #print "---->>>>Buffer", datatype, width, height, bandcount
132
        self.buffer = RasterLocator.getManager().createBuffer(
133
            int(datatype),
134
            int(width),
135
            int(height),
136
            int(0 if bandcount is None else bandcount),
137
            True
138
        )
139
        self.prepareBuffer(self.buffer)
140

  
141
    def prepareBuffer(self, buffer):
142
        def setElemByte(buffer, line, col, band, data):
143
            buffer.setElem(line, col, band, Byte(data).byteValue())
144

  
145
        def setElemShort (buffer, line, col, band, data):
146
            buffer.setElem(line, col, band, Short(data).shortValue())
147

  
148
        def setElemInt(buffer, line, col, band, data):
149
            buffer.setElem(line, col, band, Integer(data).intValue())
150

  
151
        def setElemFloat(buffer, line, col, band, data):
152
            buffer.setElem(line, col, band, Float(data).floatValue())
153

  
154
        def setElemDouble(buffer, line, col, band, data):
155
            buffer.setElem(line, col, band, Double(data).doubleValue())
156

  
157
        t = buffer.getDataType()
158
        if t == Buffer.TYPE_BYTE:
159
            self.getElem = buffer.getElemByte
160
            self.setElem = setElemByte
161
        elif t == Buffer.TYPE_SHORT or t == Buffer.TYPE_USHORT:
162
            self.getElem = buffer.getElemShort
163
            self.setElem = setElemShort
164
        elif t == Buffer.TYPE_INT:
165
            self.getElem = buffer.getElemInt
166
            self.setElem = setElemInt
167
        elif t == Buffer.TYPE_FLOAT:
168
            self.getElem = buffer.getElemFloat
169
            self.setElem = setElemFloat
170
        elif t == Buffer.TYPE_DOUBLE:
171
            self.getElem = buffer.getElemDouble
172
            self.setElem = setElemDouble
173
        #print buffer.getBandCount()
174
        self.values = [0 for count in range(buffer.getBandCount())]
175
        self.kernel = [[self.values for count in range(3)] for count in range(3)]
176

  
177
    def getQuery(self):
178
        if self.query == None:
179
            self.prepareQuery()
180
        return self.query
181

  
182
    def getBuffer(self, store):
183
        if self.buffer == None:
184
            self.createBuffer()
185
            self.prepareBuffer(self.buffer)
186
        return self.buffer
187

  
188
    def setValue(self, band, line, col, data):
189
        t = self.buffer.getDataType()
190
        if t == Buffer.TYPE_BYTE:
191
           self.buffer.setElem(line, col, band, Byte(data).byteValue())
192
        elif t == Buffer.TYPE_SHORT or t == Buffer.TYPE_USHORT:
193
            self.buffer.setElem(line, col, band, Short(data).shortValue())
194
        elif t == Buffer.TYPE_INT:
195
            self.buffer.setElem(line, col, band, Integer(data).intValue())
196
        elif t == Buffer.TYPE_FLOAT:
197
            self.buffer.setElem(line, col, band, Float(data).floatValue())
198
        elif t == Buffer.TYPE_DOUBLE:
199
            self.buffer.setElem(line, col, band, Double(data).doubleValue())
200

  
201
    def getValue(self, band, row, column):
202
        if self.getElem == None:
203
            self.createBuffer()
204
            self.prepareBuffer(self.buffer)
205
        return self.getElem(row, column, band)
206

  
207
    def getBandValues(self, row, column):
208
        if self.getElem == None:
209
            self.createBuffer()
210
            self.prepareBuffer(self.buffer)
211
        for b in xrange(self.buffer.getBandCount()):
212
            self.values[b] = self.getElem(row, column, b)
213
        return self.values
214
    
215
    def setBandValues(self,row,column,values):
216
        for b in xrange(self.buffer.getBandCount()):
217
            self.setElem(self.buffer, row, column, b, values[b])
218

  
219
    def saveBuffer(self,filename):
220
        manager = DALLocator.getDataManager ()
221
        eparams = manager.createServerExplorerParameters(FilesystemServerExplorer.NAME)
222
        eparams.setDynValue("initialpath",os.path.dirname(sourceFileName[0]))
223
        serverExplorer = manager.openServerExplorer(eparams.getExplorerName(),eparams)
224

  
225
        sparams = serverExplorer.getAddParameters("Gdal Store")
226
        sparams.setDestination(os.path.dirname(sourceFileName[0]),filename)
227
        sparams.setBuffer(self.buffer)
228
        #at = AffineTransform(1, 0, 0, -1, 0, 0)
229
        #sparams.setAffineTransform(at);
230

  
231
        serverExplorer.add("Gdal Store", sparams, True)
232

  
233
## @endcond
234

  
235
##
236
#
237
# Represents a raster layer.
238
#
239
class RasterLayer(FLyrRaster):
240
    TYPE_BYTE = Buffer.TYPE_BYTE
241
    TYPE_SHORT = Buffer.TYPE_SHORT
242
    TYPE_INT = Buffer.TYPE_INT
243
    TYPE_FLOAT = Buffer.TYPE_FLOAT
244
    TYPE_DOUBLE = Buffer.TYPE_DOUBLE
245

  
246
    @staticmethod
247
    ## @cond FALSE
248
    def getExtensions(self):
249
        ## This is a internal method, don't use it.
250

  
251
        global rasterLayerExtensions
252
        extensions = rasterLayerExtensions.get(self.hashCode(), None)
253
        if extensions == None:
254
            extensions = RasterLayerExtensions(self.getDataStore())
255
            rasterLayerExtensions[self.hashCode()] = extensions
256
        return extensions
257
    ## @endcond
258

  
259
    @staticmethod
260
    ##
261
    #
262
    # Return the number of bands of the raster
263
    #
264
    # @param self The raster layer object
265
    #
266
    # @return the number of bands of the raster layer
267
    #
268
    def getBandsCount(self):
269
        return self.getDataStore().getBandCount()
270

  
271
    @staticmethod
272
    ##
273
    #
274
    # Return the width in points/pixels of the raster
275
    #
276
    # @param self The raster layer object
277
    #
278
    # @return the width of the raster
279
    #
280
    def getWidth(self):
281
        return self.getDataStore().getWidth()
282

  
283
    @staticmethod
284
    ##
285
    #
286
    # Return the height in points/pixels of the raster
287
    #
288
    # @param self The raster layer object
289
    #
290
    # @return the height of the raster
291
    def getHeight(self):
292
        return self.getDataStore().getHeight()
293

  
294
    @staticmethod
295
    ##
296
    #
297
    # Return the data type of the raster
298
    #
299
    # TYPE_BYTE = Byte datatype
300
    #
301
    # TYPE_USHORT  = Unsigned Short datatype
302
    #
303
    # TYPE_SHORT = Signed Short datatype
304
    #
305
    # TYPE_INT = Integer datatype
306
    #
307
    # TYPE_FLOAT = Float Datatype
308
    #
309
    # TYPE_DOUBLE = Double Datatype
310
    #
311
    # @param self The raster layer object
312
    #
313
    # @return the datatype of the raster layer
314
    def getDataType(self):
315
        return self.getDataStore().getDataType()
316

  
317
    @staticmethod
318
    ##
319
    #
320
    # Return the value of a point of a "band" from "row" and "coulmn" of
321
    # the Raster.
322
    #
323
    # This method use with care, it has a strong overhead. Use instead
324
    # the method "walk" to go over the raster.
325
    #
326
    # @param band band from which the value should be retrieved
327
    # @param row row in the raster from which the value should be retrieved
328
    # @param column column in the raster from which the value should be retrieved
329
    #
330
    # @return the value of a point/pixel of a "band" from "row" and "column" of the Raster
331
    #
332
    def getData(self, band, row, column):
333
        return self.getExtensions().getValue(band, row, column)
334

  
335
    @staticmethod
336
    ##
337
    #
338
    # Go over the raster and for each point call to the function
339
    # "operation" and pass as argument a tuple with the values of
340
    # the point for each band.
341
    #
342
    # This method don't return any value
343
    #
344
    # @param self pointer to the Layer object
345
    # @param operation any operation which operates on the raster point-by-point
346
    #
347
    # @return None
348
    #
349
    def walk(self, operation):
350
        extension = self.getExtensions()
351
        store = self.getDataStore()
352
        sourceExtension = RasterLayerExtensions()
353
        sourceExtension.createNewBuffer(store.getWidth(), store.getHeight(), store.getBandCount(), store.getDataType())
354
        
355
        for band in xrange(store.getBandCount()):
356
            for line in xrange(store.getHeight()):
357
                for column in xrange(store.getWidth()):
358
                    operation(extension.getBandValues(line, column))
359
                    
360

  
361
    @staticmethod
362
    ##
363
    #
364
    # Go over the raster and for each point, taking the neighbour points
365
    # as a kernel(3x3) call to the function "operation" and pass as argument a
366
    # tuple with the values of all the points in the kernel for each band.
367
    #
368
    # This method don't return any value
369
    #
370
    # @param self pointer to the Layer object
371
    # @param operation any operation which operates on the raster by a kernel(3x3).
372
    #
373
    # @return None
374
    #
375
    def walkKernel(self, operation):
376
        extension = self.getExtensions()
377
        store = self.getDataStore()
378
        sourceExtension = RasterLayerExtensions()
379
        sourceExtension.createNewBuffer(store.getWidth(), store.getHeight(), store.getBandCount(), store.getDataType())
380
        
381
        k=0
382
        l=0
383
        values = [0 for count in xrange(store.getBandCount())]
384
        values = [[values for count in xrange(3)] for count in xrange(3)]
385
        outValues = list()
386
        for band in xrange(store.getBandCount()):
387
            for line in xrange(1,store.getHeight()-1):
388
                for column in xrange(1,store.getWidth()-1):
389
                    
390
                    i=0
391
                    for k in xrange(line-1,line+2):
392
                        j=0
393
                        for l in xrange(column-1,column+2):
394
                            values[i][j]=extension.getBandValues(k,l)
395
                            j=j+1
396
                        i=i+1
397
                    operation(values)
398
                    
399

  
400
    @staticmethod
401
    ##
402
    #
403
    # Go over the raster and for each point call to the function "filter1"
404
    # and pass as argument a tuple with the values of all the points in the
405
    # kernel for each band.
406
    #
407
    # The function "filter1" must be such that it takes a tuple, modifies its value
408
    # and returns a new tuple.
409
    #
410
    # This method saves the newly created(filter applied) layer to "targetfilename"
411
    #
412
    # @param self pointer to the Layer object
413
    # @param filter1 any filter which modifies the raster layer point-by-point
414
    # @param targetfilename filename to which the output layer should be saved
415
    # @param targetdatatype datatype of which the output layer to be saved (use only TYPE_INT,TYPE_BYTE or TYPE_SHORT as of now)
416
    # @param targetbandcount number of bands in the output layer
417
    #
418
    # @return saves the created layer to "targetfilename" in the current directory
419
    #
420
    def filter(self, filter1, targetfilename, targetdatatype=None, targetbandcount=None):
421
        extension = self.getExtensions()
422
        store = self.getDataStore()
423
        targetExtension = RasterLayerExtensions()
424
        #targetExtension.createNewBuffer(store.getWidth(), store.getHeight(), store.getBandCount(), store.getDataType())
425
        targetExtension.createNewBuffer(store.getWidth(), store.getHeight(), targetbandcount, targetdatatype)
426

  
427
        for band in xrange(store.getBandCount()):
428
            for line in xrange(store.getHeight()):
429
                for column in xrange(store.getWidth()):
430
                    values = filter1(extension.getBandValues(line,column))
431
                    targetExtension.setBandValues(line, column, values)
432

  
433
        targetExtension.saveBuffer(targetfilename)
434

  
435
    @staticmethod
436
    ##
437
    #
438
    # Go over the raster and for each point, taking the neighbour points
439
    # as a kernel(3x3) call to the function "filter1" and pass as argument
440
    # a tuple with the values of all the points in the kernel for each band.
441
    #
442
    # The function "filter1" must be such that it takes a tuple of multi-dimension,
443
    # modifies its value and returns a new tuple having dimensions same as input.
444
    #
445
    # This method saves the newly created(filter applied) layer to "targetfilename"
446
    #
447
    # @param self pointer to the Layer object
448
    # @param filter1 any filter which modifies the raster layer using a kernel(3x3).
449
    # @param targetfilename filename to which the output layer should be saved
450
    # @param targetdatatype datatype of which the output layer to be saved (use only TYPE_INT,TYPE_BYTE or TYPE_SHORT as of now)
451
    # @param targetbandcount number of bands in the output layer
452
    #
453
    # @return saves the created layer to "targetfilename" in the current directory
454
    #
455
    def filterKernel(self, filter1, targetfilename, targetdatatype=None, targetbandcount=None):
456
        extension = self.getExtensions()
457
        store = self.getDataStore()
458
        targetExtension = RasterLayerExtensions()
459
        #targetExtension.createNewBuffer(store.getWidth(), store.getHeight(), store.getBandCount(), store.getDataType())
460
        targetExtension.createNewBuffer(store.getWidth(), store.getHeight(), targetbandcount, targetdatatype)
461

  
462
        k=0
463
        l=0
464
        values = [0 for count in xrange(store.getBandCount())]
465
        values = [[values for count in xrange(3)] for count in xrange(3)]
466
        outValues = list()
467
        for band in xrange(store.getBandCount()):
468
            for line in xrange(1,store.getHeight()-1):
469
                for column in xrange(1,store.getWidth()-1):
470
                    
471
                    i=0
472
                    for k in xrange(line-1,line+2):
473
                        j=0
474
                        for l in xrange(column-1,column+2):
475
                            values[i][j]=extension.getBandValues(k,l)
476
                            j=j+1
477
                        i=i+1
478
                    outValues = filter1(values)
479
                    targetExtension.setBandValues(line, column, outValues)
480

  
481
        targetExtension.saveBuffer(targetfilename)
482
                    
483
    @staticmethod
484
    ##
485
    #
486
    # Go over the raster layer and for each point call to the function "operation" and
487
    # pass as arguments two tuples (One corresponding to the first layer at that point,
488
    # the other corresponding to the second layer at the same point) with the values of
489
    # each point for each band.
490
    #
491
    # The function "operation" must be such that it takes two tuples as input, performs
492
    # operations involving both of them and returns a new tuple.
493
    #
494
    # This method saves the newly created(from the two rasters) layer to "targetfilename"
495
    #
496
    # @param self pointer to the Layer object
497
    # @param operation any operation which operates on both the raster layers at a respective point/pixel.
498
    # @param layer2 the layer which forms the second input to the "operation" function.
499
    # @param targetfilename filename to which the output layer should be saved
500
    # @param targetdatatype datatype of which the output layer to be saved (use only TYPE_INT,TYPE_BYTE or TYPE_SHORT as of now)
501
    #
502
    # @return saves the created layer to "targetfilename" in the current directory
503
    #
504
    def operation(self, operation, layer2, targetfilename, targetdatatype=None):
505
        layer1Extension = self.getExtensions()
506
        layer2Extension = layer2.getExtensions()
507

  
508
        layer1Store = self.getDataStore()
509
        layer2Store = layer2.getDataStore()
510

  
511
        bandCount = layer1Store.getBandCount()
512
        layerWidth = layer1Store.getWidth()
513
        layerHeight = layer1Store.getHeight()
514
        targetExtension = RasterLayerExtensions()
515
        resultValues = list()
516
        #targetExtension.createNewBuffer(layerWidth, layerHeight, bandCount, layer1Store.getDataType())
517
        targetExtension.createNewBuffer(layerWidth, layerHeight, bandCount, targetdatatype)
518

  
519
        for band in xrange(bandCount):
520
            for line in xrange(layerHeight):
521
                for column in xrange(layerWidth):
522
                    layer1Values = layer1Extension.getBandValues(line, column)
523
                    layer2Values = layer2Extension.getBandValues(line, column)
524
                    resultValues = operation(layer1Values, layer2Values)
525
                    targetExtension.setBandValues(line, column, resultValues)
526

  
527
        targetExtension.saveBuffer(targetfilename)
528

  
529
    @staticmethod
530
    ##
531
    #
532
    # Go over the raster layer and for each point, taking the neighbour points as a
533
    # kernel(3x3) call to the function "operation" and pass as arguments two tuples
534
    # (One corresponding to the first layer at that point, the other corresponding
535
    # to the second layer at the same point) with the values of all the points of the
536
    # kernel for each band.
537
    #
538
    # The function "operation" must be such that it takes two tuples of multiple
539
    # dimensions as input, performs operations involving both of them and returns a
540
    # new tuple having dimensions same as input tuples.
541
    #
542
    # This method saves the newly created(from the two rasters) layer to "targetfilename"
543
    #
544
    # @param self pointer to the Layer object
545
    # @param operation any operation which operates on both the raster layers at a respective point/pixel but involving kernel(3x3)[neighbour points].
546
    # @param layer2 the layer which forms the second input to the "operation" function.
547
    # @param targetfilename filename to which the output layer should be saved
548
    # @param targetdatatype datatype of which the output layer to be saved (use only TYPE_INT,TYPE_BYTE or TYPE_SHORT as of now)
549
    #
550
    # @return saves the created layer to "targetfilename" in the current directory
551
    #
552
    def operationKernel(self, operation, layer2, targetfilename, targetdatatype=None):
553
        layer1Extension = self.getExtensions()
554
        layer2Extension = self.getExtensions()
555

  
556
        layer1Store = self.getDataStore()
557
        layer2Store = layer2.getDataStore()
558

  
559
        bandCount = layer1Store.getBandCount()
560
        layerWidth = layer1Store.getWidth()
561
        layerHeight = layer1Store.getHeight()
562
        targetExtension = RasterLayerExtensions()
563
        #targetExtension.createNewBuffer(layerWidth, layerHeight, bandCount, layer1Store.getDataType())targetExtension.createNewBuffer(layerWidth, layerHeight, bandCount, layer1Store.getDataType())
564
        targetExtension.createNewBuffer(layerWidth, layerHeight, bandCount, targetdatatype)
565

  
566
        k=0
567
        l=0
568
        values1 = [[[None for count in range(bandCount)] for count in range(3)] for count in range(3)]
569
        values2 = [[[None for count in range(bandCount)] for count in range(3)] for count in range(3)]
570
        outValues = list()
571
        for band in xrange(bandCount):
572
            for line in xrange(1,layerHeight-1):
573
                for column in xrange(1,layerWidth-1):
574

  
575
                    i=0
576
                    for k in xrange(line-1,line+2):
577
                        j=0
578
                        for l in xrange(column-1,column+2):
579
                            values1[i][j]=layer1Extension.getBandValues(k,l)
580
                            #print i,j,values1[i][j]
581
                            #print values1
582
                            values2[i][j]=layer2Extension.getBandValues(k,l)
583
                            j=j+1
584
                        i=i+1
585

  
586
                    outValues = operation(values1, values2)
587
                    i=0
588
                    for k in xrange(line-1,line+2):
589
                        j=0
590
                        for l in xrange(column-1,column+2):
591
                            targetExtension.setBandValues(k,l, outValues[i][j])
592
                            j=j+1
593
                        i=i+1
594

  
595
        targetExtension.saveBuffer(targetfilename)
596
        
597

  
598
#
599
# Inject new methods in the class FLyrRaster
600
#
601
FLyrRaster.getExtensions = RasterLayer.getExtensions
602
FLyrRaster.getBandsCount = RasterLayer.getBandsCount
603
FLyrRaster.getWidth = RasterLayer.getWidth
604
FLyrRaster.getHeight = RasterLayer.getHeight
605
FLyrRaster.getDataType = RasterLayer.getDataType
606
FLyrRaster.getData = RasterLayer.getData
607
FLyrRaster.walk = RasterLayer.walk
608
FLyrRaster.walkKernel = RasterLayer.walkKernel
609
FLyrRaster.filter = RasterLayer.filter
610
FLyrRaster.filterKernel = RasterLayer.filterKernel
611
FLyrRaster.operation = RasterLayer.operation
612
FLyrRaster.operationKernel = RasterLayer.operationKernel
org.gvsig.raster/tags/org.gvsig.raster-2.2.270/org.gvsig.raster.app/org.gvsig.raster.app.common/src/main/resources-plugin/config.xml
1
<?xml version="1.0" encoding="ISO-8859-1"?>
2
<plugin-config>
3
 <depends plugin-name="org.gvsig.app" />
4
 <depends plugin-name="org.gvsig.app.document.table.app.mainplugin" />
5
	<resourceBundle name="text"/>
6
	<libraries library-dir="lib"/>
7
	<extensions>
8
		<extension class-name="org.gvsig.raster.mainplugin.RasterMainPluginExtension"
9
			description="" 
10
			active="true" 
11
			priority="1">
12
		</extension>	
13
		<extension class-name="org.gvsig.raster.mainplugin.GenericToolBarExtension"
14
			description="" 
15
			active="true" 
16
			priority="1">
17
		</extension>
18
	</extensions>
19
</plugin-config>
org.gvsig.raster/tags/org.gvsig.raster-2.2.270/org.gvsig.raster.app/org.gvsig.raster.app.common/src/main/resources-plugin/org/gvsig/raster/mainplugin/i18n/text.properties
1
capa_raster=Capa Raster
2
process_raster=Procesos Raster
3
multispectral=Multiespectral
4
enhanced=Realce
5
transformaciones_geograficas=Transformaciones geograficas
6
raster_export=Exportar Raster
7
dataset_raster=Conjunto de datos raster
org.gvsig.raster/tags/org.gvsig.raster-2.2.270/org.gvsig.raster.app/org.gvsig.raster.app.common/src/main/resources-plugin/org/gvsig/raster/mainplugin/i18n/text_en.properties
1
capa_raster=Raster layer
2
process_raster=Raster process
3
multispectral=Multispectral
4
enhanced=Enhanced
5
transformaciones_geograficas=Geographic transformations
6
raster_export=Export to raster
7
dataset_raster=Raster dataset
org.gvsig.raster/tags/org.gvsig.raster-2.2.270/org.gvsig.raster.app/org.gvsig.raster.app.common/src/main/assembly/gvsig-plugin-package.xml
1
<!--
2

  
3
    gvSIG. Desktop Geographic Information System.
4

  
5
    Copyright (C) 2007-2013 gvSIG Association.
6

  
7
    This program is free software; you can redistribute it and/or
8
    modify it under the terms of the GNU General Public License
9
    as published by the Free Software Foundation; either version 3
10
    of the License, or (at your option) any later version.
11

  
12
    This program is distributed in the hope that it will be useful,
13
    but WITHOUT ANY WARRANTY; without even the implied warranty of
14
    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
15
    GNU General Public License for more details.
16

  
17
    You should have received a copy of the GNU General Public License
18
    along with this program; if not, write to the Free Software
19
    Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
20
    MA  02110-1301, USA.
21

  
22
    For any additional information, do not hesitate to contact us
23
    at info AT gvsig.com, or visit our website www.gvsig.com.
24

  
25
-->
26
<assembly>
27
  <id>gvsig-plugin-package</id>
28
  <formats>
29
    <format>zip</format>
30
  </formats>
31
  <baseDirectory>${project.artifactId}</baseDirectory>
32
  <includeBaseDirectory>true</includeBaseDirectory>
33
  <files>
34
    <file>
35
      <source>target/${project.artifactId}-${project.version}.jar</source>
36
      <outputDirectory>lib</outputDirectory>
37
    </file>
38
    <file>
39
      <source>target/package.info</source>
40
    </file>
41
  </files>
42

  
43
  <fileSets>
44
    <fileSet>
45
      <directory>src/main/resources-plugin</directory>
46
      <outputDirectory>.</outputDirectory>
47
    </fileSet>
48
  </fileSets>
49

  
50

  
51
  <dependencySets>
52
    <dependencySet>
53
      <useProjectArtifact>false</useProjectArtifact>
54
      <useTransitiveDependencies>false</useTransitiveDependencies>
55
      <outputDirectory>lib</outputDirectory>
56
		  <includes>
57
		    <include>org.gvsig:org.gvsig.raster.swing.api:jar</include>
58
		    <include>org.gvsig:org.gvsig.raster.swing.impl:jar</include>
59
		    <include>org.gvsig:org.gvsig.raster.cache.lib.api:jar</include>
60
		    <include>org.gvsig:org.gvsig.raster.cache.lib.impl:jar</include>
61
		    <include>org.gvsig:org.gvsig.raster.lib.api:jar</include>
62
		    <include>org.gvsig:org.gvsig.raster.lib.impl:jar</include>
63
		    <include>org.gvsig:org.gvsig.raster.algorithm:jar</include>
64
		    <include>org.gvsig:org.gvsig.raster.fmap:jar</include>
65
		    <!-- <include>org.gvsig:org.gvsig.timesupport.lib.api:jar</include>
66
		    <include>org.gvsig:org.gvsig.timesupport.lib.impl:jar</include>-->
67
		    <include>org.joda:joda-time:jar</include>		
68
		  </includes>
69
    </dependencySet>
70
  </dependencySets>
71

  
72
</assembly>
73

  
74

  
org.gvsig.raster/tags/org.gvsig.raster-2.2.270/org.gvsig.raster.app/org.gvsig.raster.app.common/src/main/java/org/gvsig/raster/mainplugin/RasterMainPluginUtils.java
1
/* gvSIG. Geographic Information System of the Valencian Government
2
*
3
* Copyright (C) 2007-2008 Infrastructures and Transports Department
4
* of the Valencian Government (CIT)
5
* 
6
* This program is free software; you can redistribute it and/or
7
* modify it under the terms of the GNU General Public License
8
* as published by the Free Software Foundation; either version 2
9
* of the License, or (at your option) any later version.
10
* 
11
* This program is distributed in the hope that it will be useful,
12
* but WITHOUT ANY WARRANTY; without even the implied warranty of
13
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
14
* GNU General Public License for more details.
15
* 
16
* You should have received a copy of the GNU General Public License
17
* along with this program; if not, write to the Free Software
18
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, 
19
* MA  02110-1301, USA.
20
* 
21
*/
22
package org.gvsig.raster.mainplugin;
23

  
24
import java.awt.Component;
25
import java.awt.Dimension;
26
import java.awt.Point;
27
import java.io.File;
28
import java.util.ArrayList;
29

  
30
import javax.swing.JOptionPane;
31

  
32
import org.gvsig.andami.PluginServices;
33
import org.gvsig.andami.ui.mdiManager.IWindow;
34
import org.gvsig.app.project.Project;
35
import org.gvsig.app.project.ProjectManager;
36
import org.gvsig.app.project.documents.view.gui.AbstractViewPanel;
37
import org.gvsig.fmap.dal.DALLocator;
38
import org.gvsig.fmap.dal.DataManager;
39
import org.gvsig.fmap.dal.DataStore;
40
import org.gvsig.fmap.dal.coverage.RasterLocator;
41
import org.gvsig.fmap.dal.coverage.datastruct.Param;
42
import org.gvsig.fmap.dal.coverage.datastruct.Params;
43
import org.gvsig.fmap.dal.coverage.store.parameter.RasterDataParameters;
44
import org.gvsig.fmap.dal.coverage.util.ProviderServices;
45
import org.gvsig.fmap.dal.exception.InitializeException;
46
import org.gvsig.fmap.dal.exception.ProviderNotRegisteredException;
47
import org.gvsig.fmap.dal.exception.ValidateDataParametersException;
48
import org.gvsig.fmap.mapcontext.MapContextLocator;
49
import org.gvsig.fmap.mapcontext.MapContextManager;
50
import org.gvsig.fmap.mapcontext.exceptions.LoadLayerException;
51
import org.gvsig.fmap.mapcontext.layers.FLayer;
52
import org.gvsig.fmap.mapcontext.layers.FLayers;
53
import org.gvsig.gui.beans.propertiespanel.PropertiesComponent;
54
import org.gvsig.gui.beans.propertiespanel.PropertyStruct;
55
import org.gvsig.i18n.Messages;
56
import org.gvsig.raster.fmap.layers.DefaultFLyrRaster;
57
import org.gvsig.raster.util.RasterNotLoadException;
58

  
59
/**
60
 * Herramientas de uso general y que son dependientes de gvSIG, FMap o de
61
 * libUIComponents. En caso de no serlo existe una clase independiente de
62
 * cualquier proyecto dentro de libRaster para este tipo de funciones.
63
 *
64
 * @version 31/05/2007
65
 * @author Nacho Brodin (nachobrodin@gmail.com)
66
 */
67
public class RasterMainPluginUtils {
68

  
69
	/**
70
	 * Obtiene la lista de capas del TOC y devuelve las raster. Si hay capas agrupadas lo tiene en cuenta y mira
71
	 * dentro de la agrupaci?n.
72
	 * @param srcLyrs FLayers de la vista
73
	 * @param destLyrs Lista de capas 
74
	 * @return ArrayList con la lista de capas raster agrupadas o no. El orden en que aparecen
75
	 * en la lista es de abajo a arriba las que aparecen en el TOC.
76
	 */
77
	public static ArrayList<FLayer> getRasterLayerList(FLayers srcLyrs, ArrayList<FLayer> destLyrs) {
78
		if(destLyrs == null)
79
			destLyrs = new ArrayList<FLayer>();
80
		for (int i = 0; i < srcLyrs.getLayersCount(); i++) {
81
			if(srcLyrs.getLayer(i) instanceof DefaultFLyrRaster)
82
				destLyrs.add(srcLyrs.getLayer(i));
83
			if(srcLyrs.getLayer(i) instanceof FLayers)
84
				destLyrs = getLayerList((FLayers)srcLyrs.getLayer(i), destLyrs);
85
		}
86
		return destLyrs;
87
	}
88
	
89
	/**
90
	 * Obtiene la lista de capas del TOC y devuelve las raster. Si hay capas agrupadas lo tiene en cuenta y mira
91
	 * dentro de la agrupaci?n.
92
	 * @param srcLyrs FLayers de la vista
93
	 * @param destLyrs Lista de capas 
94
	 * @return ArrayList con la lista de capas raster agrupadas o no. El orden en que aparecen
95
	 * en la lista es de abajo a arriba las que aparecen en el TOC.
96
	 */
97
	public static ArrayList<FLayer> getLayerList(FLayers srcLyrs, ArrayList<FLayer> destLyrs) {
98
		if(srcLyrs == null)
99
			return null;
100
		if(destLyrs == null)
101
			destLyrs = new ArrayList<FLayer>();
102
		for (int i = 0; i < srcLyrs.getLayersCount(); i++) {
103
			if(srcLyrs.getLayer(i) instanceof FLayers)
104
				destLyrs = getLayerList((FLayers)srcLyrs.getLayer(i), destLyrs);
105
			else 
106
				destLyrs.add(srcLyrs.getLayer(i));
107
		}
108
		return destLyrs;
109
	}
110
	
111
	/**
112
	 * Obtiene el nombre de la vista donde est? cargada la capa que se pasa por par?metro
113
	 * @param layer Capa cargada en una vista
114
	 * @return Nombre de la vista donde est? cargada la capa.
115
	 */
116
	public static String getView(FLayer layer) {
117
//		Project p = ((ProjectExtension) PluginServices.getExtension(ProjectExtension.class)).getProject();
118
		Project p = ProjectManager.getInstance().getCurrentProject();
119
		return p.getViewName(layer);	
120
	}
121
	
122
	/**
123
	 * A?ade una ventana al gestor de ventanas
124
	 * @param window
125
	 */
126
	public static void addWindow(IWindow window) {
127
		PluginServices.getMDIManager().addWindow(window);
128
	}
129
	
130
	/**
131
	 * Elimina una ventana al gestor de ventanas
132
	 * @param window
133
	 */
134
	public static void closeWindow(IWindow window) {
135
		PluginServices.getMDIManager().closeWindow(window);
136
	}
137
	
138
	/**
139
	 * Selecciona los controles del panel de propiedades a partir de los par?mtros
140
	 * obtenidos del driver. Este m?todo realiza una transformaci?n entre Params
141
	 * obtenido del driver de escritura y los par?metros del panel de propiedades.
142
	 * @param panel Panel de propiedades
143
	 * @param params Par?metros del driver
144
	 * @param notTakeIntoAccount Nombre de par?metros que no hay que tener en cuenta. Si es null se tienen en cuenta todos.
145
	 */
146
	public static void loadPropertiesFromWriterParams(PropertiesComponent pComp, Params params, String[] notTakeIntoAccount) {
147
		for (int i = 0; i < params.getNumParams(); i++) {
148
			Param p = params.getParam(i);
149
			String name = Messages.getText(p.getId());
150
			String key = p.getId();
151

  
152
			//Miramos si el par?metro coincide con  alguno en la lista de parametros que no hay que
153
			//tener en cuenta. Si es as? no lo a?adimos
154
			if(notTakeIntoAccount != null && notTakeIntoAccount.length > 0) {
155
				boolean jump = false;
156
				for (int j = 0; j < notTakeIntoAccount.length; j++) {
157
					if (key.equals(notTakeIntoAccount[j]))
158
						jump = true;
159
				}
160
				if(jump)
161
					continue;
162
			}
163

  
164
			Object[] types = null;
165
			int selectedValue = 0;
166

  
167
			switch (p.getType()) {
168
				case Params.CHECK:
169
					pComp.addValue(name, key, p.getDefaultValue(), types);
170
					break;
171
				case Params.CHOICE:
172
					ArrayList<String> list = new ArrayList<String>();
173
					for (int j = 0; j < p.getList().length; j++) {
174
						list.add(p.getList()[j]);
175
						if (p.getDefaultValue() instanceof Integer)
176
							if (((Integer) p.getDefaultValue()).intValue() == j)
177
								selectedValue = j;
178
					}
179
					types = new Object[] { new Integer(PropertiesComponent.TYPE_COMBO), list };
180
					pComp.addValue(name, key, new Integer(selectedValue), types);
181
					break;
182
				case Params.SLIDER:
183
					types = new Object[] { new Integer(PropertiesComponent.TYPE_SLIDER), new Integer(p.getList()[0]), new Integer(p.getList()[1]) };
184
					pComp.addValue(name, key, p.getDefaultValue(), types);
185
					break;
186
				default:
187
					pComp.addValue(Messages.getText(((Param)params.getParam(i)).getId()), params.getParam(i).getId(), params.getParam(i).getDefaultValue(), null);
188
					break;
189
			}
190
		}
191
	}
192

  
193
	/**
194
	 * Carga los par?metros del escritor WriterParams con los valores obtenidos
195
	 * de la ventana de propiedades.
196
	 */
197
	@SuppressWarnings("unchecked")
198
	public static void loadWriterParamsFromPropertiesPanel(PropertiesComponent pComp, Params params) {
199
		ArrayList<PropertyStruct> values = pComp.getValues();
200
		for (int iParam = 0; iParam < params.getNumParams(); iParam++) {
201
			Param p = params.getParam(iParam);
202
			for (int iValue = 0; iValue < values.size(); iValue++) {
203
				PropertyStruct prop = values.get(iValue);
204
				if (p.getId().compareTo(prop.getKey()) == 0) {
205
					switch (p.getType()) {
206
						case Params.CHECK:
207
							p.setDefaultValue((Boolean) prop.getNewValue());
208
							break;
209
						case Params.CHOICE:
210
							p.setDefaultValue(((Integer) prop.getNewValue()));//p.list[((Integer) prop.getNewValue()).intValue()];
211
							break;
212
						case Params.SLIDER:
213
							try {
214
								p.setDefaultValue((Integer)prop.getNewValue());
215
							} catch (NumberFormatException e) {}
216
					}
217
					break;
218
				}
219
			}
220
		}
221
	}
222

  
223
	/**
224
	 * Funci?n que devuelve true si se tiene permiso de escritura en la ruta
225
	 * indicada en el par?metro path y false si no los tiene.
226
	 * @param path Ruta a comprobar los permisosv
227
	 * @param pluginObject si es distinto de null se obtiene un mensaje de
228
	 *          advertencia y sirve como par?metro para getText de la traducci?n.
229
	 *          Si es null no se mostrar? ventana de advertencia
230
	 * @return true si se tiene permiso de escritura en la ruta indicada en el
231
	 *         par?metro path y false si no los tiene.
232
	 */
233
	public static boolean canWrite(String path, Object pluginObject) {
234
		File f = new File(path);
235
		if(f.exists() && f.canWrite())
236
			return true;
237
		else {
238
			if(pluginObject != null)
239
				JOptionPane.showMessageDialog((Component)PluginServices.getMainFrame(),
240
						PluginServices.getText(pluginObject, "error_escritura"));
241
			return false;
242
		}
243
	}
244

  
245
	/**
246
	 * Carga una capa raster en una vista de gvSIG.
247
	 * @param viewName Nombre de la vista donde ha de cargarse. Si vale null se cargar? en la
248
	 * primera vista que encuentre que est? activa. Si no hay ninguna saltar? una excepci?n.
249
	 * @param fileName Nombre del fichero a cargar. No debe ser nulo nunca.
250
	 * @param layerName Nombre de la capa. Si es null se asignar? el nombre del
251
	 * fichero sin extensi?n.
252
	 * @throws RasterNotLoadException Excepci?n que se lanza cuando no se ha podido cargar la capa
253
	 * por alg?n motivo.
254
	 */
255
	@SuppressWarnings("deprecation")
256
	public static FLayer loadLayer(String viewName, String fileName, String layerName) throws RasterNotLoadException {
257
		if(fileName ==  null)
258
			return null;
259

  
260
		//Seleccionamos la vista de gvSIG
261
		AbstractViewPanel theView = null;
262
		try {
263
			IWindow[] allViews = PluginServices.getMDIManager().getAllWindows();
264
			if(viewName != null) {
265
				for (int i = 0; i < allViews.length; i++) {
266
					if (allViews[i] instanceof AbstractViewPanel
267
						&& (((AbstractViewPanel) allViews[i]).getDocument().getName().equals(viewName) ||
268
							PluginServices.getMDIManager().getWindowInfo((AbstractViewPanel) allViews[i]).getTitle().equals(viewName)))
269
						theView = (AbstractViewPanel) allViews[i];
270
				}
271
			} else {
272
				IWindow activeWindow = PluginServices.getMDIManager().getActiveWindow();
273
				for (int i = 0; i < allViews.length; i++) {
274
					if (allViews[i] instanceof AbstractViewPanel && ((AbstractViewPanel)allViews[i]) == activeWindow) //En la primera vista activa
275
						theView = (AbstractViewPanel) allViews[i];
276
				}
277
				if(theView == null) {
278
					for (int i = 0; i < allViews.length; i++) {
279
						if (allViews[i] instanceof AbstractViewPanel) //En la primera vista
280
							theView = (AbstractViewPanel) allViews[i];
281
					}
282
				}
283
			}
284

  
285
			if (theView == null)
286
				throw new RasterNotLoadException("Imposible cargar la capa.");
287
		} catch (ClassCastException ex) {
288
			throw new RasterNotLoadException("No se puede hacer un casting de esa IWindow a View.");
289
		}
290

  
291
		theView.getMapControl().getMapContext().beginAtomicEvent();
292

  
293
		DefaultFLyrRaster lyr = null;
294
		try {
295
			ProviderServices provServ = RasterLocator.getManager().getProviderServices();
296
			RasterDataParameters storeParameters = provServ.createNotTiledParameters(fileName);
297
			storeParameters.setSRS(theView.getProjection());
298
			
299
			MapContextManager mcm = MapContextLocator.getMapContextManager();
300
			DataManager dataManager = DALLocator.getDataManager();
301
			DataStore dataStore = null;
302
			try {
303
				dataStore = dataManager.createStore(storeParameters);
304
			} catch (ValidateDataParametersException e) {
305
				throw new RasterNotLoadException("Error al cargar la capa.");
306
			} catch (InitializeException e) {
307
				throw new RasterNotLoadException("Error al cargar la capa.");
308
			} catch (ProviderNotRegisteredException e) {
309
				throw new RasterNotLoadException("Error al cargar la capa.");
310
			}
311
			
312
			lyr = new DefaultFLyrRaster();
313
			
314
			if(layerName == null) {
315
				int endIndex = fileName.lastIndexOf(".");
316
				if (endIndex < 0)
317
					endIndex = fileName.length();
318
				
319
				layerName = fileName.substring(fileName.lastIndexOf(File.separator) + 1, endIndex);
320
			}
321
			
322
			lyr = (DefaultFLyrRaster) mcm.createLayer(layerName, dataStore);
323

  
324
		} catch (LoadLayerException e) {
325
			throw new RasterNotLoadException("Error al cargar la capa.");
326
		} catch (InitializeException e) {
327
			throw new RasterNotLoadException("Error creating parameters.");
328
		} catch (ProviderNotRegisteredException e) {
329
			throw new RasterNotLoadException("Error creating parameters.");
330
		}
331
		theView.getMapControl().getMapContext().getLayers().addLayer(lyr);
332
		theView.getMapControl().getMapContext().invalidate();
333
		theView.getMapControl().getMapContext().endAtomicEvent();
334
		return lyr;
335
	}
336
	
337
	/**
338
	 * Carga una capa raster en una vista de gvSIG.
339
	 * @param viewName Nombre de la vista donde ha de cargarse. Si vale null se cargar? en la
340
	 * primera vista que encuentre que est? activa. Si no hay ninguna saltar? una excepci?n.
341
	 * @param fileName Nombre del fichero a cargar. No debe ser nulo nunca.
342
	 * @param layerName Nombre de la capa. Si es null se asignar? el nombre del
343
	 * fichero sin extensi?n.
344
	 * @throws RasterNotLoadException Excepci?n que se lanza cuando no se ha podido cargar la capa
345
	 * por alg?n motivo.
346
	 */
347
	public static FLayer loadLayer(String viewName, FLayer lyr) throws RasterNotLoadException {
348
		if(lyr ==  null)
349
			return null;
350

  
351
		//Seleccionamos la vista de gvSIG
352
		AbstractViewPanel theView = null;
353
		try {
354
			IWindow[] allViews = PluginServices.getMDIManager().getAllWindows();
355
			if(viewName != null) {
356
				for (int i = 0; i < allViews.length; i++) {
357
					if (allViews[i] instanceof AbstractViewPanel
358
						&& PluginServices.getMDIManager().getWindowInfo((AbstractViewPanel) allViews[i]).getTitle().equals(viewName))
359
						theView = (AbstractViewPanel) allViews[i];
360
				}
361
			} else {
362
				IWindow activeWindow = PluginServices.getMDIManager().getActiveWindow();
363
				for (int i = 0; i < allViews.length; i++) {
364
					if (allViews[i] instanceof AbstractViewPanel && ((AbstractViewPanel)allViews[i]) == activeWindow) //En la primera vista activa
365
						theView = (AbstractViewPanel) allViews[i];
366
				}
367
				if(theView == null) {
368
					for (int i = 0; i < allViews.length; i++) {
369
						if (allViews[i] instanceof AbstractViewPanel) //En la primera vista
370
							theView = (AbstractViewPanel) allViews[i];
371
					}
372
				}
373
			}
374

  
375
			if (theView == null)
376
				throw new RasterNotLoadException("Imposible cargar la capa.");
377
		} catch (ClassCastException ex) {
378
			throw new RasterNotLoadException("No se puede hacer un casting de esa IWindow a View.");
379
		}
380

  
381
		theView.getMapControl().getMapContext().beginAtomicEvent();
382
		theView.getMapControl().getMapContext().getLayers().addLayer(lyr);
383
		theView.getMapControl().getMapContext().invalidate();
384
		theView.getMapControl().getMapContext().endAtomicEvent();
385
		return lyr;
386
	}
387
	
388
	/**
389
	 * Calculo de las coordenadas de una ventana IWindow para que quede centrada sobre el 
390
	 * MainFrame. Estas coordenadas solo valen para un IWindow ya que andami mete las ventanas
391
	 * con coordenadas relativas a su ventanta principal.
392
	 * @param widthWindow Ancho de la ventana a a?adir
393
	 * @param heightWindow Alto de la ventana a a?adir
394
	 * @return Array con el ancho y el alto 
395
	 */
396
	public static Point iwindowPosition(int widthWindow, int heightWindow) {
397
		int posWindowX = 0;
398
		int posWindowY = 0;
399
		Dimension dim = null;
400
		Point pos = null;
401
		if(PluginServices.getMainFrame() instanceof Component) {
402
			dim = ((Component)PluginServices.getMainFrame()).getSize();
403
			pos = ((Component)PluginServices.getMainFrame()).getLocation();
404
			if(dim != null && pos != null) {
405
				posWindowX = ((dim.width >> 1) - (widthWindow >> 1));
406
				posWindowY = ((dim.height >> 1) - (heightWindow >> 1) - 70);
407
				return new Point(posWindowX, posWindowY);
408
			}
409
		}
410
		return null;
411
	}
412
}
org.gvsig.raster/tags/org.gvsig.raster-2.2.270/org.gvsig.raster.app/org.gvsig.raster.app.common/src/main/java/org/gvsig/raster/mainplugin/config/Configuration.java
1
/* gvSIG. Geographic Information System of the Valencian Government
2
*
3
* Copyright (C) 2007-2008 Infrastructures and Transports Department
4
* of the Valencian Government (CIT)
5
* 
6
* This program is free software; you can redistribute it and/or
7
* modify it under the terms of the GNU General Public License
8
* as published by the Free Software Foundation; either version 2
9
* of the License, or (at your option) any later version.
10
* 
11
* This program is distributed in the hope that it will be useful,
12
* but WITHOUT ANY WARRANTY; without even the implied warranty of
13
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
14
* GNU General Public License for more details.
15
* 
16
* You should have received a copy of the GNU General Public License
17
* along with this program; if not, write to the Free Software
18
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, 
19
* MA  02110-1301, USA.
20
* 
21
*/
22
package org.gvsig.raster.mainplugin.config;
23

  
24
import java.util.ArrayList;
25
import java.util.HashMap;
26
import java.util.Iterator;
27

  
28
import org.gvsig.andami.PluginServices;
29
import org.gvsig.raster.fmap.layers.IConfiguration;
30
import org.gvsig.utils.XMLEntity;
31

  
32
/**
33
 * La clase <code>Configuration</code> sirve para poder leer y escribir valores en el entorno
34
 * de raster a nivel de configuraci?n. Para leer o escribir hay que usar los
35
 * metodos getValue y setValue, estos metodos lanzan eventos en el caso de
36
 * cambiar el valor que habia establecido. Forma de uso:<p>
37
 *
38
 * En la lectura es recomendable pasar un valor por defecto en el get, para que
39
 * si no existe o si existe pero no corresponde el tipo de datos devolvera el
40
 * valor por defecto<p>
41
 *
42
 * <code>Boolean valor = Configuration.getValue("valorBooleano", Boolean.valueOf(true));</code><p>
43
 *
44
 * <code>Configuration.setValue("valorBooleano", Boolean.valueOf(false));</code><p>
45
 *
46
 * Solo se pueden usar los siguientes tipos de datos:<br>
47
 *  - <b>Boolean</b>, <b>Double</b>, <b>Float</b>, <b>Integer</b>, <b>Long</b>
48
 *  y <b>String</b>.<p>
49
 *
50
 * Otra funcionalidad que tiene, es que puedes agregar un manejador de eventos
51
 * para controlar los cambios de las variables y actuar en consecuencia si cambia
52
 * la que deseas.
53
 *
54
 * @version 07/12/2007
55
 * @author BorSanZa - Borja S?nchez Zamorano (borja.sanchez@iver.es)
56
 */
57
public class Configuration implements IConfiguration {
58
	static private Configuration singleton              = new Configuration();
59
	private ArrayList<ConfigurationListener>            
60
	                             actionCommandListeners = new ArrayList<ConfigurationListener>();
61
	private XMLEntity            xml                    = null;
62
	private HashMap<String, Object>
63
	                             hashMap                = new HashMap<String, Object>();
64

  
65
	/**
66
	 * Constructor privado. Nos aseguramos de que nadie pueda crear una instancia
67
	 * desde fuera, la configuraci?n es ?nica para todos.
68
	 */
69
	private Configuration() {
70
		try {
71
			PluginServices ps = PluginServices.getPluginServices("org.gvsig.raster.mainplugin");
72
			xml = ps.getPersistentXML();
73
		} catch (NullPointerException e) {
74
			//No est? inicializado Configuration
75
			xml = new XMLEntity();
76
		}
77
	}
78

  
79
	/**
80
	 * Devuelve un valor Boolean para el key especificado
81
	 * @param key
82
	 * @param defaultValue
83
	 * @return
84
	 */
85
	static public Boolean getValue(String key, Boolean defaultValue) {
86
		singleton.saveDefaultValue(key, defaultValue);
87
		try {
88
			return Boolean.valueOf(getXMLEntity().getStringProperty(key));
89
		} catch (Exception e) {
90
		}
91
		try {
92
			getXMLEntity().putProperty(key, defaultValue.booleanValue());
93
		} catch(NullPointerException e) {
94
			//No est? inicializada la configuraci?n. Devuelve el default
95
		}
96
		return defaultValue;
97
	}
98

  
99
	/**
100
	 * Devuelve un valor Double para el key especificado
101
	 * @param key
102
	 * @param defaultValue
103
	 * @return
104
	 */
105
	static public Double getValue(String key, Double defaultValue) {
106
		singleton.saveDefaultValue(key, defaultValue);
107
		try {
108
			return Double.valueOf(getXMLEntity().getStringProperty(key));
109
		} catch (Exception e) {
110
		}
111
		getXMLEntity().putProperty(key, defaultValue.doubleValue());
112
		return defaultValue;
113
	}
114

  
115
	/**
116
	 * Devuelve un valor Float para el key especificado
117
	 * @param key
118
	 * @param defaultValue
119
	 * @return
120
	 */
121
	static public Float getValue(String key, Float defaultValue) {
122
		singleton.saveDefaultValue(key, defaultValue);
123
		try {
124
			return Float.valueOf(getXMLEntity().getStringProperty(key));
125
		} catch (Exception e) {
126
		}
127
		getXMLEntity().putProperty(key, defaultValue.floatValue());
128
		return defaultValue;
129
	}
130

  
131
	/**
132
	 * Devuelve un valor Integer para el key especificado
133
	 * @param key
134
	 * @param defaultValue
135
	 * @return
136
	 */
137
	static public Integer getValue(String key, Integer defaultValue) {
138
		singleton.saveDefaultValue(key, defaultValue);
139
		try {
140
			return Integer.valueOf(getXMLEntity().getStringProperty(key));
141
		} catch (Exception e) {
142
		}
143
		getXMLEntity().putProperty(key, defaultValue.intValue());
144
		return defaultValue;
145
	}
146

  
147
	/**
148
	 * Devuelve un valor Long para el key especificado
149
	 * @param key
150
	 * @param defaultValue
151
	 * @return
152
	 */
153
	static public Long getValue(String key, Long defaultValue) {
154
		singleton.saveDefaultValue(key, defaultValue);
155
		try {
156
			return Long.valueOf(getXMLEntity().getStringProperty(key));
157
		} catch (Exception e) {
158
		}
159
		getXMLEntity().putProperty(key, defaultValue.longValue());
160
		return defaultValue;
161
	}
162

  
163
	/**
164
	 * Devuelve un valor String para el key especificado
165
	 * @param key
166
	 * @param defaultValue
167
	 * @return
168
	 */
169
	static public String getValue(String key, String defaultValue) {
170
		singleton.saveDefaultValue(key, defaultValue);
171
		try {
172
			return getXMLEntity().getStringProperty(key);
173
		} catch (Exception e) {
174
		}
175
		getXMLEntity().putProperty(key, defaultValue);
176
		return defaultValue;
177
	}
178

  
179
	/**
180
	 * Guarda el valor por defecto en caso de que no exista
181
	 * @param key
182
	 * @param defaultValue
183
	 */
184
	private void saveDefaultValue(String key, Object defaultValue) {
185
		if (hashMap.get(key) == null)
186
			hashMap.put(key, defaultValue);
187
	}
188

  
189
	/**
190
	 * Devuelve el valor por defecto de un key
191
	 * @param key
192
	 * @return
193
	 */
194
	static public Object getDefaultValue(String key) {
195
		return singleton.hashMap.get(key);
196
	}
197

  
198
	/**
199
	 * Guarda en la configuracion el Objeto pasado por parametro asociado a dicho
200
	 * key
201
	 * @param key
202
	 * @param value
203
	 */
204
	private void putProperty(String key, Object value) {
205
		if (Integer.class.isInstance(value)) {
206
			getXMLEntity().putProperty(key, ((Integer) value).intValue());
207
			return;
... This diff was truncated because it exceeds the maximum size that can be displayed.

Also available in: Unified diff