From f2cacfb5c8760d2b9b539821cc9e13054dbc1320 Mon Sep 17 00:00:00 2001 From: jiazx0107@163.com <jiazx0107@163.com> Date: 星期二, 24 十月 2023 19:37:10 +0800 Subject: [PATCH] 四川省网关接口相关2 --- src/main/java/com/fzzy/api/data/PushProtocol.java | 3 .gitignore | 1 src/main/java/com/fzzy/gateway/service/GatewayDeviceService.java | 63 + src/main/java/com/fzzy/gateway/sc2023/api/ApiInitService.java | 25 src/main/java/com/fzzy/gateway/sc2023/api/ScGatewayRemoteService.java | 117 ++ src/main/java/com/fzzy/gateway/view/GatewayDevice.view.xml | 265 +++++ src/main/java/com/fzzy/gateway/data/GatewayResponse.java | 40 src/main/java/com/fzzy/gateway/entity/GatewayDevice.java | 78 + src/main/java/com/fzzy/gateway/service/GatewayConfService.java | 59 + src/main/java/com/fzzy/gateway/service/repository/GatewayConfRep.java | 16 src/main/resources/templates/home/home.html | 22 src/main/java/com/fzzy/gateway/sc2023/api/GatewayRemoteManager.java | 37 src/main/java/com/fzzy/gateway/sc2023/ScConstant.java | 6 src/main/java/com/fzzy/gateway/sc2023/websocket/WebSocketMqtt.java | 10 src/main/resources/templates/home/home-bak202310.html | 382 ++++++++ src/main/java/com/fzzy/api/data/AuthToken.java | 5 src/main/resources/dorado-home/configure.properties | 4 src/main/java/com/fzzy/gateway/service/repository/GatewayDeviceRep.java | 17 src/main/java/com/fzzy/gateway/sc2023/api/GatewayRemoteService.java | 25 src/main/java/com/fzzy/push/gb2022/HttpClientUtil.java | 122 ++ src/main/java/com/fzzy/gateway/data/GatewayParam.java | 21 src/main/java/com/fzzy/gateway/data/GatewayResult.java | 12 .rules | 1106 ++++++++++++++++++++++++ src/main/java/com/fzzy/gateway/view/GatewayConf.view.xml | 243 +++++ src/main/java/com/fzzy/gateway/entity/GatewayConf.java | 5 src/main/java/com/fzzy/conf/JpaConfigPrimary.java | 2 src/main/java/com/fzzy/gateway/GatewayRunner.java | 12 27 files changed, 2,665 insertions(+), 33 deletions(-) diff --git a/.gitignore b/.gitignore index fcae8c8..8126467 100644 --- a/.gitignore +++ b/.gitignore @@ -26,3 +26,4 @@ /*/.settings/ /*/.gitignore +/.settings/ diff --git a/.rules b/.rules new file mode 100644 index 0000000..9c6f308 --- /dev/null +++ b/.rules @@ -0,0 +1,1106 @@ +<?xml version="1.0" encoding="UTF-8"?> +<RuleSet version="1.1"><PackageInfos> +<PackageInfo name="dorado-core" version="7.6.0-SNAPSHOT.180516.1527"/> +<PackageInfo name="dorado-uploader" version="1.0.20-SNAPSHOT"/> +<PackageInfo name="dorado-skin-sky" version="2.0.2"/> +<PackageInfo name="dorado-vidor"/></PackageInfos><Rule name="Auxiliary"><Children><Child rule="Import" name="Import"></Child><Child rule="GroupStart" name="GroupStart"></Child><Child rule="GroupEnd" name="GroupEnd"></Child><Child rule="PlaceHolder" name="PlaceHolder"></Child><Child rule="PlaceHolderStart" name="PlaceHolderStart"></Child><Child rule="PlaceHolderEnd" name="PlaceHolderEnd"></Child></Children></Rule><Rule name="Import" scope="public" sortFactor="9001" category="Auxiliary" icon="/com/bstek/dorado/idesupport/icons/Import.png"><PrimitiveProps> +<Prop name="id"/> +<Prop name="src"/></PrimitiveProps></Rule><Rule name="GroupStart" scope="public" sortFactor="9002" category="Auxiliary" icon="/com/bstek/dorado/idesupport/icons/GroupStart.png"><PrimitiveProps> +<Prop name="id"/></PrimitiveProps></Rule><Rule name="GroupEnd" scope="public" sortFactor="9003" category="Auxiliary" icon="/com/bstek/dorado/idesupport/icons/GroupEnd.png"></Rule><Rule name="PlaceHolder" scope="public" sortFactor="9004" category="Auxiliary" icon="/com/bstek/dorado/idesupport/icons/PlaceHolder.png"><PrimitiveProps> +<Prop name="id"/></PrimitiveProps></Rule><Rule name="PlaceHolderStart" parents="PlaceHolder" scope="public" sortFactor="9005" category="Auxiliary" icon="/com/bstek/dorado/idesupport/icons/PlaceHolderStart.png"></Rule><Rule name="PlaceHolderEnd" scope="public" sortFactor="9006" category="Auxiliary" icon="/com/bstek/dorado/idesupport/icons/PlaceHolderEnd.png"></Rule><Rule name="Model" icon="/com/bstek/dorado/view/manager/Model.png"><Children><Child rule="AbstractDataType" name="DataType" aggregated="true"></Child><Child rule="AbstractDataProvider" name="DataProvider" aggregated="true"></Child><Child rule="AbstractDataResolver" name="DataResolver" aggregated="true"></Child></Children></Rule><Rule name="AbstractDataType" abstract="true" nodeName="DataType" type="com.bstek.dorado.data.type.AbstractDataType"><PrimitiveProps> +<Prop name="name"/></PrimitiveProps><Props> +<Prop name="creationType" type="java.lang.Class"/> +<Prop name="matchType" type="java.lang.Class"/><Prop name="metaData" type="java.util.Map" compositeType="Open"></Prop> +<Prop name="tags"/></Props></Rule><Rule name="AbstractDataProvider" abstract="true" nodeName="DataProvider" type="com.bstek.dorado.data.provider.AbstractDataProvider"><PrimitiveProps> +<Prop name="impl"/> +<Prop name="parent"/> +<Prop name="scope" enumValues="instant,thread,singleton,session,request"/> +<Prop name="listener"/> +<Prop name="overwrite" type="boolean"/> +<Prop name="name"/></PrimitiveProps><Props> +<Prop name="interceptor"/><Prop name="metaData" type="java.util.Map" compositeType="Open"></Prop> +<Prop name="parameter" editor="pojo" type="java.lang.Object"/></Props></Rule><Rule name="AbstractDataResolver" abstract="true" nodeName="DataResolver" type="com.bstek.dorado.data.resolver.AbstractDataResolver"><PrimitiveProps> +<Prop name="impl"/> +<Prop name="parent"/> +<Prop name="scope" enumValues="instant,thread,singleton,session,request"/> +<Prop name="listener"/> +<Prop name="overwrite" type="boolean"/> +<Prop name="name"/></PrimitiveProps><Props> +<Prop name="interceptor"/><Prop name="metaData" type="java.util.Map" compositeType="Open"></Prop> +<Prop name="parameter" type="java.lang.Object"/></Props></Rule><Rule name="ViewConfig" label="ViewConfig" type="com.bstek.dorado.view.manager.ViewConfig" icon="/com/bstek/dorado/view/manager/ViewConfig.png"><PrimitiveProps> +<Prop name="listener"/> +<Prop name="template"/></PrimitiveProps><Props><Prop name="metaData" type="java.util.Map" compositeType="Open"></Prop> +<Prop name="scope" defaultValue="thread" enumValues="instant,thread,singleton,session,request"/></Props><Children><Child name="Arguments"><Rule name="Arguments" nodeName="Arguments" icon="/com/bstek/dorado/view/manager/Arguments.png"><Children><Child name="Argument" aggregated="true"><Rule name="Argument" nodeName="Argument" icon="/com/bstek/dorado/view/manager/Argument.png"><PrimitiveProps> +<Prop name="name"/></PrimitiveProps><Props> +<Prop name="value" type="java.lang.Object"/></Props></Rule></Child></Children></Rule></Child><Child name="Context"><Rule name="Context" nodeName="Context" icon="/com/bstek/dorado/view/manager/ViewContext.png"><Children><Child name="Attribute" aggregated="true"><Rule name="Attribute" nodeName="Attribute" icon="/com/bstek/dorado/view/manager/Attribute.png"><PrimitiveProps> +<Prop name="name"/></PrimitiveProps><Props> +<Prop name="value" type="java.lang.Object"/></Props></Rule></Child></Children></Rule></Child><Child rule="Model" name="Model"></Child><Child rule="View" name="View"></Child></Children></Rule><Rule name="LayoutHolder"><Children><Child rule="AnchorLayout" name="anchor"></Child><Child rule="DockLayout" name="dock"></Child><Child rule="HboxLayout" name="hbox"></Child><Child rule="VboxLayout" name="vbox"></Child><Child rule="FormLayout" name="form"></Child><Child rule="NativeLayout" name="native"></Child></Children></Rule><Rule name="View" parents="Container" abstract="true" type="com.bstek.dorado.view.View" scope="private" clientTypes="desktop"><PrimitiveProps> +<Prop name="listener"/></PrimitiveProps><Props><Prop name="cache" type="com.bstek.dorado.view.ViewCache" compositeType="Fixed"> +<Prop name="maxAge" type="long"/> +<Prop name="mode" enumValues="none,clientSide"/></Prop> +<Prop name="javaScriptFile"/> +<Prop name="packages"/> +<Prop name="pageTemplate"/> +<Prop name="pageUri"/> +<Prop name="renderMode" defaultValue="onCreate" enumValues="onCreate,onDataLoaded,manual"/> +<Prop name="skin"/> +<Prop name="styleSheetFile"/> +<Prop name="title" highlight="1"/></Props><ClientEvents> +<ClientEvent name="onLoadData" parameters="self,arg"/> +<ClientEvent name="onComponentRegistered" parameters="self,arg"/> +<ClientEvent name="onComponentUnregistered" parameters="self,arg"/></ClientEvents><Children><Child rule="Component" name="Children" aggregated="true"></Child></Children></Rule><Rule name="DataType" parents="EntityDataTypeSupport" label="DataType" type="com.bstek.dorado.data.type.DefaultEntityDataType" scope="public" sortFactor="1" robots="datatype-reflection|鑷姩鍒涘缓PropertyDefs" icon="/com/bstek/dorado/data/type/DefaultEntityDataType.png" reserve="default"><Children><Child rule="Reference" name="Reference" aggregated="true"></Child><Child rule="BasePropertyDef" name="PropertyDef" aggregated="true"></Child></Children></Rule><Rule name="NonAggregationDataType" parents="AbstractDataType" abstract="true" type="com.bstek.dorado.data.type.NonAggregationDataType"></Rule><Rule name="EntityDataTypeSupport" parents="NonAggregationDataType" abstract="true" nodeName="DataType" type="com.bstek.dorado.data.type.EntityDataTypeSupport"><PrimitiveProps> +<Prop name="impl"/> +<Prop name="parent"/> +<Prop name="listener"/> +<Prop name="overwrite" type="boolean"/></PrimitiveProps><Props> +<Prop name="cachable" type="java.lang.Boolean"/> +<Prop name="acceptUnknownProperty" type="boolean"/> +<Prop name="acceptValidationState" defaultValue="ok" enumValues="info,ok,warn,error"/> +<Prop name="autoCreatePropertyDefs" type="boolean"/> +<Prop name="defaultDisplayProperty"/> +<Prop name="userData" editor="any" type="java.lang.Object"/></Props><ClientEvents> +<ClientEvent name="onEntityToText" parameters="self,arg"/> +<ClientEvent name="onAttributeChange" parameters="self,arg"/> +<ClientEvent name="beforeInsert" parameters="self,arg"/> +<ClientEvent name="beforeDataChange" parameters="self,arg"/> +<ClientEvent name="onDataChange" parameters="self,arg"/> +<ClientEvent name="beforeCurrentChange" parameters="self,arg"/> +<ClientEvent name="onCurrentChange" parameters="self,arg"/> +<ClientEvent name="beforeStateChange" parameters="self,arg"/> +<ClientEvent name="beforeRemove" parameters="self,arg"/> +<ClientEvent name="onMessageChange" parameters="self,arg"/> +<ClientEvent name="onStateChange" parameters="self,arg"/> +<ClientEvent name="onRemove" parameters="self,arg"/> +<ClientEvent name="onEntityLoad" parameters="self,arg"/> +<ClientEvent name="onInsert" parameters="self,arg"/></ClientEvents></Rule><Rule name="Reference" parents="LazyPropertyDef" label="Reference" type="com.bstek.dorado.data.type.property.Reference" scope="protected" icon="/com/bstek/dorado/data/type/property/Reference.png"><Props> +<Prop name="activeOnNewEntity" type="boolean"/> +<Prop name="dataProvider" highlight="1" type="com.bstek.dorado.data.provider.DataProvider"/> +<Prop name="pageSize" type="int"/> +<Prop name="parameter" highlight="1" editor="pojo" type="java.lang.Object"/></Props><ClientEvents> +<ClientEvent name="beforeLoadData" parameters="self,arg"/> +<ClientEvent name="onLoadData" parameters="self,arg"/></ClientEvents></Rule><Rule name="PropertyDef" abstract="true" type="com.bstek.dorado.data.type.property.PropertyDef"><PrimitiveProps> +<Prop name="name"/></PrimitiveProps><Props> +<Prop name="acceptUnknownMapKey" type="boolean"/> +<Prop name="dataType" highlight="1" type="com.bstek.dorado.data.type.DataType"/> +<Prop name="defaultValue" type="java.lang.Object"/> +<Prop name="displayFormat"/> +<Prop name="ignored" type="boolean"/> +<Prop name="label" highlight="1"/><Prop name="mapping" type="com.bstek.dorado.data.type.property.Mapping" compositeType="Fixed"> +<Prop name="keyProperty"/> +<Prop name="mapValues" editor="collection[pojo]" type="java.lang.Object"/> +<Prop name="valueProperty"/></Prop><Prop name="metaData" type="java.util.Map" compositeType="Open"></Prop> +<Prop name="readOnly" type="boolean"/> +<Prop name="required" type="boolean"/> +<Prop name="submittable" defaultValue="true" type="boolean"/> +<Prop name="tags"/> +<Prop name="userData" editor="any" type="java.lang.Object"/> +<Prop name="visible" defaultValue="true" type="boolean"/></Props><ClientEvents> +<ClientEvent name="onGet" parameters="self,arg"/> +<ClientEvent name="onSet" parameters="self,arg"/> +<ClientEvent name="onValidate" parameters="self,arg"/> +<ClientEvent name="onGetText" parameters="self,arg"/></ClientEvents><Children><Child rule="Validator" name="Validators" aggregated="true"></Child></Children></Rule><Rule name="Validator" abstract="true" nodeName="Validator" type="com.bstek.dorado.data.type.validator.Validator" icon="/com/bstek/dorado/view/type/property/validator/Validator.png"><PrimitiveProps> +<Prop name="name"/></PrimitiveProps></Rule><Rule name="BasePropertyDef" parents="PropertyDefSupport" label="PropertyDef" nodeName="PropertyDef" type="com.bstek.dorado.data.type.property.BasePropertyDef" icon="/com/bstek/dorado/data/type/property/BasePropertyDef.png"><Props> +<Prop name="propertyPath"/></Props></Rule><Rule name="PropertyDefSupport" parents="PropertyDef" abstract="true" type="com.bstek.dorado.data.type.property.PropertyDefSupport"></Rule><Rule name="com.bstek.dorado.data.type.property.PropertyDefSupport" parents="PropertyDef" abstract="true" type="com.bstek.dorado.data.type.property.PropertyDefSupport"></Rule><Rule name="LazyPropertyDef" parents="PropertyDefSupport" abstract="true" type="com.bstek.dorado.data.type.property.LazyPropertyDef"><Props> +<Prop name="activeAtClient" defaultValue="true" type="boolean"/> +<Prop name="cacheMode" enumValues="noCache,serverSide,clientSide,bothSides"/></Props></Rule><Rule name="DirectDataProvider" parents="AbstractDataProvider" label="DirectDataProvider" type="com.bstek.dorado.data.provider.DirectDataProvider" scope="public" sortFactor="2" icon="/com/bstek/dorado/data/provider/DirectDataProvider.png" reserve="direct"><PrimitiveProps> +<Prop name="type" defaultValue="direct" fixed="true" visible="false"/></PrimitiveProps><Props> +<Prop name="result" editor="pojo" type="java.lang.Object"/></Props></Rule><Rule name="DirectDataResolver" parents="AbstractDataResolver" label="DirectDataResolver" type="com.bstek.dorado.data.resolver.DirectDataResolver" scope="public" sortFactor="3" icon="/com/bstek/dorado/data/resolver/DirectDataResolver.png" reserve="direct"><PrimitiveProps> +<Prop name="type" defaultValue="direct" fixed="true" visible="false"/></PrimitiveProps></Rule><Rule name="AbstractValidator" parents="Validator" abstract="true" nodeName="Validator" type="com.bstek.dorado.view.type.property.validator.AbstractValidator" icon="/com/bstek/dorado/view/type/property/validator/Validator.png"><Props> +<Prop name="name"/> +<Prop name="defaultResultState" defaultValue="error" enumValues="info,ok,warn,error"/> +<Prop name="revalidateOldValue" defaultValue="true" type="boolean"/> +<Prop name="runAt" enumValues="server,client,both"/></Props></Rule><Rule name="RequiredValidator" parents="BaseValidator" label="RequiredValidator" type="com.bstek.dorado.view.type.property.validator.RequiredValidator" scope="public" sortFactor="4" reserve="required"><PrimitiveProps> +<Prop name="type" defaultValue="required" fixed="true" visible="false"/></PrimitiveProps><Props> +<Prop name="acceptZeroOrFalse" type="boolean"/> +<Prop name="trimBeforeValid" defaultValue="true" type="boolean"/></Props></Rule><Rule name="BaseValidator" parents="AbstractValidator" abstract="true" type="com.bstek.dorado.view.type.property.validator.BaseValidator"><Props> +<Prop name="resultMessage"/></Props></Rule><Rule name="LengthValidator" parents="BaseValidator" label="LengthValidator" type="com.bstek.dorado.view.type.property.validator.LengthValidator" scope="public" sortFactor="5" reserve="length"><PrimitiveProps> +<Prop name="type" defaultValue="length" fixed="true" visible="false"/></PrimitiveProps><Props> +<Prop name="maxLength" defaultValue="-1" type="int"/> +<Prop name="minLength" defaultValue="-1" type="int"/></Props></Rule><Rule name="CharLengthValidator" parents="BaseValidator" label="CharLengthValidator" type="com.bstek.dorado.view.type.property.validator.CharLengthValidator" scope="public" sortFactor="6" reserve="charLength"><PrimitiveProps> +<Prop name="type" defaultValue="charLength" fixed="true" visible="false"/></PrimitiveProps><Props> +<Prop name="maxLength" type="int"/> +<Prop name="minLength" type="int"/></Props></Rule><Rule name="RangeValidator" parents="BaseValidator" label="RangeValidator" type="com.bstek.dorado.view.type.property.validator.RangeValidator" scope="public" sortFactor="7" reserve="range"><PrimitiveProps> +<Prop name="type" defaultValue="range" fixed="true" visible="false"/></PrimitiveProps><Props> +<Prop name="maxValue" defaultValue="-1" type="double"/> +<Prop name="maxValueValidateMode" defaultValue="ignore" enumValues="allowEquals,notAllowEquals,ignore"/> +<Prop name="minValue" defaultValue="-1" type="double"/> +<Prop name="minValueValidateMode" defaultValue="ignore" enumValues="allowEquals,notAllowEquals,ignore"/></Props></Rule><Rule name="EnumValidator" parents="BaseValidator" label="EnumValidator" type="com.bstek.dorado.view.type.property.validator.EnumValidator" scope="public" sortFactor="8" reserve="enum"><PrimitiveProps> +<Prop name="type" defaultValue="enum" fixed="true" visible="false"/></PrimitiveProps><Props> +<Prop name="enumValues" highlight="1" editor="collection[value]" type="java.util.List"/></Props></Rule><Rule name="RegExpValidator" parents="BaseValidator" label="RegExpValidator" type="com.bstek.dorado.view.type.property.validator.RegExpValidator" scope="public" sortFactor="9" reserve="regExp"><PrimitiveProps> +<Prop name="type" defaultValue="regExp" fixed="true" visible="false"/></PrimitiveProps><Props> +<Prop name="blackRegExp"/> +<Prop name="validateMode" enumValues="whiteBlack,blackWhite"/> +<Prop name="whiteRegExp"/></Props></Rule><Rule name="AjaxValidator" parents="AbstractAjaxValidator" label="AjaxValidator" type="com.bstek.dorado.view.type.property.validator.AjaxValidator" scope="public" sortFactor="10" reserve="ajax"><PrimitiveProps> +<Prop name="type" defaultValue="ajax" fixed="true" visible="false"/></PrimitiveProps><Props> +<Prop name="ajaxAction" reference="AjaxAction:id"/> +<Prop name="service" highlight="1"/></Props><ClientEvents> +<ClientEvent name="beforeExecute" parameters="self,arg"/></ClientEvents></Rule><Rule name="AbstractAjaxValidator" parents="AbstractValidator" abstract="true" type="com.bstek.dorado.view.type.property.validator.AbstractAjaxValidator"><Props> +<Prop name="async" defaultValue="true" type="boolean"/> +<Prop name="executingMessage"/></Props></Rule><Rule name="CustomValidator" parents="AbstractValidator" label="CustomValidator" type="com.bstek.dorado.view.type.property.validator.CustomValidator" scope="public" sortFactor="11" reserve="custom"><PrimitiveProps> +<Prop name="type" defaultValue="custom" fixed="true" visible="false"/></PrimitiveProps><ClientEvents> +<ClientEvent name="onValidate" parameters="self,arg"/></ClientEvents></Rule><Rule name="AnchorLayout" parents="Layout" label="AnchorLayout" nodeName="anchor" type="com.bstek.dorado.view.widget.layout.AnchorLayout" sortFactor="1001"></Rule><Rule name="Layout" abstract="true" type="com.bstek.dorado.view.widget.layout.Layout"><Props> +<Prop name="className"/> +<Prop name="padding" type="int"/></Props></Rule><Rule name="AnchorLayoutConstraint" parents="LayoutConstraintSupport" label="AnchorLayoutConstraint" type="com.bstek.dorado.view.widget.layout.AnchorLayoutConstraint"><Props> +<Prop name="anchorBottom" enumValues="auto,none,container,previous"/> +<Prop name="anchorLeft" enumValues="auto,none,container,previous"/> +<Prop name="anchorRight" enumValues="auto,none,container,previous"/> +<Prop name="anchorTop" enumValues="auto,none,container,previous"/> +<Prop name="bottom"/> +<Prop name="heightOffset" type="int"/> +<Prop name="left"/> +<Prop name="leftOffset" type="int"/> +<Prop name="right"/> +<Prop name="top"/> +<Prop name="topOffset" type="int"/> +<Prop name="widthOffset" type="int"/></Props></Rule><Rule name="LayoutConstraintSupport" abstract="true" type="com.bstek.dorado.view.widget.layout.LayoutConstraintSupport"><Props> +<Prop name="padding" type="int"/></Props></Rule><Rule name="DockLayout" parents="Layout" label="DockLayout" nodeName="dock" type="com.bstek.dorado.view.widget.layout.DockLayout" sortFactor="1002"><Props> +<Prop name="regionPadding" type="int"/></Props></Rule><Rule name="DockLayoutConstraint" parents="LayoutConstraintSupport" label="DockLayoutConstraint" type="com.bstek.dorado.view.widget.layout.DockLayoutConstraint"><Props> +<Prop name="type" highlight="1" enumValues="left,top,right,bottom,center"/></Props></Rule><Rule name="HboxLayout" parents="AbstractBoxLayout" label="HBoxLayout" nodeName="hbox" type="com.bstek.dorado.view.widget.layout.HBoxLayout" sortFactor="1003"><Props> +<Prop name="align" defaultValue="center" enumValues="top,center,bottom"/></Props></Rule><Rule name="AbstractBoxLayout" parents="Layout" abstract="true" type="com.bstek.dorado.view.widget.layout.AbstractBoxLayout"><Props> +<Prop name="pack" defaultValue="start" enumValues="start,center,end"/> +<Prop name="padding" defaultValue="2" type="int"/> +<Prop name="regionPadding" defaultValue="2" type="int"/> +<Prop name="stretch" defaultValue="true" type="boolean"/></Props></Rule><Rule name="HboxLayoutConstraint" parents="LayoutConstraintSupport" label="HBoxLayoutConstraintSupport" type="com.bstek.dorado.view.widget.layout.HBoxLayoutConstraintSupport"><Props> +<Prop name="align" defaultValue="center" enumValues="top,center,bottom"/></Props></Rule><Rule name="VboxLayout" parents="AbstractBoxLayout" label="VBoxLayout" nodeName="vbox" type="com.bstek.dorado.view.widget.layout.VBoxLayout" sortFactor="1004"><Props> +<Prop name="align" defaultValue="left" enumValues="left,center,right"/> +<Prop name="lazyRenderChild" type="boolean"/></Props></Rule><Rule name="VboxLayoutConstraint" parents="LayoutConstraintSupport" label="VBoxLayoutConstraintSupport" type="com.bstek.dorado.view.widget.layout.VBoxLayoutConstraintSupport"><Props> +<Prop name="align" defaultValue="left" enumValues="left,center,right"/></Props></Rule><Rule name="FormLayout" parents="Layout" label="FormLayout" nodeName="form" type="com.bstek.dorado.view.widget.layout.FormLayout" sortFactor="1005"><Props> +<Prop name="colPadding" defaultValue="6" type="int"/> +<Prop name="cols" highlight="1"/> +<Prop name="padding" defaultValue="8" type="int"/> +<Prop name="rowHeight" type="int"/> +<Prop name="rowPadding" defaultValue="6" type="int"/> +<Prop name="stretchWidth" type="boolean"/></Props></Rule><Rule name="FormLayoutConstraint" parents="LayoutConstraintSupport" label="FormLayoutConstraint" type="com.bstek.dorado.view.widget.layout.FormLayoutConstraint"><Props> +<Prop name="align" defaultValue="left" enumValues="left,center,right"/> +<Prop name="colSpan" type="int"/> +<Prop name="rowSpan" type="int"/> +<Prop name="vAlign" defaultValue="top" enumValues="top,center,bottom"/></Props></Rule><Rule name="NativeLayout" parents="Layout" label="NativeLayout" nodeName="native" type="com.bstek.dorado.view.widget.layout.NativeLayout" sortFactor="1006"><Props> +<Prop name="lazyRenderChild" type="boolean"/> +<Prop name="style"/></Props></Rule><Rule name="NativeLayoutConstraint" parents="HashMap" label="CommonLayoutConstraint" type="com.bstek.dorado.view.widget.layout.CommonLayoutConstraint"></Rule><Rule name="AbstractMap" abstract="true" type="java.util.AbstractMap"></Rule><Rule name="HashMap" parents="AbstractMap" label="HashMap" type="java.util.HashMap"></Rule><Rule name="DataSet" parents="Component" label="DataSet" nodeName="DataSet" type="com.bstek.dorado.view.widget.data.DataSet" sortFactor="2001" category="General" icon="/com/bstek/dorado/view/widget/data/DataSet.png" autoGenerateId="true" clientTypes="desktop,touch"><PrimitiveProps> +<Prop name="listener"/></PrimitiveProps><Props> +<Prop name="cacheable" type="boolean"/> +<Prop name="dataProvider" highlight="1" type="com.bstek.dorado.data.provider.DataProvider"/> +<Prop name="dataType" highlight="1" type="com.bstek.dorado.data.type.DataType"/> +<Prop name="loadMode" defaultValue="lazy" enumValues="preload,onCreate,onReady,lazy,manual"/> +<Prop name="pageSize" type="int"/> +<Prop name="parameter" highlight="1" editor="any" type="java.lang.Object"/> +<Prop name="readOnly" type="boolean"/></Props><ClientEvents> +<ClientEvent name="onLoadData" parameters="self,arg"/> +<ClientEvent name="beforeLoadData" parameters="self,arg"/> +<ClientEvent name="onDataLoad" parameters="self,arg" deprecated="true"/></ClientEvents></Rule><Rule name="Control" parents="com.bstek.dorado.view.widget.Control" label="Control" nodeName="Control" type="com.bstek.dorado.view.widget.DefaultControl" sortFactor="2002" category="General" clientTypes="desktop,touch"></Rule><Rule name="Container" parents="com.bstek.dorado.view.widget.Control" label="Container" type="com.bstek.dorado.view.widget.Container" sortFactor="2003" category="General" icon="/com/bstek/dorado/view/widget/Container.png" clientTypes="desktop,touch"><PrimitiveProps> +<Prop name="listener"/></PrimitiveProps><Props> +<Prop name="containerUi" defaultValue="default" enumValues="default,optional1"/> +<Prop name="contentOverflow" enumValues="visible,hidden,scroll,auto"/> +<Prop name="contentOverflowX" enumValues="visible,hidden,scroll,auto"/> +<Prop name="contentOverflowY" enumValues="visible,hidden,scroll,auto"/> +<Prop name="layout" visible="false" type="com.bstek.dorado.view.widget.layout.Layout"/></Props><Children><Child rule="Component" name="Children" aggregated="true"></Child></Children></Rule><Rule name="HtmlContainer" parents="Container" label="HtmlContainer" type="com.bstek.dorado.view.widget.HtmlContainer" sortFactor="2004" category="General" icon="/com/bstek/dorado/view/widget/HtmlContainer.png" clientTypes="desktop,touch"><Props> +<Prop name="containerExpression"/> +<Prop name="content" editor="multiLines"/> +<Prop name="contentFile"/></Props></Rule><Rule name="SubViewHolder" parents="com.bstek.dorado.view.widget.Control" label="SubViewHolder" type="com.bstek.dorado.view.widget.SubViewHolder" sortFactor="2005" category="General" icon="/com/bstek/dorado/view/widget/SubViewHolder.png" clientTypes="desktop,touch"><Props><Prop name="context" type="java.util.Map" compositeType="Open"></Prop> +<Prop name="loadMode" enumValues="preload,lazy,manual"/> +<Prop name="subView"/></Props></Rule><Rule name="Action" parents="Component" label="Action" type="com.bstek.dorado.view.widget.action.Action" sortFactor="2006" category="Action" icon="/com/bstek/dorado/view/widget/action/Action.png" autoGenerateId="true" clientTypes="desktop,touch"><Props> +<Prop name="caption"/> +<Prop name="confirmMessage"/> +<Prop name="disabled" type="boolean"/> +<Prop name="hotkey" enumValues="f1,f2,ctrl+s,alt+s,shift+s,ctrl+alt+shift+s,return,space,backspace,left,right,up,down"/> +<Prop name="icon"/> +<Prop name="iconClass"/> +<Prop name="parameter" editor="any" type="java.lang.Object"/> +<Prop name="successMessage"/> +<Prop name="tip"/></Props><ClientEvents> +<ClientEvent name="onExecute" parameters="self,arg"/> +<ClientEvent name="beforeExecute" parameters="self,arg"/> +<ClientEvent name="onFailure" parameters="self,arg"/> +<ClientEvent name="onSuccess" parameters="self,arg"/></ClientEvents></Rule><Rule name="AjaxAction" parents="AsyncAction" label="AjaxAction" type="com.bstek.dorado.view.widget.action.AjaxAction" sortFactor="2007" category="Action" icon="/com/bstek/dorado/view/widget/action/AjaxAction.png" autoGenerateId="true" clientTypes="desktop,touch"><Props> +<Prop name="batchable" defaultValue="true" type="boolean"/> +<Prop name="service" highlight="1"/> +<Prop name="supportsEntity" defaultValue="true" type="boolean"/> +<Prop name="timeout" type="long"/></Props></Rule><Rule name="UpdateAction" parents="AsyncAction" label="UpdateAction" type="com.bstek.dorado.view.widget.action.UpdateAction" sortFactor="2008" category="Action" icon="/com/bstek/dorado/view/widget/action/UpdateAction.png" autoGenerateId="true" clientTypes="desktop,touch"><Props> +<Prop name="alwaysExecute" type="boolean"/> +<Prop name="dataResolver" highlight="1" type="com.bstek.dorado.data.resolver.DataResolver"/> +<Prop name="executingMessage"/></Props><ClientEvents> +<ClientEvent name="onGetUpdateData" parameters="self,arg"/></ClientEvents><Children><Child rule="UpdateItem" name="UpdateItems" aggregated="true"></Child></Children></Rule><Rule name="FormSubmitAction" parents="Action" label="FormSubmitAction" type="com.bstek.dorado.view.widget.action.FormSubmitAction" sortFactor="2009" category="Action" icon="/com/bstek/dorado/view/widget/action/FormSubmitAction.png" autoGenerateId="true" clientTypes="desktop,touch"><Props> +<Prop name="action"/> +<Prop name="method" defaultValue="post" enumValues="post,get"/> +<Prop name="target"/></Props></Rule><Rule name="LongTask" parents="Action" label="LongTask" type="com.bstek.dorado.view.widget.action.LongTask" sortFactor="2010" category="Action" autoGenerateId="true" clientTypes="desktop,touch"><Props> +<Prop name="appearence" defaultValue="daemonTask" enumValues="none,daemonTask,mainTask"/> +<Prop name="disableOnActive" defaultValue="true" type="boolean"/> +<Prop name="taskName" highlight="1"/></Props><ClientEvents> +<ClientEvent name="onTaskScheduled" parameters="self,arg"/> +<ClientEvent name="onTaskEnd" parameters="self,arg"/> +<ClientEvent name="onLog" parameters="self,arg"/> +<ClientEvent name="onStateChange" parameters="self,arg"/></ClientEvents></Rule><Rule name="Button" parents="AbstractButton" label="Button" type="com.bstek.dorado.view.widget.base.Button" sortFactor="2011" category="General" icon="/com/bstek/dorado/view/widget/base/Button.png" clientTypes="desktop"><Props> +<Prop name="caption" highlight="1"/> +<Prop name="height" visible="false"/> +<Prop name="icon"/> +<Prop name="iconClass"/> +<Prop name="showTrigger" type="boolean"/> +<Prop name="splitButton" type="boolean"/> +<Prop name="triggerToggled" type="boolean"/></Props><ClientEvents> +<ClientEvent name="onTriggerClick" parameters="self,arg"/></ClientEvents></Rule><Rule name="SimpleButton" parents="AbstractButton" label="SimpleButton" type="com.bstek.dorado.view.widget.base.SimpleButton" sortFactor="2012" category="General" icon="/com/bstek/dorado/view/widget/base/SimpleButton.png" clientTypes="desktop,touch"><Props> +<Prop name="disabledClassName"/> +<Prop name="hoverClassName"/> +<Prop name="mouseDownClassName"/> +<Prop name="toggledClassName"/></Props></Rule><Rule name="SimpleIconButton" parents="SimpleButton" label="SimpleIconButton" type="com.bstek.dorado.view.widget.base.SimpleIconButton" sortFactor="2013" category="General" icon="/com/bstek/dorado/view/widget/base/SimpleIconButton.png" clientTypes="desktop,touch"><Props> +<Prop name="icon" highlight="1"/> +<Prop name="iconClass"/> +<Prop name="showTrigger" type="boolean"/></Props></Rule><Rule name="Panel" parents="AbstractPanel" label="Panel" type="com.bstek.dorado.view.widget.base.Panel" sortFactor="2014" category="General" icon="/com/bstek/dorado/view/widget/base/Panel.png" clientTypes="desktop"><Props> +<Prop name="background"/> +<Prop name="border" defaultValue="normal" enumValues="none,normal,curve" deprecated="true"/> +<Prop name="closeAction" defaultValue="hide" enumValues="hide,close"/> +<Prop name="closeable" type="boolean"/> +<Prop name="collapseable" defaultValue="false" type="boolean"/> +<Prop name="icon"/> +<Prop name="iconClass"/> +<Prop name="maximizeable" type="boolean"/> +<Prop name="maximized" type="boolean"/> +<Prop name="showCaptionBar" type="java.lang.Boolean"/></Props><ClientEvents> +<ClientEvent name="onMaximize" parameters="self,arg"/> +<ClientEvent name="beforeMaximize" parameters="self,arg"/></ClientEvents><Children><Child name="Tools" fixed="true"><Rule name="Wrapper.Tools" label="Tools" nodeName="Tools" icon="/com/bstek/dorado/view/widget/base/Tools.png"><Children><Child rule="SimpleIconButton" name="Tools" aggregated="true"></Child></Children></Rule></Child></Children></Rule><Rule name="GroupBox" parents="AbstractPanel" label="GroupBox" type="com.bstek.dorado.view.widget.base.GroupBox" sortFactor="2015" category="General" icon="/com/bstek/dorado/view/widget/base/GroupBox.png" clientTypes="desktop"></Rule><Rule name="FieldSet" parents="AbstractPanel" label="FieldSet" type="com.bstek.dorado.view.widget.base.FieldSet" sortFactor="2016" category="General" icon="/com/bstek/dorado/view/widget/base/FieldSet.png" clientTypes="desktop"></Rule><Rule name="IFrame" parents="com.bstek.dorado.view.widget.Control" label="IFrame" type="com.bstek.dorado.view.widget.base.IFrame" sortFactor="2017" category="General" icon="/com/bstek/dorado/view/widget/base/IFrame.png" clientTypes="desktop,touch"><Props> +<Prop name="name"/> +<Prop name="path"/></Props><ClientEvents> +<ClientEvent name="onLoad" parameters="self,arg"/></ClientEvents></Rule><Rule name="CardBook" parents="com.bstek.dorado.view.widget.Control" label="CardBook" type="com.bstek.dorado.view.widget.base.CardBook" sortFactor="2018" category="General" icon="/com/bstek/dorado/view/widget/base/CardBook.png" clientTypes="desktop,touch"><Props> +<Prop name="currentControl" deprecated="true" visible="false" type="int"/> +<Prop name="currentIndex" type="int"/> +<Prop name="dynaHeight" defaultValue="false" type="boolean"/></Props><ClientEvents> +<ClientEvent name="beforeCurrentChange" parameters="self,arg"/> +<ClientEvent name="onCurrentChange" parameters="self,arg"/></ClientEvents><Children><Child rule="com.bstek.dorado.view.widget.Control" name="Controls" aggregated="true"></Child></Children></Rule><Rule name="TabControl" parents="TabBar" label="TabControl" type="com.bstek.dorado.view.widget.base.tab.TabControl" sortFactor="2019" category="General" icon="/com/bstek/dorado/view/widget/base/tab/TabControl.png" clientTypes="desktop"><Props> +<Prop name="dynaHeight" defaultValue="false" type="boolean"/></Props><Children><Child rule="ControlTab" name="ControlTab" aggregated="true"></Child><Child rule="IFrameTab" name="IFrameTab" aggregated="true"></Child></Children></Rule><Rule name="VerticalTabControl" parents="TabColumn" label="VerticalTabControl" type="com.bstek.dorado.view.widget.base.tab.VerticalTabControl" sortFactor="2020" category="General" icon="/com/bstek/dorado/view/widget/base/tab/VerticalTabControl.png" clientTypes="desktop"><Props> +<Prop name="tabColumnWidth" defaultValue="200" type="int"/></Props><Children><Child rule="ControlTab" name="ControlTab" aggregated="true"></Child><Child rule="IFrameTab" name="IFrameTab" aggregated="true"></Child></Children></Rule><Rule name="TabBar" parents="AbstractTabControl" label="TabBar" type="com.bstek.dorado.view.widget.base.tab.TabBar" sortFactor="2021" category="General" icon="/com/bstek/dorado/view/widget/base/tab/TabBar.png" clientTypes="desktop"><Props> +<Prop name="showMenuButton" type="boolean"/> +<Prop name="tabMinWidth" type="int"/> +<Prop name="tabPlacement" defaultValue="top" enumValues="top,bottom"/></Props><Children><Child rule="Tab" name="Tab" aggregated="true" public="false"></Child></Children></Rule><Rule name="TabColumn" parents="AbstractTabControl" label="TabColumn" type="com.bstek.dorado.view.widget.base.tab.TabColumn" sortFactor="2022" category="General" icon="/com/bstek/dorado/view/widget/base/tab/TabColumn.png" clientTypes="desktop"><Props> +<Prop name="tabPlacement" defaultValue="left" enumValues="left,right"/> +<Prop name="verticalText" type="boolean"/></Props><Children><Child rule="Tab" name="Tab" aggregated="true" public="false"></Child></Children></Rule><Rule name="ToolBar" parents="com.bstek.dorado.view.widget.Control" label="ToolBar" type="com.bstek.dorado.view.widget.base.toolbar.ToolBar" sortFactor="2023" category="General" icon="/com/bstek/dorado/view/widget/base/toolbar/ToolBar.png" clientTypes="desktop"><Props> +<Prop name="fixRight" type="boolean"/> +<Prop name="height" visible="false"/> +<Prop name="showMenuOnHover" defaultValue="false" type="boolean"/></Props><Children><Child rule="com.bstek.dorado.view.widget.base.toolbar.Label" name="ToolBarLabel" aggregated="true"></Child><Child rule="Separator" name="Separator" aggregated="true"></Child><Child rule="Fill" name="Fill" aggregated="true"></Child><Child rule="com.bstek.dorado.view.widget.base.toolbar.Button" name="ToolBarButton" aggregated="true"></Child><Child rule="MenuButton" name="MenuButton" aggregated="true"></Child><Child rule="com.bstek.dorado.view.widget.Control" name="Items" aggregated="true"></Child></Children></Rule><Rule name="SplitPanel" parents="com.bstek.dorado.view.widget.Control" label="SplitPanel" type="com.bstek.dorado.view.widget.base.SplitPanel" sortFactor="2024" category="General" icon="/com/bstek/dorado/view/widget/base/SplitPanel.png" clientTypes="desktop"><Props> +<Prop name="animate" type="java.lang.Boolean"/> +<Prop name="collapseBothSide" defaultValue="false" type="boolean"/> +<Prop name="collapseable" defaultValue="true" type="boolean"/> +<Prop name="collapsed" type="boolean"/> +<Prop name="direction" defaultValue="left" highlight="1" enumValues="left,top,right,bottom"/> +<Prop name="maxPosition" type="int"/> +<Prop name="minPosition" type="int"/> +<Prop name="openPreviewOnHover" defaultValue="false" type="boolean"/> +<Prop name="position" defaultValue="100" highlight="1"/> +<Prop name="previewable" type="boolean"/> +<Prop name="resizeable" defaultValue="true" type="boolean"/></Props><ClientEvents> +<ClientEvent name="onCollapsedChange" parameters="self,arg"/> +<ClientEvent name="beforeCollapsedChange" parameters="self,arg"/></ClientEvents><Children><Child name="MainControl" fixed="true"><Rule name="Wrapper.MainControl" label="MainControl" nodeName="MainControl" icon="/com/bstek/dorado/view/widget/base/MainControl.png"><Children><Child rule="com.bstek.dorado.view.widget.Control" name="MainControl"></Child></Children></Rule></Child><Child name="SideControl" fixed="true"><Rule name="Wrapper.SideControl" label="SideControl" nodeName="SideControl" icon="/com/bstek/dorado/view/widget/base/SideControl.png"><Children><Child rule="com.bstek.dorado.view.widget.Control" name="SideControl"></Child></Children></Rule></Child></Children></Rule><Rule name="Accordion" parents="com.bstek.dorado.view.widget.Control" label="Accordion" type="com.bstek.dorado.view.widget.base.accordion.Accordion" sortFactor="2025" category="General" icon="/com/bstek/dorado/view/widget/base/accordion/Accordion.png" clientTypes="desktop"><Props> +<Prop name="animate" type="java.lang.Boolean"/> +<Prop name="currentSection" type="int"/> +<Prop name="dynaHeight" defaultValue="false" type="boolean"/></Props><ClientEvents> +<ClientEvent name="beforeCurrentSectionChange" parameters="self,arg"/> +<ClientEvent name="onCurrentSectionChange" parameters="self,arg"/></ClientEvents><Children><Child rule="Section" name="Sections" aggregated="true"></Child></Children></Rule><Rule name="Slider" parents="com.bstek.dorado.view.widget.Control" label="Slider" type="com.bstek.dorado.view.widget.base.Slider" sortFactor="2026" category="General" icon="/com/bstek/dorado/view/widget/base/Slider.png" clientTypes="desktop"><Props> +<Prop name="maxValue" defaultValue="100" type="float"/> +<Prop name="minValue" type="float"/> +<Prop name="orientation" defaultValue="horizental" enumValues="horizontal,horizontal,vertical"/> +<Prop name="precision" type="int"/> +<Prop name="step" type="float"/> +<Prop name="value" type="float"/></Props><ClientEvents> +<ClientEvent name="onValueChange" parameters="self,arg"/> +<ClientEvent name="beforeValueChange" parameters="self,arg"/></ClientEvents></Rule><Rule name="ProgressBar" parents="AbstractPropertyDataControl" label="ProgressBar" type="com.bstek.dorado.view.widget.base.ProgressBar" sortFactor="2027" category="General" icon="/com/bstek/dorado/view/widget/base/ProgressBar.png" clientTypes="desktop,touch"><Props> +<Prop name="effectEnable" type="boolean"/> +<Prop name="maxValue" defaultValue="100" type="float"/> +<Prop name="minValue" type="float"/> +<Prop name="showText" defaultValue="true" type="boolean"/> +<Prop name="textPattern" defaultValue="{percent}%"/> +<Prop name="value"/></Props></Rule><Rule name="Tip" parents="com.bstek.dorado.view.widget.Control,FloatControl" label="Tip" type="com.bstek.dorado.view.widget.base.Tip" sortFactor="2028" category="Floatable" icon="/com/bstek/dorado/view/widget/base/Tip.png" clientTypes="desktop,touch"><Props> +<Prop name="align" enumValues="left,innerleft,center,innerright,top" visible="false"/> +<Prop name="anchorTarget" visible="false"/> +<Prop name="animateTarget" visible="false"/> +<Prop name="animateType" defaultValue="fade" enumValues="zoom,modernZoom,flip,slide,safeSlide,modernSlide,fade,none"/> +<Prop name="arrowAlign" defaultValue="center" enumValues="center,top,right,bottom,left"/> +<Prop name="arrowDirection" defaultValue="none" enumValues="top,right,bottom,left,none"/> +<Prop name="arrowOffset" type="int"/> +<Prop name="autoAdjustPosition" defaultValue="true" type="boolean"/> +<Prop name="caption"/> +<Prop name="center" type="boolean"/> +<Prop name="closeable" type="boolean"/> +<Prop name="content" type="java.lang.Object"/> +<Prop name="continuedFocus" defaultValue="true" type="boolean"/> +<Prop name="floating" defaultValue="true" type="boolean"/> +<Prop name="floatingClassName"/> +<Prop name="focusAfterShow" defaultValue="false" type="boolean"/> +<Prop name="handleOverflow" defaultValue="true" visible="false" type="boolean"/> +<Prop name="hideAnimateType" enumValues="zoom,modernZoom,flip,slide,safeSlide,modernSlide,fade,none"/> +<Prop name="icon" enumValues="INFO,WARNING,ERROR,QUESTION"/> +<Prop name="left" type="int"/> +<Prop name="modal" type="boolean"/> +<Prop name="modalType" enumValues="dark,transparent"/> +<Prop name="offsetLeft" type="int"/> +<Prop name="offsetTop" type="int"/> +<Prop name="shadowMode" defaultValue="drop" enumValues="drop,sides,frame,none"/> +<Prop name="showAnimateType" enumValues="zoom,modernZoom,flip,slide,safeSlide,modernSlide,fade,none"/> +<Prop name="showDuration" type="int"/> +<Prop name="text" editor="multilines"/> +<Prop name="top" type="int"/> +<Prop name="vAlign" enumValues="top,innertop,center,innerbottom,bottom" visible="false"/> +<Prop name="visible" type="java.lang.Boolean"/></Props><ClientEvents> +<ClientEvent name="onClose" parameters="self,arg"/> +<ClientEvent name="onShow" parameters="self,arg"/> +<ClientEvent name="beforeHide" parameters="self,arg"/> +<ClientEvent name="beforeClose" parameters="self,arg"/> +<ClientEvent name="beforeShow" parameters="self,arg"/> +<ClientEvent name="onHide" parameters="self,arg"/></ClientEvents></Rule><Rule name="FloatContainer" parents="Container,FloatControl" label="FloatContainer" type="com.bstek.dorado.view.widget.base.FloatContainer" sortFactor="2029" category="Floatable" icon="/com/bstek/dorado/view/widget/base/FloatContainer.png" clientTypes="desktop,touch"><Props> +<Prop name="align" enumValues="left,innerleft,center,innerright,top" visible="false"/> +<Prop name="anchorTarget" visible="false"/> +<Prop name="animateTarget" visible="false"/> +<Prop name="animateType" defaultValue="zoom" enumValues="zoom,modernZoom,flip,slide,safeSlide,modernSlide,fade,none"/> +<Prop name="autoAdjustPosition" defaultValue="true" type="boolean"/> +<Prop name="center" type="boolean"/> +<Prop name="continuedFocus" defaultValue="true" type="boolean"/> +<Prop name="floating" defaultValue="true" type="boolean"/> +<Prop name="floatingClassName"/> +<Prop name="focusAfterShow" defaultValue="true" type="boolean"/> +<Prop name="handleOverflow" defaultValue="true" visible="false" type="boolean"/> +<Prop name="hideAnimateType" enumValues="zoom,modernZoom,flip,slide,safeSlide,modernSlide,fade,none"/> +<Prop name="left" type="int"/> +<Prop name="modal" type="boolean"/> +<Prop name="modalType" enumValues="dark,transparent"/> +<Prop name="offsetLeft" type="int"/> +<Prop name="offsetTop" type="int"/> +<Prop name="shadowMode" defaultValue="sides" enumValues="drop,sides,frame,none"/> +<Prop name="showAnimateType" enumValues="zoom,modernZoom,flip,slide,safeSlide,modernSlide,fade,none"/> +<Prop name="top" type="int"/> +<Prop name="vAlign" enumValues="top,innertop,center,innerbottom,bottom" visible="false"/> +<Prop name="visible" type="java.lang.Boolean"/></Props><ClientEvents> +<ClientEvent name="onClose" parameters="self,arg"/> +<ClientEvent name="onShow" parameters="self,arg"/> +<ClientEvent name="beforeHide" parameters="self,arg"/> +<ClientEvent name="beforeClose" parameters="self,arg"/> +<ClientEvent name="beforeShow" parameters="self,arg"/> +<ClientEvent name="onHide" parameters="self,arg"/></ClientEvents></Rule><Rule name="FloatPanel" parents="Panel,FloatControl" label="FloatPanel" type="com.bstek.dorado.view.widget.base.FloatPanel" sortFactor="2030" category="Floatable" icon="/com/bstek/dorado/view/widget/base/FloatPanel.png" clientTypes="desktop"><Props> +<Prop name="align" enumValues="left,innerleft,center,innerright,top" visible="false"/> +<Prop name="anchorTarget" visible="false"/> +<Prop name="animateTarget" visible="false"/> +<Prop name="animateType" defaultValue="zoom" enumValues="zoom,modernZoom,flip,slide,safeSlide,modernSlide,fade,none"/> +<Prop name="autoAdjustPosition" defaultValue="true" type="boolean"/> +<Prop name="center" highlight="1" type="boolean"/> +<Prop name="continuedFocus" defaultValue="true" type="boolean"/> +<Prop name="floating" defaultValue="true" type="boolean"/> +<Prop name="floatingClassName"/> +<Prop name="focusAfterShow" defaultValue="true" type="boolean"/> +<Prop name="handleOverflow" defaultValue="true" visible="false" type="boolean"/> +<Prop name="hideAnimateType" enumValues="zoom,modernZoom,flip,slide,safeSlide,modernSlide,fade,none"/> +<Prop name="left" type="int"/> +<Prop name="modal" highlight="1" type="boolean"/> +<Prop name="modalType" enumValues="dark,transparent"/> +<Prop name="offsetLeft" type="int"/> +<Prop name="offsetTop" type="int"/> +<Prop name="shadowMode" defaultValue="sides" enumValues="drop,sides,frame,none"/> +<Prop name="showAnimateType" enumValues="zoom,modernZoom,flip,slide,safeSlide,modernSlide,fade,none"/> +<Prop name="top" type="int"/> +<Prop name="vAlign" enumValues="top,innertop,center,innerbottom,bottom" visible="false"/> +<Prop name="visible" type="java.lang.Boolean"/></Props><ClientEvents> +<ClientEvent name="onClose" parameters="self,arg"/> +<ClientEvent name="onShow" parameters="self,arg"/> +<ClientEvent name="beforeHide" parameters="self,arg"/> +<ClientEvent name="beforeClose" parameters="self,arg"/> +<ClientEvent name="beforeShow" parameters="self,arg"/> +<ClientEvent name="onHide" parameters="self,arg"/></ClientEvents></Rule><Rule name="Dialog" parents="FloatPanel" label="Dialog" type="com.bstek.dorado.view.widget.base.Dialog" sortFactor="2031" category="Floatable" icon="/com/bstek/dorado/view/widget/base/Dialog.png" clientTypes="desktop"><Props> +<Prop name="center" defaultValue="true" type="boolean"/> +<Prop name="closeable" defaultValue="true" type="boolean"/> +<Prop name="dragOutside" type="boolean"/> +<Prop name="draggable" defaultValue="true" type="boolean"/> +<Prop name="maxHeight" type="int"/> +<Prop name="maxWidth" type="int"/> +<Prop name="minHeight" type="int"/> +<Prop name="minWidth" type="int"/> +<Prop name="minimizeable" type="boolean"/> +<Prop name="minimized" type="boolean"/> +<Prop name="modal" defaultValue="true" type="boolean"/> +<Prop name="resizeable" defaultValue="true" type="boolean"/> +<Prop name="shadowMode" defaultValue="frame" enumValues="drop,sides,frame,none"/></Props><ClientEvents> +<ClientEvent name="onMinimize" parameters="self,arg"/> +<ClientEvent name="beforeMinimize" parameters="self,arg"/></ClientEvents></Rule><Rule name="Menu" parents="com.bstek.dorado.view.widget.Control,FloatControl" label="Menu" type="com.bstek.dorado.view.widget.base.menu.Menu" sortFactor="2032" category="Floatable" icon="/com/bstek/dorado/view/widget/base/menu/Menu.png" autoGenerateId="true" clientTypes="desktop"><Props> +<Prop name="align" enumValues="left,innerleft,center,innerright,top" visible="false"/> +<Prop name="anchorTarget" visible="false"/> +<Prop name="animateTarget" visible="false"/> +<Prop name="animateType" defaultValue="zoom" enumValues="zoom,modernZoom,flip,slide,safeSlide,modernSlide,fade,none"/> +<Prop name="autoAdjustPosition" defaultValue="true" type="boolean"/> +<Prop name="center" type="boolean"/> +<Prop name="continuedFocus" defaultValue="true" type="boolean"/> +<Prop name="floating" defaultValue="true" type="boolean"/> +<Prop name="floatingClassName"/> +<Prop name="focusAfterShow" defaultValue="true" type="boolean"/> +<Prop name="handleOverflow" defaultValue="true" visible="false" type="boolean"/> +<Prop name="hideAnimateType" defaultValue="fade" enumValues="zoom,modernZoom,flip,slide,safeSlide,modernSlide,fade,none"/> +<Prop name="iconPosition" defaultValue="left" enumValues="left,top"/> +<Prop name="left" type="int"/> +<Prop name="modal" type="boolean"/> +<Prop name="modalType" enumValues="dark,transparent"/> +<Prop name="offsetLeft" type="int"/> +<Prop name="offsetTop" type="int"/> +<Prop name="shadowMode" defaultValue="sides" enumValues="drop,sides,frame,none"/> +<Prop name="showAnimateType" defaultValue="slide" enumValues="zoom,modernZoom,flip,slide,safeSlide,modernSlide,fade,none"/> +<Prop name="top" type="int"/> +<Prop name="vAlign" enumValues="top,innertop,center,innerbottom,bottom" visible="false"/> +<Prop name="visible" type="java.lang.Boolean"/></Props><ClientEvents> +<ClientEvent name="onClose" parameters="self,arg"/> +<ClientEvent name="onShow" parameters="self,arg"/> +<ClientEvent name="beforeHide" parameters="self,arg"/> +<ClientEvent name="beforeClose" parameters="self,arg"/> +<ClientEvent name="beforeShow" parameters="self,arg"/> +<ClientEvent name="onHide" parameters="self,arg"/> +<ClientEvent name="onHideTopMenu" parameters="self,arg"/></ClientEvents><Children><Child rule="BaseMenuItem" name="Items" aggregated="true"></Child></Children></Rule><Rule name="DatePicker" parents="com.bstek.dorado.view.widget.Control" label="DatePicker" nodeName="DatePicker" type="com.bstek.dorado.view.widget.base.DatePicker" sortFactor="2033" category="General" icon="/com/bstek/dorado/view/widget/base/DatePicker.png" clientTypes="desktop"><Props> +<Prop name="date" type="java.util.Date"/> +<Prop name="selectionMode" defaultValue="singleDate" enumValues="singleDate,multiDate"/> +<Prop name="showClearButton" defaultValue="true" type="boolean"/> +<Prop name="showConfirmButton" defaultValue="true" type="boolean"/> +<Prop name="showTimeSpinner" defaultValue="false" type="boolean"/> +<Prop name="showTodayButton" defaultValue="true" type="boolean"/> +<Prop name="yearMonthFormat"/></Props><ClientEvents> +<ClientEvent name="onFilterDate" parameters="self,arg"/> +<ClientEvent name="onClear" parameters="self,arg"/> +<ClientEvent name="onCancel" parameters="self,arg"/> +<ClientEvent name="onConfirm" parameters="self,arg"/> +<ClientEvent name="onRefreshDateCell" parameters="self,arg"/> +<ClientEvent name="onPick" parameters="self,arg"/></ClientEvents></Rule><Rule name="YearMonthPicker" parents="com.bstek.dorado.view.widget.Control" label="YearMonthPicker" nodeName="YearMonthPicker" type="com.bstek.dorado.view.widget.base.YearMonthPicker" sortFactor="2034" category="General" icon="/com/bstek/dorado/view/widget/base/YearMonthPicker.png" clientTypes="desktop"><Props> +<Prop name="month" type="int"/> +<Prop name="year" type="int"/></Props><ClientEvents> +<ClientEvent name="onPick" parameters="self,arg"/> +<ClientEvent name="onCancel" parameters="self,arg"/></ClientEvents></Rule><Rule name="Label" parents="AbstractPropertyDataControl" label="Label" type="com.bstek.dorado.view.widget.form.Label" sortFactor="2035" category="Form" icon="/com/bstek/dorado/view/widget/form/Label.png" clientTypes="desktop,touch"><Props> +<Prop name="text" highlight="1"/> +<Prop name="ui" enumValues="default,bold,h1,h2,h3"/></Props></Rule><Rule name="DataLabel" parents="AbstractPropertyDataControl" label="DataLabel" type="com.bstek.dorado.view.widget.form.DataLabel" sortFactor="2036" category="Form" icon="/com/bstek/dorado/view/widget/form/DataLabel.png" clientTypes="desktop,touch" deprecated="true"></Rule><Rule name="Link" parents="Label" label="Link" type="com.bstek.dorado.view.widget.form.Link" sortFactor="2037" category="Form" icon="/com/bstek/dorado/view/widget/form/Link.png" clientTypes="desktop,touch"><Props> +<Prop name="href"/> +<Prop name="target"/></Props></Rule><Rule name="Image" parents="AbstractPropertyDataControl" label="Image" type="com.bstek.dorado.view.widget.form.Image" sortFactor="2038" category="Form" icon="/com/bstek/dorado/view/widget/form/Image.png" clientTypes="desktop,touch"><Props> +<Prop name="blankImage"/> +<Prop name="image" highlight="1"/> +<Prop name="packMode" defaultValue="center" enumValues="start,center,end"/> +<Prop name="stretchMode" defaultValue="keepRatio" enumValues="fitWidth,fitHeight,keepRatio,fill,stretch,none"/></Props></Rule><Rule name="TemplateField" parents="AbstractDataControl" label="TemplateField" type="com.bstek.dorado.view.widget.form.TemplateField" sortFactor="2039" category="Form" icon="/com/bstek/dorado/view/widget/form/TemplateField.png" clientTypes="desktop,touch"><Props> +<Prop name="template" highlight="1" editor="multiLines"/></Props></Rule><Rule name="TextEditor" parents="AbstractTextEditor" label="TextEditor" type="com.bstek.dorado.view.widget.form.TextEditor" sortFactor="2040" category="Form" icon="/com/bstek/dorado/view/widget/form/TextEditor.png" clientTypes="desktop,touch"><Props> +<Prop name="dataType" type="com.bstek.dorado.data.type.DataType"/> +<Prop name="displayFormat"/><Prop name="mapping" type="com.bstek.dorado.data.type.property.Mapping" compositeType="Fixed"> +<Prop name="keyProperty"/> +<Prop name="mapValues" editor="collection[pojo]" type="java.lang.Object"/> +<Prop name="valueProperty"/></Prop> +<Prop name="password" visible="false" type="boolean"/> +<Prop name="typeFormat"/></Props></Rule><Rule name="PasswordEditor" parents="AbstractTextEditor" label="PasswordEditor" type="com.bstek.dorado.view.widget.form.PasswordEditor" sortFactor="2041" category="Form" icon="/com/bstek/dorado/view/widget/form/PasswordEditor.png" clientTypes="desktop,touch"></Rule><Rule name="TextArea" parents="AbstractTextEditor" label="TextArea" type="com.bstek.dorado.view.widget.form.TextArea" sortFactor="2042" category="Form" icon="/com/bstek/dorado/view/widget/form/TextArea.png" clientTypes="desktop,touch"><Props> +<Prop name="maxLength" type="int"/> +<Prop name="minLength" type="int"/> +<Prop name="required" type="boolean"/> +<Prop name="selectTextOnFocus" defaultValue="false" type="boolean"/> +<Prop name="text" editor="multiLines"/></Props></Rule><Rule name="CheckBox" parents="AbstractDataEditor" label="CheckBox" type="com.bstek.dorado.view.widget.form.CheckBox" sortFactor="2043" category="Form" icon="/com/bstek/dorado/view/widget/form/CheckBox.png" clientTypes="desktop,touch"><Props> +<Prop name="caption"/> +<Prop name="mixedValue" type="java.lang.Object"/> +<Prop name="offValue" defaultValue="false" type="java.lang.Object"/> +<Prop name="onValue" defaultValue="true" type="java.lang.Object"/> +<Prop name="triState" type="boolean"/> +<Prop name="value" defaultValue="false" type="java.lang.Object"/></Props><ClientEvents> +<ClientEvent name="onValueChange" parameters="self,arg"/></ClientEvents></Rule><Rule name="RadioGroup" parents="AbstractDataEditor" label="RadioGroup" type="com.bstek.dorado.view.widget.form.RadioGroup" sortFactor="2044" category="Form" icon="/com/bstek/dorado/view/widget/form/RadioGroup.png" clientTypes="desktop,touch"><Props> +<Prop name="columnCount" defaultValue="3" type="int"/> +<Prop name="layout" defaultValue="flow" enumValues="vertical,flow,grid"/> +<Prop name="value" type="java.lang.Object"/></Props><ClientEvents> +<ClientEvent name="onValueChange" parameters="self,arg"/></ClientEvents><Children><Child rule="RadioButton" name="RadioButtons" aggregated="true"></Child></Children></Rule><Rule name="DataMessage" parents="AbstractPropertyDataControl" label="DataMessage" type="com.bstek.dorado.view.widget.form.DataMessage" sortFactor="2045" category="Form" icon="/com/bstek/dorado/view/widget/form/DataMessage.png" clientTypes="desktop,touch"><Props> +<Prop name="showIconOnly" type="boolean"/> +<Prop name="showMultiMessage" type="boolean"/></Props></Rule><Rule name="FormProfile" parents="Component" label="FormProfile" type="com.bstek.dorado.view.widget.form.FormProfile" sortFactor="2046" category="Form" icon="/com/bstek/dorado/view/widget/form/FormProfile.png" clientTypes="desktop,touch"><Props> +<Prop name="className"/> +<Prop name="dataPath" highlight="1"/> +<Prop name="dataSet" highlight="1" reference="DataSet:id"/> +<Prop name="editorWidth" type="int"/> +<Prop name="exClassName"/> +<Prop name="height"/> +<Prop name="hintPosition" enumValues="right,bottom"/> +<Prop name="hintSpacing" type="int"/> +<Prop name="hintWidth" type="int"/> +<Prop name="labelAlign" defaultValue="left" enumValues="left,center,right"/> +<Prop name="labelPosition" defaultValue="left" enumValues="left,top"/> +<Prop name="labelSeparator"/> +<Prop name="labelSpacing" type="int"/> +<Prop name="labelWidth" type="int"/> +<Prop name="readOnly" type="boolean"/> +<Prop name="showHint" defaultValue="true" type="boolean"/> +<Prop name="showHintMessage" type="boolean"/> +<Prop name="showLabel" defaultValue="true" type="boolean"/> +<Prop name="trigger" enumValues="triggerClear,autoMappingDropDown1,autoMappingDropDown2,defaultDateDropDown,defaultDateTimeDropDown,defaultYearMonthDropDown,defaultYearDropDown,defaultMonthDropDown" reference="Trigger:id"/> +<Prop name="type" defaultValue="text" enumValues="text,password,textArea,checkBox,radioGroup"/> +<Prop name="ui"/> +<Prop name="width"/></Props></Rule><Rule name="FormElement" parents="com.bstek.dorado.view.widget.Control" label="FormElement" type="com.bstek.dorado.view.widget.form.FormElement" sortFactor="2047" category="Form" icon="/com/bstek/dorado/view/widget/form/FormElement.png" clientTypes="desktop,touch"><Props> +<Prop name="dataPath" highlight="1"/> +<Prop name="dataSet" highlight="1" reference="DataSet:id"/> +<Prop name="editable" defaultValue="true" type="boolean"/> +<Prop name="editorType" highlight="1" enumValues="TextEditor,PasswordEditor,TextArea,CheckBox,RadioGroup,Label,NumberSpinner"/> +<Prop name="editorWidth" type="int"/> +<Prop name="formProfile" reference="FormProfile:id"/> +<Prop name="hint"/> +<Prop name="hintPosition" defaultValue="right" enumValues="right,bottom"/> +<Prop name="hintSpacing" type="int"/> +<Prop name="hintWidth" type="int"/> +<Prop name="label" highlight="1"/> +<Prop name="labelAlign" defaultValue="left" enumValues="left,center,right"/> +<Prop name="labelPosition" defaultValue="left" enumValues="left,top"/> +<Prop name="labelSeparator"/> +<Prop name="labelSpacing" type="int"/> +<Prop name="labelWidth" type="int"/> +<Prop name="property" highlight="1"/> +<Prop name="readOnly" type="boolean"/> +<Prop name="showHint" defaultValue="true" type="boolean"/> +<Prop name="showHintMessage" type="boolean"/> +<Prop name="showLabel" defaultValue="true" type="boolean"/> +<Prop name="trigger" enumValues="triggerClear,autoMappingDropDown1,autoMappingDropDown2,autoOpenMappingDropDown1,autoOpenMappingDropDown2,defaultDateDropDown,defaultDateTimeDropDown,defaultYearMonthDropDown,defaultYearDropDown,defaultMonthDropDown" reference="Trigger:id"/> +<Prop name="type" enumValues="text,password,textArea,checkBox,radioGroup" visible="false"/></Props><ClientEvents> +<ClientEvent name="onGetBindingData" parameters="self,arg"/> +<ClientEvent name="onGetBindingDataType" parameters="self,arg"/></ClientEvents><Children><Child name="Editor" fixed="true"><Rule name="Wrapper.Editor" label="Editor" nodeName="Editor" icon="/com/bstek/dorado/view/widget/form/Editor.png"><Children><Child rule="com.bstek.dorado.view.widget.Control" name="Editor"></Child></Children></Rule></Child></Children></Rule><Rule name="AutoForm" parents="com.bstek.dorado.view.widget.Control" label="AutoForm" type="com.bstek.dorado.view.widget.form.autoform.AutoForm" sortFactor="2048" category="Form" icon="/com/bstek/dorado/view/widget/form/autoform/AutoForm.png" clientTypes="desktop,touch"><Props> +<Prop name="autoCreateElements" type="boolean"/> +<Prop name="colPadding" type="int"/> +<Prop name="cols" highlight="1"/> +<Prop name="createOwnEntity" defaultValue="true" type="boolean"/> +<Prop name="createPrivateDataSet" type="boolean"/> +<Prop name="dataPath" highlight="1"/> +<Prop name="dataSet" highlight="1" reference="DataSet:id"/> +<Prop name="dataType" type="com.bstek.dorado.data.type.EntityDataType"/> +<Prop name="editorWidth" type="int"/> +<Prop name="formProfile" reference="FormProfile:id"/> +<Prop name="hintPosition" enumValues="right,bottom"/> +<Prop name="hintSpacing" type="int"/> +<Prop name="hintWidth" type="int"/> +<Prop name="labelAlign" defaultValue="left" enumValues="left,center,right"/> +<Prop name="labelPosition" defaultValue="left" enumValues="left,top"/> +<Prop name="labelSeparator"/> +<Prop name="labelSpacing" type="int"/> +<Prop name="labelWidth" type="int"/> +<Prop name="padding" type="int"/> +<Prop name="readOnly" type="boolean"/> +<Prop name="rowHeight" type="int"/> +<Prop name="rowPadding" type="int"/> +<Prop name="showHint" defaultValue="true" type="boolean"/> +<Prop name="showHintMessage" type="boolean"/> +<Prop name="showLabel" defaultValue="true" type="boolean"/> +<Prop name="stretchWidth" type="boolean"/></Props><Children><Child rule="AutoFormElement" name="AutoFormElement" aggregated="true"></Child><Child rule="com.bstek.dorado.view.widget.Control" name="Elements" aggregated="true"></Child></Children></Rule><Rule name="NumberSpinner" parents="Spinner" label="NumberSpinner" type="com.bstek.dorado.view.widget.form.NumberSpinner" sortFactor="2049" category="Form" icon="/com/bstek/dorado/view/widget/form/NumberSpinner.png" clientTypes="desktop,touch"><Props> +<Prop name="max" defaultValue="2147483647" type="int"/> +<Prop name="min" defaultValue="-2147483648" type="int"/> +<Prop name="selectTextOnFocus" defaultValue="true" type="boolean"/></Props></Rule><Rule name="DateTimeSpinner" parents="Spinner" label="DateTimeSpinner" type="com.bstek.dorado.view.widget.form.DateTimeSpinner" sortFactor="2050" category="Form" icon="/com/bstek/dorado/view/widget/form/DateTimeSpinner.png" clientTypes="desktop,touch"><Props> +<Prop name="date" type="int"/> +<Prop name="hours" type="int"/> +<Prop name="minutes" type="int"/> +<Prop name="month" type="int"/> +<Prop name="seconds" type="int"/> +<Prop name="type" defaultValue="time" enumValues="date,time,dateTime,hours,minutes,dateHours,dateMinutes"/> +<Prop name="year" type="int"/></Props></Rule><Rule name="CustomSpinner" parents="Spinner" label="CustomSpinner" type="com.bstek.dorado.view.widget.form.CustomSpinner" sortFactor="2051" category="Form" icon="/com/bstek/dorado/view/widget/form/CustomSpinner.png" clientTypes="desktop,touch"><Props> +<Prop name="pattern" highlight="1"/> +<Prop name="text" visible="false"/> +<Prop name="value"/></Props></Rule><Rule name="Trigger" parents="Component" label="Trigger" type="com.bstek.dorado.view.widget.form.trigger.Trigger" sortFactor="2052" category="Trigger" icon="/com/bstek/dorado/view/widget/form/trigger/Trigger.png" autoGenerateId="true" clientTypes="desktop,touch"><Props> +<Prop name="buttonVisible" defaultValue="true" type="boolean"/> +<Prop name="editable" defaultValue="true" type="boolean"/> +<Prop name="icon"/> +<Prop name="iconClass" enumValues="d-trigger-icon-drop,d-trigger-icon-search,d-trigger-icon-date,d-trigger-icon-custom"/></Props><ClientEvents> +<ClientEvent name="onExecute" parameters="self,arg"/> +<ClientEvent name="beforeExecute" parameters="self,arg"/></ClientEvents></Rule><Rule name="ListDropDown" parents="RowListDropDown" label="ListDropDown" type="com.bstek.dorado.view.widget.form.trigger.ListDropDown" sortFactor="2053" category="Trigger" icon="/com/bstek/dorado/view/widget/form/trigger/ListDropDown.png" autoGenerateId="true" clientTypes="desktop"><Props> +<Prop name="items" highlight="1" editor="collection[any]" type="java.util.List"/></Props></Rule><Rule name="DataSetDropDown" parents="RowListDropDown" label="DataSetDropDown" type="com.bstek.dorado.view.widget.form.trigger.DataSetDropDown" sortFactor="2054" category="Trigger" icon="/com/bstek/dorado/view/widget/form/trigger/DataSetDropDown.png" autoGenerateId="true" clientTypes="desktop"><Props> +<Prop name="dataPath" highlight="1"/> +<Prop name="dataSet" highlight="1" reference="DataSet:id"/> +<Prop name="filterMode" defaultValue="serverSide" enumValues="clientSide,serverSide"/> +<Prop name="filterOnTyping" defaultValue="false" type="boolean"/> +<Prop name="property" highlight="1"/> +<Prop name="reloadDataOnOpen" type="boolean"/> +<Prop name="useDataBinding" defaultValue="true" type="boolean"/></Props><ClientEvents> +<ClientEvent name="onGetBindingData" parameters="self,arg"/> +<ClientEvent name="onSetFilterParameter" parameters="self,arg"/> +<ClientEvent name="onGetBindingDataType" parameters="self,arg"/></ClientEvents></Rule><Rule name="AutoMappingDropDown" parents="RowListDropDown" label="AutoMappingDropDown" type="com.bstek.dorado.view.widget.form.trigger.AutoMappingDropDown" sortFactor="2055" category="Trigger" icon="/com/bstek/dorado/view/widget/form/trigger/AutoMappingDropDown.png" autoGenerateId="true" clientTypes="desktop"><Props> +<Prop name="dynaFilter" defaultValue="true" type="boolean"/> +<Prop name="property" defaultValue="value"/></Props></Rule><Rule name="DateDropDown" parents="DropDown" label="DateDropDown" type="com.bstek.dorado.view.widget.form.trigger.DateDropDown" sortFactor="2056" category="Trigger" icon="/com/bstek/dorado/view/widget/form/trigger/DateDropDown.png" autoGenerateId="true" clientTypes="desktop"><Props> +<Prop name="selectionMode" defaultValue="singleDate" enumValues="singleDate,multiDate"/> +<Prop name="showConfirmButton" defaultValue="true" type="boolean"/> +<Prop name="showTimeSpinner" type="boolean"/> +<Prop name="showTodayButton" defaultValue="true" type="boolean"/></Props><ClientEvents> +<ClientEvent name="onRefreshDateCell" parameters="self,arg"/> +<ClientEvent name="onFilterDate" parameters="self,arg"/></ClientEvents></Rule><Rule name="YearMonthDropDown" parents="DropDown" label="YearMonthDropDown" type="com.bstek.dorado.view.widget.form.trigger.YearMonthDropDown" sortFactor="2057" category="Trigger" icon="/com/bstek/dorado/view/widget/form/trigger/YearMonthDropDown.png" autoGenerateId="true" clientTypes="desktop"></Rule><Rule name="YearDropDown" parents="DropDown" label="YearDropDown" type="com.bstek.dorado.view.widget.form.trigger.YearDropDown" sortFactor="2058" category="Trigger" icon="/com/bstek/dorado/view/widget/form/trigger/YearDropDown.png" autoGenerateId="true" clientTypes="desktop"></Rule><Rule name="MonthDropDown" parents="DropDown" label="MonthDropDown" type="com.bstek.dorado.view.widget.form.trigger.MonthDropDown" sortFactor="2059" category="Trigger" icon="/com/bstek/dorado/view/widget/form/trigger/MonthDropDown.png" autoGenerateId="true" clientTypes="desktop"></Rule><Rule name="CustomDropDown" parents="DropDown" label="CustomDropDown" type="com.bstek.dorado.view.widget.form.trigger.CustomDropDown" sortFactor="2060" category="Trigger" icon="/com/bstek/dorado/view/widget/form/trigger/CustomDropDown.png" autoGenerateId="true" clientTypes="desktop"><Children><Child rule="com.bstek.dorado.view.widget.Control" name="Control"></Child></Children></Rule><Rule name="DataPilot" parents="AbstractDataControl" label="DataPilot" type="com.bstek.dorado.view.widget.datacontrol.DataPilot" sortFactor="2061" category="General" icon="/com/bstek/dorado/view/widget/datacontrol/DataPilot.png" clientTypes="desktop"><Props> +<Prop name="height" visible="false"/> +<Prop name="itemCodes" highlight="1" enumValues="pages,|<,<,>,>|,goto,pageSize,info,+,-,x,|"/></Props><ClientEvents> +<ClientEvent name="onSubControlAction" parameters="self,arg"/> +<ClientEvent name="onSubControlRefresh" parameters="self,arg"/></ClientEvents></Rule><Rule name="ListBox" parents="AbstractListBox" label="ListBox" type="com.bstek.dorado.view.widget.list.ListBox" sortFactor="2062" category="Collection" icon="/com/bstek/dorado/view/widget/list/ListBox.png" clientTypes="desktop"><Props> +<Prop name="items" highlight="1" editor="collection[any]" type="java.util.List"/></Props></Rule><Rule name="DataListBox" parents="AbstractListBox" label="DataListBox" type="com.bstek.dorado.view.widget.list.DataListBox" sortFactor="2063" category="Collection" icon="/com/bstek/dorado/view/widget/list/DataListBox.png" clientTypes="desktop"><Props> +<Prop name="dataPath" highlight="1"/> +<Prop name="dataSet" highlight="1" reference="DataSet:id"/></Props><ClientEvents> +<ClientEvent name="onGetBindingData" parameters="self,arg"/> +<ClientEvent name="onGetBindingDataType" parameters="self,arg"/></ClientEvents></Rule><Rule name="Grid" parents="AbstractGrid" label="Grid" type="com.bstek.dorado.view.widget.grid.Grid" sortFactor="2064" category="Collection" icon="/com/bstek/dorado/view/widget/grid/Grid.png" clientTypes="desktop"><Props> +<Prop name="items" highlight="1" editor="collection[pojo]" type="java.util.List"/></Props></Rule><Rule name="DataGrid" parents="AbstractGrid" label="DataGrid" type="com.bstek.dorado.view.widget.grid.DataGrid" sortFactor="2065" category="Collection" icon="/com/bstek/dorado/view/widget/grid/DataGrid.png" clientTypes="desktop"><Props> +<Prop name="appendOnLastEnter" type="boolean"/> +<Prop name="autoCreateColumns" type="java.lang.Boolean"/> +<Prop name="dataPath" highlight="1"/> +<Prop name="dataSet" highlight="1" reference="DataSet:id"/> +<Prop name="dataType" deprecated="true" type="com.bstek.dorado.data.type.EntityDataType"/> +<Prop name="filterMode" defaultValue="clientSide" enumValues="clientSide,serverSide"/> +<Prop name="rowSelectionProperty"/> +<Prop name="sortMode" defaultValue="clientSide" enumValues="clientSide,serverSide"/> +<Prop name="supportsPaging" type="boolean"/></Props><ClientEvents> +<ClientEvent name="onGetBindingData" parameters="self,arg"/> +<ClientEvent name="onGetBindingDataType" parameters="self,arg"/></ClientEvents></Rule><Rule name="Tree" parents="AbstractTree" label="Tree" type="com.bstek.dorado.view.widget.tree.Tree" sortFactor="2066" category="Collection" icon="/com/bstek/dorado/view/widget/tree/Tree.png" clientTypes="desktop"><Children><Child rule="BaseNode" name="Nodes" aggregated="true"></Child></Children></Rule><Rule name="DataTree" parents="AbstractTree" label="DataTree" type="com.bstek.dorado.view.widget.tree.DataTree" sortFactor="2067" category="Collection" icon="/com/bstek/dorado/view/widget/tree/DataTree.png" clientTypes="desktop"><Props> +<Prop name="currentNodeDataPath"/> +<Prop name="dataPath" highlight="1"/> +<Prop name="dataSet" highlight="1" reference="DataSet:id"/></Props><ClientEvents> +<ClientEvent name="onDataNodeCreate" parameters="self,arg"/> +<ClientEvent name="onGetBindingDataType" parameters="self,arg"/> +<ClientEvent name="onGetBindingData" parameters="self,arg"/> +<ClientEvent name="beforeDataNodeCreate" parameters="self,arg"/></ClientEvents><Children><Child name="BindingConfigs" fixed="true"><Rule name="Wrapper.BindingConfigs" label="BindingConfigs" nodeName="BindingConfigs" icon="/com/bstek/dorado/view/widget/tree/BindingConfigs.png"><Children><Child rule="BindingConfig" name="BindingConfigs" aggregated="true"></Child></Children></Rule></Child></Children></Rule><Rule name="BlockView" parents="AbstractBlockView" label="BlockView" type="com.bstek.dorado.view.widget.blockview.BlockView" sortFactor="2068" category="Collection" icon="/com/bstek/dorado/view/widget/blockview/BlockView.png" clientTypes="desktop,touch"><Props> +<Prop name="items" highlight="1" editor="collection[any]" type="java.util.List"/></Props></Rule><Rule name="DataBlockView" parents="AbstractBlockView" label="DataBlockView" type="com.bstek.dorado.view.widget.blockview.DataBlockView" sortFactor="2069" category="Collection" icon="/com/bstek/dorado/view/widget/blockview/DataBlockView.png" clientTypes="desktop,touch"><Props> +<Prop name="dataPath" highlight="1"/> +<Prop name="dataSet" highlight="1" reference="DataSet:id"/></Props><ClientEvents> +<ClientEvent name="onGetBindingData" parameters="self,arg"/> +<ClientEvent name="onGetBindingDataType" parameters="self,arg"/></ClientEvents></Rule><Rule name="TreeGrid" parents="AbstractTreeGrid" label="TreeGrid" type="com.bstek.dorado.view.widget.treegrid.TreeGrid" sortFactor="2070" category="Collection" icon="/com/bstek/dorado/view/widget/treegrid/TreeGrid.png" clientTypes="desktop"><Children><Child name="Nodes" fixed="true"><Rule name="Wrapper.Nodes" label="Nodes" nodeName="Nodes" icon="/com/bstek/dorado/view/widget/treegrid/Nodes.png"><Children><Child rule="BaseNode" name="Nodes" aggregated="true"></Child></Children></Rule></Child></Children></Rule><Rule name="DataTreeGrid" parents="AbstractTreeGrid" label="DataTreeGrid" type="com.bstek.dorado.view.widget.treegrid.DataTreeGrid" sortFactor="2071" category="Collection" icon="/com/bstek/dorado/view/widget/treegrid/DataTreeGrid.png" clientTypes="desktop"><Props> +<Prop name="autoCreateColumns" type="java.lang.Boolean"/> +<Prop name="currentNodeDataPath"/> +<Prop name="dataPath" highlight="1"/> +<Prop name="dataSet" highlight="1" reference="DataSet:id"/> +<Prop name="dataType" type="com.bstek.dorado.data.type.EntityDataType"/></Props><ClientEvents> +<ClientEvent name="onDataNodeCreate" parameters="self,arg"/> +<ClientEvent name="onGetBindingDataType" parameters="self,arg"/> +<ClientEvent name="onGetBindingData" parameters="self,arg"/> +<ClientEvent name="beforeDataNodeCreate" parameters="self,arg"/></ClientEvents><Children><Child name="BindingConfigs" fixed="true"><Rule name="Wrapper.BindingConfigs" label="BindingConfigs" nodeName="BindingConfigs" icon="/com/bstek/dorado/view/widget/tree/BindingConfigs.png"><Children><Child rule="BindingConfig" name="BindingConfigs" aggregated="true"></Child></Children></Rule></Child></Children></Rule><Rule name="TagEditor" parents="AbstractTextEditor" label="TagEditor" type="com.bstek.dorado.view.widget.advance.TagEditor" sortFactor="2072" category="Form" icon="/com/bstek/dorado/view/widget/advance/TagEditor.png" clientTypes="desktop"><Props> +<Prop name="acceptUnknownTag" defaultValue="true" type="boolean"/> +<Prop name="availableTags" highlight="1" type="[Ljava.lang.String;"/> +<Prop name="availableTagsDataPath" highlight="1"/> +<Prop name="availableTagsDataSet" highlight="1" reference="DataSet:id"/> +<Prop name="highlightRequiredTags" defaultValue="true" type="boolean"/> +<Prop name="requiredTags" highlight="1" type="[Ljava.lang.String;"/> +<Prop name="showAvailableTags" defaultValue="true" type="boolean"/> +<Prop name="textSeperator" defaultValue=","/></Props><ClientEvents> +<ClientEvent name="beforeTagAdd" parameters="self,arg"/> +<ClientEvent name="beforeUnknownTagAccept" parameters="self,arg"/> +<ClientEvent name="onUnknownTagAccept" parameters="self,arg"/> +<ClientEvent name="onTagAdd" parameters="self,arg"/> +<ClientEvent name="beforeTagRemove" parameters="self,arg"/> +<ClientEvent name="onTagRemove" parameters="self,arg"/></ClientEvents></Rule><Rule name="ColorPicker" parents="com.bstek.dorado.view.widget.Control" label="ColorPicker" type="com.bstek.dorado.view.widget.advance.ColorPicker" sortFactor="2073" category="Form" icon="/com/bstek/dorado/view/widget/advance/ColorPicker.png" clientTypes="desktop"><Props> +<Prop name="allowEmpty" type="boolean"/> +<Prop name="color"/> +<Prop name="disabled" type="boolean"/> +<Prop name="palette" enumValues="#sixteen,#websafe,#named" type="[Ljava.lang.String;"/> +<Prop name="preferredFormat" enumValues="none,hex,hex6,hsl,rgb,name"/> +<Prop name="showAlpha" type="boolean"/> +<Prop name="showButtons" defaultValue="true" type="boolean"/> +<Prop name="showInitial" type="boolean"/> +<Prop name="showInput" type="boolean"/> +<Prop name="showPalette" type="boolean"/> +<Prop name="showPaletteOnly" type="boolean"/></Props></Rule><Rule name="ColorEditor" parents="AbstractDataEditor" label="ColorEditor" type="com.bstek.dorado.view.widget.advance.ColorEditor" sortFactor="2074" category="Form" icon="/com/bstek/dorado/view/widget/advance/ColorEditor.png" clientTypes="desktop"><Props> +<Prop name="allowEmpty" type="boolean"/> +<Prop name="color"/> +<Prop name="disabled" type="boolean"/> +<Prop name="palette" enumValues="#sixteen,#websafe,#named" type="[Ljava.lang.String;"/> +<Prop name="preferredFormat" defaultValue="name" enumValues="none,hex,hex6,hsl,rgb,name"/> +<Prop name="showAlpha" type="boolean"/> +<Prop name="showButtons" defaultValue="true" type="boolean"/> +<Prop name="showInitial" type="boolean"/> +<Prop name="showInput" type="boolean"/> +<Prop name="showPalette" type="boolean"/> +<Prop name="showPaletteOnly" type="boolean"/></Props></Rule><Rule name="UploadAction" parents="Action" label="UploadAction" type="com.bstek.dorado.uploader.widget.UploadAction" sortFactor="2075" category="Action" icon="/com/bstek/dorado/uploader/widget/UploadAction.png" autoGenerateId="true" clientTypes="desktop,touch"><Props> +<Prop name="autoUpload" defaultValue="true" type="boolean"/> +<Prop name="confirmMessage" visible="false"/> +<Prop name="fileResolver" highlight="1"/> +<Prop name="headers" editor="pojo" type="java.util.Map"/> +<Prop name="hotkey" visible="false"/> +<Prop name="maxFileSize" defaultValue="100MB"/> +<Prop name="runtimes" defaultValue="html5,flash,silverlight,gears,browserplus,html4" visible="false"/> +<Prop name="selectionMode" defaultValue="singleFile" enumValues="singleFile,multiFiles"/> +<Prop name="url" defaultValue=">dorado/uploader/fileupload" visible="false"/></Props><ClientEvents> +<ClientEvent name="beforeExecute" parameters="self,arg" deprecated="true"/> +<ClientEvent name="onStateChanged" parameters="self,arg"/> +<ClientEvent name="onError" parameters="self,arg"/> +<ClientEvent name="onRefresh" parameters="self,arg"/> +<ClientEvent name="onExecute" parameters="self,arg" deprecated="true"/> +<ClientEvent name="onChunkUploaded" parameters="self,arg"/> +<ClientEvent name="onFailure" parameters="self,arg" deprecated="true"/> +<ClientEvent name="beforeInit" parameters="self,arg"/> +<ClientEvent name="onFilesAdded" parameters="self,arg"/> +<ClientEvent name="onFilesRemoved" parameters="self,arg"/> +<ClientEvent name="onQueueChanged" parameters="self,arg"/> +<ClientEvent name="beforeFileUpload" parameters="self,arg"/> +<ClientEvent name="onInit" parameters="self,arg"/> +<ClientEvent name="beforeFileUploaded" parameters="self,arg"/> +<ClientEvent name="onUploadProgress" parameters="self,arg"/> +<ClientEvent name="onFileUploaded" parameters="self,arg"/> +<ClientEvent name="onUploadComplete" parameters="self,arg"/> +<ClientEvent name="onSuccess" parameters="self,arg" deprecated="true"/></ClientEvents><Children><Child name="Filters" fixed="true"><Rule name="Wrapper.Filters" label="Filters" nodeName="Filters"><Children><Child rule="Filter" name="Filters" aggregated="true"></Child></Children></Rule></Child></Children></Rule><Rule name="DownloadAction" parents="FormSubmitAction" label="DownloadAction" type="com.bstek.dorado.uploader.widget.DownloadAction" sortFactor="2076" category="Action" icon="/com/bstek/dorado/uploader/widget/DownloadAction.png" autoGenerateId="true" clientTypes="desktop,touch"><Props> +<Prop name="action" defaultValue=">dorado/uploader/filedownload" visible="false"/> +<Prop name="fileProvider" highlight="1"/> +<Prop name="inlineMode" defaultValue="off" enumValues="none,off,browser"/></Props></Rule><Rule name="AbstractViewElement" abstract="true" type="com.bstek.dorado.view.AbstractViewElement"><PrimitiveProps> +<Prop name="id" highlight="1"/></PrimitiveProps><Props> +<Prop name="ignored" type="boolean"/><Prop name="metaData" type="java.util.Map" compositeType="Open"></Prop> +<Prop name="tags"/> +<Prop name="userData" type="java.lang.Object"/></Props></Rule><Rule name="ClientEventSupportedElement" parents="AbstractViewElement" abstract="true" type="com.bstek.dorado.view.ClientEventSupportedElement"></Rule><Rule name="Component" parents="ClientEventSupportedElement" abstract="true" type="com.bstek.dorado.view.widget.Component" scope="protected"><PrimitiveProps> +<Prop name="listener"/></PrimitiveProps><Props> +<Prop name="userData" editor="any" type="java.lang.Object"/></Props><ClientEvents> +<ClientEvent name="onCreate" parameters="self,arg"/> +<ClientEvent name="onAttributeChange" parameters="self,arg"/> +<ClientEvent name="onDestroy" parameters="self,arg"/> +<ClientEvent name="onReady" parameters="self,arg"/></ClientEvents></Rule><Rule name="com.bstek.dorado.view.widget.Control" parents="Component" abstract="true" type="com.bstek.dorado.view.widget.Control" scope="protected" icon="/com/bstek/dorado/view/widget/Control.png" clientTypes="desktop"><PrimitiveProps> +<Prop name="listener"/></PrimitiveProps><Props> +<Prop name="className"/> +<Prop name="dragTags"/> +<Prop name="draggable" type="boolean"/> +<Prop name="droppable" type="boolean"/> +<Prop name="droppableTags"/> +<Prop name="exClassName"/> +<Prop name="height"/> +<Prop name="hideMode" defaultValue="visibility" enumValues="visibility,display"/> +<Prop name="layoutConstraint" type="java.lang.Object"/> +<Prop name="lazyInit" type="java.lang.Boolean"/> +<Prop name="renderOn"/> +<Prop name="renderTo"/><Prop name="style" type="java.util.Map" compositeType="Open"></Prop> +<Prop name="tip"/> +<Prop name="ui" defaultValue="default"/> +<Prop name="visible" type="java.lang.Boolean"/> +<Prop name="width"/></Props><ClientEvents> +<ClientEvent name="onKeyDown" parameters="self,arg"/> +<ClientEvent name="onClick" parameters="self,arg" clientTypes="desktop"/> +<ClientEvent name="onKeyPress" parameters="self,arg"/> +<ClientEvent name="beforeRefreshDom" parameters="self,arg"/> +<ClientEvent name="onRefreshDom" parameters="self,arg"/> +<ClientEvent name="onDragMove" parameters="self,arg"/> +<ClientEvent name="onSwipe" parameters="self,arg" clientTypes="touch"/> +<ClientEvent name="onDoubleClick" parameters="self,arg" clientTypes="desktop"/> +<ClientEvent name="onDraggingSourceOver" parameters="self,arg"/> +<ClientEvent name="onTap" parameters="self,arg" clientTypes="touch"/> +<ClientEvent name="onGetDraggingIndicator" parameters="self,arg"/> +<ClientEvent name="onDraggingSourceMove" parameters="self,arg"/> +<ClientEvent name="onCreateDom" parameters="self,arg"/> +<ClientEvent name="onDraggingSourceOut" parameters="self,arg"/> +<ClientEvent name="onDragStart" parameters="self,arg"/> +<ClientEvent name="onMouseDown" parameters="self,arg"/> +<ClientEvent name="onContextMenu" parameters="self,arg"/> +<ClientEvent name="beforeDraggingSourceDrop" parameters="self,arg"/> +<ClientEvent name="onTapHold" parameters="self,arg" clientTypes="touch"/> +<ClientEvent name="onDraggingSourceDrop" parameters="self,arg"/> +<ClientEvent name="onFocus" parameters="self,arg"/> +<ClientEvent name="onDoubleTap" parameters="self,arg" clientTypes="touch"/> +<ClientEvent name="onBlur" parameters="self,arg"/> +<ClientEvent name="onResize" parameters="self,arg"/> +<ClientEvent name="onDragStop" parameters="self,arg"/> +<ClientEvent name="onMouseUp" parameters="self,arg"/></ClientEvents></Rule><Rule name="AsyncAction" parents="Action" abstract="true" type="com.bstek.dorado.view.widget.action.AsyncAction" scope="protected"><Props> +<Prop name="async" defaultValue="true" type="boolean"/> +<Prop name="executingMessage"/> +<Prop name="modal" defaultValue="true" type="boolean"/></Props></Rule><Rule name="UpdateItem" label="UpdateItem" type="com.bstek.dorado.view.widget.action.UpdateItem" icon="/com/bstek/dorado/view/widget/action/UpdateItem.png"><Props> +<Prop name="alias"/> +<Prop name="autoResetEntityState" defaultValue="true" type="boolean"/> +<Prop name="dataPath" defaultValue="!DIRTY_TREE" enumValues="!DIRTY_TREE,!CASCADE_DIRTY,[#dirty],[#all],[#visible],[#current]"/> +<Prop name="dataSet" highlight="1" reference="DataSet:id"/> +<Prop name="firstResultOnly" type="boolean"/> +<Prop name="refreshMode" defaultValue="value" enumValues="none,state,value,cascade"/> +<Prop name="submitDeletedEntity" type="java.lang.Boolean"/> +<Prop name="submitOldData" type="boolean"/> +<Prop name="submitSimplePropertyOnly" type="boolean"/> +<Prop name="validateData" defaultValue="true" type="boolean"/></Props></Rule><Rule name="AbstractButton" parents="com.bstek.dorado.view.widget.Control" abstract="true" type="com.bstek.dorado.view.widget.base.AbstractButton" scope="protected" clientTypes="desktop"><Props> +<Prop name="action" highlight="1" reference="Action:id"/> +<Prop name="disabled" type="boolean"/> +<Prop name="menu" reference="Menu:id"/> +<Prop name="toggleOnShowMenu" defaultValue="true" type="boolean"/> +<Prop name="toggleable" type="boolean"/> +<Prop name="toggled" type="boolean"/></Props></Rule><Rule name="AbstractPanel" parents="Container" abstract="true" type="com.bstek.dorado.view.widget.base.AbstractPanel" scope="protected" clientTypes="desktop"><Props> +<Prop name="buttonAlign" defaultValue="center" enumValues="left,center,right"/> +<Prop name="caption"/> +<Prop name="collapseable" defaultValue="true" type="boolean"/> +<Prop name="collapsed" defaultValue="false" type="boolean"/> +<Prop name="lazyInitChildren" type="boolean"/></Props><ClientEvents> +<ClientEvent name="onCollapsedChange" parameters="self,arg"/> +<ClientEvent name="beforeCollapsedChange" parameters="self,arg"/></ClientEvents><Children><Child name="Buttons" fixed="true"><Rule name="Wrapper.Buttons" label="Buttons" nodeName="Buttons" icon="/com/bstek/dorado/view/widget/base/Buttons.png"><Children><Child rule="Button" name="Buttons" aggregated="true"></Child></Children></Rule></Child><Child name="Children" fixed="true"><Rule name="Wrapper.Children" label="Children" nodeName="Children" icon="/com/bstek/dorado/view/widget/base/Children.png"><Children><Child rule="Component" name="Children" aggregated="true"></Child></Children></Rule></Child></Children></Rule><Rule name="ControlTab" parents="Tab" label="ControlTab" type="com.bstek.dorado.view.widget.base.tab.ControlTab" scope="protected" icon="/com/bstek/dorado/view/widget/base/tab/ControlTab.png"><Children><Child rule="com.bstek.dorado.view.widget.Control" name="Control"></Child></Children></Rule><Rule name="Tab" parents="ClientEventSupportedElement" label="Tab" type="com.bstek.dorado.view.widget.base.tab.Tab" scope="protected" icon="/com/bstek/dorado/view/widget/base/tab/Tab.png"><Props> +<Prop name="caption" highlight="1"/> +<Prop name="className"/> +<Prop name="closeable" type="boolean"/> +<Prop name="disabled" type="boolean"/> +<Prop name="exClassName" deprecated="true"/> +<Prop name="height"/> +<Prop name="icon"/> +<Prop name="iconClass"/> +<Prop name="name"/><Prop name="style" type="java.util.Map" compositeType="Open"></Prop> +<Prop name="tip"/> +<Prop name="visible" defaultValue="true" type="boolean"/> +<Prop name="width"/></Props><ClientEvents> +<ClientEvent name="onClose" parameters="self,arg"/> +<ClientEvent name="onClick" parameters="self,arg"/> +<ClientEvent name="beforeClose" parameters="self,arg"/></ClientEvents></Rule><Rule name="IFrameTab" parents="Tab" label="IFrameTab" type="com.bstek.dorado.view.widget.base.tab.IFrameTab" scope="protected" icon="/com/bstek/dorado/view/widget/base/tab/IFrameTab.png"><Props> +<Prop name="iframeHeight" type="java.lang.Integer"/> +<Prop name="path" highlight="1"/></Props></Rule><Rule name="AbstractTabControl" parents="com.bstek.dorado.view.widget.Control" abstract="true" type="com.bstek.dorado.view.widget.base.tab.AbstractTabControl" scope="protected" clientTypes="desktop"><Props> +<Prop name="alwaysShowNavButtons" type="boolean"/> +<Prop name="currentTab" type="int"/></Props><ClientEvents> +<ClientEvent name="onTabContextMenu" parameters="self,arg"/> +<ClientEvent name="onTabChange" parameters="self,arg"/> +<ClientEvent name="onTabRemove" parameters="self,arg"/> +<ClientEvent name="beforeTabChange" parameters="self,arg"/></ClientEvents></Rule><Rule name="com.bstek.dorado.view.widget.base.toolbar.Label" parents="com.bstek.dorado.view.widget.Control" label="Label" nodeName="ToolBarLabel" type="com.bstek.dorado.view.widget.base.toolbar.Label" scope="protected" category="ToolBar" icon="/com/bstek/dorado/view/widget/base/toolbar/Label.png" clientTypes="desktop"><Props> +<Prop name="text"/></Props></Rule><Rule name="Separator" parents="com.bstek.dorado.view.widget.Control" label="Separator" type="com.bstek.dorado.view.widget.base.toolbar.Separator" scope="protected" category="ToolBar" icon="/com/bstek/dorado/view/widget/base/toolbar/Separator.png" clientTypes="desktop"></Rule><Rule name="Fill" parents="com.bstek.dorado.view.widget.Control" label="Fill" type="com.bstek.dorado.view.widget.base.toolbar.Fill" scope="protected" category="ToolBar" icon="/com/bstek/dorado/view/widget/base/toolbar/Fill.png" clientTypes="desktop"></Rule><Rule name="com.bstek.dorado.view.widget.base.toolbar.Button" parents="Button" label="ToolBarButton" nodeName="ToolBarButton" type="com.bstek.dorado.view.widget.base.toolbar.Button" scope="protected" category="ToolBar" icon="/com/bstek/dorado/view/widget/base/toolbar/Button.png" clientTypes="desktop"><Props> +<Prop name="hideMenuOnMouseLeave" type="boolean"/> +<Prop name="hideMenuOnMouseLeaveDelay" defaultValue="300" type="int"/> +<Prop name="showMenuOnHover" defaultValue="false" type="boolean"/></Props></Rule><Rule name="MenuButton" parents="Button" label="MenuButton" nodeName="MenuButton" type="com.bstek.dorado.view.widget.base.toolbar.MenuButton" scope="protected" category="ToolBar" icon="/com/bstek/dorado/view/widget/base/toolbar/MenuButton.png" clientTypes="desktop"><Props> +<Prop name="hideMenuOnMouseLeave" type="boolean"/> +<Prop name="hideMenuOnMouseLeaveDelay" defaultValue="300" type="int"/> +<Prop name="menu" deprecated="true" visible="false"/> +<Prop name="showMenuOnHover" defaultValue="false" type="boolean"/></Props><Children><Child rule="BaseMenuItem" name="Items" aggregated="true"></Child></Children></Rule><Rule name="BaseMenuItem" parents="ClientEventSupportedElement" abstract="true" type="com.bstek.dorado.view.widget.base.menu.BaseMenuItem"><Props> +<Prop name="className"/> +<Prop name="exClassName"/> +<Prop name="height"/> +<Prop name="name"/><Prop name="style" type="java.util.Map" compositeType="Open"></Prop> +<Prop name="tip"/> +<Prop name="visible" defaultValue="true" type="boolean"/> +<Prop name="width"/></Props></Rule><Rule name="CheckableMenuItem" parents="MenuItem" label="CheckableMenuItem" type="com.bstek.dorado.view.widget.base.menu.CheckableMenuItem" icon="/com/bstek/dorado/view/widget/base/menu/CheckableMenuItem.png" clientTypes="desktop"><Props> +<Prop name="checked" type="boolean"/> +<Prop name="group"/></Props><ClientEvents> +<ClientEvent name="onCheckedChange" parameters="self,arg"/></ClientEvents></Rule><Rule name="TextMenuItem" parents="BaseMenuItem" abstract="true" type="com.bstek.dorado.view.widget.base.menu.TextMenuItem"><Props> +<Prop name="action" reference="Action:id"/> +<Prop name="caption"/> +<Prop name="disabled" type="boolean"/> +<Prop name="hideOnClick" defaultValue="true" type="boolean"/> +<Prop name="icon"/> +<Prop name="iconClass"/></Props><ClientEvents> +<ClientEvent name="onClick" parameters="self,arg"/></ClientEvents></Rule><Rule name="MenuItem" parents="TextMenuItem" label="MenuItem" type="com.bstek.dorado.view.widget.base.menu.MenuItem" icon="/com/bstek/dorado/view/widget/base/menu/MenuItem.png" clientTypes="desktop"><Children><Child rule="BaseMenuItem" name="Items" aggregated="true"></Child></Children></Rule><Rule name="com.bstek.dorado.view.widget.base.menu.Separator" parents="BaseMenuItem" label="Separator" type="com.bstek.dorado.view.widget.base.menu.Separator" icon="/com/bstek/dorado/view/widget/base/menu/Separator.png" clientTypes="desktop,touch"></Rule><Rule name="ControlMenuItem" parents="TextMenuItem" label="ControlMenuItem" type="com.bstek.dorado.view.widget.base.menu.ControlMenuItem" icon="/com/bstek/dorado/view/widget/base/menu/ControlMenuItem.png" clientTypes="desktop"><Children><Child rule="FloatControl" name="Control"></Child></Children></Rule><Rule name="FloatControl" abstract="true" type="com.bstek.dorado.view.widget.FloatControl"><Props> +<Prop name="align" enumValues="left,innerleft,center,innerright,top" visible="false"/> +<Prop name="anchorTarget" visible="false"/> +<Prop name="animateTarget" visible="false"/> +<Prop name="animateType" enumValues="zoom,modernZoom,flip,slide,safeSlide,modernSlide,fade,none"/> +<Prop name="autoAdjustPosition" type="boolean"/> +<Prop name="center" type="boolean"/> +<Prop name="continuedFocus" type="boolean"/> +<Prop name="floating" type="boolean"/> +<Prop name="floatingClassName"/> +<Prop name="focusAfterShow" type="boolean"/> +<Prop name="handleOverflow" visible="false" type="boolean"/> +<Prop name="hideAnimateType" enumValues="zoom,modernZoom,flip,slide,safeSlide,modernSlide,fade,none"/> +<Prop name="left" type="int"/> +<Prop name="modal" type="boolean"/> +<Prop name="modalType" enumValues="dark,transparent"/> +<Prop name="offsetLeft" type="int"/> +<Prop name="offsetTop" type="int"/> +<Prop name="shadowMode" enumValues="drop,sides,frame,none"/> +<Prop name="showAnimateType" enumValues="zoom,modernZoom,flip,slide,safeSlide,modernSlide,fade,none"/> +<Prop name="top" type="int"/> +<Prop name="vAlign" enumValues="top,innertop,center,innerbottom,bottom" visible="false"/></Props></Rule><Rule name="Section" parents="ClientEventSupportedElement" label="Section" type="com.bstek.dorado.view.widget.base.accordion.Section" icon="/com/bstek/dorado/view/widget/base/accordion/Section.png"><Props> +<Prop name="caption"/> +<Prop name="className"/> +<Prop name="disabled" type="boolean"/> +<Prop name="exClassName"/> +<Prop name="icon"/> +<Prop name="iconClass"/> +<Prop name="name"/><Prop name="style" type="java.util.Map" compositeType="Open"></Prop> +<Prop name="tip"/> +<Prop name="visible" defaultValue="true" type="boolean"/></Props><ClientEvents> +<ClientEvent name="onCaptionClick" parameters="self,arg"/></ClientEvents><Children><Child rule="com.bstek.dorado.view.widget.Control" name="Control"></Child></Children></Rule><Rule name="AbstractDataControl" parents="com.bstek.dorado.view.widget.Control" abstract="true" type="com.bstek.dorado.view.widget.datacontrol.AbstractDataControl" scope="protected" clientTypes="desktop"><Props> +<Prop name="dataPath" highlight="1"/> +<Prop name="dataSet" highlight="1" reference="DataSet:id"/></Props><ClientEvents> +<ClientEvent name="onGetBindingData" parameters="self,arg"/> +<ClientEvent name="onGetBindingDataType" parameters="self,arg"/></ClientEvents></Rule><Rule name="AbstractPropertyDataControl" parents="AbstractDataControl" abstract="true" type="com.bstek.dorado.view.widget.datacontrol.AbstractPropertyDataControl" scope="protected" clientTypes="desktop"><Props> +<Prop name="property" highlight="1"/></Props><ClientEvents> +<ClientEvent name="onGetBindingData" parameters="self,arg"/> +<ClientEvent name="onGetBindingDataType" parameters="self,arg"/></ClientEvents></Rule><Rule name="AbstractEditor" parents="com.bstek.dorado.view.widget.Control" abstract="true" type="com.bstek.dorado.view.widget.form.AbstractEditor" scope="protected" clientTypes="desktop"><Props> +<Prop name="readOnly" type="boolean"/> +<Prop name="supportsDirtyFlag" defaultValue="true" type="boolean"/></Props><ClientEvents> +<ClientEvent name="onPost" parameters="self,arg"/> +<ClientEvent name="beforePost" parameters="self,arg"/> +<ClientEvent name="onPostFailed" parameters="self,arg"/></ClientEvents></Rule><Rule name="AbstractDataEditor" parents="AbstractEditor" abstract="true" type="com.bstek.dorado.view.widget.form.AbstractDataEditor" scope="protected" clientTypes="desktop"><Props> +<Prop name="dataPath" highlight="1"/> +<Prop name="dataSet" highlight="1" reference="DataSet:id"/> +<Prop name="property" highlight="1"/></Props><ClientEvents> +<ClientEvent name="onGetBindingData" parameters="self,arg"/> +<ClientEvent name="onGetBindingDataType" parameters="self,arg"/></ClientEvents></Rule><Rule name="AbstractTextBox" parents="AbstractDataEditor" abstract="true" type="com.bstek.dorado.view.widget.form.AbstractTextBox" scope="protected" clientTypes="desktop"><Props> +<Prop name="text"/> +<Prop name="trigger" enumValues="triggerClear,autoMappingDropDown1,autoMappingDropDown2,autoOpenMappingDropDown1,autoOpenMappingDropDown2,defaultDateDropDown,defaultDateTimeDropDown,defaultYearMonthDropDown,defaultYearDropDown,defaultMonthDropDown" reference="Trigger:id"/></Props><ClientEvents> +<ClientEvent name="onValidationStateChange" parameters="self,arg"/> +<ClientEvent name="onTriggerClick" parameters="self,arg"/> +<ClientEvent name="onTextEdit" parameters="self,arg"/></ClientEvents></Rule><Rule name="AbstractTextEditor" parents="AbstractTextBox" abstract="true" type="com.bstek.dorado.view.widget.form.AbstractTextEditor" scope="protected" clientTypes="desktop"><Props> +<Prop name="blankText"/> +<Prop name="editable" defaultValue="true" type="boolean"/> +<Prop name="maxLength" type="int"/> +<Prop name="minLength" type="int"/> +<Prop name="required" type="boolean"/> +<Prop name="selectTextOnFocus" defaultValue="true" type="boolean"/></Props></Rule><Rule name="RadioButton" label="RadioButton" type="com.bstek.dorado.view.widget.form.RadioButton" icon="/com/bstek/dorado/view/widget/form/RadioButton.png"><Props> +<Prop name="readOnly" type="boolean"/> +<Prop name="text"/> +<Prop name="value" type="java.lang.Object"/></Props></Rule><Rule name="AutoFormElement" parents="FormElement" label="AutoFormElement" type="com.bstek.dorado.view.widget.form.autoform.AutoFormElement" scope="protected" category="AutoForm" icon="/com/bstek/dorado/view/widget/form/autoform/AutoFormElement.png" labelProperty="id,name,property" clientTypes="desktop,touch"><Props> +<Prop name="name"/></Props></Rule><Rule name="Spinner" parents="AbstractTextBox" abstract="true" type="com.bstek.dorado.view.widget.form.Spinner" scope="protected" clientTypes="desktop"><Props> +<Prop name="postValueOnSpin" defaultValue="true" type="boolean"/> +<Prop name="showSpinTrigger" defaultValue="true" type="boolean"/> +<Prop name="step" defaultValue="1" type="int"/></Props></Rule><Rule name="DropDown" parents="Trigger" abstract="true" type="com.bstek.dorado.view.widget.form.trigger.DropDown" scope="protected"><Props> +<Prop name="assignmentMap"/> +<Prop name="autoOpen" type="boolean"/> +<Prop name="height" type="int"/> +<Prop name="maxHeight" type="int"/> +<Prop name="maxWidth" type="int"/> +<Prop name="minHeight" type="int"/> +<Prop name="minWidth" type="int"/> +<Prop name="postValueOnSelect" defaultValue="true" type="boolean"/> +<Prop name="width" type="int"/></Props><ClientEvents> +<ClientEvent name="onValueSelect" parameters="self,arg"/> +<ClientEvent name="onClose" parameters="self,arg"/> +<ClientEvent name="onOpen" parameters="self,arg"/></ClientEvents></Rule><Rule name="RowListDropDown" parents="DropDown" abstract="true" type="com.bstek.dorado.view.widget.form.trigger.RowListDropDown" scope="protected"><Props> +<Prop name="displayProperty"/> +<Prop name="dynaFilter" type="boolean"/> +<Prop name="filterOnOpen" type="boolean"/> +<Prop name="filterOnTyping" defaultValue="true" type="boolean"/> +<Prop name="minFilterInterval" defaultValue="300" type="int"/> +<Prop name="property" highlight="1"/> +<Prop name="useEmptyItem" type="boolean"/></Props><ClientEvents> +<ClientEvent name="onFilterItems" parameters="self,arg"/> +<ClientEvent name="onFilterItem" parameters="self,arg"/></ClientEvents><Children><Child rule="Column" name="Columns" aggregated="true"></Child></Children></Rule><Rule name="Column" parents="ClientEventSupportedElement" abstract="true" type="com.bstek.dorado.view.widget.grid.Column"><Props> +<Prop name="align" enumValues="left,center,right"/> +<Prop name="caption"/> +<Prop name="headerAlign" defaultValue="center" enumValues="left,center,right"/> +<Prop name="headerRenderer"/> +<Prop name="name"/> +<Prop name="supportsOptionMenu" defaultValue="true" type="boolean"/> +<Prop name="visible" defaultValue="true" type="boolean"/></Props><ClientEvents> +<ClientEvent name="onGetCellEditor" parameters="self,arg"/> +<ClientEvent name="onHeaderClick" parameters="self,arg"/> +<ClientEvent name="onRenderHeaderCell" parameters="self,arg"/></ClientEvents></Rule><Rule name="IndicatorColumn" parents="AbstractDataColumn" label="IndicatorColumn" type="com.bstek.dorado.view.widget.grid.IndicatorColumn" icon="/com/bstek/dorado/view/widget/grid/IndicatorColumn.png"></Rule><Rule name="AbstractDataColumn" parents="Column" abstract="true" type="com.bstek.dorado.view.widget.grid.AbstractDataColumn"><Props> +<Prop name="filterBarRenderer"/> +<Prop name="footerRenderer"/> +<Prop name="renderer"/> +<Prop name="resizeable" defaultValue="true" type="boolean"/> +<Prop name="width"/></Props><ClientEvents> +<ClientEvent name="onRenderFooterCell" parameters="self,arg"/> +<ClientEvent name="onRenderCell" parameters="self,arg"/></ClientEvents></Rule><Rule name="RowSelectorColumn" parents="AbstractDataColumn" label="RowSelectorColumn" type="com.bstek.dorado.view.widget.grid.RowSelectorColumn" icon="/com/bstek/dorado/view/widget/grid/RowSelectorColumn.png"></Rule><Rule name="DataColumn" parents="AbstractDataColumn" label="DataColumn" type="com.bstek.dorado.view.widget.grid.DataColumn" icon="/com/bstek/dorado/view/widget/grid/DataColumn.png" labelProperty="name,property"><Props> +<Prop name="align" enumValues="left,center,right"/> +<Prop name="dataType" type="com.bstek.dorado.data.type.DataType"/> +<Prop name="defaultFilterOperator"/> +<Prop name="displayFormat"/> +<Prop name="editable" defaultValue="true" type="boolean"/> +<Prop name="editorType" defaultValue="TextEditor" highlight="1" enumValues="None,TextEditor,PasswordEditor,TextArea,CheckBox,RadioGroup,NumberSpinner"/> +<Prop name="filterable" defaultValue="true" type="boolean"/> +<Prop name="property" highlight="1"/> +<Prop name="readOnly" type="boolean"/> +<Prop name="required" type="boolean"/> +<Prop name="sortState" defaultValue="none" enumValues="none,asc,desc"/> +<Prop name="summaryType" enumValues="sum,average,count,max,min"/> +<Prop name="trigger" enumValues="triggerClear,autoMappingDropDown1,autoMappingDropDown2,autoOpenMappingDropDown1,autoOpenMappingDropDown2,defaultDateDropDown,defaultDateTimeDropDown,defaultYearMonthDropDown,defaultYearDropDown,defaultMonthDropDown" reference="Trigger:id"/> +<Prop name="typeFormat"/> +<Prop name="wrappable" type="boolean"/></Props><Children><Child name="Editor" fixed="true"><Rule name="Wrapper.Editor" label="Editor" nodeName="Editor" icon="/com/bstek/dorado/view/widget/grid/Editor.png"><Children><Child rule="com.bstek.dorado.view.widget.Control" name="Editor"></Child></Children></Rule></Child></Children></Rule><Rule name="RowNumColumn" parents="AbstractDataColumn" label="RowNumColumn" type="com.bstek.dorado.view.widget.grid.RowNumColumn" icon="/com/bstek/dorado/view/widget/grid/RowNumColumn.png"></Rule><Rule name="ColumnGroup" parents="Column" label="ColumnGroup" type="com.bstek.dorado.view.widget.grid.ColumnGroup" icon="/com/bstek/dorado/view/widget/grid/ColumnGroup.png"><Props> +<Prop name="align" enumValues="left,center,right" visible="false"/></Props><Children><Child rule="Column" name="Columns" aggregated="true"></Child></Children></Rule><Rule name="AbstractList" parents="com.bstek.dorado.view.widget.Control" abstract="true" type="com.bstek.dorado.view.widget.list.AbstractList" scope="protected" clientTypes="desktop"><Props> +<Prop name="allowNoCurrent" type="boolean"/> +<Prop name="dragMode" defaultValue="item" enumValues="item,control,itemOrControl"/> +<Prop name="dropMode" defaultValue="insertItems" enumValues="onControl,onItem,insertItems,onOrInsertItems,onAnyWhere"/> +<Prop name="scrollMode" defaultValue="lazyRender" enumValues="simple,lazyRender,viewport"/> +<Prop name="selectionMode" defaultValue="none" enumValues="none,singleRow,multiRows"/> +<Prop name="useNativeScrollbars" type="boolean"/></Props><ClientEvents> +<ClientEvent name="onCompareItems" parameters="self,arg"/> +<ClientEvent name="onCurrentChange" parameters="self,arg"/> +<ClientEvent name="onFilterItem" parameters="self,arg"/> +<ClientEvent name="onSelectionChange" parameters="self,arg"/> +<ClientEvent name="beforeSelectionChange" parameters="self,arg"/></ClientEvents></Rule><Rule name="RowList" parents="AbstractList" abstract="true" type="com.bstek.dorado.view.widget.list.RowList" scope="protected" clientTypes="desktop"><Props> +<Prop name="highlightCurrentRow" defaultValue="true" type="boolean"/> +<Prop name="highlightHoverRow" defaultValue="true" type="boolean"/> +<Prop name="highlightSelectedRow" defaultValue="true" type="boolean"/> +<Prop name="rowHeight" type="int"/></Props><ClientEvents> +<ClientEvent name="onDataRowClick" parameters="self,arg"/> +<ClientEvent name="onDataRowDoubleClick" parameters="self,arg"/></ClientEvents></Rule><Rule name="AbstractListBox" parents="RowList" abstract="true" type="com.bstek.dorado.view.widget.list.AbstractListBox" scope="protected" clientTypes="desktop"><Props> +<Prop name="property"/> +<Prop name="renderer"/></Props><ClientEvents> +<ClientEvent name="onRenderRow" parameters="self,arg"/></ClientEvents></Rule><Rule name="GridSupport" parents="RowList" abstract="true" type="com.bstek.dorado.view.widget.grid.GridSupport" scope="protected" clientTypes="desktop"><Props> +<Prop name="cellRenderer"/> +<Prop name="dynaRowHeight" type="boolean"/> +<Prop name="fixedColumnCount" type="int"/> +<Prop name="footerRenderer"/> +<Prop name="footerRowHeight" type="int"/> +<Prop name="headerRenderer"/> +<Prop name="headerRowHeight" type="int"/> +<Prop name="readOnly" type="boolean"/> +<Prop name="rowRenderer"/> +<Prop name="showFooter" type="boolean"/> +<Prop name="showHeader" defaultValue="true" type="boolean"/> +<Prop name="stretchColumnsMode" defaultValue="auto" enumValues="auto,off,stretchableColumns,lastColumn,allColumns,allResizeableColumns"/></Props><ClientEvents> +<ClientEvent name="beforeCellValueEdit" parameters="self,arg"/> +<ClientEvent name="onGetCellEditor" parameters="self,arg"/> +<ClientEvent name="onRenderRow" parameters="self,arg"/> +<ClientEvent name="onRenderFooterCell" parameters="self,arg"/> +<ClientEvent name="onCellValueEdit" parameters="self,arg"/> +<ClientEvent name="onRenderCell" parameters="self,arg"/> +<ClientEvent name="onHeaderClick" parameters="self,arg"/> +<ClientEvent name="onRenderHeaderCell" parameters="self,arg"/></ClientEvents><Children><Child rule="Column" name="Columns" aggregated="true"></Child></Children></Rule><Rule name="AbstractGrid" parents="GridSupport" abstract="true" type="com.bstek.dorado.view.widget.grid.AbstractGrid" scope="protected" clientTypes="desktop"><Props> +<Prop name="filterBarRenderer"/> +<Prop name="groupFooterRenderer"/> +<Prop name="groupHeaderRenderer"/> +<Prop name="groupOnSort" defaultValue="true" type="boolean"/> +<Prop name="groupProperty"/> +<Prop name="showFilterBar" type="boolean"/> +<Prop name="showGroupFooter" type="boolean"/></Props></Rule><Rule name="AbstractTree" parents="RowList" abstract="true" type="com.bstek.dorado.view.widget.tree.AbstractTree" scope="protected" clientTypes="desktop"><Props> +<Prop name="defaultExpandedIcon"/> +<Prop name="defaultExpandedIconClass"/> +<Prop name="defaultIcon"/> +<Prop name="defaultIconClass"/> +<Prop name="dropMode" defaultValue="onItem" enumValues="onControl,onItem,insertItems,onOrInsertItems,onAnyWhere"/> +<Prop name="expandingAnimated" defaultValue="true" type="boolean"/> +<Prop name="expandingMode" defaultValue="async" enumValues="async,sync"/> +<Prop name="indent" type="int"/> +<Prop name="renderer"/> +<Prop name="scrollMode" enumValues="simple,lazyRender,viewport"/> +<Prop name="showLines" type="boolean"/></Props><ClientEvents> +<ClientEvent name="onRenderNode" parameters="self,arg"/> +<ClientEvent name="onCollapse" parameters="self,arg"/> +<ClientEvent name="onNodeAttached" parameters="self,arg"/> +<ClientEvent name="beforeNodeCheckedChange" parameters="self,arg"/> +<ClientEvent name="onExpand" parameters="self,arg"/> +<ClientEvent name="beforeCollapse" parameters="self,arg"/> +<ClientEvent name="beforeCurrentChange" parameters="self,arg"/> +<ClientEvent name="beforeExpand" parameters="self,arg"/> +<ClientEvent name="onNodeDetached" parameters="self,arg"/> +<ClientEvent name="onNodeCheckedChange" parameters="self,arg"/></ClientEvents></Rule><Rule name="BaseNode" abstract="true" type="com.bstek.dorado.view.widget.tree.BaseNode"><Props> +<Prop name="autoCheckChildren" defaultValue="true" type="boolean"/> +<Prop name="checkable" type="boolean"/> +<Prop name="checked" type="boolean"/> +<Prop name="data" type="java.lang.Object"/> +<Prop name="expanded" type="boolean"/> +<Prop name="expandedIcon"/> +<Prop name="expandedIconClass"/> +<Prop name="hasChild" type="boolean"/> +<Prop name="icon"/> +<Prop name="iconClass"/> +<Prop name="ignored" type="boolean"/> +<Prop name="label"/> +<Prop name="tags"/> +<Prop name="tip"/> +<Prop name="userData" type="java.lang.Object"/></Props><Children><Child rule="BaseNode" name="Nodes" aggregated="true"></Child></Children></Rule><Rule name="Node" parents="BaseNode" label="Node" type="com.bstek.dorado.view.widget.tree.Node" icon="/com/bstek/dorado/view/widget/tree/Node.png"><PrimitiveProps> +<Prop name="id" highlight="1"/></PrimitiveProps><Props><Prop name="metaData" type="java.util.Map" compositeType="Open"></Prop></Props></Rule><Rule name="BindingConfig" label="BindingConfig" type="com.bstek.dorado.view.widget.tree.BindingConfig" icon="/com/bstek/dorado/view/widget/tree/BindingConfig.png"><Props> +<Prop name="autoCheckChildren" defaultValue="true" type="boolean"/> +<Prop name="checkable" type="boolean"/> +<Prop name="checkedProperty"/> +<Prop name="childrenProperty"/> +<Prop name="expandLevel" type="int"/> +<Prop name="expandedIcon"/> +<Prop name="expandedIconClass"/> +<Prop name="expandedIconProperty"/> +<Prop name="hasChild" type="java.lang.Boolean"/> +<Prop name="hasChildProperty"/> +<Prop name="icon"/> +<Prop name="iconClass"/> +<Prop name="iconProperty"/> +<Prop name="ignored" type="boolean"/> +<Prop name="labelProperty"/> +<Prop name="name"/> +<Prop name="recursive" type="boolean"/> +<Prop name="tags"/> +<Prop name="tipProperty"/></Props><Children><Child rule="BindingConfig" name="ChildBindingConfigs" aggregated="true"></Child></Children></Rule><Rule name="AbstractBlockView" parents="AbstractList" abstract="true" type="com.bstek.dorado.view.widget.blockview.AbstractBlockView" scope="protected" clientTypes="desktop"><Props> +<Prop name="blockDecoratorSize" defaultValue="4" type="int"/> +<Prop name="blockHeight" defaultValue="80" type="int"/> +<Prop name="blockLayout" defaultValue="vertical" enumValues="vertical,horizontal"/> +<Prop name="blockWidth" defaultValue="80" type="int"/> +<Prop name="fillLine" type="boolean"/> +<Prop name="horiPadding" defaultValue="8" type="int"/> +<Prop name="horiSpacing" defaultValue="8" type="int"/> +<Prop name="lineSize" type="int"/> +<Prop name="renderer"/> +<Prop name="vertPadding" defaultValue="8" type="int"/> +<Prop name="vertSpacing" defaultValue="8" type="int"/></Props><ClientEvents> +<ClientEvent name="onBlockClick" parameters="self,arg" clientTypes="desktop"/> +<ClientEvent name="onBlockDoubleClick" parameters="self,arg" clientTypes="desktop"/> +<ClientEvent name="onRenderBlock" parameters="self,arg"/> +<ClientEvent name="onBlockTap" parameters="self,arg" clientTypes="touch"/> +<ClientEvent name="onBlockMouseDown" parameters="self,arg"/> +<ClientEvent name="onBlockMouseUp" parameters="self,arg"/> +<ClientEvent name="onBlockTapHold" parameters="self,arg" clientTypes="touch"/></ClientEvents></Rule><Rule name="AbstractTreeGrid" parents="GridSupport" abstract="true" type="com.bstek.dorado.view.widget.treegrid.AbstractTreeGrid" scope="protected" clientTypes="desktop"><Props> +<Prop name="defaultExpandedIcon"/> +<Prop name="defaultExpandedIconClass"/> +<Prop name="defaultIcon"/> +<Prop name="defaultIconClass"/> +<Prop name="dropMode" defaultValue="onItem" enumValues="onControl,onItem,insertItems,onOrInsertItems,onAnyWhere"/> +<Prop name="expandingAnimated" defaultValue="true" type="boolean"/> +<Prop name="expandingMode" defaultValue="async" enumValues="async,sync"/> +<Prop name="indent" type="int"/> +<Prop name="showLines" type="boolean"/> +<Prop name="treeColumn" highlight="1"/></Props><ClientEvents> +<ClientEvent name="onRenderNode" parameters="self,arg"/> +<ClientEvent name="onCollapse" parameters="self,arg"/> +<ClientEvent name="onNodeAttached" parameters="self,arg"/> +<ClientEvent name="beforeNodeCheckedChange" parameters="self,arg"/> +<ClientEvent name="onExpand" parameters="self,arg"/> +<ClientEvent name="beforeCollapse" parameters="self,arg"/> +<ClientEvent name="beforeExpand" parameters="self,arg"/> +<ClientEvent name="onNodeDetached" parameters="self,arg"/> +<ClientEvent name="onNodeCheckedChange" parameters="self,arg"/></ClientEvents><Children><Child name="Columns" fixed="true"><Rule name="Wrapper.Columns" label="Columns" nodeName="Columns" icon="/com/bstek/dorado/view/widget/treegrid/Columns.png"><Children><Child rule="Column" name="Columns" aggregated="true"></Child></Children></Rule></Child></Children></Rule><Rule name="Filter" label="Filter" type="com.bstek.dorado.uploader.widget.Filter" labelProperty="title"><Props> +<Prop name="extensions"/> +<Prop name="title"/></Props></Rule><Rule name="DefaultView" parents="View" label="View" nodeName="View" type="com.bstek.dorado.view.DefaultView" category="General" icon="/com/bstek/dorado/view/DefaultView.png" clientTypes="desktop"></Rule></RuleSet> \ No newline at end of file diff --git a/src/main/java/com/fzzy/api/data/AuthToken.java b/src/main/java/com/fzzy/api/data/AuthToken.java index 648a3b3..1649c39 100644 --- a/src/main/java/com/fzzy/api/data/AuthToken.java +++ b/src/main/java/com/fzzy/api/data/AuthToken.java @@ -24,6 +24,11 @@ */ private String JSESSIONID; + /** + * 鎴嚦鏈夋晥鏈� + */ + private long timeout; + public AuthToken() { super(); } diff --git a/src/main/java/com/fzzy/api/data/PushProtocol.java b/src/main/java/com/fzzy/api/data/PushProtocol.java index 5deaff2..b9bc2bd 100644 --- a/src/main/java/com/fzzy/api/data/PushProtocol.java +++ b/src/main/java/com/fzzy/api/data/PushProtocol.java @@ -18,7 +18,8 @@ SB_WHJL_2023("SB_WHJL_2023", "姝︽眽鍐涚伯骞冲彴2023鐗�"), HB_FZZY_JG_2022("HB_FZZY_JG_2022", "椋庢鑷磋繙鐩戠2022鐗堟湰"), SB_SHJdJW_2023("SB_SHJdJW_2023", "涓婃捣鍢夊畾绾鐩戠骞冲彴2023鐗�"), - SB_SH_2023("SB_SH_2023", "涓婃捣甯傚钩鍙�2023鐗�"); + SB_SH_2023("SB_SH_2023", "涓婃捣甯傚钩鍙�2023鐗�"), + GATEWAY_SC_2023("GATEWAY_SC_2023", "鍥涘窛鐪佺綉鍏冲崗璁�2023"); private String code; diff --git a/src/main/java/com/fzzy/conf/JpaConfigPrimary.java b/src/main/java/com/fzzy/conf/JpaConfigPrimary.java index d1fbdfe..245789c 100644 --- a/src/main/java/com/fzzy/conf/JpaConfigPrimary.java +++ b/src/main/java/com/fzzy/conf/JpaConfigPrimary.java @@ -20,7 +20,7 @@ @Configuration @EnableTransactionManagement @EnableJpaRepositories( - basePackages = {"com.fzzy.api.*.repository", "com.fzzy.sys.repository", "com.fzzy.otherview.*.repository"}, + basePackages = {"com.fzzy.api.*.repository", "com.fzzy.sys.repository", "com.fzzy.gateway.service.repository", "com.fzzy.otherview.*.repository"}, entityManagerFactoryRef = "primaryEntityManagerFactory", transactionManagerRef = "primaryTransactionManager" ) diff --git a/src/main/java/com/fzzy/gateway/GatewayRunner.java b/src/main/java/com/fzzy/gateway/GatewayRunner.java index b841244..a66c498 100644 --- a/src/main/java/com/fzzy/gateway/GatewayRunner.java +++ b/src/main/java/com/fzzy/gateway/GatewayRunner.java @@ -1,12 +1,12 @@ package com.fzzy.gateway; -import com.fzzy.api.service.ApiCommonService; -import com.fzzy.api.service.ApiTriggerService; -import com.fzzy.api.service.GbCheckItemService; + +import com.fzzy.gateway.sc2023.api.ApiInitService; import lombok.extern.slf4j.Slf4j; -import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.CommandLineRunner; import org.springframework.core.annotation.Order; import org.springframework.stereotype.Service; + +import javax.annotation.Resource; /** * 閰嶇疆闅忕郴缁熷惎鍔ㄩ粯璁ら厤缃� @@ -16,6 +16,9 @@ @Order(value = 2) public class GatewayRunner implements CommandLineRunner { + @Resource + private ApiInitService apiInitService; + @Override public void run(String... args) throws Exception { @@ -23,6 +26,7 @@ //鍥涘窛缃戝叧鎺ュ彛锛屽惎鍔ㄩ粯璁よ幏鍙栭壌鏉冧俊鎭紝闀挎湡鏈夋晥 + apiInitService.init(); } diff --git a/src/main/java/com/fzzy/gateway/data/GatewayParam.java b/src/main/java/com/fzzy/gateway/data/GatewayParam.java new file mode 100644 index 0000000..cbf8bed --- /dev/null +++ b/src/main/java/com/fzzy/gateway/data/GatewayParam.java @@ -0,0 +1,21 @@ +package com.fzzy.gateway.data; + +import lombok.Data; + +@Data +public class GatewayParam { + + + private String kqdm; + + private String deviceId; + + private String productId; + + private String username; + + private String password; + + private String token; + +} diff --git a/src/main/java/com/fzzy/gateway/data/GatewayResponse.java b/src/main/java/com/fzzy/gateway/data/GatewayResponse.java new file mode 100644 index 0000000..081ebfd --- /dev/null +++ b/src/main/java/com/fzzy/gateway/data/GatewayResponse.java @@ -0,0 +1,40 @@ +package com.fzzy.gateway.data; + +import lombok.Data; + +import java.io.Serializable; + + +@Data +public class GatewayResponse implements Serializable { + /** + * + */ + private static final long serialVersionUID = -6714158228489303453L; + /** + * 200 琛ㄧず鎴� + */ + public int code; + /** + * 璇存槑 + */ + public String message; + + /** + * status + */ + public int status; + + public int timestamp; + + public GatewayResult result; + + + public GatewayResponse() { + } + + public GatewayResponse(int code, String message) { + this.code = code; + this.message = message; + } +} diff --git a/src/main/java/com/fzzy/gateway/data/GatewayResult.java b/src/main/java/com/fzzy/gateway/data/GatewayResult.java new file mode 100644 index 0000000..2e56d29 --- /dev/null +++ b/src/main/java/com/fzzy/gateway/data/GatewayResult.java @@ -0,0 +1,12 @@ +package com.fzzy.gateway.data; + +import lombok.Data; + +import java.io.Serializable; + + +@Data +public class GatewayResult implements Serializable { + + public String token; +} diff --git a/src/main/java/com/fzzy/gateway/entity/GatewayConf.java b/src/main/java/com/fzzy/gateway/entity/GatewayConf.java index 8d14917..cec0d22 100644 --- a/src/main/java/com/fzzy/gateway/entity/GatewayConf.java +++ b/src/main/java/com/fzzy/gateway/entity/GatewayConf.java @@ -1,7 +1,6 @@ package com.fzzy.gateway.entity; import com.bstek.dorado.annotation.PropertyDef; -import com.fzzy.api.Constant; import lombok.Data; import javax.persistence.*; @@ -12,7 +11,7 @@ */ @Data @Entity -@Table(name = "G_CONF") +@Table(name = "G_GATEWAY_CONF") public class GatewayConf implements Serializable { /** @@ -55,6 +54,6 @@ @PropertyDef(label = "鏄惁涓婄嚎") @Column(name = "exe_tag", length = 2) - private String exeTag = Constant.YN_Y; + private String exeTag ="Y"; } diff --git a/src/main/java/com/fzzy/gateway/entity/GatewayDevice.java b/src/main/java/com/fzzy/gateway/entity/GatewayDevice.java new file mode 100644 index 0000000..77966f4 --- /dev/null +++ b/src/main/java/com/fzzy/gateway/entity/GatewayDevice.java @@ -0,0 +1,78 @@ +package com.fzzy.gateway.entity; + +import com.bstek.dorado.annotation.PropertyDef; +import lombok.Data; + +import javax.persistence.*; +import java.io.Serializable; + +/** + * 缃戝叧鐩稿叧鐨勮澶囩鐞� + * + * @author Andy + */ +@Data +@Entity +@Table(name = "G_GATEWAY_DEVICE") +public class GatewayDevice implements Serializable { + + private static final long serialVersionUID = 1L; + + @Id + @Column(name = "ID_", length = 40) + @PropertyDef(label = "绯荤粺ID") + private String id; + + @Column(name = "DeVICE_ID_", length = 100) + @PropertyDef(label = "璁惧ID") + private String deviceId; + + @Column(name = "DeVICE_NAME_", length = 50) + @PropertyDef(label = "鍚嶇О") + private String deviceName; + + @Column(name = "TYPE_", length = 10) + @PropertyDef(label = "璁惧绫诲瀷") + private String type; + + @Column(name = "DEPOT_ID_", length = 30) + @PropertyDef(label = "鎵�灞炰粨搴�") + private String depotId; + + @Column(name = "DEPOT_NAME_", length = 50) + @PropertyDef(label = "鎵�灞炰粨搴�") + private String depotName; + + @Column(name = "IP_", length = 20) + @PropertyDef(label = "閫氳IP") + private String ip; + + @Column(name = "PORT_") + @PropertyDef(label = "閫氳绔彛") + private Integer port; + + @Column(name = "RTSP_", length = 100) + @PropertyDef(label = "瑙嗛RTSP", description = "鐢ㄤ簬灞�鍩熺綉鍐呮姄鎷嶉厤缃�") + private String rtsp; + + @Column(name = "HTTP_URL_", length = 100) + @PropertyDef(label = "HTTP鍦板潃", description = "閽堝HTTP鐨勬帴鍙i厤缃�") + private String httpUrl; + + @PropertyDef(label = "涓婅鍗忚") + @Column(name = "pushProtocol", length = 20) + private String pushProtocol; + + @PropertyDef(label = "鍚屾鍗忚") + @Column(name = "syncProtocol", length = 20) + private String syncProtocol; + + @Column(name = "ORG_ID_", length = 40) + @PropertyDef(label = "缁勭粐缂栫爜") + private String orgId; + + @Column(name = "REMARK_", length = 200) + @PropertyDef(label = "澶囨敞", description = "澶囨敞淇℃伅") + private String remark; + +} diff --git a/src/main/java/com/fzzy/gateway/sc2023/ScConstant.java b/src/main/java/com/fzzy/gateway/sc2023/ScConstant.java index 1343dbb..97a1b94 100644 --- a/src/main/java/com/fzzy/gateway/sc2023/ScConstant.java +++ b/src/main/java/com/fzzy/gateway/sc2023/ScConstant.java @@ -1,15 +1,11 @@ package com.fzzy.gateway.sc2023; - -import java.util.HashMap; -import java.util.Map; - /** * 甯搁噺 */ public class ScConstant { + public static String API_URL_AUTH ="${auth}/authorize/login"; - public static Map<String,String> contextToken = new HashMap<>(); } diff --git a/src/main/java/com/fzzy/gateway/sc2023/api/ApiInitService.java b/src/main/java/com/fzzy/gateway/sc2023/api/ApiInitService.java index 0a7a50c..3f7d8e6 100644 --- a/src/main/java/com/fzzy/gateway/sc2023/api/ApiInitService.java +++ b/src/main/java/com/fzzy/gateway/sc2023/api/ApiInitService.java @@ -1,7 +1,12 @@ package com.fzzy.gateway.sc2023.api; +import com.fzzy.gateway.entity.GatewayConf; +import com.fzzy.gateway.service.GatewayConfService; import lombok.extern.slf4j.Slf4j; import org.springframework.stereotype.Component; + +import javax.annotation.Resource; +import java.util.List; /** * 褰撳墠鎺ュ彛锛屽垵濮嬪寲鐩稿叧 @@ -10,6 +15,26 @@ @Component public class ApiInitService { + @Resource + private GatewayConfService confService; + @Resource + private GatewayRemoteManager gatewayRemoteManager; + public void init() { + + List<GatewayConf> list = confService.listAll(); + + if (null == list || list.isEmpty()) { + return; + } + + GatewayRemoteService gatewayRemoteService; + for (GatewayConf gatewayConf : list) { + gatewayRemoteService = gatewayRemoteManager.getRemoteService(gatewayConf.getPushProtocol()); + gatewayRemoteService.authorize(gatewayConf); + } + + } + } diff --git a/src/main/java/com/fzzy/gateway/sc2023/api/GatewayRemoteManager.java b/src/main/java/com/fzzy/gateway/sc2023/api/GatewayRemoteManager.java new file mode 100644 index 0000000..b438d6a --- /dev/null +++ b/src/main/java/com/fzzy/gateway/sc2023/api/GatewayRemoteManager.java @@ -0,0 +1,37 @@ +package com.fzzy.gateway.sc2023.api; + +import org.springframework.beans.BeansException; +import org.springframework.context.ApplicationContext; +import org.springframework.context.ApplicationContextAware; +import org.springframework.stereotype.Component; + +import java.util.HashMap; +import java.util.Map; + + +@Component +public class GatewayRemoteManager implements ApplicationContextAware { + + public static Map<String, GatewayRemoteService> remoteMap1 = new HashMap<>(); + + @Override + public void setApplicationContext(ApplicationContext applicationContext) throws BeansException { + Map<String, GatewayRemoteService> serviceMap = applicationContext.getBeansOfType(GatewayRemoteService.class); + + for (String key : serviceMap.keySet()) { + remoteMap1.put(serviceMap.get(key).getProtocol(), serviceMap.get(key)); + } + } + + + /** + * 鏍规嵁瀹炵幇鍗忚鑾峰彇褰撳墠瀹炵幇鏂规硶 + * + * @param protocol + * @return + */ + public GatewayRemoteService getRemoteService(String protocol) { + return remoteMap1.get(protocol); + } + +} diff --git a/src/main/java/com/fzzy/gateway/sc2023/api/GatewayRemoteService.java b/src/main/java/com/fzzy/gateway/sc2023/api/GatewayRemoteService.java new file mode 100644 index 0000000..7583ee4 --- /dev/null +++ b/src/main/java/com/fzzy/gateway/sc2023/api/GatewayRemoteService.java @@ -0,0 +1,25 @@ +package com.fzzy.gateway.sc2023.api; + +import com.fzzy.gateway.data.GatewayResponse; +import com.fzzy.gateway.entity.GatewayConf; + + +public interface GatewayRemoteService { + + /** + * 鍗忚瀹氫箟 + * + * @return + */ + String getProtocol(); + + + /** + * 鏁版嵁鎺ㄩ�� + * + * @param conf 鍙傛暟 + */ + public GatewayResponse authorize(GatewayConf conf); + + +} diff --git a/src/main/java/com/fzzy/gateway/sc2023/api/ScGatewayRemoteService.java b/src/main/java/com/fzzy/gateway/sc2023/api/ScGatewayRemoteService.java new file mode 100644 index 0000000..f106c8c --- /dev/null +++ b/src/main/java/com/fzzy/gateway/sc2023/api/ScGatewayRemoteService.java @@ -0,0 +1,117 @@ +package com.fzzy.gateway.sc2023.api; + +import com.fzzy.api.data.AuthToken; +import com.fzzy.api.data.PushProtocol; +import com.fzzy.api.entity.ApiLog; +import com.fzzy.api.utils.ContextUtil; +import com.fzzy.api.utils.RedisConst; +import com.fzzy.api.utils.RedisUtil; +import com.fzzy.api.view.repository.ApiLogRep; +import com.fzzy.gateway.data.GatewayResponse; +import com.fzzy.gateway.entity.GatewayConf; +import com.fzzy.gateway.sc2023.ScConstant; +import com.fzzy.push.gb2022.HttpClientUtil; +import lombok.Data; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Service; + +import javax.annotation.Resource; +import java.util.HashMap; +import java.util.Map; + + +@Slf4j +@Data +@Service +public class ScGatewayRemoteService implements GatewayRemoteService { + + + @Resource + private ApiLogRep apiLogRep; + @Resource + private RedisUtil redisUtil; + + + @Override + public String getProtocol() { + return PushProtocol.GATEWAY_SC_2023.getCode(); + } + + @Override + public GatewayResponse authorize(GatewayConf conf) { + + //娣诲姞LOG + ApiLog apiLog = new ApiLog(); + apiLog.setData("閴存潈鎺ュ彛"); + apiLog.setId(ContextUtil.getUUID()); + apiLog.setKqdm(conf.getKqdm()); + + try { + + Map<String, Object> map = new HashMap<>(); + map.put("username", conf.getUserName()); + map.put("username", conf.getPassword()); + + log.debug("-----------------鏁版嵁鎶ユ枃----------------{}", map); + + + String url = conf.getApiUrl() + ScConstant.API_URL_AUTH; + + + GatewayResponse responseDto = HttpClientUtil.pushGateway(url, map); + apiLog.setStatus(responseDto.getStatus()); + apiLog.setResult(responseDto.getMessage()); + apiLogRep.save(apiLog); + + updateAuthToken(responseDto, conf); + + return responseDto; + } catch (Exception e) { + apiLog.setStatus(99); + apiLog.setResult("澶辫触锛�" + e.getMessage()); + apiLogRep.save(apiLog); + log.error(e.getMessage(), e); + return new GatewayResponse(99, e.getMessage()); + } + } + + /** + * @param kqdm + * @return + */ + public AuthToken getAuthToken(String kqdm) { + try { + String key = RedisConst.buildKey(RedisConst.KYE_TOKEN, kqdm); + + AuthToken token = (AuthToken) redisUtil.get(key); + + if (null == token) { + log.error("------------------鏈幏鍙栧埌TOKEN---------------"); + return null; + } + + return token; + } catch (Exception e) { + log.error(e.getMessage(), e); + return null; + } + } + + private void updateAuthToken(GatewayResponse dto, GatewayConf conf) { + String key = RedisConst.buildKey(RedisConst.KYE_TOKEN, conf.getKqdm()); + AuthToken token = getAuthToken(conf.getKqdm()); + + if (null == token) { + token = new AuthToken(); + token.setKqdm(conf.getKqdm()); + } + + if (null != dto.getResult()) { + token.setToken(dto.getResult().getToken()); + } + + redisUtil.set(key, token); + } + + +} diff --git a/src/main/java/com/fzzy/gateway/sc2023/websocket/WebSocketMqtt.java b/src/main/java/com/fzzy/gateway/sc2023/websocket/WebSocketMqtt.java index ddd20dd..7969203 100644 --- a/src/main/java/com/fzzy/gateway/sc2023/websocket/WebSocketMqtt.java +++ b/src/main/java/com/fzzy/gateway/sc2023/websocket/WebSocketMqtt.java @@ -1,13 +1,15 @@ package com.fzzy.gateway.sc2023.websocket; import lombok.extern.slf4j.Slf4j; + import org.springframework.stereotype.Component; import javax.websocket.*; import javax.websocket.server.PathParam; import javax.websocket.server.ServerEndpoint; + +import java.util.HashMap; import java.util.Map; -import java.util.concurrent.ConcurrentHashMap; /** * @@ -17,13 +19,13 @@ @ServerEndpoint(value = "/mqtt") public class WebSocketMqtt { - private static Map<String, Session> sessionPool = new ConcurrentHashMap<>(); + private static Map<String, Session> sessionPool = new HashMap<>(); // 涓庢煇涓鎴风鐨勮繛鎺ヤ細璇濓紝闇�瑕侀�氳繃瀹冩潵缁欏鎴风鍙戦�佹暟鎹� private Session session; - private String key; - + + @OnOpen public void onOpen(Session session, @PathParam("keepalive") String keepalive, diff --git a/src/main/java/com/fzzy/gateway/service/GatewayConfService.java b/src/main/java/com/fzzy/gateway/service/GatewayConfService.java new file mode 100644 index 0000000..68baebd --- /dev/null +++ b/src/main/java/com/fzzy/gateway/service/GatewayConfService.java @@ -0,0 +1,59 @@ +package com.fzzy.gateway.service; + +import com.bstek.dorado.annotation.DataProvider; +import com.bstek.dorado.annotation.DataResolver; +import com.bstek.dorado.annotation.Expose; +import com.fzzy.gateway.entity.GatewayConf; +import com.fzzy.gateway.service.repository.GatewayConfRep; +import org.springframework.beans.BeanUtils; +import org.springframework.stereotype.Component; + +import javax.annotation.Resource; +import java.util.List; + +@Component +public class GatewayConfService { + + @Resource + private GatewayConfRep gatewayConfRep; + + + /** + * gatewayConfService#listAll + * + * @return + */ + @DataProvider + public List<GatewayConf> listAll() { + + List<GatewayConf> list = gatewayConfRep.findAll(); + + return list; + } + + /** + * gatewayConfService#listAll#updateSave + * + * @param entity + */ + @DataResolver + public void updateSave(GatewayConf entity) { + GatewayConf data = new GatewayConf(); + BeanUtils.copyProperties(entity, data); + gatewayConfRep.save(data); + } + + /** + * gatewayConfService#delData + * + * @param data + */ + @Expose + public String delData(GatewayConf data) { + + GatewayConf data2 = new GatewayConf(); + BeanUtils.copyProperties(data, data2); + gatewayConfRep.delete(data2); + return null; + } +} diff --git a/src/main/java/com/fzzy/gateway/service/GatewayDeviceService.java b/src/main/java/com/fzzy/gateway/service/GatewayDeviceService.java new file mode 100644 index 0000000..e7a1784 --- /dev/null +++ b/src/main/java/com/fzzy/gateway/service/GatewayDeviceService.java @@ -0,0 +1,63 @@ +package com.fzzy.gateway.service; + +import com.bstek.dorado.annotation.DataProvider; +import com.bstek.dorado.annotation.DataResolver; +import com.bstek.dorado.annotation.Expose; +import com.fzzy.api.utils.ContextUtil; +import com.fzzy.gateway.entity.GatewayDevice; +import com.fzzy.gateway.service.repository.GatewayDeviceRep; +import org.springframework.beans.BeanUtils; +import org.springframework.stereotype.Component; + +import javax.annotation.Resource; +import java.util.List; + +@Component +public class GatewayDeviceService { + + @Resource + private GatewayDeviceRep gatewayDeviceRep; + + + /** + * gatewayDeviceService#listAll + * + * @return + */ + @DataProvider + public List<GatewayDevice> listAll() { + + List<GatewayDevice> list = gatewayDeviceRep.findAll(); + + return list; + } + + /** + * gatewayDeviceService#updateSave + * + * @param entity + */ + @DataResolver + public void updateSave(GatewayDevice entity) { + GatewayDevice data = new GatewayDevice(); + BeanUtils.copyProperties(entity, data); + + if (null == data.getId()) { + data.setId(ContextUtil.getUUID()); + } + gatewayDeviceRep.save(data); + } + + /** + * gatewayDeviceService#delData + * + * @param data + */ + @Expose + public String delData(GatewayDevice data) { + GatewayDevice data2 = new GatewayDevice(); + BeanUtils.copyProperties(data, data2); + gatewayDeviceRep.delete(data2); + return null; + } +} diff --git a/src/main/java/com/fzzy/gateway/service/repository/GatewayConfRep.java b/src/main/java/com/fzzy/gateway/service/repository/GatewayConfRep.java new file mode 100644 index 0000000..b8adc8a --- /dev/null +++ b/src/main/java/com/fzzy/gateway/service/repository/GatewayConfRep.java @@ -0,0 +1,16 @@ +package com.fzzy.gateway.service.repository; + +import com.fzzy.gateway.entity.GatewayConf; +import org.springframework.data.jpa.repository.JpaRepository; +import org.springframework.data.jpa.repository.Query; + +import java.util.List; + +public interface GatewayConfRep extends JpaRepository<GatewayConf, String> { + + /** + * @return + */ + @Query("from GatewayConf where 1=1 ") + List<GatewayConf> listAll(); +} diff --git a/src/main/java/com/fzzy/gateway/service/repository/GatewayDeviceRep.java b/src/main/java/com/fzzy/gateway/service/repository/GatewayDeviceRep.java new file mode 100644 index 0000000..fe4efb6 --- /dev/null +++ b/src/main/java/com/fzzy/gateway/service/repository/GatewayDeviceRep.java @@ -0,0 +1,17 @@ +package com.fzzy.gateway.service.repository; + +import com.fzzy.gateway.entity.GatewayDevice; +import org.springframework.data.jpa.repository.JpaRepository; +import org.springframework.data.jpa.repository.Query; +import org.springframework.data.repository.query.Param; + +import java.util.List; + +public interface GatewayDeviceRep extends JpaRepository<GatewayDevice, String> { + + /** + * @return + */ + @Query("from GatewayDevice where deviceId=:deviceId") + List<GatewayDevice> findByDeviceId(@Param("deviceId") String deviceId); +} diff --git a/src/main/java/com/fzzy/gateway/view/GatewayConf.view.xml b/src/main/java/com/fzzy/gateway/view/GatewayConf.view.xml new file mode 100644 index 0000000..ac6066d --- /dev/null +++ b/src/main/java/com/fzzy/gateway/view/GatewayConf.view.xml @@ -0,0 +1,243 @@ +<?xml version="1.0" encoding="UTF-8"?> +<ViewConfig> + <Arguments/> + <Context/> + <Model> + <DataType name="dtMain"> + <Property name="creationType">com.fzzy.gateway.entity.GatewayConf</Property> + <PropertyDef name="kqmc"> + <Property/> + <Property name="label">搴撳尯鍚嶇О</Property> + <Property name="required">true</Property> + </PropertyDef> + <PropertyDef name="kqdm"> + <Property/> + <Property name="label">搴撳尯浠g爜</Property> + <Property name="required">true</Property> + </PropertyDef> + <PropertyDef name="userName"> + <Property/> + <Property name="label">鐪佸钩鍙板笎鍙�</Property> + </PropertyDef> + <PropertyDef name="password"> + <Property/> + <Property name="label">鐪佸钩鍙板瘑鐮�</Property> + </PropertyDef> + <PropertyDef name="publicKey"> + <Property/> + <Property name="label">鐪佸钩鍙板叕閽�</Property> + </PropertyDef> + <PropertyDef name="apiUrl"> + <Property/> + <Property name="label">鐪佸钩鍙版帴鍙e湴鍧�</Property> + </PropertyDef> + <PropertyDef name="exeTag"> + <Property/> + <Property name="label">鏄惁鍚敤</Property> + </PropertyDef> + <PropertyDef name="pushProtocol"> + <Property></Property> + <Property name="label">涓婅鍗忚</Property> + <Property name="mapping"> + <Property name="mapValues">${dorado.getDataProvider("apiTriggerService#triggerPushProtocol").getResult()}</Property> + <Property name="keyProperty">code</Property> + <Property name="valueProperty">name</Property> + </Property> + <Property name="required">true</Property> + </PropertyDef> + <PropertyDef name="deptId"> + <Property/> + <Property name="label">绮簱绯荤粺涓簱鍖虹紪鐮�</Property> + </PropertyDef> + </DataType> + </Model> + <View layout="regionPadding:10"> + <Property name="packages">font-awesome,css-common</Property> + <DataSet id="dsMain"> + <Property name="dataType">[dtMain]</Property> + <Property name="dataProvider">gatewayConfService#listAll</Property> + </DataSet> + <ToolBar> + <ToolBarLabel> + <Property name="text">宸ュ叿鏍忥細</Property> + <Property name="style"> + <Property name="font-weight">bold</Property> + </Property> + </ToolBarLabel> + <ToolBarButton> + <ClientEvent name="onClick">view.get("#dsMain").insert();
 +view.get("#dialogMain").show();</ClientEvent> + <Property name="caption">鏂板</Property> + <Property name="iconClass">fa fa-plus</Property> + <Property name="width">90</Property> + <Property name="exClassName">toolbar-button</Property> + </ToolBarButton> + <ToolBarButton> + <ClientEvent name="onClick">view.get("#dsMain").flushAsync();
 +</ClientEvent> + <Property name="caption">鍒锋柊</Property> + <Property name="iconClass">fa fa-search</Property> + <Property name="width">100</Property> + <Property name="exClassName">toolbar-button-push</Property> + </ToolBarButton> + <ToolBarButton> + <ClientEvent name="onClick">var cur = view.get("#dgMain").getCurrentItem();
 +if(cur){
 + view.get("#dialogMain").show();
 +}else{
 + $alert("璇峰嬀閫夐渶瑕佷慨鏀圭殑鏁版嵁锛�");
 +}
 +</ClientEvent> + <Property name="caption">淇敼</Property> + <Property name="iconClass">fa fa-pencil</Property> + <Property name="width">90</Property> + <Property name="exClassName">toolbar-button-warm</Property> + </ToolBarButton> + <ToolBarButton> + <ClientEvent name="onClick">var cur = view.get("#dgMain").getCurrentItem();
 +view.get("#ajaxDel").set("parameter",cur).execute(function(result){
 + if(result){
 + $alert(result);
 + } else{
 + cur.remove();
 + }
 +});
 +</ClientEvent> + <Property name="caption">鍒犻櫎</Property> + <Property name="iconClass">fa fa-minus</Property> + <Property name="width">90</Property> + <Property name="exClassName">toolbar-button-warn</Property> + </ToolBarButton> + </ToolBar> + <DataGrid id="dgMain"> + <Property name="dataSet">dsMain</Property> + <Property name="selectionMode">multiRows</Property> + <Property name="readOnly">true</Property> + <RowNumColumn/> + <DataColumn name="kqmc"> + <Property name="property">kqmc</Property> + <Property name="align">center</Property> + <Property name="name">grade</Property> + <Property name="width">300</Property> + </DataColumn> + <DataColumn name="kqdm"> + <Property name="property">kqdm</Property> + <Property name="align">center</Property> + <Property name="name">grade</Property> + <Property name="width">200</Property> + </DataColumn> + <DataColumn name="userName"> + <Property name="property">userName</Property> + </DataColumn> + <DataColumn name="pushProtocol"> + <Property name="property">pushProtocol</Property> + </DataColumn> + <DataColumn name="exeTag"> + <Property name="property">exeTag</Property> + </DataColumn> + <DataColumn name="deptId"> + <Property name="property">deptId</Property> + </DataColumn> + </DataGrid> + <Dialog id="dialogMain"> + <Property name="width">1300</Property> + <Property name="caption">缃戝叧璁惧閰嶇疆</Property> + <Property name="iconClass">fa fa-sliders</Property> + <Property name="closeable">false</Property> + <Buttons> + <Button> + <ClientEvent name="onClick">var cur = view.get("#dgMain").getCurrentItem();
 +view.get("#updateSave").execute(function(){
 + self.get("parent").hide();
 +});</ClientEvent> + <Property name="caption">淇濆瓨淇敼</Property> + <Property name="iconClass">fa fa-check</Property> + <Property name="exClassName">toolbar-button</Property> + </Button> + <Button> + <ClientEvent name="onClick">var cur = view.get("#dgMain").getCurrentItem();
 +self.get("parent").hide();
 +if(cur) cur.cancel();</ClientEvent> + <Property name="caption">鍙栨秷淇敼</Property> + <Property name="iconClass">fa fa-times</Property> + <Property name="exClassName">toolbar-button-warn</Property> + </Button> + </Buttons> + <Children> + <Container layout="regionPadding:10;padding:10"> + <AutoForm> + <Property name="dataSet">dsMain</Property> + <Property name="cols">*,*,*</Property> + <Property name="labelWidth">125</Property> + <Property name="labelAlign">right</Property> + <Property name="labelSeparator">锛�</Property> + <Property name="labelPosition">left</Property> + <AutoFormElement layoutConstraint="colSpan:2"> + <Property name="name">kqmc</Property> + <Property name="property">kqmc</Property> + <Editor/> + </AutoFormElement> + <AutoFormElement> + <Property name="name">kqdm</Property> + <Property name="property">kqdm</Property> + <Editor/> + </AutoFormElement> + <AutoFormElement> + <Property name="name">userName</Property> + <Property name="property">userName</Property> + <Editor/> + </AutoFormElement> + <AutoFormElement> + <Property name="name">password</Property> + <Property name="property">password</Property> + <Property name="editorType">PasswordEditor</Property> + <Editor/> + </AutoFormElement> + <AutoFormElement> + <Property name="name">pushProtocol</Property> + <Property name="property">pushProtocol</Property> + <Editor/> + </AutoFormElement> + <AutoFormElement layoutConstraint="colSpan:2"> + <Property name="name">apiUrl</Property> + <Property name="property">apiUrl</Property> + <Editor/> + </AutoFormElement> + <AutoFormElement layoutConstraint="colSpan:2"> + <Property name="name">publicKey</Property> + <Property name="property">publicKey</Property> + <Editor/> + </AutoFormElement> + <AutoFormElement> + <Property name="name">exeTag</Property> + <Property name="property">exeTag</Property> + <Editor/> + </AutoFormElement> + <AutoFormElement layoutConstraint="colSpan:2"> + <Property name="name">deptId</Property> + <Property name="property">deptId</Property> + <Property name="labelWidth">160</Property> + <Editor/> + </AutoFormElement> + </AutoForm> + </Container> + </Children> + <Tools/> + </Dialog> + <UpdateAction id="updateSave"> + <Property name="dataResolver">gatewayConfService#updateSave</Property> + <UpdateItem> + <Property name="dataPath">[#current]</Property> + <Property name="dataSet">dsMain</Property> + </UpdateItem> + </UpdateAction> + <AjaxAction id="ajaxDel"> + <Property name="service">gatewayConfService#delData</Property> + <Property name="confirmMessage">纭畾瑕佸垹闄や箞锛�</Property> + </AjaxAction> + <AjaxAction id="ajaxPush"> + <Property name="service">gatewayConfService#pushData</Property> + <Property name="confirmMessage">纭畾瑕佷笂鎶ヤ箞锛�</Property> + </AjaxAction> + </View> +</ViewConfig> diff --git a/src/main/java/com/fzzy/gateway/view/GatewayDevice.view.xml b/src/main/java/com/fzzy/gateway/view/GatewayDevice.view.xml new file mode 100644 index 0000000..e4edcc9 --- /dev/null +++ b/src/main/java/com/fzzy/gateway/view/GatewayDevice.view.xml @@ -0,0 +1,265 @@ +<?xml version="1.0" encoding="UTF-8"?> +<ViewConfig> + <Arguments/> + <Context/> + <Model> + <DataType name="dtMain"> + <Property name="creationType">com.fzzy.gateway.entity.GatewayDevice</Property> + <PropertyDef name="id"> + <Property/> + <Property name="label">绯荤粺ID</Property> + </PropertyDef> + <PropertyDef name="deviceId"> + <Property/> + <Property name="label">璁惧ID</Property> + </PropertyDef> + <PropertyDef name="deviceName"> + <Property/> + <Property name="label">鍚嶇О</Property> + </PropertyDef> + <PropertyDef name="type"> + <Property/> + <Property name="label">璁惧绫诲瀷</Property> + </PropertyDef> + <PropertyDef name="depotId"> + <Property/> + <Property name="label">鎵�灞炰粨搴�</Property> + </PropertyDef> + <PropertyDef name="depotName"> + <Property/> + <Property name="label">鎵�灞炰粨搴�</Property> + </PropertyDef> + <PropertyDef name="ip"> + <Property/> + <Property name="label">閫氳IP</Property> + </PropertyDef> + <PropertyDef name="port"> + <Property name="dataType">Integer</Property> + <Property name="label">閫氳绔彛</Property> + </PropertyDef> + <PropertyDef name="rtsp"> + <Property/> + <Property name="label">瑙嗛RTSP</Property> + </PropertyDef> + <PropertyDef name="syncProtocol"> + <Property/> + <Property name="label">璁惧鍗忚</Property> + </PropertyDef> + <PropertyDef name="pushProtocol"> + <Property></Property> + <Property name="label">缃戝叧閫氳</Property> + <Property name="mapping"> + <Property name="mapValues">${dorado.getDataProvider("apiTriggerService#triggerPushProtocol").getResult()}</Property> + <Property name="keyProperty">code</Property> + <Property name="valueProperty">name</Property> + </Property> + <Property name="required">true</Property> + </PropertyDef> + <PropertyDef name="orgId"> + <Property/> + <Property name="label">缁勭粐缂栫爜</Property> + </PropertyDef> + <PropertyDef name="remark"> + <Property/> + <Property name="label">澶囨敞</Property> + </PropertyDef> + <PropertyDef name="httpUrl"> + <Property/> + <Property name="label">HTTP鍦板潃</Property> + </PropertyDef> + </DataType> + </Model> + <View layout="regionPadding:10"> + <Property name="packages">font-awesome,css-common</Property> + <DataSet id="dsMain"> + <Property name="dataType">[dtMain]</Property> + <Property name="dataProvider">gatewayDeviceService#listAll</Property> + </DataSet> + <ToolBar> + <ToolBarLabel> + <Property name="text">宸ュ叿鏍忥細</Property> + <Property name="style"> + <Property name="font-weight">bold</Property> + </Property> + </ToolBarLabel> + <ToolBarButton> + <ClientEvent name="onClick">view.get("#dsMain").insert();
 +view.get("#dialogMain").show();</ClientEvent> + <Property name="caption">鏂板</Property> + <Property name="iconClass">fa fa-plus</Property> + <Property name="width">90</Property> + <Property name="exClassName">toolbar-button</Property> + </ToolBarButton> + <ToolBarButton> + <ClientEvent name="onClick">view.get("#dsMain").flushAsync();
 +</ClientEvent> + <Property name="caption">鍒锋柊</Property> + <Property name="iconClass">fa fa-search</Property> + <Property name="width">100</Property> + <Property name="exClassName">toolbar-button-push</Property> + </ToolBarButton> + <ToolBarButton> + <ClientEvent name="onClick">var cur = view.get("#dgMain").getCurrentItem();
 +if(cur){
 + view.get("#dialogMain").show();
 +}else{
 + $alert("璇峰嬀閫夐渶瑕佷慨鏀圭殑鏁版嵁锛�");
 +}
 +</ClientEvent> + <Property name="caption">淇敼</Property> + <Property name="iconClass">fa fa-pencil</Property> + <Property name="width">90</Property> + <Property name="exClassName">toolbar-button-warm</Property> + </ToolBarButton> + <ToolBarButton> + <ClientEvent name="onClick">var cur = view.get("#dgMain").getCurrentItem();
 +view.get("#ajaxDel").set("parameter",cur).execute(function(result){
 + if(result){
 + $alert(result);
 + } else{
 + cur.remove();
 + }
 +});
 +</ClientEvent> + <Property name="caption">鍒犻櫎</Property> + <Property name="iconClass">fa fa-minus</Property> + <Property name="width">90</Property> + <Property name="exClassName">toolbar-button-warn</Property> + </ToolBarButton> + </ToolBar> + <DataGrid id="dgMain"> + <Property name="dataSet">dsMain</Property> + <Property name="selectionMode">multiRows</Property> + <Property name="readOnly">true</Property> + <RowNumColumn/> + <DataColumn name="deviceName"> + <Property name="property">deviceName</Property> + </DataColumn> + <DataColumn name="type"> + <Property name="property">type</Property> + </DataColumn> + <DataColumn name="depotName"> + <Property name="property">depotName</Property> + </DataColumn> + <DataColumn name="syncProtocol"> + <Property name="property">syncProtocol</Property> + </DataColumn> + <DataColumn name="pushProtocol"> + <Property name="property">pushProtocol</Property> + </DataColumn> + <DataColumn name="remark"> + <Property name="property">remark</Property> + </DataColumn> + </DataGrid> + <Dialog id="dialogMain"> + <Property name="width">1300</Property> + <Property name="caption">璁惧閰嶇疆</Property> + <Property name="iconClass">fa fa-sliders</Property> + <Property name="closeable">false</Property> + <Buttons> + <Button> + <ClientEvent name="onClick">var cur = view.get("#dgMain").getCurrentItem();
 +view.get("#updateSave").execute(function(){
 + self.get("parent").hide();
 +});</ClientEvent> + <Property name="caption">淇濆瓨淇敼</Property> + <Property name="iconClass">fa fa-check</Property> + <Property name="exClassName">toolbar-button</Property> + </Button> + <Button> + <ClientEvent name="onClick">var cur = view.get("#dgMain").getCurrentItem();
 +self.get("parent").hide();
 +if(cur) cur.cancel();</ClientEvent> + <Property name="caption">鍙栨秷淇敼</Property> + <Property name="iconClass">fa fa-times</Property> + <Property name="exClassName">toolbar-button-warn</Property> + </Button> + </Buttons> + <Children> + <Container layout="regionPadding:10;padding:10"> + <AutoForm> + <Property name="dataSet">dsMain</Property> + <Property name="cols">*,*,*</Property> + <Property name="labelWidth">100</Property> + <Property name="labelAlign">right</Property> + <Property name="labelSeparator">锛�</Property> + <Property name="labelPosition">left</Property> + <AutoFormElement> + <Property name="name">deviceId</Property> + <Property name="property">deviceId</Property> + <Editor/> + </AutoFormElement> + <AutoFormElement> + <Property name="name">deviceName</Property> + <Property name="property">deviceName</Property> + <Editor/> + </AutoFormElement> + <AutoFormElement> + <Property name="name">type</Property> + <Property name="property">type</Property> + <Editor/> + </AutoFormElement> + <AutoFormElement> + <Property name="name">depotId</Property> + <Property name="property">depotId</Property> + <Editor/> + </AutoFormElement> + <AutoFormElement> + <Property name="name">ip</Property> + <Property name="property">ip</Property> + <Editor/> + </AutoFormElement> + <AutoFormElement> + <Property name="name">port</Property> + <Property name="property">port</Property> + <Editor/> + </AutoFormElement> + <AutoFormElement> + <Property name="name">pushProtocol</Property> + <Property name="property">pushProtocol</Property> + <Editor/> + </AutoFormElement> + <AutoFormElement> + <Property name="name">syncProtocol</Property> + <Property name="property">syncProtocol</Property> + <Editor/> + </AutoFormElement> + <AutoFormElement> + <Property name="name">orgId</Property> + <Property name="property">orgId</Property> + <Editor/> + </AutoFormElement> + <AutoFormElement layoutConstraint="colSpan:2"> + <Property name="name">rtsp</Property> + <Property name="property">rtsp</Property> + <Editor/> + </AutoFormElement> + <AutoFormElement layoutConstraint="colSpan:2"> + <Property name="name">httpUrl</Property> + <Property name="property">httpUrl</Property> + <Editor/> + </AutoFormElement> + <AutoFormElement layoutConstraint="colSpan:3"> + <Property name="name">remark</Property> + <Property name="property">remark</Property> + <Property name="editorType">TextArea</Property> + <Editor/> + </AutoFormElement> + </AutoForm> + </Container> + </Children> + <Tools/> + </Dialog> + <UpdateAction id="updateSave"> + <Property name="dataResolver">gatewayDeviceService#updateSave</Property> + <UpdateItem> + <Property name="dataPath">[#current]</Property> + <Property name="dataSet">dsMain</Property> + </UpdateItem> + </UpdateAction> + <AjaxAction id="ajaxDel"> + <Property name="service">gatewayDeviceService#delData</Property> + <Property name="confirmMessage">纭畾瑕佸垹闄や箞锛�</Property> + </AjaxAction> + </View> +</ViewConfig> diff --git a/src/main/java/com/fzzy/push/gb2022/HttpClientUtil.java b/src/main/java/com/fzzy/push/gb2022/HttpClientUtil.java index b1484ff..f7fb25b 100644 --- a/src/main/java/com/fzzy/push/gb2022/HttpClientUtil.java +++ b/src/main/java/com/fzzy/push/gb2022/HttpClientUtil.java @@ -3,6 +3,7 @@ import com.alibaba.fastjson.JSON; import com.fzzy.api.dto.ResponseDto; +import com.fzzy.gateway.data.GatewayResponse; import lombok.extern.slf4j.Slf4j; import org.apache.commons.lang.StringUtils; @@ -21,14 +22,15 @@ /** * post formData + * * @param url * @param map * @return * @throws Exception */ @SuppressWarnings("resource") - public static ResponseDto postFormData(String url, Map<String, Object> map) throws Exception { - log.info("---------鎺ュ彛璇锋眰鍦板潃锛�" +url+ "----------鍙傛暟锛�" + JSON.toJSONString(map) +"---------"); + public static ResponseDto postFormData(String url, Map<String, Object> map) throws Exception { + log.info("---------鎺ュ彛璇锋眰鍦板潃锛�" + url + "----------鍙傛暟锛�" + JSON.toJSONString(map) + "---------"); BufferedReader in = null; URL urls = new URL(url); HttpURLConnection connection = null; @@ -47,10 +49,10 @@ connection.setConnectTimeout(20000); connection.setReadTimeout(30000); connection.setRequestMethod("POST"); - if(StringUtils.isNotEmpty(JSESSIONID)){ + if (StringUtils.isNotEmpty(JSESSIONID)) { // connection.setRequestProperty("Cookie", "JSESSIONID="+JSESSIONID); // connection.setRequestProperty(" Set-Cookies", JSESSIONID); - connection.setRequestProperty("Cookie", "JSESSIONID="+JSESSIONID); + connection.setRequestProperty("Cookie", "JSESSIONID=" + JSESSIONID); } map.remove("JSESSIONID"); @@ -76,7 +78,7 @@ // System.out.println(buffer.toString()); outputStream.write(buffer.toString().getBytes()); File file = (File) entry.getValue(); - DataInputStream ins = new DataInputStream(new FileInputStream(file)); + DataInputStream ins = new DataInputStream(new FileInputStream(file)); int bytes = 0; byte[] bufferOut = new byte[1024]; while ((bytes = ins.read(bufferOut)) != -1) { @@ -102,7 +104,7 @@ while ((line = in.readLine()) != null) { rs += line; } - }else{ + } else { log.error("http鐘舵�侊細" + connection.getResponseCode()); log.error("http娑堟伅锛�" + connection.getResponseMessage()); } @@ -110,7 +112,7 @@ String serverCookies = connection.getHeaderField("Set-Cookie"); log.info("serverCookies:" + serverCookies); - if(serverCookies != null) { + if (serverCookies != null) { String[] cookies = serverCookies.split(";"); @@ -128,19 +130,113 @@ } catch (Exception e) { System.out.println("鍙戠敓寮傚父"); - log.error(e.getMessage(),e); + log.error(e.getMessage(), e); rs = null; - return new ResponseDto(99,e.getMessage()); + return new ResponseDto(99, e.getMessage()); } - log.info("---------鎺ュ彛杩斿洖锛�" + rs +"---------"); - responseDto = JSON.parseObject(rs,ResponseDto.class); - if(responseDto == null ) return new ResponseDto(99,"鎺ュ彛璇锋眰鍙戠敓鏈煡閿欒"); + log.info("---------鎺ュ彛杩斿洖锛�" + rs + "---------"); + responseDto = JSON.parseObject(rs, ResponseDto.class); + if (responseDto == null) return new ResponseDto(99, "鎺ュ彛璇锋眰鍙戠敓鏈煡閿欒"); responseDto.setJSESSIONID(JSESSIONID); return responseDto; } finally { try { outputStream.close(); - if (in != null){ + if (in != null) { + in.close(); + } + } catch (Exception e) { + } + outputStream = null; + if (connection != null) + connection.disconnect(); + connection = null; + } + } + + + public static GatewayResponse pushGateway(String url, Map<String, Object> map) throws Exception { + log.info("---------鎺ュ彛璇锋眰鍦板潃锛�" + url + "----------鍙傛暟锛�" + JSON.toJSONString(map) + "---------"); + + BufferedReader in = null; + URL urls = new URL(url); + HttpURLConnection connection = null; + OutputStream outputStream = null; + String rs = ""; + GatewayResponse responseDto; + try { + connection = (HttpURLConnection) urls.openConnection(); + connection.setRequestProperty("Content-Type", "multipart/form-data; boundary=----footfoodapplicationrequestnetwork"); + connection.setDoOutput(true); + connection.setDoInput(true); + connection.setRequestProperty("Accept-Language", "zh-CN,zh;q=0.8"); + connection.setRequestProperty("Accept", "*/*"); + connection.setRequestProperty("Range", "bytes=" + ""); + connection.setConnectTimeout(20000); + connection.setReadTimeout(30000); + connection.setRequestMethod("POST"); + + StringBuffer buffer = new StringBuffer(); + outputStream = connection.getOutputStream(); + Set<Map.Entry<String, Object>> entries = map.entrySet(); + for (Map.Entry<String, Object> entry : entries) { + // 姣忔閮芥竻绌篵uffer锛岄伩鍏嶅啓鍏ヤ笂娆$殑鏁版嵁 + buffer.delete(0, buffer.length()); + buffer.append("------footfoodapplicationrequestnetwork\r\n"); + Object value = entry.getValue(); + if (!(value instanceof File)) { + buffer.append("Content-Disposition: form-data; name=\""); + buffer.append(entry.getKey()); + buffer.append("\"\r\n\r\n"); + buffer.append(entry.getValue()); + buffer.append("\r\n"); + outputStream.write(buffer.toString().getBytes()); + } else { + buffer.append("Content-Disposition: form-data; name=\"" + entry.getKey() + "\"; filename=\"" + ((File) entry.getValue()).getName() + "\"\r\n"); + buffer.append("Content-Type: " + "zip" + "\r\n\r\n"); + outputStream.write(buffer.toString().getBytes()); + File file = (File) entry.getValue(); + DataInputStream ins = new DataInputStream(new FileInputStream(file)); + int bytes = 0; + byte[] bufferOut = new byte[1024]; + while ((bytes = ins.read(bufferOut)) != -1) { + outputStream.write(bufferOut, 0, bytes); + } + // 鏂囦欢娴佸悗闈㈡坊鍔犳崲琛岋紝鍚﹀垯鏂囦欢鍚庨潰鐨勪竴涓弬鏁颁細涓㈠け + outputStream.write("\r\n".getBytes()); + } + } + if (entries != null && map.size() > 0) { + buffer.delete(0, buffer.length()); + buffer.append("------footfoodapplicationrequestnetwork--\r\n"); + } + outputStream.write(buffer.toString().getBytes()); + try { + connection.connect(); + if (connection.getResponseCode() == 200) { + in = new BufferedReader(new InputStreamReader(connection.getInputStream(), "UTF-8")); + String line = ""; + while ((line = in.readLine()) != null) { + rs += line; + } + } else { + log.error("http鐘舵�侊細" + connection.getResponseCode()); + log.error("http娑堟伅锛�" + connection.getResponseMessage()); + } + } catch (Exception e) { + System.out.println("鍙戠敓寮傚父"); + log.error(e.getMessage(), e); + rs = null; + return new GatewayResponse(99, e.getMessage()); + } + log.info("---------鎺ュ彛杩斿洖锛�" + rs + "---------"); + responseDto = JSON.parseObject(rs, GatewayResponse.class); + if (responseDto == null) return new GatewayResponse(99, "鎺ュ彛璇锋眰鍙戠敓鏈煡閿欒"); + return responseDto; + } finally { + try { + outputStream.close(); + if (in != null) { in.close(); } } catch (Exception e) { diff --git a/src/main/resources/dorado-home/configure.properties b/src/main/resources/dorado-home/configure.properties index 31694e4..20f4289 100644 --- a/src/main/resources/dorado-home/configure.properties +++ b/src/main/resources/dorado-home/configure.properties @@ -1,5 +1,5 @@ -#core.runMode=debug -core.runMode= +core.runMode=debug +#core.runMode= model.root=classpath*:models diff --git a/src/main/resources/templates/home/home-bak202310.html b/src/main/resources/templates/home/home-bak202310.html new file mode 100644 index 0000000..07636b2 --- /dev/null +++ b/src/main/resources/templates/home/home-bak202310.html @@ -0,0 +1,382 @@ +<!DOCTYPE html> +<html lang="zh-cn" xmlns:th=http://www.thymeleaf.org> +<head> + <meta charset="utf-8"> + <title>鐪佸钩鍙版帴鍙e鎺�</title> + <meta name="renderer" content="webkit"> + <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1"> + <meta name="viewport" + content="width=device-width, initial-scale=1.0, minimum-scale=1.0, maximum-scale=1.0, user-scalable=0"> + <link rel="stylesheet" th:href="@{/static/lib/layui/css/layui.css}" media="all"> + <link rel="stylesheet" th:href="@{/static/lib/layuiadmin/style/admin.css}" media="all"> + <link rel="stylesheet" th:href="@{/static/lib/layuiadmin/style/myhome.css}" media="all"> + +</head> + +<body class="layui-layout-body"> +<div id="LAY_app"> + <div class="layui-layout layui-layout-admin my-page"> + <div class="layui-header"> + + <!-- 澶撮儴鍖哄煙 --> + <ul class="layui-nav layui-layout-left m-menu"> + <li class="layui-nav-item layadmin-flexible" lay-unselect> + <a href="javascript:;" layadmin-event="flexible" title="渚ц竟浼哥缉"> + <i class="layui-icon layui-icon-shrink-right" id="LAY_app_flexible"></i> + </a> + </li> + </ul> + <ul class="layui-nav layui-layout-right" lay-filter="layadmin-layout-right"> + <li class="nav-btns"> + <li class="layui-nav-item" lay-unselect> + <a layadmin-event="message" lay-text="娑堟伅涓績"> + <img th:src="@{/static/lib/layuiadmin/style/images/icon6.png}" alt="" class="notice"> + <!-- 濡傛灉鏈夋柊娑堟伅锛屽垯鏄剧ず灏忓渾鐐� --> + <span class="badge-num">0</span> + </a> + </li> + + <li class="layui-nav-item" lay-unselect> + <a href="javascript:;" class="m-user"> + <div class="img" style="background-image: url('./static/images/user.png');"></div> + <!-- <div class="name">admin</div>--> + </a> + <dl class="layui-nav-child"> + <dd> + <a lay-href="#">鍩烘湰璧勬枡</a> + </dd> + <dd> + <a lay-href="#">淇敼瀵嗙爜</a> + </dd> + <hr> + <dd> + <a href="#" target="_self">閫�鍑�</a> + </dd> + </dl> + </li> + </ul> + + </div> + + <!-- 渚ц竟鑿滃崟 --> + <div class="layui-side layui-side-menu"> + <div class="layui-side-scroll"> + <div class="layui-logo m-logo"> + <img th:src="@{/static/images/logo2.png}"> + </div> + + <!-- 宸︿晶瀵艰埅--> + <ul class="layui-nav layui-nav-tree snv" lay-shrink="all" id="LAY-system-side-menu" + lay-filter="layadmin-system-side-menu"> + + <li data-name="home" class="layui-nav-item layui-nav-itemed"> + <a href="javascript:;" class="one" lay-tips="" lay-direction="2"> + <!-- <i class="layui-icon layui-icon-home"></i> --> + <div class="g-icon"> + <img th:src="@{/static/lib/layuiadmin/style/images/c-i1.png}"> + </div> + <cite>绯荤粺閰嶇疆</cite> + <span class="layui-nav-more"></span> + </a> + + <dl class="layui-nav-child"> + <dd class="layui-this"> + <a lay-href="com.fzzy.api.view.ApiList.d">鎺ュ彛鍒楄〃</a> + </dd> + <dd> + <a lay-href="com.fzzy.api.view.ApiConfs.d">鎺ュ彛閰嶇疆</a> + </dd> + <dd> + <a lay-href="com.fzzy.api.view.ApiLog.d">涓婁紶璁板綍</a> + </dd> + <dd> + <a lay-href="com.fzzy.api.view.ApiTrigger.d">瀛楀吀琛ㄩ厤缃�</a> + </dd> + <dd> + <a lay-href="com.fzzy.api.view.GbCheckItem.d">妫�楠岄」閰嶇疆</a> + </dd> + </dl> + </li> + + <li data-name="component" class="layui-nav-item"> + <a class="one" href="javascript:;" lay-tips="" lay-direction="2"> + <!-- <i class="layui-icon layui-icon-component"></i>--> + <div class="g-icon"> + <img th:src="@{/static/lib/layuiadmin/style/images/icon2.png}"> + </div> + <cite>鍩虹淇℃伅</cite> + <span class="layui-nav-more"></span> + </a> + <dl class="layui-nav-child"> + <dd> + <a lay-href="com.fzzy.api.view.Api1101.d">鍗曚綅淇℃伅</a> + </dd> + <dd> + <a lay-href="com.fzzy.api.view.Api1102.d">搴撳尯淇℃伅</a> + </dd> + <dd> + <a lay-href="com.fzzy.api.view.Api1103.d">浠撴埧淇℃伅</a> + </dd> + <dd> + <a lay-href="com.fzzy.api.view.Api1104.d">寤掗棿淇℃伅</a> + </dd> + <dd> + <a lay-href="com.fzzy.api.view.Api1105.d">璐т綅淇℃伅</a> + </dd> + <dd> + <a lay-href="com.fzzy.api.view.Api1106.d">娌圭綈淇℃伅</a> + </dd> + <dd> + <a lay-href="com.fzzy.api.view.Api1107.d">璁惧淇℃伅</a> + </dd> + <dd> + <a lay-href="com.fzzy.api.view.Api1108.d">鑽墏淇℃伅</a> + </dd> + <dd> + <a lay-href="com.fzzy.api.view.Api1109.d">鏂囦欢淇℃伅</a> + </dd> + <dd> + <a lay-href="com.fzzy.api.view.Api1110.d">搴撳尯鍥句粨鎴跨偣浣嶆爣娉�</a> + </dd> + <dd> + <a lay-href="com.fzzy.api.view.Api1111.d">搴撳尯鍥捐棰戠洃鎺ц澶囩偣浣嶆爣娉�</a> + </dd> + <dd> + <a lay-href="com.fzzy.api.view.Api1112.d">浜哄憳淇℃伅</a> + </dd> + <dd> + <a lay-href="com.fzzy.api.view.Api1113.d">浼佷笟淇$敤淇℃伅</a> + </dd> + <dd> + <a lay-href="com.fzzy.api.view.Api1501.d">璐㈠姟鎶ヨ〃-璧勪骇璐熷��</a> + </dd> + <dd> + <a lay-href="com.fzzy.api.view.Api1502.d">璐㈠姟鎶ヨ〃-鐜伴噾娴侀噺淇℃伅</a> + </dd> + <dd> + <a lay-href="com.fzzy.api.view.Api1503.d">璐㈠姟鎶ヨ〃-鍒╂鼎淇℃伅</a> + </dd> + </dl> + </li> + + <li data-name="template" class="layui-nav-item"><a class="one" + href="javascript:;" lay-tips="" + lay-direction="2"> + <div class="g-icon"> + <img th:src="@{/static/lib/layuiadmin/style/images/icon1.png}"> + </div> + <cite>绮璐攢</cite> + <span class="layui-nav-more"></span> + </a> + <dl class="layui-nav-child"> + <dd> + <a lay-href="com.fzzy.api.view.Api1201.d">鍚堝悓淇℃伅</a> + </dd> + <dd> + <a lay-href="com.fzzy.api.view.Api1202.d">绮鍏ュ簱淇℃伅</a> + </dd> + <dd> + <a lay-href="com.fzzy.api.view.Api1203.d">绮鍏ュ簱妫�楠屼俊鎭�</a> + </dd> + <dd> + <a lay-href="com.fzzy.api.view.Api1204.d">绮鍏ュ簱缁撶畻淇℃伅</a> + </dd> + <dd> + <a lay-href="com.fzzy.api.view.Api1205.d">绮鍑哄簱淇℃伅</a> + </dd> + <dd> + <a lay-href="com.fzzy.api.view.Api1206.d">绮鍑哄簱缁撶畻淇�</a> + </dd> + <dd> + <a lay-href="com.fzzy.api.view.Api1207.d">鍊掍粨淇℃伅</a> + </dd> + <dd> + <a lay-href="com.fzzy.api.view.Api1208.d">绮搴撳瓨</a> + </dd> + <dd> + <a lay-href="com.fzzy.api.view.Api1209.d">鎹熸孩鍗�</a> + </dd> + <dd> + <a lay-href="com.fzzy.api.view.Api1210.d">绮鎬ц川杞彉鍗�</a> + </dd> + <dd> + <a lay-href="com.fzzy.api.view.Api1211.d">璐﹂潰搴撳瓨</a> + </dd> + <dd> + <a lay-href="com.fzzy.api.view.Api1212.d">瀹㈡埛淇℃伅</a> + </dd> + </dl> + </li> + + <li data-name="template" class="layui-nav-item"> + <a class="one" href="javascript:;" lay-tips="" lay-direction="2"> + <!-- <i class="layui-icon layui-icon-template"></i>--> + <div class="g-icon"> + <img th:src="@{/static/lib/layuiadmin/style/images/icon4.png}"> + </div> + <cite>绮绠$悊</cite> + <span class="layui-nav-more"></span> + </a> + <dl class="layui-nav-child"> + <dd> + <a lay-href="com.fzzy.api.view.Api1301.d">瀹夊叏绠$悊</a> + </dd> + <dd> + <a lay-href="com.fzzy.api.view.Api1302.d">娓╂箍搴︽娴�</a> + </dd> + <dd> + <a lay-href="com.fzzy.api.view.Api1303.d">瀹宠櫕妫�娴�</a> + </dd> + <dd> + <a lay-href="com.fzzy.api.view.Api1304.d">姘斾綋妫�娴�</a> + </dd> + <dd> + <a lay-href="com.fzzy.api.view.Api1305.d">閫氶浣滀笟</a> + </dd> + <dd> + <a lay-href="com.fzzy.api.view.Api1306.d">鐔忚捀浣滀笟</a> + </dd> + <dd> + <a lay-href="com.fzzy.api.view.Api1307.d">浠撳唴瑙嗛鍥惧儚</a> + </dd> + <dd> + <a lay-href="com.fzzy.api.view.Api1308.d">瑙嗛鐩戞帶寮傚父浜嬩欢鍛婅鍩烘湰淇℃伅</a> + </dd> + <dd> + <a lay-href="com.fzzy.api.view.Api1309.d">杩濊棰勮淇℃伅</a> + </dd> + <dd> + <a lay-href="com.fzzy.api.view.Api1310.d">璐ㄦ鏁版嵁</a> + </dd> + </dl> + </li> + + + <li data-name="template" class="layui-nav-item"> + <a class="one" href="javascript:;" lay-tips="" lay-direction="2"> + <!-- <i class="layui-icon layui-icon-template"></i>--> + <div class="g-icon"> + <img th:src="@{/static/lib/layuiadmin/style/images/icon5.png}"> + </div> + <cite>琛屾斂绠$悊</cite> + <span class="layui-nav-more"></span> + </a> + <dl class="layui-nav-child"> + <dd> + <a lay-href="com.fzzy.api.view.Api1401.d">鍌ㄥ瑙勬ā鏁�</a> + </dd> + <dd> + <a lay-href="com.fzzy.api.view.Api1402.d">鍌ㄥ璁″垝淇℃伅</a> + </dd> + <dd> + <a lay-href="com.fzzy.api.view.Api1403.d">杞崲璁″垝淇℃伅</a> + </dd> + <dd> + <a lay-href="com.fzzy.api.view.Api1404.d">杞崲璁″垝鏄庣粏淇℃伅</a> + </dd> + <dd> + <a lay-href="com.fzzy.api.view.Api1405.d">椤圭洰淇℃伅</a> + </dd> + </dl> + </li> + + + <li data-name="template" class="layui-nav-item"> + <a class="one" href="javascript:;" lay-tips="" lay-direction="2"> + <div class="g-icon"> + <img th:src="@{/static/lib/layuiadmin/style/images/icon3.png}"> + </div> + <cite>鍏朵粬鎺ュ彛</cite> + <span class="layui-nav-more"></span> + </a> + <dl class="layui-nav-child"> + <dd> + <a lay-href="com.fzzy.otherview.gd2022.GdApi1023.d">骞夸笢-鐔忚捀澶囨</a> + </dd> + <dd> + <a lay-href="com.fzzy.otherview.sh2023.ShApi2101.d">涓婃捣-妫�鏂ゅ崟</a> + </dd> + <dd> + <a lay-href="com.fzzy.otherview.sh2023.ShApi2102.d">涓婃捣-鍊掍粨鍊掑叆</a> + </dd> + <dd> + <a lay-href="com.fzzy.otherview.sh2023.ShApi2103.d">涓婃捣-绮儏璁惧閰嶇疆</a> + </dd> + <dd> + <a lay-href="com.fzzy.otherview.sh2023.ShApi2104.d">涓婃捣-甯傚偍椹宠繍鍗�</a> + </dd> + <dd> + <a lay-href="com.fzzy.otherview.sh2023.ShApi2203.d">涓婃捣-浜ゆ槗涓績鍚堝悓</a> + </dd> + <dd> + <a lay-href="com.fzzy.otherview.sh2023.ShApi2204.d">涓婃捣-瀹氬寲姘存楠�</a> + </dd> + <dd> + <a lay-href="com.fzzy.test.ApiTest.d">瑙嗛鎺ュ彛娴嬭瘯</a> + </dd> + </dl> + </li> + + </ul> + </div> + </div> + + <!-- 椤甸潰鏍囩 --> + <div class="layadmin-pagetabs" id="LAY_app_tabs"> + <div class="layui-icon layadmin-tabs-control layui-icon-prev" + layadmin-event="leftPage"></div> + <div class="layui-icon layadmin-tabs-control layui-icon-next" + layadmin-event="rightPage"></div> + <div class="layui-icon layadmin-tabs-control layui-icon-down"> + <ul class="layui-nav layadmin-tabs-select" + lay-filter="layadmin-pagetabs-nav"> + <li class="layui-nav-item" lay-unselect><a + href="javascript:;"></a> + <dl class="layui-nav-child layui-anim-fadein"> + <dd layadmin-event="closeThisTabs"> + <a href="javascript:;">鍏抽棴褰撳墠鏍囩椤�</a> + </dd> + <dd layadmin-event="closeOtherTabs"> + <a href="javascript:;">鍏抽棴鍏跺畠鏍囩椤�</a> + </dd> + <dd layadmin-event="closeAllTabs"> + <a href="javascript:;">鍏抽棴鍏ㄩ儴鏍囩椤�</a> + </dd> + </dl> + </li> + </ul> + </div> + <div class="layui-tab" lay-unauto lay-allowClose="true" + lay-filter="layadmin-layout-tabs"> + <ul class="layui-tab-title" id="LAY_app_tabsheader"> + <li lay-id="ApiList" + lay-attr="com.fzzy.api.view.ApiList.d" class="layui-this"><i + class="layui-icon layui-icon-home"></i></li> + </ul> + </div> + </div> + + <!-- 涓讳綋鍐呭 --> + <div class="layui-body" id="LAY_app_body"> + <div class="layadmin-tabsbody-item layui-show"> + <iframe src="com.fzzy.api.view.ApiList.d" frameborder="0" + class="layadmin-iframe"></iframe> + </div> + </div> + + <!-- 杈呭姪鍏冪礌锛屼竴鑸敤浜庣Щ鍔ㄨ澶囦笅閬僵 --> + <div class="layadmin-body-shade" layadmin-event="shade"></div> + </div> +</div> + + +<script th:src="@{/static/lib/layui/layui.js}"></script> +<script th:inline="javascript"> + layui.config({ + base: './static/lib/layuiadmin/' + }).extend({ + index: 'lib/index' + }).use('index'); +</script> +</body> +</html> \ No newline at end of file diff --git a/src/main/resources/templates/home/home.html b/src/main/resources/templates/home/home.html index 07636b2..ae4b61d 100644 --- a/src/main/resources/templates/home/home.html +++ b/src/main/resources/templates/home/home.html @@ -317,6 +317,28 @@ </dl> </li> + + <li data-name="template" class="layui-nav-item"> + <a class="one" href="javascript:;" lay-tips="" lay-direction="2"> + <div class="g-icon"> + <img th:src="@{/static/lib/layuiadmin/style/images/icon3.png}"> + </div> + <cite>缃戝叧鎺ュ彛</cite> + <span class="layui-nav-more"></span> + </a> + <dl class="layui-nav-child"> + <dd> + <a lay-href="com.fzzy.gateway.view.GatewayConf.d">缃戝叧閰嶇疆</a> + </dd> + </dl> + + <dl class="layui-nav-child"> + <dd> + <a lay-href="com.fzzy.gateway.view.GatewayDevice.d">璁惧閰嶇疆</a> + </dd> + </dl> + </li> + </ul> </div> </div> -- Gitblit v1.9.3