use of org.alfresco.repo.importer.ACPImportPackageHandler in project alfresco-repository by Alfresco.
the class ImapFoldersPatch method importInternal.
private void importInternal(String acpName, NodeRef space) throws IOException {
File acpFile = getFile(acpName);
ACPImportPackageHandler acpHandler = new ACPImportPackageHandler(acpFile, null);
Location importLocation = new Location(space);
importerService.importView(acpHandler, importLocation, null, null);
}
use of org.alfresco.repo.importer.ACPImportPackageHandler in project alfresco-repository by Alfresco.
the class ExporterComponentTest method importContent.
/**
* @param acpFile File
* @param destRootNode NodeRef
* @return FileInfo
*/
private FileInfo importContent(File acpFile, NodeRef destRootNode) {
FileInfo importFolderFileInfo = fileFolderService.create(destRootNode, "Import Folder", ContentModel.TYPE_FOLDER);
ImportPackageHandler importHandler = new ACPImportPackageHandler(acpFile, ACPImportPackageHandler.DEFAULT_ENCODING);
importerService.importView(importHandler, new Location(importFolderFileInfo.getNodeRef()), null, null);
return importFolderFileInfo;
}
use of org.alfresco.repo.importer.ACPImportPackageHandler in project alfresco-repository by Alfresco.
the class ImapMessageTest method importInternal.
private void importInternal(String acpName, NodeRef space) throws IOException {
// Importing IMAP test acp
ClassPathResource acpResource = new ClassPathResource(acpName);
ACPImportPackageHandler acpHandler = new ACPImportPackageHandler(acpResource.getFile(), null);
Location importLocation = new Location(space);
importerService.importView(acpHandler, importLocation, null, null);
}
use of org.alfresco.repo.importer.ACPImportPackageHandler in project records-management by Alfresco.
the class ImportPost method executeImpl.
@Override
protected Map<String, Object> executeImpl(WebScriptRequest req, Status status, Cache cache) {
// Unwrap to a WebScriptServletRequest if we have one
WebScriptServletRequest webScriptServletRequest = null;
WebScriptRequest current = req;
do {
if (current instanceof WebScriptServletRequest) {
webScriptServletRequest = (WebScriptServletRequest) current;
current = null;
} else if (current instanceof WrappingWebScriptRequest) {
current = ((WrappingWebScriptRequest) req).getNext();
} else {
current = null;
}
} while (current != null);
// get the content type of request and ensure it's multipart/form-data
String contentType = req.getContentType();
if (MULTIPART_FORMDATA.equals(contentType) && webScriptServletRequest != null) {
String nodeRef = req.getParameter(PARAM_DESTINATION);
if (nodeRef == null || nodeRef.length() == 0) {
throw new WebScriptException(Status.STATUS_BAD_REQUEST, "Mandatory 'destination' parameter was not provided in form data");
}
// create and check noderef
final NodeRef destination = new NodeRef(nodeRef);
if (nodeService.exists(destination)) {
// check the destination is an RM container
if (!nodeService.hasAspect(destination, RecordsManagementModel.ASPECT_FILE_PLAN_COMPONENT) || !dictionaryService.isSubClass(nodeService.getType(destination), ContentModel.TYPE_FOLDER)) {
throw new WebScriptException(Status.STATUS_BAD_REQUEST, "NodeRef '" + destination + "' does not represent an Records Management container node.");
}
} else {
status.setCode(HttpServletResponse.SC_NOT_FOUND, "NodeRef '" + destination + "' does not exist.");
}
// as there is no 'import capability' and the RM admin user is different from
// the DM admin user (meaning the webscript 'admin' authentication can't be used)
// perform a manual check here to ensure the current user has the RM admin role.
boolean isAdmin = filePlanRoleService.hasRMAdminRole(filePlanService.getFilePlan(destination), AuthenticationUtil.getRunAsUser());
if (!isAdmin) {
throw new WebScriptException(Status.STATUS_FORBIDDEN, "Access Denied");
}
File acpFile = null;
try {
// create a temporary file representing uploaded ACP file
FormField acpContent = webScriptServletRequest.getFileField(PARAM_ARCHIVE);
if (acpContent == null) {
acpContent = webScriptServletRequest.getFileField(PARAM_FILEDATA);
if (acpContent == null) {
throw new WebScriptException(Status.STATUS_BAD_REQUEST, "Mandatory 'archive' file content was not provided in form data");
}
}
acpFile = TempFileProvider.createTempFile(TEMP_FILE_PREFIX, "." + ACPExportPackageHandler.ACP_EXTENSION);
// copy contents of uploaded file to temp ACP file
FileOutputStream fos = new FileOutputStream(acpFile);
// NOTE: this method closes both streams
FileCopyUtils.copy(acpContent.getInputStream(), fos);
if (logger.isDebugEnabled()) {
logger.debug("Importing uploaded ACP (" + acpFile.getAbsolutePath() + ") into " + nodeRef);
}
// setup the import handler
final ACPImportPackageHandler importHandler = new ACPImportPackageHandler(acpFile, "UTF-8");
// import the ACP file as the system user
AuthenticationUtil.runAs(new RunAsWork<NodeRef>() {
public NodeRef doWork() {
importerService.importView(importHandler, new Location(destination), null, null);
return null;
}
}, AuthenticationUtil.getSystemUserName());
// create and return model
Map<String, Object> model = new HashMap<String, Object>(1);
model.put("success", true);
return model;
} catch (FileNotFoundException fnfe) {
throw new WebScriptException(Status.STATUS_INTERNAL_SERVER_ERROR, "Failed to import ACP file", fnfe);
} catch (IOException ioe) {
throw new WebScriptException(Status.STATUS_INTERNAL_SERVER_ERROR, "Failed to import ACP file", ioe);
} finally {
if (acpFile != null) {
acpFile.delete();
}
}
} else {
throw new WebScriptException(Status.STATUS_BAD_REQUEST, "Request is not " + MULTIPART_FORMDATA + " encoded");
}
}
use of org.alfresco.repo.importer.ACPImportPackageHandler in project alfresco-repository by Alfresco.
the class ImporterActionExecuter method executeImpl.
/**
* @see org.alfresco.repo.action.executer.ActionExecuter#execute(Action, NodeRef)
*/
public void executeImpl(Action ruleAction, NodeRef actionedUponNodeRef) {
if (this.nodeService.exists(actionedUponNodeRef) == true) {
// The node being passed in should be an Alfresco content package
ContentReader reader = this.contentService.getReader(actionedUponNodeRef, ContentModel.PROP_CONTENT);
if (reader != null) {
NodeRef importDest = (NodeRef) ruleAction.getParameterValue(PARAM_DESTINATION_FOLDER);
if (MimetypeMap.MIMETYPE_ACP.equals(reader.getMimetype())) {
// perform an import of an Alfresco ACP file (special format ZIP structure)
File zipFile = null;
try {
// unfortunately a ZIP file can not be read directly from an input stream so we have to create
// a temporary file first
zipFile = TempFileProvider.createTempFile(TEMP_FILE_PREFIX, TEMP_FILE_SUFFIX_ACP);
reader.getContent(zipFile);
ACPImportPackageHandler importHandler = new ACPImportPackageHandler(zipFile, (String) ruleAction.getParameterValue(PARAM_ENCODING));
this.importerService.importView(importHandler, new Location(importDest), null, null);
} finally {
// now the import is done, delete the temporary file
if (zipFile != null) {
zipFile.delete();
}
}
} else if (MimetypeMap.MIMETYPE_ZIP.equals(reader.getMimetype())) {
// perform an import of a standard ZIP file
ZipFile zipFile = null;
File tempFile = null;
try {
tempFile = TempFileProvider.createTempFile(TEMP_FILE_PREFIX, TEMP_FILE_SUFFIX_ACP);
reader.getContent(tempFile);
// NOTE: This encoding allows us to workaround bug:
// http://bugs.sun.com/bugdatabase/view_bug.do;:WuuT?bug_id=4820807
// We also try to use the extra encoding information if present
String encoding = (String) ruleAction.getParameterValue(PARAM_ENCODING);
if (encoding == null) {
encoding = "UTF-8";
} else {
if (encoding.equalsIgnoreCase("default")) {
encoding = null;
}
}
zipFile = new ZipFile(tempFile, encoding, true);
// build a temp dir name based on the ID of the noderef we are importing
// also use the long life temp folder as large ZIP files can take a while
File alfTempDir = TempFileProvider.getLongLifeTempDir("import");
File tempDir = new File(alfTempDir.getPath() + File.separatorChar + actionedUponNodeRef.getId());
try {
// TODO: improve this code to directly pipe the zip stream output into the repo objects -
// to remove the need to expand to the filesystem first?
extractFile(zipFile, tempDir.getPath());
importDirectory(tempDir.getPath(), importDest);
} finally {
deleteDir(tempDir);
}
} catch (IOException ioErr) {
throw new AlfrescoRuntimeException("Failed to import ZIP file.", ioErr);
} finally {
// now the import is done, delete the temporary file
if (tempFile != null) {
tempFile.delete();
}
if (zipFile != null) {
try {
zipFile.close();
} catch (IOException e) {
throw new AlfrescoRuntimeException("Failed to close zip package.", e);
}
}
}
}
}
}
}
Aggregations