Index: lams_tool_wookie/src/java/org/lamsfoundation/lams/tool/wookie/dto/WidgetData.java =================================================================== diff -u -re81fdf5aa1e9c04fd0b7a624d8b8419b13cac81a -rccc06a304397824e204b7b52ce6e3361cee18bbd --- lams_tool_wookie/src/java/org/lamsfoundation/lams/tool/wookie/dto/WidgetData.java (.../WidgetData.java) (revision e81fdf5aa1e9c04fd0b7a624d8b8419b13cac81a) +++ lams_tool_wookie/src/java/org/lamsfoundation/lams/tool/wookie/dto/WidgetData.java (.../WidgetData.java) (revision ccc06a304397824e204b7b52ce6e3361cee18bbd) @@ -28,11 +28,11 @@ private String url; private String identifier; private String title; - private String height; - private String width; + private int height; + private int width; private Boolean maximize; - private WidgetData() {} + public WidgetData() {} public String getUrl() { return url; @@ -58,19 +58,19 @@ this.title = title; } - public String getHeight() { + public int getHeight() { return height; } - public void setHeight(String height) { + public void setHeight(int height) { this.height = height; } - public String getWidth() { + public int getWidth() { return width; } - public void setWidth(String width) { + public void setWidth(int width) { this.width = width; } Index: lams_tool_wookie/src/java/org/lamsfoundation/lams/tool/wookie/service/WookieService.java =================================================================== diff -u -rc950f1229e26a9532391d9a07356161bf80ed270 -rccc06a304397824e204b7b52ce6e3361cee18bbd --- lams_tool_wookie/src/java/org/lamsfoundation/lams/tool/wookie/service/WookieService.java (.../WookieService.java) (revision c950f1229e26a9532391d9a07356161bf80ed270) +++ lams_tool_wookie/src/java/org/lamsfoundation/lams/tool/wookie/service/WookieService.java (.../WookieService.java) (revision ccc06a304397824e204b7b52ce6e3361cee18bbd) @@ -91,6 +91,7 @@ import org.lamsfoundation.lams.util.MessageService; import org.lamsfoundation.lams.util.WebUtil; import org.lamsfoundation.lams.util.audit.IAuditService; +import org.lamsfoundation.lams.web.util.AttributeNames; import org.w3c.dom.Document; import org.w3c.dom.NodeList; import org.xml.sax.InputSource; @@ -406,7 +407,26 @@ // reset it to new toolContentId wookie.setToolContentId(toolContentId); wookie.setCreateBy(newUserUid); + + User user = (User)userManagementService.findById(User.class, newUserUid); + // If the wookie has an identifier, it has been initiated. Make an new instance using the identifier + if (!StringUtils.isEmpty(wookie.getWidgetIdentifier()) && user != null) { + String wookieUrl = getWookieURL(); + String wookieKey = getWookieAPIKey(); + wookieUrl += WookieConstants.RELATIVE_URL_WIDGET_SERVICE; + + String returnXML = WookieUtil.getWidget(wookieUrl, wookieKey, wookie.getWidgetIdentifier(), user.getUserDTO(), + toolContentId.toString(), true); + + WidgetData widgetData = WookieUtil.getWidgetDataFromXML(returnXML); + wookie.setWidgetAuthorUrl(widgetData.getUrl()); + wookie.setWidgetIdentifier(widgetData.getIdentifier()); + wookie.setWidgetHeight(widgetData.getHeight()); + wookie.setWidgetMaximise(widgetData.getMaximize()); + wookie.setWidgetWidth(widgetData.getWidth()); + } + wookieDAO.saveOrUpdate(wookie); } catch (ImportToolContentException e) { throw new ToolException(e); Index: lams_tool_wookie/src/java/org/lamsfoundation/lams/tool/wookie/util/WookieConstants.java =================================================================== diff -u -r2dafe7131ccf51f9ac062eb9fe3aac6fe63bfa78 -rccc06a304397824e204b7b52ce6e3361cee18bbd --- lams_tool_wookie/src/java/org/lamsfoundation/lams/tool/wookie/util/WookieConstants.java (.../WookieConstants.java) (revision 2dafe7131ccf51f9ac062eb9fe3aac6fe63bfa78) +++ lams_tool_wookie/src/java/org/lamsfoundation/lams/tool/wookie/util/WookieConstants.java (.../WookieConstants.java) (revision ccc06a304397824e204b7b52ce6e3361cee18bbd) @@ -93,8 +93,14 @@ public static final String XML_IDENTIFIER = "identifier"; public static final String XML_TITLE = "title"; public static final String XML_DESCRIPTION = "description"; + public static final String XML_HEIGHT = "height"; + public static final String XML_WIDTH = "width"; + public static final String XML_MAXIMISE = "maximize"; public static final String XML_ICON = "icon"; public static final String XML_PARAMETER = "parameter"; public static final String XML_URL = "url"; + public static final String XML_WIDGET_DATA = "widgetdata"; + + } Index: lams_tool_wookie/src/java/org/lamsfoundation/lams/tool/wookie/util/WookieUtil.java =================================================================== diff -u -r08622dbb2e6672584f1cfcb52a239a46b3d667b1 -rccc06a304397824e204b7b52ce6e3361cee18bbd --- lams_tool_wookie/src/java/org/lamsfoundation/lams/tool/wookie/util/WookieUtil.java (.../WookieUtil.java) (revision 08622dbb2e6672584f1cfcb52a239a46b3d667b1) +++ lams_tool_wookie/src/java/org/lamsfoundation/lams/tool/wookie/util/WookieUtil.java (.../WookieUtil.java) (revision ccc06a304397824e204b7b52ce6e3361cee18bbd) @@ -44,6 +44,7 @@ import org.apache.log4j.Logger; import org.lamsfoundation.lams.tool.exception.ToolException; +import org.lamsfoundation.lams.tool.wookie.dto.WidgetData; import org.lamsfoundation.lams.tool.wookie.dto.WidgetDefinition; import org.lamsfoundation.lams.tool.wookie.web.actions.AuthoringAction; import org.lamsfoundation.lams.usermanagement.dto.UserDTO; @@ -304,7 +305,8 @@ params.put(WookieConstants.PARAM_KEY_WIDGET_ID, URLEncoder.encode(widgetIdentifier, "UTF8")); params.put(WookieConstants.PARAM_KEY_SHARED_DATA_KEY, URLEncoder.encode(sharedDataKey, "UTF8")); params.put(WookieConstants.PARAM_KEY_API_KEY, URLEncoder.encode(apiKey, "UTF8")); - params.put(WookieConstants.PARAM_KEY_REQUEST_ID, URLEncoder.encode(WookieConstants.PARAM_VALUE_PROPERTY_VALUE_CLONE, "UTF8")); + params.put(WookieConstants.PARAM_KEY_REQUEST_ID, URLEncoder.encode( + WookieConstants.PARAM_VALUE_PROPERTY_VALUE_CLONE, "UTF8")); params.put(WookieConstants.PARAM_KEY_SHARED_DATA_KEY, URLEncoder.encode(sharedDataKey, "UTF8")); params.put(WookieConstants.PARAM_KEY_PROPERTY_CLONED_SHARED_KEY, URLEncoder.encode(newSharedDataKey, "UTF8")); params.put(WookieConstants.PARAM_KEY_USER_ID, URLEncoder.encode(userID, "UTF8")); @@ -409,9 +411,10 @@ return conn; } - + /** * Gets the url response from the getWidget xml + * * @param xml * @return * @throws ParserConfigurationException @@ -423,13 +426,65 @@ DocumentBuilder db = dbf.newDocumentBuilder(); Document document = db.parse(new InputSource(new StringReader(xml))); NodeList widgetList = document.getElementsByTagName(WookieConstants.XML_URL); - + if (widgetList != null && widgetList.item(0) != null) { - String url = widgetList.item(0).getTextContent(); + String url = widgetList.item(0).getTextContent(); return url; } else { return null; } } + /** + * Gets the widget data response from the getWidget xml + * + * @param xml + * @return + * @throws ParserConfigurationException + * @throws SAXException + * @throws IOException + */ + public static WidgetData getWidgetDataFromXML(String xml) throws ParserConfigurationException, SAXException, + IOException { + DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance(); + DocumentBuilder db = dbf.newDocumentBuilder(); + Document document = db.parse(new InputSource(new StringReader(xml))); + NodeList widgetList = document.getElementsByTagName(WookieConstants.XML_WIDGET_DATA); + + NodeList widgetPropertyList = (widgetList.item(0)).getChildNodes(); + WidgetData widgetData = new WidgetData(); + + for (int i = 0; i < widgetPropertyList.getLength(); i++) { + Node widgetProperty = widgetPropertyList.item(i); + + String propertyTitle = widgetProperty.getNodeName(); + + // Add the properties + if (propertyTitle.equals(WookieConstants.XML_URL)) { + widgetData.setUrl(widgetProperty.getTextContent()); + } else if (propertyTitle.equals(WookieConstants.XML_IDENTIFIER)) { + widgetData.setIdentifier(widgetProperty.getTextContent()); + } else if (propertyTitle.equals(WookieConstants.XML_TITLE)) { + widgetData.setTitle(widgetProperty.getTextContent()); + } else if (propertyTitle.equals(WookieConstants.XML_HEIGHT)) { + String heightStr = widgetProperty.getTextContent(); + if (heightStr != null) { + widgetData.setHeight(Integer.parseInt(heightStr)); + } + } else if (propertyTitle.equals(WookieConstants.XML_WIDTH)) { + String widthStr = widgetProperty.getTextContent(); + if (widthStr != null) { + widgetData.setWidth(Integer.parseInt(widthStr)); + } + } else if (propertyTitle.equals(WookieConstants.XML_MAXIMISE)) { + String maximiseStr = widgetProperty.getTextContent(); + if (maximiseStr != null) { + widgetData.setMaximize(Boolean.parseBoolean(maximiseStr)); + } + } + } + + return widgetData; + } + }