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

📄 filter.java

📁 esri的ArcGIS Server超级学习模板程序(for java)
💻 JAVA
字号:
package com.esri.solutions.jitk.datasources.ogc.filters;

import org.apache.log4j.Logger;

import java.io.IOException;
import java.io.OutputStream;

import java.util.ArrayList;
import java.util.EmptyStackException;
import java.util.List;


public class Filter implements IFilter {
    public static final Logger _logger = Logger.getLogger(Filter.class);
    protected List<IFilterClause> _clauses = null;
    protected List<FilterLogicalOperator> _operator = null;

    public Filter() {
        _clauses = new ArrayList<IFilterClause>();
        _operator = new ArrayList<FilterLogicalOperator>();
    }

    public void pushClause(IFilterClause clause) {
        _clauses.add(0, clause);
    }

    public void pushClause(IFilterClause clause, FilterLogicalOperator op) {
        _clauses.add(0, clause);
        _operator.add(0, op);
    }

    public List<IFilterClause> getClauses() {
        return _clauses;
    }

    public void toXML(OutputStream os) throws IOException {
        int iOpIndex = 0;
        List<FilterLogicalOperator> ops = new ArrayList<FilterLogicalOperator>();
        ops = _operator;

        List<IFilterClause> clauses = new ArrayList<IFilterClause>();
        clauses = _clauses;

        boolean first = true;
        boolean isFilterHasClauses = !clauses.isEmpty();
        FilterLogicalOperator op = FilterLogicalOperator.AND;

        if (isFilterHasClauses) {
            os.write("<ogc:Filter>".getBytes());
        }

        for (IFilterClause clause : clauses) {
            if (!first) {
                try {
                    op = ops.get(iOpIndex);
                    iOpIndex++;
                } catch (EmptyStackException ex) {
                    _logger.warn(
                        "Operator not found in operator stack, assuming last know operator");
                }

                appendOperatorAsStartXML(os, op);
            }

            clause.toXML(os);

            if (!first) {
                appendOperatorAsEndXML(os, op);
                first = false;
            }
        }

        if (isFilterHasClauses) {
            os.write("</ogc:Filter>".getBytes());
        }
    }

    protected void appendOperatorAsEndXML(OutputStream os,
        FilterLogicalOperator op) throws IOException {
        switch (op) {
        case AND:
            os.write("</ogc:AND>".getBytes());

            break;

        case OR:
            os.write("</ogc:OR>".getBytes());

            break;

        case NOT:
            os.write("</ogc:NOT>".getBytes());

            break;

        default:
            break;
        }
    }

    protected void appendOperatorAsStartXML(OutputStream os,
        FilterLogicalOperator op) throws IOException {
        switch (op) {
        case AND:
            os.write("<ogc:AND>".getBytes());

            break;

        case OR:
            os.write("<ogc:OR>".getBytes());

            break;

        case NOT:
            os.write("<ogc:NOT>".getBytes());

            break;

        default:
            break;
        }
    }
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -