Author: [email protected]
Date: Mon Aug 15 17:07:44 2011
New Revision: 1320
Log:
[AMDATUOPENSOCIAL-88] Implemented the "Remove" button. Next todo is updating
the gadget category count.
Added:
trunk/amdatu-opensocial/opensocial-shindig/src/main/resources/static/images/brokengadget.png
(contents, props changed)
Modified:
trunk/amdatu-opensocial/opensocial-dashboard/src/main/resources/jsp/dashboard.js.jsp
trunk/amdatu-opensocial/opensocial-dashboard/src/main/resources/jsp/gadgets_appdata.js.jsp
trunk/amdatu-opensocial/opensocial-dashboard/src/main/resources/static/css/dashboardui.css
trunk/amdatu-opensocial/opensocial-dashboard/src/main/resources/static/html/templates.html
trunk/amdatu-opensocial/opensocial-gadgetmanagement/src/main/java/org/amdatu/opensocial/gadgetmanagement/service/GadgetManagementRESTServiceImpl.java
Modified:
trunk/amdatu-opensocial/opensocial-dashboard/src/main/resources/jsp/dashboard.js.jsp
==============================================================================
---
trunk/amdatu-opensocial/opensocial-dashboard/src/main/resources/jsp/dashboard.js.jsp
(original)
+++
trunk/amdatu-opensocial/opensocial-dashboard/src/main/resources/jsp/dashboard.js.jsp
Mon Aug 15 17:07:44 2011
@@ -198,6 +198,18 @@
return false;
});
+ $('.removegadget').live('click', function() {
+ var widget =
dashboard.widgetsToAdd[$(this).attr("id").replace('removegadget','')];
+ var uri = widget.id;
+
+ removeGadgetFromRepository(uri);
+
+ var cat = $('.selectcategory.selected');
+ var button = cat[0];
+ button.click();
+ return false;
+ });
+
dashboard.element.live('dashboardAddWidget',function(e, obj){
addWidgetToAppData(obj.widget, startId++, dashboard);
Modified:
trunk/amdatu-opensocial/opensocial-dashboard/src/main/resources/jsp/gadgets_appdata.js.jsp
==============================================================================
---
trunk/amdatu-opensocial/opensocial-dashboard/src/main/resources/jsp/gadgets_appdata.js.jsp
(original)
+++
trunk/amdatu-opensocial/opensocial-dashboard/src/main/resources/jsp/gadgets_appdata.js.jsp
Mon Aug 15 17:07:44 2011
@@ -35,6 +35,7 @@
});
},
error: function(request, textStatus, errorThrown) {
+ alertErrorMessage("Could not retrieve the gadgets for this user.",
request, errorThrown);
currentGadgets = null;
}
});
@@ -93,12 +94,11 @@
url: url,
type: "PUT",
data: postdata,
- contentType: "application/json",
- dataType: "json",
async:false,
success: function(response) {
},
error: function(request, textStatus, errorThrown) {
+ alertErrorMessage("Could not remove the gadget from this users
AppData.", request, errorThrown);
}
});
}
@@ -116,12 +116,26 @@
newGadget = response;
},
error: function(request, textStatus, errorThrown) {
- alert('Could not add the gadget to the store. Error: ' + errorThrown);
+ alertErrorMessage("Could not add the gadget to the store.", request,
errorThrown);
}
});
return newGadget;
}
+removeGadgetFromRepository = function(uri) {
+ var url = "${contextPath}/rest/gadgetstore/gadgets?uri="+
encodeURIComponent(uri);
+ jQuery.ajax({
+ url: url,
+ type: "DELETE",
+ async:false,
+ success: function(response) {
+ },
+ error: function(request, textStatus, errorThrown) {
+ alertErrorMessage("Could not remove the gadget from the store.",
request, errorThrown);
+ }
+ });
+}
+
getGadget = function(uri) {
var gadget;
var url = "${contextPath}/rest/gadgetstore/gadgets?uri="+
encodeURIComponent(uri);
@@ -134,9 +148,17 @@
gadget = response;
},
error: function(request, textStatus, errorThrown) {
- alert('Could not retrieve the gadget. Error: ' + errorThrown);
+ alertErrorMessage("Could not retrieve the gadget.", request,
errorThrown);
}
});
return gadget;
+}
+function alertErrorMessage(msg, request, errorThrown) {
+ var errorMsg = msg + '\n';
+ errorMsg += 'Error: ' + request.status + ' - ' + request.statusText;
+ if (errorThrown) {
+ errorMsg += '\nException: ' + errorThrown;
+ }
+ alert(errorMsg);
}
\ No newline at end of file
Modified:
trunk/amdatu-opensocial/opensocial-dashboard/src/main/resources/static/css/dashboardui.css
==============================================================================
---
trunk/amdatu-opensocial/opensocial-dashboard/src/main/resources/static/css/dashboardui.css
(original)
+++
trunk/amdatu-opensocial/opensocial-dashboard/src/main/resources/static/css/dashboardui.css
Mon Aug 15 17:07:44 2011
@@ -248,13 +248,13 @@
.widgetitem .add-button {
float:left;
- margin:0 0 0 -131px;
+ margin:5px 0 0 -131px;
width:auto;
}
.widgetitem .remove-button {
float:left;
- margin:0 0 0 -20px;
+ margin:5px 0 0 -20px;
width:auto;
}
@@ -270,5 +270,5 @@
.widgetitem img {
border:1px solid #999999;
float:left;
- margin:10px 0 0 -132px;
+ margin:10px 10px 0 -132px;
}
\ No newline at end of file
Modified:
trunk/amdatu-opensocial/opensocial-dashboard/src/main/resources/static/html/templates.html
==============================================================================
---
trunk/amdatu-opensocial/opensocial-dashboard/src/main/resources/static/html/templates.html
(original)
+++
trunk/amdatu-opensocial/opensocial-dashboard/src/main/resources/static/html/templates.html
Mon Aug 15 17:07:44 2011
@@ -47,25 +47,29 @@
<script type="text/html" id="addwidgettemplate">
<li class="widgetitem">
- <img src="<%= screenshot %>" alt="" height="80" width="120">
+ <img src="<%= screenshot %>" alt="" height="120" width="120">
<!-- // .add-button -->
<h3><a href=""><%= title %></a></h3>
<p><b>Author:</b> <%= author %></p>
<p><b>Description:</b> <%= description %></p>
- <p>
- <div class="add-button">
- <input class="macro-button-add addwidget" id="addwidget<%= id %>"
value="Add to dashboard" type="button"><br>
- <input class="macro-hidden-uri" value="<%= url %>" type="hidden">
- </div>
- <div class="remove-button">
- <input class="macro-button-remove removewidget" id="removewidget<%= id
%>" value="Remove from store" type="button">
- <input class="macro-hidden-uri" value="<%= url %>" type="hidden">
- </div>
- <br/><br/><hr/>
- </p>
+
+ <br clear="all"/>
+
+ <div class="add-button">
+ <input class="macro-button-add addwidget" id="addwidget<%= id %>"
value="Add to dashboard" type="button"><br>
+ <input class="macro-hidden-uri" value="<%= url %>" type="hidden">
+ </div>
+ <div class="remove-button">
+ <input class="macro-button-remove removegadget" id="removegadget<%= id
%>" value="Remove from store" type="button">
+ <input class="macro-hidden-uri" value="<%= url %>" type="hidden">
+ </div>
+
+ <br clear="all"/>
+ <br/><hr/>
</li>
+
</script>
<div class="dialog" id="addwidgetdialog" title="Gadget repository"
style="width:1000px">
Modified:
trunk/amdatu-opensocial/opensocial-gadgetmanagement/src/main/java/org/amdatu/opensocial/gadgetmanagement/service/GadgetManagementRESTServiceImpl.java
==============================================================================
---
trunk/amdatu-opensocial/opensocial-gadgetmanagement/src/main/java/org/amdatu/opensocial/gadgetmanagement/service/GadgetManagementRESTServiceImpl.java
(original)
+++
trunk/amdatu-opensocial/opensocial-gadgetmanagement/src/main/java/org/amdatu/opensocial/gadgetmanagement/service/GadgetManagementRESTServiceImpl.java
Mon Aug 15 17:07:44 2011
@@ -22,6 +22,7 @@
import java.util.Map;
import javax.servlet.http.HttpServletRequest;
+import javax.ws.rs.DELETE;
import javax.ws.rs.DefaultValue;
import javax.ws.rs.GET;
import javax.ws.rs.POST;
@@ -68,7 +69,7 @@
private static final String[] GADGET_MODULEPREFS =
new String[] {"title", "description", "author", "author_email",
"author_affiliation", "screenshot",
- "title_url"};
+ "title_url"};
// Use the startId as prefix for the gadget id to ensure each gadget has a
unique id
private static int START_ID = 1;
@@ -140,8 +141,8 @@
throw new WebApplicationException(e,
Response.Status.INTERNAL_SERVER_ERROR);
}
- return Response.ok(jsonObject.toString(),
MediaType.APPLICATION_JSON_TYPE).cacheControl(MAXAGE_CACHE_CONTROL)
- .build();
+ return Response.ok(jsonObject.toString(),
MediaType.APPLICATION_JSON_TYPE).cacheControl(NO_CACHE_CONTROL)
+ .build();
}
/**
@@ -185,7 +186,7 @@
throw new WebApplicationException(e,
Response.Status.INTERNAL_SERVER_ERROR);
}
return Response.ok(jsonObject.toString(),
MediaType.APPLICATION_JSON_TYPE).cacheControl(NO_CACHE_CONTROL)
- .build();
+ .build();
}
/**
@@ -206,7 +207,8 @@
// Be sure to add the security token
String st = m_openSocialContainer.getSecurityToken(uri,
request);
jsonGadget.getJSONObject("metadata").put("securetoken", st);
- return Response.ok(jsonGadget.toString(),
MediaType.APPLICATION_JSON_TYPE).cacheControl(NO_CACHE_CONTROL).build();
+ return Response.ok(jsonGadget.toString(),
MediaType.APPLICATION_JSON_TYPE)
+ .cacheControl(NO_CACHE_CONTROL).build();
}
return
Response.status(Response.Status.NOT_FOUND).cacheControl(NO_CACHE_CONTROL).build();
}
@@ -216,6 +218,36 @@
}
/**
+ * Removes a single gadget. URL to this resource:
+ * DELETE /rest/gadgetstore/gadgets?uri=...
+ *
+ * @return The gadget.
+ */
+ @DELETE
+ @Path("gadgets")
+ public Response removeGadget(@Context final HttpHeaders headers, @Context
final HttpServletRequest request,
+ @QueryParam("uri") final String uri) {
+ try {
+ GadgetDefinition removeGadget = null;
+ for (GadgetDefinition gadget : m_gadgetManagement.getGadgets()) {
+ if (gadget.getUrl().equals(uri)) {
+ removeGadget = gadget;
+ }
+ }
+
+ if (removeGadget == null) {
+ return
Response.status(Response.Status.NOT_FOUND).cacheControl(NO_CACHE_CONTROL).build();
+ }
+
+ m_gadgetManagement.removeGadget(removeGadget);
+ return
Response.status(Response.Status.OK).cacheControl(NO_CACHE_CONTROL).build();
+ }
+ catch (Exception e) {
+ throw new WebApplicationException(e,
Response.Status.INTERNAL_SERVER_ERROR);
+ }
+ }
+
+ /**
* Returns gadgets available in the gadget store. URL to this resource:
* /rest/gadgetstore/gadgets
*
@@ -254,7 +286,8 @@
String st = m_openSocialContainer.getSecurityToken(uri,
request);
jsonGadget.getJSONObject("metadata").put("securetoken", st);
- return Response.ok(jsonGadget.toString(),
MediaType.APPLICATION_JSON_TYPE).cacheControl(NO_CACHE_CONTROL).build();
+ return Response.ok(jsonGadget.toString(),
MediaType.APPLICATION_JSON_TYPE)
+ .cacheControl(NO_CACHE_CONTROL).build();
}
return
Response.status(Response.Status.NOT_FOUND).cacheControl(NO_CACHE_CONTROL).build();
}
@@ -349,7 +382,7 @@
}
return Response.ok(jsonObject.toString(),
MediaType.APPLICATION_JSON_TYPE).cacheControl(NO_CACHE_CONTROL)
- .build();
+ .build();
}
private String[] getDefaultGadgetUrls(final HttpServletRequest request) {
@@ -375,7 +408,7 @@
}
private JSONObject retrieveGadget(final HttpServletRequest request, final
String gadgetUrl) throws JSONException,
- NoSuchAlgorithmException, UnsupportedEncodingException {
+ NoSuchAlgorithmException, UnsupportedEncodingException {
Map<String, String> gadgetSpec =
m_openSocialContainer.getGadgetSpec(request, gadgetUrl);
if (gadgetSpec != null) {
JSONObject gadget = new JSONObject();
@@ -415,12 +448,21 @@
return gadget;
}
else {
- return null;
+ JSONObject gadget = new JSONObject();
+ gadget.put("id", gadgetUrl);
+ gadget.put("title", "<i><Broken gadget></i>");
+ gadget.put("url", "");
+ // FIXME: the /gadgets alias refers to another bundle; Shindig
+ gadget.put("screenshot", request.getContextPath() +
"/gadgets/static/images/brokengadget.png");
+ gadget.put("description", "<i>The gadget XML cannot be
retrieved</i>");
+ gadget.put("author", "unknown author");
+ gadget.put("metadata", new JSONObject().put("gadgeturl",
gadgetUrl));
+ return gadget;
}
}
private void setGadgetId(final JSONObject gadget, final String gadgetId,
final boolean generateStartId)
- throws JSONException {
+ throws JSONException {
String id, url;
if (generateStartId) {
// For new default gadgets, use generated startId
Added:
trunk/amdatu-opensocial/opensocial-shindig/src/main/resources/static/images/brokengadget.png
==============================================================================
Binary file. No diff available.
_______________________________________________
Amdatu-commits mailing list
[email protected]
http://lists.amdatu.org/mailman/listinfo/amdatu-commits