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.documentlibrarydisplay.context;
016    
017    import com.liferay.portal.kernel.language.LanguageUtil;
018    import com.liferay.portal.kernel.util.KeyValuePair;
019    import com.liferay.portal.kernel.util.KeyValuePairComparator;
020    import com.liferay.portal.kernel.util.ListUtil;
021    import com.liferay.portal.kernel.util.SetUtil;
022    import com.liferay.portal.kernel.util.StringUtil;
023    import com.liferay.portal.theme.ThemeDisplay;
024    import com.liferay.portal.util.PropsValues;
025    import com.liferay.portal.util.WebKeys;
026    import com.liferay.portlet.documentlibrary.DLPortletInstanceSettings;
027    import com.liferay.portlet.documentlibrary.context.DLActionsDisplayContext;
028    
029    import java.util.ArrayList;
030    import java.util.Arrays;
031    import java.util.List;
032    import java.util.Set;
033    
034    import javax.servlet.http.HttpServletRequest;
035    
036    /**
037     * @author Iv??n Zaera
038     */
039    public class DLDisplayConfigurationDisplayContext {
040    
041            public DLDisplayConfigurationDisplayContext(
042                    HttpServletRequest request,
043                    DLPortletInstanceSettings dlPortletInstanceSettings) {
044    
045                    _dlPortletInstanceSettings = dlPortletInstanceSettings;
046    
047                    _dlActionsDisplayContext = new DLActionsDisplayContext(
048                            request, dlPortletInstanceSettings);
049                    _themeDisplay = (ThemeDisplay)request.getAttribute(
050                            WebKeys.THEME_DISPLAY);
051            }
052    
053            public List<KeyValuePair> getAvailableFileEntryColumns() {
054                    if (_availableFileEntryColumns == null) {
055                            _populateFileEntryColumns();
056                    }
057    
058                    return _availableFileEntryColumns;
059            }
060    
061            public List<KeyValuePair> getAvailableFolderColumns() {
062                    if (_availableFolderColumns == null) {
063                            _populateFolderColumns();
064                    }
065    
066                    return _availableFolderColumns;
067            }
068    
069            public List<KeyValuePair> getCurrentFileEntryColumns() {
070                    if (_currentFileEntryColumns == null) {
071                            _populateFileEntryColumns();
072                    }
073    
074                    return _currentFileEntryColumns;
075            }
076    
077            public List<KeyValuePair> getCurrentFolderColumns() {
078                    if (_currentFolderColumns == null) {
079                            _populateFolderColumns();
080                    }
081    
082                    return _currentFolderColumns;
083            }
084    
085            public DLActionsDisplayContext getDLActionsDisplayContext() {
086                    return _dlActionsDisplayContext;
087            }
088    
089            private String[] _getAllFileEntryColumns() {
090                    String allFileEntryColumns = "name,size";
091    
092                    if (PropsValues.DL_FILE_ENTRY_BUFFERED_INCREMENT_ENABLED) {
093                            allFileEntryColumns += ",downloads";
094                    }
095    
096                    allFileEntryColumns += ",locked";
097    
098                    if (_dlActionsDisplayContext.isShowActions()) {
099                            allFileEntryColumns += ",action";
100                    }
101    
102                    return StringUtil.split(allFileEntryColumns);
103            }
104    
105            private String[] _getAllFolderColumns() {
106                    String allFolderColumns = "name,num-of-folders,num-of-documents";
107    
108                    if (_dlActionsDisplayContext.isShowActions()) {
109                            allFolderColumns += ",action";
110                    }
111    
112                    return StringUtil.split(allFolderColumns);
113            }
114    
115            private void _populateFileEntryColumns() {
116                    String[] fileEntryColumns =
117                            _dlPortletInstanceSettings.getFileEntryColumns();
118    
119                    _currentFileEntryColumns = new ArrayList<KeyValuePair>();
120    
121                    for (String fileEntryColumn : fileEntryColumns) {
122                            _currentFileEntryColumns.add(
123                                    new KeyValuePair(
124                                            fileEntryColumn,
125                                            LanguageUtil.get(
126                                                    _themeDisplay.getLocale(), fileEntryColumn)));
127                    }
128    
129                    _availableFileEntryColumns = new ArrayList<KeyValuePair>();
130    
131                    Arrays.sort(fileEntryColumns);
132    
133                    Set<String> allFileEntryColumns = SetUtil.fromArray(
134                            _getAllFileEntryColumns());
135    
136                    for (String fileEntryColumn : allFileEntryColumns) {
137                            if (Arrays.binarySearch(fileEntryColumns, fileEntryColumn) < 0) {
138                                    _availableFileEntryColumns.add(
139                                            new KeyValuePair(
140                                                    fileEntryColumn,
141                                                    LanguageUtil.get(
142                                                            _themeDisplay.getLocale(), fileEntryColumn)));
143                            }
144                    }
145    
146                    _availableFileEntryColumns = ListUtil.sort(
147                            _availableFileEntryColumns,
148                            new KeyValuePairComparator(false, true));
149            }
150    
151            private void _populateFolderColumns() {
152                    String[] folderColumns = _dlPortletInstanceSettings.getFolderColumns();
153    
154                    _currentFolderColumns = new ArrayList<KeyValuePair>();
155    
156                    for (String folderColumn : folderColumns) {
157                            _currentFolderColumns.add(
158                                    new KeyValuePair(
159                                            folderColumn,
160                                            LanguageUtil.get(_themeDisplay.getLocale(), folderColumn)));
161                    }
162    
163                    _availableFolderColumns = new ArrayList<KeyValuePair>();
164    
165                    Arrays.sort(folderColumns);
166    
167                    Set<String> allFolderColumns = SetUtil.fromArray(
168                            _getAllFolderColumns());
169    
170                    for (String folderColumn : allFolderColumns) {
171                            if (Arrays.binarySearch(folderColumns, folderColumn) < 0) {
172                                    _availableFolderColumns.add(
173                                            new KeyValuePair(
174                                                    folderColumn,
175                                                    LanguageUtil.get(
176                                                            _themeDisplay.getLocale(), folderColumn)));
177                            }
178                    }
179    
180                    _availableFolderColumns = ListUtil.sort(
181                            _availableFolderColumns, new KeyValuePairComparator(false, true));
182            }
183    
184            private List<KeyValuePair> _availableFileEntryColumns;
185            private List<KeyValuePair> _availableFolderColumns;
186            private List<KeyValuePair> _currentFileEntryColumns;
187            private List<KeyValuePair> _currentFolderColumns;
188            private DLActionsDisplayContext _dlActionsDisplayContext;
189            private DLPortletInstanceSettings _dlPortletInstanceSettings;
190            private ThemeDisplay _themeDisplay;
191    
192    }