196 lines
8.6 KiB
Java
196 lines
8.6 KiB
Java
package org.gcube.portlets.user.performfish;
|
|
|
|
import java.io.IOException;
|
|
import java.io.InputStream;
|
|
import java.sql.Connection;
|
|
import java.util.ArrayList;
|
|
import java.util.Collections;
|
|
import java.util.LinkedHashMap;
|
|
import java.util.List;
|
|
|
|
import javax.portlet.ActionRequest;
|
|
import javax.portlet.ActionResponse;
|
|
import javax.portlet.PortletException;
|
|
import javax.portlet.PortletRequestDispatcher;
|
|
import javax.portlet.RenderRequest;
|
|
import javax.portlet.RenderResponse;
|
|
import javax.portlet.ResourceRequest;
|
|
import javax.portlet.ResourceResponse;
|
|
import javax.portlet.WindowState;
|
|
import javax.servlet.http.HttpServletRequest;
|
|
import javax.servlet.http.HttpServletResponse;
|
|
|
|
import org.gcube.common.authorization.library.provider.SecurityTokenProvider;
|
|
import org.gcube.common.storagehub.client.StreamDescriptor;
|
|
import org.gcube.common.storagehub.client.plugins.AbstractPlugin;
|
|
import org.gcube.common.storagehub.client.proxies.ItemManagerClient;
|
|
import org.gcube.common.storagehubwrapper.server.tohl.Workspace;
|
|
import org.gcube.common.storagehubwrapper.shared.tohl.WorkspaceFolder;
|
|
import org.gcube.common.storagehubwrapper.shared.tohl.WorkspaceItem;
|
|
import org.gcube.common.storagehubwrapper.shared.tohl.impl.WorkspaceFileVersion;
|
|
import org.gcube.common.storagehubwrapper.shared.tohl.items.FileItem;
|
|
import org.gcube.portlets.user.performfish.bean.Farm;
|
|
import org.gcube.portlets.user.performfish.util.PFISHConstants;
|
|
import org.gcube.portlets.user.performfish.util.Utils;
|
|
import org.gcube.portlets.user.performfish.util.comparators.WSItemComparator;
|
|
import org.gcube.portlets.user.performfish.util.db.DBUtil;
|
|
import org.gcube.portlets.user.performfish.util.db.DatabaseConnection;
|
|
import org.gcube.vomanagement.usermanagement.RoleManager;
|
|
import org.gcube.vomanagement.usermanagement.impl.LiferayRoleManager;
|
|
import org.gcube.vomanagement.usermanagement.model.GCubeTeam;
|
|
import org.gcube.vomanagement.usermanagement.model.GCubeUser;
|
|
|
|
import com.liferay.portal.kernel.log.LogFactoryUtil;
|
|
import com.liferay.portal.kernel.servlet.ServletResponseUtil;
|
|
import com.liferay.portal.kernel.servlet.SessionErrors;
|
|
import com.liferay.portal.kernel.util.ParamUtil;
|
|
import com.liferay.portal.util.PortalUtil;
|
|
import com.liferay.util.bridges.mvc.MVCPortlet;
|
|
|
|
/**
|
|
* Portlet implementation class CompanyPrivateRepository
|
|
*/
|
|
public class CompanyPrivateRepository extends MVCPortlet {
|
|
|
|
private static com.liferay.portal.kernel.log.Log _log = LogFactoryUtil.getLog(CompanyFarmRepository.class);
|
|
@Override
|
|
public void render(RenderRequest request, RenderResponse response)
|
|
throws PortletException, IOException {
|
|
_log.info(" This is render method of CompanyPrivateRepository");
|
|
|
|
try {
|
|
_log.info(" initialise of CompanyPrivateRepository done");
|
|
|
|
long groupId = PortalUtil.getScopeGroupId(request);
|
|
GCubeTeam theCompany = Utils.checkBelongingToOneCompanyOnly(request, response, this);
|
|
boolean isCompanyAdmin = Utils.isCompanyAdmin( Utils.getCurrentUser(request), groupId, theCompany);
|
|
if (theCompany != null && isCompanyAdmin) { //check is Admin
|
|
request.setAttribute("theCompany", theCompany);
|
|
String currentContext = Utils.getCurrentContext(request);
|
|
GCubeUser currentUser = Utils.getCurrentUser(request);
|
|
RoleManager rm = new LiferayRoleManager();
|
|
//check folder exists
|
|
Utils utils = new Utils(currentUser.getUsername(), currentContext, request);
|
|
utils.getWSCompanyFolder(theCompany, request);
|
|
//look for company farms
|
|
Connection conn = DatabaseConnection.getInstance(Utils.getCurrentContext(groupId)).getConnection();
|
|
List<Farm> companyFarms = DBUtil.listFarmsByCompanyId(conn, theCompany.getTeamId());
|
|
LinkedHashMap<Farm, List<FileItem>> theFiles = new LinkedHashMap<>();
|
|
for (Farm farm : companyFarms) {
|
|
GCubeTeam theFarm = rm.getTeam(farm.getFarmId());
|
|
farm.setName(theFarm.getTeamName());
|
|
Workspace ws = utils.getWS() ;
|
|
WorkspaceFolder farmFolder = utils.getWSFarmFolder(theCompany, theFarm);
|
|
List<? extends WorkspaceItem> farmItems = ws.getChildren(farmFolder.getId(), true);
|
|
Collections.sort(farmItems, new WSItemComparator());
|
|
List<FileItem> farmFiles = new ArrayList<>();
|
|
for (WorkspaceItem workspaceItem : farmItems) {
|
|
if (workspaceItem instanceof FileItem) {
|
|
FileItem file = (FileItem) workspaceItem;
|
|
farmFiles.add(file);
|
|
}
|
|
}
|
|
theFiles.put(farm, farmFiles);
|
|
}
|
|
request.setAttribute("companyPrivateFiles", theFiles); //pass to the JSP
|
|
String imageUrl = Utils.getCompanyLogoURL(theCompany.getTeamName(), groupId, request);
|
|
request.setAttribute("companyLogoURL", imageUrl); //pass to logo URL to the JSP
|
|
//display the view.jsp
|
|
super.render(request, response);
|
|
}
|
|
else {
|
|
PortletRequestDispatcher dispatcher = getPortletContext().getRequestDispatcher(Utils.NOT_ADMIN_PAGE_PATH);
|
|
dispatcher.include(request, response);
|
|
}
|
|
|
|
} catch (Exception e) {
|
|
e.printStackTrace();
|
|
}
|
|
}
|
|
|
|
public void displayVersions(ActionRequest request, ActionResponse response) throws Exception {
|
|
String itemId = ParamUtil.getString(request, "fileItem");
|
|
if (itemId == null || itemId.compareTo("")==0) {
|
|
SessionErrors.add(request.getPortletSession(),"form-error");
|
|
return;
|
|
}
|
|
HttpServletRequest httpReq = PortalUtil.getHttpServletRequest(request);
|
|
GCubeUser currentUser = Utils.getCurrentUser(httpReq);
|
|
String context = Utils.getCurrentContext(httpReq);
|
|
Utils utils = new Utils(currentUser.getUsername(), context, request);
|
|
Workspace ws = utils.getWS() ;
|
|
WorkspaceItem theItem = ws.getItem(itemId);
|
|
if (theItem instanceof FileItem) {
|
|
FileItem file = (FileItem) theItem;
|
|
List<WorkspaceFileVersion> versions = ws.getListVersionsForFile(file.getId());
|
|
request.setAttribute("versions", versions); //pass to the JSP
|
|
} else {
|
|
response.setRenderParameter("jspPage", PFISHConstants.OPERATION_ERROR_PATH);
|
|
}
|
|
request.setAttribute("itemId", itemId);
|
|
request.setAttribute("itemName", theItem.getName());
|
|
response.setWindowState(WindowState.MAXIMIZED);
|
|
response.setRenderParameter("jspPage", "/html/farmrepository/show_all_versions.jsp");
|
|
}
|
|
|
|
|
|
public void serveResource(ResourceRequest resourceRequest, ResourceResponse resourceResponse) throws IOException, PortletException {
|
|
//if download file
|
|
String fileToDownloadId = ParamUtil.getString(resourceRequest, "fileToDownloadId", null);
|
|
//if download version
|
|
String versionDownloadItemId = ParamUtil.getString(resourceRequest, "versionDownloadItemId", null);
|
|
String versionDownloadName = ParamUtil.getString(resourceRequest, "versionDownloadName", null);
|
|
|
|
String authToken = setAuthorizationToken(resourceRequest);
|
|
//check if is a file download
|
|
if (fileToDownloadId != null) {
|
|
String selectedItemId = fileToDownloadId;
|
|
try {
|
|
ItemManagerClient client = AbstractPlugin.item().build();
|
|
StreamDescriptor streamDescr = client.download(selectedItemId);
|
|
HttpServletResponse httpRes = PortalUtil.getHttpServletResponse(resourceResponse);
|
|
HttpServletRequest httpReq = PortalUtil.getHttpServletRequest(resourceRequest);
|
|
ServletResponseUtil.sendFile(httpReq,httpRes, streamDescr.getFileName(), streamDescr.getStream(), "application/download");
|
|
streamDescr.getStream().close();
|
|
} catch (Exception e) {
|
|
e.printStackTrace();
|
|
}
|
|
}
|
|
else if (versionDownloadItemId != null && versionDownloadName != null) { //check if download version
|
|
GCubeUser currentUser = Utils.getCurrentUser(resourceRequest);
|
|
String context = Utils.getCurrentContext(resourceRequest);
|
|
Utils utils = new Utils(currentUser.getUsername(), context, resourceRequest);
|
|
Workspace ws = utils.getWS() ;
|
|
WorkspaceItem theItem;
|
|
try {
|
|
theItem = ws.getItem(versionDownloadItemId);
|
|
if (theItem instanceof FileItem) {
|
|
FileItem file = (FileItem) theItem;
|
|
InputStream is = ws.downloadFile(file.getId(), authToken, versionDownloadName, context).getStream();
|
|
HttpServletResponse httpRes = PortalUtil.getHttpServletResponse(resourceResponse);
|
|
HttpServletRequest httpReq = PortalUtil.getHttpServletRequest(resourceRequest);
|
|
ServletResponseUtil.sendFile(httpReq,httpRes, versionDownloadName+"_"+file.getName(), is, "application/download");
|
|
}
|
|
} catch (Exception e) {
|
|
e.printStackTrace();
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
/**
|
|
* set the authorization token in Thread local and return the current {@link AuthorizedUser} instance
|
|
* @param request
|
|
* @return
|
|
*/
|
|
private String setAuthorizationToken(ResourceRequest request) {
|
|
GCubeUser currentUser = Utils.getCurrentUser(request);
|
|
String scope = Utils.getCurrentContext(request);
|
|
String authorizationToken = Utils.getCurrentUserToken(scope, currentUser.getUsername());
|
|
SecurityTokenProvider.instance.set(authorizationToken);
|
|
return authorizationToken;
|
|
}
|
|
|
|
}
|