Revision 35478 branches/v2_0_0_prep/extensions/extCatalog/src/org/gvsig/catalog/loaders/WCSLayerLoader.java

View differences:

WCSLayerLoader.java
40 40
 */
41 41
package org.gvsig.catalog.loaders;
42 42

  
43
import java.io.IOException;
43
import java.util.HashMap;
44 44
import java.util.Map;
45 45
import java.util.TreeMap;
46 46

  
47
import org.gvsig.andami.PluginServices;
48
import org.gvsig.app.project.documents.view.gui.AbstractViewPanel;
47 49
import org.gvsig.catalog.schemas.Resource;
48
import org.gvsig.fmap.mapcontext.layers.FLayer;
50
import org.gvsig.fmap.dal.DataStoreParameters;
51
import org.gvsig.fmap.dal.exception.InitializeException;
52
import org.gvsig.fmap.dal.exception.ProviderNotRegisteredException;
49 53
import org.gvsig.i18n.Messages;
50
import org.gvsig.tools.extensionpoint.ExtensionPoint;
51
import org.gvsig.utils.extensionPointsOld.ExtensionPointsSingleton;
52 54

  
53 55

  
54 56
/**
......
57 59
 * @author Jorge Piera Llodra (piera_jor@gva.es)
58 60
 */
59 61
public class WCSLayerLoader extends GvSigLayerLoader{
60
	
61
	
62
	public WCSLayerLoader(Resource resource) {
63
		super(resource);
64
	}
65
	
66
	/**
67
	 * This method loads a WSC layer from a full URL
68
	 * @param link
69
	 * @throws LayerLoaderException 
70
	 */
71
	public void loadLayer() throws LayerLoaderException {
72
		String link = getResource().getLinkage();
73
		String name = getResource().getName();
74
		try {
75
			FLayer flayer = createWCSLayer(link,name);
76
			addLayerToView(flayer);
77
			flayer.dispose();
78
		} catch (IOException e) {
79
			throw new LayerLoaderException(e.getMessage(),getWindowMessage());
80
		} 	
81
	}   	
82
	
83
	private FLayer createWCSLayer(String link,String name) throws IOException, LayerLoaderException {
84
		Map args = initFromQueryString(link,name);
85
		ExtensionPoint extensionPoint = (ExtensionPoint)ExtensionPointsSingleton.getInstance().get("CatalogLayers");
86
		try {
87
			return (FLayer)extensionPoint.create("OGC:WCS", args  );
88
		} catch(Exception e) {
89
			throw new LayerLoaderException(getErrorMessage(),getWindowMessage());
90
		}		
91
	}
92
	
93
	/**
94
	 * Builds a coverage starting from a full GetCoverage URL.
95
	 * (Using this is not a regular function)
96
	 */
97
	private TreeMap initFromQueryString(String link,String name){
98
		String host = null;
99
		String queryString = null;
100
		if (link.compareTo("?")==0){
101
			host = link.substring(0,link.indexOf('?'));
102
			queryString = link.substring(link.indexOf('?')+1);
103
		}else{
104
			host = link;
105
			queryString = "";
106
		}
107
		queryString = link.substring(link.indexOf('?')+1);
108
		
109
		TreeMap map = new TreeMap(); 
110
		String[] params = queryString.split("&");
111
		for (int i = 0; i < params.length; i++) {
112
			if (params[i]!= null){
113
				String[] nameValue = params[i].split("=");
114
				if (nameValue.length == 1){
115
					map.put(nameValue[0].toUpperCase(), "");
116
				}else if(nameValue.length == 2){
117
					map.put(nameValue[0].toUpperCase(), nameValue[1]);
118
				}
119
			}
120
		}
121
		map.put("HOST",link);
122
		if ((name != null) && (!name.equals(""))){
123
			map.put("COVERAGE",name);
124
		}
125
		return map;
126
	}	
127
	
128
	/*
129
	 *  (non-Javadoc)
130
	 * @see es.gva.cit.gvsig.catalogClient.loaders.LayerLoader#getErrorMessage()
131
	 */
132
	protected String getErrorMessage() {
133
		return Messages.getText("wcsError") + ".\n" +
134
		Messages.getText("link") + ": " + 
135
		getResource().getLinkage();		
136
	}
137
	
138
	/*
139
	 *  (non-Javadoc)
140
	 * @see es.gva.cit.gvsig.catalogClient.loaders.LayerLoader#getWindowMessage()
141
	 */
142
	protected String getWindowMessage() {
143
		return Messages.getText("wcsLoad");
144
	}
145
	
146
	
147
	
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
    }	
74

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

  
79
    protected String getLayerName() {      
80
        return getResource().getName();
81
    } 
82

  
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
    }
98

  
99
    protected String extensionPointName() {
100
        return "OGC:WCS";
101
    }
102

  
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
    }	
144

  
145
    protected String getErrorMessage() {
146
        return Messages.getText("wcsError") + ".\n" +
147
        Messages.getText("link") + ": " + 
148
        getResource().getLinkage();		
149
    }
150

  
151
    protected String getWindowMessage() {
152
        return Messages.getText("wcsLoad");
153
    }	
148 154
}

Also available in: Unified diff