使用DataBox.docx
- 文档编号:8995153
- 上传时间:2023-05-16
- 格式:DOCX
- 页数:23
- 大小:22.13KB
使用DataBox.docx
《使用DataBox.docx》由会员分享,可在线阅读,更多相关《使用DataBox.docx(23页珍藏版)》请在冰点文库上搜索。
使用DataBox
使用DataBox
使用DataBox
在TWaver中,所有的电信运营支撑系统(OSS)中的业务对象都可以加入到DataBox中进行管理。
DataBox是一个数据管理容器,它可以被看作是一个比较复杂的Java容器或Java对象的数组。
DataBox可用于管理所有的预定义网元对象(实现了TWaverElement接口的对象)。
当添加,删除,移动网元或者更改网元属性时,DataBox都可以监听到。
TWaverDataBox和后台数据也有很好的接口,它可以通过数据流的方式和后台相连,也就是说你可以通过XML文件来更改DataBox中网元。
DataBox在数据承载上也有一个很好的设计,它的优势在于很方便的管理Network上庞大数据而仅占用很少的内存,很少的加载时间。
更改DataBox中的元素
访问DataBox中的元素
使用ElementCallbackHandler遍历DataBox
使用DataBox监听器
使用Element属性变化监听器
使用SelectionChangeInterceptor
使用DataBoxLayerModel
网元的延迟加载
DataBox和多线程
定制告警传播规则
使用QuickFinder
Undo和Redo
更改DataBox中的元素
添加一个元素到DataBox中:
通过API:
box.addElement(Elementelement)
通过XML:
<?
xmlversion="1.0"encoding="UTF-8"?
>
<javaversion="1.4.2_04"class="java.beans.XMLDecoder">
<objectid="Rack0"class="twaver.Node"/>
</java>
删除DataBox中的一个元素:
通过API:
box.removeElement(Elementelement);
box.removeElementByID(ObjectelementID);
通过XML:
<?
xmlversion="1.0"encoding="UTF-8"?
>
<javaversion="1.4.2_04"class="java.beans.XMLDecoder">
<removeObjectid="Rack0"/>
</java>
清空DataBox中所有的元素:
通过API:
box.clear();
通过XML:
<?
xmlversion="1.0"encoding="UTF-8"?
>
<javaversion="1.4.2_04"class="java.beans.XMLDecoder">
<clearObject/>
</java>
更改元素的属性:
通过API:
box.addElement(node1);
...
node1.setLocation(100,100);//changenodelocationvalue.
通过XML:
<?
xmlversion="1.0"encoding="UTF-8"?
>
<javaversion="1.4.2_04"class="java.beans.XMLDecoder">
<updateObjectid="node1">
<voidproperty="location">
<objectclass="java.awt.Point">
<int>100</int>
<int>100</int>
</object>
</void>
</updateObject>
</java>
访问DataBox中的元素方法
描述
box.getAllElements()
获取DataBox中的所有元素
box.getAllElementsReverse()
以倒序的方式获取DataBox中的所有元素
box.getElementByID(Objectid)
通过ID获取相应的元素
box.getElementByName(Stringname)
通过Name获取相应的元素,如果同名的元素有多个,TWaver取其中一个
box.getElementByTag(Stringtag)
通过标签获取相应的元素(只适用于Equipment)
box.iterator()
迭代DataBox中所有的元素
box.iterator(Classclazz)
迭代DataBox中指定类型的元素
box.iteratorReverse()
倒序迭代DataBox中所有的元素
box.iteratorSelection(ElementCallbackHandlerhandler)
迭代DataBox中所有选中的元素,在迭代每个元素时都会回调handler中的方法去处理这些元素
box.iteratorReverse(ElementCallbackHandlerhandler)
以倒序的方式迭代DataBox中所有的元素,在迭代每个元素时都会回调handler中的方法去处理这些元素
box.iteratorReverseByLayer(ElementCallbackHandlerhandler)
按图层序号以倒序的方式迭代DataBox中所有的元素,在迭代每个元素时都会调用handler去处理这些元素
box.iteratorByLayer(ElementCallbackHandlerhandler)
按图层序号迭代DataBox中所有的元素,在迭代每个元素时都会调用handler去处理这些元素
box.getRootElements()
得到DataBox中所有顶层的元素。
顶层元素是指该元素没有父亲元素。
box.getRootElementsReverse()
以倒序的方式获取DataBox中的所有顶层元素
box.depthFirstEnumeration()
得到DataBox的一个深度优先遍历集合
box.depthFirstEnumeration(Elementroot)
得到某个根元素下的所有孩子的一个深度优先遍历集合
box.breadthFirstEnumeration()
得到DataBox的一个广度优先遍历集合
box.breadthFirstEnumeration(Elementroot)
得到某个根元素下的所有孩子的一个广度优先遍历集合当DataBox迭代时,不可对其作增减操作,因为当迭代集合被更改时,就会抛出异常。
你可以在迭代前或迭代后使用DataBox中的removeElement方法来删除。
使用ElementCallbackHandler遍历DataBox
当迭代DataBox的Element时,twaver.ElementCallbackHandler可用于处理迭代的Element。
twaver.ElementCallbackHandler
publicinterfaceElementCallbackHandler{
publicbooleanprocessElement(Elementelement);
}
迭代twaver.TDataBox的代码如下:
publicvoiditerator(ElementCallbackHandlerhandler){
Iteratorit=elements.iterator();
while(it.hasNext()){
Elementelement=(Element)it.next();
if(!
handler.processElement(element)){
return;
}
}
}
通过以下的方法都可调用ElementCallbackHandler:
twaver.TDataBox.iterator(ElementCallbackHandler)
twaver.TDataBox.iteratorByLayer(ElementCallbackHandler)
twaver.TDataBox.iteratorReverse(ElementCallbackHandler)
twaver.TDataBox.iteratorReverseByLayer(ElementCallbackHandler)
twaver.TDataBox.iteratorSelection(ElementCallbackHandler)
创建一个twaver.ElementCallbackHandler实例:
ElementCallbackHandlerhandler=newElementCallbackHandler(){
inti=0;
publicbooleanprocessElement(Elementelement){
element.setName("node_"+i++);
if(i>10){
//returnfalse,endtraversal
returnfalse;
}
returntrue;
}
};
box.iterator(handler);
twaver.ElementReturnCallbackHandler是ElementCallbackHandler的子类,它可以调用getReturnValue返回一个值
twaver.ElementReturnCallbackHandler
publicinterfaceElementReturnCallbackHandlerextendsElementCallbackHandler{
publicObjectgetReturnValue();
}
具体使用代码如下:
ElementReturnCallbackHandlerhandler=newElementReturnCallbackHandler(){
inti=0;
privateListlist=newArrayList();
publicbooleanprocessElement(Elementelement){
element.setName("node_"+i++);
list.add(element);
if(i>10){
returnfalse;
}
returntrue;
}
publicObjectgetReturnValue(){
returnlist;
}
};
box.iterator(handler);
ListprocessedElements=handler.getReturnValue();
使用DataBox监听器
DataBoxListener用于监听DataBox中更改元素发生的事件,当DataBox中添加,删除,更改一个元素时,这些事件都可通过DataBoxListener监听到。
当DataBox清除时,DataBoxListener也可监听到。
DataBoxListener只能监听到DataBox中Element的添加,删除,清空或图层的更改,如果你想要监听Element上具体属性的变化,需要使用Element的属性更改监听器,参见使用Element属性变化监听器。
关于如何监听DataBox中元素的变化,代码如下:
TDataBoxbox=newTDataBox();
box.addDataBoxListener(newDataBoxAdapter(){
publicvoidelementAdded(DataBoxEventdataBoxEvent){
System.out.println(dataBoxEvent.getElement()+"added");
}publicvoidelementRemoved(DataBoxEventdataBoxEvent){
System.out.println(dataBoxEvent.getElement()+"removed");
}publicvoidelementsCleared(DataBoxEventdataBoxEvent){
System.out.println(dataBoxEvent.getDataBox()+"cleared");
}
});
使用Element属性变化监听器
当Element被加到DataBox中,就可以通过java.beans.PropertyChangeListener去监听Element的属性变化。
关于如何监听Element的属性变化,参见以下代码:
TDataBoxbox=newTDataBox();
box.addElementPropertyChangeListener(newPropertyChangeListener(){
publicvoidpropertyChange(PropertyChangeEvente){
Elementelement=(Element)e.getSource();System.out.println("Element:
"+element.getID().toString());
System.out.println("Propertyname:
"+e.getPropertyName());
System.out.println("Oldvalue:
"+e.getOldValue());
System.out.println("Newvalue:
"+e.getNewValue());
}
});使用SelectionChangeInterceptor
SelectionChangeInterceptor是选中变化事件拦截器,当选中变化事件发生时,可通过以下两种方法来处理相关事件:
publicvoidbeforeSelectionChanged(TDataBoxbox,inttype,Collectionelements);
publicvoidafterSelectionChanged(TDataBoxbox,inttype,Collectionelements);
具体使用方式参见如下代码:
box.getSelectionModel().setSelectionChangedInterceptor(
newSelectionChangedInterceptor(){
publicvoidbeforeSelectionChanged(TDataBoxbox,inttype,Collectionelements){
selectionArea.append(">>Before:
"+getName(type)+"|EffectedCount:
"+elements.size());
}
publicvoidafterSelectionChanged(TDataBoxbox,inttype,Collectionelements){
selectionArea.append("<<After:
"+getName(type)+"|EffectedCount:
"+elements.size());
if(selectionArea.getLineCount()>300){
selectionArea.setText(null);
}
}
publicStringgetName(inttype){
if(type==SelectionChangedInterceptor.APPEND_SELECTION_COLLECTION){
return"APPEND_SELECTION_COLLECTION";
}
if(type==SelectionChangedInterceptor.APPEND_SELECTION_ELEMENT){
return"APPEND_SELECTION_ELEMENT";
}
if(type==SelectionChangedInterceptor.CLEAR_SELECTION){
return"CLEAR_SELECTION";
}
if(type==SelectionChangedInterceptor.REMOVE_SELECTION_COLLECTION){
return"REMOVE_SELECTION_COLLECTION";
}
if(type==SelectionChangedInterceptor.REMOVE_SELECTION_ELEMENT){
return"REMOVE_SELECTION_ELEMENT";
}
return"***";
}
});使用DataBoxLayerModel
LayerModel是用于管理Element图层的一个容器.
LayerModel和LayerTWaverDataBox可用于存放所有的Element,Element上包含Layer属性,默认是在TWaver预定义的一个图层(默认图层),这个图层不可更改。
而LayerModel是DataBox的一部分,它是用于管理所有图层的一个容器,可通过TDataBox.getLayerModel来获得DataBox中的图层。
使用LayerModel管理图层
通过LayerModel,可以进行以下操作:
添加图层(图层的ID不能重复)
删除图层(不能删除默认图层)
清除所有的图层(不包含默认图层)
获取图层(可通过get或iterator的方式)
移动图层(通过moveTo方法
使用LayerModelListener
在LayerModel中,你可以通过添加监听器监听图层的变化。
addLayerModelListener:
添加图层监听器
removeLayerModelListener:
删除图层的监听器
通过添加LayerModelListener监听器,监听LayerModel中图层的以下变化:
添加图层(回调layerAdded方法)
删除图层(回调layerRemoved方法)
更改图层索引(回调layerIndexChanged方法)
使用Layer
图层预定义属性
图层对象预定义了很多属性:
id:
图层的主键,用于唯一标识图层的,不能重复
name:
图层的名称
visible:
图层是否可见(影响该图层上的所有Elements)
selectable:
图层上的网元是否可选择
movable:
图层上的网元是否可移动
resizable:
图层上的网元是否可更改大小
alpha:
透明度的值
description:
图层的描述
图层的ClientProperties
图层对象支持ClientProperty,图层上关于ClientProperty的有以下方法:
putClientProperty:
添加属性
getClientProperty:
获取属性
getClientProperties:
获取所有属性
图层属性变化事件
当更改Layer上的属性时,可通过LayerModel.addLayerPropertyChangeListener监听到这些属性的变化,Layers是标准的JavaBean对象,包含的属性如下:
属性
值
Id
Layer.PROPERTY_ID
Name
Layer.PROPERTY_NAME
description
Layer.PROPERTY_DESCRIPTION
Visible
Layer.PROPERTY_VISIBLE
Selectable
Layer.PROPERTY_SELECTABLE
Movable
Layer.PROPERTY_MOVABLE
Resizable
Layer.PROPERTY_RESIZABLE
Alpha
Layer.PROPERTY_ALPHA
clientproperties
TWaverConst.CLIENT_PROPERTY_PREFIX+key
Element和Layer
Element可通过setLayerID为其指定一个图层,每个Element都有一个相关的图层。
当Element一旦添加到DataBox中,TWaver就会使用以下的规则为其指定一个图层:
如果Element没有设置LayerID,TWaver将其放到默认的图层中
如果指定了LayerID,但Layer不存在,TWaver将其放到默认的图层中
如果指定了LayerID,并且Layer存在,TWaver将其放到指定的图层中
如果更改了Element的LayerID的值,重复1,2,3的步骤为其设定一个LayerID
如果添加了一个新的Layer,那么相关的Elements就会重默认的图层移到新的图层上
如果删除了一个图层,那么相关的Elements就会移到默认的图层上
Layer数据的序列化
正如DataBox中的Elements一样,Layer也可被序列化到XML中。
以下代码是通过API创建Layer,然后序列化到XML文件中。
TDataBoxbox=newTDataBox();
Layerlayer=newLayer("layer1");
box.getLayerModel().addLayer(layer);Nodenode=newNode("node1");
node.setLayerID("layer1");
box.addElement(node);DataBoxOutputSettingsetting=newDataBoxOutputSetting();
setting.setWithLayers(true);
box.output("c:
/a.xml",setting);
输出的XML文件如下:
<?
xmlversion="1.0"encoding="UTF-8"?
>
<javaversion="1.5.0_03"class="java.beans.XMLDecoder">
<objectclass="twaver.Node">
<voidproperty="layerID">
<string>layer1</string>
</void>
</object>
<objectc
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 使用 DataBox
文档标签
- VC60使用
- 使用TestDriven
- CASTEP使用
- CP3431使用
- AD603使用
- debussy使用
- PZWI044SMT使用
- AndroidDialog使用
- NCBIBLAST使用
- delphicxGrid使用
- pingipconfigtracert使用
- Jade使用
- 使用ConditionedActivityGroup
- Maxplus使用
- MSSQLServer使用
- ProteusKeil使用
- 使用powerdesigne
- FMS使用
- 使用JavaNativeInterface
- VBSScript的使用Script使用
- SmartPlantReview的使用Review使用
- iperf安装使用
- Epidata31安装使用
- SonixOID的使用使用
- Usbkey安装使用
- CCS安装simulate使用
- VisualSVNServer安装使用