001
014
015 package com.liferay.portlet.documentlibrary.util.comparator;
016
017 import com.liferay.portal.kernel.repository.model.Folder;
018 import com.liferay.portal.kernel.repository.model.RepositoryEntry;
019 import com.liferay.portal.kernel.util.DateUtil;
020 import com.liferay.portal.kernel.util.OrderByComparator;
021 import com.liferay.portlet.documentlibrary.model.DLFileEntry;
022 import com.liferay.portlet.documentlibrary.model.DLFileShortcut;
023 import com.liferay.portlet.documentlibrary.model.DLFolder;
024
025 import java.util.Date;
026
027
030 public class RepositoryModelCreateDateComparator<T>
031 extends OrderByComparator<T> {
032
033 public static final String ORDER_BY_ASC = "createDate ASC";
034
035 public static final String ORDER_BY_DESC = "createDate DESC";
036
037 public static final String[] ORDER_BY_FIELDS = {"createDate"};
038
039 public static final String ORDER_BY_MODEL_ASC =
040 "modelFolder DESC, createDate ASC";
041
042 public static final String ORDER_BY_MODEL_DESC =
043 "modelFolder DESC, createDate DESC";
044
045 public RepositoryModelCreateDateComparator() {
046 this(false);
047 }
048
049 public RepositoryModelCreateDateComparator(boolean ascending) {
050 _ascending = ascending;
051 _orderByModel = false;
052 }
053
054 public RepositoryModelCreateDateComparator(
055 boolean ascending, boolean orderByModel) {
056
057 _ascending = ascending;
058 _orderByModel = orderByModel;
059 }
060
061 @Override
062 public int compare(T t1, T t2 ) {
063 int value = 0;
064
065 Date createDate1 = getCreateDate(t1);
066 Date createDate2 = getCreateDate(t2);
067
068 if (_orderByModel) {
069 if (((t1 instanceof DLFolder) || (t1 instanceof Folder)) &&
070 ((t2 instanceof DLFolder) || (t2 instanceof Folder))) {
071
072 value = DateUtil.compareTo(createDate1, createDate2);
073 }
074 else if ((t1 instanceof DLFolder) || (t1 instanceof Folder)) {
075 value = -1;
076 }
077 else if ((t2 instanceof DLFolder) || (t2 instanceof Folder)) {
078 value = 1;
079 }
080 else {
081 value = DateUtil.compareTo(createDate1, createDate2);
082 }
083 }
084 else {
085 value = DateUtil.compareTo(createDate1, createDate2);
086 }
087
088 if (_ascending) {
089 return value;
090 }
091 else {
092 return -value;
093 }
094 }
095
096 @Override
097 public String getOrderBy() {
098 if (_orderByModel) {
099 if (_ascending) {
100 return ORDER_BY_MODEL_ASC;
101 }
102 else {
103 return ORDER_BY_MODEL_DESC;
104 }
105 }
106 else {
107 if (_ascending) {
108 return ORDER_BY_ASC;
109 }
110 else {
111 return ORDER_BY_DESC;
112 }
113 }
114 }
115
116 @Override
117 public String[] getOrderByFields() {
118 return ORDER_BY_FIELDS;
119 }
120
121 @Override
122 public boolean isAscending() {
123 return _ascending;
124 }
125
126 protected Date getCreateDate(Object obj) {
127 if (obj instanceof DLFileEntry) {
128 DLFileEntry dlFileEntry = (DLFileEntry)obj;
129
130 return dlFileEntry.getCreateDate();
131 }
132 else if (obj instanceof DLFileShortcut) {
133 DLFileShortcut dlFileShortcut = (DLFileShortcut)obj;
134
135 return dlFileShortcut.getCreateDate();
136 }
137 else if (obj instanceof DLFolder) {
138 DLFolder dlFolder = (DLFolder)obj;
139
140 return dlFolder.getCreateDate();
141 }
142 else {
143 RepositoryEntry repositoryEntry = (RepositoryEntry)obj;
144
145 return repositoryEntry.getCreateDate();
146 }
147 }
148
149 private final boolean _ascending;
150 private final boolean _orderByModel;
151
152 }