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.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    
028    import java.util.ArrayList;
029    import java.util.Arrays;
030    import java.util.List;
031    import java.util.Set;
032    
033    import javax.servlet.http.HttpServletRequest;
034    
035    /**
036     * @author Iv??n Zaera
037     */
038    public class DLConfigurationDisplayContext {
039    
040            public DLConfigurationDisplayContext(
041                    HttpServletRequest request,
042                    DLPortletInstanceSettings dlPortletInstanceSettings) {
043    
044                    _dlPortletInstanceSettings = dlPortletInstanceSettings;
045    
046                    _dlActionsDisplayContext = new DLActionsDisplayContext(
047                            request, dlPortletInstanceSettings);
048                    _themeDisplay = (ThemeDisplay)request.getAttribute(
049                            WebKeys.THEME_DISPLAY);
050            }
051    
052            public List<KeyValuePair> getAvailableDisplayViews() {
053                    if (_availableDisplayViews == null) {
054                            _populateDisplayViews();
055                    }
056    
057                    return _availableDisplayViews;
058            }
059    
060            public List<KeyValuePair> getAvailableEntryColumns() {
061                    if (_availableEntryColumns == null) {
062                            _populateEntryColumns();
063                    }
064    
065                    return _availableEntryColumns;
066            }
067    
068            public List<KeyValuePair> getCurrentDisplayViews() {
069                    if (_currentDisplayViews == null) {
070                            _populateDisplayViews();
071                    }
072    
073                    return _currentDisplayViews;
074            }
075    
076            public List<KeyValuePair> getCurrentEntryColumns() {
077                    if (_currentEntryColumns == null) {
078                            _populateEntryColumns();
079                    }
080    
081                    return _currentEntryColumns;
082            }
083    
084            public DLActionsDisplayContext getDLActionsDisplayContext() {
085                    return _dlActionsDisplayContext;
086            }
087    
088            private String[] _getAllEntryColumns() {
089                    String allEntryColumns = "name,size,status";
090    
091                    if (PropsValues.DL_FILE_ENTRY_BUFFERED_INCREMENT_ENABLED) {
092                            allEntryColumns += ",downloads";
093                    }
094    
095                    if (_dlActionsDisplayContext.isShowActions()) {
096                            allEntryColumns += ",action";
097                    }
098    
099                    allEntryColumns += ",modified-date,create-date";
100    
101                    return StringUtil.split(allEntryColumns);
102            }
103    
104            private void _populateDisplayViews() {
105                    String[] displayViews = _dlPortletInstanceSettings.getDisplayViews();
106    
107                    _currentDisplayViews = new ArrayList<KeyValuePair>();
108    
109                    for (String displayView : displayViews) {
110                            _currentDisplayViews.add(
111                                    new KeyValuePair(
112                                            displayView,
113                                            LanguageUtil.get(_themeDisplay.getLocale(), displayView)));
114                    }
115    
116                    Arrays.sort(displayViews);
117    
118                    _availableDisplayViews = new ArrayList<KeyValuePair>();
119    
120                    Set<String> allDisplayViews = SetUtil.fromArray(
121                            PropsValues.DL_DISPLAY_VIEWS);
122    
123                    for (String displayView : allDisplayViews) {
124                            if (Arrays.binarySearch(displayViews, displayView) < 0) {
125                                    _availableDisplayViews.add(
126                                            new KeyValuePair(
127                                                    displayView,
128                                                    LanguageUtil.get(
129                                                            _themeDisplay.getLocale(), displayView)));
130                            }
131                    }
132    
133                    _availableDisplayViews = ListUtil.sort(
134                            _availableDisplayViews, new KeyValuePairComparator(false, true));
135            }
136    
137            private void _populateEntryColumns() {
138                    String[] entryColumns = _dlPortletInstanceSettings.getEntryColumns();
139    
140                    _currentEntryColumns = new ArrayList<KeyValuePair>();
141    
142                    for (String entryColumn : entryColumns) {
143                            _currentEntryColumns.add(
144                                    new KeyValuePair(
145                                            entryColumn,
146                                            LanguageUtil.get(_themeDisplay.getLocale(), entryColumn)));
147                    }
148    
149                    Arrays.sort(entryColumns);
150    
151                    _availableEntryColumns = new ArrayList<KeyValuePair>();
152    
153                    Set<String> allEntryColumns = SetUtil.fromArray(_getAllEntryColumns());
154    
155                    for (String entryColumn : allEntryColumns) {
156                            if (Arrays.binarySearch(entryColumns, entryColumn) < 0) {
157                                    _availableEntryColumns.add(
158                                            new KeyValuePair(
159                                                    entryColumn,
160                                                    LanguageUtil.get(
161                                                            _themeDisplay.getLocale(), entryColumn)));
162                            }
163                    }
164    
165                    _availableEntryColumns = ListUtil.sort(
166                            _availableEntryColumns, new KeyValuePairComparator(false, true));
167            }
168    
169            private List<KeyValuePair> _availableDisplayViews;
170            private List<KeyValuePair> _availableEntryColumns;
171            private List<KeyValuePair> _currentDisplayViews;
172            private List<KeyValuePair> _currentEntryColumns;
173            private DLActionsDisplayContext _dlActionsDisplayContext;
174            private DLPortletInstanceSettings _dlPortletInstanceSettings;
175            private ThemeDisplay _themeDisplay;
176    
177    }