You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@flex.apache.org by ah...@apache.org on 2014/04/25 07:34:46 UTC
[48/51] [partial] BlazeDS Donation from Adobe Systems Inc
http://git-wip-us.apache.org/repos/asf/flex-blazeds/blob/7a58369c/apps/ds-console/console/containers/LogManager.as
----------------------------------------------------------------------
diff --git a/apps/ds-console/console/containers/LogManager.as b/apps/ds-console/console/containers/LogManager.as
new file mode 100755
index 0000000..a44dc06
--- /dev/null
+++ b/apps/ds-console/console/containers/LogManager.as
@@ -0,0 +1,189 @@
+////////////////////////////////////////////////////////////////////////////////
+//
+// 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 console.containers
+{
+ import console.ConsoleManager;
+ import flash.events.Event;
+ import mx.controls.ComboBox;
+ import console.events.ManagementOperationInvokeEvent;
+ import mx.events.ListEvent;
+ import flash.events.MouseEvent;
+ import mx.collections.ArrayCollection;
+
+ public class LogManager extends UpdateListener
+ {
+ private var _manager:ConsoleManager;
+ private var _logMBean:String;
+ private var _logTree:Array;
+ private var display:LogManagerDisplay;
+
+ public static var targetLevels:Array = new Array(
+ {label:"NONE", value:"2000"},
+ {label:"FATAL", value:"1000"},
+ {label:"ERROR", value:"8"},
+ {label:"WARN", value:"6"},
+ {label:"INFO", value:"4"},
+ {label:"DEBUG", value:"2"},
+ {label:"ALL", value:"0"}
+ );
+
+ public function LogManager():void
+ {
+ super();
+
+ display = new LogManagerDisplay;
+ this.addChild(display);
+
+ this.label = "Log Manager";
+
+ _manager = ConsoleManager.getInstance();
+ _manager.registerListener(this, []);
+
+ // On selecting a log target, invoke 'getTargetFilters' to populate the table of filters
+ display.logTargetSelect.addEventListener(ListEvent.CHANGE, selectLogTarget);
+ display.logTargetLevel.dataProvider = targetLevels;
+
+ // Handler for removing a target
+ display.deleteCategory.addEventListener(MouseEvent.CLICK,
+ function(e:Event):void {
+
+ _manager.invokeOperation(
+
+ new ManagementOperationInvokeEvent(_logMBean,
+ "removeFilterForTarget",
+ [display.logTargetSelect.selectedItem, display.currentCategories.selectedItem],
+ ["java.lang.String", "java.lang.String"]),
+
+ function (e:Event):void { display.logTargetSelect.dispatchEvent(
+ new Event(ListEvent.CHANGE)); } );
+ }
+ );
+
+ // Handler for adding a target
+ display.addFilterButton.addEventListener(MouseEvent.CLICK,
+ function(e:Event):void {
+
+ _manager.invokeOperation(
+
+ new ManagementOperationInvokeEvent(_logMBean,
+ "addFilterForTarget",
+ [display.logTargetSelect.selectedItem, display.addFilterTextInput.text],
+ ["java.lang.String", "java.lang.String"]),
+ // Simple callback function to refresh the Log View
+ function (e:Event):void {
+ display.logTargetSelect.dispatchEvent(new Event(ListEvent.CHANGE));
+ display.addFilterTextInput.text = "";
+ }
+ );
+ }
+ );
+
+ // Handler for adding a target
+ display.addCommonFilterButton.addEventListener(MouseEvent.CLICK,
+ function(e:Event):void {
+
+ _manager.invokeOperation(
+
+ new ManagementOperationInvokeEvent(_logMBean,
+ "addFilterForTarget",
+ [display.logTargetSelect.selectedItem, display.commonCategories.selectedItem],
+ ["java.lang.String", "java.lang.String"]),
+ // Simple callback function to refresh the Log View
+ function (e:Event):void {
+ display.logTargetSelect.dispatchEvent(new Event(ListEvent.CHANGE));
+ display.addFilterTextInput.text = "";
+ }
+ );
+ }
+ );
+
+ // Handler for changing the target's level
+ display.logTargetLevel.addEventListener(ListEvent.CHANGE, function(e:Event):void
+ {
+ _manager.invokeOperation(
+
+ new ManagementOperationInvokeEvent(_logMBean,
+ "changeTargetLevel",
+ [display.logTargetSelect.selectedItem, display.logTargetLevel.selectedItem.value],
+ ["java.lang.String", "java.lang.String"]),
+ new Function
+ );
+ }
+ );
+
+ }
+
+ public override function mbeanModelUpdate(model:Object):void
+ {
+ _logTree = _manager.getChildTree("Log");
+ if (_logTree != null && _logTree.length != 0)
+ {
+ _logMBean = _logTree[0]["objectName"]["canonicalName"];
+ // Get the targets for the current application
+ _manager.getAttributes(_logMBean, ["Targets"], this, updateTargets);
+ _manager.getAttributes(_logMBean, ["Categories"], this, updateCommonCats);
+ }
+ }
+
+ public override function appChanged(s:String):void
+ {
+ mbeanModelUpdate(null);
+ }
+
+ public function updateCommonCats(e:Event):void
+ {
+ display.commonCategories.dataProvider = (e["result"] as Array)[0].value;
+ display.commonCategories.selectedIndex = 0;
+ display.commonCategories.dispatchEvent(new Event(ListEvent.CHANGE));
+ }
+
+ public function updateTargets(e:Event):void
+ {
+ var logTargets:Array = (e["result"] as Array)[0].value;
+ display.logTargetSelect.dataProvider = logTargets;
+ display.logTargetSelect.selectedIndex = 0;
+ display.logTargetSelect.dispatchEvent(new Event(ListEvent.CHANGE));
+ }
+
+ public function updateFilters(e:Event):void
+ {
+ display.currentCategories.dataProvider = e["result"] as Array;
+ }
+
+ public function selectLogTarget(e:Event):void
+ {
+ _manager.invokeOperation(new ManagementOperationInvokeEvent(_logMBean,
+ "getTargetFilters", [display.logTargetSelect.selectedItem], ["java.lang.String"]),
+ updateFilters);
+ _manager.invokeOperation(new ManagementOperationInvokeEvent(_logMBean,
+ "getTargetLevel", [display.logTargetSelect.selectedItem], ["java.lang.String"]),
+ handleGetTargetLevel);
+ }
+
+ public function handleGetTargetLevel(e:Event):void
+ {
+ var currentLevelInt:String = e["message"]["body"];
+ for (var i:int = 0; i < targetLevels.length; i++)
+ {
+ if (targetLevels[i].value == currentLevelInt)
+ display.logTargetLevel.selectedIndex = i;
+ }
+ }
+ }
+}
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/flex-blazeds/blob/7a58369c/apps/ds-console/console/containers/LogManagerDisplay.mxml
----------------------------------------------------------------------
diff --git a/apps/ds-console/console/containers/LogManagerDisplay.mxml b/apps/ds-console/console/containers/LogManagerDisplay.mxml
new file mode 100755
index 0000000..969c9d4
--- /dev/null
+++ b/apps/ds-console/console/containers/LogManagerDisplay.mxml
@@ -0,0 +1,54 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+
+ 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.
+
+-->
+<mx:VBox xmlns:mx="http://www.adobe.com/2006/mxml" width="100%" height="100%">
+ <mx:HBox width="100%" height="100%">
+ <mx:Form>
+ <mx:FormItem label="Log Target:">
+ <mx:ComboBox id="logTargetSelect" />
+ </mx:FormItem>
+ <mx:FormItem label="Target Level:">
+ <mx:ComboBox id="logTargetLevel"></mx:ComboBox>
+ </mx:FormItem>
+ <mx:HRule width="100%"/>
+ <mx:FormItem label="Add a Custom Category">
+ <mx:TextInput id="addFilterTextInput" />
+ </mx:FormItem>
+ <mx:FormItem>
+ <mx:Button label="Add Category" id="addFilterButton" />
+ </mx:FormItem>
+ </mx:Form>
+ <mx:VBox width="100%">
+ <mx:DataGrid id="currentCategories" width="100%">
+ <mx:columns>
+ <mx:DataGridColumn headerText="Current Categories" dataField="filters" />
+ </mx:columns>
+ </mx:DataGrid>
+ <mx:Button label="Remove Category" id="deleteCategory" />
+ </mx:VBox>
+ <mx:VBox width="100%">
+ <mx:DataGrid id="commonCategories" width="100%">
+ <mx:columns>
+ <mx:DataGridColumn headerText="Common Categories" dataField="common"/>
+ </mx:columns>
+ </mx:DataGrid>
+ <mx:Button label="Add Category" id="addCommonFilterButton" />
+ </mx:VBox>
+ </mx:HBox>
+</mx:VBox>
http://git-wip-us.apache.org/repos/asf/flex-blazeds/blob/7a58369c/apps/ds-console/console/containers/Operation.as
----------------------------------------------------------------------
diff --git a/apps/ds-console/console/containers/Operation.as b/apps/ds-console/console/containers/Operation.as
new file mode 100755
index 0000000..2b9788e
--- /dev/null
+++ b/apps/ds-console/console/containers/Operation.as
@@ -0,0 +1,169 @@
+////////////////////////////////////////////////////////////////////////////////
+//
+// 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 console.containers
+{
+
+import flash.events.MouseEvent;
+import mx.containers.HBox;
+import mx.controls.Button;
+import mx.controls.Label;
+import mx.controls.TextInput;
+import mx.messaging.management.MBeanOperationInfo;
+import mx.messaging.management.MBeanParameterInfo;
+
+/**
+ * The Operation container is an HBox that renders UI to invoke an operation on
+ * an MBean. When the operationInfo property of an Operation is set, the current
+ * UI for the Operation is torn down, and new UI is rendered based on the new
+ * MBeanOperationInfo metadata provided.
+ * <p>
+ * This container/control should not be instantiated directly. A parent OperationSet
+ * container will create nested Operations based on its MBean metadata.
+ */
+public class Operation extends HBox
+{
+ //--------------------------------------------------------------------------
+ //
+ // Constructor
+ //
+ //--------------------------------------------------------------------------
+
+ /**
+ * @private
+ * Constructor.
+ */
+ public function Operation(wrapper:OperationSet)
+ {
+ super();
+
+ _wrapper = wrapper;
+ _values = [];
+ _signature = [];
+ }
+
+ /**
+ * @private
+ * The parent container.
+ */
+ private var _wrapper:OperationSet;
+
+ /**
+ * @private
+ * Array to store references to controls for each argument.
+ */
+ private var _values:Array;
+
+ /**
+ * @private
+ * Array to store the type signature for this operation.
+ */
+ private var _signature:Array;
+
+ //----------------------------------
+ // MBeanOperationInfo
+ //----------------------------------
+
+ /**
+ * @private
+ * Storage for the operation info.
+ */
+ private var _operationInfo:MBeanOperationInfo;
+
+ /**
+ * MBean operation metadata that drives the UI for this component.
+ */
+ public function get operationInfo():MBeanOperationInfo
+ {
+ return _operationInfo;
+ }
+
+ public function set operationInfo(value:MBeanOperationInfo):void
+ {
+ var i:int;
+
+ _operationInfo = value;
+ // Remove any existing children and refs to argument values.
+ _values.splice(0);
+ _signature.splice(0);
+ for (i = numChildren - 1; i >= 0; --i)
+ {
+ removeChildAt(i);
+ }
+
+ // Build UI for this operation.
+ var opName:Button = new Button();
+ opName.label = value.name;
+ opName.addEventListener("click", invokeOperation);
+ addChild(opName);
+
+ var openParen:Label = new Label();
+ openParen.text = " (";
+ addChild(openParen);
+
+ var comma:Label = new Label();
+ comma.text = ", ";
+ var paramName:String;
+ var n:int = value.signature.length;
+ for (i = 0; i < n; ++i)
+ {
+ var pName:Label = new Label();
+ paramName = value.signature[i].name;
+ if (paramName.length > 0)
+ {
+ pName.text = paramName;
+ }
+ else
+ {
+ pName.text = "p" + (i + 1);
+ }
+ addChild(pName);
+ var pValue:TextInput = new TextInput();
+ addChild(pValue);
+ _values[i] = pValue;
+ _signature[i] = value.signature[i].type;
+ if (i != (n - 1))
+ {
+ addChild(comma);
+ }
+ }
+
+ var closeParen:Label = new Label();
+ closeParen.text = " ) ";
+ addChild(closeParen);
+ }
+
+ /**
+ * @private
+ * Calls back into the parent OperationSet to dispatch an
+ * event for this operation invocation request.
+ */
+ private function invokeOperation(e:MouseEvent):void
+ {
+ var argsToPass:Array = [];
+ var n:int = _values.length;
+ for (var i:int = 0; i < n; ++i)
+ {
+ argsToPass.push(_values[i].text);
+ }
+ _wrapper.dispatchInvokeEvent(_operationInfo.name, argsToPass, _signature);
+ }
+}
+
+}
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/flex-blazeds/blob/7a58369c/apps/ds-console/console/containers/OperationSet.as
----------------------------------------------------------------------
diff --git a/apps/ds-console/console/containers/OperationSet.as b/apps/ds-console/console/containers/OperationSet.as
new file mode 100755
index 0000000..98ca6de
--- /dev/null
+++ b/apps/ds-console/console/containers/OperationSet.as
@@ -0,0 +1,149 @@
+////////////////////////////////////////////////////////////////////////////////
+//
+// 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 console.containers
+{
+
+import console.events.ManagementOperationInvokeEvent;
+
+import mx.containers.*;
+import mx.messaging.management.MBeanInfo;
+
+//--------------------------------------
+// Events
+//--------------------------------------
+
+/**
+ * Broadcast when a request has been made to invoke an Operation within this OperationSet.
+ */
+[Event(name="invoke", type="console.events.ManagementOperationInvokeEvent")]
+
+/**
+ * The OperationSet is a VBox containing an Operation for each operation exposed by a
+ * MBean. When the mbeanInfo property is set, the current UI of the OperationSet is torn
+ * down and new UI is built based upon the MBeanInfo metadata provided.
+ *
+ * <p><b>MXML Syntax</b></p>
+ *
+ * <p>The <code><mx:OperationSet></code> tag inherits all the properties
+ * of its parent classes and adds the following properties:</p>
+ *
+ * <p>
+ * <pre>
+ * <mx:Button
+ * mbeanInfo="<i>No default</i>."
+ * />
+ * </pre>
+ * </p>
+ */
+public class OperationSet extends VBox
+{
+ //--------------------------------------------------------------------------
+ //
+ // Constructor
+ //
+ //--------------------------------------------------------------------------
+
+ /**
+ * @private
+ * Constructor.
+ */
+ public function OperationSet()
+ {
+ super();
+ }
+
+
+
+
+ //----------------------------------
+ // MBeanOperationInfo
+ //----------------------------------
+
+ private var _mbeanName:String;
+ public function set mbeanName(name:String):void
+ {
+ _mbeanName = name;
+ }
+
+ /**
+ * @private
+ * Storage for the Mbean info.
+ */
+ private var _mbeanInfo:MBeanInfo;
+
+ /**
+ * MBean metadata to drive the UI for this component.
+ */
+ public function get mbeanInfo():MBeanInfo
+ {
+ return _mbeanInfo;
+ }
+
+
+ private var _tabnav:TabNavigator;
+ public function set tabnav(p:TabNavigator):void
+ {
+ _tabnav = p;
+ }
+
+ public function set mbeanInfo(value:MBeanInfo):void
+ {
+ var i:int;
+
+ _mbeanInfo = value;
+ // Remove any existing children.
+ for (i = numChildren - 1; i >= 0; --i)
+ {
+ removeChildAt(i);
+ }
+ if (value != null)
+ {
+ var n:int = value.operations.length;
+
+ // If there are no operations for this MBean, disable the Operations tab.
+ if (n == 0)
+ _tabnav.getTabAt(1).enabled = false;
+
+ // Otherwise, build UI for the set of operations exposed by this MBean.
+ else
+ {
+ _tabnav.getTabAt(1).enabled = true;
+ for (i = 0; i < n; ++i)
+ {
+ var op:Operation = new Operation(this);
+ addChild(op);
+ op.operationInfo = value.operations[i];
+ }
+ }
+ }
+ }
+
+ /**
+ * Raises an operation invoke event for a nested Operation.
+ */
+ public function dispatchInvokeEvent(name:String, values:Array, signature:Array):void
+ {
+ var event:ManagementOperationInvokeEvent = new ManagementOperationInvokeEvent(_mbeanName, name, values, signature);
+ dispatchEvent(event);
+ }
+
+}
+
+}
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/flex-blazeds/blob/7a58369c/apps/ds-console/console/containers/PollableAttributeChart.as
----------------------------------------------------------------------
diff --git a/apps/ds-console/console/containers/PollableAttributeChart.as b/apps/ds-console/console/containers/PollableAttributeChart.as
new file mode 100755
index 0000000..a8470c5
--- /dev/null
+++ b/apps/ds-console/console/containers/PollableAttributeChart.as
@@ -0,0 +1,42 @@
+////////////////////////////////////////////////////////////////////////////////
+//
+// 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 console.containers
+{
+ import mx.charts.LineChart;
+ import mx.charts.series.LineSeries;
+
+ public class PollableAttributeChart extends LineChart
+ {
+ function PollableAttributeChart(provider:Object):void
+ {
+ super();
+
+ dataProvider = provider;
+ this.percentHeight = 100;
+ this.percentWidth = 100;
+
+ var series:LineSeries = new LineSeries;
+ series.dataProvider = provider;
+ series.yField = "value";
+ this.addChild(series);
+
+ initialize();
+ }
+ }
+}
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/flex-blazeds/blob/7a58369c/apps/ds-console/console/containers/ServerManager.as
----------------------------------------------------------------------
diff --git a/apps/ds-console/console/containers/ServerManager.as b/apps/ds-console/console/containers/ServerManager.as
new file mode 100755
index 0000000..719556c
--- /dev/null
+++ b/apps/ds-console/console/containers/ServerManager.as
@@ -0,0 +1,138 @@
+////////////////////////////////////////////////////////////////////////////////
+//
+// 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 console.containers
+{
+ import console.ConsoleManager;
+ import mx.collections.ArrayCollection;
+ import mx.events.ListEvent;
+ import flash.events.Event;
+ import mx.charts.LineChart;
+ import mx.charts.series.LineSeries;
+ import mx.utils.ObjectProxy;
+ import flash.utils.setInterval;
+ import mx.collections.ICollectionView;
+ import console.data.Bindable3DHashMap;
+ import flash.events.TextEvent;
+ import console.events.ManagementOperationInvokeEvent;
+ import mx.controls.DataGrid;
+ import mx.events.DataGridEvent;
+ import mx.events.FlexEvent;
+
+ public class ServerManager extends UpdateListener
+ {
+ private var _manager:ConsoleManager;
+ private var display:ServerManagerDisplay;
+ private var dataCache:Bindable3DHashMap;
+ private var pollableAttributes:Object;
+ private var visibleTypes:Array;
+
+ public function ServerManager():void
+ {
+ super();
+ display = new ServerManagerDisplay;
+ this.addChild(display);
+
+ this.label = "Server Management";
+ display.scalarProperties.addEventListener(ListEvent.CHANGE, selectedScalar);
+ display.pollableProperties.addEventListener(ListEvent.CHANGE, selectedPollable);
+ _manager = ConsoleManager.getInstance();
+ _manager.registerListener(this, [{type: ConsoleManager.GENERAL_OPERATION, poll: false},
+ {type: ConsoleManager.GENERAL_SERVER, poll: false},
+ {type: ConsoleManager.GENERAL_POLLABLE, poll: true}]);
+ setupDataCache();
+ }
+
+ public override function dataUpdate(type:int, data:Object):void
+ {
+ var dataArray:ArrayCollection = new ArrayCollection;
+
+ for (var name:String in data)
+ {
+
+ var propertyArrayForMBean:Array = data[name];
+
+ for (var i:int = 0; i < propertyArrayForMBean.length; i++)
+ {
+ dataCache.update(String(type), propertyArrayForMBean[i].name, propertyArrayForMBean[i].value);
+ }
+ }
+
+ if (type == ConsoleManager.GENERAL_POLLABLE)
+ pollableAttributes = data;
+ }
+
+ private function setupDataCache():void
+ {
+ dataCache = new Bindable3DHashMap();
+ dataCache.update(String(ConsoleManager.GENERAL_OPERATION),null,null);
+ dataCache.update(String(ConsoleManager.GENERAL_POLLABLE),null,null);
+ dataCache.update(String(ConsoleManager.GENERAL_SERVER),null,null);
+
+ display.scalarProperties.dataProvider = dataCache.getBindableKeyArray(String(ConsoleManager.GENERAL_SERVER));
+ display.pollableProperties.dataProvider = dataCache.getBindableKeyArray(String(ConsoleManager.GENERAL_POLLABLE));
+ }
+
+ private function invokeOp(mbean:String, operation:String, value:String):void
+ {
+ _manager.invokeOperation(
+ new ManagementOperationInvokeEvent(mbean, operation, [value], ["java.lang.String"]),
+ function (e:Event):void {
+
+ }
+ );
+ }
+
+ private function selectedScalar(e:Event):void
+ {
+ // It's possible that the data has changed since it was clicked because of polling
+ // if the selected item is null, then return.
+ // TODO: Handle this more gracefully.
+ if (display.scalarProperties.selectedItem == -1) return;
+
+ var attr:String = display.scalarProperties.selectedItem.propertyName;
+ var mbean:String = display.scalarProperties.selectedItem.mbeanName;
+ display.selectedProperty.text = attr;
+ display.pollableProperties.selectedIndex = -1;
+ }
+
+ private function selectedPollable(e:Event):void
+ {
+ // It's possible that the data has changed since it was clicked because of polling
+ // if the selected item is null, then return.
+ // TODO: Handle this more gracefully.
+ if (display.pollableProperties.selectedItem == null) return;
+
+ var attr:String = display.pollableProperties.selectedItem.Property
+ display.selectedProperty.text = attr;
+
+ display.attrgraph.dataProvider = dataCache.getBindableDataArray(String(ConsoleManager.GENERAL_POLLABLE), attr);
+ display.attrgraphSeries.dataProvider = dataCache.getBindableDataArray(String(ConsoleManager.GENERAL_POLLABLE), attr);
+ display.scalarProperties.selectedIndex = -1;
+ }
+
+ public override function appChanged(s:String):void
+ {
+ display.attrgraph.dataProvider = null;
+ display.attrgraphSeries.dataProvider = null;
+ display.selectedProperty.text = "None";
+ setupDataCache();
+ _manager.updateData(this);
+ }
+ }
+}
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/flex-blazeds/blob/7a58369c/apps/ds-console/console/containers/ServerManagerDisplay.mxml
----------------------------------------------------------------------
diff --git a/apps/ds-console/console/containers/ServerManagerDisplay.mxml b/apps/ds-console/console/containers/ServerManagerDisplay.mxml
new file mode 100755
index 0000000..2bf1152
--- /dev/null
+++ b/apps/ds-console/console/containers/ServerManagerDisplay.mxml
@@ -0,0 +1,54 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+
+ 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.
+
+-->
+<mx:Panel xmlns:mx="http://www.adobe.com/2006/mxml" width="100%" height="100%">
+ <mx:HDividedBox width="100%" height="100%">
+ <mx:VBox height="100%" width="400">
+ <mx:DataGrid id="scalarProperties" width="100%">
+ <mx:columns>
+ <mx:DataGridColumn dataField="mbeanName" visible="false" />
+ <mx:DataGridColumn headerText="Scalar Property" dataField="Property" />
+ <mx:DataGridColumn headerText="Value" dataField="Value" />
+ </mx:columns>
+ </mx:DataGrid>
+ <mx:DataGrid id="pollableProperties" width="100%">
+ <mx:columns>
+ <mx:DataGridColumn dataField="mbeanName" visible="false" />
+ <mx:DataGridColumn headerText="Graphable Property" dataField="Property" />
+ <mx:DataGridColumn headerText="Value" dataField="Value" />
+ </mx:columns>
+ </mx:DataGrid>
+ </mx:VBox>
+ <mx:VDividedBox height="100%">
+ <mx:HBox>
+ <mx:Label text="Selected Attribute" />
+ <mx:Text id="selectedProperty" />
+ </mx:HBox>
+ <mx:LineChart id="attrgraph" width="100%" height="100%">
+ <mx:verticalAxis>
+ <mx:LinearAxis id="attrgraphAxis" baseAtZero="false" />
+ </mx:verticalAxis>
+ <mx:series>
+ <mx:LineSeries id="attrgraphSeries" yField="Value" />
+ </mx:series>
+ </mx:LineChart>
+ </mx:VDividedBox>
+ </mx:HDividedBox>
+
+</mx:Panel>
http://git-wip-us.apache.org/repos/asf/flex-blazeds/blob/7a58369c/apps/ds-console/console/containers/UpdateListener.as
----------------------------------------------------------------------
diff --git a/apps/ds-console/console/containers/UpdateListener.as b/apps/ds-console/console/containers/UpdateListener.as
new file mode 100755
index 0000000..bd3a464
--- /dev/null
+++ b/apps/ds-console/console/containers/UpdateListener.as
@@ -0,0 +1,109 @@
+////////////////////////////////////////////////////////////////////////////////
+//
+// 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 console.containers
+{
+ import mx.containers.Canvas;
+ import console.data.Bindable3DHashMap;
+ import mx.collections.ArrayCollection;
+ import mx.messaging.management.ObjectName;
+
+ public class UpdateListener extends Canvas
+ {
+ protected var _name:String;
+ protected var _model:Object;
+
+ /**
+ * Invoked when the names of the mbeans are retrieved from the server.
+ */
+ public function mbeanModelUpdate(mbeanModel:Object):void
+ {
+
+ }
+
+ /**
+ * Invoked when the data for a given type is updated if the implementing class
+ * is registered with the ConsoleManager for the type, and if the implementing class
+ * is set to active in the ConsoleManager.
+ */
+ public function dataUpdate(type:int, data:Object):void
+ {
+
+ }
+
+ /**
+ * Invoked when the selected application has changed. An implementing class might
+ * want to clear any data it is holding onto since the data will be belonging to
+ * objects in an application's MBeans that are no longer being queried.
+ */
+ public function appChanged(s:String):void
+ {
+
+ }
+
+ /**
+ * If the container only wishes to query a select number of MBeans upon dataUpdate, they should be
+ * visible in a map keyed on the display type containing arrays of the MBean names.
+ *
+ * If a null value, or any object that the ConsoleManager can't parse, then all
+ * MBeans for all active types are returned upon dataUpdate.
+ */
+ public function get specificMBeansMap():Object
+ {
+ return null;
+ }
+
+ protected function traverseTreeForObject(node:Object, searchType:String = null, searchObject:String = null):Object
+ {
+ if (node == null)
+ {
+ return null;
+ }
+ else if (node.hasOwnProperty("type"))
+ {
+ // Node is a container of objects of 'type'
+ if (searchType != null)
+ {
+ if (node.type == searchObject)
+ return node;
+ }
+ }
+ else if (node.hasOwnProperty("objectName"))
+ {
+ // Node is a specific object, an instance of parent 'type'
+ if (searchObject != null)
+ {
+ if ((node.objectName as ObjectName).getKeyProperty("id") == searchObject)
+ return node;
+ }
+ }
+
+ // recur
+ if (node.hasOwnProperty("children") && (node.children is Array))
+ {
+ for each (var child:Object in (node.children as Array))
+ {
+ traverseTreeForObject(child, searchType, searchObject);
+ }
+ }
+
+ // not found
+ return null;
+ }
+ }
+}
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/flex-blazeds/blob/7a58369c/apps/ds-console/console/containers/UpdateManager.as
----------------------------------------------------------------------
diff --git a/apps/ds-console/console/containers/UpdateManager.as b/apps/ds-console/console/containers/UpdateManager.as
new file mode 100755
index 0000000..1f6d7ec
--- /dev/null
+++ b/apps/ds-console/console/containers/UpdateManager.as
@@ -0,0 +1,28 @@
+////////////////////////////////////////////////////////////////////////////////
+//
+// 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 console.containers
+{
+ public interface UpdateManager
+ {
+ function registerListener(listner:UpdateListener, types:Array):void;
+ function unregisterListener(listner:UpdateListener):void;
+ function activateListener(listener:UpdateListener):void;
+ function deactivateListener(listener:UpdateListener):void;
+ }
+}
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/flex-blazeds/blob/7a58369c/apps/ds-console/console/data/Bindable3DHashMap.as
----------------------------------------------------------------------
diff --git a/apps/ds-console/console/data/Bindable3DHashMap.as b/apps/ds-console/console/data/Bindable3DHashMap.as
new file mode 100755
index 0000000..5e4088f
--- /dev/null
+++ b/apps/ds-console/console/data/Bindable3DHashMap.as
@@ -0,0 +1,110 @@
+////////////////////////////////////////////////////////////////////////////////
+//
+// 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 console.data
+{
+ import mx.collections.ArrayCollection;
+ import mx.utils.ObjectProxy;
+ import flash.events.Event;
+ import mx.events.PropertyChangeEvent;
+ import mx.events.CollectionEvent;
+ import mx.controls.listClasses.ListBase;
+
+ public class Bindable3DHashMap
+ {
+ public var objects:ObjectProxy;
+ public var objectsForKeyArray:ObjectProxy;
+
+ public function Bindable3DHashMap()
+ {
+ objects = new ObjectProxy;
+ objectsForKeyArray = new ObjectProxy;
+ }
+
+ public function updateNoPollable(object:String, key:String, value:*):void
+ {
+ if (!objectsForKeyArray.hasOwnProperty(object))
+ objectsForKeyArray[object] = new ArrayCollection;
+
+ if (!key)
+ return;
+
+ var keysForKeyArray:ArrayCollection = objectsForKeyArray[object] as ArrayCollection;
+
+ var foundKey:Boolean = false;
+ for (var i:int = 0; i < keysForKeyArray.length; i++)
+ {
+ if ((keysForKeyArray[i].hasOwnProperty("Property")) && (keysForKeyArray[i]["Property"] == key))
+ {
+ keysForKeyArray[i]["Value"] = value;
+ foundKey = true;
+ break;
+ }
+ }
+
+ if (!foundKey)
+ keysForKeyArray.addItem({Property: key, Value:value});
+
+ keysForKeyArray.dispatchEvent(new CollectionEvent(CollectionEvent.COLLECTION_CHANGE));
+ }
+
+ public function update(object:String, key:String, value:*):void
+ {
+ if (!objects.hasOwnProperty(object))
+ {
+ objects[object] = new ObjectProxy;
+ }
+
+ if (!key)
+ return;
+
+ var keys:ObjectProxy = objects[object] as ObjectProxy;
+
+ if (!keys.hasOwnProperty(key))
+ keys[key] = new ArrayCollection;
+
+ (keys[key] as ArrayCollection).addItem({Name: key, Value: value});
+ (keys[key] as ArrayCollection).dispatchEvent(new CollectionEvent(CollectionEvent.COLLECTION_CHANGE));
+
+ updateNoPollable(object, key, value);
+ }
+
+ public function getBindableKeyArray(object:String):ArrayCollection
+ {
+ if (!objectsForKeyArray.hasOwnProperty(object))
+ objectsForKeyArray[object] = new ArrayCollection;
+
+ return (objectsForKeyArray[object] as ArrayCollection);
+ }
+
+ public function getBindableDataArray(object:String, key:String):ArrayCollection
+ {
+ if (!objects.hasOwnProperty(object))
+ objects[object] = new ObjectProxy;
+
+ var keys:ObjectProxy = objects[object] as ObjectProxy;
+ return keys[key] as ArrayCollection;
+ }
+
+ public function clearData():void
+ {
+ objects = new ObjectProxy;
+ objectsForKeyArray = new ObjectProxy;
+ }
+ }
+}
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/flex-blazeds/blob/7a58369c/apps/ds-console/console/events/ManagementOperationInvokeEvent.as
----------------------------------------------------------------------
diff --git a/apps/ds-console/console/events/ManagementOperationInvokeEvent.as b/apps/ds-console/console/events/ManagementOperationInvokeEvent.as
new file mode 100755
index 0000000..1390c4d
--- /dev/null
+++ b/apps/ds-console/console/events/ManagementOperationInvokeEvent.as
@@ -0,0 +1,99 @@
+////////////////////////////////////////////////////////////////////////////////
+//
+// 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 console.events
+{
+
+import flash.events.Event;
+
+/**
+ * Used to request that an MBean operation be invoked.
+ */
+public class ManagementOperationInvokeEvent extends Event
+{
+ /**
+ * Constructs an instance of this event with the specified type, target,
+ * and message.
+ */
+ public function ManagementOperationInvokeEvent(mbean:String, name:String, values:Array, signature:Array)
+ {
+ super(INVOKE, false, false);
+ _mbean = mbean;
+ _name = name;
+ _values = values;
+ _signature = signature;
+ }
+
+ /**
+ * The mbean of the operation to invoke.
+ */
+ public function get mbean():String
+ {
+ return _mbean;
+ }
+
+ /**
+ * The name of the operation to invoke.
+ */
+ public function get name():String
+ {
+ return _name;
+ }
+
+ /**
+ * The argument values for the operation.
+ */
+ public function get values():Array
+ {
+ return _values;
+ }
+
+ /**
+ * The type signature for operation arguments.
+ */
+ public function get signature():Array
+ {
+ return _signature;
+ }
+
+ /**
+ * Because this event can be re-dispatched we have to implement clone to
+ * return the appropriate type, otherwise we will get just the standard
+ * event type.
+ *
+ * @return Clone of this <code>ManagementOperationInvokeEvent</code>
+ */
+ override public function clone():Event
+ {
+ return new ManagementOperationInvokeEvent(_mbean, _name, _values, _signature);
+ }
+
+ /**
+ * The event type.
+ */
+ public static const INVOKE:String = "invoke";
+
+ // private members
+ private var _name:String;
+ private var _values:Array;
+ private var _signature:Array;
+ private var _mbean:String;
+}
+
+}
http://git-wip-us.apache.org/repos/asf/flex-blazeds/blob/7a58369c/apps/samples-spring/README.txt
----------------------------------------------------------------------
diff --git a/apps/samples-spring/README.txt b/apps/samples-spring/README.txt
new file mode 100755
index 0000000..16c2166
--- /dev/null
+++ b/apps/samples-spring/README.txt
@@ -0,0 +1,5 @@
+All of the files contained in this directory and any subdirectories are
+considered "Sample Code" under the terms of the end user license agreement
+that accompanies this product. Please consult such end user license agreement
+for details about your rights with respect to such files.
+
http://git-wip-us.apache.org/repos/asf/flex-blazeds/blob/7a58369c/apps/samples-spring/WEB-INF/classes/commons-logging.properties
----------------------------------------------------------------------
diff --git a/apps/samples-spring/WEB-INF/classes/commons-logging.properties b/apps/samples-spring/WEB-INF/classes/commons-logging.properties
new file mode 100755
index 0000000..46c3be4
--- /dev/null
+++ b/apps/samples-spring/WEB-INF/classes/commons-logging.properties
@@ -0,0 +1,19 @@
+# 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.
+
+# suppress logging for 3rd-party libraries using commons-logging
+# Flex logging is not configured here. It is configured through in the logging section of flex-config.xml
+org.apache.commons.logging.LogFactory=org.apache.commons.logging.impl.LogFactoryImpl
+org.apache.commons.logging.Log=org.apache.commons.logging.impl.NoOpLog
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/flex-blazeds/blob/7a58369c/apps/samples-spring/WEB-INF/flex-servlet.xml
----------------------------------------------------------------------
diff --git a/apps/samples-spring/WEB-INF/flex-servlet.xml b/apps/samples-spring/WEB-INF/flex-servlet.xml
new file mode 100755
index 0000000..158453b
--- /dev/null
+++ b/apps/samples-spring/WEB-INF/flex-servlet.xml
@@ -0,0 +1,70 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+
+ 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.
+
+-->
+<beans xmlns="http://www.springframework.org/schema/beans"
+ xmlns:flex="http://www.springframework.org/schema/flex"
+ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xsi:schemaLocation="
+ http://www.springframework.org/schema/beans
+ http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
+ http://www.springframework.org/schema/flex
+ http://www.springframework.org/schema/flex/spring-flex-1.5.xsd">
+
+ <flex:message-broker>
+ <flex:message-service
+ default-channels="my-streaming-amf,my-longpolling-amf,my-polling-amf" />
+ <flex:secured />
+ </flex:message-broker>
+
+ <!-- Expose the productService bean for BlazeDS remoting -->
+ <flex:remoting-destination ref="productService" />
+
+ <!-- Expose the contactService bean for BlazeDS remoting -->
+ <flex:remoting-destination ref="contactService" />
+
+ <!-- Expose the securedProductService bean for BlazeDS remoting -->
+ <flex:remoting-destination ref="securedProductService" />
+
+ <!-- Helper for getting the currently authenticated user -->
+ <bean id="securityHelper" class="org.springframework.flex.samples.secured.Security3Helper">
+ <flex:remoting-destination/>
+ </bean>
+
+ <!-- Messaging destinations -->
+ <flex:message-destination id="chat" />
+ <flex:message-destination id="simple-feed" />
+ <flex:message-destination id="market-feed" allow-subtopics="true" subtopic-separator="." />
+
+ <!-- MessageTemplate makes it easy to publish messages -->
+ <bean id="defaultMessageTemplate" class="org.springframework.flex.messaging.MessageTemplate" />
+
+ <!-- Pojo used to start and stop the data feed that pushes data in the 'simple-feed' destination -->
+ <bean id="simpleFeedStarter" class="org.springframework.flex.samples.simplefeed.SimpleFeed">
+ <constructor-arg ref="defaultMessageTemplate" />
+ <flex:remoting-destination />
+ </bean>
+
+ <!-- Pojo used to start and stop the data feed that pushes data in the 'market-feed' destination -->
+ <bean id="marketFeedStarter" class="org.springframework.flex.samples.marketfeed.MarketFeed">
+ <constructor-arg ref="defaultMessageTemplate" />
+ <constructor-arg value="stocklist.xml" />
+ <flex:remoting-destination />
+ </bean>
+
+</beans>
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/flex-blazeds/blob/7a58369c/apps/samples-spring/WEB-INF/flex-src/chat/.actionScriptProperties
----------------------------------------------------------------------
diff --git a/apps/samples-spring/WEB-INF/flex-src/chat/.actionScriptProperties b/apps/samples-spring/WEB-INF/flex-src/chat/.actionScriptProperties
new file mode 100755
index 0000000..b5390a8
--- /dev/null
+++ b/apps/samples-spring/WEB-INF/flex-src/chat/.actionScriptProperties
@@ -0,0 +1,38 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!--
+
+ 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.
+
+-->
+<actionScriptProperties mainApplicationPath="chat.mxml" projectUUID="46e6c4ea-bda5-466a-9d9a-a020928ae0f8" version="6">
+ <compiler additionalCompilerArguments="-locale en_US" autoRSLOrdering="true" copyDependentFiles="true" fteInMXComponents="false" generateAccessible="true" htmlExpressInstall="true" htmlGenerate="true" htmlHistoryManagement="true" htmlPlayerVersionCheck="true" includeNetmonSwc="false" outputFolderPath="bin-debug" sourceFolderPath="src" strict="true" targetPlayerVersion="0.0.0" useApolloConfig="false" useDebugRSLSwfs="true" verifyDigests="true" warn="true">
+ <compilerSourcePath/>
+ <libraryPath defaultLinkType="0">
+ <libraryPathEntry kind="4" path="">
+ <excludedEntries>
+ <libraryPathEntry kind="3" linkType="1" path="${PROJECT_FRAMEWORKS}/libs/flex.swc" useDefaultLinkType="false"/>
+ </excludedEntries>
+ </libraryPathEntry>
+ <libraryPathEntry kind="1" linkType="1" path="libs"/>
+ </libraryPath>
+ <sourceAttachmentPath/>
+ </compiler>
+ <applications>
+ <application path="chat.mxml"/>
+ </applications>
+ <modules/>
+ <buildCSSFiles/>
+</actionScriptProperties>
http://git-wip-us.apache.org/repos/asf/flex-blazeds/blob/7a58369c/apps/samples-spring/WEB-INF/flex-src/chat/.flexProperties
----------------------------------------------------------------------
diff --git a/apps/samples-spring/WEB-INF/flex-src/chat/.flexProperties b/apps/samples-spring/WEB-INF/flex-src/chat/.flexProperties
new file mode 100755
index 0000000..1d99468
--- /dev/null
+++ b/apps/samples-spring/WEB-INF/flex-src/chat/.flexProperties
@@ -0,0 +1,20 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!--
+
+ 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.
+
+-->
+<flexProperties enableServiceManager="false" flexServerFeatures="0" flexServerType="0" toolCompile="true" useServerFlexSDK="false" version="2"/>
http://git-wip-us.apache.org/repos/asf/flex-blazeds/blob/7a58369c/apps/samples-spring/WEB-INF/flex-src/chat/.project
----------------------------------------------------------------------
diff --git a/apps/samples-spring/WEB-INF/flex-src/chat/.project b/apps/samples-spring/WEB-INF/flex-src/chat/.project
new file mode 100755
index 0000000..0cb0ea0
--- /dev/null
+++ b/apps/samples-spring/WEB-INF/flex-src/chat/.project
@@ -0,0 +1,36 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+
+ 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.
+
+-->
+<projectDescription>
+ <name>chat</name>
+ <comment></comment>
+ <projects>
+ </projects>
+ <buildSpec>
+ <buildCommand>
+ <name>com.adobe.flexbuilder.project.flexbuilder</name>
+ <arguments>
+ </arguments>
+ </buildCommand>
+ </buildSpec>
+ <natures>
+ <nature>com.adobe.flexbuilder.project.flexnature</nature>
+ <nature>com.adobe.flexbuilder.project.actionscriptnature</nature>
+ </natures>
+</projectDescription>
http://git-wip-us.apache.org/repos/asf/flex-blazeds/blob/7a58369c/apps/samples-spring/WEB-INF/flex-src/chat/build.xml
----------------------------------------------------------------------
diff --git a/apps/samples-spring/WEB-INF/flex-src/chat/build.xml b/apps/samples-spring/WEB-INF/flex-src/chat/build.xml
new file mode 100755
index 0000000..e5ee6d4
--- /dev/null
+++ b/apps/samples-spring/WEB-INF/flex-src/chat/build.xml
@@ -0,0 +1,76 @@
+<?xml version="1.0"?>
+<!--
+
+ 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.
+
+-->
+<project name="samples-spring.war/build.xml" default="main" basedir="../../../../../">
+
+ <property environment="env" />
+ <property file="${basedir}/build.properties"/>
+ <property name="samples-spring.war" value="${basedir}/apps/samples-spring"/>
+ <property name="context.root" value="samples-spring" />
+ <property name="application.name" value="chat" />
+ <property name="application.file" value="chat" />
+ <property name="application.bin.dir" value="${samples-spring.war}/chat" />
+ <property name="application.src.dir" value="${samples-spring.war}/WEB-INF/flex-src/chat/src" />
+
+ <target name="main" depends="clean,compile-swf" />
+
+ <target name="compile-swf">
+
+ <taskdef resource="flexTasks.tasks" classpath="${basedir}/ant/lib/flexTasks.jar" />
+
+ <property name="FLEX_HOME" value="${basedir}"/>
+
+ <mxmlc file="${application.src.dir}/${application.file}.mxml"
+ output="${application.bin.dir}/${application.file}.swf"
+ actionscript-file-encoding="UTF-8"
+ keep-generated-actionscript="false"
+ incremental="false"
+ services="${samples-spring.war}/WEB-INF/flex/services-config.xml"
+ context-root="${context.root}"
+ locale="en_US">
+ <load-config filename="${basedir}/frameworks/flex-config.xml"/>
+ <license product="flexbuilder3" serial-number="${env.fb3_license}"/>
+ <source-path path-element="${basedir}/frameworks"/>
+ <external-library-path/>
+ <metadata>
+ <publisher name="${manifest.Implementation-Vendor}" />
+ <creator name="${manifest.Implementation-Vendor}" />
+ </metadata>
+ </mxmlc>
+
+ <html-wrapper title="${application.name}"
+ height="100%"
+ width="100%"
+ application="app"
+ swf="${application.file}"
+ version-major="10"
+ version-minor="0"
+ version-revision="0"
+ output="${application.bin.dir}"/>
+
+ </target>
+
+ <target name="clean" description="--> Removes jars and classes">
+ <delete quiet="true" includeemptydirs="true">
+ <fileset dir="${application.bin.dir}" includes="*.swf,index.html"/>
+ <fileset dir="${application.bin.dir}/history" />
+ </delete>
+ </target>
+
+</project>
http://git-wip-us.apache.org/repos/asf/flex-blazeds/blob/7a58369c/apps/samples-spring/WEB-INF/flex-src/chat/html-template/history/history.css
----------------------------------------------------------------------
diff --git a/apps/samples-spring/WEB-INF/flex-src/chat/html-template/history/history.css b/apps/samples-spring/WEB-INF/flex-src/chat/html-template/history/history.css
new file mode 100755
index 0000000..4a7f791
--- /dev/null
+++ b/apps/samples-spring/WEB-INF/flex-src/chat/html-template/history/history.css
@@ -0,0 +1,22 @@
+/*
+ * 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.
+ */
+/* This CSS stylesheet defines styles used by required elements in a flex application page that supports browser history */
+
+#ie_historyFrame { width: 0px; height: 0px; display:none }
+#firefox_anchorDiv { width: 0px; height: 0px; display:none }
+#safari_formDiv { width: 0px; height: 0px; display:none }
+#safari_rememberDiv { width: 0px; height: 0px; display:none }