You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@royale.apache.org by al...@apache.org on 2018/05/10 10:57:30 UTC
[royale-asjs] branch feature/MXRoyale updated:
AdvancedDataGridItemRenderer.as Added
This is an automated email from the ASF dual-hosted git repository.
alinakazi pushed a commit to branch feature/MXRoyale
in repository https://gitbox.apache.org/repos/asf/royale-asjs.git
The following commit(s) were added to refs/heads/feature/MXRoyale by this push:
new 4457091 AdvancedDataGridItemRenderer.as Added
4457091 is described below
commit 44570915b205dc49c2d2175b84fe6eaae710e466
Author: alinakazi <AL...@GMAIL.COM>
AuthorDate: Thu May 10 15:57:28 2018 +0500
AdvancedDataGridItemRenderer.as Added
---
.../AdvancedDataGridItemRenderer.as | 797 +++++++++++++++++++++
1 file changed, 797 insertions(+)
diff --git a/frameworks/projects/MXRoyale/src/main/royale/mx/controls/advancedDataGridClasses/AdvancedDataGridItemRenderer.as b/frameworks/projects/MXRoyale/src/main/royale/mx/controls/advancedDataGridClasses/AdvancedDataGridItemRenderer.as
new file mode 100644
index 0000000..27f077c
--- /dev/null
+++ b/frameworks/projects/MXRoyale/src/main/royale/mx/controls/advancedDataGridClasses/AdvancedDataGridItemRenderer.as
@@ -0,0 +1,797 @@
+////////////////////////////////////////////////////////////////////////////////
+//
+// Licensed to the Apache Software Foundation (ASF) under one or more
+// contributor license agreements. See the NOTICE file distributed with
+// this work for additional information regarding copyright ownership.
+// The ASF licenses this file to You under the Apache License, Version 2.0
+// (the "License"); you may not use this file except in compliance with
+// the License. You may obtain a copy of the License at
+//
+// http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+//
+////////////////////////////////////////////////////////////////////////////////
+
+package mx.controls.advancedDataGridClasses
+{
+/* import flash.display.DisplayObject;
+import flash.geom.Point;
+import flash.geom.Rectangle;
+import flash.utils.getDefinitionByName;
+import flash.utils.getQualifiedClassName;
+import flash.utils.getQualifiedSuperclassName; */
+
+//import mx.controls.AdvancedDataGrid;
+import mx.controls.listClasses.BaseListData;
+//import mx.controls.listClasses.IDropInListItemRenderer;
+//import mx.controls.listClasses.IListItemRenderer;
+import mx.core.IDataRenderer;
+import mx.core.IFlexDisplayObject;
+import mx.core.IToolTip;
+//import mx.core.UIComponentGlobals;
+import mx.core.UITextField;
+import mx.core.mx_internal;
+import mx.events.FlexEvent;
+//import mx.events.ToolTipEvent;
+//import mx.managers.ILayoutManagerClient;
+import mx.managers.ISystemManager;
+import mx.styles.CSSStyleDeclaration;
+//import mx.styles.IStyleClient;
+//import mx.styles.StyleProtoChain;
+use namespace mx_internal;
+
+//--------------------------------------
+// Events
+//--------------------------------------
+
+/**
+ * Dispatched when the <code>data</code> property changes.
+ *
+ * <p>When you use a component as an item renderer,
+ * the <code>data</code> property contains the data to display.
+ * You can listen for this event and update the component
+ * when the <code>data</code> property changes.</p>
+ *
+ * @eventType mx.events.FlexEvent.DATA_CHANGE
+ *
+ * @langversion 3.0
+ * @playerversion Flash 9
+ * @playerversion AIR 1.1
+ * @productversion Royale 0.9.3
+ */
+//[Event(name="dataChange", type="mx.events.FlexEvent")]
+
+/**
+ * The AdvancedDataGridItemRenderer class defines the default item renderer for a AdvancedDataGrid control.
+ * By default, the item renderer
+ * draws the text associated with each item in the grid.
+ *
+ * <p>You can override the default item renderer by creating a custom item renderer.</p>
+ *
+ * @see mx.controls.AdvancedDataGrid
+ * @see mx.core.IDataRenderer
+ * @see mx.controls.listClasses.IDropInListItemRenderer
+ *
+ * @langversion 3.0
+ * @playerversion Flash 9
+ * @playerversion AIR 1.1
+ * @productversion Royale 0.9.3
+ */
+public class AdvancedDataGridItemRenderer extends UITextField
+ implements IDataRenderer
+{
+ /* extends UITextField
+ implements IDataRenderer,
+ IDropInListItemRenderer, ILayoutManagerClient,
+ IListItemRenderer, IStyleClient
+ */
+/* include "../../core/Version.as";
+ */
+ //--------------------------------------------------------------------------
+ //
+ // Constructor
+ //
+ //--------------------------------------------------------------------------
+
+ /**
+ * Constructor.
+ *
+ * @langversion 3.0
+ * @playerversion Flash 9
+ * @playerversion AIR 1.1
+ * @productversion Royale 0.9.3
+ */
+ public function AdvancedDataGridItemRenderer()
+ {
+ super();
+
+ /* tabEnabled = false;
+ mouseWheelEnabled = false;
+
+ ignorePadding = false;
+
+ addEventListener(ToolTipEvent.TOOL_TIP_SHOW, toolTipShowHandler);
+
+ inheritingStyles = nonInheritingStyles =
+ StyleProtoChain.STYLE_UNINITIALIZED; */
+ }
+
+ //--------------------------------------------------------------------------
+ //
+ // Variables
+ //
+ //--------------------------------------------------------------------------
+
+ /**
+ * @private
+ */
+ // private var invalidatePropertiesFlag:Boolean = false;
+
+ /**
+ * @private
+ */
+ // private var invalidateSizeFlag:Boolean = false;
+
+ //--------------------------------------------------------------------------
+ //
+ // Overridden properties: UIComponent
+ //
+ //--------------------------------------------------------------------------
+
+ //----------------------------------
+ // nestLevel
+ //----------------------------------
+
+ /**
+ * @private
+ */
+ /* override public function set nestLevel(value:int):void
+ {
+ super.nestLevel = value;
+
+ UIComponentGlobals.layoutManager.invalidateProperties(this);
+ invalidatePropertiesFlag = true;
+
+ UIComponentGlobals.layoutManager.invalidateSize(this);
+ invalidateSizeFlag = true;
+ } */
+
+ //--------------------------------------------------------------------------
+ //
+ // Properties
+ //
+ //--------------------------------------------------------------------------
+
+ //----------------------------------
+ // data
+ //----------------------------------
+
+ /**
+ * @private
+ */
+ private var _data:Object;
+
+ [Bindable("dataChange")]
+
+ /**
+ * The implementation of the <code>data</code> property as
+ * defined by the IDataRenderer interface.
+ * The value is ignored. Only the <code>listData</code> property is used.
+ *
+ * @see mx.core.IDataRenderer
+ *
+ * @langversion 3.0
+ * @playerversion Flash 9
+ * @playerversion AIR 1.1
+ * @productversion Royale 0.9.3
+ */
+ public function get data():Object
+ {
+ return _data;
+ }
+
+ /**
+ * @private
+ */
+ public function set data(value:Object):void
+ {
+ _data = value;
+
+ dispatchEvent(new FlexEvent(FlexEvent.DATA_CHANGE));
+ }
+
+ //----------------------------------
+ // listData
+ //----------------------------------
+
+ /**
+ * @private
+ */
+ private var _listData:BaseListData //_listData:AdvancedDataGridListData;
+
+ [Bindable("dataChange")]
+
+ /**
+ * The implementation of the <code>listData</code> property as
+ * defined by the IDropInListItemRenderer interface.
+ * The text of the renderer is set to the <code>label</code>
+ * property of this property.
+ *
+ * @see mx.controls.listClasses.IDropInListItemRenderer
+ *
+ * @langversion 3.0
+ * @playerversion Flash 9
+ * @playerversion AIR 1.1
+ * @productversion Royale 0.9.3
+ */
+ public function get listData():BaseListData
+ {
+ return _listData;
+ }
+
+ /**
+ * @private
+ */
+ public function set listData(value:BaseListData):void
+ {
+ _listData = value;
+ /*_listData = AdvancedDataGridListData(value);
+ if (nestLevel && !invalidatePropertiesFlag)
+ {
+ UIComponentGlobals.layoutManager.invalidateProperties(this);
+ invalidatePropertiesFlag = true;
+ UIComponentGlobals.layoutManager.invalidateSize(this);
+ invalidateSizeFlag = true;
+ } */
+ }
+
+ //----------------------------------
+ // styleDeclaration
+ //----------------------------------
+
+ /**
+ * @private
+ * Storage for the styleDeclaration property.
+ */
+ // private var _styleDeclaration:CSSStyleDeclaration;
+
+ /**
+ * Storage for the inline inheriting styles on this object.
+ * This CSSStyleDeclaration is created the first time that
+ * the <code>setStyle()</code> method
+ * is called on this component to set an inheriting style.
+ *
+ * @langversion 3.0
+ * @playerversion Flash 9
+ * @playerversion AIR 1.1
+ * @productversion Royale 0.9.3
+ */
+ /* public function get styleDeclaration():CSSStyleDeclaration
+ {
+ return _styleDeclaration;
+ } */
+
+ /**
+ * @private
+ */
+ /* public function set styleDeclaration(value:CSSStyleDeclaration):void
+ {
+ _styleDeclaration = value;
+ } */
+
+ //--------------------------------------------------------------------------
+ //
+ // Overridden methods: UITextField
+ //
+ //--------------------------------------------------------------------------
+
+ /**
+ * @private
+ */
+ /* override public function initialize():void
+ {
+ regenerateStyleCache(false)
+ } */
+
+ /**
+ * @private
+ */
+ /* override public function validateNow():void
+ {
+ if (data && parent)
+ {
+ var newColor:Number;
+ var adg: AdvancedDataGrid = AdvancedDataGrid(listData.owner);
+
+ if (adg.selectionMode == AdvancedDataGridBase.SINGLE_ROW
+ || adg.selectionMode == AdvancedDataGridBase.MULTIPLE_ROWS)
+ {
+ if (adg.isItemHighlighted(listData.uid))
+ {
+ newColor = getStyle("textRollOverColor");
+ }
+ else if (adg.isItemSelected(listData.uid))
+ {
+ newColor = getStyle("textSelectedColor");
+ }
+ else
+ {
+ newColor = getStyle("color");
+ }
+ }
+ else if (adg.selectionMode == AdvancedDataGridBase.SINGLE_CELL
+ || adg.selectionMode == AdvancedDataGridBase.MULTIPLE_CELLS)
+ {
+ if (adg.isCellItemHighlighted(listData.uid, listData.columnIndex))
+ {
+ newColor = getStyle("textRollOverColor");
+ }
+ else if (adg.isCellItemSelected(listData.uid, listData.columnIndex))
+ {
+ newColor = getStyle("textSelectedColor");
+ }
+ else
+ {
+ newColor = getStyle("color");
+ }
+ }
+
+ if (newColor != explicitColor)
+ {
+ styleChangedFlag = true;
+ explicitColor = newColor;
+ invalidateDisplayList();
+ }
+ }
+
+ super.validateNow();
+ } */
+
+ /**
+ * @copy mx.core.UIComponent#getStyle()
+ *
+ * @langversion 3.0
+ * @playerversion Flash 9
+ * @playerversion AIR 1.1
+ * @productversion Royale 0.9.3
+ */
+ override public function getStyle(styleProp:String):*
+ {
+ /* return (styleManager.inheritingStyles[styleProp]) ?
+ inheritingStyles[styleProp] : nonInheritingStyles[styleProp]; */
+ return super.getStyle(styleProp);
+ }
+
+ /**
+ * @copy mx.core.UIComponent#setStyle()
+ *
+ * @langversion 3.0
+ * @playerversion Flash 9
+ * @playerversion AIR 1.1
+ * @productversion Royale 0.9.3
+ */
+ override public function setStyle(styleProp:String, newValue:*):void
+ {
+ /* if (styleProp == "styleName")
+ {
+ // Let the setter handle this one, see UIComponent.
+ styleName = newValue;
+
+ // Short circuit, because styleName isn't really a style.
+ return;
+ } */
+
+ /*
+ if (styleProp == "themeColor")
+ {
+ // setThemeColor handles the side effects.
+ setThemeColor(newValue);
+
+ // Do not short circuit, because themeColor is a style.
+ // It just has side effects, too.
+ }
+ */
+
+ // If this UIComponent didn't previously have any inline styles,
+ // then regenerate the UIComponent's proto chain (and the proto chains
+ // of this UIComponent's descendants).
+ /* var isInheritingStyle:Boolean =
+ styleManager.isInheritingStyle(styleProp);
+ var isProtoChainInitialized:Boolean =
+ inheritingStyles != StyleProtoChain.STYLE_UNINITIALIZED;
+ if (isInheritingStyle)
+ {
+ if (getStyle(styleProp) == newValue && isProtoChainInitialized)
+ return;
+
+ if (!styleDeclaration)
+ {
+ styleDeclaration = new CSSStyleDeclaration(null, styleManager);
+ styleDeclaration.setLocalStyle(styleProp, newValue);
+
+ // If inheritingStyles is undefined, then this object is being
+ // initialized and we haven't yet generated the proto chain. To
+ // avoid redundant work, don't bother to create the proto chain here.
+ if (isProtoChainInitialized)
+ regenerateStyleCache(true);
+ }
+ else
+ {
+ styleDeclaration.setLocalStyle(styleProp, newValue);
+ }
+ }
+ else
+ {
+ if (getStyle(styleProp) == newValue && isProtoChainInitialized)
+ return;
+
+ if (!styleDeclaration)
+ {
+ styleDeclaration = new CSSStyleDeclaration(null, styleManager);
+ styleDeclaration.setLocalStyle(styleProp, newValue);
+
+ // If nonInheritingStyles is undefined, then this object is being
+ // initialized and we haven't yet generated the proto chain. To
+ // avoid redundant work, don't bother to create the proto chain here.
+ if (isProtoChainInitialized)
+ regenerateStyleCache(false);
+ }
+ else
+ {
+ styleDeclaration.setLocalStyle(styleProp, newValue);
+ }
+ }
+
+ if (isProtoChainInitialized)
+ {
+ styleChanged(styleProp);
+ notifyStyleChangeInChildren(styleProp, isInheritingStyle);
+ } */
+ }
+
+ //--------------------------------------------------------------------------
+ //
+ // Methods
+ //
+ //--------------------------------------------------------------------------
+
+ /**
+ * If Flex calls the <code>LayoutManager.invalidateProperties()</code>
+ * method on this ILayoutManagerClient,
+ * this function is called when it's time to commit property values.
+ *
+ * @langversion 3.0
+ * @playerversion Flash 9
+ * @playerversion AIR 1.1
+ * @productversion Royale 0.9.3
+ */
+ override public function validateProperties():void
+ {
+ super.validateProperties();
+ /* invalidatePropertiesFlag = false;
+ if (_listData && listData.owner)
+ {
+ var dg:AdvancedDataGrid = AdvancedDataGrid(_listData.owner);
+
+ if (_listData.columnIndex < 0 || _listData.columnIndex >= dg.mx_internal::rawColumns.length) {
+ text = " ";
+ toolTip = null;
+ return;
+ }
+
+ var column:AdvancedDataGridColumn =
+ dg.mx_internal::rawColumns[_listData.columnIndex];
+
+ if (column == null) {
+ text = " ";
+ toolTip = null;
+ return;
+ }
+
+ text = _listData.label;
+
+ if (_data is AdvancedDataGridColumn)
+ wordWrap = dg.columnHeaderWordWrap(column);
+ else
+ wordWrap = dg.columnWordWrap(column);
+
+ if (AdvancedDataGrid(_listData.owner).variableRowHeight)
+ multiline = true;
+
+ var dataTips:Boolean = dg.showDataTips;
+ if (column.showDataTips == true)
+ dataTips = true;
+ if (column.showDataTips == false)
+ dataTips = false;
+ if (dataTips)
+ {
+ if (!(_data is AdvancedDataGridColumn) && (textWidth > width
+ || column.dataTipFunction || column.dataTipField
+ || dg.dataTipFunction || dg.dataTipField))
+ {
+ toolTip = column.itemToDataTip(_data);
+ }
+ else
+ {
+ toolTip = null;
+ }
+ }
+ else
+ {
+ toolTip = null;
+ }
+ }
+ else
+ {
+ text = " ";
+ toolTip = null;
+ } */
+ }
+
+ /**
+ * If Flex calls the <code>LayoutManager.invalidateSize()</code>
+ * method on this ILayoutManagerClient,
+ * this function is called when it's time to do measurements.
+ *
+ * @param recursive If <code>true</code>, call this method
+ * on the object's children.
+ *
+ * @langversion 3.0
+ * @playerversion Flash 9
+ * @playerversion AIR 1.1
+ * @productversion Royale 0.9.3
+ */
+ /* public function validateSize(recursive:Boolean = false):void
+ {
+ invalidateSizeFlag = false;
+ validateNow();
+ } */
+
+ /**
+ * If Flex calls <code>LayoutManager.invalidateDisplayList()</code>
+ * method on this ILayoutManagerClient instance,
+ * this function is called when it's time to update the display list.
+ *
+ * @langversion 3.0
+ * @playerversion Flash 9
+ * @playerversion AIR 1.1
+ * @productversion Royale 0.9.3
+ */
+ /* public function validateDisplayList():void
+ {
+ validateNow();
+ } */
+
+ /**
+ * @copy mx.core.UIComponent#clearStyle()
+ *
+ * @langversion 3.0
+ * @playerversion Flash 9
+ * @playerversion AIR 1.1
+ * @productversion Royale 0.9.3
+ */
+ /* public function clearStyle(styleProp:String):void
+ {
+ setStyle(styleProp, undefined);
+ } */
+
+ /**
+ * @copy mx.core.UIComponent#notifyStyleChangeInChildren()
+ *
+ * @langversion 3.0
+ * @playerversion Flash 9
+ * @playerversion AIR 1.1
+ * @productversion Royale 0.9.3
+ */
+ /* public function notifyStyleChangeInChildren(
+ styleProp:String, recursive:Boolean):void
+ {
+ } */
+
+ /**
+ * Sets up the <code>inheritingStyles</code>
+ * and <code>nonInheritingStyles</code> objects
+ * and their proto chains so that the <code>getStyle()</code> method can work.
+ *
+ * @langversion 3.0
+ * @playerversion Flash 9
+ * @playerversion AIR 1.1
+ * @productversion Royale 0.9.3
+ */
+ /* public function initProtoChain():void
+ {
+ styleChangedFlag = true;
+
+ var classSelectors:Array = [];
+
+ if (styleName)
+ {
+ if (styleName is CSSStyleDeclaration)
+ {
+ // Get the style sheet referenced by the styleName property
+ classSelectors.push(CSSStyleDeclaration(styleName));
+ }
+ else if (styleName is IFlexDisplayObject)
+ {
+ // If the styleName property is a UIComponent, then there's a
+ // special search path for that case.
+ StyleProtoChain.initProtoChainForUIComponentStyleName(this);
+ return;
+ }
+ else if (styleName is String)
+ {
+ // Get the style sheet referenced by the styleName property
+ var styleNames:Array = styleName.split(/\s+/);
+ for (var c:int=0; c < styleNames.length; c++)
+ {
+ if (styleNames[c].length) {
+ classSelectors.push(styleManager.getMergedStyleDeclaration("." +
+ styleNames[c]));
+ }
+ }
+ }
+ }
+
+ // To build the proto chain, we start at the end and work forward.
+ // Referring to the list at the top of this function, we'll start by
+ // getting the tail of the proto chain, which is:
+ // - for non-inheriting styles, the global style sheet
+ // - for inheriting styles, my parent's style object
+ var nonInheritChain:Object = styleManager.stylesRoot;
+
+ var p:IStyleClient = parent as IStyleClient;
+ if (p)
+ {
+ var inheritChain:Object = p.inheritingStyles;
+ if (inheritChain == StyleProtoChain.STYLE_UNINITIALIZED)
+ inheritChain = nonInheritChain;
+ }
+ else
+ {
+ inheritChain = styleManager.stylesRoot;
+ }
+
+ // Working backwards up the list, the next element in the
+ // search path is the type selector
+ var typeSelectors:Array = getClassStyleDeclarations();
+ var n:int = typeSelectors.length;
+ for (var i:int = 0; i < n; i++)
+ {
+ var typeSelector:CSSStyleDeclaration = typeSelectors[i];
+ inheritChain = typeSelector.addStyleToProtoChain(inheritChain, this);
+ nonInheritChain = typeSelector.addStyleToProtoChain(nonInheritChain, this);
+ }
+
+ // Next are the class selectors
+ for (i = 0; i < classSelectors.length; i++)
+ {
+ var classSelector:CSSStyleDeclaration = classSelectors[i];
+ if (classSelector)
+ {
+ inheritChain = classSelector.addStyleToProtoChain(inheritChain, this);
+ nonInheritChain = classSelector.addStyleToProtoChain(nonInheritChain, this);
+ }
+ }
+
+ // Finally, we'll add the in-line styles
+ // to the head of the proto chain.
+ inheritingStyles = styleDeclaration ?
+ styleDeclaration.addStyleToProtoChain(inheritChain, this) :
+ inheritChain;
+
+ nonInheritingStyles = styleDeclaration ?
+ styleDeclaration.addStyleToProtoChain(nonInheritChain, this) :
+ nonInheritChain;
+ } */
+
+ /**
+ * @copy mx.core.UIComponent#regenerateStyleCache()
+ *
+ * @langversion 3.0
+ * @playerversion Flash 9
+ * @playerversion AIR 1.1
+ * @productversion Royale 0.9.3
+ */
+ /* public function regenerateStyleCache(recursive:Boolean):void
+ {
+ initProtoChain();
+ } */
+
+ /**
+ * @copy mx.core.UIComponent#registerEffects()
+ *
+ * @langversion 3.0
+ * @playerversion Flash 9
+ * @playerversion AIR 1.1
+ * @productversion Royale 0.9.3
+ */
+ // public function registerEffects(effects:Array /* of String */):void
+ // {
+ // }
+
+ /**
+ * @copy mx.core.UIComponent#getClassStyleDeclarations()
+ *
+ * @langversion 3.0
+ * @playerversion Flash 9
+ * @playerversion AIR 1.1
+ * @productversion Royale 0.9.3
+ */
+ /* public function getClassStyleDeclarations():Array
+ {
+ var className:String = getQualifiedClassName(this)
+ className = className.replace("::", ".");
+
+ var decls:Array = [];
+
+ while (className != null &&
+ className != "mx.core.UIComponent" &&
+ className != "mx.core.UITextField")
+ {
+ var s:CSSStyleDeclaration =
+ styleManager.getMergedStyleDeclaration(className);
+
+ if (s)
+ {
+ decls.unshift(s);
+ }
+
+ try
+ {
+ className = getQualifiedSuperclassName(getDefinitionByName(className));
+ className = className.replace("::", ".");
+ }
+ catch(e:ReferenceError)
+ {
+ className = null;
+ }
+ }
+
+ return decls;
+ } */
+
+ //--------------------------------------------------------------------------
+ //
+ // Event handlers
+ //
+ //--------------------------------------------------------------------------
+
+ /**
+ * The event handler to position the tooltip.
+ *
+ * @param event The event object.
+ *
+ * @langversion 3.0
+ * @playerversion Flash 9
+ * @playerversion AIR 1.1
+ * @productversion Royale 0.9.3
+ */
+ /* protected function toolTipShowHandler(event:ToolTipEvent):void
+ {
+ var toolTip:IToolTip = event.toolTip;
+
+ // Calculate global position of label.
+ var sm:ISystemManager = systemManager.topLevelSystemManager;
+ var sbRoot:DisplayObject = sm.getSandboxRoot();
+ var screen:Rectangle = sm.getVisibleApplicationRect(null, true);
+ var pt:Point = new Point(0, 0);
+ pt = localToGlobal(pt);
+ pt = sbRoot.globalToLocal(pt);
+
+ toolTip.move(pt.x, pt.y + (height - toolTip.height) / 2);
+
+ var screenRight:Number = screen.x + screen.width;
+ pt.x = toolTip.x;
+ pt.y = toolTip.y;
+ pt = sbRoot.localToGlobal(pt);
+ if (pt.x + toolTip.width > screenRight)
+ toolTip.move(toolTip.x - (pt.x + toolTip.width - screenRight), toolTip.y);
+ } */
+}
+
+}
\ No newline at end of file
--
To stop receiving notification emails like this one, please contact
alinakazi@apache.org.