Revision 4181 org.gvsig.raster/trunk/org.gvsig.raster/org.gvsig.raster.lib/org.gvsig.raster.lib.impl/src/main/java/org/gvsig/raster/impl/store/DefaultRasterStore.java
DefaultRasterStore.java | ||
---|---|---|
5 | 5 |
import java.awt.geom.Point2D; |
6 | 6 |
import java.awt.geom.Rectangle2D; |
7 | 7 |
import java.io.File; |
8 |
import java.net.URI; |
|
8 | 9 |
import java.util.ArrayList; |
9 | 10 |
import java.util.Collection; |
10 | 11 |
import java.util.List; |
11 | 12 |
|
12 | 13 |
import org.cresques.cts.IProjection; |
14 |
|
|
13 | 15 |
import org.gvsig.compat.net.ICancellable; |
14 | 16 |
import org.gvsig.fmap.crs.CRSFactory; |
15 | 17 |
import org.gvsig.fmap.dal.DALLocator; |
... | ... | |
78 | 80 |
import org.gvsig.tools.persistence.PersistenceManager; |
79 | 81 |
import org.gvsig.tools.persistence.PersistentState; |
80 | 82 |
import org.gvsig.tools.persistence.exception.PersistenceException; |
83 |
|
|
81 | 84 |
import org.slf4j.Logger; |
82 | 85 |
import org.slf4j.LoggerFactory; |
83 | 86 |
|
... | ... | |
90 | 93 |
public static final String PERSISTENT_NAME = "DefaultRasterStore_Persistent"; |
91 | 94 |
public static final String PERSISTENT_DESCRIPTION = "DefaultRasterStore Persistent"; |
92 | 95 |
private static final Logger logger = LoggerFactory.getLogger(DefaultRasterStore.class); |
93 |
|
|
96 |
|
|
94 | 97 |
/* |
95 |
* TODO: Refactoring de ROIS
|
|
98 |
* TODO: Refactoring de ROIS |
|
96 | 99 |
* Una capa r?ster deber?a poder tener ROIs de tipo r?ster y de tipo vectorial asociados. Adem?s |
97 | 100 |
* debe poder tener una lista de estos por lo que ser?a necesario un interfaz en la que se pueda |
98 | 101 |
* seleccionar la capa de ROIs a utilizar. |
99 |
*
|
|
102 |
* |
|
100 | 103 |
* Por otro lado, las ROIs deben ser del proveedor de datos. Este con tendr? una lista de estos. |
101 |
* Las ROIs deber?an modelarse como proveedores de datos de tipo r?ster o de tipo vectorial, ya que
|
|
104 |
* Las ROIs deber?an modelarse como proveedores de datos de tipo r?ster o de tipo vectorial, ya que |
|
102 | 105 |
* tener una lista de geometr?as en memoria como hasta ahora puede ser muy poco eficiente en caso |
103 | 106 |
* de que la lista de ROIs sea muy grande. Adem?s deber?a optimizarse el acceso isInside para que las |
104 | 107 |
* operaciones con ROIs asociados sean lo m?s r?pidas posible. |
105 | 108 |
*/ |
106 | 109 |
private List<ROI> rois = null; |
107 |
|
|
110 |
|
|
108 | 111 |
public DefaultRasterStore() { |
109 | 112 |
super(); |
110 | 113 |
} |
111 |
|
|
114 |
|
|
112 | 115 |
public void reload() { |
113 | 116 |
provider.reload(); |
114 | 117 |
} |
... | ... | |
118 | 121 |
parameters = (DataStoreParameters)provider.getDataParameters(); |
119 | 122 |
initializeBandList(); |
120 | 123 |
} |
121 |
|
|
124 |
|
|
122 | 125 |
public void setParameters(DataStoreParameters p) { |
123 | 126 |
this.parameters = p; |
124 | 127 |
} |
125 |
|
|
128 |
|
|
126 | 129 |
public void setProvider(CoverageStoreProvider prov) { |
127 | 130 |
if(prov instanceof RasterProvider) |
128 | 131 |
setProvider((RasterProvider)prov); |
129 | 132 |
} |
130 |
|
|
133 |
|
|
131 | 134 |
public String getName() { |
132 | 135 |
if(provider != null) |
133 | 136 |
return provider.getName(); |
134 | 137 |
return null; |
135 | 138 |
} |
136 |
|
|
139 |
|
|
137 | 140 |
public boolean needEnhanced() { |
138 | 141 |
if(provider != null) |
139 | 142 |
return provider.needEnhanced(); |
... | ... | |
143 | 146 |
public boolean isTiled() { |
144 | 147 |
return provider.isTiled(); |
145 | 148 |
} |
146 |
|
|
149 |
|
|
147 | 150 |
public boolean isMosaic() { |
148 | 151 |
return provider.isMosaic(); |
149 | 152 |
} |
150 |
|
|
153 |
|
|
151 | 154 |
public Tile getTile(SpiRasterQuery q) throws TileGettingException { |
152 | 155 |
TiledRasterProvider tiledProv = ((TiledRasterProvider)provider); |
153 | 156 |
return tiledProv.getTile(q); |
... | ... | |
167 | 170 |
long[] fSize = provider.getFileSizeByProvider(); |
168 | 171 |
if(fSize != null && fSize.length > 0) { |
169 | 172 |
for (int j = 0; j < fSize.length; j++) { |
170 |
size += fSize[j];
|
|
173 |
size += fSize[j]; |
|
171 | 174 |
} |
172 | 175 |
} |
173 | 176 |
return size; |
... | ... | |
283 | 286 |
public ColorTable getColorTables() { |
284 | 287 |
return provider.getColorTable(); |
285 | 288 |
} |
286 |
|
|
289 |
|
|
287 | 290 |
public ColorTable getColorTable() { |
288 | 291 |
//Solo tiene sentido si tiene un fichero y ese fichero tiene una sola banda |
289 | 292 |
if(provider != null) |
290 | 293 |
return provider.getColorTable(); |
291 | 294 |
return null; |
292 | 295 |
} |
293 |
|
|
296 |
|
|
294 | 297 |
/** |
295 | 298 |
* Sets the color table |
296 | 299 |
* @param colorTable |
... | ... | |
338 | 341 |
return provider.isInside(p); |
339 | 342 |
return false; |
340 | 343 |
} |
341 |
|
|
344 |
|
|
342 | 345 |
public RasterDataStore getDataStore() { |
343 | 346 |
return this; |
344 | 347 |
} |
... | ... | |
373 | 376 |
public void setDrawableBands(int[] db) { |
374 | 377 |
getBands().setDrawableBands(db); |
375 | 378 |
} |
376 |
|
|
379 |
|
|
377 | 380 |
public int[] getDrawableBands() { |
378 | 381 |
return getBands().getDrawableBands(); |
379 | 382 |
} |
... | ... | |
389 | 392 |
public void deleteLayerFromCache() { |
390 | 393 |
provider.deleteLayerFromCache(); |
391 | 394 |
} |
392 |
|
|
395 |
|
|
393 | 396 |
public boolean isMultiFile() { |
394 | 397 |
return provider.isMultiFile(); |
395 | 398 |
} |
396 |
|
|
399 |
|
|
397 | 400 |
public int getOverviewWidth(int band, int overview) throws BandAccessException, RasterDriverException { |
398 | 401 |
return provider.getOverviewWidth(band, overview); |
399 | 402 |
} |
... | ... | |
413 | 416 |
return provider.isOverviewsSupported(); |
414 | 417 |
return false; |
415 | 418 |
} |
416 |
|
|
419 |
|
|
417 | 420 |
public void saveGeoreferencingToRmf() throws RmfSerializerException { |
418 | 421 |
provider.saveObjectToRmf(AbstractRasterProvider.class, provider); |
419 | 422 |
} |
420 |
|
|
423 |
|
|
421 | 424 |
public void saveSerialInfoToRmf(TimeSeries serialInfo) throws RmfSerializerException { |
422 | 425 |
provider.saveObjectToRmf(TimeSeries.class, serialInfo); |
423 | 426 |
} |
... | ... | |
425 | 428 |
public void saveColorTableToRmf(ColorTable table) throws RmfSerializerException { |
426 | 429 |
provider.saveObjectToRmf(ColorTable.class, table); |
427 | 430 |
} |
428 |
|
|
431 |
|
|
429 | 432 |
public void saveGeoPointListToRmf(GeoPointList pointList) throws RmfSerializerException { |
430 | 433 |
provider.saveObjectToRmf(GeoPointList.class, pointList); |
431 | 434 |
} |
432 |
|
|
435 |
|
|
433 | 436 |
public void saveROIFileListToRmf(List<File> fileList) throws RmfSerializerException { |
434 | 437 |
provider.saveObjectToRmf(List.class, fileList); |
435 | 438 |
} |
436 |
|
|
439 |
|
|
437 | 440 |
public List<File> getROIFileListFromRmf() { |
438 | 441 |
try { |
439 | 442 |
List<File> fileList = new ArrayList<File>(); |
... | ... | |
443 | 446 |
} |
444 | 447 |
return null; |
445 | 448 |
} |
446 |
|
|
449 |
|
|
447 | 450 |
public boolean loadSerialInfoFromRmf(TimeSeries serialInfo) { |
448 | 451 |
try { |
449 | 452 |
provider.loadObjectFromRmf(TimeSeries.class, serialInfo); |
... | ... | |
459 | 462 |
return provider.getView(); |
460 | 463 |
return null; |
461 | 464 |
} |
462 |
|
|
465 |
|
|
463 | 466 |
public Extent getExtentWithoutRot() { |
464 | 467 |
if(provider != null) |
465 | 468 |
return provider.getExtentWithoutRot(); |
466 | 469 |
return null; |
467 | 470 |
} |
468 |
|
|
471 |
|
|
469 | 472 |
public AffineTransform getOwnAffineTransform() { |
470 | 473 |
if(provider != null) |
471 | 474 |
return provider.getOwnAffineTransform(); |
472 | 475 |
return null; |
473 | 476 |
} |
474 |
|
|
477 |
|
|
475 | 478 |
public AffineTransform getAffineTransform() { |
476 | 479 |
if(provider != null) { |
477 | 480 |
AffineTransform at = provider.getAffineTransform(); |
... | ... | |
483 | 486 |
double sX = scale.getX() - translate.getX(); |
484 | 487 |
double sY = scale.getY() - translate.getY(); |
485 | 488 |
at = new AffineTransform( |
486 |
sX,
|
|
487 |
at.getShearY(),
|
|
488 |
at.getShearX(),
|
|
489 |
sY,
|
|
490 |
translate.getX(),
|
|
489 |
sX, |
|
490 |
at.getShearY(), |
|
491 |
at.getShearX(), |
|
492 |
sY, |
|
493 |
translate.getX(), |
|
491 | 494 |
translate.getY()); |
492 | 495 |
}*/ |
493 | 496 |
return at; |
494 | 497 |
} |
495 | 498 |
return null; |
496 | 499 |
} |
497 |
|
|
500 |
|
|
498 | 501 |
public IProjection getProjection() { |
499 | 502 |
if(provider != null) |
500 | 503 |
return provider.getProjection(); |
501 | 504 |
return null; |
502 | 505 |
} |
503 |
|
|
506 |
|
|
504 | 507 |
public void setProjection(IProjection proj, boolean persist) throws RmfSerializerException { |
505 | 508 |
if(provider != null) |
506 | 509 |
provider.setProjection(proj, persist); |
507 | 510 |
} |
508 |
|
|
511 |
|
|
509 | 512 |
public Statistics getStatistics() { |
510 | 513 |
if(provider != null) |
511 | 514 |
return provider.getStatistics(); |
512 | 515 |
return null; |
513 | 516 |
} |
514 |
|
|
517 |
|
|
515 | 518 |
public void setStatistics(Statistics stats) throws RmfSerializerException { |
516 | 519 |
if(provider != null) |
517 | 520 |
provider.setStatistics(stats); |
518 | 521 |
} |
519 |
|
|
522 |
|
|
520 | 523 |
public HistogramComputer getHistogramComputer() { |
521 | 524 |
if(provider != null) |
522 | 525 |
return provider.getHistogramComputer(); |
523 | 526 |
return null; |
524 | 527 |
} |
525 |
|
|
528 |
|
|
526 | 529 |
public Metadata getMetadata() { |
527 | 530 |
if(provider != null) |
528 | 531 |
return provider.getMetadata(); |
529 | 532 |
return null; |
530 | 533 |
} |
531 |
|
|
534 |
|
|
532 | 535 |
public Transparency getTransparency() { |
533 | 536 |
if(provider != null) { |
534 | 537 |
provider.getTransparency().setNoData(getNoDataValue()); |
... | ... | |
536 | 539 |
} |
537 | 540 |
return null; |
538 | 541 |
} |
539 |
|
|
542 |
|
|
540 | 543 |
public ColorInterpretation getColorInterpretation() { |
541 | 544 |
return provider.getColorInterpretation(); |
542 | 545 |
} |
543 |
|
|
546 |
|
|
544 | 547 |
public void setColorInterpretation(ColorInterpretation ci) { |
545 | 548 |
provider.setColorInterpretation(ci); |
546 | 549 |
} |
... | ... | |
550 | 553 |
return (provider.isReproyectable()); |
551 | 554 |
return false; |
552 | 555 |
} |
553 |
|
|
556 |
|
|
554 | 557 |
public String getMetadataName() { |
555 | 558 |
if(provider != null) |
556 | 559 |
return provider.getName(); |
557 | 560 |
return null; |
558 | 561 |
} |
559 |
|
|
562 |
|
|
560 | 563 |
public RasterDataStore cloneDataStore() throws CloneException { |
561 | 564 |
DefaultRasterStore ds = new DefaultRasterStore(); |
562 | 565 |
ds.parameters = getParameters(); |
563 | 566 |
ds.provider = provider.cloneProvider(); |
564 |
|
|
567 |
|
|
565 | 568 |
int[] bands = new int[1]; |
566 | 569 |
bands[0] = provider.getBandCount(); |
567 | 570 |
ds.metadata = new MultiDataStoreMetadata(bands); |
568 | 571 |
((MultiDataStoreMetadata)ds.metadata).add(provider.getMetadata()); |
569 |
|
|
572 |
|
|
570 | 573 |
ds.storeBandList = (BandListImpl)storeBandList.clone(); |
571 | 574 |
return ds; |
572 | 575 |
} |
573 |
|
|
576 |
|
|
574 | 577 |
public boolean isOpen() { |
575 | 578 |
if(provider == null) |
576 | 579 |
return false; |
... | ... | |
580 | 583 |
public CoverageStoreProvider getProvider() { |
581 | 584 |
return provider; |
582 | 585 |
} |
583 |
|
|
586 |
|
|
584 | 587 |
public String getInfoByPoint(double x, double y, ICancellable cancellable) throws InfoByPointException { |
585 | 588 |
return ((RasterProvider)getProvider()).getInfoByPoint(x, y, cancellable); |
586 | 589 |
} |
587 |
|
|
590 |
|
|
588 | 591 |
public String getInfoByPoint(double x, double y, Extent bbox, int w, int h, ICancellable cancellable) throws InfoByPointException { |
589 | 592 |
return ((RasterProvider)getProvider()).getInfoByPoint((int)x, (int)y, bbox, w, h, cancellable); |
590 | 593 |
} |
... | ... | |
612 | 615 |
((MultiDimensionalStoreParameters)getParameters()).selectPrevInstant(); |
613 | 616 |
} |
614 | 617 |
} |
615 |
|
|
618 |
|
|
616 | 619 |
public void setTime(Time time) throws TimeException, OperationNotSupportedException { |
617 | 620 |
if(!isTimeSupportedByTheProvider()) |
618 | 621 |
throw new OperationNotSupportedException("Not supported for a RasterDataset"); |
619 |
|
|
622 |
|
|
620 | 623 |
} |
621 |
|
|
624 |
|
|
622 | 625 |
/** |
623 | 626 |
* Returns true whether all providers support time |
624 | 627 |
* @return |
... | ... | |
628 | 631 |
return provider.isTimeSupported(); |
629 | 632 |
return false; |
630 | 633 |
} |
631 |
|
|
634 |
|
|
632 | 635 |
public boolean isRasterEnclosed() { |
633 | 636 |
if(provider != null) |
634 | 637 |
return provider.isRasterEnclosed(); |
... | ... | |
666 | 669 |
return -1; |
667 | 670 |
} |
668 | 671 |
} |
669 |
|
|
672 |
|
|
670 | 673 |
public void setTileServer(Class<?> tileServer) throws InitializeException { |
671 | 674 |
if(provider instanceof TiledRasterProvider) { |
672 | 675 |
((TiledRasterProvider)provider).setTileServer(tileServer); |
... | ... | |
701 | 704 |
} |
702 | 705 |
return null; |
703 | 706 |
} |
704 |
|
|
707 |
|
|
705 | 708 |
public RasterDataStore newNotTiledDataStore() { |
706 | 709 |
if(provider != null) { |
707 | 710 |
RasterManager manager = (DefaultRasterManager)RasterLocator.getManager(); |
... | ... | |
710 | 713 |
DataStoreParameters newParams = (DataStoreParameters)parameters; |
711 | 714 |
if(this.isTiled()) { |
712 | 715 |
newParams = ((TiledRasterProvider)getProvider()).getInternalProvider().getDataParameters(); |
713 |
}
|
|
714 |
|
|
716 |
} |
|
717 |
|
|
715 | 718 |
newDataStore = manager.getProviderServices().open(newParams); |
716 | 719 |
if(newDataStore instanceof DefaultRasterStore) { |
717 | 720 |
((DefaultRasterStore)newDataStore).setStatistics(getStatistics()); |
... | ... | |
728 | 731 |
return null; |
729 | 732 |
} |
730 | 733 |
|
731 |
public String[] getURIByProvider() {
|
|
734 |
public URI[] getURIByProvider() {
|
|
732 | 735 |
return provider.getURIByProvider(); |
733 | 736 |
} |
734 | 737 |
|
... | ... | |
739 | 742 |
public int getProviderCount() { |
740 | 743 |
return provider.getInternalProviderCount(); |
741 | 744 |
} |
742 |
|
|
745 |
|
|
743 | 746 |
public int[] getBandCountByProvider() { |
744 | 747 |
return provider.getBandCountByProvider(); |
745 | 748 |
} |
746 |
|
|
749 |
|
|
747 | 750 |
public RasterDataParameters[] getDataParametersByProvider() { |
748 | 751 |
RasterDataParameters[] res = new RasterDataParameters[getProviderCount()]; |
749 | 752 |
for (int i = 0; i < res.length; i++) { |
750 |
res[i] = (RasterDataParameters)provider.getInternalProvider(i).getDataParameters();
|
|
753 |
res[i] = (RasterDataParameters)provider.getInternalProvider(i).getDataParameters(); |
|
751 | 754 |
} |
752 | 755 |
return res; |
753 | 756 |
} |
754 |
|
|
757 |
|
|
755 | 758 |
public Metadata[] getMetadataByProvider() { |
756 | 759 |
Metadata[] res = new Metadata[getProviderCount()]; |
757 | 760 |
for (int i = 0; i < res.length; i++) { |
758 |
res[i] = provider.getInternalProvider(i).getMetadata();
|
|
761 |
res[i] = provider.getInternalProvider(i).getMetadata(); |
|
759 | 762 |
} |
760 | 763 |
return res; |
761 | 764 |
} |
762 |
|
|
765 |
|
|
763 | 766 |
public int[] getOverviewCountByProvider(int band) throws BandAccessException { |
764 | 767 |
int[] res = new int[getProviderCount()]; |
765 | 768 |
for (int i = 0; i < res.length; i++) { |
... | ... | |
767 | 770 |
res[i] = provider.getInternalProvider(i).getOverviewCount(band); |
768 | 771 |
} catch (RasterDriverException e) { |
769 | 772 |
throw new BandAccessException("", e); |
770 |
}
|
|
773 |
} |
|
771 | 774 |
} |
772 | 775 |
return res; |
773 | 776 |
} |
774 |
|
|
777 |
|
|
775 | 778 |
public String[] getOverviewSizeByProvider(int band, int overview) throws BandAccessException { |
776 | 779 |
String[] res = new String[getProviderCount()]; |
777 | 780 |
for (int i = 0; i < res.length; i++) { |
778 | 781 |
try { |
779 |
res[i] = provider.getInternalProvider(i).getOverviewWidth(band, overview) +
|
|
780 |
"x" +
|
|
782 |
res[i] = provider.getInternalProvider(i).getOverviewWidth(band, overview) + |
|
783 |
"x" + |
|
781 | 784 |
provider.getInternalProvider(i).getOverviewHeight(band, overview); |
782 | 785 |
} catch (RasterDriverException e) { |
783 | 786 |
throw new BandAccessException("", e); |
784 |
}
|
|
787 |
} |
|
785 | 788 |
} |
786 | 789 |
return res; |
787 | 790 |
} |
788 |
|
|
791 |
|
|
789 | 792 |
public AffineTransform[] getAffineTransformByProvider() { |
790 | 793 |
AffineTransform[] res = new AffineTransform[getProviderCount()]; |
791 | 794 |
for (int i = 0; i < res.length; i++) { |
... | ... | |
793 | 796 |
} |
794 | 797 |
return res; |
795 | 798 |
} |
796 |
|
|
799 |
|
|
797 | 800 |
public double[] getHeightByProvider() { |
798 | 801 |
double[] res = new double[getProviderCount()]; |
799 | 802 |
for (int i = 0; i < res.length; i++) { |
... | ... | |
801 | 804 |
} |
802 | 805 |
return res; |
803 | 806 |
} |
804 |
|
|
807 |
|
|
805 | 808 |
public double[] getWidthByProvider() { |
806 | 809 |
double[] res = new double[getProviderCount()]; |
807 | 810 |
for (int i = 0; i < res.length; i++) { |
... | ... | |
809 | 812 |
} |
810 | 813 |
return res; |
811 | 814 |
} |
812 |
|
|
813 |
public void addFile(String file) throws InvalidSourceException {
|
|
815 |
|
|
816 |
public void addFile(File file) throws InvalidSourceException {
|
|
814 | 817 |
provider.addFile(file); |
815 | 818 |
} |
816 |
|
|
817 |
public void removeFile(String file) {
|
|
819 |
|
|
820 |
public void removeFile(File file) {
|
|
818 | 821 |
provider.removeFile(file); |
819 |
storeBandList.removeBands(file); |
|
822 |
storeBandList.removeBands(file.getPath());
|
|
820 | 823 |
} |
821 |
|
|
822 |
public String getURIByBand(int band) {
|
|
824 |
|
|
825 |
public URI getURIByBand(int band) {
|
|
823 | 826 |
return provider.getURIByBand(band); |
824 | 827 |
} |
825 |
|
|
828 |
|
|
826 | 829 |
/** |
827 | 830 |
* Gets the {@link Interval} of the store, that means the temporal |
828 | 831 |
* interval where the store has valid data. |
829 |
* In raster this method has sense in a mosaic. Therefore this has to be implemented
|
|
832 |
* In raster this method has sense in a mosaic. Therefore this has to be implemented |
|
830 | 833 |
* by the provider. |
831 | 834 |
* @return |
832 | 835 |
* a time interval or null if there is not time support |
... | ... | |
834 | 837 |
public Interval getInterval() { |
835 | 838 |
return provider.getInterval(); |
836 | 839 |
} |
837 |
|
|
840 |
|
|
838 | 841 |
/** |
839 |
* Gets all the possible values of time for which the store has data.
|
|
840 |
* In raster this method has sense in a mosaic. Therefore this has to be implemented
|
|
842 |
* Gets all the possible values of time for which the store has data. |
|
843 |
* In raster this method has sense in a mosaic. Therefore this has to be implemented |
|
841 | 844 |
* by the provider. |
842 | 845 |
* @return |
843 | 846 |
* a collection of {@link Time} objects. |
... | ... | |
845 | 848 |
public Collection<?> getTimes() { |
846 | 849 |
return provider.getTimes(); |
847 | 850 |
} |
848 |
|
|
851 |
|
|
849 | 852 |
/** |
850 | 853 |
* Gets all the possible values of time for which the store has data |
851 | 854 |
* and intersects with an interval. |
852 |
* In raster this method has sense in a mosaic. Therefore this has to be implemented
|
|
855 |
* In raster this method has sense in a mosaic. Therefore this has to be implemented |
|
853 | 856 |
* by the provider. |
854 | 857 |
* @param interval |
855 | 858 |
* the interval of time |
... | ... | |
859 | 862 |
public Collection<?> getTimes(Interval interval) { |
860 | 863 |
return provider.getTimes(interval); |
861 | 864 |
} |
862 |
|
|
865 |
|
|
863 | 866 |
public Image getImageLegend() { |
864 | 867 |
if(provider != null) |
865 | 868 |
return provider.getImageLegend(); |
866 | 869 |
return null; |
867 | 870 |
} |
868 |
|
|
871 |
|
|
869 | 872 |
/** |
870 | 873 |
* Gets the list of geo points associated to this provider |
871 | 874 |
* @return |
... | ... | |
873 | 876 |
public GeoPointList getGeoPointList() { |
874 | 877 |
return provider.getGeoPointList(); |
875 | 878 |
} |
876 |
|
|
879 |
|
|
877 | 880 |
/** |
878 | 881 |
* Sets the list of geo points associated to this provider |
879 | 882 |
*/ |
880 | 883 |
public void setGeoPointList(GeoPointList geoPointList) { |
881 | 884 |
provider.setGeoPointList(geoPointList); |
882 | 885 |
} |
883 |
|
|
886 |
|
|
884 | 887 |
public Envelope getFullEnvelope() { |
885 | 888 |
Rectangle2D e = getExtent().toRectangle2D(); |
886 | 889 |
try { |
... | ... | |
891 | 894 |
return null; |
892 | 895 |
} |
893 | 896 |
} |
894 |
|
|
897 |
|
|
895 | 898 |
public List<ROI> getRois(String epsg) throws ROIException { |
896 | 899 |
IProjection proj = CRSFactory.getCRS(epsg); |
897 | 900 |
return getRois(proj); |
898 | 901 |
} |
899 |
|
|
902 |
|
|
900 | 903 |
public List<ROI> getRois(IProjection defaultProjection) throws ROIException { |
901 | 904 |
if(rois == null) { |
902 | 905 |
try { |
... | ... | |
908 | 911 |
proj = defaultProjection; |
909 | 912 |
} |
910 | 913 |
ROIReader reader = new VectorialROIsReader( |
911 |
f.getPath(),
|
|
914 |
f.getPath(), |
|
912 | 915 |
getDataStore(), |
913 | 916 |
proj, |
914 | 917 |
getFullEnvelope()); |
... | ... | |
925 | 928 |
public void setRois(List<ROI> rois) { |
926 | 929 |
this.rois = rois; |
927 | 930 |
} |
928 |
|
|
931 |
|
|
929 | 932 |
public void setROIsFiles(List<File> file) throws RmfSerializerException { |
930 | 933 |
getDataStore().saveROIFileListToRmf(file); |
931 | 934 |
} |
932 |
|
|
935 |
|
|
933 | 936 |
public List<File> getROIsFiles() throws RmfSerializerException { |
934 | 937 |
return getDataStore().getROIFileListFromRmf(); |
935 | 938 |
} |
936 |
|
|
939 |
|
|
937 | 940 |
public void close() { |
938 | 941 |
if(provider != null) |
939 | 942 |
provider.close(); |
... | ... | |
947 | 950 |
} catch (Throwable e) { |
948 | 951 |
} |
949 | 952 |
} |
950 |
|
|
953 |
|
|
951 | 954 |
protected void finalize() throws Throwable { |
952 | 955 |
provider = null; |
953 | 956 |
storeBandList = null; |
... | ... | |
958 | 961 |
} |
959 | 962 |
super.finalize(); |
960 | 963 |
} |
961 |
|
|
964 |
|
|
962 | 965 |
//****************************** |
963 | 966 |
//Persistence |
964 | 967 |
//****************************** |
965 |
|
|
968 |
|
|
966 | 969 |
public static void registerPersistence() { |
967 | 970 |
PersistenceManager manager = ToolsLocator.getPersistenceManager(); |
968 | 971 |
DynStruct definition = manager.getDefinition(PERSISTENT_NAME); |
... | ... | |
971 | 974 |
DefaultRasterStore.class, |
972 | 975 |
PERSISTENT_NAME, |
973 | 976 |
PERSISTENT_DESCRIPTION, |
974 |
null,
|
|
977 |
null, |
|
975 | 978 |
null |
976 | 979 |
); |
977 |
|
|
980 |
|
|
978 | 981 |
definition.addDynFieldObject("parameters") |
979 | 982 |
.setClassOfValue(RasterDataParameters.class) |
980 | 983 |
.setMandatory(true); |
981 |
|
|
984 |
|
|
982 | 985 |
definition.addDynFieldString("explorername") |
983 | 986 |
.setMandatory(false); |
984 |
|
|
987 |
|
|
985 | 988 |
definition.addDynFieldObject("bandList") |
986 | 989 |
.setClassOfValue(BandList.class) |
987 | 990 |
.setMandatory(false); |
988 |
|
|
991 |
|
|
989 | 992 |
definition.addDynFieldObject("metadata") |
990 | 993 |
.setClassOfValue(Metadata.class) |
991 | 994 |
.setMandatory(false); |
992 |
|
|
995 |
|
|
993 | 996 |
definition.addDynFieldObject("render") |
994 | 997 |
.setClassOfValue(Render.class) |
995 | 998 |
.setMandatory(false); |
996 | 999 |
} |
997 | 1000 |
} |
998 |
|
|
1001 |
|
|
999 | 1002 |
public void loadFromState(PersistentState state) |
1000 | 1003 |
throws PersistenceException { |
1001 | 1004 |
this.parameters = (RasterDataParameters)state.get("parameters"); |
1002 |
|
|
1005 |
|
|
1003 | 1006 |
String explorerName = (String)state.get("explorername"); |
1004 | 1007 |
if(explorerName != null) { |
1005 | 1008 |
if(initializePersistentParameters((RasterDataParameters)this.parameters, explorerName) == null) { |
1006 | 1009 |
throw new PersistenceException(); |
1007 | 1010 |
} |
1008 | 1011 |
} |
1009 |
|
|
1012 |
|
|
1010 | 1013 |
try { |
1011 | 1014 |
DataManagerProviderServices dataManager = (DataManagerProviderServices)DALLocator.getDataManager(); |
1012 | 1015 |
this.provider = (AbstractRasterProvider)dataManager.createProvider(this, this.parameters); |
... | ... | |
1015 | 1018 |
} catch (ProviderNotRegisteredException e) { |
1016 | 1019 |
throw new PersistenceException(e); |
1017 | 1020 |
} |
1018 |
|
|
1021 |
|
|
1019 | 1022 |
this.storeBandList = (BandListImpl)state.get("bandList"); |
1020 | 1023 |
if(parameters instanceof AbstractRasterFileDataParameters && !this.provider.isMultiFile()) { |
1021 | 1024 |
//Esto solo es por si al cargar un proyecto se ha cambiado el fichero de sitio y el usuario |
1022 |
//lo introduce manualmente. En ese caso el bandList debe contener la misma ruta al fichero que el
|
|
1025 |
//lo introduce manualmente. En ese caso el bandList debe contener la misma ruta al fichero que el |
|
1023 | 1026 |
//provider y no la que se grab? inicialmente |
1024 | 1027 |
for (int i = 0; i < storeBandList.getBandCount(); i++) { |
1025 |
storeBandList.getBand(i).setFileName(provider.getURI());
|
|
1028 |
storeBandList.getBand(i).setFileName(provider.getURI().getPath());
|
|
1026 | 1029 |
} |
1027 | 1030 |
} |
1028 | 1031 |
this.metadata = (Metadata)state.get("metadata"); |
1029 |
|
|
1032 |
|
|
1030 | 1033 |
DefaultRender render = (DefaultRender)state.get("render"); |
1031 | 1034 |
if(render == null) |
1032 | 1035 |
throw new PersistenceException(); |
... | ... | |
1036 | 1039 |
if(getRender().getRenderingTransparency() != null) |
1037 | 1040 |
getRender().getRenderingTransparency().setNoData(getNoDataValue()); |
1038 | 1041 |
} |
1039 |
|
|
1042 |
|
|
1040 | 1043 |
public void saveToState(PersistentState state) throws PersistenceException { |
1041 |
state.set("parameters", provider.getDataParameters());
|
|
1044 |
state.set("parameters", provider.getDataParameters()); |
|
1042 | 1045 |
RasterDataParameters provParams = getInternalDataParameterFromState(provider.getDataParameters()); |
1043 | 1046 |
state.set("explorername", provParams.getDataStoreName()); |
1044 | 1047 |
state.set("bandList", storeBandList); |
1045 | 1048 |
state.set("metadata", metadata); |
1046 | 1049 |
state.set("render", getRender()); |
1047 |
}
|
|
1048 |
|
|
1050 |
} |
|
1051 |
|
|
1049 | 1052 |
/** |
1050 | 1053 |
* Actions to initialize parameters before loaded more parts of the project |
1051 | 1054 |
* @param providerParams |
... | ... | |
1056 | 1059 |
try { |
1057 | 1060 |
if(!(getInternalDataParameterFromState(providerParams) instanceof RemoteStoreParameters)) |
1058 | 1061 |
return providerParams; |
1059 |
|
|
1062 |
|
|
1060 | 1063 |
DataManager datamanager = DALLocator.getDataManager(); |
1061 | 1064 |
DataServerExplorerParameters explorerParams = null; |
1062 | 1065 |
explorerParams = datamanager.createServerExplorerParameters(explorerName); |
... | ... | |
1065 | 1068 |
DataServerExplorer e = datamanager.openServerExplorer(explorerName, explorerParams); |
1066 | 1069 |
if(e instanceof RasterDataServerExplorer) { |
1067 | 1070 |
explorer = (RasterDataServerExplorer)e; |
1068 |
|
|
1071 |
|
|
1069 | 1072 |
explorerParams = explorer.getParameters(); |
1070 | 1073 |
explorerParams.setDynValue("host", providerParams.getURI()); |
1071 |
|
|
1074 |
|
|
1072 | 1075 |
if(!explorer.isHostReachable()) { |
1073 | 1076 |
return null; |
1074 | 1077 |
} |
1075 |
|
|
1078 |
|
|
1076 | 1079 |
try { |
1077 | 1080 |
explorer.connect(null); |
1078 | 1081 |
} catch (ConnectException exc) { |
1079 | 1082 |
return null; |
1080 | 1083 |
} |
1081 |
|
|
1084 |
|
|
1082 | 1085 |
RasterDataParameters newParameters = getInternalDataParameterFromState(explorer.getStoredParameters()); |
1083 | 1086 |
newParameters.assignFields(getInternalDataParameterFromState(providerParams), explorer); |
1084 | 1087 |
if(providerParams instanceof TileDataParameters) |
... | ... | |
1090 | 1093 |
} |
1091 | 1094 |
return null; |
1092 | 1095 |
} |
1093 |
|
|
1096 |
|
|
1094 | 1097 |
private RasterDataParameters getInternalDataParameterFromState(Object obj) { |
1095 | 1098 |
if(obj instanceof TileDataParameters) { |
1096 | 1099 |
return (RasterDataParameters)((TileDataParameters) obj).getDataParameters(); |
Also available in: Unified diff