📄 qbpersistenceservice.java
字号:
package com.esri.solutions.jitk.common.querybuilder;
import com.esri.solutions.jitk.common.personalization.IPersonalizable;
import com.esri.solutions.jitk.common.personalization.IPersonalizationContext;
import com.esri.solutions.jitk.personalization.PersonalizationException;
import com.esri.solutions.jitk.personalization.data.IQuery;
import com.esri.solutions.jitk.personalization.data.beans.v1.FeatureQueryType;
import com.esri.solutions.jitk.personalization.data.beans.v1.MapServiceList;
import com.esri.solutions.jitk.personalization.data.beans.v1.ObjectFactory;
import com.esri.solutions.jitk.personalization.data.beans.v1.PointN;
import com.esri.solutions.jitk.personalization.data.beans.v1.PolygonN;
import com.esri.solutions.jitk.personalization.data.beans.v1.QueryFilter;
import com.esri.solutions.jitk.personalization.data.beans.v1.QueryLayerType;
import com.esri.solutions.jitk.personalization.data.beans.v1.QueryType;
import com.esri.solutions.jitk.personalization.data.beans.v1.SpatialFilter;
import org.apache.log4j.Logger;
import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.text.MessageFormat;
import java.util.ArrayList;
import java.util.List;
import java.util.UUID;
import javax.xml.bind.JAXBContext;
import javax.xml.bind.JAXBException;
import javax.xml.bind.Marshaller;
import javax.xml.bind.Unmarshaller;
public class QbPersistenceService implements IPersonalizable {
private static final Logger _logger = Logger.getLogger(QbPersistenceService.class);
/**
* Name of Java Package that contains JAXB-generated beans
*/
private static final String JAXB_BEAN_PACKAGE_NAME = "com.esri.solutions.jitk.personalization.data.beans.v1";
private static final String DEBUG_QUERY_DATA_AFTER_MARSHALLING = "Query debug after marshalling [ID: {0}, Name: {1}, Data: {2}]";
private static final String DEBUG_QUERY_DATA_BEFORE_UNMARSHALLING = "Query debug before unmarshalling [Data: {0}]";
private IPersonalizationContext _personalizationContext = null;
public QbPersistenceService() {
}
/*
* (non-Javadoc)
* @see com.esri.solutions.jitk.common.personalization.IPersonalizable#setPersonalizationContext(com.esri.solutions.jitk.common.personalization.IPersonalizationContext)
*/
public void setPersonalizationContext(IPersonalizationContext ctx) {
if (ctx == null) {
throw new NullPointerException("context cannot be null");
}
_personalizationContext = ctx;
}
public void delete(UUID id) throws PersonalizationException {
IQuery query = null;
if (id == null) {
throw new NullPointerException("id cannot be null");
}
if (_personalizationContext == null) {
throw new IllegalStateException("Personalization context not set");
}
_logger.debug("Attempting to delete query with ID: " + id.toString());
query = _personalizationContext.getData().getQuery(id);
if (query == null) {
_logger.info("Query not found - unable to delete");
_logger.debug("Unable to delete query with ID: " + id.toString());
return;
}
query.remove();
_logger.debug("Successfully deleted query with ID: " +
query.getId().toString());
_logger.info("Successfully deleted query with ID:" +
query.getId().toString());
}
public String saveToXml(QbPersistenceObject obj)
throws PersonalizationException {
String strQuery = null;
QueryType queryType = null;
ObjectFactory factory = null;
if (obj == null) {
throw new NullPointerException("persistence object cannot be null");
}
try {
factory = new ObjectFactory();
queryType = factory.createFeatureQuery();
queryType.setId(UUID.randomUUID().toString());
this.setQueryProperties(queryType, obj, true);
strQuery = this.marshallQuery(queryType);
} catch (JAXBException ex) {
_logger.warn("JAXBException occurred marshalling query to xml");
_logger.debug("JAXBException occurred marshalling query to xml", ex);
}
return strQuery;
}
public void save(QbPersistenceObject obj) throws PersonalizationException {
IQuery iquery = null;
if (obj == null) {
throw new NullPointerException("persistence object cannot be null");
}
iquery = getQuery(obj);
if (iquery == null) {
_logger.warn("Invalid Query - unable to save");
throw new PersonalizationException(PersonalizationException.Code.STORE_DATA_ERROR);
}
iquery.save();
}
public QbPersistenceObject retrieveFromXml(String xml)
throws PersonalizationException {
QbPersistenceObject obj = null;
QueryType queryType = null;
if (xml == null) {
throw new NullPointerException();
}
queryType = unmarshallQuery(xml);
if (queryType == null) {
throw new PersonalizationException(PersonalizationException.Code.RETRIEVE_DATA_ERROR);
}
obj = createPersistenceObject(queryType);
return obj;
}
public QbPersistenceObject retrieve(UUID id)
throws PersonalizationException {
QbPersistenceObject obj = null;
IQuery query = null;
if (id == null) {
throw new NullPointerException("id cannot be null");
}
if (_personalizationContext == null) {
throw new IllegalStateException("Personalization context not set");
}
query = _personalizationContext.getData().getQuery(id);
//obj = createPersistenceObject(query);
obj = createPersistenceObject(query.getQuery());
return obj;
}
public List<QbPersistenceObject> retrieveAll()
throws PersonalizationException {
List<QbPersistenceObject> objs = new ArrayList<QbPersistenceObject>();
if (_personalizationContext == null) {
throw new IllegalStateException("Personalization context not set");
}
for (IQuery q : getSavedQueries()) {
//objs.add(createPersistenceObject(q));
objs.add(createPersistenceObject(q.getQuery()));
}
return objs;
}
private SpatialFilter generateSpatialFilter(QbPersistenceObject obj) {
SpatialFilter filter = null;
//EnvelopeN envelope = null;
PolygonN poly = null;
PointN point = null;
ObjectFactory factory = null;
if (obj == null) {
throw new NullPointerException("persistence object cannot be null");
}
try {
factory = new ObjectFactory();
filter = factory.createSpatialFilter();
// envelope = factory.createEnvelopeN();
//
// envelope.setXMin(Double.valueOf(obj.getAttribute(
// QbPersistenceObject.QUERY_EXTENT_XMIN)));
// envelope.setYMin(Double.valueOf(obj.getAttribute(
// QbPersistenceObject.QUERY_EXTENT_YMIN)));
// envelope.setXMax(Double.valueOf(obj.getAttribute(
// QbPersistenceObject.QUERY_EXTENT_XMAX)));
// envelope.setYMax(Double.valueOf(obj.getAttribute(
// QbPersistenceObject.QUERY_EXTENT_YMAX)));
if (obj.getPolygonGeom() != null) {
poly = obj.getPolygonGeom();
filter.setPolygonN(poly);
} else if (obj.getPointGeom() != null) {
point = obj.getPointGeom();
filter.setPointN(point);
}
String whereclause = obj.getAttribute(QbPersistenceObject.QUERY_WHERE_CLAUSE_KEY);
filter.setWhereClause(whereclause);
filter.setSearchOrder("");
filter.setSpatialRel("");
filter.setSpatialRelDescription("");
filter.setFilterOwnsGeometry(true);
filter.setGeometryFieldName("");
} catch (JAXBException ex) {
_logger.warn("JAXBException occurred creating spatial filter", ex);
}
return filter;
}
private QueryFilter generateQueryFilter(QbPersistenceObject obj) {
QueryFilter filter = null;
//EnvelopeN envelope = null;
ObjectFactory factory = null;
if (obj == null) {
throw new NullPointerException("persistence object cannot be null");
}
try {
factory = new ObjectFactory();
filter = factory.createQueryFilter();
// envelope = factory.createEnvelopeN();
//
// envelope.setXMin(Double.valueOf(obj.getAttribute(
// QbPersistenceObject.QUERY_EXTENT_XMIN)));
// envelope.setYMin(Double.valueOf(obj.getAttribute(
// QbPersistenceObject.QUERY_EXTENT_YMIN)));
// envelope.setXMax(Double.valueOf(obj.getAttribute(
// QbPersistenceObject.QUERY_EXTENT_XMAX)));
// envelope.setYMax(Double.valueOf(obj.getAttribute(
// QbPersistenceObject.QUERY_EXTENT_YMAX)));
String whereclause = obj.getAttribute(QbPersistenceObject.QUERY_WHERE_CLAUSE_KEY);
filter.setWhereClause(whereclause);
filter.setResolution(0);
} catch (JAXBException ex) {
_logger.warn("JAXBException occurred creating spatial filter", ex);
}
return filter;
}
private QbPersistenceObject createPersistenceObject(QueryType queryType)
throws PersonalizationException {
QbPersistenceObject obj = null;
FeatureQueryType featureQuery = null;
QueryLayerType layerType = null;
//EnvelopeN envelope = null;
if (queryType == null) {
throw new NullPointerException("query cannot be null");
}
if (!(queryType instanceof FeatureQueryType)) {
throw new IllegalArgumentException(
"Invalid query, query type not supported.");
}
obj = new QbPersistenceObject();
obj.setAttribute(QbPersistenceObject.QUERY_NAME_KEY, queryType.getName());
obj.setAttribute(QbPersistenceObject.QUERY_DESCRIPTION_KEY,
queryType.getDescription());
obj.setAttribute(QbPersistenceObject.QUERY_ID_KEY,
queryType.getId().toString());
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -