001    /**
002     * Copyright (c) 2000-present Liferay, Inc. All rights reserved.
003     *
004     * This library is free software; you can redistribute it and/or modify it under
005     * the terms of the GNU Lesser General Public License as published by the Free
006     * Software Foundation; either version 2.1 of the License, or (at your option)
007     * any later version.
008     *
009     * This library is distributed in the hope that it will be useful, but WITHOUT
010     * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
011     * FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more
012     * details.
013     */
014    
015    package com.liferay.portlet.documentlibrary.display.context.logic;
016    
017    import com.liferay.portal.kernel.language.LanguageUtil;
018    import com.liferay.portal.kernel.util.ArrayUtil;
019    import com.liferay.portal.kernel.util.KeyValuePair;
020    import com.liferay.portal.kernel.util.KeyValuePairComparator;
021    import com.liferay.portal.kernel.util.ListUtil;
022    import com.liferay.portal.kernel.util.SetUtil;
023    import com.liferay.portal.kernel.util.StringUtil;
024    import com.liferay.portal.theme.ThemeDisplay;
025    import com.liferay.portal.util.PortletKeys;
026    import com.liferay.portal.util.PropsValues;
027    import com.liferay.portlet.documentlibrary.DLPortletInstanceSettings;
028    import com.liferay.portlet.documentlibrary.display.context.util.DLRequestHelper;
029    import com.liferay.portlet.documentlibrary.util.DLUtil;
030    
031    import java.util.ArrayList;
032    import java.util.Arrays;
033    import java.util.List;
034    import java.util.Set;
035    
036    /**
037     * @author Iv??n Zaera
038     */
039    public class DLPortletInstanceSettingsHelper {
040    
041            public DLPortletInstanceSettingsHelper(DLRequestHelper dlRequestHelper) {
042                    _dlRequestHelper = dlRequestHelper;
043            }
044    
045            public List<KeyValuePair> getAvailableDisplayViews() {
046                    if (_availableDisplayViews == null) {
047                            _populateDisplayViews();
048                    }
049    
050                    return _availableDisplayViews;
051            }
052    
053            public List<KeyValuePair> getAvailableEntryColumns() {
054                    if (_availableEntryColumns == null) {
055                            _populateEntryColumns();
056                    }
057    
058                    return _availableEntryColumns;
059            }
060    
061            public List<KeyValuePair> getAvailableFileEntryColumns() {
062                    if (_availableFileEntryColumns == null) {
063                            _populateFileEntryColumns();
064                    }
065    
066                    return _availableFileEntryColumns;
067            }
068    
069            public List<KeyValuePair> getAvailableFolderColumns() {
070                    if (_availableFolderColumns == null) {
071                            _populateFolderColumns();
072                    }
073    
074                    return _availableFolderColumns;
075            }
076    
077            public List<KeyValuePair> getAvailableMimeTypes() {
078                    if (_availableMimeTypes == null) {
079                            _populateMimeTypes();
080                    }
081    
082                    return _availableMimeTypes;
083            }
084    
085            public List<KeyValuePair> getCurrentDisplayViews() {
086                    if (_currentDisplayViews == null) {
087                            _populateDisplayViews();
088                    }
089    
090                    return _currentDisplayViews;
091            }
092    
093            public List<KeyValuePair> getCurrentEntryColumns() {
094                    if (_currentEntryColumns == null) {
095                            _populateEntryColumns();
096                    }
097    
098                    return _currentEntryColumns;
099            }
100    
101            public List<KeyValuePair> getCurrentFileEntryColumns() {
102                    if (_currentFileEntryColumns == null) {
103                            _populateFileEntryColumns();
104                    }
105    
106                    return _currentFileEntryColumns;
107            }
108    
109            public List<KeyValuePair> getCurrentFolderColumns() {
110                    if (_currentFolderColumns == null) {
111                            _populateFolderColumns();
112                    }
113    
114                    return _currentFolderColumns;
115            }
116    
117            public List<KeyValuePair> getCurrentMimeTypes() {
118                    if (_currentMimeTypes == null) {
119                            _populateMimeTypes();
120                    }
121    
122                    return _currentMimeTypes;
123            }
124    
125            public String[] getEntryColumns() {
126                    DLPortletInstanceSettings dlPortletInstanceSettings =
127                            _dlRequestHelper.getDLPortletInstanceSettings();
128    
129                    String[] entryColumns = dlPortletInstanceSettings.getEntryColumns();
130    
131                    String portletName = _dlRequestHelper.getPortletName();
132    
133                    if (!isShowActions()) {
134                            entryColumns = ArrayUtil.remove(entryColumns, "action");
135                    }
136                    else if (!portletName.equals(PortletKeys.DOCUMENT_LIBRARY) &&
137                                     !portletName.equals(PortletKeys.DOCUMENT_LIBRARY_ADMIN) &&
138                                     !ArrayUtil.contains(entryColumns, "action")) {
139    
140                            entryColumns = ArrayUtil.append(entryColumns, "action");
141                    }
142    
143                    return entryColumns;
144            }
145    
146            public String[] getFileEntryColumns() {
147                    DLPortletInstanceSettings dlPortletInstanceSettings =
148                            _dlRequestHelper.getDLPortletInstanceSettings();
149    
150                    String[] fileEntryColumns =
151                            dlPortletInstanceSettings.getFileEntryColumns();
152    
153                    if (!isShowActions()) {
154                            fileEntryColumns = ArrayUtil.remove(fileEntryColumns, "action");
155                    }
156    
157                    return fileEntryColumns;
158            }
159    
160            public String[] getFolderColumns() {
161                    DLPortletInstanceSettings dlPortletInstanceSettings =
162                            _dlRequestHelper.getDLPortletInstanceSettings();
163    
164                    String[] folderColumns = dlPortletInstanceSettings.getFolderColumns();
165    
166                    if (!isShowActions()) {
167                            folderColumns = ArrayUtil.remove(folderColumns, "action");
168                    }
169    
170                    return folderColumns;
171            }
172    
173            public boolean isFolderMenuVisible() {
174                    String portletName = _dlRequestHelper.getPortletName();
175    
176                    if (portletName.equals(PortletKeys.DOCUMENT_LIBRARY) ||
177                            portletName.equals(PortletKeys.DOCUMENT_LIBRARY_ADMIN)) {
178    
179                            return true;
180                    }
181    
182                    DLPortletInstanceSettings dlPortletInstanceSettings =
183                            _dlRequestHelper.getDLPortletInstanceSettings();
184    
185                    return dlPortletInstanceSettings.isShowFolderMenu();
186            }
187    
188            public boolean isShowActions() {
189                    String portletName = _dlRequestHelper.getPortletName();
190                    String portletResource = _dlRequestHelper.getPortletResource();
191    
192                    if (portletName.equals(PortletKeys.DOCUMENT_LIBRARY) ||
193                            portletName.equals(PortletKeys.DOCUMENT_LIBRARY_ADMIN) ||
194                            portletResource.equals(PortletKeys.DOCUMENT_LIBRARY) ||
195                            portletResource.equals(PortletKeys.DOCUMENT_LIBRARY_ADMIN)) {
196    
197                            return true;
198                    }
199    
200                    DLPortletInstanceSettings dlPortletInstanceSettings =
201                            _dlRequestHelper.getDLPortletInstanceSettings();
202    
203                    return dlPortletInstanceSettings.isShowActions();
204            }
205    
206            public boolean isShowTabs() {
207                    String portletName = _dlRequestHelper.getPortletName();
208    
209                    if (portletName.equals(PortletKeys.DOCUMENT_LIBRARY) ||
210                            portletName.equals(PortletKeys.DOCUMENT_LIBRARY_ADMIN)) {
211    
212                            return true;
213                    }
214    
215                    DLPortletInstanceSettings dlPortletInstanceSettings =
216                            _dlRequestHelper.getDLPortletInstanceSettings();
217    
218                    return dlPortletInstanceSettings.isShowTabs();
219            }
220    
221            private String[] _getAllEntryColumns() {
222                    String allEntryColumns = "name,size,status";
223    
224                    if (PropsValues.DL_FILE_ENTRY_BUFFERED_INCREMENT_ENABLED) {
225                            allEntryColumns += ",downloads";
226                    }
227    
228                    if (isShowActions()) {
229                            allEntryColumns += ",action";
230                    }
231    
232                    allEntryColumns += ",modified-date,create-date";
233    
234                    return StringUtil.split(allEntryColumns);
235            }
236    
237            private String[] _getAllFileEntryColumns() {
238                    String allFileEntryColumns = "name,size";
239    
240                    if (PropsValues.DL_FILE_ENTRY_BUFFERED_INCREMENT_ENABLED) {
241                            allFileEntryColumns += ",downloads";
242                    }
243    
244                    allFileEntryColumns += ",locked";
245    
246                    if (isShowActions()) {
247                            allFileEntryColumns += ",action";
248                    }
249    
250                    return StringUtil.split(allFileEntryColumns);
251            }
252    
253            private String[] _getAllFolderColumns() {
254                    String allFolderColumns = "name,num-of-folders,num-of-documents";
255    
256                    if (isShowActions()) {
257                            allFolderColumns += ",action";
258                    }
259    
260                    return StringUtil.split(allFolderColumns);
261            }
262    
263            private void _populateDisplayViews() {
264                    DLPortletInstanceSettings dlPortletInstanceSettings =
265                            _dlRequestHelper.getDLPortletInstanceSettings();
266    
267                    String[] displayViews = dlPortletInstanceSettings.getDisplayViews();
268    
269                    _currentDisplayViews = new ArrayList<>();
270    
271                    for (String displayView : displayViews) {
272                            _currentDisplayViews.add(
273                                    new KeyValuePair(
274                                            displayView,
275                                            LanguageUtil.get(
276                                                    _dlRequestHelper.getLocale(), displayView)));
277                    }
278    
279                    Arrays.sort(displayViews);
280    
281                    _availableDisplayViews = new ArrayList<>();
282    
283                    Set<String> allDisplayViews = SetUtil.fromArray(
284                            PropsValues.DL_DISPLAY_VIEWS);
285    
286                    for (String displayView : allDisplayViews) {
287                            if (Arrays.binarySearch(displayViews, displayView) < 0) {
288                                    _availableDisplayViews.add(
289                                            new KeyValuePair(
290                                                    displayView,
291                                                    LanguageUtil.get(
292                                                            _dlRequestHelper.getLocale(), displayView)));
293                            }
294                    }
295    
296                    _availableDisplayViews = ListUtil.sort(
297                            _availableDisplayViews, new KeyValuePairComparator(false, true));
298            }
299    
300            private void _populateEntryColumns() {
301                    DLPortletInstanceSettings dlPortletInstanceSettings =
302                            _dlRequestHelper.getDLPortletInstanceSettings();
303    
304                    String[] entryColumns = dlPortletInstanceSettings.getEntryColumns();
305    
306                    _currentEntryColumns = new ArrayList<>();
307    
308                    for (String entryColumn : entryColumns) {
309                            _currentEntryColumns.add(
310                                    new KeyValuePair(
311                                            entryColumn,
312                                            LanguageUtil.get(
313                                                    _dlRequestHelper.getLocale(), entryColumn)));
314                    }
315    
316                    Arrays.sort(entryColumns);
317    
318                    _availableEntryColumns = new ArrayList<>();
319    
320                    Set<String> allEntryColumns = SetUtil.fromArray(_getAllEntryColumns());
321    
322                    for (String entryColumn : allEntryColumns) {
323                            if (Arrays.binarySearch(entryColumns, entryColumn) < 0) {
324                                    _availableEntryColumns.add(
325                                            new KeyValuePair(
326                                                    entryColumn,
327                                                    LanguageUtil.get(
328                                                            _dlRequestHelper.getLocale(), entryColumn)));
329                            }
330                    }
331    
332                    _availableEntryColumns = ListUtil.sort(
333                            _availableEntryColumns, new KeyValuePairComparator(false, true));
334            }
335    
336            private void _populateFileEntryColumns() {
337                    DLPortletInstanceSettings dlPortletInstanceSettings =
338                            _dlRequestHelper.getDLPortletInstanceSettings();
339    
340                    String[] fileEntryColumns =
341                            dlPortletInstanceSettings.getFileEntryColumns();
342    
343                    _currentFileEntryColumns = new ArrayList<>();
344    
345                    for (String fileEntryColumn : fileEntryColumns) {
346                            _currentFileEntryColumns.add(
347                                    new KeyValuePair(
348                                            fileEntryColumn,
349                                            LanguageUtil.get(
350                                                    _dlRequestHelper.getLocale(), fileEntryColumn)));
351                    }
352    
353                    _availableFileEntryColumns = new ArrayList<>();
354    
355                    Arrays.sort(fileEntryColumns);
356    
357                    Set<String> allFileEntryColumns = SetUtil.fromArray(
358                            _getAllFileEntryColumns());
359    
360                    for (String fileEntryColumn : allFileEntryColumns) {
361                            if (Arrays.binarySearch(fileEntryColumns, fileEntryColumn) < 0) {
362                                    _availableFileEntryColumns.add(
363                                            new KeyValuePair(
364                                                    fileEntryColumn,
365                                                    LanguageUtil.get(
366                                                            _dlRequestHelper.getLocale(), fileEntryColumn)));
367                            }
368                    }
369    
370                    _availableFileEntryColumns = ListUtil.sort(
371                            _availableFileEntryColumns,
372                            new KeyValuePairComparator(false, true));
373            }
374    
375            private void _populateFolderColumns() {
376                    DLPortletInstanceSettings dlPortletInstanceSettings =
377                            _dlRequestHelper.getDLPortletInstanceSettings();
378    
379                    String[] folderColumns = dlPortletInstanceSettings.getFolderColumns();
380    
381                    _currentFolderColumns = new ArrayList<>();
382    
383                    for (String folderColumn : folderColumns) {
384                            _currentFolderColumns.add(
385                                    new KeyValuePair(
386                                            folderColumn,
387                                            LanguageUtil.get(
388                                                    _dlRequestHelper.getLocale(), folderColumn)));
389                    }
390    
391                    _availableFolderColumns = new ArrayList<>();
392    
393                    Arrays.sort(folderColumns);
394    
395                    Set<String> allFolderColumns = SetUtil.fromArray(
396                            _getAllFolderColumns());
397    
398                    for (String folderColumn : allFolderColumns) {
399                            if (Arrays.binarySearch(folderColumns, folderColumn) < 0) {
400                                    _availableFolderColumns.add(
401                                            new KeyValuePair(
402                                                    folderColumn,
403                                                    LanguageUtil.get(
404                                                            _dlRequestHelper.getLocale(), folderColumn)));
405                            }
406                    }
407    
408                    _availableFolderColumns = ListUtil.sort(
409                            _availableFolderColumns, new KeyValuePairComparator(false, true));
410            }
411    
412            private void _populateMimeTypes() {
413                    DLPortletInstanceSettings dlPortletInstanceSettings =
414                            _dlRequestHelper.getDLPortletInstanceSettings();
415    
416                    String[] mediaGalleryMimeTypes =
417                            dlPortletInstanceSettings.getMimeTypes();
418    
419                    ThemeDisplay themeDisplay = _dlRequestHelper.getThemeDisplay();
420    
421                    _currentMimeTypes = new ArrayList<>();
422    
423                    for (String mimeType : mediaGalleryMimeTypes) {
424                            _currentMimeTypes.add(
425                                    new KeyValuePair(
426                                            mimeType,
427                                            LanguageUtil.get(themeDisplay.getLocale(), mimeType)));
428                    }
429    
430                    _availableMimeTypes = new ArrayList<>();
431    
432                    Set<String> allMediaGalleryMimeTypes =
433                            DLUtil.getAllMediaGalleryMimeTypes();
434    
435                    for (String mimeType : allMediaGalleryMimeTypes) {
436                            if (Arrays.binarySearch(mediaGalleryMimeTypes, mimeType) < 0) {
437                                    _availableMimeTypes.add(
438                                            new KeyValuePair(
439                                                    mimeType,
440                                                    LanguageUtil.get(themeDisplay.getLocale(), mimeType)));
441                            }
442                    }
443            }
444    
445            private List<KeyValuePair> _availableDisplayViews;
446            private List<KeyValuePair> _availableEntryColumns;
447            private List<KeyValuePair> _availableFileEntryColumns;
448            private List<KeyValuePair> _availableFolderColumns;
449            private List<KeyValuePair> _availableMimeTypes;
450            private List<KeyValuePair> _currentDisplayViews;
451            private List<KeyValuePair> _currentEntryColumns;
452            private List<KeyValuePair> _currentFileEntryColumns;
453            private List<KeyValuePair> _currentFolderColumns;
454            private List<KeyValuePair> _currentMimeTypes;
455            private final DLRequestHelper _dlRequestHelper;
456    
457    }