001
014
015 package com.liferay.portlet.documentlibrary.action;
016
017 import com.liferay.portal.DuplicateLockException;
018 import com.liferay.portal.kernel.exception.PortalException;
019 import com.liferay.portal.kernel.json.JSONArray;
020 import com.liferay.portal.kernel.json.JSONFactoryUtil;
021 import com.liferay.portal.kernel.json.JSONObject;
022 import com.liferay.portal.kernel.language.LanguageUtil;
023 import com.liferay.portal.kernel.portlet.LiferayWindowState;
024 import com.liferay.portal.kernel.repository.model.FileEntry;
025 import com.liferay.portal.kernel.repository.model.Folder;
026 import com.liferay.portal.kernel.servlet.ServletResponseConstants;
027 import com.liferay.portal.kernel.servlet.SessionErrors;
028 import com.liferay.portal.kernel.upload.UploadException;
029 import com.liferay.portal.kernel.upload.UploadPortletRequest;
030 import com.liferay.portal.kernel.util.Constants;
031 import com.liferay.portal.kernel.util.FileUtil;
032 import com.liferay.portal.kernel.util.KeyValuePair;
033 import com.liferay.portal.kernel.util.MimeTypesUtil;
034 import com.liferay.portal.kernel.util.ParamUtil;
035 import com.liferay.portal.kernel.util.PropsKeys;
036 import com.liferay.portal.kernel.util.StreamUtil;
037 import com.liferay.portal.kernel.util.StringPool;
038 import com.liferay.portal.kernel.util.StringUtil;
039 import com.liferay.portal.kernel.util.TempFileUtil;
040 import com.liferay.portal.kernel.util.Validator;
041 import com.liferay.portal.security.auth.PrincipalException;
042 import com.liferay.portal.service.ServiceContext;
043 import com.liferay.portal.service.ServiceContextFactory;
044 import com.liferay.portal.struts.ActionConstants;
045 import com.liferay.portal.struts.PortletAction;
046 import com.liferay.portal.theme.ThemeDisplay;
047 import com.liferay.portal.util.PortalUtil;
048 import com.liferay.portal.util.PortletKeys;
049 import com.liferay.portal.util.PrefsPropsUtil;
050 import com.liferay.portal.util.WebKeys;
051 import com.liferay.portlet.PortletPreferencesFactoryUtil;
052 import com.liferay.portlet.asset.AssetCategoryException;
053 import com.liferay.portlet.asset.AssetTagException;
054 import com.liferay.portlet.asset.model.AssetVocabulary;
055 import com.liferay.portlet.assetpublisher.util.AssetPublisherUtil;
056 import com.liferay.portlet.documentlibrary.DuplicateFileException;
057 import com.liferay.portlet.documentlibrary.DuplicateFolderNameException;
058 import com.liferay.portlet.documentlibrary.FileExtensionException;
059 import com.liferay.portlet.documentlibrary.FileMimeTypeException;
060 import com.liferay.portlet.documentlibrary.FileNameException;
061 import com.liferay.portlet.documentlibrary.FileSizeException;
062 import com.liferay.portlet.documentlibrary.InvalidFileEntryTypeException;
063 import com.liferay.portlet.documentlibrary.NoSuchFileEntryException;
064 import com.liferay.portlet.documentlibrary.NoSuchFileVersionException;
065 import com.liferay.portlet.documentlibrary.NoSuchFolderException;
066 import com.liferay.portlet.documentlibrary.SourceFileNameException;
067 import com.liferay.portlet.documentlibrary.model.DLFileEntry;
068 import com.liferay.portlet.documentlibrary.service.DLAppServiceUtil;
069 import com.liferay.portlet.documentlibrary.util.DLUtil;
070
071 import java.io.File;
072 import java.io.InputStream;
073
074 import java.util.ArrayList;
075 import java.util.Arrays;
076 import java.util.List;
077
078 import javax.portlet.ActionRequest;
079 import javax.portlet.ActionResponse;
080 import javax.portlet.PortletConfig;
081 import javax.portlet.PortletContext;
082 import javax.portlet.PortletPreferences;
083 import javax.portlet.PortletRequestDispatcher;
084 import javax.portlet.RenderRequest;
085 import javax.portlet.RenderResponse;
086 import javax.portlet.ResourceRequest;
087 import javax.portlet.ResourceResponse;
088 import javax.portlet.WindowState;
089
090 import javax.servlet.http.HttpServletResponse;
091
092 import org.apache.struts.action.ActionForm;
093 import org.apache.struts.action.ActionForward;
094 import org.apache.struts.action.ActionMapping;
095
096
101 public class EditFileEntryAction extends PortletAction {
102
103 @Override
104 public void processAction(
105 ActionMapping mapping, ActionForm form, PortletConfig portletConfig,
106 ActionRequest actionRequest, ActionResponse actionResponse)
107 throws Exception {
108
109 String cmd = ParamUtil.getString(actionRequest, Constants.CMD);
110
111 try {
112 if (Validator.isNull(cmd)) {
113 UploadException uploadException =
114 (UploadException)actionRequest.getAttribute(
115 WebKeys.UPLOAD_EXCEPTION);
116
117 if (uploadException != null) {
118 if (uploadException.isExceededSizeLimit()) {
119 throw new FileSizeException(uploadException.getCause());
120 }
121
122 throw new PortalException(uploadException.getCause());
123 }
124 }
125 else if (cmd.equals(Constants.ADD) || cmd.equals(Constants.UPDATE)
126 || cmd.equals(Constants.UPDATE_AND_CHECKIN)) {
127
128 updateFileEntry(portletConfig, actionRequest, actionResponse);
129 }
130 else if (cmd.equals(Constants.ADD_MULTIPLE)) {
131 addMultipleFileEntries(actionRequest, actionResponse);
132 }
133 else if (cmd.equals(Constants.ADD_TEMP)) {
134 addTempFileEntry(actionRequest);
135 }
136 else if (cmd.equals(Constants.DELETE)) {
137 deleteFileEntries(actionRequest);
138 }
139 else if (cmd.equals(Constants.DELETE_TEMP)) {
140 deleteTempFileEntry(actionRequest, actionResponse);
141 }
142 else if (cmd.equals(Constants.CANCEL_CHECKOUT)) {
143 cancelFileEntriesCheckOut(actionRequest);
144 }
145 else if (cmd.equals(Constants.CHECKIN)) {
146 checkInFileEntries(actionRequest);
147 }
148 else if (cmd.equals(Constants.CHECKOUT)) {
149 checkOutFileEntries(actionRequest);
150 }
151 else if (cmd.equals(Constants.MOVE)) {
152 moveFileEntries(actionRequest);
153 }
154 else if (cmd.equals(Constants.REVERT)) {
155 revertFileEntry(actionRequest);
156 }
157
158 WindowState windowState = actionRequest.getWindowState();
159
160 if (cmd.equals(Constants.ADD_TEMP) ||
161 cmd.equals(Constants.DELETE_TEMP)) {
162
163 setForward(actionRequest, ActionConstants.COMMON_NULL);
164 }
165 else if (cmd.equals(Constants.PREVIEW)) {
166 }
167 else if (!windowState.equals(LiferayWindowState.POP_UP)) {
168 sendRedirect(actionRequest, actionResponse);
169 }
170 else {
171 String redirect = PortalUtil.escapeRedirect(
172 ParamUtil.getString(actionRequest, "redirect"));
173
174 if (Validator.isNotNull(redirect)) {
175 actionResponse.sendRedirect(redirect);
176 }
177 }
178 }
179 catch (Exception e) {
180 if (e instanceof DuplicateLockException ||
181 e instanceof NoSuchFileEntryException ||
182 e instanceof PrincipalException) {
183
184 if (e instanceof DuplicateLockException) {
185 DuplicateLockException dle = (DuplicateLockException)e;
186
187 SessionErrors.add(
188 actionRequest, dle.getClass().getName(), dle.getLock());
189 }
190 else {
191 SessionErrors.add(actionRequest, e.getClass().getName());
192 }
193
194 setForward(actionRequest, "portlet.document_library.error");
195 }
196 else if (e instanceof DuplicateFileException ||
197 e instanceof DuplicateFolderNameException ||
198 e instanceof FileExtensionException ||
199 e instanceof FileMimeTypeException ||
200 e instanceof FileNameException ||
201 e instanceof FileSizeException ||
202 e instanceof NoSuchFolderException ||
203 e instanceof SourceFileNameException) {
204
205 if (!cmd.equals(Constants.ADD_MULTIPLE) &&
206 !cmd.equals(Constants.ADD_TEMP)) {
207
208 SessionErrors.add(actionRequest, e.getClass().getName());
209
210 return;
211 }
212
213 if (e instanceof DuplicateFileException) {
214 HttpServletResponse response =
215 PortalUtil.getHttpServletResponse(actionResponse);
216
217 response.setStatus(
218 ServletResponseConstants.SC_DUPLICATE_FILE_EXCEPTION);
219 }
220 else if (e instanceof FileExtensionException) {
221 HttpServletResponse response =
222 PortalUtil.getHttpServletResponse(actionResponse);
223
224 response.setStatus(
225 ServletResponseConstants.SC_FILE_EXTENSION_EXCEPTION);
226 }
227 else if (e instanceof FileNameException) {
228 HttpServletResponse response =
229 PortalUtil.getHttpServletResponse(actionResponse);
230
231 response.setStatus(
232 ServletResponseConstants.SC_FILE_NAME_EXCEPTION);
233 }
234 else if (e instanceof FileSizeException) {
235 HttpServletResponse response =
236 PortalUtil.getHttpServletResponse(actionResponse);
237
238 response.setStatus(
239 ServletResponseConstants.SC_FILE_SIZE_EXCEPTION);
240 }
241
242 SessionErrors.add(actionRequest, e.getClass().getName());
243 }
244 else if (e instanceof AssetCategoryException ||
245 e instanceof AssetTagException) {
246
247 SessionErrors.add(actionRequest, e.getClass().getName(), e);
248 }
249 else {
250 throw e;
251 }
252 }
253 }
254
255 @Override
256 public ActionForward render(
257 ActionMapping mapping, ActionForm form, PortletConfig portletConfig,
258 RenderRequest renderRequest, RenderResponse renderResponse)
259 throws Exception {
260
261 try {
262 ActionUtil.getFileEntry(renderRequest);
263 }
264 catch (Exception e) {
265 if (e instanceof NoSuchFileEntryException ||
266 e instanceof NoSuchFileVersionException ||
267 e instanceof PrincipalException) {
268
269 SessionErrors.add(renderRequest, e.getClass().getName());
270
271 return mapping.findForward("portlet.document_library.error");
272 }
273 else {
274 throw e;
275 }
276 }
277
278 String forward = "portlet.document_library.edit_file_entry";
279
280 return mapping.findForward(getForward(renderRequest, forward));
281 }
282
283 @Override
284 public void serveResource(
285 ActionMapping mapping, ActionForm form, PortletConfig portletConfig,
286 ResourceRequest resourceRequest, ResourceResponse resourceResponse)
287 throws Exception {
288
289 PortletContext portletContext = portletConfig.getPortletContext();
290
291 PortletRequestDispatcher portletRequestDispatcher =
292 portletContext.getRequestDispatcher(
293 "/html/portlet/document_library/" +
294 "upload_multiple_file_entries_resources.jsp");
295
296 portletRequestDispatcher.include(resourceRequest, resourceResponse);
297 }
298
299 protected void addMultipleFileEntries(
300 ActionRequest actionRequest, ActionResponse actionResponse)
301 throws Exception {
302
303 List<String> validFileNames = new ArrayList<String>();
304 List<KeyValuePair> invalidFileNameKVPs = new ArrayList<KeyValuePair>();
305
306 String[] selectedFileNames = ParamUtil.getParameterValues(
307 actionRequest, "selectedFileName");
308
309 for (String selectedFileName : selectedFileNames) {
310 addMultipleFileEntries(
311 actionRequest, actionResponse, selectedFileName, validFileNames,
312 invalidFileNameKVPs);
313 }
314
315 JSONArray jsonArray = JSONFactoryUtil.createJSONArray();
316
317 for (String validFileName : validFileNames) {
318 JSONObject jsonObject = JSONFactoryUtil.createJSONObject();
319
320 jsonObject.put("added", Boolean.TRUE);
321 jsonObject.put("fileName", validFileName);
322
323 jsonArray.put(jsonObject);
324 }
325
326 for (KeyValuePair invalidFileNameKVP : invalidFileNameKVPs) {
327 String fileName = invalidFileNameKVP.getKey();
328 String errorMessage = invalidFileNameKVP.getValue();
329
330 JSONObject jsonObject = JSONFactoryUtil.createJSONObject();
331
332 jsonObject.put("added", Boolean.FALSE);
333 jsonObject.put("errorMessage", errorMessage);
334 jsonObject.put("fileName", fileName);
335
336 jsonArray.put(jsonObject);
337 }
338
339 writeJSON(actionRequest, actionResponse, jsonArray);
340 }
341
342 protected void addMultipleFileEntries(
343 ActionRequest actionRequest, ActionResponse actionResponse,
344 String selectedFileName, List<String> validFileNames,
345 List<KeyValuePair> invalidFileNameKVPs)
346 throws Exception {
347
348 ThemeDisplay themeDisplay = (ThemeDisplay)actionRequest.getAttribute(
349 WebKeys.THEME_DISPLAY);
350
351 long repositoryId = ParamUtil.getLong(actionRequest, "repositoryId");
352 long folderId = ParamUtil.getLong(actionRequest, "folderId");
353 String contentType = MimeTypesUtil.getContentType(selectedFileName);
354 String description = ParamUtil.getString(actionRequest, "description");
355 String changeLog = ParamUtil.getString(actionRequest, "changeLog");
356
357 File file = null;
358
359 try {
360 file = TempFileUtil.getTempFile(
361 themeDisplay.getUserId(), selectedFileName, _TEMP_FOLDER_NAME);
362
363 ServiceContext serviceContext = ServiceContextFactory.getInstance(
364 DLFileEntry.class.getName(), actionRequest);
365
366 FileEntry fileEntry = DLAppServiceUtil.addFileEntry(
367 repositoryId, folderId, selectedFileName, contentType,
368 selectedFileName, description, changeLog, file, serviceContext);
369
370 AssetPublisherUtil.addAndStoreSelection(
371 actionRequest, DLFileEntry.class.getName(),
372 fileEntry.getFileEntryId(), -1);
373
374 AssetPublisherUtil.addRecentFolderId(
375 actionRequest, DLFileEntry.class.getName(), folderId);
376
377 validFileNames.add(selectedFileName);
378
379 return;
380 }
381 catch (Exception e) {
382 String errorMessage = getAddMultipleFileEntriesErrorMessage(
383 themeDisplay, e);
384
385 invalidFileNameKVPs.add(
386 new KeyValuePair(selectedFileName, errorMessage));
387 }
388 finally {
389 FileUtil.delete(file);
390 }
391 }
392
393 protected void addTempFileEntry(ActionRequest actionRequest)
394 throws Exception {
395
396 UploadPortletRequest uploadPortletRequest =
397 PortalUtil.getUploadPortletRequest(actionRequest);
398
399 ThemeDisplay themeDisplay = (ThemeDisplay)actionRequest.getAttribute(
400 WebKeys.THEME_DISPLAY);
401
402 long folderId = ParamUtil.getLong(uploadPortletRequest, "folderId");
403 String sourceFileName = uploadPortletRequest.getFileName("file");
404
405 InputStream inputStream = null;
406
407 try {
408 inputStream = uploadPortletRequest.getFileAsStream("file");
409
410 DLAppServiceUtil.addTempFileEntry(
411 themeDisplay.getScopeGroupId(), folderId, sourceFileName,
412 _TEMP_FOLDER_NAME, inputStream);
413 }
414 finally {
415 StreamUtil.cleanUp(inputStream);
416 }
417 }
418
419 protected void cancelFileEntriesCheckOut(ActionRequest actionRequest)
420 throws Exception {
421
422 long fileEntryId = ParamUtil.getLong(actionRequest, "fileEntryId");
423
424 if (fileEntryId > 0) {
425 DLAppServiceUtil.cancelCheckOut(fileEntryId);
426 }
427 else {
428 long[] fileEntryIds = StringUtil.split(
429 ParamUtil.getString(actionRequest, "fileEntryIds"), 0L);
430
431 for (int i = 0; i < fileEntryIds.length; i++) {
432 DLAppServiceUtil.cancelCheckOut(fileEntryIds[i]);
433 }
434 }
435 }
436
437 protected void checkInFileEntries(ActionRequest actionRequest)
438 throws Exception {
439
440 long fileEntryId = ParamUtil.getLong(actionRequest, "fileEntryId");
441
442 ServiceContext serviceContext = ServiceContextFactory.getInstance(
443 actionRequest);
444
445 if (fileEntryId > 0) {
446 DLAppServiceUtil.checkInFileEntry(
447 fileEntryId, false, StringPool.BLANK, serviceContext);
448 }
449 else {
450 long[] fileEntryIds = StringUtil.split(
451 ParamUtil.getString(actionRequest, "fileEntryIds"), 0L);
452
453 for (int i = 0; i < fileEntryIds.length; i++) {
454 DLAppServiceUtil.checkInFileEntry(
455 fileEntryIds[i], false, StringPool.BLANK, serviceContext);
456 }
457 }
458 }
459
460 protected void checkOutFileEntries(ActionRequest actionRequest)
461 throws Exception {
462
463 long fileEntryId = ParamUtil.getLong(actionRequest, "fileEntryId");
464
465 ServiceContext serviceContext = ServiceContextFactory.getInstance(
466 actionRequest);
467
468 if (fileEntryId > 0) {
469 DLAppServiceUtil.checkOutFileEntry(fileEntryId, serviceContext);
470 }
471 else {
472 long[] fileEntryIds = StringUtil.split(
473 ParamUtil.getString(actionRequest, "fileEntryIds"), 0L);
474
475 for (int i = 0; i < fileEntryIds.length; i++) {
476 DLAppServiceUtil.checkOutFileEntry(
477 fileEntryIds[i], serviceContext);
478 }
479 }
480 }
481
482 protected void deleteFileEntries(ActionRequest actionRequest)
483 throws Exception {
484
485 long fileEntryId = ParamUtil.getLong(actionRequest, "fileEntryId");
486
487 if (fileEntryId > 0) {
488 DLAppServiceUtil.deleteFileEntry(fileEntryId);
489 }
490 else {
491 long[] deleteFileEntryIds = StringUtil.split(
492 ParamUtil.getString(actionRequest, "deleteEntryIds"), 0L);
493
494 for (int i = 0; i < deleteFileEntryIds.length; i++) {
495 DLAppServiceUtil.deleteFileEntry(deleteFileEntryIds[i]);
496 }
497 }
498 }
499
500 protected void deleteTempFileEntry(
501 ActionRequest actionRequest, ActionResponse actionResponse)
502 throws Exception {
503
504 ThemeDisplay themeDisplay = (ThemeDisplay)actionRequest.getAttribute(
505 WebKeys.THEME_DISPLAY);
506
507 long folderId = ParamUtil.getLong(actionRequest, "folderId");
508 String fileName = ParamUtil.getString(actionRequest, "fileName");
509
510 JSONObject jsonObject = JSONFactoryUtil.createJSONObject();
511
512 try {
513 DLAppServiceUtil.deleteTempFileEntry(
514 themeDisplay.getScopeGroupId(), folderId, fileName,
515 _TEMP_FOLDER_NAME);
516
517 jsonObject.put("deleted", Boolean.TRUE);
518 }
519 catch (Exception e) {
520 String errorMessage = LanguageUtil.get(
521 themeDisplay.getLocale(),
522 "an-unexpected-error-occurred-while-deleting-the-file");
523
524 jsonObject.put("deleted", Boolean.FALSE);
525 jsonObject.put("errorMessage", errorMessage);
526 }
527
528 writeJSON(actionRequest, actionResponse, jsonObject);
529 }
530
531 protected String getAddMultipleFileEntriesErrorMessage(
532 ThemeDisplay themeDisplay, Exception e)
533 throws Exception {
534
535 String errorMessage = null;
536
537 if (e instanceof AssetCategoryException) {
538 AssetCategoryException ace = (AssetCategoryException)e;
539
540 AssetVocabulary assetVocabulary = ace.getVocabulary();
541
542 String vocabularyTitle = StringPool.BLANK;
543
544 if (assetVocabulary != null) {
545 vocabularyTitle = assetVocabulary.getTitle(
546 themeDisplay.getLocale());
547 }
548
549 if (ace.getType() == AssetCategoryException.AT_LEAST_ONE_CATEGORY) {
550 errorMessage = LanguageUtil.format(
551 themeDisplay.getLocale(),
552 "please-select-at-least-one-category-for-x",
553 vocabularyTitle);
554 }
555 else if (ace.getType() ==
556 AssetCategoryException.TOO_MANY_CATEGORIES) {
557
558 errorMessage = LanguageUtil.format(
559 themeDisplay.getLocale(),
560 "you-cannot-select-more-than-one-category-for-x",
561 vocabularyTitle);
562 }
563 }
564 else if (e instanceof DuplicateFileException) {
565 errorMessage = LanguageUtil.get(
566 themeDisplay.getLocale(),
567 "the-folder-you-selected-already-has-an-entry-with-this-name." +
568 "-please-select-a-different-folder");
569 }
570 else if (e instanceof FileExtensionException) {
571 errorMessage = LanguageUtil.format(
572 themeDisplay.getLocale(),
573 "please-enter-a-file-with-a-valid-extension-x",
574 StringUtil.merge(
575 PrefsPropsUtil.getStringArray(
576 PropsKeys.DL_FILE_EXTENSIONS, StringPool.COMMA)));
577 }
578 else if (e instanceof FileNameException) {
579 errorMessage = LanguageUtil.get(
580 themeDisplay.getLocale(),
581 "please-enter-a-file-with-a-valid-file-name");
582 }
583 else if (e instanceof FileSizeException) {
584 long maxSizeMB = PrefsPropsUtil.getLong(
585 PropsKeys.DL_FILE_MAX_SIZE) / 1024 / 1024;
586
587 errorMessage = LanguageUtil.format(
588 themeDisplay.getLocale(),
589 "file-size-is-larger-than-x-megabytes", maxSizeMB);
590 }
591 else if (e instanceof InvalidFileEntryTypeException) {
592 errorMessage = LanguageUtil.get(
593 themeDisplay.getLocale(),
594 "the-document-type-you-selected-is-not-valid-for-this-folder");
595 }
596 else {
597 errorMessage = LanguageUtil.get(
598 themeDisplay.getLocale(),
599 "an-unexpected-error-occurred-while-saving-your-document");
600 }
601
602 return errorMessage;
603 }
604
605 protected void moveFileEntries(ActionRequest actionRequest)
606 throws Exception {
607
608 long fileEntryId = ParamUtil.getLong(actionRequest, "fileEntryId");
609 long newFolderId = ParamUtil.getLong(actionRequest, "newFolderId");
610
611 ServiceContext serviceContext = ServiceContextFactory.getInstance(
612 DLFileEntry.class.getName(), actionRequest);
613
614 if (fileEntryId > 0) {
615 DLAppServiceUtil.moveFileEntry(
616 fileEntryId, newFolderId, serviceContext);
617 }
618 else {
619 long[] fileEntryIds = StringUtil.split(
620 ParamUtil.getString(actionRequest, "fileEntryIds"), 0L);
621
622 for (int i = 0; i < fileEntryIds.length; i++) {
623 DLAppServiceUtil.moveFileEntry(
624 fileEntryIds[i], newFolderId, serviceContext);
625 }
626 }
627 }
628
629 protected void revertFileEntry(ActionRequest actionRequest)
630 throws Exception {
631
632 long fileEntryId = ParamUtil.getLong(actionRequest, "fileEntryId");
633 String version = ParamUtil.getString(actionRequest, "version");
634
635 ServiceContext serviceContext = ServiceContextFactory.getInstance(
636 DLFileEntry.class.getName(), actionRequest);
637
638 DLAppServiceUtil.revertFileEntry(fileEntryId, version, serviceContext);
639 }
640
641 protected void updateFileEntry(
642 PortletConfig portletConfig, ActionRequest actionRequest,
643 ActionResponse actionResponse)
644 throws Exception {
645
646 UploadPortletRequest uploadPortletRequest =
647 PortalUtil.getUploadPortletRequest(actionRequest);
648
649 ThemeDisplay themeDisplay = (ThemeDisplay)actionRequest.getAttribute(
650 WebKeys.THEME_DISPLAY);
651
652 String cmd = ParamUtil.getString(uploadPortletRequest, Constants.CMD);
653
654 long fileEntryId = ParamUtil.getLong(
655 uploadPortletRequest, "fileEntryId");
656
657 long repositoryId = ParamUtil.getLong(
658 uploadPortletRequest, "repositoryId");
659 long folderId = ParamUtil.getLong(uploadPortletRequest, "folderId");
660 String sourceFileName = uploadPortletRequest.getFileName("file");
661 String title = ParamUtil.getString(uploadPortletRequest, "title");
662 String description = ParamUtil.getString(
663 uploadPortletRequest, "description");
664 String changeLog = ParamUtil.getString(
665 uploadPortletRequest, "changeLog");
666 boolean majorVersion = ParamUtil.getBoolean(
667 uploadPortletRequest, "majorVersion");
668
669 if (folderId > 0) {
670 Folder folder = DLAppServiceUtil.getFolder(folderId);
671
672 if (folder.getGroupId() != themeDisplay.getScopeGroupId()) {
673 throw new NoSuchFolderException();
674 }
675 }
676
677 InputStream inputStream = null;
678
679 try {
680 String contentType = uploadPortletRequest.getContentType("file");
681
682 long size = uploadPortletRequest.getSize("file");
683
684 if (cmd.equals(Constants.ADD) && (size == 0)) {
685 contentType = MimeTypesUtil.getContentType(title);
686 }
687
688 if (cmd.equals(Constants.ADD) || (size > 0)) {
689 String portletName = portletConfig.getPortletName();
690
691 if (portletName.equals(PortletKeys.MEDIA_GALLERY_DISPLAY)) {
692 String portletResource = ParamUtil.getString(
693 actionRequest, "portletResource");
694
695 PortletPreferences portletPreferences = null;
696
697 if (Validator.isNotNull(portletResource)) {
698 PortletPreferencesFactoryUtil.getPortletSetup(
699 actionRequest, portletResource);
700 }
701 else {
702 portletPreferences = actionRequest.getPreferences();
703 }
704
705 String[] mimeTypes = DLUtil.getMediaGalleryMimeTypes(
706 portletPreferences, actionRequest);
707
708 if (Arrays.binarySearch(mimeTypes, contentType) < 0) {
709 throw new FileMimeTypeException(contentType);
710 }
711 }
712 }
713
714 inputStream = uploadPortletRequest.getFileAsStream("file");
715
716 ServiceContext serviceContext = ServiceContextFactory.getInstance(
717 DLFileEntry.class.getName(), uploadPortletRequest);
718
719 FileEntry fileEntry = null;
720
721 if (cmd.equals(Constants.ADD)) {
722
723
724
725 fileEntry = DLAppServiceUtil.addFileEntry(
726 repositoryId, folderId, sourceFileName, contentType, title,
727 description, changeLog, inputStream, size, serviceContext);
728
729 AssetPublisherUtil.addAndStoreSelection(
730 actionRequest, DLFileEntry.class.getName(),
731 fileEntry.getFileEntryId(), -1);
732 }
733 else if (cmd.equals(Constants.UPDATE_AND_CHECKIN)) {
734
735
736
737 fileEntry = DLAppServiceUtil.updateFileEntryAndCheckIn(
738 fileEntryId, sourceFileName, contentType, title,
739 description, changeLog, majorVersion, inputStream, size,
740 serviceContext);
741 }
742 else {
743
744
745
746 fileEntry = DLAppServiceUtil.updateFileEntry(
747 fileEntryId, sourceFileName, contentType, title,
748 description, changeLog, majorVersion, inputStream, size,
749 serviceContext);
750 }
751
752 AssetPublisherUtil.addRecentFolderId(
753 actionRequest, DLFileEntry.class.getName(), folderId);
754 }
755 finally {
756 StreamUtil.cleanUp(inputStream);
757 }
758 }
759
760 private static final String _TEMP_FOLDER_NAME =
761 EditFileEntryAction.class.getName();
762
763 }