299 lines
11 KiB
Java
299 lines
11 KiB
Java
|
/**
|
||
|
*
|
||
|
*/
|
||
|
package org.gcube.portlets.user.workspace.server.tostoragehub;
|
||
|
|
||
|
|
||
|
import org.apache.log4j.Logger;
|
||
|
import org.gcube.common.storagehubwrapper.shared.tohl.exceptions.InternalErrorException;
|
||
|
import org.gcube.common.storagehubwrapper.shared.tohl.impl.WorkspaceSharedFolder;
|
||
|
import org.gcube.common.storagehubwrapper.shared.tohl.items.FileItem;
|
||
|
import org.gcube.portlets.user.workspace.client.interfaces.GXTCategorySmartFolder;
|
||
|
import org.gcube.portlets.user.workspace.client.interfaces.GXTFolderItemTypeEnum;
|
||
|
import org.gcube.portlets.user.workspace.client.model.FileGridModel;
|
||
|
import org.gcube.portlets.user.workspace.client.model.FileModel;
|
||
|
import org.gcube.portlets.user.workspace.client.model.FolderGridModel;
|
||
|
import org.gcube.portlets.user.workspace.client.model.FolderModel;
|
||
|
import org.gcube.portlets.user.workspace.server.GWTWorkspaceBuilder;
|
||
|
import org.gcube.portlets.user.workspace.server.util.UserUtil;
|
||
|
import org.gcube.vomanagement.usermanagement.model.GCubeUser;
|
||
|
|
||
|
|
||
|
|
||
|
/**
|
||
|
* The Class StorageHubToWorkpaceConveter.
|
||
|
*
|
||
|
* @author Francesco Mangiacrapa at ISTI-CNR (francesco.mangiacrapa@isti.cnr.it)
|
||
|
* Sep 20, 2018
|
||
|
*/
|
||
|
public class ObjectStorageHubToWorkpaceMapper {
|
||
|
|
||
|
|
||
|
protected static Logger logger = Logger.getLogger(ObjectStorageHubToWorkpaceMapper.class);
|
||
|
|
||
|
/**
|
||
|
* To root folder.
|
||
|
*
|
||
|
* @param folder the folder
|
||
|
* @return the folder model
|
||
|
* @throws InternalErrorException the internal error exception
|
||
|
*/
|
||
|
public static FolderModel toRootFolder(org.gcube.common.storagehubwrapper.shared.tohl.WorkspaceFolder folder) throws InternalErrorException{
|
||
|
|
||
|
if(folder==null)
|
||
|
return null;
|
||
|
|
||
|
boolean isVreFolder = false;
|
||
|
boolean isPublicFolder = false; //TODO
|
||
|
if(folder.isShared()){
|
||
|
WorkspaceSharedFolder sharedFolder = (WorkspaceSharedFolder) folder;
|
||
|
isVreFolder = sharedFolder.isVreFolder();
|
||
|
}
|
||
|
|
||
|
// FolderModel root = new FolderModel(workspaceRoot.getId(),workspaceRoot.getName(),null, true, workspaceRoot.isShared(), false, workspaceRoot.isPublic());
|
||
|
// root.setIsRoot(true);
|
||
|
|
||
|
FolderModel theFolder = new FolderModel(folder.getId(), folder.getName(), null, folder.isFolder(), folder.isShared(), isVreFolder, isPublicFolder);
|
||
|
theFolder.setIsRoot(folder.isRoot());
|
||
|
return theFolder;
|
||
|
|
||
|
}
|
||
|
|
||
|
|
||
|
/**
|
||
|
* To tree file model item.
|
||
|
*
|
||
|
* @param wrappedItem the wrapped item
|
||
|
* @param parentFolderModel the parent folder model
|
||
|
* @param isParentShared the is parent shared
|
||
|
* @return the file model
|
||
|
* @throws InternalErrorException the internal error exception
|
||
|
*/
|
||
|
public static FileModel toTreeFileModelItem(org.gcube.common.storagehubwrapper.shared.tohl.WorkspaceItem wrappedItem, FileModel parentFolderModel, boolean isParentShared) throws InternalErrorException{
|
||
|
|
||
|
FileModel fileModel = null;
|
||
|
//boolean isPublic = false;
|
||
|
|
||
|
switch (wrappedItem.getType()) {
|
||
|
|
||
|
case FOLDER:
|
||
|
boolean isPublicFolder = ((org.gcube.common.storagehubwrapper.shared.tohl.WorkspaceFolder) wrappedItem).isPublicFolder(); //TODO
|
||
|
fileModel = new FolderModel(wrappedItem.getId(), wrappedItem.getName(), parentFolderModel, true, false, false, isPublicFolder);
|
||
|
if(isPublicFolder)
|
||
|
fileModel.setType(GXTFolderItemTypeEnum.FOLDER_PUBLIC.getLabel());
|
||
|
else
|
||
|
fileModel.setType(GXTFolderItemTypeEnum.FOLDER.getLabel());
|
||
|
|
||
|
fileModel.setType(GXTFolderItemTypeEnum.FOLDER.getLabel());
|
||
|
fileModel.setShareable(true);
|
||
|
fileModel.setDescription(wrappedItem.getDescription());
|
||
|
break;
|
||
|
|
||
|
case FILE_ITEM:
|
||
|
fileModel = new FileModel(wrappedItem.getId(), wrappedItem.getName(), parentFolderModel, false, false);
|
||
|
FileItem folderItem = (FileItem) wrappedItem;
|
||
|
fileModel = setFolderItemType(fileModel, folderItem);
|
||
|
fileModel.setShareable(true);
|
||
|
break;
|
||
|
|
||
|
case VRE_FOLDER:
|
||
|
fileModel = new FolderModel(wrappedItem.getId(), wrappedItem.getName(), parentFolderModel, true, true, true, false);
|
||
|
fileModel.setType(GXTFolderItemTypeEnum.FOLDER_SHARED.toString());
|
||
|
fileModel.setShareable(true);
|
||
|
fileModel.setDescription(wrappedItem.getDescription());
|
||
|
break;
|
||
|
case SHARED_FOLDER:
|
||
|
//WorkspaceSharedFolder shared = (WorkspaceSharedFolder) wrappedItem;
|
||
|
boolean isPublicDir = ((org.gcube.common.storagehubwrapper.shared.tohl.WorkspaceFolder) wrappedItem).isPublicFolder(); //TODO
|
||
|
//isPublic = ((WorkspaceFolder) shared).isPublic(); //TODO isPublic
|
||
|
//OLD HL
|
||
|
//String name = shared.isVreFolder()?shared.getDisplayName():item.getName();
|
||
|
fileModel = new FolderModel(wrappedItem.getId(), wrappedItem.getName(), parentFolderModel, true, true, false, isPublicDir);
|
||
|
if(isPublicDir)
|
||
|
fileModel.setType(GXTFolderItemTypeEnum.FOLDER_SHARED_PUBLIC.toString());
|
||
|
else
|
||
|
fileModel.setType(GXTFolderItemTypeEnum.FOLDER_SHARED.toString());
|
||
|
|
||
|
fileModel.setShareable(true);
|
||
|
fileModel.setDescription(wrappedItem.getDescription());
|
||
|
break;
|
||
|
|
||
|
default:
|
||
|
logger.error("ALERT Conversion RETURNING null for item "+wrappedItem.getName());
|
||
|
break;
|
||
|
|
||
|
}
|
||
|
|
||
|
//SET SHARE POLICY
|
||
|
if(parentFolderModel!=null && parentFolderModel.isShared()){
|
||
|
fileModel.setShared(true);
|
||
|
fileModel.setShareable(false); //UPDATED TO CHANGE PERMISSIONS TO SHARED SUBFOLDERS
|
||
|
}else if(parentFolderModel==null && wrappedItem.isShared()){ //ADDED TO FIX #1808
|
||
|
fileModel.setShared(true);
|
||
|
if(wrappedItem.getParentId()!=null && isParentShared)
|
||
|
fileModel.setShareable(false);
|
||
|
}
|
||
|
|
||
|
//setSynchedThreddsStateFor(fileModel);
|
||
|
fileModel.setIsRoot(wrappedItem.isRoot());
|
||
|
logger.trace("Returning converted tree item: "+fileModel);
|
||
|
return fileModel;
|
||
|
}
|
||
|
|
||
|
|
||
|
|
||
|
/**
|
||
|
* To grid file model item.
|
||
|
*
|
||
|
* @param wrappedItem the wrapped item
|
||
|
* @param parentFolderModel the parent folder model
|
||
|
* @param isParentShared the is parent shared
|
||
|
* @param loggedUser the logged user
|
||
|
* @return the file grid model
|
||
|
* @throws InternalErrorException the internal error exception
|
||
|
*/
|
||
|
public static FileGridModel toGridFileModelItem(org.gcube.common.storagehubwrapper.shared.tohl.WorkspaceItem wrappedItem, FileModel parentFolderModel, GCubeUser loggedUser) throws InternalErrorException{
|
||
|
|
||
|
FileGridModel fileGridModel = null;
|
||
|
|
||
|
//logger.debug("toGridFileModelItem: "+wrappedItem);
|
||
|
//logger.debug("toGridFileModelItem getType: "+wrappedItem.getType());
|
||
|
|
||
|
switch (wrappedItem.getType()) {
|
||
|
|
||
|
case FOLDER:
|
||
|
boolean isPublicFolder = ((org.gcube.common.storagehubwrapper.shared.tohl.WorkspaceFolder) wrappedItem).isPublicFolder(); //TODO
|
||
|
fileGridModel = new FolderGridModel(wrappedItem.getId(), wrappedItem.getName(), GWTWorkspaceBuilder.toDate(wrappedItem.getLastModificationTime()), parentFolderModel, -1, true, false,false, isPublicFolder);
|
||
|
if(isPublicFolder)
|
||
|
fileGridModel.setType(GXTFolderItemTypeEnum.FOLDER_PUBLIC.getLabel().toString());
|
||
|
else
|
||
|
fileGridModel.setType(GXTFolderItemTypeEnum.FOLDER.getLabel().toString());
|
||
|
|
||
|
fileGridModel.setShortcutCategory(GXTCategorySmartFolder.SMF_FOLDERS);
|
||
|
fileGridModel.setShareable(true);
|
||
|
fileGridModel.setDescription(wrappedItem.getDescription());
|
||
|
break;
|
||
|
|
||
|
case FILE_ITEM:
|
||
|
FileItem fileItem = (FileItem) wrappedItem;
|
||
|
fileGridModel = new FileGridModel(fileItem.getId(),
|
||
|
fileItem.getName(),
|
||
|
GWTWorkspaceBuilder.
|
||
|
toDate(fileItem.getLastModificationTime()),
|
||
|
parentFolderModel,
|
||
|
fileItem.getSize()==null?0:fileItem.getSize(),
|
||
|
false,
|
||
|
false);
|
||
|
fileGridModel = (FileGridModel) setFolderItemType(fileGridModel, fileItem);
|
||
|
break;
|
||
|
|
||
|
case VRE_FOLDER:
|
||
|
fileGridModel = new FolderGridModel(wrappedItem.getId(), wrappedItem.getName(), GWTWorkspaceBuilder.toDate(wrappedItem.getLastModificationTime()), parentFolderModel, -1, true, false,true, false);
|
||
|
fileGridModel.setType(GXTFolderItemTypeEnum.FOLDER_SHARED.toString());
|
||
|
fileGridModel.setShareable(true);
|
||
|
fileGridModel.setDescription(wrappedItem.getDescription());
|
||
|
break;
|
||
|
|
||
|
case SHARED_FOLDER:
|
||
|
WorkspaceSharedFolder shared = (WorkspaceSharedFolder) wrappedItem;
|
||
|
boolean isPublicDir = ((org.gcube.common.storagehubwrapper.shared.tohl.WorkspaceFolder) wrappedItem).isPublicFolder(); //TODO
|
||
|
//String name = shared.isVreFolder()?shared.getTitle():shared.getName();
|
||
|
fileGridModel = new FolderGridModel(wrappedItem.getId(), wrappedItem.getName(), GWTWorkspaceBuilder.toDate(wrappedItem.getLastModificationTime()), parentFolderModel, -1, true, true, shared.isVreFolder(), isPublicDir);
|
||
|
|
||
|
if(isPublicDir)
|
||
|
fileGridModel.setType(GXTFolderItemTypeEnum.FOLDER_SHARED_PUBLIC.getLabel().toString());
|
||
|
else
|
||
|
fileGridModel.setType(GXTFolderItemTypeEnum.FOLDER_SHARED.getLabel().toString());
|
||
|
|
||
|
fileGridModel.setShortcutCategory(GXTCategorySmartFolder.SMF_SHARED_FOLDERS);
|
||
|
fileGridModel.setShareable(true);
|
||
|
fileGridModel.setDescription(wrappedItem.getDescription());
|
||
|
break;
|
||
|
|
||
|
default:
|
||
|
logger.error("gxt conversion return null for item "+wrappedItem.getName());
|
||
|
break;
|
||
|
|
||
|
}
|
||
|
|
||
|
if(parentFolderModel!=null && parentFolderModel.isShared()){
|
||
|
fileGridModel.setShared(true);
|
||
|
fileGridModel.setShareable(false); //UPDATED TO CHANGE PERMISSIONS TO SHARED SUBFOLDERS
|
||
|
}
|
||
|
|
||
|
//OWNER
|
||
|
if(wrappedItem.isShared()){ //IT IS READ FROM HL ONLY IF THE ITEM IS SHARED
|
||
|
fileGridModel.setShared(true); //NOT REMOVE IT IS IMPORTAT SEE #1459
|
||
|
String ownerUsername = wrappedItem.getOwner();
|
||
|
if(ownerUsername!=null){
|
||
|
// System.out.println("++++reading owner");
|
||
|
//String portalLogin = owner.getPortalLogin();
|
||
|
fileGridModel.setOwnerFullName(UserUtil.getUserFullName(ownerUsername));
|
||
|
}
|
||
|
}
|
||
|
else{
|
||
|
if(loggedUser!=null)
|
||
|
// fileGridModel.setOwner(new InfoContactModel(userLogged.getId(), userLogged.getLogin(), userLogged.getName()));
|
||
|
fileGridModel.setOwnerFullName(loggedUser.getFullname());
|
||
|
}
|
||
|
|
||
|
logger.trace("Returning converted grid item: "+fileGridModel);
|
||
|
return fileGridModel;
|
||
|
}
|
||
|
|
||
|
|
||
|
/**
|
||
|
* Sets the folder item type.
|
||
|
*
|
||
|
* @param fileModel the file model
|
||
|
* @param wrappedFileItem the worspace folder item
|
||
|
* @return the file model
|
||
|
* @throws InternalErrorException the internal error exception
|
||
|
*/
|
||
|
public static FileModel setFolderItemType(FileModel fileModel, FileItem wrappedFileItem) throws InternalErrorException{
|
||
|
|
||
|
fileModel.setType(wrappedFileItem.getMimeType());
|
||
|
|
||
|
//logger.debug("WrappedItem: "+wrappedFileItem);
|
||
|
//logger.debug("FolderItemType: "+wrappedFileItem.getFileItemType());
|
||
|
|
||
|
switch(wrappedFileItem.getFileItemType()){
|
||
|
|
||
|
case PDF_DOCUMENT:
|
||
|
fileModel.setFolderItemType(GXTFolderItemTypeEnum.EXTERNAL_PDF_FILE);
|
||
|
fileModel.setShortcutCategory(GXTCategorySmartFolder.SMF_DOCUMENTS);
|
||
|
// PDFFileItem extFile = (PDFFileItem) wrappedFileItem;
|
||
|
break;
|
||
|
case IMAGE_DOCUMENT:
|
||
|
fileModel.setFolderItemType(GXTFolderItemTypeEnum.EXTERNAL_IMAGE);
|
||
|
fileModel.setShortcutCategory(GXTCategorySmartFolder.SMF_IMAGES);
|
||
|
break;
|
||
|
case DOCUMENT:
|
||
|
fileModel.setFolderItemType(GXTFolderItemTypeEnum.EXTERNAL_FILE);
|
||
|
fileModel.setShortcutCategory(GXTCategorySmartFolder.SMF_DOCUMENTS);
|
||
|
// Document doc = (Document) worspaceFolderItem;
|
||
|
break;
|
||
|
case URL_DOCUMENT:
|
||
|
fileModel.setFolderItemType(GXTFolderItemTypeEnum.EXTERNAL_URL);
|
||
|
fileModel.setShortcutCategory(GXTCategorySmartFolder.SMF_DOCUMENTS);
|
||
|
break;
|
||
|
case METADATA:
|
||
|
fileModel.setFolderItemType(GXTFolderItemTypeEnum.METADATA);
|
||
|
fileModel.setShortcutCategory(GXTCategorySmartFolder.SMF_DOCUMENTS);
|
||
|
break;
|
||
|
case GCUBE_ITEM:
|
||
|
fileModel.setFolderItemType(GXTFolderItemTypeEnum.GCUBE_ITEM);
|
||
|
fileModel.setShortcutCategory(GXTCategorySmartFolder.SMF_GCUBE_ITEMS);
|
||
|
break;
|
||
|
default:
|
||
|
fileModel.setFolderItemType(GXTFolderItemTypeEnum.UNKNOWN_TYPE);
|
||
|
fileModel.setShortcutCategory(GXTCategorySmartFolder.SMF_UNKNOWN);
|
||
|
fileModel.setType(GXTFolderItemTypeEnum.UNKNOWN_TYPE.toString());
|
||
|
break;
|
||
|
}
|
||
|
|
||
|
return fileModel;
|
||
|
}
|
||
|
|
||
|
}
|