001
014
015 package com.liferay.portlet.documentlibrary.action;
016
017 import com.liferay.portal.InvalidRepositoryException;
018 import com.liferay.portal.NoSuchRepositoryException;
019 import com.liferay.portal.kernel.servlet.SessionErrors;
020 import com.liferay.portal.kernel.util.Constants;
021 import com.liferay.portal.kernel.util.ParamUtil;
022 import com.liferay.portal.kernel.util.PropertiesParamUtil;
023 import com.liferay.portal.kernel.util.UnicodeProperties;
024 import com.liferay.portal.security.auth.PrincipalException;
025 import com.liferay.portal.service.RepositoryServiceUtil;
026 import com.liferay.portal.service.ServiceContext;
027 import com.liferay.portal.service.ServiceContextFactory;
028 import com.liferay.portal.struts.PortletAction;
029 import com.liferay.portal.theme.PortletDisplay;
030 import com.liferay.portal.theme.ThemeDisplay;
031 import com.liferay.portal.util.PortalUtil;
032 import com.liferay.portal.util.WebKeys;
033 import com.liferay.portlet.documentlibrary.DuplicateFolderNameException;
034 import com.liferay.portlet.documentlibrary.DuplicateRepositoryNameException;
035 import com.liferay.portlet.documentlibrary.FolderNameException;
036 import com.liferay.portlet.documentlibrary.RepositoryNameException;
037 import com.liferay.portlet.documentlibrary.model.DLFolder;
038
039 import javax.portlet.ActionRequest;
040 import javax.portlet.ActionResponse;
041 import javax.portlet.PortletConfig;
042 import javax.portlet.RenderRequest;
043 import javax.portlet.RenderResponse;
044
045 import org.apache.struts.action.ActionForm;
046 import org.apache.struts.action.ActionForward;
047 import org.apache.struts.action.ActionMapping;
048
049
052 public class EditRepositoryAction extends PortletAction {
053
054 @Override
055 public void processAction(
056 ActionMapping actionMapping, ActionForm actionForm,
057 PortletConfig portletConfig, ActionRequest actionRequest,
058 ActionResponse actionResponse)
059 throws Exception {
060
061 String cmd = ParamUtil.getString(actionRequest, Constants.CMD);
062
063 try {
064 if (cmd.equals(Constants.ADD) || cmd.equals(Constants.UPDATE)) {
065 updateRepository(actionRequest);
066 }
067 else if (cmd.equals(Constants.DELETE)) {
068 unmountRepository(actionRequest);
069 }
070
071 sendRedirect(actionRequest, actionResponse);
072 }
073 catch (Exception e) {
074 if (e instanceof NoSuchRepositoryException ||
075 e instanceof PrincipalException) {
076
077 SessionErrors.add(actionRequest, e.getClass());
078
079 setForward(actionRequest, "portlet.document_library.error");
080 }
081 else if (e instanceof DuplicateFolderNameException ||
082 e instanceof DuplicateRepositoryNameException ||
083 e instanceof FolderNameException ||
084 e instanceof InvalidRepositoryException ||
085 e instanceof RepositoryNameException) {
086
087 SessionErrors.add(actionRequest, e.getClass());
088 }
089 else {
090 throw e;
091 }
092 }
093 }
094
095 @Override
096 public ActionForward render(
097 ActionMapping actionMapping, ActionForm actionForm,
098 PortletConfig portletConfig, RenderRequest renderRequest,
099 RenderResponse renderResponse)
100 throws Exception {
101
102 try {
103 ActionUtil.getRepository(renderRequest);
104 }
105 catch (Exception e) {
106 if (e instanceof NoSuchRepositoryException ||
107 e instanceof PrincipalException) {
108
109 SessionErrors.add(renderRequest, e.getClass());
110
111 return actionMapping.findForward(
112 "portlet.document_library.error");
113 }
114 else {
115 throw e;
116 }
117 }
118
119 return actionMapping.findForward(
120 getForward(
121 renderRequest, "portlet.document_library.edit_repository"));
122 }
123
124 protected void unmountRepository(ActionRequest actionRequest)
125 throws Exception {
126
127 long repositoryId = ParamUtil.getLong(actionRequest, "repositoryId");
128
129 RepositoryServiceUtil.deleteRepository(repositoryId);
130 }
131
132 protected void updateRepository(ActionRequest actionRequest)
133 throws Exception {
134
135 ThemeDisplay themeDisplay = (ThemeDisplay)actionRequest.getAttribute(
136 WebKeys.THEME_DISPLAY);
137
138 PortletDisplay portletDisplay = themeDisplay.getPortletDisplay();
139
140 long repositoryId = ParamUtil.getLong(actionRequest, "repositoryId");
141
142 String className = ParamUtil.getString(actionRequest, "className");
143
144 long classNameId = PortalUtil.getClassNameId(className);
145
146 long folderId = ParamUtil.getLong(actionRequest, "folderId");
147 String name = ParamUtil.getString(actionRequest, "name");
148 String description = ParamUtil.getString(actionRequest, "description");
149
150 UnicodeProperties typeSettingsProperties =
151 PropertiesParamUtil.getProperties(actionRequest, "settings--");
152
153 ServiceContext serviceContext = ServiceContextFactory.getInstance(
154 DLFolder.class.getName(), actionRequest);
155
156 if (repositoryId <= 0) {
157
158
159
160 RepositoryServiceUtil.addRepository(
161 themeDisplay.getScopeGroupId(), classNameId, folderId, name,
162 description, portletDisplay.getId(), typeSettingsProperties,
163 serviceContext);
164 }
165 else {
166
167
168
169 RepositoryServiceUtil.updateRepository(
170 repositoryId, name, description);
171 }
172 }
173
174 }