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.servlet.restlet.resource.BaseResource; import org.curriki.xwiki.plugin.asset.Asset; import net.sf.json.JSONObject; import com.xpn.xwiki.XWikiException; /** */ public class PublishedResource extends BaseResource { public PublishedResource(Context context, Request request, Response response) { super(context, request, response); setReadable(true); setModifiable(true); defaultVariants(); } @Override public Representation represent(Variant variant) throws ResourceException { setupXWiki(); 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()); } JSONObject json = new JSONObject(); json.put("published", asset.isPublished()); return formatJSON(json, variant); } @Override public void storeRepresentation(Representation representation) throws ResourceException { setupXWiki(); JSONObject json = representationToJSONObject(representation); 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()); } String space = json.getString("space"); if (space == null || space.equals("")) { throw error(Status.CLIENT_ERROR_NOT_ACCEPTABLE, "You must provide a space name."); } Asset published; try { published = asset.publish(space); } catch (XWikiException e) { throw error(Status.CLIENT_ERROR_BAD_REQUEST, e.getFullMessage()); } //JSONObject out = new JSONObject(); //getResponse().setEntity(formatJSON(out, getPreferredVariant())); String newPage = getRequest().getRootRef().toString(); if (!newPage.endsWith("/")) { newPage += "/"; } newPage += "assets/"+published.getFullName(); getResponse().redirectSeeOther(newPage); } }