ported to Liferay 6.2
git-svn-id: http://svn.research-infrastructures.eu/public/d4science/gcube/trunk/portlets/user/reports@129625 82a268e6-3cf1-43bd-a215-b396298e98cfmaster
parent
5bf417cb40
commit
6b75b527e1
File diff suppressed because it is too large
Load Diff
@ -1,312 +0,0 @@
|
||||
package org.gcube.portlets.user.reportgenerator.server.servlet;
|
||||
|
||||
import java.io.InputStream;
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
import org.gcube.application.framework.core.session.ASLSession;
|
||||
import org.gcube.portal.custom.communitymanager.OrganizationsUtil;
|
||||
import org.gcube.portlets.admin.wfdocslibrary.shared.PermissionType;
|
||||
import org.gcube.portlets.admin.wfdocslibrary.shared.Step;
|
||||
import org.gcube.portlets.admin.wfdocslibrary.shared.WfRole;
|
||||
import org.slf4j.Logger;
|
||||
import org.slf4j.LoggerFactory;
|
||||
|
||||
import com.liferay.portal.kernel.exception.PortalException;
|
||||
import com.liferay.portal.kernel.exception.SystemException;
|
||||
import com.liferay.portal.model.Organization;
|
||||
import com.liferay.portal.model.ResourceConstants;
|
||||
import com.liferay.portal.model.Role;
|
||||
import com.liferay.portal.model.User;
|
||||
import com.liferay.portal.service.OrganizationLocalServiceUtil;
|
||||
import com.liferay.portal.service.PermissionLocalServiceUtil;
|
||||
import com.liferay.portal.service.ResourceLocalServiceUtil;
|
||||
import com.liferay.portal.service.ServiceContext;
|
||||
import com.liferay.portal.service.UserLocalServiceUtil;
|
||||
import com.liferay.portlet.documentlibrary.NoSuchFolderException;
|
||||
import com.liferay.portlet.documentlibrary.model.DLFileEntry;
|
||||
import com.liferay.portlet.documentlibrary.model.DLFolder;
|
||||
import com.liferay.portlet.documentlibrary.service.DLFileEntryLocalServiceUtil;
|
||||
import com.liferay.portlet.documentlibrary.service.DLFolderLocalServiceUtil;
|
||||
|
||||
public class DocLibraryUtil {
|
||||
|
||||
public static final String WORKFLOWS_FOLDER = "Workflow Documents";
|
||||
/**
|
||||
*
|
||||
*/
|
||||
private static final Logger log = LoggerFactory.getLogger(DocLibraryUtil.class);
|
||||
|
||||
|
||||
/**
|
||||
* write the Report File (payload) into Liferay DocLibrary in the workflowdocs folder
|
||||
* @param roles
|
||||
* @param start each Step contains a Map<WfRole, ArrayList<PermissionType>> that is needed in the writeFileIntoDocLibrary
|
||||
* @param fileName
|
||||
* @param buffer the payload as byte array
|
||||
*/
|
||||
public static boolean writeFileIntoDocLibrary(ASLSession session, List<Role> roles, Step start, String fileName, byte[] buffer) {
|
||||
long docfolderid = -1;
|
||||
try {
|
||||
docfolderid = getWfFolder(session);
|
||||
long userId = getUserId(session);
|
||||
//write the file into doclib
|
||||
DLFileEntry fileEntry = DLFileEntryLocalServiceUtil.addFileEntry(
|
||||
userId,
|
||||
getGroupID(session),
|
||||
docfolderid,
|
||||
fileName,
|
||||
fileName,
|
||||
"workflow document",
|
||||
"",
|
||||
"",
|
||||
buffer,
|
||||
new ServiceContext());
|
||||
log.debug("Wrote file into DocumentLibrary");
|
||||
|
||||
|
||||
|
||||
//get the file entry resource id
|
||||
long resourceId = ResourceLocalServiceUtil.getResource(fileEntry.getCompanyId(),
|
||||
DLFileEntry.class.getName(), ResourceConstants.SCOPE_INDIVIDUAL, String.valueOf(fileEntry.getFileEntryId())).getResourceId();
|
||||
|
||||
//set the permission on the file for each role
|
||||
for (Role role : roles) {
|
||||
String[] actionIds = getPermissionsFromWfStep(role, start);
|
||||
PermissionLocalServiceUtil.setRolePermissions(role.getRoleId(), actionIds, resourceId);
|
||||
log.debug("set the permissions for Role: " + role.getName());
|
||||
}
|
||||
} catch (Exception e) {
|
||||
e.printStackTrace();
|
||||
return false;
|
||||
}
|
||||
log.debug(" WROTE INTO DOCsLib and ADDING permissions for name: " + fileName);
|
||||
return true;
|
||||
}
|
||||
|
||||
public static DLFileEntry updateFileIntoDocLibrary(ASLSession session, String workflowid, byte[] buffer) {
|
||||
long docfolderid = -1;
|
||||
DLFileEntry fileEntry = null;
|
||||
try {
|
||||
fileEntry = getFileEntry(session, workflowid);
|
||||
docfolderid = getWfFolder(session);
|
||||
long userId = getUserId(session);
|
||||
|
||||
String fileName = fileEntry.getTitle();
|
||||
log.debug("Update file into DocumentLibrary with Name: " + fileName);
|
||||
|
||||
DLFileEntryLocalServiceUtil.updateFileEntry(
|
||||
userId,
|
||||
getGroupID(session),
|
||||
docfolderid,
|
||||
fileEntry.getName(),
|
||||
fileEntry.getName(),
|
||||
fileName,
|
||||
fileEntry.getDescription(),
|
||||
"",
|
||||
true,
|
||||
"",
|
||||
buffer,
|
||||
new ServiceContext());
|
||||
|
||||
log.debug("Update file into DocumentLibrary");
|
||||
} catch (Exception e) {
|
||||
e.printStackTrace();
|
||||
return null;
|
||||
}
|
||||
return fileEntry;
|
||||
}
|
||||
|
||||
public static boolean deleteFileFromDocLibrary(ASLSession session, String workflowid) {
|
||||
DLFileEntry fileEntry = null;
|
||||
try {
|
||||
fileEntry = getFileEntry(session, workflowid);
|
||||
DLFileEntryLocalServiceUtil.deleteDLFileEntry(fileEntry);
|
||||
log.debug("Deleted");
|
||||
} catch (Exception e) {
|
||||
e.printStackTrace();
|
||||
return false;
|
||||
}
|
||||
return true;
|
||||
}
|
||||
/**
|
||||
*
|
||||
* @param session
|
||||
* @param workflowid
|
||||
* @return
|
||||
* @throws Exception
|
||||
* @throws SystemException
|
||||
* @throws PortalException
|
||||
*/
|
||||
public static InputStream getFileEntryAsStream(ASLSession session, String workflowid) throws Exception {
|
||||
String titleWithExtension = workflowid+".zip";
|
||||
|
||||
DLFileEntry fileEntry = DLFileEntryLocalServiceUtil.getFileEntryByTitle(getGroupID(session), getWfFolder(session),
|
||||
titleWithExtension);
|
||||
|
||||
return DLFileEntryLocalServiceUtil.getFileAsStream(fileEntry.getCompanyId(),
|
||||
getUserId(session), getGroupID(session), getWfFolder(session), fileEntry.getName());
|
||||
|
||||
}
|
||||
|
||||
public static DLFileEntry getFileEntry(ASLSession session, String workflowid) throws PortalException, SystemException, Exception {
|
||||
String titleWithExtension = workflowid+".zip";
|
||||
|
||||
return DLFileEntryLocalServiceUtil.getFileEntryByTitle(getGroupID(session), getWfFolder(session),
|
||||
titleWithExtension);
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
*
|
||||
* @param role is the liferay role, for convention is created as ROLENAME_WFID e.g. EDITOR_123
|
||||
* @param step containts the permissions attached to each role (just the name, e.g. EDITOR)
|
||||
* @return the permissions to apply
|
||||
*/
|
||||
public static String[] getPermissionsFromWfStep(Role role, Step step) {
|
||||
ArrayList<PermissionType> toConvert = new ArrayList<PermissionType>();
|
||||
for (WfRole steprole : step.getPermissions().keySet()) {
|
||||
System.out.println("Steprole: "+ steprole.getRolename());
|
||||
String name = role.getName().split("_")[0]; //e.g. EDITOR <- EDITOR_123
|
||||
System.out.println("role Name: "+ name);
|
||||
if (steprole.getRolename().equals(name)) {
|
||||
toConvert = step.getPermissions().get(steprole);
|
||||
}
|
||||
}
|
||||
String[] toReturn = new String[toConvert.size()];
|
||||
int i = 0;
|
||||
for (PermissionType p : toConvert) {
|
||||
toReturn[i] = getLRActionIdFromWfPermissionType(p);
|
||||
i++;
|
||||
}
|
||||
return toReturn;
|
||||
}
|
||||
/**
|
||||
* check the existence of the WFFolder or create it if not exists
|
||||
* @param session
|
||||
* @return true is everything goes ok
|
||||
* @throws PortalException
|
||||
* @throws SystemException
|
||||
*/
|
||||
public static long getWfFolder(ASLSession session) throws Exception {
|
||||
long parentFolderId = 0;
|
||||
DLFolder folder = null;
|
||||
if (! wfFolderExists(session)) {
|
||||
folder = DLFolderLocalServiceUtil.addFolder(getUserId(session), getGroupID(session), parentFolderId, WORKFLOWS_FOLDER, "Folder for Workflow Documents", new ServiceContext());
|
||||
log.debug("Folder for WorkflowDocs created: /" + WORKFLOWS_FOLDER);
|
||||
} else
|
||||
folder = DLFolderLocalServiceUtil.getFolder( getGroupID(session), parentFolderId, WORKFLOWS_FOLDER);
|
||||
return folder.getFolderId();
|
||||
}
|
||||
/**
|
||||
*
|
||||
* @param session the ASL Session instance
|
||||
* @return true if the workflow docs exists
|
||||
*/
|
||||
public static boolean wfFolderExists(ASLSession session) {
|
||||
try {
|
||||
long groupid = getGroupID(session);
|
||||
long parentfolder = 0;
|
||||
if (DLFolderLocalServiceUtil.getFolder(groupid, parentfolder, "Workflow Documents") != null)
|
||||
return true;
|
||||
else
|
||||
return false;
|
||||
}
|
||||
catch (NoSuchFolderException ex) {
|
||||
log.debug("Folder does not exists");
|
||||
return false;
|
||||
}
|
||||
catch (Exception e) {
|
||||
e.printStackTrace();
|
||||
return false;
|
||||
}
|
||||
}
|
||||
/**
|
||||
*
|
||||
* @param session
|
||||
* @return
|
||||
* @throws PortalException
|
||||
* @throws SystemException
|
||||
*/
|
||||
public static long getGroupID(ASLSession session) throws PortalException, SystemException {
|
||||
long organizationid = session.getGroupId();
|
||||
Organization myOrg = OrganizationLocalServiceUtil.getOrganization(organizationid);
|
||||
return myOrg.getGroup().getGroupId();
|
||||
}
|
||||
/**
|
||||
*
|
||||
* @return the company webid
|
||||
* @throws PortalException
|
||||
* @throws SystemException
|
||||
*/
|
||||
public static long getCompanyID() throws PortalException, SystemException {
|
||||
return OrganizationsUtil.getCompany().getCompanyId();
|
||||
}
|
||||
/**
|
||||
*
|
||||
* @param session the ASL Session instance
|
||||
* @return the list of the root folders
|
||||
* @throws SystemException .
|
||||
* @throws PortalException .
|
||||
*/
|
||||
public static List<DLFolder> getFolders(ASLSession session) throws SystemException, PortalException {
|
||||
long companyid = getCompanyID();
|
||||
List<DLFolder> folders = null;
|
||||
folders = DLFolderLocalServiceUtil.getFolders(companyid);
|
||||
for (DLFolder folder : folders) {
|
||||
log.debug("Folder name: " + folder.getName() + " ID: " + folder.getFolderId() + " Parent: " + folder.getParentFolderId() + " Groupid: " + folder.getGroupId());
|
||||
}
|
||||
return folders;
|
||||
}
|
||||
|
||||
/**
|
||||
*
|
||||
* @param session the ASL Session instance
|
||||
* @return the userid in the liferay system
|
||||
*/
|
||||
public static long getUserId(ASLSession session) {
|
||||
List<User> users = null;
|
||||
long userId = 0;
|
||||
try {
|
||||
users = UserLocalServiceUtil.getUsers(0, UserLocalServiceUtil.getUsersCount());
|
||||
} catch (SystemException e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
for(User user: users){
|
||||
if(user.getScreenName().equalsIgnoreCase(session.getUsername())){
|
||||
userId = user.getUserId();
|
||||
break;
|
||||
}
|
||||
}
|
||||
return userId;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* needed to convert Workflows permission into Lifearay permissions (ActionIDs)
|
||||
* @param type
|
||||
* @return
|
||||
*/
|
||||
private static String getLRActionIdFromWfPermissionType(PermissionType type) {
|
||||
switch (type) {
|
||||
case EDIT_PERMISSIONS:
|
||||
return "PERMISSIONS";
|
||||
case VIEW:
|
||||
return "VIEW";
|
||||
case UPDATE:
|
||||
return "UPDATE";
|
||||
case DELETE:
|
||||
return "DELETE";
|
||||
case ADD_DISCUSSION:
|
||||
return "ADD_DISCUSSION";
|
||||
case DELETE_DISCUSSION:
|
||||
return "DELETE_DISCUSSION";
|
||||
case UPDATE_DISCUSSION:
|
||||
return "UPDATE_DISCUSSION";
|
||||
default:
|
||||
return "";
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
}
|
@ -1,51 +0,0 @@
|
||||
package org.gcube.portlets.user.reportgenerator.server.servlet;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
import org.gcube.application.framework.core.session.ASLSession;
|
||||
import org.gcube.applicationsupportlayer.social.ApplicationNotificationsManager;
|
||||
import org.gcube.applicationsupportlayer.social.NotificationsManager;
|
||||
import org.gcube.common.homelibrary.home.workspace.WorkspaceFolder;
|
||||
import org.gcube.common.homelibrary.home.workspace.WorkspaceItem;
|
||||
import org.slf4j.Logger;
|
||||
import org.slf4j.LoggerFactory;
|
||||
|
||||
/**
|
||||
*
|
||||
* @author Massimiliano Assante ISTI-CNR
|
||||
*
|
||||
*/
|
||||
public class NotificationsThread implements Runnable {
|
||||
private static final Logger _log = LoggerFactory.getLogger(NotificationsThread.class);
|
||||
|
||||
private static final String WORKSPACE_PORTLET_ID = "org.gcube.portlets.user.workspace.server.GWTWorkspaceServiceImpl";
|
||||
|
||||
|
||||
private NotificationsManager nm;
|
||||
private List<String> userIdsToBeNotified;
|
||||
private WorkspaceItem subjectItem;
|
||||
private WorkspaceFolder sharedFolder;
|
||||
|
||||
|
||||
public NotificationsThread(ASLSession session, List<String> userIdsToBeNotified, WorkspaceItem item, WorkspaceFolder sharedFolder) {
|
||||
nm = new ApplicationNotificationsManager(session, WORKSPACE_PORTLET_ID);
|
||||
this.userIdsToBeNotified = userIdsToBeNotified;
|
||||
subjectItem = item;
|
||||
this.sharedFolder = sharedFolder;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void run() {
|
||||
for (String userId : userIdsToBeNotified) {
|
||||
try {
|
||||
// boolean notifResult = nm.notifyUpdatedItem(userId, subjectItem, sharedFolder);
|
||||
//_log.trace("Update Notification sent to " + userId + " result="+notifResult);
|
||||
} catch (Exception e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
||||
}
|
Reference in New Issue