001
014
015 package com.liferay.portlet.documentlibrary.action;
016
017 import com.liferay.portal.kernel.servlet.SessionErrors;
018 import com.liferay.portal.kernel.servlet.SessionMessages;
019 import com.liferay.portal.kernel.util.Constants;
020 import com.liferay.portal.kernel.util.GetterUtil;
021 import com.liferay.portal.kernel.util.LocalizationUtil;
022 import com.liferay.portal.kernel.util.ParamUtil;
023 import com.liferay.portal.kernel.util.StringUtil;
024 import com.liferay.portal.model.Group;
025 import com.liferay.portal.security.auth.PrincipalException;
026 import com.liferay.portal.service.GroupLocalServiceUtil;
027 import com.liferay.portal.service.ServiceContext;
028 import com.liferay.portal.service.ServiceContextFactory;
029 import com.liferay.portal.struts.PortletAction;
030 import com.liferay.portal.theme.ThemeDisplay;
031 import com.liferay.portal.util.PortalUtil;
032 import com.liferay.portal.util.PortletKeys;
033 import com.liferay.portal.util.WebKeys;
034 import com.liferay.portlet.documentlibrary.DuplicateFileEntryTypeException;
035 import com.liferay.portlet.documentlibrary.NoSuchFileEntryTypeException;
036 import com.liferay.portlet.documentlibrary.NoSuchMetadataSetException;
037 import com.liferay.portlet.documentlibrary.model.DLFileEntryMetadata;
038 import com.liferay.portlet.documentlibrary.model.DLFileEntryType;
039 import com.liferay.portlet.documentlibrary.service.DLAppServiceUtil;
040 import com.liferay.portlet.documentlibrary.service.DLFileEntryTypeServiceUtil;
041 import com.liferay.portlet.documentlibrary.util.DLUtil;
042 import com.liferay.portlet.dynamicdatamapping.NoSuchStructureException;
043 import com.liferay.portlet.dynamicdatamapping.RequiredStructureException;
044 import com.liferay.portlet.dynamicdatamapping.StructureDuplicateElementException;
045 import com.liferay.portlet.dynamicdatamapping.StructureNameException;
046 import com.liferay.portlet.dynamicdatamapping.model.DDMStructure;
047 import com.liferay.portlet.dynamicdatamapping.service.DDMStructureLocalServiceUtil;
048
049 import java.util.Locale;
050 import java.util.Map;
051
052 import javax.portlet.ActionRequest;
053 import javax.portlet.ActionResponse;
054 import javax.portlet.PortletConfig;
055 import javax.portlet.PortletRequest;
056 import javax.portlet.RenderRequest;
057 import javax.portlet.RenderResponse;
058
059 import org.apache.struts.action.ActionForm;
060 import org.apache.struts.action.ActionForward;
061 import org.apache.struts.action.ActionMapping;
062
063
067 public class EditFileEntryTypeAction extends PortletAction {
068
069 @Override
070 public void processAction(
071 ActionMapping actionMapping, ActionForm actionForm,
072 PortletConfig portletConfig, ActionRequest actionRequest,
073 ActionResponse actionResponse)
074 throws Exception {
075
076 String cmd = ParamUtil.getString(actionRequest, Constants.CMD);
077
078 try {
079 if (cmd.equals(Constants.ADD) || cmd.equals(Constants.UPDATE)) {
080 updateFileEntryType(actionRequest, actionResponse);
081 }
082 else if (cmd.equals(Constants.DELETE)) {
083 deleteFileEntryType(actionRequest, actionResponse);
084 }
085 else if (cmd.equals(Constants.SUBSCRIBE)) {
086 subscribeFileEntryType(actionRequest);
087 }
088 else if (cmd.equals(Constants.UNSUBSCRIBE)) {
089 unsubscribeFileEntryType(actionRequest);
090 }
091
092 if (SessionErrors.isEmpty(actionRequest)) {
093 SessionMessages.add(
094 actionRequest,
095 PortalUtil.getPortletId(actionRequest) +
096 SessionMessages.KEY_SUFFIX_REFRESH_PORTLET,
097 PortletKeys.DOCUMENT_LIBRARY);
098 }
099
100 sendRedirect(actionRequest, actionResponse);
101 }
102 catch (Exception e) {
103 if (e instanceof DuplicateFileEntryTypeException ||
104 e instanceof NoSuchMetadataSetException ||
105 e instanceof StructureDuplicateElementException ||
106 e instanceof StructureNameException) {
107
108 SessionErrors.add(actionRequest, e.getClass());
109 }
110 else if (e instanceof NoSuchFileEntryTypeException ||
111 e instanceof NoSuchStructureException ||
112 e instanceof PrincipalException) {
113
114 SessionErrors.add(actionRequest, e.getClass());
115
116 setForward(actionRequest, "portlet.document_library.error");
117 }
118 else if (e instanceof RequiredStructureException) {
119 SessionErrors.add(actionRequest, e.getClass());
120
121 sendRedirect(actionRequest, actionResponse);
122 }
123 else {
124 throw e;
125 }
126 }
127 }
128
129 @Override
130 public ActionForward render(
131 ActionMapping actionMapping, ActionForm actionForm,
132 PortletConfig portletConfig, RenderRequest renderRequest,
133 RenderResponse renderResponse)
134 throws Exception {
135
136 DLFileEntryType dlFileEntryType = null;
137
138 try {
139 long fileEntryTypeId = ParamUtil.getLong(
140 renderRequest, "fileEntryTypeId");
141
142 if (fileEntryTypeId > 0) {
143 dlFileEntryType = DLFileEntryTypeServiceUtil.getFileEntryType(
144 fileEntryTypeId);
145
146 renderRequest.setAttribute(
147 WebKeys.DOCUMENT_LIBRARY_FILE_ENTRY_TYPE, dlFileEntryType);
148
149 DDMStructure ddmStructure =
150 DDMStructureLocalServiceUtil.fetchStructure(
151 dlFileEntryType.getGroupId(),
152 PortalUtil.getClassNameId(DLFileEntryMetadata.class),
153 DLUtil.getDDMStructureKey(dlFileEntryType));
154
155 if (ddmStructure == null) {
156 ddmStructure = DDMStructureLocalServiceUtil.fetchStructure(
157 dlFileEntryType.getGroupId(),
158 PortalUtil.getClassNameId(DLFileEntryMetadata.class),
159 DLUtil.getDeprecatedDDMStructureKey(dlFileEntryType));
160 }
161
162 renderRequest.setAttribute(
163 WebKeys.DYNAMIC_DATA_MAPPING_STRUCTURE, ddmStructure);
164 }
165 }
166 catch (Exception e) {
167 if (e instanceof NoSuchFileEntryTypeException ||
168 e instanceof PrincipalException) {
169
170 SessionErrors.add(renderRequest, e.getClass());
171
172 return actionMapping.findForward(
173 "portlet.document_library.error");
174 }
175 else {
176 throw e;
177 }
178 }
179
180 return actionMapping.findForward(
181 getForward(
182 renderRequest,
183 "portlet.document_library.edit_file_entry_type"));
184 }
185
186 protected void deleteFileEntryType(
187 ActionRequest actionRequest, ActionResponse actionResponse)
188 throws Exception {
189
190 long fileEntryTypeId = ParamUtil.getLong(
191 actionRequest, "fileEntryTypeId");
192
193 DLFileEntryTypeServiceUtil.deleteFileEntryType(fileEntryTypeId);
194 }
195
196 protected long[] getLongArray(PortletRequest portletRequest, String name) {
197 String value = portletRequest.getParameter(name);
198
199 if (value == null) {
200 return null;
201 }
202
203 return StringUtil.split(GetterUtil.getString(value), 0L);
204 }
205
206 protected void subscribeFileEntryType(ActionRequest actionRequest)
207 throws Exception {
208
209 ThemeDisplay themeDisplay = (ThemeDisplay)actionRequest.getAttribute(
210 WebKeys.THEME_DISPLAY);
211
212 long fileEntryTypeId = ParamUtil.getLong(
213 actionRequest, "fileEntryTypeId");
214
215 DLAppServiceUtil.subscribeFileEntryType(
216 themeDisplay.getScopeGroupId(), fileEntryTypeId);
217 }
218
219 protected void unsubscribeFileEntryType(ActionRequest actionRequest)
220 throws Exception {
221
222 ThemeDisplay themeDisplay = (ThemeDisplay)actionRequest.getAttribute(
223 WebKeys.THEME_DISPLAY);
224
225 long fileEntryTypeId = ParamUtil.getLong(
226 actionRequest, "fileEntryTypeId");
227
228 DLAppServiceUtil.unsubscribeFileEntryType(
229 themeDisplay.getScopeGroupId(), fileEntryTypeId);
230 }
231
232 protected void updateFileEntryType(
233 ActionRequest actionRequest, ActionResponse actionResponse)
234 throws Exception {
235
236 ThemeDisplay themeDisplay = (ThemeDisplay)actionRequest.getAttribute(
237 WebKeys.THEME_DISPLAY);
238
239 long fileEntryTypeId = ParamUtil.getLong(
240 actionRequest, "fileEntryTypeId");
241
242 Map<Locale, String> nameMap = LocalizationUtil.getLocalizationMap(
243 actionRequest, "name");
244 Map<Locale, String> descriptionMap =
245 LocalizationUtil.getLocalizationMap(actionRequest, "description");
246
247 long[] ddmStructureIds = getLongArray(
248 actionRequest, "ddmStructuresSearchContainerPrimaryKeys");
249
250 ServiceContext serviceContext = ServiceContextFactory.getInstance(
251 DLFileEntryType.class.getName(), actionRequest);
252
253 if (fileEntryTypeId <= 0) {
254
255
256
257 long groupId = themeDisplay.getScopeGroupId();
258
259 Group scopeGroup = GroupLocalServiceUtil.getGroup(groupId);
260
261 if (scopeGroup.isLayout()) {
262 groupId = scopeGroup.getParentGroupId();
263 }
264
265 DLFileEntryTypeServiceUtil.addFileEntryType(
266 groupId, null, nameMap, descriptionMap, ddmStructureIds,
267 serviceContext);
268 }
269 else {
270
271
272
273 DLFileEntryTypeServiceUtil.updateFileEntryType(
274 fileEntryTypeId, nameMap, descriptionMap, ddmStructureIds,
275 serviceContext);
276 }
277 }
278
279 }