Fixed enhancements: Workspace: integration of Progress Bar Widget for File Uploads
git-svn-id: http://svn.d4science-ii.research-infrastructures.eu/gcube/trunk/portlets/user/workspace-tree-widget@90305 82a268e6-3cf1-43bd-a215-b396298e98cftask/19600
parent
ebae3cc0bc
commit
a6690e4f5c
File diff suppressed because it is too large
Load Diff
@ -0,0 +1,93 @@
|
||||
/**
|
||||
*
|
||||
*/
|
||||
package org.gcube.portlets.user.workspace.client.view.windows;
|
||||
|
||||
import org.gcube.portlets.user.workspace.client.model.FileModel;
|
||||
import org.gcube.portlets.widgets.fileupload.client.view.UploadProgressDialog;
|
||||
|
||||
import com.extjs.gxt.ui.client.widget.Info;
|
||||
import com.google.gwt.event.shared.HandlerManager;
|
||||
|
||||
/**
|
||||
* @author Francesco Mangiacrapa francesco.mangiacrapa@isti.cnr.it
|
||||
* @Jan 20, 2014
|
||||
*
|
||||
* This class calls the widget file uploader
|
||||
*/
|
||||
public class FileUploader {
|
||||
|
||||
|
||||
private final UploadProgressDialog dlg;
|
||||
private FileModel folderParent;
|
||||
private UpdateServiceUploader updateServiceUploader;
|
||||
private FileUploader INSTANCE = this;
|
||||
private String uploadType;
|
||||
|
||||
/**
|
||||
*
|
||||
*/
|
||||
public FileUploader(HandlerManager eventBus, FileModel folderParent, String uploadType) {
|
||||
this.folderParent = folderParent;
|
||||
this.uploadType = uploadType;
|
||||
|
||||
/**
|
||||
* Prepare new servlet uploader
|
||||
*/
|
||||
updateServiceUploader = new UpdateServiceUploader(INSTANCE, folderParent, uploadType);
|
||||
|
||||
this.dlg = new UploadProgressDialog("Upload File in: "+folderParent.getName(), eventBus, true);
|
||||
dlg.center();
|
||||
dlg.show();
|
||||
}
|
||||
|
||||
|
||||
public void submitForm() {
|
||||
|
||||
try {
|
||||
|
||||
dlg.submitForm();
|
||||
|
||||
} catch (Exception e) {
|
||||
Info.display("Error", "Sorry an error occurred on the server "+e.getLocalizedMessage() + ". Please try again later");
|
||||
e.printStackTrace();
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
public void overwrite(){
|
||||
updateServiceUploader.setOverwrite();
|
||||
}
|
||||
|
||||
public void submitServletForm(String absolutePathOnServer){
|
||||
|
||||
updateServiceUploader.setFileName(absolutePathOnServer);
|
||||
|
||||
try {
|
||||
|
||||
updateServiceUploader.submitForm();
|
||||
|
||||
} catch (Exception e) {
|
||||
|
||||
dlg.showRegisteringResult(false);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
public FileModel getFolderParent() {
|
||||
return folderParent;
|
||||
}
|
||||
|
||||
public String getUploadType() {
|
||||
return uploadType;
|
||||
}
|
||||
|
||||
public UpdateServiceUploader getUpdateServiceUploader() {
|
||||
return updateServiceUploader;
|
||||
}
|
||||
|
||||
public UploadProgressDialog getDlg() {
|
||||
return dlg;
|
||||
}
|
||||
|
||||
}
|
@ -0,0 +1,166 @@
|
||||
package org.gcube.portlets.user.workspace.client.view.windows;
|
||||
|
||||
|
||||
import org.gcube.portlets.user.workspace.client.AppControllerExplorer;
|
||||
import org.gcube.portlets.user.workspace.client.ConstantsExplorer;
|
||||
import org.gcube.portlets.user.workspace.client.event.CompletedFileUploadEvent;
|
||||
import org.gcube.portlets.user.workspace.client.model.FileModel;
|
||||
import org.gcube.portlets.user.workspace.shared.HandlerResultMessage;
|
||||
|
||||
import com.extjs.gxt.ui.client.widget.Window;
|
||||
import com.google.gwt.core.client.GWT;
|
||||
import com.google.gwt.http.client.Request;
|
||||
import com.google.gwt.http.client.RequestBuilder;
|
||||
import com.google.gwt.http.client.RequestCallback;
|
||||
import com.google.gwt.http.client.RequestException;
|
||||
import com.google.gwt.http.client.Response;
|
||||
import com.google.gwt.user.client.Timer;
|
||||
import com.google.gwt.user.client.ui.HTML;
|
||||
|
||||
|
||||
/**
|
||||
*
|
||||
* @author Francesco Mangiacrapa francesco.mangiacrapa@isti.cnr.it
|
||||
* @Jan 20, 2014
|
||||
*
|
||||
*/
|
||||
public class UpdateServiceUploader extends Window{
|
||||
|
||||
private FileUploader fileUploaderDlg = null;
|
||||
private String fileName = "";
|
||||
private boolean overwrite = false;
|
||||
private FileModel parent;
|
||||
private String uploadType;
|
||||
|
||||
|
||||
/**
|
||||
*
|
||||
* @param fileUploader
|
||||
* @param parent
|
||||
* @param uploadType
|
||||
*
|
||||
* By default overwrite paramameter is false
|
||||
*/
|
||||
public UpdateServiceUploader(final FileUploader fileUploader, final FileModel parent, String uploadType){
|
||||
|
||||
this.fileUploaderDlg = fileUploader;
|
||||
this.parent = parent;
|
||||
this.uploadType = uploadType;
|
||||
|
||||
}
|
||||
|
||||
|
||||
public void submitForm() throws Exception{
|
||||
|
||||
if(fileName == null || fileName.isEmpty())
|
||||
throw new Exception("File absolute path on server is null");
|
||||
|
||||
String parameters = "";
|
||||
|
||||
parameters+=ConstantsExplorer.UPLOAD_FORM_ELEMENT+"="+fileName+"&";
|
||||
|
||||
|
||||
if(parent.getIdentifier()!=null && !parent.getIdentifier().isEmpty())
|
||||
parameters+=ConstantsExplorer.ID_FOLDER+"="+parent.getIdentifier()+"&";
|
||||
else
|
||||
throw new Exception("Parent Folder ID parameter is null or empty");
|
||||
|
||||
if(uploadType!=null && !uploadType.isEmpty())
|
||||
parameters+=ConstantsExplorer.UPLOAD_TYPE+"="+uploadType+"&";
|
||||
else
|
||||
throw new Exception("UploadType parameter is null or empty");
|
||||
|
||||
parameters+=ConstantsExplorer.IS_OVERWRITE+"="+overwrite;
|
||||
|
||||
// String urlRequest = ConstantsExplorer.LOCAL_UPLOAD_WORKSPACE_SERVICE+"?"+URL.encodeQueryString(parameters);
|
||||
|
||||
String urlRequest = ConstantsExplorer.LOCAL_UPLOAD_WORKSPACE_SERVICE+"?"+parameters;
|
||||
|
||||
GWT.log("Encoded url request is: "+urlRequest);
|
||||
|
||||
|
||||
RequestBuilder requestBuilder = new RequestBuilder(RequestBuilder.POST, urlRequest);
|
||||
// requestBuilder.setHeader("Content-Type", "application/x-www-form-urlencoded");
|
||||
try {
|
||||
|
||||
requestBuilder.sendRequest("", new RequestCallback() {
|
||||
|
||||
@Override
|
||||
public void onResponseReceived(Request request, Response response) {
|
||||
|
||||
// int status = response.getStatusCode();
|
||||
|
||||
//expected <pre>200:Upload complete</pre>
|
||||
/*we strip tags added by webserver,
|
||||
*
|
||||
* Massi fix because webkit returns
|
||||
* <pre style="word-wrap: break-word; white-space: pre-wrap;">OK:File france_flag.png(0) imported correctly in /Workspace</pre>
|
||||
*
|
||||
* TODO: recall it next time
|
||||
*/
|
||||
//String strippedResult = result.replace("<pre>", "").replace("</pre>", ""); //this won't work for webkit
|
||||
//replaced by new HTML(result).getText()
|
||||
String strippedResult = new HTML(response.getText()).getText();
|
||||
|
||||
final HandlerResultMessage resultMessage = HandlerResultMessage.parseResult(strippedResult);
|
||||
|
||||
switch (resultMessage.getStatus()) {
|
||||
case ERROR:
|
||||
// new MessageBoxAlert("Error during upload", resultMessage.getMessage(), null);
|
||||
GWT.log("Error during upload: "+resultMessage.getMessage());
|
||||
fileUploaderDlg.getDlg().showRegisteringResult(false);
|
||||
break;
|
||||
case UNKNOWN:
|
||||
// new MessageBoxAlert("Error during upload", resultMessage.getMessage(), null);
|
||||
GWT.log("Error during upload: "+resultMessage.getMessage());
|
||||
fileUploaderDlg.getDlg().showRegisteringResult(false);
|
||||
break;
|
||||
case WARN: {
|
||||
// new MessageBoxAlert("Upload completed with warnings", resultMessage.getMessage(), null);
|
||||
GWT.log("Upload completed with warnings: "+resultMessage.getMessage());
|
||||
fileUploaderDlg.getDlg().showRegisteringResult(false);
|
||||
break;
|
||||
}
|
||||
case OK: {
|
||||
Timer t = new Timer() {
|
||||
public void run() {
|
||||
AppControllerExplorer.getEventBus().fireEvent(new CompletedFileUploadEvent(parent, null));
|
||||
fileUploaderDlg.getDlg().showRegisteringResult(true);
|
||||
// new InfoDisplayMessage("Upload completed successfully", resultMessage.getMessage());
|
||||
}
|
||||
};
|
||||
|
||||
t.schedule(250);
|
||||
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onError(Request request, Throwable exception) {
|
||||
// MessageUtil.showErrorMessage("Error during upload", "An error occurred during file upload.");
|
||||
|
||||
fileUploaderDlg.getDlg().showRegisteringResult(false);
|
||||
// new MessageBoxAlert("Error during upload", "An error occurred during file upload.", null);
|
||||
return;
|
||||
}
|
||||
});
|
||||
|
||||
} catch (RequestException e) {
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
public void setOverwrite(){
|
||||
overwrite = true;
|
||||
}
|
||||
|
||||
public String getFileName() {
|
||||
return fileName;
|
||||
}
|
||||
|
||||
public void setFileName(String fileName) {
|
||||
this.fileName = fileName;
|
||||
}
|
||||
}
|
||||
|
@ -0,0 +1,474 @@
|
||||
/**
|
||||
*
|
||||
*/
|
||||
package org.gcube.portlets.user.workspace.server;
|
||||
|
||||
import java.io.BufferedInputStream;
|
||||
import java.io.File;
|
||||
import java.io.FileInputStream;
|
||||
import java.io.IOException;
|
||||
import java.io.InputStream;
|
||||
import java.net.URLDecoder;
|
||||
import java.util.Calendar;
|
||||
|
||||
import javax.servlet.ServletException;
|
||||
import javax.servlet.http.HttpServlet;
|
||||
import javax.servlet.http.HttpServletRequest;
|
||||
import javax.servlet.http.HttpServletResponse;
|
||||
import javax.servlet.http.HttpSession;
|
||||
|
||||
import org.apache.commons.fileupload.FileUploadException;
|
||||
import org.apache.commons.io.FileUtils;
|
||||
import org.apache.commons.io.FilenameUtils;
|
||||
import org.apache.log4j.Logger;
|
||||
import org.gcube.common.homelibrary.home.exceptions.InternalErrorException;
|
||||
import org.gcube.common.homelibrary.home.workspace.Workspace;
|
||||
import org.gcube.common.homelibrary.home.workspace.WorkspaceFolder;
|
||||
import org.gcube.common.homelibrary.home.workspace.WorkspaceItem;
|
||||
import org.gcube.common.homelibrary.home.workspace.WorkspaceItemType;
|
||||
import org.gcube.common.homelibrary.home.workspace.exceptions.InsufficientPrivilegesException;
|
||||
import org.gcube.common.homelibrary.home.workspace.exceptions.ItemAlreadyExistException;
|
||||
import org.gcube.common.homelibrary.home.workspace.exceptions.ItemNotFoundException;
|
||||
import org.gcube.common.homelibrary.home.workspace.exceptions.WorkspaceFolderNotFoundException;
|
||||
import org.gcube.common.homelibrary.home.workspace.exceptions.WrongDestinationException;
|
||||
import org.gcube.common.homelibrary.home.workspace.exceptions.WrongItemTypeException;
|
||||
import org.gcube.common.homelibrary.home.workspace.folder.FolderItem;
|
||||
import org.gcube.common.homelibrary.home.workspace.folder.items.Report;
|
||||
import org.gcube.common.homelibrary.home.workspace.folder.items.ReportTemplate;
|
||||
import org.gcube.common.homelibrary.util.Extensions;
|
||||
import org.gcube.common.homelibrary.util.MimeTypeUtil;
|
||||
import org.gcube.common.homelibrary.util.WorkspaceUtil;
|
||||
import org.gcube.common.homelibrary.util.zip.UnzipUtil;
|
||||
import org.gcube.portlets.user.workspace.client.ConstantsExplorer;
|
||||
import org.gcube.portlets.user.workspace.server.notifications.NotificationsUtil;
|
||||
import org.gcube.portlets.user.workspace.server.util.WsUtil;
|
||||
import org.gcube.portlets.user.workspace.shared.HandlerResultMessage;
|
||||
|
||||
/**
|
||||
*
|
||||
* @author Francesco Mangiacrapa francesco.mangiacrapa@isti.cnr.it
|
||||
* @Jan 21, 2014
|
||||
*
|
||||
*/
|
||||
public class LocalUploadServlet extends HttpServlet {
|
||||
|
||||
/**
|
||||
*
|
||||
*/
|
||||
protected static final String UTF_8 = "UTF-8";
|
||||
|
||||
public static final String UPLOAD_TYPE = ConstantsExplorer.UPLOAD_TYPE;
|
||||
|
||||
public static final String ID_FOLDER = ConstantsExplorer.ID_FOLDER;
|
||||
|
||||
public static final String UPLOAD_FORM_ELEMENT = ConstantsExplorer.UPLOAD_FORM_ELEMENT;
|
||||
|
||||
public static final String IS_OVERWRITE = ConstantsExplorer.IS_OVERWRITE;
|
||||
|
||||
public static final String FILE = "File";
|
||||
|
||||
protected static Logger logger = Logger.getLogger(LocalUploadServlet.class);
|
||||
|
||||
public static final String D4ST = Extensions.REPORT_TEMPLATE.getName(); //extension of Report Template type
|
||||
public static final String D4SR = Extensions.REPORT.getName(); //extension of Report type
|
||||
/**
|
||||
*
|
||||
*/
|
||||
private static final long serialVersionUID = -4197748678713054285L;
|
||||
|
||||
|
||||
/**
|
||||
* {@inheritDoc}
|
||||
*/
|
||||
@Override
|
||||
public void init() throws ServletException {
|
||||
super.init();
|
||||
|
||||
logger.trace("Workspace "+LocalUploadServlet.class+" ready.");
|
||||
}
|
||||
|
||||
/**
|
||||
* {@inheritDoc}
|
||||
*/
|
||||
@Override
|
||||
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
|
||||
// System.out.println("GET on LocalUploadServlet");
|
||||
logger.trace("GET on LocalUploadServlet");
|
||||
String absolutePathFile = URLDecoder.decode(request.getParameter(UPLOAD_FORM_ELEMENT), UTF_8);
|
||||
String destinationId = URLDecoder.decode(request.getParameter(ID_FOLDER), UTF_8);
|
||||
String uploadType = URLDecoder.decode(request.getParameter(UPLOAD_TYPE), UTF_8);
|
||||
boolean isOverwrite = Boolean.parseBoolean(URLDecoder.decode(request.getParameter(IS_OVERWRITE), UTF_8));
|
||||
uploadData(request, response, absolutePathFile, destinationId, uploadType, isOverwrite);
|
||||
}
|
||||
|
||||
/**
|
||||
* {@inheritDoc}
|
||||
*/
|
||||
@SuppressWarnings("rawtypes")
|
||||
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
|
||||
// System.out.println("POST on LocalUploadServlet");
|
||||
logger.trace("POST on LocalUploadServlet");
|
||||
String absolutePathFile = request.getParameter(UPLOAD_FORM_ELEMENT);
|
||||
String destinationId = request.getParameter(ID_FOLDER);
|
||||
String uploadType = request.getParameter(UPLOAD_TYPE);
|
||||
boolean isOverwrite = Boolean.parseBoolean(request.getParameter(IS_OVERWRITE));
|
||||
uploadData(request, response, absolutePathFile, destinationId, uploadType, isOverwrite);
|
||||
}
|
||||
|
||||
|
||||
|
||||
private void uploadData(HttpServletRequest request, HttpServletResponse response, String absolutePathFile,String destinationId,String uploadType,boolean isOverwrite) throws ServletException, IOException{
|
||||
|
||||
File file = null;
|
||||
InputStream fileUploadIS = null;
|
||||
|
||||
try {
|
||||
|
||||
if(absolutePathFile==null || absolutePathFile.isEmpty())
|
||||
throw new FileUploadException("Absolute path is null or empty");
|
||||
|
||||
|
||||
file = new File(absolutePathFile);
|
||||
|
||||
if(!file.exists())
|
||||
throw new FileUploadException("File dosn't exists");
|
||||
|
||||
fileUploadIS = FileUtils.openInputStream(file);
|
||||
|
||||
logger.trace("Upload servlet parameters: [uploadItem: "+file.getAbsolutePath() +", destinationId: "+destinationId +", uploadType: "+uploadType+", isOverwrite: "+isOverwrite+"]");
|
||||
} catch (Exception e) {
|
||||
logger.error("Error processing request in upload servlet", e);
|
||||
sendError(response, "Internal error: Error during request processing");
|
||||
return;
|
||||
}
|
||||
|
||||
/*
|
||||
if (file == null) {
|
||||
logger.error("Error processing request in upload servlet: No file to upload");
|
||||
sendError(response, "Internal error: No file to upload");
|
||||
return;
|
||||
}*/
|
||||
|
||||
if (destinationId == null) {
|
||||
logger.error("Error processing request in upload servlet: No destination folder id found");
|
||||
sendError(response, "Internal error: No destination folder id found");
|
||||
return;
|
||||
}
|
||||
|
||||
logger.trace("destination folder id: "+destinationId);
|
||||
logger.trace("uploadType: "+uploadType);
|
||||
|
||||
Workspace wa = null;
|
||||
try {
|
||||
wa = WsUtil.getWorkspace(request.getSession());
|
||||
} catch (Exception e) {
|
||||
logger.error("Error during workspace retrieving", e);
|
||||
response.sendError(HttpServletResponse.SC_INTERNAL_SERVER_ERROR, "Error processing request in upload servlet");
|
||||
return;
|
||||
}
|
||||
|
||||
if (wa == null) {
|
||||
logger.error("Now workspace found in session");
|
||||
sendError(response, "Internal error: No workspace in session");
|
||||
return;
|
||||
}
|
||||
|
||||
WorkspaceItem item;
|
||||
try {
|
||||
item = wa.getItem(destinationId);
|
||||
} catch (ItemNotFoundException e) {
|
||||
logger.error("Error, no destination folder found", e);
|
||||
sendError(response, "Internal error: No destination folder found");
|
||||
return;
|
||||
}
|
||||
|
||||
if (item.getType() != WorkspaceItemType.FOLDER && item.getType() != WorkspaceItemType.SHARED_FOLDER) {
|
||||
logger.error("Error processing request in upload servlet: Wrong destination item");
|
||||
sendError(response, "Internal error: Wrong destination item");
|
||||
return;
|
||||
}
|
||||
|
||||
WorkspaceFolder destinationFolder = (WorkspaceFolder) item;
|
||||
|
||||
try {
|
||||
//we calculate an unique name for the current destination
|
||||
String itemName = "";
|
||||
|
||||
if(!isOverwrite)
|
||||
itemName = WorkspaceUtil.getUniqueName(file.getName(), destinationFolder);
|
||||
else
|
||||
itemName = file.getName();
|
||||
|
||||
String contentType = MimeTypeUtil.getMimeType(new BufferedInputStream(fileUploadIS));
|
||||
logger.trace("Content type (mime type): "+contentType + " unique name: "+itemName);
|
||||
|
||||
// System.out.println("Content type: "+contentType + " unique name: "+itemName);
|
||||
|
||||
String extension = FilenameUtils.getExtension(itemName);
|
||||
logger.trace("extension: "+extension);
|
||||
|
||||
// System.out.println("extension: "+extension);
|
||||
|
||||
if(uploadType.compareTo(FILE)==0) {//IS FILE UPLOAD
|
||||
|
||||
boolean isZipFile = MimeTypeUtil.isZipContentType(contentType);
|
||||
|
||||
if(isZipFile && (extension.compareToIgnoreCase(D4ST)==0)){ //Create REPORT TEMPLATE
|
||||
|
||||
// String newItemName = "";
|
||||
//
|
||||
// if(!isOverwrite)
|
||||
// newItemName = itemName.substring(0,itemName.lastIndexOf(D4ST)-1); //remove extension
|
||||
// else
|
||||
// newItemName = item.getName();
|
||||
|
||||
// System.out.println("itemwithoutext " +itemwithoutext);
|
||||
|
||||
String newItemName = itemName;
|
||||
|
||||
logger.trace("createTemplate: "+newItemName);
|
||||
createTemplate(request.getSession(), wa, newItemName, FileUtils.openInputStream(file), destinationFolder, response, isOverwrite);
|
||||
|
||||
}else if(isZipFile && (extension.compareToIgnoreCase(D4SR)==0)){ //Create REPORT
|
||||
|
||||
// String newItemName = "";
|
||||
//
|
||||
// if(!isOverwrite)
|
||||
// newItemName = itemName.substring(0,itemName.lastIndexOf(D4SR)-1); //remove extension
|
||||
// else
|
||||
// newItemName = item.getName();
|
||||
|
||||
// System.out.println("itemwithoutext " +itemwithoutext);
|
||||
String newItemName = itemName;
|
||||
logger.trace("createReport: "+newItemName);
|
||||
createReport(request.getSession(), wa, newItemName, FileUtils.openInputStream(file), destinationFolder, response, isOverwrite);
|
||||
|
||||
}else{ //CREATE AN EXTERNAL FILE
|
||||
|
||||
createExternalFile(request.getSession(), wa, itemName, FileUtils.openInputStream(file), destinationFolder, contentType, response, isOverwrite);
|
||||
}
|
||||
|
||||
}else {//IS ARCHIVE UPLOAD
|
||||
|
||||
if (MimeTypeUtil.isZipContentType(contentType)){
|
||||
logger.trace("Unziping content");
|
||||
UnzipUtil.unzip(destinationFolder, FileUtils.openInputStream(file), itemName);
|
||||
|
||||
//TODO NOTIFY UPLOAD ARCHIVE
|
||||
sendMessage(response, "Archive "+absolutePathFile+" imported correctly in "+destinationFolder.getPath());
|
||||
} else
|
||||
createExternalFile(request.getSession(), wa, itemName, FileUtils.openInputStream(file), destinationFolder, contentType, response, isOverwrite);
|
||||
}
|
||||
|
||||
file.delete();
|
||||
} catch (InsufficientPrivilegesException e) {
|
||||
logger.error("Error creating elements", e);
|
||||
sendError(response, "Internal error: Insufficient privileges");
|
||||
return;
|
||||
} catch (InternalErrorException e) {
|
||||
logger.error("Error creating elements", e);
|
||||
sendError(response, "Internal error: "+e.getMessage());
|
||||
return;
|
||||
} catch (ItemAlreadyExistException e) {
|
||||
logger.error("Error creating elements", e);
|
||||
sendError(response, "Internal error: An item with that name already exists");
|
||||
return;
|
||||
}catch (Exception e) {
|
||||
logger.error("Error creating elements", e);
|
||||
sendError(response, "Internal error: An error occurred on uploading the file, try again later");
|
||||
return;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
||||
/**
|
||||
*
|
||||
* @param httpSession
|
||||
* @param workspace
|
||||
* @param itemId
|
||||
* @param destinationFolderId
|
||||
*/
|
||||
private void notifyUploadInSharedFolder(final HttpSession httpSession, final Workspace workspace, final String itemId, final String destinationFolderId, final boolean isOverwrite){
|
||||
|
||||
new Thread(){
|
||||
|
||||
public void run() {
|
||||
|
||||
WorkspaceItem sourceItem;
|
||||
try {
|
||||
sourceItem = workspace.getItem(itemId);
|
||||
String sourceSharedId = sourceItem.getIdSharedFolder();
|
||||
WorkspaceItem folderDestinationItem = workspace.getItem(destinationFolderId);
|
||||
|
||||
NotificationsUtil.checkSendNotifyChangedItemToShare(httpSession, sourceItem, sourceSharedId, folderDestinationItem,isOverwrite);
|
||||
|
||||
|
||||
} catch (Exception e) {
|
||||
logger.error("Error in notifyUploadInSharedFolder", e);
|
||||
|
||||
}
|
||||
|
||||
};
|
||||
|
||||
}.start();
|
||||
}
|
||||
|
||||
private void createExternalFile(HttpSession httpSession, Workspace wa, String itemName, InputStream uploadItem, WorkspaceFolder destinationFolder, String contentType, HttpServletResponse response, boolean isOverwrite) throws InternalErrorException, InsufficientPrivilegesException, ItemAlreadyExistException, IOException {
|
||||
|
||||
FolderItem createdItem = null;
|
||||
|
||||
if(!isOverwrite){
|
||||
//we need to recalculate the item name
|
||||
itemName = WorkspaceUtil.getUniqueName(itemName, destinationFolder);
|
||||
createdItem = WorkspaceUtil.createExternalFile(destinationFolder, itemName, "", contentType, uploadItem);
|
||||
}
|
||||
else
|
||||
createdItem = overwriteItem(wa, itemName, uploadItem, destinationFolder); //CASE OVERWRITE
|
||||
|
||||
if(createdItem!=null){
|
||||
notifyUploadInSharedFolder(httpSession,wa,createdItem.getId(),destinationFolder.getId(), isOverwrite);
|
||||
|
||||
sendMessage(response, "File "+createdItem.getName()+" imported correctly in "+destinationFolder.getPath());
|
||||
}
|
||||
else
|
||||
sendError(response,"Internal error: Workspace Item Not Found");
|
||||
}
|
||||
|
||||
|
||||
private FolderItem overwriteItem(Workspace wa, String itemName, InputStream fileData, WorkspaceFolder destinationFolder){
|
||||
|
||||
FolderItem overwriteItem = null;
|
||||
|
||||
try {
|
||||
logger.trace("case overwriting item.. "+itemName);
|
||||
overwriteItem = (FolderItem) wa.find(itemName, destinationFolder.getId());
|
||||
logger.trace("overwriteItem item was found, id is: "+overwriteItem.getId());
|
||||
wa.updateItem(overwriteItem.getId(), fileData);
|
||||
logger.trace("updateItem with id: "+overwriteItem.getId()+ ", is completed");
|
||||
} catch (ItemNotFoundException e) {
|
||||
logger.error("Error in createExternalFile, ItemNotFoundException", e);
|
||||
} catch (WrongItemTypeException e) {
|
||||
logger.error("Error in createExternalFile, WrongItemTypeException", e);
|
||||
} catch (WorkspaceFolderNotFoundException e) {
|
||||
logger.error("Error in createExternalFile, WorkspaceFolderNotFoundException", e);
|
||||
} catch (WrongDestinationException e) {
|
||||
logger.error("Error in createExternalFile, WrongDestinationException", e);
|
||||
} catch (InsufficientPrivilegesException e) {
|
||||
logger.error("Error in createExternalFile, InsufficientPrivilegesException", e);
|
||||
} catch (ItemAlreadyExistException e) {
|
||||
logger.error("Error in createExternalFile, ItemAlreadyExistException", e);
|
||||
} catch (InternalErrorException e) {
|
||||
logger.error("Error in createExternalFile, InternalErrorException", e);
|
||||
}catch (Exception e) {
|
||||
logger.error("Error in createExternalFile, Exception", e);
|
||||
}
|
||||
|
||||
return overwriteItem;
|
||||
|
||||
}
|
||||
|
||||
|
||||
private void createReport(HttpSession httpSession, Workspace wa, String itemName, InputStream stream, WorkspaceFolder destinationFolder, HttpServletResponse response, boolean isOverwrite) throws InsufficientPrivilegesException, ItemAlreadyExistException, InternalErrorException, IOException{
|
||||
|
||||
try {
|
||||
|
||||
Report report = null;
|
||||
|
||||
if(!isOverwrite){
|
||||
itemName = WorkspaceUtil.getUniqueName(itemName, destinationFolder);
|
||||
report = wa.createReport(itemName, "", Calendar.getInstance(), Calendar.getInstance(), "", "", "", 0, "", stream, destinationFolder.getId());
|
||||
|
||||
notifyUploadInSharedFolder(httpSession,wa,report.getId(),destinationFolder.getId(), isOverwrite);
|
||||
|
||||
sendMessage(response, "File "+report.getName()+" imported correctly in "+destinationFolder.getPath());
|
||||
}
|
||||
else{ //CASE OVERWRITE
|
||||
FolderItem rep = overwriteItem(wa, itemName, stream, destinationFolder);
|
||||
|
||||
if(rep!=null){
|
||||
|
||||
notifyUploadInSharedFolder(httpSession,wa,rep.getId(),destinationFolder.getId(), isOverwrite);
|
||||
|
||||
sendMessage(response, "File "+rep.getName()+" imported correctly in "+destinationFolder.getPath());
|
||||
}
|
||||
else
|
||||
sendError(response,"Internal error: Workspace Item Not Found");
|
||||
|
||||
}
|
||||
} catch (WrongDestinationException e) {
|
||||
logger.error("Error creating elements", e);
|
||||
sendError(response, "Internal error: Wrong Destination");
|
||||
} catch (WorkspaceFolderNotFoundException e) {
|
||||
logger.error("Error creating elements", e);
|
||||
sendError(response, "Internal error: Workspace Folder Not Found");
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
private void createTemplate(HttpSession httpSession, Workspace wa, String itemName, InputStream stream, WorkspaceFolder destinationFolder, HttpServletResponse response, boolean isOverwrite) throws InsufficientPrivilegesException, ItemAlreadyExistException, InternalErrorException, IOException{
|
||||
|
||||
try {
|
||||
|
||||
ReportTemplate template = null;
|
||||
|
||||
if(!isOverwrite){
|
||||
itemName = WorkspaceUtil.getUniqueName(itemName, destinationFolder);
|
||||
template = wa.createReportTemplate(itemName, "", Calendar.getInstance(), Calendar.getInstance(), "", "", 0, "", stream, destinationFolder.getId());
|
||||
|
||||
notifyUploadInSharedFolder(httpSession,wa,template.getId(),destinationFolder.getId(), isOverwrite);
|
||||
|
||||
sendMessage(response, "File "+template.getName()+" imported correctly in "+destinationFolder.getPath());
|
||||
|
||||
}else{ //CASE OVERWRITE
|
||||
FolderItem rep = overwriteItem(wa, itemName, stream, destinationFolder);
|
||||
|
||||
if(rep!=null){
|
||||
|
||||
notifyUploadInSharedFolder(httpSession,wa,rep.getId(),destinationFolder.getId(), isOverwrite);
|
||||
|
||||
sendMessage(response, "File "+rep.getName()+" imported correctly in "+destinationFolder.getPath());
|
||||
}
|
||||
else
|
||||
sendError(response,"Internal error: Workspace Item Not Found");
|
||||
|
||||
}
|
||||
|
||||
} catch (WrongDestinationException e) {
|
||||
logger.error("Error creating elements", e);
|
||||
sendError(response, "Internal error: Wrong Destination");
|
||||
} catch (WorkspaceFolderNotFoundException e) {
|
||||
logger.error("Error creating elements", e);
|
||||
sendError(response, "Internal error: Workspace Folder Not Found");
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
||||
protected void sendError(HttpServletResponse response, String message) throws IOException
|
||||
{
|
||||
response.setStatus(HttpServletResponse.SC_INTERNAL_SERVER_ERROR);
|
||||
HandlerResultMessage resultMessage = HandlerResultMessage.errorResult(message);
|
||||
response.getWriter().write(resultMessage.toString());
|
||||
response.flushBuffer();
|
||||
}
|
||||
|
||||
protected void sendMessage(HttpServletResponse response, String message) throws IOException
|
||||
{
|
||||
response.setStatus(HttpServletResponse.SC_ACCEPTED);
|
||||
HandlerResultMessage resultMessage = HandlerResultMessage.okResult(message);
|
||||
response.getWriter().write(resultMessage.toString());
|
||||
response.flushBuffer();
|
||||
}
|
||||
|
||||
protected void sendWarnMessage(HttpServletResponse response, String message) throws IOException
|
||||
{
|
||||
response.setStatus(HttpServletResponse.SC_ACCEPTED);
|
||||
HandlerResultMessage resultMessage = HandlerResultMessage.warnResult(message);
|
||||
response.getWriter().write(resultMessage.toString());
|
||||
response.flushBuffer();
|
||||
}
|
||||
|
||||
|
||||
}
|
Loading…
Reference in New Issue