You are viewing a plain text version of this content. The canonical link for it is here.
Posted to xap-commits@incubator.apache.org by mt...@apache.org on 2006/10/09 23:27:52 UTC
svn commit: r454553 - in /incubator/xap/trunk:
WebContent/examples/dataBinding/ src/xap/data/bridge/
src/xap/data/controller/ src/xap/data/datasource/ src/xap/data/formatter/
src/xap/taghandling/
Author: mturyn
Date: Mon Oct 9 16:27:52 2006
New Revision: 454553
URL: http://svn.apache.org/viewvc?view=rev&rev=454553
Log:
Added MessageFormatterBridge, examples using it, and examples using the bind('select=...;formatter=...') syntax.
Added:
incubator/xap/trunk/WebContent/examples/dataBinding/EmployeesArrays_json.js
incubator/xap/trunk/WebContent/examples/dataBinding/messageFormatter.html
incubator/xap/trunk/WebContent/examples/dataBinding/messageFormatter.xal
incubator/xap/trunk/WebContent/examples/dataBinding/messageFormatter_altSyntax.html
incubator/xap/trunk/WebContent/examples/dataBinding/messageFormatter_altSyntax.xal
incubator/xap/trunk/src/xap/data/bridge/MessageFormatterBridge.js
incubator/xap/trunk/src/xap/data/formatter/MessageFormatter.js
Modified:
incubator/xap/trunk/WebContent/examples/dataBinding/jsonDatasource.xal
incubator/xap/trunk/src/xap/data/bridge/DecimalFormatterBridge.js
incubator/xap/trunk/src/xap/data/bridge/FormatterBridge.js
incubator/xap/trunk/src/xap/data/bridge/FormatterChainBridge.js
incubator/xap/trunk/src/xap/data/bridge/ObjectDataSourceBridge.js
incubator/xap/trunk/src/xap/data/controller/Binding.js
incubator/xap/trunk/src/xap/data/controller/ContextStack.js
incubator/xap/trunk/src/xap/data/datasource/JavascriptDataSource.js
incubator/xap/trunk/src/xap/data/datasource/JsonDataSource.js
incubator/xap/trunk/src/xap/taghandling/plugin.xml
Added: incubator/xap/trunk/WebContent/examples/dataBinding/EmployeesArrays_json.js
URL: http://svn.apache.org/viewvc/incubator/xap/trunk/WebContent/examples/dataBinding/EmployeesArrays_json.js?view=auto&rev=454553
==============================================================================
--- incubator/xap/trunk/WebContent/examples/dataBinding/EmployeesArrays_json.js (added)
+++ incubator/xap/trunk/WebContent/examples/dataBinding/EmployeesArrays_json.js Mon Oct 9 16:27:52 2006
@@ -0,0 +1,24 @@
+
+// Used to test the use of message formats:
+var employees = {
+ "arrays":[
+ ["Jeanne","Doe","3791"],
+ ["zero","one","two","three","four","five","six"],
+ ["Mary","Roe","1788"],
+ ["Ameesh","Chakravarti","1317"],
+ ["Arne","Sachnussen","9128"],
+ ["Manny","Fein","1940"],
+ ["Vipul","Periwal","3743"],
+ ["Xiuxiu","Guo","6742"],
+ ["Burt","Ernesson","8045"],
+ ["John","Kellogg","7091","Hodgman"],
+ ["Larry","Bendix","3183"],
+ ["Daryl","Bendix","6667","Briand"],
+ ["Larry","Bendix","3742"],
+ ["Bob","Dobson","3166"],
+ ["Jean","Poole","1138"],
+ ["Nozomi","Takahashi","0023"],
+ ["Deanne","Ilium","2171"]
+ ]
+} ;
+
Modified: incubator/xap/trunk/WebContent/examples/dataBinding/jsonDatasource.xal
URL: http://svn.apache.org/viewvc/incubator/xap/trunk/WebContent/examples/dataBinding/jsonDatasource.xal?view=diff&rev=454553&r1=454552&r2=454553
==============================================================================
--- incubator/xap/trunk/WebContent/examples/dataBinding/jsonDatasource.xal (original)
+++ incubator/xap/trunk/WebContent/examples/dataBinding/jsonDatasource.xal Mon Oct 9 16:27:52 2006
@@ -60,7 +60,7 @@
-->
<xal:cell text="{*('id')}" textAlign="right" fontFamily="Garamond" fontSize="11pt"/>
<xal:cell text="{*('lname')}" fontFamily="Garamond" fontSize="11pt"/>
- <xal:cell text="{*('fname')}" fontFamily="Garamond" fontSize="11pt"/>
+ <xal:cell text="{*('fname')}" fontFamily="Garamond" fontSize="11pt"/>
</xal:row>
</iterator>
Added: incubator/xap/trunk/WebContent/examples/dataBinding/messageFormatter.html
URL: http://svn.apache.org/viewvc/incubator/xap/trunk/WebContent/examples/dataBinding/messageFormatter.html?view=auto&rev=454553
==============================================================================
--- incubator/xap/trunk/WebContent/examples/dataBinding/messageFormatter.html (added)
+++ incubator/xap/trunk/WebContent/examples/dataBinding/messageFormatter.html Mon Oct 9 16:27:52 2006
@@ -0,0 +1,83 @@
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+ <title>
+ Testing messageFormatter tag
+ whilst iterating over records
+ from a JSON data source:
+ </title>
+
+ <style type="text/css">
+ <!--
+ @import url(../../css/xapDefault.css);
+ -->
+ </style>
+
+ <!-- Keep dojo from trying to scan this whole page for dojoType'd tags: -->
+ <script type="text/javascript">
+ djConfig = {
+ parseWidgets: false
+ };
+ </script>
+
+ <script language="JavaScript" type="text/javascript" src="../../xapcore.js"></script>
+ <!-- For MCO code -->
+ <script language="JavaScript" type="text/javascript" src="Layout.js"> </script>
+
+<!--
+Remove debugging in a final check, since debugging's
+alternate loading method (using <script/> tags) can
+mask forgetting a .require(<className>) in the code:
+-->
+
+ <script language="JavaScript" type="text/javascript">
+ Xap._sourceRootDir = "../../" ;
+ Xap.addDebuggables(
+ "xap.data.DataFramework",
+ "xap.data.DataServiceFactory",
+ "xap.data.DataServiceImpl",
+ "xap.data.bridge.DataAttributeConverter",
+ "xap.data.bridge.DataFrameworkBridge",
+ "xap.data.bridge.DataSourceBridge",
+ "xap.data.bridge.FormatterBridge",
+ "xap.data.bridge.JavascriptDataSourceBridge",
+ "xap.data.bridge.JsonDataSourceBridge",
+ "xap.data.bridge.ObjectDataSourceBridge",
+ "xap.data.controller.ContextFrame",
+ "xap.data.controller.Iterator",
+ "xap.data.controller.Binding",
+ "xap.data.datasource.AbstractDataSet",
+ "xap.data.datasource.AbstractDataSource",
+ "xap.data.datasource.ArrayDataSet",
+ "xap.data.datasource.DataSetFactory",
+ "xap.data.datasource.DataSourceContainerImpl",
+ "xap.data.datasource.DataSourceImpl",
+ "xap.data.datasource.JavascriptDataSource",
+ "xap.data.datasource.JsonDataSource",
+ "xap.data.datasource.SimpleDocumentDataSource",
+ "xap.data.formatter.MessageFormatter",
+ "xap.resolver.AttributeResolutionHandler",
+ "xap.session.ClientSession",
+ "xap.session.DeclarativeArgumentParser",
+ "xap.taghandling.AbstractTagImpl",
+ "xap.taghandling.AttributeConverter",
+ "xap.util.MessageFormat",
+ "xap.xml.dom.Document"
+
+ ) ;
+ Xap._loadDebuggables() ;
+ </script>
+
+ <!--Needed for the mco tag in the xal file: -->
+ <script language="JavaScript" src="Layout.js"> </script>
+
+ </head>
+
+ <body onload="Xap.createAllPredefinedSessions();">
+ <h3>Testing messageFormatter on employee data from a JSON document:</h3>
+ <div style="left:100px;top:100px" xapId="MfmtExample" xapSrc="messageFormatter.xal" xapToolkit="dojo" xapContext="../../"></div>
+ <div top="380px">
+ (see <a href="messageFormatter.xal">messageFormatter.xal</a>, <a href="EmployeesArrays_json.js">EmployeesArrays_json.js</a>.)
+ </div>
+ </body>
+</html>
Added: incubator/xap/trunk/WebContent/examples/dataBinding/messageFormatter.xal
URL: http://svn.apache.org/viewvc/incubator/xap/trunk/WebContent/examples/dataBinding/messageFormatter.xal?view=auto&rev=454553
==============================================================================
--- incubator/xap/trunk/WebContent/examples/dataBinding/messageFormatter.xal (added)
+++ incubator/xap/trunk/WebContent/examples/dataBinding/messageFormatter.xal Mon Oct 9 16:27:52 2006
@@ -0,0 +1,96 @@
+<xal
+ xmlns="http://www.openxal.org/xal"
+ xmlns:xal="http://www.openxal.org/xal"
+ xmlns:data="http://www.openxal.org/data"
+ xmlns:xm="http://www.openxal.org/xmodify"
+>
+
+ <jsonDataSource
+ xmlns="http://www.openxal.org/data"
+ id="employees"
+ path="EmployeesArrays_json.js"
+ source="employees"
+ />
+
+
+ <data:messageFormatter
+ id="fmtTheLabelString"
+ format="arg 1:'{1}', arg 0:'{0}', arg 2:'{2}', arg 6:'{6}', arg 5:'{5}', arg 4:'{4}', arg 3:'{3}'."
+ />
+
+ <data:binding
+ xmlns="http://www.openxal.org/data"
+ dataSource="employees"
+ select="arrays"
+ id="employeesArray"
+ />
+
+ <data:binding
+ xmlns="http://www.openxal.org/data"
+ dataSource="employees"
+ select="arrays[1]"
+ id="second"
+ />
+
+ <data:binding
+ xmlns="http://www.openxal.org/data"
+ dataSource="employees"
+ select="arrays[1]"
+ id="secondFormatted"
+ formatter="fmtTheLabelString"
+ />
+
+
+
+
+ <xm:modifications>
+ <xm:append select="/xal">
+ <table width="100%" height="140px" borderStyle="dashed" borderWidth="1px">
+ <row>
+ <cell text="Data:" textAlign="left" fontSize="11pt"/>
+ </row>
+ <row>
+ <cell text="{bind(binding:second)}"
+ fontSize="12pt"
+ />
+ </row>
+ <row>
+ <cell text="Format string:" textAlign="left" fontSize="11pt"/>
+ </row>
+ <row>
+ <cell text="arg 1:'{1}', arg 0:'{0}', arg 2:'{2}', arg 6:'{6}', arg 5:'{5}', arg 4:'{4}', arg 3:'{3}'."
+ fontSize="12pt"
+ />
+ </row>
+ <row>
+ <cell text="Result:" textAlign="left" fontSize="11pt"/>
+ </row>
+ <row>
+ <cell text="{bind(binding:secondFormatted)}"
+ fontSize="13pt"
+ />
+ </row>
+ </table>
+
+ <table>
+ <!-- Iterator -->
+ <data:iterator
+ name="anIterator"
+ dataSource="employees"
+ select="arrays"
+ type="ONE_WAY"
+ formatter="fmtTheLabelString"
+ >
+ <row>
+ <cell text="{*('')}"/>
+ </row>
+
+ </data:iterator>
+ </table>
+
+
+
+
+ </xm:append>
+ </xm:modifications>
+</xal>
Added: incubator/xap/trunk/WebContent/examples/dataBinding/messageFormatter_altSyntax.html
URL: http://svn.apache.org/viewvc/incubator/xap/trunk/WebContent/examples/dataBinding/messageFormatter_altSyntax.html?view=auto&rev=454553
==============================================================================
--- incubator/xap/trunk/WebContent/examples/dataBinding/messageFormatter_altSyntax.html (added)
+++ incubator/xap/trunk/WebContent/examples/dataBinding/messageFormatter_altSyntax.html Mon Oct 9 16:27:52 2006
@@ -0,0 +1,86 @@
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+ <title>
+ Testing the bind('select=...;formatter=...')
+ syntax with the messageFormatter tag
+ and a JSON data source.
+
+ </title>
+
+ <style type="text/css">
+ <!--
+ @import url(../../css/xapDefault.css);
+ -->
+ </style>
+
+ <!-- Keep dojo from trying to scan this whole page for dojoType'd tags: -->
+ <script type="text/javascript">
+ djConfig = {
+ parseWidgets: false
+ };
+ </script>
+
+ <script language="JavaScript" type="text/javascript" src="../../xapcore.js"></script>
+ <!-- For MCO code -->
+ <script language="JavaScript" type="text/javascript" src="Layout.js"> </script>
+
+<!--
+Remove debugging in a final check, since debugging's
+alternate loading method (using <script/> tags) can
+mask forgetting a .require(<className>) in the code:
+-->
+
+ <!-- script language="JavaScript" type="text/javascript">
+ Xap._sourceRootDir = "../../" ;
+ Xap.addDebuggables(
+ "xap.data.DataFramework",
+ "xap.data.DataServiceFactory",
+ "xap.data.DataServiceImpl",
+ "xap.data.bridge.DataAttributeConverter",
+ "xap.data.bridge.DataFrameworkBridge",
+ "xap.data.bridge.DataSourceBridge",
+ "xap.data.bridge.FormatterBridge",
+ "xap.data.bridge.JavascriptDataSourceBridge",
+ "xap.data.bridge.JsonDataSourceBridge",
+ "xap.data.bridge.ObjectDataSourceBridge",
+ "xap.data.controller.ContextFrame",
+ "xap.data.controller.Iterator",
+ "xap.data.controller.Binding",
+ "xap.data.datasource.AbstractDataSet",
+ "xap.data.datasource.AbstractDataSource",
+ "xap.data.datasource.ArrayDataSet",
+ "xap.data.datasource.DataSetFactory",
+ "xap.data.datasource.DataSourceContainerImpl",
+ "xap.data.datasource.DataSourceImpl",
+ "xap.data.datasource.JavascriptDataSource",
+ "xap.data.datasource.JsonDataSource",
+ "xap.data.datasource.SimpleDocumentDataSource",
+ "xap.data.formatter.MessageFormatter",
+ "xap.resolver.AttributeResolutionHandler",
+ "xap.session.ClientSession",
+ "xap.session.DeclarativeArgumentParser",
+ "xap.taghandling.AbstractTagImpl",
+ "xap.taghandling.AttributeConverter",
+ "xap.util.MessageFormat",
+ "xap.xml.dom.Document"
+
+ ) ;
+ Xap._loadDebuggables() ;
+ </script -->
+
+ <!--Needed for the mco tag in the xal file: -->
+ <script language="JavaScript" src="Layout.js"> </script>
+
+ </head>
+
+ <body onload="Xap.createAllPredefinedSessions();">
+ <h3>Testing messageFormatter and the <br/>
+ <code><font size="+1">bind('select=...;formatter=...')</font></code><br/>
+ syntax on data from a JSON document:</h3>
+ <div style="left:100px;top:100px" xapId="Mfmt_altExample" xapSrc="messageFormatter_altSyntax.xal" xapToolkit="dojo" xapContext="../../"></div>
+ <div top="380px">
+ (see <a href="messageFormatter_altSyntax.xal">messageFormatter_altSyntax.xal</a>, <a href="EmployeesArrays_json.js">EmployeesArrays_json.js</a>.)
+ </div>
+ </body>
+</html>
Added: incubator/xap/trunk/WebContent/examples/dataBinding/messageFormatter_altSyntax.xal
URL: http://svn.apache.org/viewvc/incubator/xap/trunk/WebContent/examples/dataBinding/messageFormatter_altSyntax.xal?view=auto&rev=454553
==============================================================================
--- incubator/xap/trunk/WebContent/examples/dataBinding/messageFormatter_altSyntax.xal (added)
+++ incubator/xap/trunk/WebContent/examples/dataBinding/messageFormatter_altSyntax.xal Mon Oct 9 16:27:52 2006
@@ -0,0 +1,69 @@
+<xal
+ xmlns="http://www.openxal.org/xal"
+ xmlns:xal="http://www.openxal.org/xal"
+ xmlns:data="http://www.openxal.org/data"
+ xmlns:xm="http://www.openxal.org/xmodify"
+>
+
+ <jsonDataSource
+ xmlns="http://www.openxal.org/data"
+ id="employees"
+ path="EmployeesArrays_json.js"
+ source="employees"
+ />
+
+
+ <data:messageFormatter
+ id="f_0"
+ format="First: {0}"
+ />
+ <data:messageFormatter
+ id="f_1"
+ format="last: {1}"
+ />
+ <data:messageFormatter
+ id="f_2"
+ format="id: {2}"
+ />
+
+ <data:binding
+ xmlns="http://www.openxal.org/data"
+ dataSource="employees"
+ select="arrays"
+ id="employeesArray"
+ />
+
+
+
+
+ <xm:modifications>
+ <xm:append select="/xal">
+ <table>
+ <!-- Iterator -->
+ <data:iterator
+ name="anIterator"
+ dataSource="employees"
+ select="arrays"
+ type="ONE_WAY"
+ >
+ <row>
+ <cell text="{bind('select=')}"/>
+ </row>
+ <row>
+ <cell text="{bind('select=;formatter=f_0')}"/>
+ <cell text="{bind('select=;formatter=f_1')}"/>
+ <cell text=". . . "/>
+ <cell text="{bind('select=;formatter=f_2')}" width="60px" textAlign="right"/>
+ </row>
+ <row>
+ <cell height="25px"/>
+ </row>
+ </data:iterator>
+ </table>
+
+
+
+
+ </xm:append>
+ </xm:modifications>
+</xal>
Modified: incubator/xap/trunk/src/xap/data/bridge/DecimalFormatterBridge.js
URL: http://svn.apache.org/viewvc/incubator/xap/trunk/src/xap/data/bridge/DecimalFormatterBridge.js?view=diff&rev=454553&r1=454552&r2=454553
==============================================================================
--- incubator/xap/trunk/src/xap/data/bridge/DecimalFormatterBridge.js (original)
+++ incubator/xap/trunk/src/xap/data/bridge/DecimalFormatterBridge.js Mon Oct 9 16:27:52 2006
@@ -53,19 +53,9 @@
/*DecimalFormatter*/
var formatter = null;
try {
-// if ( className != null &&
-// className.trim().length() != 0 ) {
-// formatter =
-// xap.data.bridgeDataAttributeConverter.
-// toClassInstance( className, DecimalFormatter.class );
-// } else {
-
formatter = new xap.data.formatter.DecimalFormatter();
-
-// }
}
catch (e) { // AttributeConversionException
- alert(e);
this.reportInvalidXmlException(xap.data.bridge.XmlDataTokens.CLASS, "decimal formatter", this.getElement(), e);
}
return formatter;
Modified: incubator/xap/trunk/src/xap/data/bridge/FormatterBridge.js
URL: http://svn.apache.org/viewvc/incubator/xap/trunk/src/xap/data/bridge/FormatterBridge.js?view=diff&rev=454553&r1=454552&r2=454553
==============================================================================
--- incubator/xap/trunk/src/xap/data/bridge/FormatterBridge.js (original)
+++ incubator/xap/trunk/src/xap/data/bridge/FormatterBridge.js Mon Oct 9 16:27:52 2006
@@ -119,9 +119,8 @@
var className = this.getElement().getAttribute(xap.xml.XmlDataTokens.CLASS);
/*Formatter*/
var formatter = null;
- try {
-// formatter = xap.data.bridge.DataAttributeConverter.toClassInstance(
-// className, Formatter.class );
+ try {
+// formatter = eval( "new "+className + () ) ;
return formatter;
}
catch (e) { // AttributeConversionException
Modified: incubator/xap/trunk/src/xap/data/bridge/FormatterChainBridge.js
URL: http://svn.apache.org/viewvc/incubator/xap/trunk/src/xap/data/bridge/FormatterChainBridge.js?view=diff&rev=454553&r1=454552&r2=454553
==============================================================================
--- incubator/xap/trunk/src/xap/data/bridge/FormatterChainBridge.js (original)
+++ incubator/xap/trunk/src/xap/data/bridge/FormatterChainBridge.js Mon Oct 9 16:27:52 2006
@@ -56,7 +56,7 @@
var formatter = null;
try {
// if ( className != null &&
-// className.trim().length() != 0 ) {
+// className.trim().length != 0 ) {
// formatter = xap.data.bridge.DataAttributeConverter.toClassInstance(className, FormatterChain.class );
//
// } else {
Added: incubator/xap/trunk/src/xap/data/bridge/MessageFormatterBridge.js
URL: http://svn.apache.org/viewvc/incubator/xap/trunk/src/xap/data/bridge/MessageFormatterBridge.js?view=auto&rev=454553
==============================================================================
--- incubator/xap/trunk/src/xap/data/bridge/MessageFormatterBridge.js (added)
+++ incubator/xap/trunk/src/xap/data/bridge/MessageFormatterBridge.js Mon Oct 9 16:27:52 2006
@@ -0,0 +1,89 @@
+/*
+ * Copyright 2006 The Apache Software Foundation.
+ *
+ * Licensed 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.
+ *
+ */
+Xap.provide("xap.data.bridge.MessageFormatterBridge");
+Xap.require("xap.data.bridge.FormatterBridge");
+Xap.require("xap.taghandling.AttributeConversionException");
+Xap.require("xap.xml.InvalidXmlException");
+//Xap.require("xap.data.InitializationException")
+Xap.require("xap.data.formatter.MessageFormatter");
+Xap.require("xap.data.formatter.JsFormatterImpl");
+
+Xap.require("xap.xml.XmlTokens");
+
+
+
+/**
+ * MessageFormatterBridge class handles the configuration element for a
+ * MessageFormatter instance.
+ *
+ * @author ikaplansky
+ */
+xap.data.bridge.MessageFormatterBridge = function () {
+ xap.data.bridge.FormatterBridge.call(this);
+};
+Xap.setupClassAsSubclassOf("xap.data.bridge.MessageFormatterBridge", "xap.data.bridge.FormatterBridge");
+
+ //-----------------------------------------------------------------------
+ // Protected Methods.
+ //-----------------------------------------------------------------------
+/**
+ * @see FormatterBridge#createFormatter()
+ *
+ * @protected
+ * @return {Formatter}
+**/
+xap.data.bridge.MessageFormatterBridge.prototype.createFormatter = function () {
+ /*String*/
+ var className = this.getElement().getAttribute(xap.xml.XmlTokens.CLASS);
+
+ /*MessageFormatter*/
+ var formatter = null;
+ try {
+ formatter = new xap.data.formatter.MessageFormatter();
+ }
+ catch (e) { // AttributeConversionException
+ this.reportInvalidXmlException(xap.data.bridge.XmlDataTokens.CLASS, "decimal formatter", this.getElement(), e);
+ }
+ return formatter;
+};
+/**
+ * @see FormatterBridge#initializeFormatter()
+ *
+ * @protected
+ * @return {void}
+ * @throws InitializationException
+**/
+xap.data.bridge.MessageFormatterBridge.prototype.initializeFormatter = function () {
+ xap.data.bridge.FormatterBridge.prototype.initializeFormatter.call(this);
+ try {
+ /*Locale*/
+ var locale = this.getLocale();
+ /*String*/
+ var format = this.getFormatPattern();
+ // TODO: Implement using the actual formatting object
+ // in the bridge class, not here---but implement it:
+ /*MessageFormat*/
+ //var theMessageFormat = new xap.data.formatter.MessageFormatter(format);
+ this.getFormatter().setFormat(format);
+ }
+ catch (e) { // InvalidXmlException
+// throw new InitializationException(
+// InitializationException.INVALID_XML_MSGID,
+// MessageFormatterBridge.class.getName(), e );
+ }
+};
+
Modified: incubator/xap/trunk/src/xap/data/bridge/ObjectDataSourceBridge.js
URL: http://svn.apache.org/viewvc/incubator/xap/trunk/src/xap/data/bridge/ObjectDataSourceBridge.js?view=diff&rev=454553&r1=454552&r2=454553
==============================================================================
--- incubator/xap/trunk/src/xap/data/bridge/ObjectDataSourceBridge.js (original)
+++ incubator/xap/trunk/src/xap/data/bridge/ObjectDataSourceBridge.js Mon Oct 9 16:27:52 2006
@@ -70,7 +70,7 @@
var dataSource = null;
try {
// if ( className != null &&
-// className.trim().length() !=0 ) {
+// className.trim().length !=0 ) {
// dataSource = /*(DataSource)*/
// DataAttributeConverter.toClassInstance( className, ObjectDataSource );
// } else {
@@ -175,8 +175,8 @@
**/
xap.data.bridge.ObjectDataSourceBridge.prototype.setSource = function( dataSource, sourcePath ) {
/*EventHandler*/
- this.eventHandler = this.getSession().getEventHandler();
- if ( this.sourcePath != null && sourcePath.trim().length() != 0 ) {
+ var eventHandler = this.getSession().getEventHandler();
+ if ( this.sourcePath != null && sourcePath.trim().length != 0 ) {
/*String*/
var objectUrl = eventHandler.qualifyObjectUrl( sourcePath );
if ( objectUrl == null ) {
Modified: incubator/xap/trunk/src/xap/data/controller/Binding.js
URL: http://svn.apache.org/viewvc/incubator/xap/trunk/src/xap/data/controller/Binding.js?view=diff&rev=454553&r1=454552&r2=454553
==============================================================================
--- incubator/xap/trunk/src/xap/data/controller/Binding.js (original)
+++ incubator/xap/trunk/src/xap/data/controller/Binding.js Mon Oct 9 16:27:52 2006
@@ -96,7 +96,7 @@
this._select = select;
this._session = session;
this._bindingType = bindingType;
- if (name != null && name.length() > 0) {
+ if (name != null && name.length > 0) {
this._source = xap.data.DataServiceFactory.getDataService(session).getDataSourceContainer().getDataSource(name);
if (this._source == null) {
// Find the ancestor iterator context with the
Modified: incubator/xap/trunk/src/xap/data/controller/ContextStack.js
URL: http://svn.apache.org/viewvc/incubator/xap/trunk/src/xap/data/controller/ContextStack.js?view=diff&rev=454553&r1=454552&r2=454553
==============================================================================
--- incubator/xap/trunk/src/xap/data/controller/ContextStack.js (original)
+++ incubator/xap/trunk/src/xap/data/controller/ContextStack.js Mon Oct 9 16:27:52 2006
@@ -78,7 +78,7 @@
* @param name{String}
**/
xap.data.controller.ContextStack.prototype.getContext = function (name) {
- if (name == null || name.length() == 0) {
+ if (name == null || name.length == 0) {
return this.getCurrentContext();
}
for (var i = 0; i < this._contextStack.size(); i++) {
Modified: incubator/xap/trunk/src/xap/data/datasource/JavascriptDataSource.js
URL: http://svn.apache.org/viewvc/incubator/xap/trunk/src/xap/data/datasource/JavascriptDataSource.js?view=diff&rev=454553&r1=454552&r2=454553
==============================================================================
--- incubator/xap/trunk/src/xap/data/datasource/JavascriptDataSource.js (original)
+++ incubator/xap/trunk/src/xap/data/datasource/JavascriptDataSource.js Mon Oct 9 16:27:52 2006
@@ -111,7 +111,10 @@
var theData = null;
// TODO: do this right instead. For the moment, all array
// return values are treated as part of an iteration:
- //var theScript = contextObject+"."+query ;
+ //var theScript = contextObject+"."+query ;
+ if(!query){
+ query = "" ;
+ }
var theScript = this.constructor.resolveIteratorMacros(query);
// This basic JS data source evaluates the query as-is, not
// considering it as an operator on the source object.
@@ -158,7 +161,10 @@
contextObject = context.getData();
}
/*Object*/
- var theData = null;
+ var theData = null;
+ if(!query){
+ query = "" ;
+ }
var theScript = this.constructor.resolveIteratorMacros(query);
// This basic JS data source evaluates the query as-is, not
// considering it as an operator on the source object.
Modified: incubator/xap/trunk/src/xap/data/datasource/JsonDataSource.js
URL: http://svn.apache.org/viewvc/incubator/xap/trunk/src/xap/data/datasource/JsonDataSource.js?view=diff&rev=454553&r1=454552&r2=454553
==============================================================================
--- incubator/xap/trunk/src/xap/data/datasource/JsonDataSource.js (original)
+++ incubator/xap/trunk/src/xap/data/datasource/JsonDataSource.js Mon Oct 9 16:27:52 2006
@@ -73,6 +73,9 @@
}
/*Object*/
var theData = null;
+ if(!query){
+ query = "" ;
+ }
// TODO: do this right instead. For the moment, all array
// return values are treated as part of an iteration:
//var theScript = contextObject+"."+query ;
@@ -81,7 +84,13 @@
// source object is the base of all queries:
// <src_obj>.a_0()...a_n()
if( theScript.length>0){
- theScript = "contextObject." + theScript;
+ // Unless this is an array op., e.g. 'select="[57]"'
+ // add the dot dereferencing ooperator which will act
+ // on the source:
+ if (theScript.trim()[0] != "[" ){
+ theScript = "."+theScript ;
+ }
+ theScript = "contextObject" + theScript;
try {
theData = eval(theScript);
}
@@ -124,11 +133,20 @@
/*Object*/
var theData = null;
+ if(!query){
+ query = "" ;
+ }
var theScript = this.constructor.resolveIteratorMacros(query);
// This is a JSON bridge, the source object
// is the base of all queries: <src_obj>.a_0()...a_n()
if(theScript.length>0){
- theScript = "contextObject." + theScript;
+ // Unless this is an array op., e.g. 'select="[57]"'
+ // add the dot dereferencing ooperator which will act
+ // on the source:
+ if (theScript.trim()[0] != "[" ){
+ theScript = "."+theScript ;
+ }
+ theScript = "contextObject" + theScript;
try {
theData = eval(theScript);
}
Added: incubator/xap/trunk/src/xap/data/formatter/MessageFormatter.js
URL: http://svn.apache.org/viewvc/incubator/xap/trunk/src/xap/data/formatter/MessageFormatter.js?view=auto&rev=454553
==============================================================================
--- incubator/xap/trunk/src/xap/data/formatter/MessageFormatter.js (added)
+++ incubator/xap/trunk/src/xap/data/formatter/MessageFormatter.js Mon Oct 9 16:27:52 2006
@@ -0,0 +1,104 @@
+
+//Xap.require("xap.util.FormatUtils") ;
+//Xap.require("xap.util.Log") ;
+//Xap.require("xap.util.ResourceDictionary") ;
+/**
+ * MessageFormatter is used to format string messages.
+ *
+ * <p/>
+ * Here is an example of declaring a MessageFormatter instance: <br/><br/>
+ *
+ * <messageFormatter xmlns="http://nexaweb.com/data" id="mf1"
+ * format="This is a message with a single Date: {0,date}"/> <br/><br/>
+ *
+ * The argument to the MessageFormatter is expected to be an Object[] where
+ * each Object is of the type expected by the format pattern (specified as the
+ * 'format' attribute in the messageFormatter element). If the argument is not
+ * an Object[], it will be converted into an Object[].
+ *
+ * <p/>
+ * In addition, this formatter will convert each Object in the Object[] into the
+ * type expected by the underlying java's MessageFormat instance. For example,
+ * the formatter declared above could be called with a single String that
+ * represents a Long and the MessageFormatter will convert it into an Object[]
+ * of size 1 that has a Date object as its only element constructed with the
+ * passed in Long (the String will get converted into a Long object first).
+ *
+ * @author ikaplansky
+ */
+Xap.provide("xap.data.formatter.MessageFormatter");
+
+// Superclass
+Xap.require("xap.data.formatter.JsFormatterImpl");
+// Peer
+Xap.require("xap.util.MessageFormat");
+
+//-----------------------------------------------------------------------
+// Constructors.
+//-----------------------------------------------------------------------
+xap.data.formatter.MessageFormatter = function () {
+ xap.data.formatter.JsFormatterImpl.call(this);
+};
+Xap.setupClassAsSubclassOf("xap.data.formatter.MessageFormatter", "xap.data.formatter.JsFormatterImpl");
+
+ //-----------------------------------------------------------------------
+ // Constants.
+ //-----------------------------------------------------------------------
+/*private static final String*/
+xap.data.formatter.MessageFormatter.ATTEMPT_AGRESSIVE_CONVERSION_MSGID = "attemptAggressiveConversion";
+
+
+
+ //-----------------------------------------------------------------------
+ // Public Methods.
+ //-----------------------------------------------------------------------
+/**
+ * @return the underlying java.text.MessageFormat object used by
+ * this formatter.
+ *
+ * @public
+ * @return {MessageFormat}
+**/
+xap.data.formatter.MessageFormatter.prototype.getMessageFormat = function () {
+ return /*(MessageFormat)*/
+ this.getFormat();
+};
+
+ //-----------------------------------------------------------------------
+ // Protected Methods.
+ //-----------------------------------------------------------------------
+/**
+ * @see AbstractJavaFormatter#formatObject
+ *
+ * @protected
+ * @return {Object}
+ *
+ * @param object{Object}
+ * @throws FormatException
+**/
+xap.data.formatter.MessageFormatter.prototype.formatObject = function (object) {
+ var result = null ;
+ try {
+ var formatStr = this.getFormat();
+ result = xap.data.formatter.MessageFormatter.format(object, formatStr);
+ }
+ catch (e) { // IllegalArgumentException
+ this.constructor.s_log.error("MessageFormatter.formatObject: \n" + e);
+ throw e;
+ }
+ return result ;
+};
+xap.data.formatter.MessageFormatter.format = function (obj, fmtStr) {
+ var arrObj = null;
+ if (typeof obj == "object" && typeof obj.length != "undefined") {
+ arrObj = new Array(obj.length);
+ for (var j = 0; j < obj.length; ++j) {
+ arrObj[j] = obj[j];
+ }
+ } else {
+ arrObj = [("" + obj)];
+ }
+ var result = xap.util.MessageFormat.format(fmtStr, arrObj);
+ return result;
+};
+
Modified: incubator/xap/trunk/src/xap/taghandling/plugin.xml
URL: http://svn.apache.org/viewvc/incubator/xap/trunk/src/xap/taghandling/plugin.xml?view=diff&rev=454553&r1=454552&r2=454553
==============================================================================
--- incubator/xap/trunk/src/xap/taghandling/plugin.xml (original)
+++ incubator/xap/trunk/src/xap/taghandling/plugin.xml Mon Oct 9 16:27:52 2006
@@ -27,10 +27,15 @@
<!-- mappings that apply to the document named "formatters" -->
<tag-mappings namespace="http://www.openxal.org/data" document="formatters">
- <mapping class="xap.data.bridge.FormatterBridge"
- name="formatter"/>
- <mapping class="xap.data.bridge.DecimalFormatterBridge"
- name="decimalFormatter"/>
+ <mapping name="formatter"
+ class="xap.data.bridge.FormatterBridge"
+ />
+ <mapping name="decimalFormatter"
+ class="xap.data.bridge.DecimalFormatterBridge"
+ />
+ <mapping name="messageFormatter"
+ class="xap.data.bridge.MessageFormatterBridge"
+ />
</tag-mappings>