Author: psharples
Date: Thu Mar 15 12:32:35 2012
New Revision: 1300956

URL: http://svn.apache.org/viewvc?rev=1300956&view=rev
Log:
Updates so that an import of a widget now returns a hybrid config.xml response. 
 See WOOKIE-324.

Modified:
    
incubator/wookie/trunk/src/org/apache/wookie/controller/WidgetsController.java
    incubator/wookie/trunk/src/org/apache/wookie/helpers/WidgetImportHelper.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=1300956&r1=1300955&r2=1300956&view=diff
==============================================================================
--- 
incubator/wookie/trunk/src/org/apache/wookie/controller/WidgetsController.java 
(original)
+++ 
incubator/wookie/trunk/src/org/apache/wookie/controller/WidgetsController.java 
Thu Mar 15 12:32:35 2012
@@ -272,7 +272,7 @@ public class WidgetsController extends C
           // A new widget was created, so return 201
           //
           WidgetFactory.addNewWidget(widgetModel, zipFile,false);
-          returnXml(WidgetImportHelper.createXMLWidgetDocument(widgetModel, 
new File(fac.getUnzippedWidgetDirectory(), "config.xml")), response);
+          returnXml(WidgetImportHelper.createXMLWidgetDocument(widgetModel, 
new File(fac.getUnzippedWidgetDirectory(), "config.xml"), 
getLocalPath(request), true), response);
           return true;
           
         } else {
@@ -282,7 +282,7 @@ public class WidgetsController extends C
           // and return 200
           //
           
WidgetFactory.update(widgetModel,persistenceManager.findWidgetByGuid(widgetModel.getIdentifier()),false,
 zipFile);
-          returnXml(WidgetImportHelper.createXMLWidgetDocument(widgetModel, 
new File(fac.getUnzippedWidgetDirectory(), "config.xml")), response);
+          returnXml(WidgetImportHelper.createXMLWidgetDocument(widgetModel, 
new File(fac.getUnzippedWidgetDirectory(), "config.xml"), 
getLocalPath(request), true), response);
           return false;
           
         }

Modified: 
incubator/wookie/trunk/src/org/apache/wookie/helpers/WidgetImportHelper.java
URL: 
http://svn.apache.org/viewvc/incubator/wookie/trunk/src/org/apache/wookie/helpers/WidgetImportHelper.java?rev=1300956&r1=1300955&r2=1300956&view=diff
==============================================================================
--- 
incubator/wookie/trunk/src/org/apache/wookie/helpers/WidgetImportHelper.java 
(original)
+++ 
incubator/wookie/trunk/src/org/apache/wookie/helpers/WidgetImportHelper.java 
Thu Mar 15 12:32:35 2012
@@ -15,33 +15,86 @@ package org.apache.wookie.helpers;
 
 import java.io.File;
 import java.io.IOException;
+import java.io.StringReader;
+import java.util.List;
 
 import org.apache.commons.io.FileUtils;
+import org.apache.log4j.Logger;
+import org.apache.wookie.w3c.IIconEntity;
 import org.apache.wookie.w3c.W3CWidget;
-
-//TODO improve this so it more than a basic stub
+import org.jdom.Document;
+import org.jdom.Element;
+import org.jdom.JDOMException;
+import org.jdom.input.SAXBuilder;
+import org.jdom.output.Format;
+import org.jdom.output.XMLOutputter;
+/**
+ * Class used to build a hybrid version of the original config.xml, but with 
the id attribute updated 
+ * (if the parser did so) and updated icon entries
+ */
 public class WidgetImportHelper {
   
+  static Logger logger = Logger.getLogger(WidgetImportHelper.class.getName());
+  
   private static String ERROR_RESPONSE = "<error>unable to read 
config.xml</error>";
 
-  public static String createXMLWidgetDocument(W3CWidget widgetModel, File 
configXml) {
+  public static String createXMLWidgetDocument(W3CWidget widgetModel, File 
configXml, String localPath, boolean updateOriginal){
     if(configXml.exists()){
-      String xmlContents;
+      String xmlContents = null;
       try {
         xmlContents = FileUtils.readFileToString(configXml, "UTF-8");
-        return updatePaths(widgetModel, xmlContents);
+        if(updateOriginal){
+          return updatePaths(widgetModel, xmlContents, localPath);
+        }
+        else {
+          return xmlContents;
+        }
       } catch (IOException e) {
         return ERROR_RESPONSE;
       }
     }else{
       return ERROR_RESPONSE;
     }
-    
   }
   
-  private static String updatePaths(W3CWidget widgetModel, String configXml){
-    //TODO - some jdom stuff to update the paths to start files & icons
-    return configXml;
+  private static String updatePaths(W3CWidget widgetModel, String configXml, 
String localPath){
+    String updatedConfigXml = null;
+    try {
+      SAXBuilder builder = new SAXBuilder();
+      StringReader reader = new StringReader(configXml);
+      String id = null;
+      String generatedId = null;
+      Document doc = null;
+      Element tempElement = null;
+      doc = builder.build(reader);
+      Element widget = doc.getRootElement();
+      id = widget.getAttributeValue("id");
+      generatedId = widgetModel.getIdentifier();
+      if(id == null || !id.equals(generatedId)){
+        widget.setAttribute("id",  widgetModel.getIdentifier());
+      }
+      tempElement = widget.getChild("icon", widget.getNamespace());
+      if(tempElement != null){
+        int idx = widget.indexOf(tempElement);
+        //remove original icon entries
+        widget.removeChildren("icon", widget.getNamespace());
+        // get the model icons
+        List<IIconEntity> generatedIcons = widgetModel.getIconsList();
+        for(IIconEntity icon : generatedIcons){
+          String parserSrc = icon.getSrc();
+          icon.setSrc(localPath + parserSrc);
+          widget.addContent(idx++ , icon.toXml());
+          icon.setSrc(parserSrc);
+        }
+      }
+      XMLOutputter outputter = new XMLOutputter(Format.getPrettyFormat());
+      updatedConfigXml = outputter.outputString(doc);
+    } catch (JDOMException e) {
+     logger.error("Error parsing config.", e);
+    } catch (IOException e) {
+      logger.error("Problem building parser config.", e);
+    }
+    return updatedConfigXml;
   }
 
-}
+}
\ No newline at end of file


Reply via email to