Revision 64 org.gvsig.catalog/branches/org.gvsig.catalog-CSW2.0.2/org.gvsig.catalog/org.gvsig.catalog.extension/src/main/java/org/gvsig/catalog/loaders/WCSLayerLoader.java

View differences:

WCSLayerLoader.java
41 41
package org.gvsig.catalog.loaders;
42 42

  
43 43
import java.util.HashMap;
44
import java.util.HashSet;
45
import java.util.List;
44 46
import java.util.Map;
45
import java.util.TreeMap;
46 47

  
47
import org.gvsig.andami.PluginServices;
48
import org.gvsig.app.project.documents.view.gui.AbstractViewPanel;
48
import org.gvsig.app.gui.wizards.WizardListener;
49
import org.gvsig.app.gui.wizards.WizardListenerSupport;
50
import org.gvsig.catalog.gui.LoaderWizardPanel;
49 51
import org.gvsig.catalog.schemas.Resource;
50 52
import org.gvsig.fmap.dal.DataStoreParameters;
53
import org.gvsig.fmap.dal.coverage.exception.ConnectException;
51 54
import org.gvsig.fmap.dal.exception.InitializeException;
52 55
import org.gvsig.fmap.dal.exception.ProviderNotRegisteredException;
56
import org.gvsig.fmap.dal.exception.ValidateDataParametersException;
53 57
import org.gvsig.i18n.Messages;
58
import org.gvsig.raster.wcs.app.wcsclient.gui.panel.WCSParamsPanel;
59
import org.gvsig.raster.wcs.io.WCSLayerNode;
60
import org.gvsig.raster.wcs.io.WCSProvider;
61
import org.gvsig.raster.wcs.io.WCSServerExplorer;
62
import org.gvsig.raster.wcs.io.WCSServerExplorerParameters;
63
import org.slf4j.Logger;
64
import org.slf4j.LoggerFactory;
54 65

  
55 66

  
56 67
/**
......
59 70
 * @author Jorge Piera Llodra (piera_jor@gva.es)
60 71
 */
61 72
public class WCSLayerLoader extends GvSigLayerLoader{
62
    private static final String FIELD_FORMAT = "format";
63
    private static final String FIELD_NAME = "name";
64
    private static final String FIELD_SRSSTR = "srsstr";
65
    private static final String FIELD_URI = "uri";
66
    private static final String FIELD_ONLINERESOURC = "onlineresources";
67
    private static final String FIELD_WIDTH = "width";
68
    private static final String FIELD_HEIGHT = "height";
69
    private static final String FIELD_PARAM = "parameter";
70
    
71
    public WCSLayerLoader(Resource resource) {
72
        super(resource);
73
    }	
73
	
74
	private Logger logger = LoggerFactory.getLogger(WCSLayerLoader.class);
74 75

  
75
    protected boolean hasSpecificLayer() {        
76
        return true;
77
    }
76
	private WCSServerExplorer explorer;
78 77

  
79
    protected String getLayerName() {      
80
        return getResource().getName();
81
    } 
78
	private WCSParamsPanel wcsParamsPanel;
79
	
80
	public static final String FIELD_FORMAT = "format";
81
	public static final String FIELD_NAME = "name";
82
	public static final String FIELD_SRSSTR = "srsstr";
83
	public static final String FIELD_URI = "uri";
84
	public static final String FIELD_ONLINERESOURC = "onlineresources";
85
	public static final String FIELD_WIDTH = "width";
86
	public static final String FIELD_HEIGHT = "height";
87
	public static final String FIELD_PARAM = "parameter";
82 88

  
83
    protected DataStoreParameters createDataStoreParameters()
84
    throws InitializeException, ProviderNotRegisteredException {
85
        DataStoreParameters dataStoreParameters = DATA_MANAGER.createStoreParameters("Wcs Store");
86
        
87
        parseQuery(dataStoreParameters, getResource().getLinkage());        
88
        dataStoreParameters.setDynValue(FIELD_NAME, getLayerName());
89
        dataStoreParameters.setDynValue(FIELD_ONLINERESOURC, createOnlineResources());
90
        return dataStoreParameters;
91
    }
92
    
93
    protected Map createOnlineResources() {
94
        Map args = new HashMap();
95
        args.put("GepCoverage", getResource().getLinkage());      
96
        return args;
97
    }
89
	public WCSLayerLoader(Resource resource) {
90
		super(resource);
91
	}	
98 92

  
99
    protected String extensionPointName() {
100
        return "OGC:WCS";
101
    }
93
	protected boolean hasSpecificLayer() {        
94
		return true;
95
	}
102 96

  
103
    /**
104
     * Builds a coverage starting from a full GetCoverage URL.
105
     * (Using this is not a regular function)
106
     */
107
    private void parseQuery(DataStoreParameters dataStoreParameters, String link){
108
                
109
        String host = null;
110
        String queryString = null;
111
        int index = link.indexOf("?");
112
        if (index > 0){        
113
            host = link.substring(0, index);
114
            queryString = link.substring(index+1);
115
        }else{
116
            host = link;
117
            queryString = "";
118
        }
119
        
120
        queryString = link.substring(link.indexOf('?')+1);
121
        dataStoreParameters.setDynValue(FIELD_URI, link.substring(0,link.indexOf('?')));
122
               
123
        String[] params = queryString.split("&");
124
        for (int i = 0; i < params.length; i++) {
125
            if (params[i]!= null){
126
                String[] nameValue = params[i].split("=");
127
                if(nameValue.length == 2){
128
                    String param = nameValue[0].toUpperCase();
129
                    if (param.equals("CRS")){
130
                        dataStoreParameters.setDynValue(FIELD_SRSSTR, nameValue[1]);
131
                    }else if (param.equals("FORMAT")){
132
                        dataStoreParameters.setDynValue(FIELD_FORMAT, nameValue[1]);
133
                    }else if (param.equals("WIDTH")){
134
                        dataStoreParameters.setDynValue(FIELD_WIDTH, nameValue[1]);
135
                    }else if (param.equals("HEIGHT")){
136
                        dataStoreParameters.setDynValue(FIELD_HEIGHT, nameValue[1]);
137
                    }else if (param.equals("BANDS")){
138
                        dataStoreParameters.setDynValue(FIELD_PARAM, nameValue[1]);
139
                    }                   
140
                }
141
            }
142
        }  
143
    }	
97
	protected String getLayerName() {      
98
		return getResource().getName();
99
	} 
144 100

  
145
    protected String getErrorMessage() {
146
        return Messages.getText("wcsError") + ".\n" +
147
        Messages.getText("link") + ": " + 
148
        getResource().getLinkage();		
149
    }
101
	protected DataStoreParameters createDataStoreParameters()
102
			throws InitializeException, ProviderNotRegisteredException {
103
		DataStoreParameters dataStoreParameters = DATA_MANAGER.createStoreParameters("Wcs Store");
104
		
105
		if(getResource() != null){
106
			dataStoreParameters.setDynValue(FIELD_NAME, getLayerName());
107
			dataStoreParameters.setDynValue(FIELD_ONLINERESOURC, createOnlineResources());
108
		}
109
		
110
		if(parseQuery(dataStoreParameters, getResource().getLinkage())){
111
			return dataStoreParameters;
112
		}
113
		
114
		return null;
115
	}
150 116

  
151
    protected String getWindowMessage() {
152
        return Messages.getText("wcsLoad");
153
    }	
117
	protected Map createOnlineResources() {
118
		Map args = new HashMap();
119
		args.put("GepCoverage", getResource().getLinkage());      
120
		return args;
121
	}
122

  
123
	protected String extensionPointName() {
124
		return "OGC:WCS";
125
	}
126

  
127
	/**
128
	 * Builds a coverage starting from a full GetCoverage URL.
129
	 * (Using this is not a regular function)
130
	 */
131
	private boolean parseQuery(DataStoreParameters dataStoreParameters, String link){
132

  
133
		String host = null;
134
		String queryString = null;
135
		int index = link.indexOf("?");
136
		if (index > 0){        
137
			host = link.substring(0, index);
138
			queryString = link.substring(index+1);
139
		}else{
140
			host = link;
141
			queryString = "";
142
		}
143

  
144
		if(link.indexOf('?') > -1){
145
			queryString = link.substring(link.indexOf('?')+1);
146
			dataStoreParameters.setDynValue(FIELD_URI, link.substring(0,link.indexOf('?')));
147
			
148
			String[] params = queryString.split("&");
149
			for (int i = 0; i < params.length; i++) {
150
				if (params[i]!= null){
151
					String[] nameValue = params[i].split("=");
152
					if(nameValue.length == 2){
153
						String param = nameValue[0].toUpperCase();
154
						if (param.equals("CRS")){
155
							dataStoreParameters.setDynValue(FIELD_SRSSTR, nameValue[1]);
156
						}else if (param.equals("FORMAT")){
157
							dataStoreParameters.setDynValue(FIELD_FORMAT, nameValue[1]);
158
						}else if (param.equals("WIDTH")){
159
							dataStoreParameters.setDynValue(FIELD_WIDTH, nameValue[1]);
160
						}else if (param.equals("HEIGHT")){
161
							dataStoreParameters.setDynValue(FIELD_HEIGHT, nameValue[1]);
162
						}else if (param.equals("BANDS")){
163
							dataStoreParameters.setDynValue(FIELD_PARAM, nameValue[1]);
164
						}                   
165
					}
166
				}
167
			}  
168

  
169
		}else{
170
			dataStoreParameters.setDynValue(FIELD_URI, link);
171
			
172

  
173
			try {
174
				WCSServerExplorerParameters explorerParams;
175
				explorerParams = (WCSServerExplorerParameters) DATA_MANAGER.createServerExplorerParameters(WCSProvider.NAME);
176
				explorerParams.setHost(host);
177
				explorer = (WCSServerExplorer) DATA_MANAGER.createServerExplorer(explorerParams);
178
				explorer.connect(null);
179
				
180
				deleteRepitedValues();
181
				
182
				if(!getParams(dataStoreParameters, link)){
183
					return false;
184
				}
185
			} catch (ValidateDataParametersException e) {
186
				// TODO Auto-generated catch block
187
				e.printStackTrace();
188
				return false;
189
			} catch (InitializeException e) {
190
				// TODO Auto-generated catch block
191
				e.printStackTrace();
192
				return false;
193
			} catch (ProviderNotRegisteredException e) {
194
				// TODO Auto-generated catch block
195
				e.printStackTrace();
196
				return false;
197
			} catch (ConnectException e) {
198
				// TODO Auto-generated catch block
199
				e.printStackTrace();
200
			}
201

  
202
			
203
		}
204

  
205
		return true;
206
	}	
207

  
208
	private void deleteRepitedValues() {
209
		for(int i=0; i<explorer.getCoverageList().length; i++){
210
			WCSLayerNode layer = explorer.getCoverageList()[i];
211
			deleteDuplicatedStringsFromList(layer.getFormats());
212
			deleteDuplicatedStringsFromList(layer.getInterpolationMethods());
213
			deleteDuplicatedStringsFromList(layer.getSRSs());
214
		}
215
	}
216
	
217
	private void deleteDuplicatedStringsFromList(List list){
218
		HashSet hs = new HashSet();
219
		hs.addAll(list);
220
		list.clear();
221
		list.addAll(hs);
222
	}
223

  
224
	private boolean getParams(DataStoreParameters dataStoreParameters, String link) {
225
		try{
226
			wcsParamsPanel = new WCSParamsPanel();
227
			wcsParamsPanel.setListenerSupport(new WizardListenerSupport());
228
			wcsParamsPanel.setWizardData(explorer);
229
			
230
			LoaderWizardPanel panel = new LoaderWizardPanel(wcsParamsPanel, dataStoreParameters);
231
			return panel.showWizardOnDialog();
232
		
233
		}catch(NoClassDefFoundError e1){
234
			logger.info("No est? instalada la extensi?n de raster");
235
			return false;
236
		}
237
	}
238

  
239
	protected String getErrorMessage() {
240
		return Messages.getText("wcsError") + ".\n" +
241
				Messages.getText("link") + ": " + 
242
				getResource().getLinkage();		
243
	}
244

  
245
	protected String getWindowMessage() {
246
		return Messages.getText("wcsLoad");
247
	}
154 248
}

Also available in: Unified diff