📄 wcshttpclientversion100.java
字号:
/**
*
*/
package com.esri.solutions.jitk.datasources.ogc.wcs;
import java.io.IOException;
import java.io.InputStream;
import java.net.MalformedURLException;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
import org.apache.commons.httpclient.HttpException;
import com.esri.solutions.jitk.datasources.exceptions.ResponseParsingException;
import com.esri.solutions.jitk.datasources.exceptions.WCSException;
import com.esri.solutions.jitk.datasources.ogc.wcs.info.WCSBoundingBox;
import com.esri.solutions.jitk.datasources.ogc.wcs.info.WCSCoverageInfo;
import com.esri.solutions.jitk.datasources.ogc.wcs.info.WCSExceptionInfo;
import com.esri.solutions.jitk.datasources.ogc.wcs.parsing.version100.WCSDescribeCoverageParser;
import com.esri.solutions.jitk.datasources.ogc.wcs.parsing.version100.WCSExceptionParser;
/**
* @author vlad2928
*
*/
public class WCSHTTPClientVersion100 extends WCSHTTPClientBase implements IWCSClient {
protected WCSHTTPClientVersion100() {
this.version = "1.0.0";
}
public List<WCSCoverageInfo> describeCoverage(String describeCoverageURL, String[] coverageIDs) throws WCSException {
try {
WCSDescribeCoverageParser parser = new WCSDescribeCoverageParser();
WCSURLBuilder urlBuilder = new WCSURLBuilder(describeCoverageURL);
if(!urlBuilder.isValid()) {
throw new MalformedURLException(urlBuilder.getErrorMessage());
}
if(coverageIDs != null && coverageIDs.length > 0) {
List<WCSCoverageInfo> wscCoverageInfos = new ArrayList<WCSCoverageInfo>();
for(int i=0; i < coverageIDs.length; i++) {
doGET(urlBuilder.getDescribeCoverageURL(new String[] {coverageIDs[i]}));
if(isConnectionOpen()) {
List<WCSCoverageInfo> infos = parser.parse(method.getResponseBodyAsStream());
releaseConnection();
if(infos != null) {
for(Iterator<WCSCoverageInfo> it = infos.iterator(); it.hasNext();) {
wscCoverageInfos.add(it.next());
}
}
}
}
return wscCoverageInfos;
} else {
doGET(urlBuilder.getDescribeCoverageURL(null));
if(isConnectionOpen()) {
return parser.parse(method.getResponseBodyAsStream());
}
}
} catch(MalformedURLException e) {
logger.error("Malformed url " + describeCoverageURL + " provided.");
logger.error(e.getMessage());
throw new WCSException("Malformed url " + describeCoverageURL + " provided.");
} catch(HttpException e) {
logger.error("Fatal protocol violation: " + e.getMessage());
throw new WCSException("Fatal protocol violation.");
} catch(IOException e) {
logger.error("Fatal transport error: " + e.getMessage());
throw new WCSException("Fatal transport error.");
} catch(ResponseParsingException e) {
logger.error("Response parsing error: " + e.getMessage());
throw new WCSException("Response parsing error.");
} finally {
releaseConnection();
}
return null;
}
public InputStream getCoverage(String getCoverageURL, String coverage, String crs, String bbox, int height, int width, String format) throws WCSException {
try {
WCSURLBuilder urlBuilder = new WCSURLBuilder(getCoverageURL);
if(!urlBuilder.isValid()) {
throw new MalformedURLException(urlBuilder.getErrorMessage());
}
doGET(urlBuilder.getGetCoverageURL(coverage, crs, bbox, height, width, format));
if(isConnectionOpen()) {
String contentType = getResponseContentType();
if(contentType.toLowerCase().startsWith("image/")) {
return method.getResponseBodyAsStream();
} else if(contentType.equalsIgnoreCase("application/vnd.ogc.se_xml")) {
WCSExceptionInfo exception = new WCSExceptionParser().parse(method.getResponseBodyAsStream());
throw new WCSException(exception.getMessage());
}
}
} catch(MalformedURLException e) {
logger.error("Malformed url " + getCoverageURL + " provided.");
logger.error(e.getMessage());
throw new WCSException("Malformed url " + getCoverageURL + " provided.");
} catch(HttpException e) {
logger.error("Fatal protocol violation: " + e.getMessage());
throw new WCSException("Fatal protocol violation.");
} catch(IOException e) {
logger.error("Fatal transport error: " + e.getMessage());
throw new WCSException("Fatal transport error.");
} catch(ResponseParsingException e) {
logger.error("Response parsing error: " + e.getMessage());
throw new WCSException("Response parsing error.");
} finally {
releaseConnection();
}
return null;
}
private class WCSURLBuilder extends URLBuilder {
public WCSURLBuilder(String url) {
super(url);
}
public IURL getGetCapabilitiesURL() {
setParam("request", "GetCapabilities");
setParam("service", "WCS");
setParam("version", getVersion());
return this;
}
public IURL getDescribeCoverageURL(String[] coverageIDs) {
setParam("request", "DescribeCoverage");
setParam("service", "WCS");
setParam("version", getVersion());
if(coverageIDs != null && coverageIDs.length > 0) {
StringBuffer coverages = new StringBuffer();
for(int i=0; i < coverageIDs.length; i++) {
if(coverages.length() > 0) {
coverages.append(",");
}
coverages.append(coverageIDs[i]);
}
setParam("coverage", coverages.toString());
} else {
removeParam("coverage");
}
return this;
}
public IURL getGetCoverageURL(String coverage, String crs, String bbox, int height, int width, String format) {
setParam("request", "GetCoverage");
setParam("service", "WCS");
setParam("version", getVersion());
setParam("coverage", coverage);
setParam("crs", crs);
WCSBoundingBox extent = new WCSBoundingBox(bbox.split(","));
extent.reaspect(width, height);
setParam("bbox", extent.toString());
setParam("height", new Integer(height).toString());
setParam("width", new Integer(width).toString());
setParam("format", format);
return this;
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -