Java ADF 运行原理剖析(2)
2010-05-28 20:26
316 查看
Task是实现业务逻辑的重要部分。Task可以让用户输入参数,通过Command和Tools的组合,完成任务,返回结果。Task过Command+Tools简单相加之处在于Task提供了一个多样化组合的面板。
A.Parameter String keyword
B.Command void方法 query(TaskEvent event)
C.Tool void方法 select(MapEvent event)
A 定义了传递的参数 B.Command命令,通过TaskEvent获取消息,C.Tool工具,通过MapEvent捕获消息。下面以CustomTask和CustomTaskInfo为例,分析Task整个实现过程。
CustomTask.Java关键代码:
public class CustomTask {
private String layoutType;
private Map<String,String> layoutOptions;
private CustomTaskInfo taskInfo = new CustomTaskInfo();
private String keyWord;
public void query(TaskEvent event) {
WebContext webContext = event.getWebContext();
WebQuery webQuery = (WebQuery) webContext.getAttribute("query");
TextCriteria textCriteria = new TextCriteria();
textCriteria.setMaxRecordCount(100);
textCriteria.setSearchText(this.keyWord);
List<QueryResult> listQueryResult = webQuery.query(textCriteria,
webQuery.getQueryLayers());
webContext.getWebGraphics().clearGraphics();
for (int i = 0; i < listQueryResult.size(); i++) {
QueryResult queryResult = listQueryResult.get(i);
queryResult.highlight();
}
webContext.refresh();
}
public void select (MapEvent event){
WebContext webContext = event.getWebContext();
WebGeometry webGeometry = (WebPolygon) event.getWebGeometry().toMapGeometry(webContext.getWebMap());
WebQuery webQuery = (WebQuery) webContext.getAttribute("query");
List<WebLayerInfo> layers = webQuery.getQueryLayers();
List<WebLayerInfo> queryLayers = new ArrayList<WebLayerInfo>();
for (WebLayerInfo layer : layers){
if (layer.getName().equals("QXZF")){
queryLayers.add(layer); break;
}
}
IdentifyCriteria identifyCriteria = new IdentifyCriteria();
identifyCriteria.setWebGeometry(webGeometry);
List<QueryResult> listQueryResult = webQuery.query(identifyCriteria, queryLayers);
//---------------------------高亮显示-------------------------
/* webContext.getWebGraphics().clearGraphics();
for (int i = 0; i < listQueryResult.size(); i++) {
QueryResult queryResult = listQueryResult.get(i);
queryResult.highlight();
}
webContext.refresh();
*/
//---------------------WebSimpleMarkerSymbol---------------------
/*WebSimpleMarkerSymbol symbol = new WebSimpleMarkerSymbol();
symbol.setMarkerType(WebSimpleMarkerSymbol.CIRCLE);
symbol.setAntialiasing(true);
symbol.setTransparency(0.7);
symbol.setColor("255,255,0");
symbol.setOutlineColor("255,0,0");*/
//---------------------WebPictureMarkerSymbol--------------------
/*WebPictureMarkerSymbol symbol = new WebPictureMarkerSymbol();
symbol.setFileName("images/esri-logo.gif");*/
//---------------------WebTrueTypeMarkerSymbol-------------------
WebTrueTypeMarkerSymbol symbol=new WebTrueTypeMarkerSymbol();
symbol.setFontName("ESRI Business");
symbol.setCharacterIndex(0);
symbol.setFontColor("0,255,0");
symbol.setFontSize(50);
symbol.setFontStyle(WebTrueTypeMarkerSymbol.UNDERLINE);
webContext.getWebGraphics().clearGraphics();
for (int i = 0; i < listQueryResult.size(); i++){
QueryResult queryResult = listQueryResult.get(i);
GraphicElement element = new GraphicElement();
element.setGeometry(queryResult.getHighlightGeometry());
element.setSymbol(symbol);
webContext.getWebGraphics().addGraphics(element);
}
}
}
以上是一段以两种不同方式查询显示的代码,public void query(TaskEvent event) 通过输入参数,对选择的数据集高亮显示。public void select (MapEvent event)相对复杂一些,根据选定图层,定义了以多边形框选取的方式,得到数据集,除了进行简单的高亮显示之外,还采取的其他的符号化方式,标注部分为不同符号化代码。
CustomTaskInfo.Java代码片段:
public class CustomTaskInfo extends SimpleTaskInfo{
TabularLayout[] layouts = new TabularLayout[1];
//任务面板外观描述
public TaskDescriptor getTaskDescriptor() {
TaskDescriptor descriptor = new TaskDescriptor(CustomTask.class,
"queryTask", "Custom Task");
return descriptor;
}
public TaskToolDescriptorModel[] getToolDescriptors() {
TaskToolDescriptor[] descriptors = new TaskToolDescriptor[1];
descriptors[0] = new TaskToolDescriptor(CustomTask.class, "select",
"选择", "EsriMapPolygon");
descriptors[0].setRendererType(TaskToolDescriptor.IMAGE_RENDERER_TYPE);
descriptors[0].setDefaultImage("images/tasks/maptools/polygon.gif");
descriptors[0].setHoverImage("images/tasks/maptools/polygonU.gif");
descriptors[0].setSelectedImage("images/tasks/maptools/polygonD.gif");
descriptors[0].setDisabledImage("images/tasks/maptools/polygonX.gif");
return descriptors;
}
public TaskParamDescriptorModel[] getParamDescriptors() {
TaskParamDescriptor[] descriptors = new TaskParamDescriptor[2];
descriptors[0] = new TaskParamDescriptor(CustomTask.class, "keyWord",
"关键词", "getKeyWord", "setKeyWord");
descriptors[1] = new TaskParamDescriptor(CustomTask.class,"layoutType","布局","getLayoutOptions");
descriptors[1].setRendererType(TaskParamDescriptor.SELECT_RENDERER_TYPE);
return descriptors;
}
public TaskActionDescriptorModel[] getActionDescriptors() {
TaskActionDescriptor[] descriptors = new TaskActionDescriptor[2];
descriptors[0] = new TaskActionDescriptor(CustomTask.class, "query",
"查询");
descriptors[1] = new TaskActionDescriptor(CustomTask.class,"changeLayout","布局切换");
return descriptors;
}
public TaskLayout[] getTaskLayout() {
layouts[0] = new TabularLayout();
layouts[0].addComponent(getParamDescriptors()[1], new TabularPosition(0,0,1,1));
layouts[0].addComponent(getActionDescriptors()[1], new TabularPosition(0,1,1,1));
layouts[0].addComponent(getParamDescriptors()[0], new TabularPosition(1,0,1,1));
layouts[0].addComponent(getActionDescriptors()[0], new TabularPosition(1,1,1,1));
layouts[0].addComponent(getToolDescriptors()[0], new TabularPosition(1,1,1,0));
return layouts;
}
CustomTaskInfo.Java为我们定义了Task面板的样式,public TaskDescriptor getTaskDescriptor()定义了面板的整体外观,并且关联了处理该面板事物的CustomTask类。
public TaskToolDescriptorModel[] getToolDescriptors()定义了工具样式,该函数返回值为数组类型,可以添加多个工具样式。
public TaskParamDescriptorModel[] getParamDescriptors() 也是以返回数组的形式,它提供描述所有参数的样式,如以文本形式还是以列表选择的方式。
public TaskActionDescriptorModel[] getActionDescriptors() 描述所有命令按钮的样式,设置按钮名称,添加回调函数。
public TaskLayout[] getTaskLayout()
最后在getTaskLayout中添加前面定义的面板元素,这样一个完整的Task就生成了。
当然以上只是后台部分的内容,在faces-config配置文件中,可以看到一下配置信息:
<map-entry>
<key>queryTask</key>
<value>#{queryTask}</value>
</map-entry>
<managed-bean>
<managed-bean-name>queryTask</managed-bean-name>
<managed-bean-class>com.esri.adf.web.developer.CustomTask</managed-bean-class>
<managed-bean-scope>none</managed-bean-scope>
</managed-bean>
以上配置文件,注册了CustomTask 这bean,名称为queryTask,queryTask又被添加到MapContext属性的列表中。
最后就剩下了前台部分,代码如下:
<a:task id="queryTask"
taskInfo="#{queryTask.taskInfo}"
mapId="map1" clientPostBack="true"
windowingSupport="true"
value="#{mapContext.attributes.queryTask}" />
完成整个工作,部署工程,运行,下面为示例图(1):
输入南京,单击查询Command按钮,后台调用query函数,结果高亮显示。
通过Tool,多边形选取,目标要素以符号化的形式显示。
如下图(2):
以上就是一个Task基本功能的完成展示。
A.Parameter String keyword
B.Command void方法 query(TaskEvent event)
C.Tool void方法 select(MapEvent event)
A 定义了传递的参数 B.Command命令,通过TaskEvent获取消息,C.Tool工具,通过MapEvent捕获消息。下面以CustomTask和CustomTaskInfo为例,分析Task整个实现过程。
CustomTask.Java关键代码:
public class CustomTask {
private String layoutType;
private Map<String,String> layoutOptions;
private CustomTaskInfo taskInfo = new CustomTaskInfo();
private String keyWord;
public void query(TaskEvent event) {
WebContext webContext = event.getWebContext();
WebQuery webQuery = (WebQuery) webContext.getAttribute("query");
TextCriteria textCriteria = new TextCriteria();
textCriteria.setMaxRecordCount(100);
textCriteria.setSearchText(this.keyWord);
List<QueryResult> listQueryResult = webQuery.query(textCriteria,
webQuery.getQueryLayers());
webContext.getWebGraphics().clearGraphics();
for (int i = 0; i < listQueryResult.size(); i++) {
QueryResult queryResult = listQueryResult.get(i);
queryResult.highlight();
}
webContext.refresh();
}
public void select (MapEvent event){
WebContext webContext = event.getWebContext();
WebGeometry webGeometry = (WebPolygon) event.getWebGeometry().toMapGeometry(webContext.getWebMap());
WebQuery webQuery = (WebQuery) webContext.getAttribute("query");
List<WebLayerInfo> layers = webQuery.getQueryLayers();
List<WebLayerInfo> queryLayers = new ArrayList<WebLayerInfo>();
for (WebLayerInfo layer : layers){
if (layer.getName().equals("QXZF")){
queryLayers.add(layer); break;
}
}
IdentifyCriteria identifyCriteria = new IdentifyCriteria();
identifyCriteria.setWebGeometry(webGeometry);
List<QueryResult> listQueryResult = webQuery.query(identifyCriteria, queryLayers);
//---------------------------高亮显示-------------------------
/* webContext.getWebGraphics().clearGraphics();
for (int i = 0; i < listQueryResult.size(); i++) {
QueryResult queryResult = listQueryResult.get(i);
queryResult.highlight();
}
webContext.refresh();
*/
//---------------------WebSimpleMarkerSymbol---------------------
/*WebSimpleMarkerSymbol symbol = new WebSimpleMarkerSymbol();
symbol.setMarkerType(WebSimpleMarkerSymbol.CIRCLE);
symbol.setAntialiasing(true);
symbol.setTransparency(0.7);
symbol.setColor("255,255,0");
symbol.setOutlineColor("255,0,0");*/
//---------------------WebPictureMarkerSymbol--------------------
/*WebPictureMarkerSymbol symbol = new WebPictureMarkerSymbol();
symbol.setFileName("images/esri-logo.gif");*/
//---------------------WebTrueTypeMarkerSymbol-------------------
WebTrueTypeMarkerSymbol symbol=new WebTrueTypeMarkerSymbol();
symbol.setFontName("ESRI Business");
symbol.setCharacterIndex(0);
symbol.setFontColor("0,255,0");
symbol.setFontSize(50);
symbol.setFontStyle(WebTrueTypeMarkerSymbol.UNDERLINE);
webContext.getWebGraphics().clearGraphics();
for (int i = 0; i < listQueryResult.size(); i++){
QueryResult queryResult = listQueryResult.get(i);
GraphicElement element = new GraphicElement();
element.setGeometry(queryResult.getHighlightGeometry());
element.setSymbol(symbol);
webContext.getWebGraphics().addGraphics(element);
}
}
}
以上是一段以两种不同方式查询显示的代码,public void query(TaskEvent event) 通过输入参数,对选择的数据集高亮显示。public void select (MapEvent event)相对复杂一些,根据选定图层,定义了以多边形框选取的方式,得到数据集,除了进行简单的高亮显示之外,还采取的其他的符号化方式,标注部分为不同符号化代码。
CustomTaskInfo.Java代码片段:
public class CustomTaskInfo extends SimpleTaskInfo{
TabularLayout[] layouts = new TabularLayout[1];
//任务面板外观描述
public TaskDescriptor getTaskDescriptor() {
TaskDescriptor descriptor = new TaskDescriptor(CustomTask.class,
"queryTask", "Custom Task");
return descriptor;
}
public TaskToolDescriptorModel[] getToolDescriptors() {
TaskToolDescriptor[] descriptors = new TaskToolDescriptor[1];
descriptors[0] = new TaskToolDescriptor(CustomTask.class, "select",
"选择", "EsriMapPolygon");
descriptors[0].setRendererType(TaskToolDescriptor.IMAGE_RENDERER_TYPE);
descriptors[0].setDefaultImage("images/tasks/maptools/polygon.gif");
descriptors[0].setHoverImage("images/tasks/maptools/polygonU.gif");
descriptors[0].setSelectedImage("images/tasks/maptools/polygonD.gif");
descriptors[0].setDisabledImage("images/tasks/maptools/polygonX.gif");
return descriptors;
}
public TaskParamDescriptorModel[] getParamDescriptors() {
TaskParamDescriptor[] descriptors = new TaskParamDescriptor[2];
descriptors[0] = new TaskParamDescriptor(CustomTask.class, "keyWord",
"关键词", "getKeyWord", "setKeyWord");
descriptors[1] = new TaskParamDescriptor(CustomTask.class,"layoutType","布局","getLayoutOptions");
descriptors[1].setRendererType(TaskParamDescriptor.SELECT_RENDERER_TYPE);
return descriptors;
}
public TaskActionDescriptorModel[] getActionDescriptors() {
TaskActionDescriptor[] descriptors = new TaskActionDescriptor[2];
descriptors[0] = new TaskActionDescriptor(CustomTask.class, "query",
"查询");
descriptors[1] = new TaskActionDescriptor(CustomTask.class,"changeLayout","布局切换");
return descriptors;
}
public TaskLayout[] getTaskLayout() {
layouts[0] = new TabularLayout();
layouts[0].addComponent(getParamDescriptors()[1], new TabularPosition(0,0,1,1));
layouts[0].addComponent(getActionDescriptors()[1], new TabularPosition(0,1,1,1));
layouts[0].addComponent(getParamDescriptors()[0], new TabularPosition(1,0,1,1));
layouts[0].addComponent(getActionDescriptors()[0], new TabularPosition(1,1,1,1));
layouts[0].addComponent(getToolDescriptors()[0], new TabularPosition(1,1,1,0));
return layouts;
}
CustomTaskInfo.Java为我们定义了Task面板的样式,public TaskDescriptor getTaskDescriptor()定义了面板的整体外观,并且关联了处理该面板事物的CustomTask类。
public TaskToolDescriptorModel[] getToolDescriptors()定义了工具样式,该函数返回值为数组类型,可以添加多个工具样式。
public TaskParamDescriptorModel[] getParamDescriptors() 也是以返回数组的形式,它提供描述所有参数的样式,如以文本形式还是以列表选择的方式。
public TaskActionDescriptorModel[] getActionDescriptors() 描述所有命令按钮的样式,设置按钮名称,添加回调函数。
public TaskLayout[] getTaskLayout()
最后在getTaskLayout中添加前面定义的面板元素,这样一个完整的Task就生成了。
当然以上只是后台部分的内容,在faces-config配置文件中,可以看到一下配置信息:
<map-entry>
<key>queryTask</key>
<value>#{queryTask}</value>
</map-entry>
<managed-bean>
<managed-bean-name>queryTask</managed-bean-name>
<managed-bean-class>com.esri.adf.web.developer.CustomTask</managed-bean-class>
<managed-bean-scope>none</managed-bean-scope>
</managed-bean>
以上配置文件,注册了CustomTask 这bean,名称为queryTask,queryTask又被添加到MapContext属性的列表中。
最后就剩下了前台部分,代码如下:
<a:task id="queryTask"
taskInfo="#{queryTask.taskInfo}"
mapId="map1" clientPostBack="true"
windowingSupport="true"
value="#{mapContext.attributes.queryTask}" />
完成整个工作,部署工程,运行,下面为示例图(1):
输入南京,单击查询Command按钮,后台调用query函数,结果高亮显示。
通过Tool,多边形选取,目标要素以符号化的形式显示。
如下图(2):
以上就是一个Task基本功能的完成展示。
相关文章推荐
- Java ADF 运行原理剖析(1)
- JAVA ADF运行原理(3)
- JAVA ADF运行原理(6)-----AJAXRenderer
- JAVA ADF 运行原理(5)
- java运行原理
- Java的运行原理
- JDK的安装及Java的运行原理
- ASP.NET Core 运行原理剖析
- Java并发编程原理与实战十九:AQS 剖析
- 干货|区块链技术入门——比特币运行及交易原理剖析(分享实录)
- JavaWeb(二)jsp运行原理,九大内置对象
- Java Web基础:第七讲 Servlet运行原理
- JavaWeb基础之一JSP语法(一) JSP运行原理
- Java学习笔记--Lesson1(Java跨平台原理的剖析和Java环境变量的配置
- JavaBean内省的简单操作,剖析JavaBean属性设置的原理。。
- [JAVAWEB]5.详解JSP的运行原理
- java&nbsp;执行过程&nbsp;运行原理
- Java程序员从笨鸟到菜鸟之(四十六)细谈struts2(八)拦截器的实现原理及源码剖析
- Java的运行原理
- JAVA和JVM运行原理揭秘