Author: psharples
Date: Thu Sep 27 17:19:35 2012
New Revision: 1391110
URL: http://svn.apache.org/viewvc?rev=1391110&view=rev
Log:
Updated marketplace call to check if existing instances of w3c widgets are
already deployed in rave. Additionally added a temporary bug fix for an issue
caused in wookie 0.10.0 (which has been fixed for 0.13.0)
Modified:
rave/trunk/rave-components/rave-web/src/main/java/org/apache/rave/portal/web/api/rpc/MarketplaceAPI.java
rave/trunk/rave-providers/rave-w3c-provider/src/main/java/org/apache/rave/provider/w3c/service/impl/WookieWidgetService.java
Modified:
rave/trunk/rave-components/rave-web/src/main/java/org/apache/rave/portal/web/api/rpc/MarketplaceAPI.java
URL:
http://svn.apache.org/viewvc/rave/trunk/rave-components/rave-web/src/main/java/org/apache/rave/portal/web/api/rpc/MarketplaceAPI.java?rev=1391110&r1=1391109&r2=1391110&view=diff
==============================================================================
---
rave/trunk/rave-components/rave-web/src/main/java/org/apache/rave/portal/web/api/rpc/MarketplaceAPI.java
(original)
+++
rave/trunk/rave-components/rave-web/src/main/java/org/apache/rave/portal/web/api/rpc/MarketplaceAPI.java
Thu Sep 27 17:19:35 2012
@@ -20,6 +20,7 @@ package org.apache.rave.portal.web.api.r
import org.apache.rave.portal.model.Widget;
import org.apache.rave.portal.service.WidgetMarketplaceService;
+import org.apache.rave.portal.service.WidgetService;
import org.apache.rave.portal.web.api.rpc.model.RpcOperation;
import org.apache.rave.portal.web.api.rpc.model.RpcResult;
import org.apache.rave.portal.web.validator.NewWidgetValidator;
@@ -43,11 +44,13 @@ public class MarketplaceAPI {
private static final Logger logger =
LoggerFactory.getLogger(MarketplaceAPI.class);
private final WidgetMarketplaceService marketplaceService;
private final NewWidgetValidator widgetValidator;
+ private final WidgetService widgetService;
@Autowired
- public MarketplaceAPI(WidgetMarketplaceService marketplaceService,
NewWidgetValidator validator) {
+ public MarketplaceAPI(WidgetMarketplaceService marketplaceService,
NewWidgetValidator validator, WidgetService widgetService) {
this.marketplaceService = marketplaceService;
this.widgetValidator = validator;
+ this.widgetService = widgetService;
}
@ResponseBody
@@ -57,16 +60,19 @@ public class MarketplaceAPI {
return new RpcOperation<Widget>() {
@Override
public Widget execute() {
+ Widget widget = null;
// TODO - improve info sent back to marketplace, rather then
just writing to the console
try {
- Widget widget = marketplaceService.getWidgetMetadata(url,
providerType);
+ widget = marketplaceService.getWidgetMetadata(url,
providerType);
if(widget == null){
return null;
}
BeanPropertyBindingResult results = new
BeanPropertyBindingResult(widget, "widget");
widgetValidator.validate(widget, results);
if (results.hasErrors()) {
- logger.error(results.toString());
+ if(results.hasFieldErrors("url") &&
results.getFieldError("url").toString().contains("widget.url.exists")){
+ return
widgetService.getWidgetByUrl(widget.getUrl());
+ }
return null;
}
return marketplaceService.addWidget(widget);
Modified:
rave/trunk/rave-providers/rave-w3c-provider/src/main/java/org/apache/rave/provider/w3c/service/impl/WookieWidgetService.java
URL:
http://svn.apache.org/viewvc/rave/trunk/rave-providers/rave-w3c-provider/src/main/java/org/apache/rave/provider/w3c/service/impl/WookieWidgetService.java?rev=1391110&r1=1391109&r2=1391110&view=diff
==============================================================================
---
rave/trunk/rave-providers/rave-w3c-provider/src/main/java/org/apache/rave/provider/w3c/service/impl/WookieWidgetService.java
(original)
+++
rave/trunk/rave-providers/rave-w3c-provider/src/main/java/org/apache/rave/provider/w3c/service/impl/WookieWidgetService.java
Thu Sep 27 17:19:35 2012
@@ -18,12 +18,17 @@
*/
package org.apache.rave.provider.w3c.service.impl;
+import java.io.BufferedReader;
import java.io.File;
import java.io.IOException;
+import java.io.InputStream;
+import java.io.InputStreamReader;
import java.net.MalformedURLException;
import java.net.URL;
import java.util.ArrayList;
import java.util.Collection;
+import java.util.zip.ZipEntry;
+import java.util.zip.ZipFile;
import org.apache.commons.io.FileUtils;
import org.apache.rave.portal.model.User;
@@ -36,7 +41,7 @@ import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
public class WookieWidgetService implements WidgetProviderService {
- private static Logger logger =
LoggerFactory.getLogger(WookieWidgetService.class);
+ private static Logger logger =
LoggerFactory.getLogger(WookieWidgetService.class);
private final String wookieServerUrl; // = "http://localhost:8080/wookie";
private final String wookieApiKey; // = "TEST";
@@ -119,8 +124,9 @@ public class WookieWidgetService impleme
widget.setTitle(wookieWidget.getTitle());
widget.setType("W3C");
widget.setThumbnailUrl(wookieWidget.getIcon().toString());
- } catch (WookieConnectorException e) {
- logger.error(e.getMessage());
+ } catch (WookieConnectorException e){
+ logger.warn(e.getMessage());
+ return returnURLFromConfig(tempWgtFile);
} catch (MalformedURLException e) {
logger.error("Malformed url error. " + e.getMessage());
} catch (IOException e) {
@@ -133,6 +139,41 @@ public class WookieWidgetService impleme
}
return widget;
}
+
+ // This function compensates for a bug in wookie-0.10.0. The
postWidget(tempWgtFile, adminUsername, adminPassword)
+ // call will only accept new widgets and not allow you to update existing
widgets, without already knowing the
+ // widgets Id attribute (this is the same as the 'url' attribute in rave)
+ // In some cases (the marketplace for example) we need to know the widgets
Id (rave url) when we only have
+ // the original file.wgt. This method tries to find the .wgt id in the
config file of the downloaded zip file
+ // so we can determine if it has already been added to rave without having
to reimport to wookie.
+ // This routine does not generate identifiers, as wookie would on empty
<id> elements found in the config.xml.
+ // NOTE: this has been fixed in wookie 0.13.0 onwards
+ private Widget returnURLFromConfig(File wgtFile){
+ Widget widget = null;
+ try {
+ final ZipFile zipFile = new ZipFile(wgtFile);
+ ZipEntry entry = zipFile.getEntry("config.xml");
+ InputStream input = zipFile.getInputStream(entry);
+ BufferedReader br = new BufferedReader(new
InputStreamReader(input, "UTF-8"));
+ try {
+ String line = null;
+ while (( line = br.readLine()) != null){
+ if(line.contains("id=")){
+ String val = line.substring(line.indexOf("id=")+4,
line.indexOf("\"", line.indexOf("id=")+5));
+ widget = new W3CWidget();
+ widget.setUrl(val);
+ return widget;
+ }
+ }
+ }
+ finally {
+ input.close();
+ }
+ } catch (Exception e) {
+ logger.error(e.getMessage());
+ }
+ return widget;
+ }
private String normalizeFileName(URL urlPath){
String filename;
@@ -164,7 +205,6 @@ public class WookieWidgetService impleme
@SuppressWarnings("deprecation")
private W3CWidget getWidgetForViewer(Widget widget, String sharedDataKey,
User viewer){
try {
- // TODO: parameters for WookieConnectorService should not be fixed
in code.
connectorService = getWookieConnectorService(wookieServerUrl,
wookieApiKey, sharedDataKey);
org.apache.wookie.connector.framework.User user = new
org.apache.wookie.connector.framework.User(String.valueOf(viewer.getUsername()),
viewer.getUsername());
connectorService.setCurrentUser(user);