package org.curriki.xwiki.servlet.restlet.resource.assets; import org.restlet.resource.Representation; import org.restlet.resource.Variant; import org.restlet.resource.ResourceException; import org.restlet.Context; import org.restlet.data.Request; import org.restlet.data.Response; import org.restlet.data.Status; import org.curriki.xwiki.plugin.asset.Asset; import org.curriki.xwiki.servlet.restlet.resource.BaseResource; import net.sf.json.JSONObject; import com.xpn.xwiki.api.Property; import com.xpn.xwiki.XWikiException; import java.util.List; import java.util.Date; import java.util.ArrayList; /** */ public class AssetManagerResource extends BaseResource { public AssetManagerResource(Context context, Request request, Response response) { super(context, request, response); setReadable(true); setModifiable(true); defaultVariants(); } @Override public Representation represent(Variant variant) throws ResourceException { return null; } @Override public void storeRepresentation(Representation representation) throws ResourceException { setupXWiki(); JSONObject json = representationToJSONObject(representation); /** * this json parameter indicate the action to execute */ String action = json.getString("action"); if (action!=null) { if (action.equalsIgnoreCase("setAsterixReview")) { setAsterixReview(json.getString("asterixReviewValue")); } else if (action.equalsIgnoreCase("removeAsterixReview")) { removeAsterixReview(); } } } /** * remove the asterix review of a resource * @throws ResourceException */ private void removeAsterixReview() throws ResourceException { Request request = getRequest(); String assetName = (String) request.getAttributes().get("assetName"); Asset asset; try { asset = plugin.fetchAsset(assetName); } catch (XWikiException e) { throw error(Status.CLIENT_ERROR_NOT_FOUND, e.getMessage()); } asset.use("CRS.CurrikiReviewStatusClass"); String asterixReviewValue = (String) asset.getValue("status"); asset.set("status", "100"); try { List<String> crsvalue = new ArrayList<String>(1); crsvalue.add(xwikiContext.getMessageTool().get("curriki.crs.review.setas"+asterixReviewValue)); asset.save(xwikiContext.getMessageTool().get("curriki.comment.crsvalueremoved", crsvalue)); } catch (XWikiException e) { throw error(Status.CLIENT_ERROR_NOT_FOUND, e.getMessage()); } String newPage = getRequest().getRootRef().toString(); if (!newPage.endsWith("/")) { newPage += "/"; } newPage += "assets/"+asset.getFullName(); getResponse().redirectSeeOther(newPage); } /** * set the asterix review of a resource * @param asterixReviewValue = new asterix review value * @throws ResourceException */ private void setAsterixReview(String asterixReviewValue) throws ResourceException { Request request = getRequest(); String assetName = (String) request.getAttributes().get("assetName"); Asset asset; try { asset = plugin.fetchAsset(assetName); } catch (XWikiException e) { throw error(Status.CLIENT_ERROR_NOT_FOUND, e.getMessage()); } try { com.xpn.xwiki.api.Object obj = asset.getObject("CRS.CurrikiReviewStatusClass"); if (obj==null) { obj = asset.newObject("CRS.CurrikiReviewStatusClass"); obj.set("name",asset.getFullName()); obj.set("number",0); obj.set("reviewpending", 0); obj.set("status", "100"); asset.save(); } } catch (XWikiException e) { throw error(Status.CLIENT_ERROR_NOT_FOUND, e.getMessage()); } asset.use("CRS.CurrikiReviewStatusClass"); asset.set("status", asterixReviewValue); asset.set("reviewpending", 0); asset.set("lastreview_user", xwikiContext.getUser()); asset.set("lastreview_date", xwikiContext.getWiki().formatDate(new Date(), "MM/dd/yyyy HH:mm:ss", xwikiContext)); try { List<String> crsvalue = new ArrayList<String>(1); crsvalue.add(xwikiContext.getMessageTool().get("curriki.crs.review.setas"+asterixReviewValue)); asset.save(xwikiContext.getMessageTool().get("curriki.comment.crsvalueadded", crsvalue)); } catch (XWikiException e) { throw error(Status.CLIENT_ERROR_NOT_FOUND, e.getMessage()); } String newPage = getRequest().getRootRef().toString(); if (!newPage.endsWith("/")) { newPage += "/"; } newPage += "assets/"+asset.getFullName(); getResponse().redirectSeeOther(newPage); } }