package de.uhh.l2g.plugins.admin; import java.io.IOException; import javax.portlet.ActionRequest; import javax.portlet.ActionResponse; import javax.portlet.PortletException; import javax.portlet.RenderRequest; import javax.portlet.RenderResponse; import com.liferay.portal.kernel.exception.PortalException; import com.liferay.portal.kernel.exception.SystemException; import com.liferay.portal.kernel.log.Log; import com.liferay.portal.kernel.log.LogFactoryUtil; import com.liferay.portal.kernel.servlet.SessionErrors; import com.liferay.portal.kernel.util.ParamUtil; import com.liferay.portal.model.ResourcePermission; import com.liferay.portal.model.Role; import com.liferay.portal.service.RoleLocalServiceUtil; import com.liferay.portal.service.ServiceContext; import com.liferay.portal.service.ServiceContextFactory; import com.liferay.portal.util.PortalUtil; import com.liferay.util.bridges.mvc.MVCPortlet; import de.uhh.l2g.plugins.NoPropertyException; import de.uhh.l2g.plugins.model.Institution; import de.uhh.l2g.plugins.service.HostLocalServiceUtil; import de.uhh.l2g.plugins.service.InstitutionLocalServiceUtil; import de.uhh.l2g.plugins.service.Institution_HostLocalServiceUtil; import de.uhh.l2g.plugins.util.PermissionManager; public class AdminInstitutionManagement extends MVCPortlet { protected static Log LOG = LogFactoryUtil.getLog(AdminInstitutionManagement.class.getName()); @Override public void render(RenderRequest renderRequest, RenderResponse renderResponse) throws PortletException, IOException { try { ServiceContext serviceContext = ServiceContextFactory.getInstance(Institution.class.getName(), renderRequest); // was this portlet allready initialized with default values? True // fo a fully insatlled system boolean isInitialized = true; long groupId = serviceContext.getScopeGroupId(); long companyId = serviceContext.getCompanyId(); LOG.debug("plid " + serviceContext.getPlid() + ", portletId " + serviceContext.getPortletId() + " "); long institutionId = ParamUtil.getLong(renderRequest, "institutionId"); long hostId = ParamUtil.getLong(renderRequest, "hostId"); // Check if default Permissions are Set for this Context (requires // L2G Roles) // Delete Permissions for admin from DB to reset LOG.debug("Initialize Permissions"); Role admin = RoleLocalServiceUtil.fetchRole(companyId, AdminUserManagement.L2G_ADMIN); if (admin != null) { // Check if Permission is set for L2go Admin Role and Context PermissionManager pm = new PermissionManager(serviceContext); ResourcePermission rp = pm.getPermissionforRole(AdminUserManagement.L2G_ADMIN); if (rp == null) { // In this case we are probably missing other defaults too, // but UserPortlet has been triggered isInitialized = false; } } else { // This means User Portlet has not been initialized yet (we // can't generate default permissions yet) isInitialized = false; SessionErrors.add(renderRequest, "no-roles-error"); } // We need to initialize DB if there are no values for root // Institution and default Host // We need to verify counters to check if DB has been changed from // remote (Migration, manual Additions) or stale folders // Set to zero if empty/otherwise synchronize with DB LOG.info("Updating Counter values!"); // Initialize if needed // Trigger new init by deleting this test, removing Role or removing // ResourcePermissions for this context from DB if (isInitialized == false) { // Initialize if needed LOG.info("Initialize Service Builder Tables beacause the portlet seems to be unconfigured. isInitialized:" + isInitialized); // Add default host if empty or default entry does not exist long defaultHostId = HostLocalServiceUtil.getDefaultHostId(companyId, groupId); LOG.debug("Default Host: " + defaultHostId); if (defaultHostId == 0) defaultHostId = HostLocalServiceUtil.addDefaultHost(serviceContext).getHostId(); // new Tree Root for Institution if empty long defaultInstitutionId = InstitutionLocalServiceUtil.getDefaultInstitutionId(companyId, groupId); LOG.debug("Default Institution: " + defaultInstitutionId); if (defaultInstitutionId == 0) { defaultInstitutionId = InstitutionLocalServiceUtil.addDefaultInstitution(serviceContext).getInstitutionId(); } // Add default Link for Top Level if not exists (non functional // for analogy - relies on institution having exactly one fixed // host) long defaultInstitutionHostId = Institution_HostLocalServiceUtil.getDefaultInstitutionHostId(companyId, groupId); if (defaultInstitutionHostId == 0) { defaultInstitutionHostId = Institution_HostLocalServiceUtil.addDefaultInstitutionHost(defaultInstitutionId, defaultHostId, serviceContext); } LOG.debug("Default Institution_Host: " + defaultInstitutionHostId); } if (!(institutionId > 0)) { institutionId = 0; // institutionId = institutions.get(0).getInstitutionId(); } if (!(hostId > 0)) { hostId = 0; } renderRequest.setAttribute("institutionId", institutionId); renderRequest.setAttribute("hostId", hostId); } catch (NoPropertyException e) { SessionErrors.add(renderRequest, "no-property-error"); LOG.error("Failed retrieving crucial settings from portal properties", e); throw new PortletException(e); } catch (Exception e) { SessionErrors.add(renderRequest, e.getClass().getName()); LOG.error("Failed rendering " + AdminInstitutionManagement.class.getName(), e); throw new PortletException(e); } super.render(renderRequest, renderResponse); } public void addInstitution(ActionRequest request, ActionResponse response) throws PortalException, SystemException { String institutionName = ""; String backURL = request.getParameter("backURL"); try { ServiceContext serviceContext = ServiceContextFactory.getInstance(Institution.class.getName(), request); institutionName = ParamUtil.getString(request, "institution"); long hostId = ParamUtil.getLong(request, "serverselect"); long parentId = ParamUtil.getLong(request, "parent"); int sort = ParamUtil.getInteger(request, "order"); InstitutionLocalServiceUtil.addInstitution(institutionName, hostId, parentId, sort, serviceContext); response.sendRedirect(backURL); } catch (Exception e) { SessionErrors.add(request, e.getClass().getName()); LOG.error("Failed adding Institution " + institutionName, e); PortalUtil.copyRequestParameters(request, response); response.setRenderParameter("mvcPath", "/admin/institutionList.jsp"); } } /** * Works analogous to addInstitution, but is separate method to enforce * restrictions */ public void addSubInstitution(ActionRequest request, ActionResponse response) throws PortalException, SystemException { String institutionName = ""; String backURL = request.getParameter("backURL"); try { ServiceContext serviceContext = ServiceContextFactory.getInstance(Institution.class.getName(), request); institutionName = ParamUtil.getString(request, "subInstitution"); long hostId = 0; long parentId = ParamUtil.getLong(request, "subInstitutionParentId"); int sort = ParamUtil.getInteger(request, "subInstitutionOrder"); InstitutionLocalServiceUtil.addInstitution(institutionName, hostId, parentId, sort, serviceContext); response.sendRedirect(backURL); } catch (Exception e) { SessionErrors.add(request, e.getClass().getName()); LOG.error("Failed adding Sub-Institution " + institutionName, e); PortalUtil.copyRequestParameters(request, response); response.setRenderParameter("mvcPath", "/admin/institutionList.jsp"); } } public void updateInstitution(ActionRequest request, ActionResponse response) throws PortalException, SystemException { ServiceContext serviceContext = ServiceContextFactory.getInstance(Institution.class.getName(), request); String name = ParamUtil.getString(request, "outerListInstitution"); long institutionId = ParamUtil.getLong(request, "outerListInstitutionId"); int sort = ParamUtil.getInteger(request, "outerListOrder"); LOG.info("Updating " + institutionId); String backURL = request.getParameter("backURL"); try { InstitutionLocalServiceUtil.updateInstitution(institutionId, name, sort, serviceContext); response.sendRedirect(backURL); } catch (Exception e) { SessionErrors.add(request, e.getClass().getName()); LOG.error("Failed updating Institution", e); PortalUtil.copyRequestParameters(request, response); response.setRenderParameter("mvcPath", "/admin/institutionList.jsp"); } } public void updateSubInstitution(ActionRequest request, ActionResponse response) throws PortalException, SystemException { ServiceContext serviceContext = ServiceContextFactory.getInstance(Institution.class.getName(), request); String institutionName = ParamUtil.getString(request, "innerListInstitution"); long institutionId = ParamUtil.getLong(request, "innerListInstitutionId"); int sort = ParamUtil.getInteger(request, "innerListOrder"); LOG.info("Updating " + institutionId); String backURL = request.getParameter("backURL"); try { InstitutionLocalServiceUtil.updateInstitution(institutionId, institutionName, sort, serviceContext); response.sendRedirect(backURL); } catch (Exception e) { SessionErrors.add(request, e.getClass().getName()); LOG.error("Failed updating SubInstitution", e); PortalUtil.copyRequestParameters(request, response); response.setRenderParameter("mvcPath", "/admin/institutionList.jsp"); } } public void deleteInstitution(ActionRequest request, ActionResponse response) { long institutionId = ParamUtil.getLong(request, "outerListInstitutionId"); LOG.info("Deleting " + institutionId); String backURL = request.getParameter("backURL"); try { ServiceContext serviceContext = ServiceContextFactory.getInstance(Institution.class.getName(), request); response.setRenderParameter("institutionId", Long.toString(institutionId)); InstitutionLocalServiceUtil.deleteInstitution(institutionId, serviceContext); response.sendRedirect(backURL); } catch (Exception e) { SessionErrors.add(request, e.getClass().getName()); LOG.error("Failed deleting Institution", e); PortalUtil.copyRequestParameters(request, response); response.setRenderParameter("mvcPath", "/admin/institutionList.jsp"); } } public void deleteSubInstitution(ActionRequest request, ActionResponse response) { long institutionId = ParamUtil.getLong(request, "innerListInstitutionId"); long parentId = ParamUtil.getLong(request, "innerListInstitutionParentId"); LOG.info("Trying to remove " + institutionId + " in " + parentId); String backURL = request.getParameter("backURL"); try { ServiceContext serviceContext = ServiceContextFactory.getInstance(Institution.class.getName(), request); response.setRenderParameter("institutionId", Long.toString(institutionId)); InstitutionLocalServiceUtil.deleteInstitution(institutionId, serviceContext); response.sendRedirect(backURL); } catch (Exception e) { SessionErrors.add(request, e.getClass().getName()); LOG.error("Failed deleting SubInstitution", e); PortalUtil.copyRequestParameters(request, response); response.setRenderParameter("mvcPath", "/admin/institutionList.jsp"); } } }