cswprofile.java
来自「esri的ArcGIS Server超级学习模板程序(for java)」· Java 代码 · 共 520 行 · 第 1/2 页
JAVA
520 行
package com.esri.solutions.jitk.datasources.ogc.csw;
import org.apache.log4j.Logger;
import org.w3c.dom.Document;
import org.w3c.dom.Node;
import org.w3c.dom.NodeList;
import org.xml.sax.SAXException;
import java.io.ByteArrayInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.StringReader;
import java.io.StringWriter;
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.parsers.ParserConfigurationException;
import javax.xml.transform.Source;
import javax.xml.transform.Transformer;
import javax.xml.transform.TransformerException;
import javax.xml.transform.TransformerFactory;
import javax.xml.transform.stream.StreamResult;
import javax.xml.transform.stream.StreamSource;
import javax.xml.xpath.XPath;
import javax.xml.xpath.XPathExpressionException;
import javax.xml.xpath.XPathFactory;
/**
* @version 1.0
* @created 25-Jul-2007 1:43:58 PM
*/
public class CswProfile {
private static final Logger LOG = Logger.getLogger(CswProfile.class);
private String description;
private boolean filter_extentsearch;
private boolean filter_livedatamap;
private boolean usesMetadataResourceUrl = Boolean.TRUE;
private String id;
private String getRecordByIdKVP;
private String getRepositoryItemKVP;
private String metadataxslt;
private Transformer metadataXsltObj; // Need Java solution
private String name;
private String requestxslt;
private Transformer requestXsltObj; // Need java solution
private String responsexslt;
private Transformer responseXsltObj; // Need java solution
public CswProfile() {
}
/**
*
* @param sid
* @param sname
* @param sdescription
*/
public CswProfile(String sid, String sname, String sdescription) {
}
/**
*
* @param sid
* @param sname
* @param sdescription
* @param skvp
* @param srequestxslt
* @param sresponsexslt
* @param smetadataxslt
* @param livedatamap
* @param extentsearch
*/
public CswProfile(String id, String name, String description, String kvp,
String getRepositoryItemKVP, String requestxslt, String responsexslt,
String metadataxslt, boolean livedatamap, boolean extentsearch,
boolean usesMetadataResourceUrl) {
this.id = id;
this.name = name;
this.description = description;
this.getRecordByIdKVP = kvp;
this.getRepositoryItemKVP = getRepositoryItemKVP;
this.requestxslt = requestxslt;
this.responsexslt = responsexslt;
this.metadataxslt = metadataxslt;
this.filter_livedatamap = livedatamap;
this.filter_extentsearch = extentsearch;
this.usesMetadataResourceUrl = usesMetadataResourceUrl;
}
/**
* Generate a CSW request String to get metadata by ID.
*
* @remark The CSW request String is built. The request is String is build based
* on the baseurl and record id
* @param ="param1" The base url
* @param ="param2" The record ID String
* @returns The request String
*
* @param baseURL
* @param recordId
*/
public String generateCSWGetMetadataByIDRequestURL(String baseURL,
String recordId) {
StringBuffer requeststring = new StringBuffer();
requeststring.append(baseURL);
if (baseURL.endsWith("?")) {
requeststring.append(getRecordByIdKVP);
} else {
requeststring.append("?" + getRecordByIdKVP);
}
requeststring.append("&ID=" + recordId);
LOG.debug("CSW GetMetadataByIdRequest Url: " +
requeststring.toString());
return requeststring.toString();
}
/**
* Generate a CSW request String to get a repository item.
*
* @param baseURL {@link String} base Url to the catalog service.
* @param recordId {@link String} ID of the repository item.
* @return The request string.
*/
public String generateCSWGetRepositoryItemRequestURL(String baseURL,
String recordId) throws InvalidOperationException {
if ((getRepositoryItemKVP == null) ||
(getRepositoryItemKVP.length() <= 0)) {
throw new InvalidOperationException(
"GetRepositoryItem KVP is not configured for this profile: [" +
this.getName() + "]");
}
StringBuilder requeststring = new StringBuilder();
requeststring.append(baseURL);
if (baseURL.endsWith("?")) {
requeststring.append(getRepositoryItemKVP);
} else {
requeststring.append("?" + getRepositoryItemKVP);
}
requeststring.append("&ID=" + recordId);
LOG.debug("CSW GetRepositoryItemRequest Url: " +
requeststring.toString());
return requeststring.toString();
}
/**
* Generate a CSW request String.
* First, create a simple common form of request xml
* Then, transform the request xml into a real request xml using profile specific xslt
*
* @remark The CSW request String is built. The request is String is build based
* on the request xslt.
* @param ="param1" The search criteria
* @returns The request String
*
* @param search
* @throws TransformerException
* @throws IOException
*/
public String generateCSWGetRecordsRequest(CswSearchCriteria search)
throws TransformerException, IOException {
// Build xml
String request = "<?xml version='1.0' encoding='UTF-8' ?>";
request += ("<GetRecords>" + "<StartPosition>" +
search.getStartPosition() + "</StartPosition>");
request += ("<MaxRecords>" + search.getMaxRecords() + "</MaxRecords>");
request += ("<KeyWord>" + this.XmlEscape(search.getSearchText()) +
"</KeyWord>");
request += ("<LiveDataMap>" + search.isLiveDataAndMapsOnly() +
"</LiveDataMap>");
if (search.getEnvelope() != null) {
request += ("<Envelope type=\"" + search.getGeometrySearchType() +
"\">");
request += ("<MinX>" + search.getEnvelope().getMinX() + "</MinX>");
request += ("<MinY>" + search.getEnvelope().getMinY() + "</MinY>");
request += ("<MaxX>" + search.getEnvelope().getMaxX() + "</MaxX>");
request += ("<MaxY>" + search.getEnvelope().getMaxY() + "</MaxY>");
request += "</Envelope>";
}
if ((search.getTopicCategories() != null) &&
(search.getTopicCategories().size() > 0)) {
request += "<TopicCategories>";
for (String code : search.getTopicCategories()) {
request += ("<TopicCategory>" + code + "</TopicCategory>");
}
request += "</TopicCategories>";
}
request += "</GetRecords>";
// Load xslt using transformer
// Get a TransformerFactory object
//File xsltFile = new File(requestxslt);
//Source xsltSource = new StreamSource(xsltFile);
Source xsltSource = new StreamSource(this.getClass().getClassLoader()
.getResourceAsStream(requestxslt));
StringReader reader = new StringReader(request);
Source requestSource = new StreamSource(reader);
// Prepare output writer
StringWriter writer = new StringWriter();
StreamResult result = new StreamResult(writer);
TransformerFactory xformFactory = TransformerFactory.newInstance();
//Get an XSL Transformer object
Transformer transformer = xformFactory.newTransformer(xsltSource);
transformer.transform(requestSource, result);
String requestStr = result.getWriter().toString();
// close
reader.close();
writer.close();
LOG.debug("CSW GetRecords Request: " + requestStr);
return requestStr;
}
/**
* Read a CSW metadata response.
*
* @remark The CSW metadata response is read. The CSw record is updated with the
* metadata
* @param ="param1" The metadata response String
* @param ="param2" The CSW record for the record
*
* @param response
* @param record
*/
public void readCSWGetMetadataByIDResponse(String response, CswRecord record)
throws TransformerException {
if (metadataxslt == null) {
record.setFullMetadata(response);
} else {
//String RECORD_TAG = "Record";
// Massage responseString as a proper object
StringReader reader = new StringReader(response);
Source responseSource = new StreamSource(reader);
// Load xslt to parse responseString
//File xsltFile = new File(metadataxslt);
//Source xsltSource = new StreamSource(xsltFile);
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?