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/09/01 11:48:17 UTC

svn commit: r1163973 - /incubator/wookie/trunk/src/org/apache/wookie/controller/WidgetsController.java

Author: scottbw
Date: Thu Sep  1 09:48:16 2011
New Revision: 1163973

URL: http://svn.apache.org/viewvc?rev=1163973&view=rev
Log:
Added support for a ?url parameter to the /widgets API for registering OpenSocial Gadgets (see WOOKIE-209), mirroring the capabilities of the admin UI.

Modified:
    incubator/wookie/trunk/src/org/apache/wookie/controller/WidgetsController.java

Modified: incubator/wookie/trunk/src/org/apache/wookie/controller/WidgetsController.java
URL: http://svn.apache.org/viewvc/incubator/wookie/trunk/src/org/apache/wookie/controller/WidgetsController.java?rev=1163973&r1=1163972&r2=1163973&view=diff
==============================================================================
--- incubator/wookie/trunk/src/org/apache/wookie/controller/WidgetsController.java (original)
+++ incubator/wookie/trunk/src/org/apache/wookie/controller/WidgetsController.java Thu Sep  1 09:48:16 2011
@@ -38,7 +38,10 @@ import org.apache.wookie.exceptions.Inva
 import org.apache.wookie.exceptions.ResourceDuplicationException;
 import org.apache.wookie.exceptions.ResourceNotFoundException;
 import org.apache.wookie.exceptions.UnauthorizedAccessException;
+import org.apache.wookie.helpers.WidgetFactory;
 import org.apache.wookie.helpers.WidgetHelper;
+import org.apache.wookie.util.gadgets.GadgetUtils;
+import org.apache.wookie.w3c.W3CWidget;
 
 /**
  * <p>Controller for widget resources.</p>
@@ -155,79 +158,111 @@ public class WidgetsController extends C
 	 */
 	@Override
 	protected boolean create(String resourceId, HttpServletRequest request)
-			throws ResourceDuplicationException, InvalidParametersException,
-			UnauthorizedAccessException {
-	  
+	throws ResourceDuplicationException, InvalidParametersException,
+	UnauthorizedAccessException {
+
 	  //
-    // Check for a "url" parameter in the request, indicating this is a remote widget or opensocial gadget xml file 
+	  // Check for a "url" parameter in the request, indicating this is a remote widget or opensocial gadget xml file 
 	  // FIXME implement this 
-    //
-    String url = request.getParameter("url");
-    if (url != null && url.trim().length() != 0){
-      _logger.info("POSTing URLs instead of files it not yet supported");
-      throw new InvalidParametersException();
-    }
-		
+	  //
+	  String url = request.getParameter("url");
+	  if (url != null && url.trim().length() != 0){
+	    return createGadget(request, url);
+	  }
+
 	  //
 	  // Get the path for the deploy folder
 	  //
-		Configuration properties = (Configuration) request.getSession().getServletContext().getAttribute("properties"); //$NON-NLS-1$
-		final String DEPLOY_FOLDER = getServletContext().getRealPath(properties.getString("widget.deployfolder"));//$NON-NLS-1$
-		
-		//
-		// Create factory for processing POSTed files
-		//
-		FileItemFactory factory = new DiskFileItemFactory();
-		
-		//
-		// Create a new file upload handler
-		//
-		ServletFileUpload upload = new ServletFileUpload(factory);
-		
-		//
-		// Create a flag we'll use to check if we got any .wgt files in the POST
-		//
-    boolean requestContainedWgtFile = false;
-		
-		//
-		// Save file in the deploy folder
-		//
-		try {
-			@SuppressWarnings("unchecked")
-			List <FileItem> items = upload.parseRequest(request);
-			
-			//
-			// Only save .wgt files and ignore any others in the POST
-			//
-			for (FileItem item: items){
-			  if (item.getName().endsWith(".wgt")){
-			    File saveFile = new File(DEPLOY_FOLDER + "/" + item.getName());
-			    item.write(saveFile);
-			    requestContainedWgtFile = true;
-			  }
-			}
-			
-		} catch (FileUploadException e) {
-			throw new InvalidParametersException();
-		} catch (Exception e) {
-		  //
-		  // Catch any other exceptions thrown by the save file operation
-		  // and throw a basic 400 response to the client, though really
-		  // this is more like a 500. At least we can log the details.
-		  // 
-		  _logger.error(e.getMessage(), e);
-			throw new InvalidParametersException();
-		}
-		
-    //
-    // If there are no .wgt files in the POST, throw an exception
-		// We have to check for this here as other exceptions are caught in 
-		// the code above, e.g. generic file system errors
-    //
-    if (requestContainedWgtFile == false){
-      throw new InvalidParametersException();
-    }
-    
-		return true;
+	  Configuration properties = (Configuration) request.getSession().getServletContext().getAttribute("properties"); //$NON-NLS-1$
+	  final String DEPLOY_FOLDER = getServletContext().getRealPath(properties.getString("widget.deployfolder"));//$NON-NLS-1$
+
+	  //
+	  // Create factory for processing POSTed files
+	  //
+	  FileItemFactory factory = new DiskFileItemFactory();
+
+	  //
+	  // Create a new file upload handler
+	  //
+	  ServletFileUpload upload = new ServletFileUpload(factory);
+
+	  //
+	  // Create a flag we'll use to check if we got any .wgt files in the POST
+	  //
+	  boolean requestContainedWgtFile = false;
+
+	  //
+	  // Save file in the deploy folder
+	  //
+	  try {
+	    @SuppressWarnings("unchecked")
+	    List <FileItem> items = upload.parseRequest(request);
+
+	    //
+	    // Only save .wgt files and ignore any others in the POST
+	    //
+	    for (FileItem item: items){
+	      if (item.getName().endsWith(".wgt")){
+	        File saveFile = new File(DEPLOY_FOLDER + "/" + item.getName());
+	        item.write(saveFile);
+	        requestContainedWgtFile = true;
+	      }
+	    }
+
+	  } catch (FileUploadException e) {
+	    throw new InvalidParametersException();
+	  } catch (Exception e) {
+	    //
+	    // Catch any other exceptions thrown by the save file operation
+	    // and throw a basic 400 response to the client, though really
+	    // this is more like a 500. At least we can log the details.
+	    // 
+	    _logger.error(e.getMessage(), e);
+	    throw new InvalidParametersException();
+	  }
+
+	  //
+	  // If there are no .wgt files in the POST, throw an exception
+	  // We have to check for this here as other exceptions are caught in 
+	  // the code above, e.g. generic file system errors
+	  //
+	  if (requestContainedWgtFile == false){
+	    throw new InvalidParametersException();
+	  }
+
+	  return true;
+	}
+	
+	/**
+	 * Register a gadget
+	 * @param request
+	 * @param gadgetUrl
+	 * @return true if the gadget is added; false if it was already registered
+	 * @throws InvalidParametersException 
+	 * @throws Exception
+	 */
+	public boolean createGadget(HttpServletRequest request, String gadgetUrl) throws InvalidParametersException{
+
+	  //
+	  // Create a new widget from the gadget URL
+	  //
+	  W3CWidget widget;
+	  try {
+	    widget = GadgetUtils.createWidget(request);
+	  } catch (Exception e) {
+	    throw new InvalidParametersException();
+	  }
+
+	  //
+	  // If the gadget is not already registered, add it
+	  //
+	  IPersistenceManager persistenceManager = PersistenceManagerFactory.getPersistenceManager();
+	  if(persistenceManager.findWidgetByGuid(widget.getIdentifier()) == null){
+	    WidgetFactory.addNewWidget(widget);
+	    return true;
+	  } else {
+	    return false;
+	  }
 	}
+    
 }