001
014
015 package com.liferay.portlet.documentlibrary.action;
016
017 import com.liferay.portal.kernel.exception.PortalException;
018 import com.liferay.portal.kernel.servlet.SessionErrors;
019 import com.liferay.portal.kernel.servlet.SessionMessages;
020 import com.liferay.portal.kernel.util.Constants;
021 import com.liferay.portal.kernel.util.GetterUtil;
022 import com.liferay.portal.kernel.util.LocalizationUtil;
023 import com.liferay.portal.kernel.util.ParamUtil;
024 import com.liferay.portal.kernel.util.StringUtil;
025 import com.liferay.portal.model.Group;
026 import com.liferay.portal.security.auth.PrincipalException;
027 import com.liferay.portal.service.GroupLocalServiceUtil;
028 import com.liferay.portal.service.ServiceContext;
029 import com.liferay.portal.service.ServiceContextFactory;
030 import com.liferay.portal.struts.PortletAction;
031 import com.liferay.portal.theme.ThemeDisplay;
032 import com.liferay.portal.util.PortalUtil;
033 import com.liferay.portal.util.PortletKeys;
034 import com.liferay.portal.util.WebKeys;
035 import com.liferay.portlet.documentlibrary.DuplicateFileEntryTypeException;
036 import com.liferay.portlet.documentlibrary.NoSuchFileEntryTypeException;
037 import com.liferay.portlet.documentlibrary.NoSuchMetadataSetException;
038 import com.liferay.portlet.documentlibrary.model.DLFileEntryMetadata;
039 import com.liferay.portlet.documentlibrary.model.DLFileEntryType;
040 import com.liferay.portlet.documentlibrary.service.DLAppServiceUtil;
041 import com.liferay.portlet.documentlibrary.service.DLFileEntryTypeServiceUtil;
042 import com.liferay.portlet.documentlibrary.util.DLUtil;
043 import com.liferay.portlet.dynamicdatamapping.NoSuchStructureException;
044 import com.liferay.portlet.dynamicdatamapping.RequiredStructureException;
045 import com.liferay.portlet.dynamicdatamapping.StructureDefinitionException;
046 import com.liferay.portlet.dynamicdatamapping.StructureDuplicateElementException;
047 import com.liferay.portlet.dynamicdatamapping.StructureNameException;
048 import com.liferay.portlet.dynamicdatamapping.model.DDMStructure;
049 import com.liferay.portlet.dynamicdatamapping.service.DDMStructureLocalServiceUtil;
050 import com.liferay.portlet.dynamicdatamapping.util.DDMXSDUtil;
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 String getDefinition(ServiceContext serviceContext)
201 throws PortalException {
202
203 try {
204 String definition = ParamUtil.getString(
205 serviceContext, "definition");
206
207 return DDMXSDUtil.getXSD(definition);
208 }
209 catch (PortalException pe) {
210 throw new StructureDefinitionException(pe);
211 }
212 }
213
214 protected long[] getLongArray(PortletRequest portletRequest, String name) {
215 String value = portletRequest.getParameter(name);
216
217 if (value == null) {
218 return null;
219 }
220
221 return StringUtil.split(GetterUtil.getString(value), 0L);
222 }
223
224 protected void subscribeFileEntryType(ActionRequest actionRequest)
225 throws Exception {
226
227 ThemeDisplay themeDisplay = (ThemeDisplay)actionRequest.getAttribute(
228 WebKeys.THEME_DISPLAY);
229
230 long fileEntryTypeId = ParamUtil.getLong(
231 actionRequest, "fileEntryTypeId");
232
233 DLAppServiceUtil.subscribeFileEntryType(
234 themeDisplay.getScopeGroupId(), fileEntryTypeId);
235 }
236
237 protected void unsubscribeFileEntryType(ActionRequest actionRequest)
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 DLAppServiceUtil.unsubscribeFileEntryType(
247 themeDisplay.getScopeGroupId(), fileEntryTypeId);
248 }
249
250 protected void updateFileEntryType(
251 ActionRequest actionRequest, ActionResponse actionResponse)
252 throws Exception {
253
254 ThemeDisplay themeDisplay = (ThemeDisplay)actionRequest.getAttribute(
255 WebKeys.THEME_DISPLAY);
256
257 long fileEntryTypeId = ParamUtil.getLong(
258 actionRequest, "fileEntryTypeId");
259
260 Map<Locale, String> nameMap = LocalizationUtil.getLocalizationMap(
261 actionRequest, "name");
262 Map<Locale, String> descriptionMap =
263 LocalizationUtil.getLocalizationMap(actionRequest, "description");
264
265 long[] ddmStructureIds = getLongArray(
266 actionRequest, "ddmStructuresSearchContainerPrimaryKeys");
267
268 ServiceContext serviceContext = ServiceContextFactory.getInstance(
269 DLFileEntryType.class.getName(), actionRequest);
270
271 serviceContext.setAttribute(
272 "definition", getDefinition(serviceContext));
273
274 if (fileEntryTypeId <= 0) {
275
276
277
278 long groupId = themeDisplay.getScopeGroupId();
279
280 Group scopeGroup = GroupLocalServiceUtil.getGroup(groupId);
281
282 if (scopeGroup.isLayout()) {
283 groupId = scopeGroup.getParentGroupId();
284 }
285
286 DLFileEntryTypeServiceUtil.addFileEntryType(
287 groupId, null, nameMap, descriptionMap, ddmStructureIds,
288 serviceContext);
289 }
290 else {
291
292
293
294 DLFileEntryTypeServiceUtil.updateFileEntryType(
295 fileEntryTypeId, nameMap, descriptionMap, ddmStructureIds,
296 serviceContext);
297 }
298 }
299
300 }