You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@wookie.apache.org by sc...@apache.org on 2011/06/08 21:52:56 UTC

svn commit: r1133531 - in /incubator/wookie/trunk/src/org/apache/wookie: ajaxmodel/IWidgetAPI.java ajaxmodel/impl/WidgetAPIImpl.java util/WidgetJavascriptSyntaxAnalyzer.java

Author: scottbw
Date: Wed Jun  8 19:52:56 2011
New Revision: 1133531

URL: http://svn.apache.org/viewvc?rev=1133531&view=rev
Log:
Added deprecation notices for legacy API methods for widgets that have been superseded by the W3C and Wave Gadget specs (e.g. widget.sharedDataForKey, widget.preferenceForKey) and extended the syntax analyzer to generate warnings both for these and for any calls to the (undocumented) Wookie-specific extensions such as widget.show, widget.lock.

Modified:
    incubator/wookie/trunk/src/org/apache/wookie/ajaxmodel/IWidgetAPI.java
    incubator/wookie/trunk/src/org/apache/wookie/ajaxmodel/impl/WidgetAPIImpl.java
    incubator/wookie/trunk/src/org/apache/wookie/util/WidgetJavascriptSyntaxAnalyzer.java

Modified: incubator/wookie/trunk/src/org/apache/wookie/ajaxmodel/IWidgetAPI.java
URL: http://svn.apache.org/viewvc/incubator/wookie/trunk/src/org/apache/wookie/ajaxmodel/IWidgetAPI.java?rev=1133531&r1=1133530&r2=1133531&view=diff
==============================================================================
--- incubator/wookie/trunk/src/org/apache/wookie/ajaxmodel/IWidgetAPI.java (original)
+++ incubator/wookie/trunk/src/org/apache/wookie/ajaxmodel/IWidgetAPI.java Wed Jun  8 19:52:56 2011
@@ -31,6 +31,10 @@ public interface IWidgetAPI {	
 	/**
 	 * Appends a string to the string contained in the shared data value in the DB, obtained
 	 * from the given "key" 
+	 * 
+	 * Note that this method is retained only as a workaround for some issues in the Wave Gadget API implementation
+	 * and is likely to be deprecated in the future.
+	 * 
 	 * @param id_key - the unique instance id key for a widget instance
 	 * @param key - key for the value to change
  	 * @param key - the value to change to
@@ -39,15 +43,10 @@ public interface IWidgetAPI {	
 	public String appendSharedDataForKey(String id_key, String key, String value);	
 	
 	/**
-	 * ? not implemented yet
-	 * @param id_key
-	 * @param key
-	 * @return
-	 */
-	public String contextPropertyForKey(String id_key, String key);
-	
-	/**
 	 * Call to hide a widget instance based on the instance_key
+	 * 
+	 * Note this is not a part of the W3C standard interface, but a Wookie-specific extension
+	 * 
 	 * @param id_key
 	 * @return
 	 */
@@ -55,6 +54,9 @@ public interface IWidgetAPI {	
 	
 	/**
 	 * Call to lock a widget instance
+	 * 
+   * Note this is not a part of the W3C standard interface, but a Wookie-specific extension
+   * 
 	 * @param id_key
 	 * @return
 	 */
@@ -89,18 +91,10 @@ public interface IWidgetAPI {	
 	 * @param key - key for the value to retrieve
 	 * @return - a string value found in the DB or an error message
 	 */
+	 @Deprecated
 	public String preferenceForKey(String id_key, String key);
 	
 	/**
-	 * ? not implemented yet
-	 * @param id_key
-	 * @param key
-	 * @param value
-	 * @return
-	 */
-	public String setContextPropertyForKey(String id_key, String key, String value);
-	
-	/**
 	 * Sets a string preference value in the DB, obtained
 	 * from the given "key" 
 	 * @param id_key - the unique instance id key for a widget instance
@@ -108,6 +102,7 @@ public interface IWidgetAPI {	
  	 * @param key - the value to change to
 	 * @return - a string value marking status or an error message
 	 */
+	 @Deprecated
 	public String setPreferenceForKey(String id_key, String key, String value);
 		
 	/**
@@ -118,18 +113,10 @@ public interface IWidgetAPI {	
  	 * @param key - the value to change to
 	 * @return - a string value marking status or an error message
 	 */
+	@Deprecated
 	public String setSharedDataForKey(String id_key, String key, String value);
 	
 	/**
-	 * ? not implemented yet
-	 * @param id_key
-	 * @param key
-	 * @param value
-	 * @return
-	 */
-	public String setUserPropertyForKey(String id_key, String key, String value);
-	
-	/**
 	 * Returns a string value from the DB, obtained
 	 * from the given "key". This is a shared data value
 	 * between widgets using the same data 
@@ -137,10 +124,14 @@ public interface IWidgetAPI {	
 	 * @param key - key for the value to retrieve
 	 * @return - a string value found in the DB or an error message
 	 */
+	 @Deprecated
 	public String sharedDataForKey(String id_key, String key);	
 	
 	/**
 	 * show a widget instance based on the id_key
+	 * 
+	 * Note this is not a part of the W3C standard interface, but a Wookie-specific extension
+	 * 
 	 * @param id_key
 	 * @return
 	 */
@@ -148,18 +139,12 @@ public interface IWidgetAPI {	
 	
 	/**
 	 * Unlock a widget instance based on the id_key
+	 * 
+	 * Note this is not a part of the W3C standard interface, but a Wookie-specific extension
+	 * 
 	 * @param id_key
 	 * @return
 	 */
 	public String unlock(String id_key);
 	
-	/**
-	 * ? not implemented yet
-	 * @param id_key
-	 * @param key
-	 * @param value
-	 * @return
-	 */
-	public String userPropertyForKey(String id_key, String key);
-	
 }

Modified: incubator/wookie/trunk/src/org/apache/wookie/ajaxmodel/impl/WidgetAPIImpl.java
URL: http://svn.apache.org/viewvc/incubator/wookie/trunk/src/org/apache/wookie/ajaxmodel/impl/WidgetAPIImpl.java?rev=1133531&r1=1133530&r2=1133531&view=diff
==============================================================================
--- incubator/wookie/trunk/src/org/apache/wookie/ajaxmodel/impl/WidgetAPIImpl.java (original)
+++ incubator/wookie/trunk/src/org/apache/wookie/ajaxmodel/impl/WidgetAPIImpl.java Wed Jun  8 19:52:56 2011
@@ -145,7 +145,10 @@ public class WidgetAPIImpl implements IW
 	/*
 	 * (non-Javadoc)
 	 * @see org.apache.wookie.ajaxmodel.IWidgetAPI#preferenceForKey(java.lang.String, java.lang.String)
+	 * 
+	 * DEPRECATED: This was replaced by the W3C Storage API
 	 */
+	@Deprecated
 	public String preferenceForKey(String id_key, String key) {
 		HttpServletRequest request = WebContextFactory.get().getHttpServletRequest();
 		Messages localizedMessages = LocaleHandler.localizeMessages(request);
@@ -164,7 +167,10 @@ public class WidgetAPIImpl implements IW
 	/*
 	 * (non-Javadoc)
 	 * @see org.apache.wookie.ajaxmodel.IWidgetAPI#sharedDataForKey(java.lang.String, java.lang.String)
+	 * 
+	 * DEPRECATED: This was replaced by the Wave Gadget API
 	 */
+	@Deprecated
 	public String sharedDataForKey(String id_key, String key) {
 		HttpServletRequest request = WebContextFactory.get().getHttpServletRequest();
 		Messages localizedMessages = LocaleHandler.localizeMessages(request);
@@ -181,7 +187,12 @@ public class WidgetAPIImpl implements IW
 	/*
 	 * (non-Javadoc)
 	 * @see org.apache.wookie.ajaxmodel.IWidgetAPI#setPreferenceForKey(java.lang.String, java.lang.String, java.lang.String)
+	 *    
+	 * DEPRECATED: This was replaced by the W3C Storage API. We do require a method to respond to preference storage events on
+	 * the client so this method will be retained unless/until an alternative is implemented, but widget authors are strongly discouraged
+	 * from invoking this method in client code.
 	 */
+	@Deprecated
 	@SuppressWarnings("static-access")
 	public String setPreferenceForKey(String id_key, String key, String value) {
 		HttpServletRequest request = WebContextFactory.get().getHttpServletRequest();
@@ -201,7 +212,10 @@ public class WidgetAPIImpl implements IW
 	/*
 	 * (non-Javadoc)
 	 * @see org.apache.wookie.ajaxmodel.IWidgetAPI#setSharedDataForKey(java.lang.String, java.lang.String, java.lang.String)
+	 * 
+	 * DEPRECATED: This was replaced by the Wave Gadget API
 	 */
+	@Deprecated
 	@SuppressWarnings("static-access")
 	public String setSharedDataForKey(String id_key, String key, String value) {
 		HttpServletRequest request = WebContextFactory.get().getHttpServletRequest();
@@ -224,6 +238,8 @@ public class WidgetAPIImpl implements IW
 	/*
 	 * (non-Javadoc)
 	 * @see org.apache.wookie.ajaxmodel.IWidgetAPI#appendSharedDataForKey(java.lang.String, java.lang.String, java.lang.String)
+	 * 
+	 * Note: this method may be deprecated in a future release 
 	 */
 	@SuppressWarnings("static-access")
 	public String appendSharedDataForKey(String id_key, String key, String value) {
@@ -308,38 +324,6 @@ public class WidgetAPIImpl implements IW
 
 	/*
 	 * (non-Javadoc)
-	 * @see org.apache.wookie.ajaxmodel.IWidgetAPI#contextPropertyForKey(java.lang.String, java.lang.String)
-	 */
-	public String contextPropertyForKey(String id_key, String key) {
-		return "Not available"; //$NON-NLS-1$
-	}
-
-	/*
-	 * (non-Javadoc)
-	 * @see org.apache.wookie.ajaxmodel.IWidgetAPI#setContextPropertyForKey(java.lang.String, java.lang.String, java.lang.String)
-	 */
-	public String setContextPropertyForKey(String id_key, String key, String value) {
-		return "Not available"; //$NON-NLS-1$
-	}
-
-	/*
-	 * (non-Javadoc)
-	 * @see org.apache.wookie.ajaxmodel.IWidgetAPI#setUserPropertyForKey(java.lang.String, java.lang.String, java.lang.String)
-	 */
-	public String setUserPropertyForKey(String id_key, String key, String value) {
-		return "Not available"; //$NON-NLS-1$
-	}
-
-	/*
-	 * (non-Javadoc)
-	 * @see org.apache.wookie.ajaxmodel.IWidgetAPI#userPropertyForKey(java.lang.String, java.lang.String)
-	 */
-	public String userPropertyForKey(String id_key, String key) {
-		return "Not available"; //$NON-NLS-1$
-	}
-
-	/*
-	 * (non-Javadoc)
 	 * @see org.apache.wookie.ajaxmodel.IWidgetAPI#openURL(java.lang.String)
 	 */
 	// DEPRICATED - implemented in local js object instead

Modified: incubator/wookie/trunk/src/org/apache/wookie/util/WidgetJavascriptSyntaxAnalyzer.java
URL: http://svn.apache.org/viewvc/incubator/wookie/trunk/src/org/apache/wookie/util/WidgetJavascriptSyntaxAnalyzer.java?rev=1133531&r1=1133530&r2=1133531&view=diff
==============================================================================
--- incubator/wookie/trunk/src/org/apache/wookie/util/WidgetJavascriptSyntaxAnalyzer.java (original)
+++ incubator/wookie/trunk/src/org/apache/wookie/util/WidgetJavascriptSyntaxAnalyzer.java Wed Jun  8 19:52:56 2011
@@ -64,6 +64,8 @@ public class WidgetJavascriptSyntaxAnaly
 	public void parse() throws IOException {
 		if(_searchFolder != null){
 			parseIEIncompatibilities();
+			parseDeprecatedMethods();
+			parseNonstandardMethods();
 			// parse for browser X 
 			// parse for browser Y
 			// other things to parse for....
@@ -71,6 +73,60 @@ public class WidgetJavascriptSyntaxAnaly
 	}
 	
 	/**
+	 * Raise a warning for deprecated API calls in the Widget
+	 * @throws IOException
+	 */
+	private void parseDeprecatedMethods() throws IOException {
+	  // Pattern match on the syntax 'widget.preferemces.name=value' - including optional quotes & spaces around the value
+    Pattern pattern = Pattern.compile("Widget.preferenceForKey|Widget.setPreferenceForKey|Widget.sharedDataForKey|Widget.setSharedDataForKey|Widget.openURL", Pattern.CASE_INSENSITIVE);
+    Matcher matcher = pattern.matcher("");
+    // Search .js files, but also any html files
+    Iterator<?> iter =  FileUtils.iterateFiles(_searchFolder, new String[]{"js","htm","html"}, true);
+    while(iter.hasNext()) {
+      File file = (File) iter.next();
+      LineNumberReader lineReader = new LineNumberReader(new FileReader(file));
+      String line = null;
+      while ((line = lineReader.readLine()) != null){
+        matcher.reset(line);
+        if (matcher.find()){                
+          String message= "\n(Line " + lineReader.getLineNumber() + ") in file " + file;
+          message+= "\n\t "+line+"\n";
+          message+= "This file contains calls to Widget API methods that are deprecated and likely to be removed in future releases.\n";                             
+          FlashMessage.getInstance().message(formatWebMessage(message));
+          _logger.warn(message);
+        }
+      }
+    }
+	}
+	
+	 /**
+   * Raise a warning for API calls in the Widget that use non-standard Wookie-specific extensions
+   * @throws IOException
+   */
+  private void parseNonstandardMethods() throws IOException {
+    // Pattern match on the syntax 'widget.preferemces.name=value' - including optional quotes & spaces around the value
+    Pattern pattern = Pattern.compile("Widget.appendSharedDataForKey|Widget.lock|Widget.unlock|Widget.show|Widget.hide", Pattern.CASE_INSENSITIVE);
+    Matcher matcher = pattern.matcher("");
+    // Search .js files, but also any html files
+    Iterator<?> iter =  FileUtils.iterateFiles(_searchFolder, new String[]{"js","htm","html"}, true);
+    while(iter.hasNext()) {
+      File file = (File) iter.next();
+      LineNumberReader lineReader = new LineNumberReader(new FileReader(file));
+      String line = null;
+      while ((line = lineReader.readLine()) != null){
+        matcher.reset(line);
+        if (matcher.find()){                
+          String message= "\n(Line " + lineReader.getLineNumber() + ") in file " + file;
+          message+= "\n\t "+line+"\n";
+          message+= "This file contains calls to Widget API methods that are Wookie-specific extensions to the W3C Widget API, making it less likely the widget will work in other environments\n";                             
+          FlashMessage.getInstance().message(formatWebMessage(message));
+          _logger.warn(message);
+        }
+      }
+    }
+  }
+	
+	/**
 	 * Find occurrences of incompatible setter syntax for Internet explorer
 	 * i.e. Widget.preferences.foo=bar;
 	 *