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

View differences:

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