Author: beckerdo
Date: Thu Oct 16 12:02:28 2008
New Revision: 705326

URL: http://svn.apache.org/viewvc?rev=705326&view=rev
Log:
TUSCANY-2638 fix for atomModel.js JavaScript client

Added:
    
tuscany/java/sca/modules/implementation-widget-runtime/src/main/resources/atomModel.js
Modified:
    
tuscany/java/sca/modules/implementation-widget-runtime/src/main/java/org/apache/tuscany/sca/implementation/widget/provider/WidgetImplementationInvoker.java
    
tuscany/java/sca/modules/implementation-widget-runtime/src/main/java/org/apache/tuscany/sca/implementation/widget/provider/WidgetProxyHelper.java
    
tuscany/java/sca/modules/implementation-widget-runtime/src/test/resources/content/storeJS.html

Modified: 
tuscany/java/sca/modules/implementation-widget-runtime/src/main/java/org/apache/tuscany/sca/implementation/widget/provider/WidgetImplementationInvoker.java
URL: 
http://svn.apache.org/viewvc/tuscany/java/sca/modules/implementation-widget-runtime/src/main/java/org/apache/tuscany/sca/implementation/widget/provider/WidgetImplementationInvoker.java?rev=705326&r1=705325&r2=705326&view=diff
==============================================================================
--- 
tuscany/java/sca/modules/implementation-widget-runtime/src/main/java/org/apache/tuscany/sca/implementation/widget/provider/WidgetImplementationInvoker.java
 (original)
+++ 
tuscany/java/sca/modules/implementation-widget-runtime/src/main/java/org/apache/tuscany/sca/implementation/widget/provider/WidgetImplementationInvoker.java
 Thu Oct 16 12:02:28 2008
@@ -120,14 +120,19 @@
         
         for(ComponentReference reference : component.getReferences()) {
             for(Binding binding : reference.getBindings()) {
-                String bindingProxyName = 
WidgetProxyHelper.getJavaScriptProxyFile(binding.getClass().getName());
+                String [] bindingProxyNames = 
WidgetProxyHelper.getJavaScriptProxyFile(binding.getClass().getName());
                 //check if binding client code was already processed and 
inject to the generated script
-                Boolean processedFlag = 
bindingClientProcessed.get(bindingProxyName);
-                if( processedFlag == null || processedFlag.booleanValue() == 
false) {
-                    if(bindingProxyName != null) {
-                        generateJavaScriptBindingProxy(pw,bindingProxyName);
-                        bindingClientProcessed.put(bindingProxyName, 
Boolean.TRUE);
-                    }
+                if ( bindingProxyNames != null ) {
+                       for ( int i = 0; i < bindingProxyNames.length; i++ ) {
+                               String bindingProxyName = bindingProxyNames[ i 
];
+                               if(bindingProxyName != null) {
+                                       Boolean processedFlag = 
bindingClientProcessed.get(bindingProxyName);
+                                       if( processedFlag == null || 
processedFlag.booleanValue() == false) {
+                                               
generateJavaScriptBindingProxy(pw,bindingProxyName);
+                                               
bindingClientProcessed.put(bindingProxyName, Boolean.TRUE);
+                                       }
+                               }
+                }
                 }
             }
         }

Modified: 
tuscany/java/sca/modules/implementation-widget-runtime/src/main/java/org/apache/tuscany/sca/implementation/widget/provider/WidgetProxyHelper.java
URL: 
http://svn.apache.org/viewvc/tuscany/java/sca/modules/implementation-widget-runtime/src/main/java/org/apache/tuscany/sca/implementation/widget/provider/WidgetProxyHelper.java?rev=705326&r1=705325&r2=705326&view=diff
==============================================================================
--- 
tuscany/java/sca/modules/implementation-widget-runtime/src/main/java/org/apache/tuscany/sca/implementation/widget/provider/WidgetProxyHelper.java
 (original)
+++ 
tuscany/java/sca/modules/implementation-widget-runtime/src/main/java/org/apache/tuscany/sca/implementation/widget/provider/WidgetProxyHelper.java
 Thu Oct 16 12:02:28 2008
@@ -27,21 +27,21 @@
  * @version $Rev$ $Date$
  */
 class WidgetProxyHelper {
-    private static Map<String, String> proxyFileRegistry = new HashMap<String, 
String>();
+    private static Map<String, String[]> proxyFileRegistry = new 
HashMap<String, String[]>();
     private static Map<String, String> proxyClient = new HashMap<String, 
String>();
 
     static {
-        
proxyFileRegistry.put("org.apache.tuscany.sca.binding.atom.impl.AtomBindingImpl",
 "binding-atom.js");
+        
proxyFileRegistry.put("org.apache.tuscany.sca.binding.atom.impl.AtomBindingImpl",
 new String[]{ "binding-atom.js", "atomModel.js"});
         
proxyClient.put("org.apache.tuscany.sca.binding.atom.impl.AtomBindingImpl", 
"AtomClient");
         
-        
proxyFileRegistry.put("org.apache.tuscany.sca.binding.jsonrpc.JSONRPCBinding", 
"binding-jsonrpc.js");
+        
proxyFileRegistry.put("org.apache.tuscany.sca.binding.jsonrpc.JSONRPCBinding", 
new String[]{"binding-jsonrpc.js"});
         
proxyClient.put("org.apache.tuscany.sca.binding.jsonrpc.JSONRPCBinding", 
"JSONRpcClient");
 
-        
proxyFileRegistry.put("org.apache.tuscany.sca.binding.http.impl.HTTPBindingImpl",
 "binding-http.js");
+        
proxyFileRegistry.put("org.apache.tuscany.sca.binding.http.impl.HTTPBindingImpl",
 new String[]{"binding-http.js"});
         
proxyClient.put("org.apache.tuscany.sca.binding.http.impl.HTTPBindingImpl", 
"HTTPClient");
     }
     
-    static String getJavaScriptProxyFile(String bindingClass) {
+    static String [] getJavaScriptProxyFile(String bindingClass) {
         return proxyFileRegistry.get(bindingClass);
     }
     

Added: 
tuscany/java/sca/modules/implementation-widget-runtime/src/main/resources/atomModel.js
URL: 
http://svn.apache.org/viewvc/tuscany/java/sca/modules/implementation-widget-runtime/src/main/resources/atomModel.js?rev=705326&view=auto
==============================================================================
--- 
tuscany/java/sca/modules/implementation-widget-runtime/src/main/resources/atomModel.js
 (added)
+++ 
tuscany/java/sca/modules/implementation-widget-runtime/src/main/resources/atomModel.js
 Thu Oct 16 12:02:28 2008
@@ -0,0 +1,1590 @@
+/*
+ * 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.    
+ */
+ 
+/**
+ * Class that defines a URI represented as a string,
+ */
+function Uri( value ) {
+   this.value = value;
+   this.getValue = function() {
+      return this.value;
+   };
+
+   this.setValue = function(value) {
+      this.value = value;
+   };
+
+   this.toString = function() {
+       return "Uri value=" + this.value;
+   };
+
+   /**
+    * Serialize this element to XML.
+    * atomUri = text
+    */
+   this.toXML = function() {
+      xml = "<uri>";
+      xml += this.value;
+      xml += "</uri>\n";      
+      return xml;
+   };
+}
+
+/* Updated is Date */
+/* Published is Date */
+
+/**
+ * Class that defines an Email represented as a string,
+ */
+function Email( value ) {
+   this.value = value;
+   this.getValue = function() {
+      return this.value;
+   };
+
+   this.setValue = function(value) {
+      this.value = value;
+   };
+
+   this.toString = function() {
+       return "Email value=" + this.value;
+   };
+
+   /**
+    * Serialize this element to XML.
+    * atomEmailAddress = xsd:string { pattern = "[EMAIL PROTECTED]" }
+    */
+   this.toXML = function() {
+      xml = "<email>";
+      xml += this.value;
+      xml += "</email>\n";      
+      return xml;
+   };
+}
+
+/**
+ * Class that defines an Id represented as a string,
+ */
+function Id( value ) {
+   this.value = value;
+   this.getValue = function() {
+      return this.value;
+   };
+
+   this.setValue = function(value) {
+      this.value = value;
+   };
+
+   this.toString = function() {
+       return "Id value=" + this.value;
+   };
+
+   /**
+    * Serialize this element to XML.  
+    * atomId = element atom:id {
+    *    atomCommonAttributes,
+    *    (atomUri)
+    * }
+    */
+   this.toXML = function() {
+      xml = "<id";
+      if ( this.uri != null ) {
+         xml += " uri=\"" + this.uri + "\"";
+      }
+      if ( this.lang != null ) {
+         xml += " lang=\"" + this.lang + "\"";
+      }
+      xml += ">";
+      xml += this.value;
+      xml += "</id>\n";      
+      return xml;
+   };
+}
+
+
+/**
+ * Class that defines an Id represented as a string,
+ */
+function Logo( value ) {
+   this.value = value;
+   this.getValue = function() {
+      return this.value;
+   };
+
+   this.setValue = function(value) {
+      this.value = value;
+   };
+
+
+   this.toString = function() {
+       return "Logo value=" + this.value;
+   };
+
+   /**
+    * Serialize this element to XML.  
+    * atomLogo = element atom:logo {
+    *    atomCommonAttributes,
+    *    (atomUri)
+    * }
+    */
+   this.toXML = function() {
+      xml = "<logo";
+      if ( this.uri != null ) {
+         xml += " uri=\"" + this.uri + "\"";
+      }
+      if ( this.lang != null ) {
+         xml += " lang=\"" + this.lang + "\"";
+      }
+      xml += ">";
+      xml += this.value;
+      xml += "</logo>\n";      
+      return xml;
+   };
+}
+
+/**
+ * Class that defines a Text object.
+ */
+function Text( content, /* optional */ type ) {
+   this.content = content;
+   this.type = type;
+   if (type == null) this.type = "text"; // If undefined or null, use text
+   
+   this.setText = function(content) {
+      this.content = content;
+   };
+
+   this.getText = function() {
+      return this.content;
+   };
+
+   this.getValue = function() {
+      return this.content;
+   };
+
+   this.setType = function(type) {
+      if ((type != "text") && (type != "html") && (type != "xhtml")) {
+         error( "Text type must be one of text, html, or xhtml" );
+      }
+      this.type = type;
+   };
+
+   this.getType = function() {
+      return this.type;
+   };
+
+   this.setLang = function(lang) {
+      this.lang = lang;
+   };
+
+   this.getLang = function() {
+      return this.lang;
+   };
+
+   this.setUri = function(uri) {
+      this.uri = new Uri( uri );
+   };
+
+   this.getUri = function() {
+      return this.uri;
+   };
+
+   this.toString = function() {
+       return "Text type=" + this.type + ", content=" + this.content;
+   };
+   
+   /** Serialize this text element to XML. 
+    *  atomPlainTextConstruct =
+    *     atomCommonAttributes,
+    *     attribute type { "text" | "html" }?,
+    *     text
+    *
+    *  atomXHTMLTextConstruct =
+    *     atomCommonAttributes,
+    *     attribute type { "xhtml" },
+    *     xhtmlDiv
+    * 
+    *  atomTextConstruct = atomPlainTextConstruct | atomXHTMLTextConstruct
+    */
+   this.toXML = function( elementName ) {
+      if ( elementName == null ) {
+         elementName = "text";
+      }
+      xml = "<" + elementName;
+      if ( this.uri != null ) {
+         xml += " uri=\"" + this.uri + "\"";
+      }
+      if ( this.lang != null ) {
+         xml += " lang=\"" + this.lang + "\"";
+      }
+      xml += " type=\"" + this.type + "\"";
+      xml += ">";
+      if ( this.type === "xhtml" ) {
+         xml += "<div xmlns=\"http://www.w3.org/1999/xhtml\";>";      
+      }
+      xml += this.content;
+      if ( this.type === "xhtml" ) {
+         xml += "</div>";      
+      }
+      xml += "</" + elementName + ">";      
+      return xml;
+   }
+}
+
+/**
+ * Class that defines a Person object.
+ */
+function Person( name, email ) {
+   this.name = name;
+   if ( email != null ) {
+      this.email = new Email( email );
+   }
+   
+   this.setName = function( name ) {
+      this.name = name;
+   };
+
+   this.getName = function() {
+      return this.name;
+   };
+
+   this.setLang = function(lang) {
+      this.lang = lang;
+   };
+
+   this.getLang = function() {
+      return this.lang;
+   };
+
+   this.setEmail = function( email ) {
+      this.email = new Email( email );
+   };
+
+   this.getEmail = function() {
+      return this.email;
+   };
+
+   this.setUri = function( uri ) {
+      this.uri = new Uri( uri );
+   };
+
+   this.getUri = function() {
+      return this.uri;
+   };
+
+   this.toString = function() {
+       return "Person name=" + this.name + ", email=" + this.email;
+   };
+
+  /** Serialize this text element to XML. 
+    * atomPersonConstruct =
+    *     atomCommonAttributes,
+    *     (element atom:name { text }
+    *      & element atom:uri { atomUri }?
+    *      & element atom:email { atomEmailAddress }?
+    *      & extensionElement*) 
+    */
+   this.toXML = function( elementName ) {
+      if ( elementName == null ) {
+         elementName = "person";
+      }
+      xml = "<" + elementName;
+      if ( this.uri != null ) {
+         xml += " uri=\"" + this.uri + "\"";
+      }
+      if ( this.lang != null ) {
+         xml += " lang=\"" + this.lang + "\"";
+      }
+      xml += ">\n";
+      if ( this.name != null ) {
+         xml += "<name>" + this.name + "</name>\n";
+      }
+      if ( this.uri != null ) {
+         xml += "<uri>" + this.uri + "</uri>\n";
+      }
+      if ( this.email != null) {
+         xml += this.email.toXML();
+      }      
+      xml += "</" + elementName + ">\n";      
+      return xml;
+   }
+ }
+
+/**
+ * Class that defines a Generator object.
+ */
+function Generator( name, uri ) {
+   this.name = name;
+   this.uri = new Uri( uri );
+   
+   this.setName = function( name ) {
+      this.name = name;
+   };
+
+   this.getName = function() {
+      return this.name;
+   };
+
+   this.setVersion = function(version) {
+      this.version = version;
+   };
+
+   this.getVersion = function() {
+      return this.version;
+   };
+
+   this.setUri = function( uri ) {
+      this.uri = new Email( uri );
+   };
+
+   this.getUri = function() {
+      return this.uri;
+   };
+
+   this.toString = function() {
+       return "Generator name=" + this.name + ", email=" + this.email;
+   };
+
+  /** Serialize this text element to XML. 
+    * atomGenerator = element atom:generator {
+    *    atomCommonAttributes,
+    *    attribute uri { atomUri }?,
+    *    attribute version { text }?,
+    *    text
+    * }
+    */
+   this.toXML = function() {
+      xml = "<generator";
+      if ( this.uri != null ) {
+         xml += " uri=\"" + this.uri.getValue() + "\"";
+      }
+      if ( this.lang != null) {
+         xml += " lang=\"" + this.lang + "\"";
+      }
+      if ( this.version != null ) {
+         xml += " version=\"" + this.version + "\"";
+      }
+      xml += ">";
+      if ( this.name != null ) {
+         xml += this.name;
+      }
+      xml += "</generator>\n";      
+      return xml;
+   }
+}
+
+/**
+ * Class that defines a Category object.
+ *atomCategory =
+ *     element atom:category {
+ *        atomCommonAttributes,
+ *        attribute term { text },
+ *        attribute scheme { atomUri }?,
+ *        attribute label { text }?,
+ *        undefinedContent
+ *     }
+ */
+function Category( label, content ) {
+   this.label = label;
+   this.content = content;
+   
+   this.setLabel = function( label ) {
+      this.label = label;
+   };
+
+   this.getLabel = function() {
+      return this.label;
+   };
+
+   this.setLang = function(lang) {
+      this.lang = lang;
+   };
+
+   this.getLang = function() {
+      return this.lang;
+   };
+
+   this.setTerm = function(term) {
+      this.term = term;
+   };
+
+   this.getTerm = function() {
+      return this.term;
+   };
+
+   this.setScheme = function( scheme ) {
+      this.scheme = scheme;
+   };
+
+   this.getScheme = function() {
+      return this.scheme;
+   };
+
+   this.setContent = function( content ) {
+      this.content = content;
+   };
+
+   this.getContent = function() {
+      return this.content;
+   };
+
+   this.toString = function() {
+       return "Category label=" + this.label;
+   };
+
+   /** Serialize this text element to XML. 
+    *  atomCategory =
+    *     element atom:category {
+    *        atomCommonAttributes,
+    *        attribute term { text },
+    *        attribute scheme { atomUri }?,
+    *        attribute label { text }?,
+    *        undefinedContent
+    *     }
+    */
+   this.toXML = function() {
+      xml = "<category>\n";
+      if ( this.uri != null ) {
+         xml += " uri=\"" + this.uri + "\"";
+      }
+      if ( this.lang != null) {
+         xml += " lang=\"" + this.lang + "\"";
+      }
+      if ( this.term != null) {
+         xml += " term=\"" + this.term + "\"";
+      }
+      if ( this.scheme != null) {
+         xml += " scheme=\"" + this.scheme + "\"";
+      }
+      if ( this.label != null) {
+         xml += " label=\"" + this.label + "\"";
+      }
+      xml += ">\n";
+      if ( this.content != null ) {
+         xml += this.content + "\n";
+      }
+      xml += "</category>\n";      
+      return xml;
+   }
+}
+
+/**
+ * Class that defines a Link object.
+ */
+function Link( href, relation ) {
+   this.href = new Uri( href );
+   this.relation = relation;
+   
+   this.setHRef = function( uri ) {
+      this.href = new Uri( uri );
+   };
+
+   this.getHRef = function() {
+      return this.href;
+   };
+
+   this.setTitle = function( title ) {
+      this.title = title;
+   };
+
+   this.getTitle = function() {
+      return this.title;
+   };
+
+   this.setHRefLang = function(lang) {
+      this.hrefLang = lang;
+   };
+
+   this.getHRefLang = function() {
+      return this.hreflang;
+   };
+
+   this.setTitleLang = function(lang) {
+      this.titleLang = lang;
+   };
+
+   this.getTitleLang = function() {
+      return this.titleLang;
+   };
+   
+   this.setLength= function( length ) {
+      this.length= length;
+   };
+
+   this.getLength = function() {
+      return this.length;
+   };
+
+/*
+<static>  <final> String       TYPE_ATOM
+          Link type used for Atom content.
+<static>  <final> String       TYPE_HTML
+          Link type used for HTML content.
+*/          
+   this.setMimeType = function(mimeType) {
+      this.mimeType = mimeType;
+   };
+
+   this.getMimeType = function() {
+      return this.mimeType;
+   };
+
+   this.setContent= function( content ) {
+      this.content = content;
+   };
+
+   this.getContent = function() {
+      return this.content;
+   };
+
+/*
+<static>  <final> String       REL_ALTERNATE
+          Link that provides the URI of an alternate format of the entry's or 
feed's contents.
+<static>  <final> String       REL_ENTRY_EDIT
+          Link that provides the URI that can be used to edit the entry.
+<static>  <final> String       REL_MEDIA_EDIT
+          Link that provides the URI that can be used to edit the media 
associated with an entry.
+<static>  <final> String       REL_NEXT
+          Link that provides the URI of next page in a paged feed.
+<static>  <final> String       REL_PREVIOUS
+          Link that provides the URI of previous page in a paged feed.
+<static>  <final> String       REL_RELATED
+          Link that provides the URI of a related link to the entry.
+<static>  <final> String       REL_SELF
+          Link that provides the URI of the feed or entry.
+<static>  <final> String       REL_VIA
+          Link that provides the URI that of link that provides the data for 
the content in the feed.
+*/          
+   this.setRelation = function( relation ) {
+      this.relation = relation;
+   };
+
+   this.getRelation = function() {
+      return this.relation;
+   };
+
+   this.toString = function() {
+       return "Link href=" + this.href + ", title=" + this.title;
+   };
+   
+   /** Serialize this text element to XML. 
+     * atomLink =
+     *     element atom:link {
+     *     atomCommonAttributes,
+     *     attribute href { atomUri },
+     *     attribute rel { atomNCName | atomUri }?,
+     *     attribute type { atomMediaType }?,
+     *     attribute hreflang { atomLanguageTag }?,
+     *     attribute title { text }?,
+     *     attribute length { text }?,
+     *     undefinedContent
+     *  }
+     */
+   this.toXML = function() {
+      xml = "<link";
+      if ( this.relation != null ) {
+         xml += " rel=\"" + this.relation + "\"";
+      }
+      if ( this.uri != null ) {
+         xml += " uri=\"" + this.uri.getValue() + "\"";
+      }
+      if ( this.lang != null) {
+         xml += " lang=\"" + this.lang + "\"";
+      }
+      if ( this.href != null ) {
+         xml += " href=\"" + this.href.getValue() + "\"";
+      }
+      if ( this.hreflang != null ) {
+         xml += " hreflang=\"" + this.hreflang + "\"";
+      }
+      if ( this.title != null ) {
+         xml += " title=\"" + this.title + "\"";
+      }
+      if ( this.length != null ) {
+         xml += " length=\"" + this.length + "\"";
+      }
+      if ( this.content != null ) {
+         xml += this.content + "\n";
+         xml += "</link>\n";
+      } else {
+         xml += "/>\n";
+      }      
+      return xml;
+   }
+   
+}          
+
+/**
+ * Class that defines an Entry object.
+ * atomEntry =
+ *     element atom:entry {
+ *        atomCommonAttributes,
+ *        (atomAuthor*
+ *         & atomCategory*
+ *         & atomContent?
+ *         & atomContributor*
+ *         & atomId
+ *         & atomLink*
+ *         & atomPublished?
+ *         & atomRights?
+ *         & atomSource?
+ *         & atomSummary?
+ *         & atomTitle
+ *         & atomUpdated
+ *         & extensionElement*)
+ *     } 
+ */
+function Entry( init ) {
+   // Constructor code at bottom after function definition
+   
+   this.authors = new Array();
+   this.contributors = new Array();
+   this.categories = new Array();
+   this.links = new Array();
+
+   this.setNamespace = function( namespace ) {
+      this.namespace = namespace;
+   };
+
+   this.getNamespace = function() {
+      return this.namespace;
+   };
+
+   this.setId = function( id ) {
+      if (!((typeof id == "object") && (id instanceof Id)))
+         this.id = new Id( id );
+      else 
+         this.id = id;
+   }
+
+   this.getId = function() {
+      return this.id;
+   };
+
+   this.setPublished = function( published ) {
+      this.published = published;
+   };
+
+   this.getPublished = function() {
+      return this.published;
+   };
+
+   this.setUpdated = function( updated ) {
+      this.updated = updated;
+   };
+
+   this.getUpdated = function() {
+      return this.updated;
+   };
+
+   this.setRights = function( rights ) {
+      this.rights = rights;
+   }
+
+   this.getRights = function() {
+      return this.rights;
+   };
+
+   this.setSource = function( source ) {
+      this.source = source;
+   }
+
+   this.getSource = function() {
+      return this.source;
+   };
+
+   /* Type Text */
+   this.setTitle = function( title ) {
+      if (!((typeof title == "object") && (title instanceof Text)))
+         this.title = new Text( title, "text" );
+      else 
+         this.title = title;
+   }
+
+   this.getTitle = function() {
+      return this.title;
+   };
+
+   /* Type Text */
+   this.setSummary = function( summary ) {
+      if (!((typeof summary == "object") && (summary instanceof Text)))
+         this.summary = new Text( summary, "text" );
+      else
+         this.summary = summary;
+   }
+
+   this.getSummary = function() {
+      return this.summary;
+   };
+
+   /* Type Text */
+   this.setContent = function( content ) {
+      if (!((typeof content == "object") && (content instanceof Text)))
+         this.content = new Text( content, "text" );
+      else
+         this.content = content;
+   }
+
+   this.getContent = function() {
+      return this.content;
+   };
+
+   /**
+    * Add an author.
+    * @param name Author
+    */
+   this.addAuthor = function(person) {
+      if (!((typeof person == "object") && (person instanceof Person)))
+         error( "Entry author must be of type Person" );
+      var i = this.authors.length;
+      this.authors[ i ] = person; 
+   }
+   
+   /**
+    * Get an author.
+    * @param name Author
+    */
+   this.getAuthor = function(name) {
+      return this.authors[ name ];
+   }
+   
+   /**
+    * Set list of authors.
+    * @param name Author
+    */
+   this.setAuthors = function( authors ) {
+      return this.authors = authors;
+   }
+   
+   /**
+    * Get an author"pom.xml".
+    * @param name Author
+    */
+   this.getAuthors = function() {
+      return this.authors;
+   }
+   
+   /**
+    * Add an contributor.
+    * @param name Contributor
+    */
+   this.addContributor = function(person) {
+      if (!((typeof person == "object") && (person instanceof Person)))
+         error( "Entry contributor must be of type Person" );
+      var i = this.contributors.length;
+      this.contributors[ i ] = person;
+   }
+   
+   /**
+    * Get an contributor.
+    * @param name Contributor
+    */
+   this.getContributor = function(name) {
+      return this.contributors[ name ];
+   }
+   
+   /**
+    * Set list of contributors
+    * @param name Author
+    */
+   this.setContributors = function( contributors ) {
+      return this.contributors = contributors;
+   }
+   
+   /**
+    * Get an contributor.
+    * @param name Contributor
+    */
+   this.getContributors = function() {
+      return this.contributors;
+   }
+   
+   /**
+    * Add a category.
+    * @param name Category
+    */
+   this.addCategory = function(category) {
+      if (!((typeof category == "object") && (category instanceof Category)))
+         error( "Entry category must be of type Category" );
+      var i = this.categories.length
+      this.categories[ i ] = category;
+   }
+   
+   /**
+    * Get a names category.
+    * @param name Category
+    */
+   this.getCategory = function(name) {
+      return this.categories[ name ];
+   }
+   
+   /**
+    * Set list of categories
+    * @param name Author
+    */
+   this.setCategories = function( categories ) {
+      return this.categories = categories;
+   }
+   
+   /**
+    * Get all categories.
+    * @param name Category
+    */
+   this.getCategories = function() {
+      return this.categories;
+   }
+   
+   /**
+    * Add an link.
+    * @param name Link
+    */
+   this.addLink = function(link) {
+      if (!((typeof link == "object") && (link instanceof Link)))
+         error( "Entry link must be of type Link" );
+      var i = this.links.length;
+      this.links[ i ] = link;
+   }
+   
+   /**
+    * Get an link.
+    * @param name Link
+    */
+   this.getLink = function(name) {
+      return links[ name ];
+   }
+   
+   /**
+    * Set list of links.
+    * @param name Link
+    */
+   this.setLinks = function( links ) {
+      return this.links = links;
+   }
+   
+   /**
+    * Get an link.
+    * @param name Link
+    */
+   this.getLinks = function() {
+      return links;
+   }
+   
+   this.readFromXML = function( xml ) {
+      if (!((typeof xml == "object") && (xml instanceof string)))
+         error( "Entry xml must be of type string" );
+      // To Do - Read from arbutrary XML such as 
+      // <entry>
+      //   <title type="text">cart-item</title>
+      //   <content type="text">Apple - $ 2.99</content>
+      //   <id>cart-bd5323d6-1f59-4fae-a8f5-01f7654f1e77</id>
+      //   <link href="cart-bd5323d6-1f59-4fae-a8f5-01f7654f1e77" rel="edit"/>
+      //   <link href="cart-bd5323d6-1f59-4fae-a8f5-01f7654f1e77" 
rel="alternate"/>
+      //   <updated>2008-09-21T23:06:43.921Z</updated>
+      // </entry>
+      
+   }
+  this.readFromDoc = function( htmlDoc ) {
+      // Expect HTML collection.
+      var entryDoc = htmlDoc.getElementsByTagName("entry");
+      for (var i = 0; i < entryDoc.length; i++) {
+         this.readFromNode( entryDoc[ i ] );
+      }
+   }
+
+   this.readFromNode = function( entryNode ) {
+      // Expect entry node
+      var childNodes = entryNode.childNodes;
+      for ( var i = 0; i < childNodes.length; i++ ) {
+         var node = childNodes[ i ];
+         if (node.nodeType == 1 /*Node.ELEMENT_NODE*/) {
+            var tagName = node.tagName;
+            if (tagName == "title" ) {
+               var text = getTextContent( node );
+               var type = node.getAttribute( "type" );
+               if ( type == undefined )
+                  type = "text";
+               var title = new Text( text, type );
+               this.setTitle( title );
+            } else if ( tagName == "subtitle" ) {
+               var text = getTextContent( node );
+               var type = node.getAttribute( "type" );
+               if ( type == undefined )
+                  type = "text";
+               var title = new Text( text, type );
+               this.setSubtitle( title );
+            } else if ( tagName == "id" ) {
+               var id = new Id( getTextContent( node ) );
+               this.setId( id );
+            } else if ( tagName == "updated" ) {
+               var dateText = getTextContent( node );
+               var date = new Date( dateText ); // 2008-09-21T23:06:43.921Z
+               this.setUpdated( date );
+            } else if ( tagName == "link" ) {
+               // var href = node.attributes[ "href" ]; // Works on modern 
browsers.
+               var attrVal = node.getAttribute( "href" );
+               var link = new Link( attrVal );
+               attrVal = node.getAttribute( "rel" );
+               if ( attrVal )
+                  link.setRelation( attrVal );
+               this.addLink( link );
+            } else if ( tagName == "content" ) {
+               var text = getTextContent( node );
+               var type = node.getAttribute( "type" );
+               if (type == undefined)
+                  type = "text";
+               var content = new Text( text, type );
+               this.setContent( content );
+            } else {
+               // To Do - implement rest of nodes
+                          error( "undefined element node" );
+            } 
+         } else if (node.nodeType == 2 /*Node.ATTRIBUTE_NODE*/) {
+            var attrName = node.tagName;
+         } else if (node.nodeType == 3 /*Node.TEXT_NODE*/) {
+         }
+      }      
+   }
+
+   this.toString = function() {
+       return "Entry title=" + this.title + ", updated=" + this.updated;
+   };
+
+   /** Serialize this text element to XML. 
+        * atomEntry =
+        *     element atom:entry {
+        *        atomCommonAttributes,
+        *        (atomAuthor*
+        *         & atomContributor*
+        *         & atomCategory*
+        *         & atomLink*
+        *         & atomTitle
+        *         & atomId
+        *         & atomPublished?
+        *         & atomUpdated
+        *         & atomContent?
+        *         & atomRights?
+        *         & atomSource?
+        *         & atomSummary?
+        *         & extensionElement*)
+        *     }    
+     */
+   this.toXML = function() {
+      xml = "<entry";
+      if ( this.namespace != null ) {
+         xml += " namespace=\"" + this.namespace + "\"";
+      }
+      if ( this.uri != null ) {
+         xml += " uri=\"" + this.uri + "\"";
+      }
+      if ( this.lang != null ) {
+         xml += " lang=\"" + this.lang + "\"";
+      }
+      xml += ">";
+      if ( this.title != null ) {
+         xml += this.title.toXML( "title" );
+      }
+      if ( this.id != null ) {
+         xml += this.id.toXML();
+      }
+      if ( this.published != null ) {
+         xml += "<published>" + this.published + "</published>\n";
+      }
+      if ( this.updated != null ) {
+         xml += "<updated>" + this.updated + "</updated>\n";
+      }
+      if ( this.authors != null ) {
+      for ( var i = 0; i < this.authors.length; i++ ) {
+         var author = this.authors[ i ];
+         xml += author.toXML( "author" );
+      }
+      }
+      if ( this.contributors != null ) {
+      for ( var i = 0; i < this.contributors.length; i++ ) {
+         var contributor = this.contributors[ i ];
+         xml += contributor.toXML( "contributor" );
+      }
+      }
+      if ( this.categories != null ) {
+      for ( var i = 0; i < this.categories.length; i++ ) {
+         var category = this.categories[ i ];
+         xml += category.toXML();
+      }
+      }
+      if ( this.links != null ) {
+      for ( var i = 0; i < this.links.length; i++ ) {
+         var link = this.links[ i ];
+         xml += link.toXML();
+      }
+      }
+      if ( this.rights != null ) {
+         xml += "<rights>" + this.rights + "</rights>\n";
+      }
+      if ( this.source != null ) {
+         xml += "<source>" + this.source + "</source>\n";
+      }
+      if ( this.summary != null ) {
+         xml += this.summary.toXML( "summary" );
+      }
+      if ( this.content != null ) {
+         xml += this.content.toXML( "content" );
+      }
+      xml += "</entry>";      
+      return xml;
+   }
+  
+   // Initialize from constructor   
+   if (typeof init == 'object') {
+      if ( init.nodeType == 1 ) { /* Document Node.ELEMENT_NODE 1 */
+         this.readFromDoc( init );
+      } else {      
+         error( "Feed init unknown type" );
+      }
+   }  else if ( typeof init === 'string' ) {
+      this.setTitle( init );
+   }
+   this.namespace = "http://www.w3.org/2005/Atom";;
+}
+
+/**
+ * Class that defines an Feed object.
+ *  atomFeed =
+ *     element atom:feed {
+ *        atomCommonAttributes,
+ *        (atomAuthor*
+ *         & atomCategory*
+ *         & atomContributor*
+ *         & atomGenerator?
+ *         & atomIcon?
+ *         & atomId
+ *         & atomLink*
+ *         & atomLogo?
+ *         & atomRights?
+ *         & atomSubtitle?
+ *         & atomTitle
+ *         & atomUpdated
+ *         & extensionElement*),
+ *        atomEntry* 
+ */
+function Feed( init ) {
+   // See init after functions have been defined.
+
+   this.authors = new Array();
+   this.contributors = new Array();
+   this.categories = new Array();
+   this.links = new Array();
+   this.entries = new Array();
+
+   this.setNamespace = function( namespace ) {
+      this.namespace = namespace;
+   };
+
+   this.getNamespace = function() {
+      return this.namespace;
+   };
+
+   this.setPublished = function( published ) {
+      this.published = published;
+   };
+
+   this.getPublished = function() {
+      return this.published;
+   };
+
+   this.setUpdated = function( updated ) {
+      this.updated = updated;
+   };
+
+   this.getUpdated = function() {
+      return this.updated;
+   };
+
+   this.setContent = function( content ) {
+      if (!((typeof content == "object") && (content instanceof Text)))
+         error( "Entry content must be of type Text" );
+
+      this.content = content;
+   }
+
+   this.getContent = function() {
+      return this.content;
+   };
+
+   this.setRights = function( rights ) {
+      if (!((typeof rights == "object") && (rights instanceof Text)))
+         this.rights = new Text( rights, "text" );
+      else 
+         this.rights = rights;
+   }
+
+   this.getRights = function() {
+      return this.rights;
+   };
+
+   this.setSummary = function( summary ) {
+      if (!((typeof summary == "object") && (summary instanceof Text)))
+         error( "Feed summary must be of type Text" );
+      this.summary = summary;
+   }
+
+   this.getSummary = function() {
+      return this.summary;
+   };
+
+   this.setTitle = function( title ) {
+      if (!((typeof title == "object") && (title instanceof Text)))
+         this.title = new Text( title, "text" );
+      else 
+         this.title = title;
+   }
+
+   this.getTitle = function() {
+      return this.title;
+   };
+
+   this.setSubtitle = function( subtitle ) {
+      if (!((typeof subtitle == "object") && (subtitle instanceof Text)))
+         this.subtitle = new Text( subtitle, "text" );
+      else 
+         this.subtitle = subtitle;
+   }
+
+   this.getSubtitle = function() {
+      return this.subtitle;
+   };
+
+   /* Type Id */
+   this.setId = function( id ) {
+      if (!((typeof id == "object") && (id instanceof Id)))
+         this.id = new Id( id );
+      else 
+         this.id = id;
+   }
+
+   this.getId = function() {
+      return this.id;
+   };
+
+   this.setGenerator = function( generator ) {
+      if (!((typeof generator == "object") && (generator instanceof 
Generator)))
+         error( "Feed generator must be of type Generator" );
+      this.generator = generator;
+   }
+
+   this.getGenerator = function() {
+      return this.generator;
+   };
+
+   this.setBase = function( base ) {
+      this.base = base;
+   }
+
+   this.getBase = function() {
+      return this.base;
+   };
+
+   this.setLogo = function( logo ) {
+      this.logo = logo;
+   }
+
+   this.getLogo = function() {
+      return this.logo;
+   };
+
+   /**
+    * Add an author.
+    * @param name Author
+    */
+   this.addAuthor = function(person) {
+      if (!((typeof person == "object") && (person instanceof Person)))
+         error( "Entry author must be of type Person" );
+      var i = this.authors.length;
+      this.authors[ i ] = person;
+   }
+   
+   /**
+    * Get an author.
+    * @param name Author
+    */
+   this.getAuthor = function(name) {
+      return this.authors[ name ];
+   }
+   
+   /**
+    * Set list of authors.
+    * @param name Author
+    */
+   this.setAuthors = function( authors ) {
+      return this.authors = authors;
+   }
+   
+   /**
+    * Get an author.
+    * @param name Author
+    */
+   this.getAuthors = function() {
+      return this.authors;
+   }
+   
+   /**
+    * Add an contributor.
+    * @param name Contributor
+    */
+   this.addContributor = function(person) {
+      if (!((typeof person == "object") && (person instanceof Person)))
+         error( "Entry contributor must be of type Person" );
+      var i = this.contributors.length;
+      this.contributors[ i ] = person;
+   }
+   
+   /**
+    * Get an contributor.
+    * @param name Contributor
+    */
+   this.getContributor = function(name) {
+      return this.contributors[ name ];
+   }
+   
+   /**
+    * Set list of contributors
+    * @param name Author
+    */
+   this.setContributors = function( contributors ) {
+      return this.contributors = contributors;
+   }
+   
+   /**
+    * Get an contributor.
+    * @param name Contributor
+    */
+   this.getContributors = function() {
+      return this.contributors;
+   }
+   
+   /**
+    * Add a category.
+    * @param name Category
+    */
+   this.addCategory = function(category) {
+      if (!((typeof category == "object") && (category instanceof Category)))
+         error( "Feed category must be of type Category" );
+      var i = this.categories.length;
+      this.categories[ i ] = category;
+   }
+   
+   /**
+    * Get a named contributor.
+    * @param name Category
+    */
+   this.getCategory = function(name) {
+      return this.categories[ name ];
+   }
+   
+   /**
+    * Set list of categories
+    * @param category
+    */
+   this.setCategories = function( categories ) {
+      return this.categories = categories;
+   }
+   
+   /**
+    * Get all categories.
+    * @param name Category
+    */
+   this.getCategories = function() {
+      return this.categories;
+   }
+   
+   /**
+    * Add an link.
+    * @param name Link
+    */
+   this.addLink = function(link) {
+      if (!((typeof link == "object") && (link instanceof Link)))
+         error( "Entry link must be of type Link" );
+      var i = this.links.length;
+      this.links[ i ] = link;
+   }
+   
+   /**
+    * Get an link.
+    * @param name Link
+    */
+   this.getLink = function(name) {
+      return this.links[ name ];
+   }
+   
+   /**
+    * Set list of links.
+    * @param name Link
+    */
+   this.setLinks = function( links ) {
+      return this.links = links;
+   }
+   
+   /**
+    * Get an link.
+    * @param name Link
+    */
+   this.getLinks = function() {
+      return this.links;
+   }
+   
+   /**
+    * Add an entry.
+    * @param name Entry
+    */
+   this.addEntry = function(entry) {
+      if (!((typeof entry == "object") && (entry instanceof Entry)))
+         error( "Entry entry must be of type Entry" );
+      var i = this.entries.length;
+      this.entries[ i ] = entry;
+   }
+   
+   /**
+    * Get an entry by name.
+    * @param name Entry
+    */
+   this.getEntry = function(name) {
+      return this.entries[ name ];
+   }
+   
+   /**
+    * Set list of entries
+    * @param name Author
+    */
+   this.setEntries = function( entries ) {
+      return this.entries = entries;
+   }
+   
+   /**
+    * Get an contributor.
+    * @param name Entry
+    */
+   this.getEntries = function() {
+      return this.entries;
+   }
+   
+   this.readFromXML = function( xml ) {
+      // To Do Read from arbitraty XML such as 
+      // <feed xmlns="http://www.w3.org/2005/Atom";>
+      // <title type="text">shopping cart</title>
+      // <subtitle type="text">Total : $4.54</subtitle>
+      // <entry>
+      //    ...
+      // </entry>
+      // </feed>    
+   }
+
+   this.readFromDoc = function( htmlDoc ) {
+      // Expect HTML collection.
+      var feedDoc = htmlDoc.getElementsByTagName("feed");
+      for (var i = 0; i < feedDoc.length; i++) {
+         this.readFromNode( feedDoc[ i ] );
+      }
+   }
+   this.readFromNode = function( feedNode ) {
+      // Expect feed node
+      var childNodes = feedNode.childNodes;
+      for ( var i = 0; i < childNodes.length; i++ ) {
+         var node = childNodes[ i ];
+         if (node.nodeType == 1 /*Node.ELEMENT_NODE*/) {
+            var tagName = node.tagName;
+            if (tagName == "title" ) {
+               var text = getTextContent( node );
+               var type = node.getAttribute( "type" );
+               if ( type == undefined )
+                  type = "text";
+               var title = new Text( text, type );
+               this.setTitle( title );
+            } else if ( tagName == "subtitle" ) {
+               var text = getTextContent( node );
+               var type = node.getAttribute( "type" );
+               if ( type == undefined )
+                  type = "text";
+               var title = new Text( text, type );
+               this.setSubtitle( title );
+            } else if ( tagName == "entry" ) {
+               var entry = new Entry();
+               entry.readFromNode( node );
+               this.addEntry( entry ); 
+            } else if ( tagName == "id" ) {
+               var id = new Id( getTextContent( node ) );
+               this.setId( id );
+            } else if ( tagName == "updated" ) {
+               var dateText = getTextContent( node );
+               var date = new Date( dateText ); //2008-09-21T23:06:53.750Z
+               this.setUpdated( date );
+            } else if ( tagName == "link" ) {
+               // var href = node.attributes[ "href" ]; // Works on modern 
browsers.
+               var attrVal = node.getAttribute( "href" );
+               var link = new Link( attrVal );
+               attrVal = node.getAttribute( "rel" );
+               if ( attrVal )
+                  link.setRelation( attrVal );
+               this.addLink( link );
+            } else {
+               // To Do - implement rest of nodes
+                          error( "undefined element node" );
+            } 
+         } else if (node.nodeType == 2 /*Node.ATTRIBUTE_NODE*/) {
+            var attrName = node.tagName;
+         } else if (node.nodeType == 3 /*Node.TEXT_NODE*/) {
+         }
+      }      
+   }
+
+   this.toString = function() {
+       return "Feed title=" + this.title + ", updated=" + this.updated;
+   };
+
+   /** Serialize this text element to XML. 
+        *  atomFeed =
+        *     element atom:feed {
+        *        atomCommonAttributes,
+        *        (atomAuthor*
+        *         & atomContributor*
+        *         & atomCategory*
+        *         & atomLink*
+        *         & atomTitle
+        *         & atomSubtitle?
+        *         & atomId
+        *         & atomUpdated
+        *         & atomRights?         
+        *         & atomGenerator?
+        *         & atomIcon?
+        *         & atomLogo?
+        *         & extensionElement*),
+        *        atomEntry* 
+     */
+   this.toXML = function() {
+      xml = "<feed";
+      if ( this.namespace != null ) {
+         xml += " namespace=\"" + this.namespace + "\"";
+      }
+      if ( this.uri != null ) {
+         xml += " uri=\"" + this.uri + "\"";
+      }
+      if ( this.lang != null ) {
+         xml += " lang=\"" + this.lang + "\"";
+      }
+      xml += ">\n";
+      if ( this.title != null ) {
+         xml += this.title.toXML( "title" );
+      }
+      if ( this.subtitle != null ) {
+         xml += this.subtitle.toXML( "subtitle" );
+      }
+      if ( this.id != null ) {
+         xml += this.id.toXML();
+      }
+      if ( this.published != null ) {
+         xml += "<published>" + this.published + "</published>\n";
+      }
+      if ( this.updated != null ) {
+         xml += "<updated>" + this.updated + "</updated>\n";
+      }
+      if ( this.authors != null ) {      
+      for ( var i = 0; i < this.authors.length; i++ ) {
+         var author = this.authors[ i ];
+         xml += author.toXML( "author" );
+      }
+      }
+      if ( this.contributors != null ) {      
+      for ( var i = 0; i < this.contributors.length; i++ ) {
+         var contributor = this.contributors[ i ];
+         xml += contributor.toXML( "contributor" );
+      }
+      }
+      if ( this.categories != null ) {      
+      for ( var i = 0; i < this.categories.length; i++ ) {
+         var category = this.categories[ i ];
+         xml += category.toXML();
+      }
+      }
+      if ( this.links != null ) {      
+      for ( var i = 0; i < this.links.length; i++ ) {
+         var link = this.links[ i ];
+         xml += link.toXML();
+      }
+      }
+      if ( this.rights != null ) {
+         xml += this.rights.toXML( "rights" );
+      }
+      if ( this.source != null ) {
+         xml += "<source>" + this.source + "</source>\n";
+      }
+      if ( this.logo != null ) {
+         xml += "<logo>" + this.logo + "</logo>\n";
+      }
+      if ( this.icon != null ) {
+         xml += "<icon>" + this.icon + "</icon>\n";
+      }
+      if ( this.generator != null ) {
+         xml += this.generator.toXML( "generator" );
+      }
+      if ( this.summary != null ) {
+         xml += this.summary.toXML( "summary" );
+      }
+      if ( this.entries != null ) {
+      for ( var i = 0; i < this.entries.length; i++ ) {
+         var entry = this.entries[ i ];
+         xml += entry.toXML();
+      }      
+      }      
+      xml += "</feed>\n";      
+      return xml;
+   }
+  
+   // Initialize from constructor   
+   if (typeof init == 'object') {
+      if ( init.nodeType == 9 ) { /* Document Node.DOCUMENT_NODE 9 */
+         this.readFromDoc( init );
+      } else {      
+         error( "Feed init unknown type" );
+      }
+   }  else if ( typeof init === 'string' ) {
+      this.setTitle( init );
+   }   
+   this.namespace = "http://www.w3.org/2005/Atom";;
+}
+
+function error( message ) {
+   alert( message );
+}
+
+/* Returns inner text on both IE and modern browsers. */
+function getTextContent(node) {
+   // innerText for IE, textContent for others, child text node, "" for others.
+   if ( node.innerText )
+      return node.innerText;
+   if ( node.textContent )
+      return node.textContent;
+   if ( node.hasChildNodes() ) {
+      var childNodes = node.childNodes
+      for ( var j = 0; j < childNodes.length; j++ ) {
+         var childNode = childNodes[ j ];
+         var childType = childNode.nodeType;
+         if (childNode.nodeType == 3 /*Node.TEXT_NODE*/) {
+            return childNode.nodeValue;
+         }
+      } 
+   }
+   return undefined;
+} 
\ No newline at end of file

Modified: 
tuscany/java/sca/modules/implementation-widget-runtime/src/test/resources/content/storeJS.html
URL: 
http://svn.apache.org/viewvc/tuscany/java/sca/modules/implementation-widget-runtime/src/test/resources/content/storeJS.html?rev=705326&r1=705325&r2=705326&view=diff
==============================================================================
--- 
tuscany/java/sca/modules/implementation-widget-runtime/src/test/resources/content/storeJS.html
 (original)
+++ 
tuscany/java/sca/modules/implementation-widget-runtime/src/test/resources/content/storeJS.html
 Thu Oct 16 12:02:28 2008
@@ -21,15 +21,13 @@
 <title>Store</TITLE>
 
 <!-- one js include per sca component -->
-<script type="text/javascript" src="storeJS.js"></script>
-
-<!-- Include Tuscany JavaScript client model for Atom.  
+<!-- For Atom, the Tuscany JavaScript client includes the model for Atom.  
         Using this JavaScript model, users can use syntax such as:
         item += "name=" + entry.getName() + ", price=" + entry.getContent() 
         rather than
      item += 
entries[i].getElementsByTagName("content")[0].firstChild.nodeValue;
        -->
-<script type="text/javascript" src="atomModel.js"></script>
+<script type="text/javascript" src="storeJS.js"></script>
 
 <script language="JavaScript">
 


Reply via email to