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.ParamUtil;
022 import com.liferay.portal.kernel.util.StringUtil;
023 import com.liferay.portal.model.Group;
024 import com.liferay.portal.security.auth.PrincipalException;
025 import com.liferay.portal.service.GroupLocalServiceUtil;
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.ThemeDisplay;
030 import com.liferay.portal.util.PortletKeys;
031 import com.liferay.portal.util.WebKeys;
032 import com.liferay.portlet.documentlibrary.DuplicateFileEntryTypeException;
033 import com.liferay.portlet.documentlibrary.NoSuchFileEntryTypeException;
034 import com.liferay.portlet.documentlibrary.NoSuchMetadataSetException;
035 import com.liferay.portlet.documentlibrary.model.DLFileEntryType;
036 import com.liferay.portlet.documentlibrary.service.DLFileEntryTypeServiceUtil;
037 import com.liferay.portlet.dynamicdatamapping.NoSuchStructureException;
038 import com.liferay.portlet.dynamicdatamapping.StructureDuplicateElementException;
039 import com.liferay.portlet.dynamicdatamapping.model.DDMStructure;
040 import com.liferay.portlet.dynamicdatamapping.service.DDMStructureLocalServiceUtil;
041
042 import javax.portlet.ActionRequest;
043 import javax.portlet.ActionResponse;
044 import javax.portlet.PortletConfig;
045 import javax.portlet.PortletRequest;
046 import javax.portlet.RenderRequest;
047 import javax.portlet.RenderResponse;
048
049 import org.apache.struts.action.ActionForm;
050 import org.apache.struts.action.ActionForward;
051 import org.apache.struts.action.ActionMapping;
052
053
057 public class EditFileEntryTypeAction extends PortletAction {
058
059 @Override
060 public void processAction(
061 ActionMapping mapping, ActionForm form, PortletConfig portletConfig,
062 ActionRequest actionRequest, ActionResponse actionResponse)
063 throws Exception {
064
065 String cmd = ParamUtil.getString(actionRequest, Constants.CMD);
066
067 try {
068 if (cmd.equals(Constants.ADD) || cmd.equals(Constants.UPDATE)) {
069 updateFileEntryType(actionRequest, actionResponse);
070 }
071 else if (cmd.equals(Constants.DELETE)) {
072 deleteFileEntryType(actionRequest, actionResponse);
073 }
074
075 if (SessionErrors.isEmpty(actionRequest)) {
076 SessionMessages.add(
077 actionRequest,
078 portletConfig.getPortletName() + ".doRefresh",
079 PortletKeys.DOCUMENT_LIBRARY);
080 }
081
082 sendRedirect(actionRequest, actionResponse);
083 }
084 catch (Exception e) {
085 if (e instanceof DuplicateFileEntryTypeException ||
086 e instanceof NoSuchMetadataSetException ||
087 e instanceof StructureDuplicateElementException) {
088
089 SessionErrors.add(actionRequest, e.getClass().getName());
090 }
091 else if (e instanceof NoSuchFileEntryTypeException ||
092 e instanceof NoSuchStructureException ||
093 e instanceof PrincipalException) {
094
095 SessionErrors.add(actionRequest, e.getClass().getName());
096
097 setForward(actionRequest, "portlet.document_library.error");
098 }
099 else {
100 throw e;
101 }
102 }
103 }
104
105 @Override
106 public ActionForward render(
107 ActionMapping mapping, ActionForm form, PortletConfig portletConfig,
108 RenderRequest renderRequest, RenderResponse renderResponse)
109 throws Exception {
110
111 DLFileEntryType fileEntryType = null;
112
113 try {
114 long fileEntryTypeId = ParamUtil.getLong(
115 renderRequest, "fileEntryTypeId");
116
117 if (fileEntryTypeId > 0) {
118 fileEntryType = DLFileEntryTypeServiceUtil.getFileEntryType(
119 fileEntryTypeId);
120
121 renderRequest.setAttribute(
122 WebKeys.DOCUMENT_LIBRARY_FILE_ENTRY_TYPE, fileEntryType);
123
124 DDMStructure ddmStructure =
125 DDMStructureLocalServiceUtil.fetchStructure(
126 fileEntryType.getGroupId(), "auto_" + fileEntryTypeId);
127
128 renderRequest.setAttribute(
129 WebKeys.DYNAMIC_DATA_MAPPING_STRUCTURE, ddmStructure);
130 }
131 }
132 catch (Exception e) {
133 if (e instanceof NoSuchFileEntryTypeException ||
134 e instanceof PrincipalException) {
135
136 SessionErrors.add(renderRequest, e.getClass().getName());
137
138 return mapping.findForward("portlet.document_library.error");
139 }
140 else {
141 throw e;
142 }
143 }
144
145 return mapping.findForward(
146 getForward(
147 renderRequest,
148 "portlet.document_library.edit_file_entry_type"));
149 }
150
151 protected void deleteFileEntryType(
152 ActionRequest actionRequest, ActionResponse actionResponse)
153 throws Exception {
154
155 long fileEntryTypeId = ParamUtil.getLong(
156 actionRequest, "fileEntryTypeId");
157
158 DLFileEntryTypeServiceUtil.deleteFileEntryType(fileEntryTypeId);
159 }
160
161 protected long[] getLongArray(PortletRequest portletRequest, String name) {
162 String value = portletRequest.getParameter(name);
163
164 if (value == null) {
165 return null;
166 }
167
168 return StringUtil.split(GetterUtil.getString(value), 0L);
169 }
170
171 protected void updateFileEntryType(
172 ActionRequest actionRequest, ActionResponse actionResponse)
173 throws Exception {
174
175 ThemeDisplay themeDisplay = (ThemeDisplay)actionRequest.getAttribute(
176 WebKeys.THEME_DISPLAY);
177
178 long fileEntryTypeId = ParamUtil.getLong(
179 actionRequest, "fileEntryTypeId");
180
181 String name = ParamUtil.getString(actionRequest, "name");
182 String description = ParamUtil.getString(actionRequest, "description");
183 long[] ddmStructureIds = getLongArray(
184 actionRequest, "ddmStructuresSearchContainerPrimaryKeys");
185
186 ServiceContext serviceContext = ServiceContextFactory.getInstance(
187 DLFileEntryType.class.getName(), actionRequest);
188
189 if (fileEntryTypeId <= 0) {
190
191
192
193 long groupId = themeDisplay.getScopeGroupId();
194
195 Group scopeGroup = GroupLocalServiceUtil.getGroup(groupId);
196
197 if (scopeGroup.isLayout()) {
198 groupId = scopeGroup.getParentGroupId();
199 }
200
201 DLFileEntryTypeServiceUtil.addFileEntryType(
202 groupId, name, description, ddmStructureIds, serviceContext);
203 }
204 else {
205
206
207
208 DLFileEntryTypeServiceUtil.updateFileEntryType(
209 fileEntryTypeId, name, description, ddmStructureIds,
210 serviceContext);
211 }
212 }
213
214 }