📄 filter.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 + -