use of org.springframework.extensions.webscripts.WebScriptException in project records-management by Alfresco.
the class ExportPost method execute.
/**
* @see org.alfresco.web.scripts.WebScript#execute(org.alfresco.web.scripts.WebScriptRequest, org.alfresco.web.scripts.WebScriptResponse)
*/
@SuppressWarnings("deprecation")
@Override
public void execute(WebScriptRequest req, WebScriptResponse res) throws IOException {
File tempACPFile = null;
try {
NodeRef[] nodeRefs = null;
boolean transferFormat = false;
String contentType = req.getContentType();
if (MULTIPART_FORMDATA.equals(contentType)) {
// get nodeRefs parameter from form
nodeRefs = getNodeRefs(req.getParameter(PARAM_NODE_REFS));
// look for the transfer format
String transferFormatParam = req.getParameter(PARAM_TRANSFER_FORMAT);
if (transferFormatParam != null && transferFormatParam.length() > 0) {
transferFormat = Boolean.parseBoolean(transferFormatParam);
}
} else {
// presume the request is a JSON request so get nodeRefs from JSON body
JSONObject json = new JSONObject(new JSONTokener(req.getContent().getContent()));
nodeRefs = getNodeRefs(json);
if (json.has(PARAM_TRANSFER_FORMAT)) {
transferFormat = json.getBoolean(PARAM_TRANSFER_FORMAT);
}
}
// setup the ACP parameters
ExporterCrawlerParameters params = new ExporterCrawlerParameters();
params.setCrawlSelf(true);
params.setCrawlChildNodes(true);
params.setExportFrom(new Location(nodeRefs));
// if transfer format has been requested we need to exclude certain aspects
if (transferFormat) {
// restrict specific aspects from being returned
QName[] excludedAspects = new QName[] { RenditionModel.ASPECT_RENDITIONED, ContentModel.ASPECT_THUMBNAILED, RecordsManagementModel.ASPECT_DISPOSITION_LIFECYCLE, RecordsManagementSearchBehaviour.ASPECT_RM_SEARCH, RecordsManagementModel.ASPECT_EXTENDED_SECURITY };
params.setExcludeAspects(excludedAspects);
} else {
// restrict specific aspects from being returned
QName[] excludedAspects = new QName[] { RecordsManagementModel.ASPECT_EXTENDED_SECURITY };
params.setExcludeAspects(excludedAspects);
}
// create an ACP of the nodes
tempACPFile = createACP(params, transferFormat ? ZIP_EXTENSION : ACPExportPackageHandler.ACP_EXTENSION, transferFormat);
// stream the ACP back to the client as an attachment (forcing save as)
contentStreamer.streamContent(req, res, tempACPFile, null, true, tempACPFile.getName(), null);
} catch (IOException ioe) {
throw new WebScriptException(Status.STATUS_BAD_REQUEST, "Could not read content from req.", ioe);
} catch (JSONException je) {
throw new WebScriptException(Status.STATUS_BAD_REQUEST, "Could not parse JSON from req.", je);
} catch (Exception e) {
if (logger.isDebugEnabled()) {
StringWriter stack = new StringWriter();
e.printStackTrace(new PrintWriter(stack));
logger.debug("Caught exception; decorating with appropriate status template : " + stack.toString());
}
throw createStatusException(e, req, res);
} finally {
// try and delete the temporary file
if (tempACPFile != null) {
if (logger.isDebugEnabled()) {
logger.debug("Deleting temporary archive: " + tempACPFile.getAbsolutePath());
}
tempACPFile.delete();
}
}
}
use of org.springframework.extensions.webscripts.WebScriptException in project records-management by Alfresco.
the class RmActionPost method executeImpl.
@SuppressWarnings("unchecked")
@Override
public Map<String, Object> executeImpl(WebScriptRequest req, Status status, Cache cache) {
String reqContentAsString;
try {
reqContentAsString = req.getContent().getContent();
} catch (IOException iox) {
throw new WebScriptException(Status.STATUS_BAD_REQUEST, "Could not read content from req.", iox);
}
String actionName = null;
List<NodeRef> targetNodeRefs = new ArrayList<NodeRef>(1);
Map<String, Serializable> actionParams = new HashMap<String, Serializable>(3);
try {
JSONObject jsonObj = new JSONObject(new JSONTokener(reqContentAsString));
// Get the action name
if (jsonObj.has(PARAM_NAME)) {
actionName = jsonObj.getString(PARAM_NAME);
}
// Get the target references
if (jsonObj.has(PARAM_NODE_REF)) {
NodeRef nodeRef = new NodeRef(jsonObj.getString(PARAM_NODE_REF));
targetNodeRefs.add(nodeRef);
}
if (jsonObj.has(PARAM_NODE_REFS)) {
JSONArray jsonArray = jsonObj.getJSONArray(PARAM_NODE_REFS);
if (jsonArray.length() != 0) {
targetNodeRefs = new ArrayList<NodeRef>(jsonArray.length());
for (int i = 0; i < jsonArray.length(); i++) {
NodeRef nodeRef = new NodeRef(jsonArray.getString(i));
targetNodeRefs.add(nodeRef);
}
}
}
// params are optional.
if (jsonObj.has(PARAM_PARAMS)) {
JSONObject paramsObj = jsonObj.getJSONObject(PARAM_PARAMS);
for (Iterator<String> iter = paramsObj.keys(); iter.hasNext(); ) {
String nextKeyString = iter.next();
Object nextValue = paramsObj.get(nextKeyString);
// Check for date values
if ((nextValue instanceof JSONObject) && ((JSONObject) nextValue).has("iso8601")) {
String dateStringValue = ((JSONObject) nextValue).getString("iso8601");
nextValue = ISO8601DateFormat.parse(dateStringValue);
}
actionParams.put(nextKeyString, (Serializable) nextValue);
}
}
} catch (JSONException exception) {
throw new WebScriptException(Status.STATUS_BAD_REQUEST, "Unable to parse request JSON.", exception);
}
// Some RM actions can be posted without a nodeRef.
if (actionName == null) {
throw new WebScriptException(Status.STATUS_BAD_REQUEST, "A mandatory parameter has not been provided in URL");
}
// Check that all the nodes provided exist and build report string
StringBuilder targetNodeRefsString = new StringBuilder(30);
boolean firstTime = true;
for (NodeRef targetNodeRef : targetNodeRefs) {
if (!nodeService.exists(targetNodeRef)) {
throw new WebScriptException(Status.STATUS_NOT_FOUND, "The targetNode does not exist (" + targetNodeRef.toString() + ")");
}
// Build the string
if (firstTime) {
firstTime = false;
} else {
targetNodeRefsString.append(", ");
}
targetNodeRefsString.append(targetNodeRef.toString());
}
// Proceed to execute the specified action on the specified node.
if (logger.isDebugEnabled()) {
StringBuilder msg = new StringBuilder();
msg.append("Executing Record Action ").append(actionName).append(", (").append(targetNodeRefsString.toString()).append("), ").append(actionParams);
logger.debug(msg.toString());
}
Map<String, Object> model = new HashMap<String, Object>();
if (targetNodeRefs.isEmpty()) {
RecordsManagementActionResult result = this.rmActionService.executeRecordsManagementAction(actionName, actionParams);
if (result.getValue() != null) {
model.put("result", result.getValue().toString());
}
} else {
Map<NodeRef, RecordsManagementActionResult> resultMap = this.rmActionService.executeRecordsManagementAction(targetNodeRefs, actionName, actionParams);
Map<String, String> results = new HashMap<String, String>(resultMap.size());
for (Map.Entry<NodeRef, RecordsManagementActionResult> entry : resultMap.entrySet()) {
Object value = entry.getValue().getValue();
if (value != null) {
results.put(entry.getKey().toString(), value.toString());
}
}
model.put("results", results);
}
model.put("message", "Successfully queued action [" + actionName + "] on " + targetNodeRefsString.toString());
return model;
}
use of org.springframework.extensions.webscripts.WebScriptException in project records-management by Alfresco.
the class RmEventPut method executeImpl.
/**
* @see org.springframework.extensions.webscripts.DeclarativeWebScript#executeImpl(org.springframework.extensions.webscripts.WebScriptRequest,
* org.springframework.extensions.webscripts.Status,
* org.springframework.extensions.webscripts.Cache)
*/
@Override
public Map<String, Object> executeImpl(WebScriptRequest req, Status status, Cache cache) {
ParameterCheck.mandatory("req", req);
Map<String, Object> model = new HashMap<String, Object>();
JSONObject json = null;
try {
// Convert the request content to JSON
json = new JSONObject(new JSONTokener(req.getContent().getContent()));
// Check the event name
Map<String, String> templateVars = req.getServiceMatch().getTemplateVars();
String eventName = templateVars.get(PARAM_EVENTNAME);
if (eventName == null || eventName.isEmpty() || !rmEventService.existsEvent(eventName)) {
throw new WebScriptException(Status.STATUS_NOT_FOUND, "No event name was provided.");
}
// Check the event display label
String eventDisplayLabel = getValue(json, "eventDisplayLabel");
doCheck(eventDisplayLabel, "No event display label was provided.");
// Check the event type
String eventType = getValue(json, "eventType");
doCheck(eventType, "No event type was provided.");
// Check if the event can be edited or not
RecordsManagementEvent event = null;
if (canEditEvent(eventDisplayLabel, eventName, eventType)) {
// Create event
event = rmEventService.addEvent(eventType, eventName, eventDisplayLabel);
} else {
// Get event
event = rmEventService.getEvent(eventName);
}
model.put("event", event);
} catch (IOException iox) {
throw new WebScriptException(Status.STATUS_BAD_REQUEST, "Could not read content from req.", iox);
} catch (JSONException je) {
throw new WebScriptException(Status.STATUS_BAD_REQUEST, "Could not parse JSON from req.", je);
}
return model;
}
use of org.springframework.extensions.webscripts.WebScriptException in project records-management by Alfresco.
the class AuditLogPut method executeImpl.
/*
* @see org.alfresco.web.scripts.DeclarativeWebScript#executeImpl(org.alfresco.web.scripts.WebScriptRequest, org.alfresco.web.scripts.Status, org.alfresco.web.scripts.Cache)
*/
@Override
protected Map<String, Object> executeImpl(WebScriptRequest req, Status status, Cache cache) {
try {
// determine whether to start or stop auditing
JSONObject json = new JSONObject(new JSONTokener(req.getContent().getContent()));
// check the enabled property present
if (!json.has(PARAM_ENABLED)) {
throw new WebScriptException(Status.STATUS_BAD_REQUEST, "Mandatory 'enabled' parameter was not provided in request body");
}
boolean enabled = json.getBoolean(PARAM_ENABLED);
if (enabled) {
this.rmAuditService.startAuditLog(getDefaultFilePlan());
} else {
this.rmAuditService.stopAuditLog(getDefaultFilePlan());
}
// create model object with the audit status model
Map<String, Object> model = new HashMap<String, Object>(1);
model.put("auditstatus", createAuditStatusModel());
return model;
} catch (IOException iox) {
throw new WebScriptException(Status.STATUS_BAD_REQUEST, "Could not read content from req.", iox);
} catch (JSONException je) {
throw new WebScriptException(Status.STATUS_BAD_REQUEST, "Could not parse JSON from req.", je);
}
}
use of org.springframework.extensions.webscripts.WebScriptException in project records-management by Alfresco.
the class CustomPropertyDefinitionPost method executeImpl.
@Override
protected Map<String, Object> executeImpl(WebScriptRequest req, Status status, Cache cache) {
JSONObject json = null;
Map<String, Object> ftlModel = null;
try {
json = new JSONObject(new JSONTokener(req.getContent().getContent()));
try {
ftlModel = createPropertyDefinition(req, json);
} catch (CustomMetadataException e) {
status.setCode(Status.STATUS_BAD_REQUEST);
ftlModel = new HashMap<String, Object>();
ftlModel.put(MESSAGE, e.getMessage());
}
} catch (IOException iox) {
throw new WebScriptException(Status.STATUS_BAD_REQUEST, "Could not read content from req.", iox);
} catch (JSONException je) {
throw new WebScriptException(Status.STATUS_BAD_REQUEST, "Could not parse JSON from req.", je);
}
return ftlModel;
}
Aggregations