⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 qbpersistenceservice.java

📁 esri的ArcGIS Server超级学习模板程序(for java)
💻 JAVA
📖 第 1 页 / 共 2 页
字号:
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 + -