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