Skip to content
Snippets Groups Projects
Commit 67c43c2e authored by srosse's avatar srosse
Browse files

OO-1368: add sort to the list of repository entries in the catalog management tool

parent fa596d2c
No related branches found
No related tags found
No related merge requests found
...@@ -29,6 +29,7 @@ import org.olat.core.gui.render.StringOutput; ...@@ -29,6 +29,7 @@ import org.olat.core.gui.render.StringOutput;
import org.olat.core.gui.render.URLBuilder; import org.olat.core.gui.render.URLBuilder;
import org.olat.core.gui.translator.Translator; import org.olat.core.gui.translator.Translator;
import org.olat.repository.ui.PriceMethod; import org.olat.repository.ui.PriceMethod;
import org.olat.repository.ui.catalog.CatalogEntryRow;
/** /**
* *
...@@ -57,21 +58,27 @@ public class ACRenderer implements FlexiCellRenderer { ...@@ -57,21 +58,27 @@ public class ACRenderer implements FlexiCellRenderer {
} }
} else if (val instanceof AuthoringEntryRow) { } else if (val instanceof AuthoringEntryRow) {
AuthoringEntryRow entry = (AuthoringEntryRow)val; AuthoringEntryRow entry = (AuthoringEntryRow)val;
List<PriceMethod> methods = entry.getAccessTypes(); renderPriceMethods(sb, entry.getAccessTypes());
if (methods != null && methods.size() > 0) { } else if (val instanceof CatalogEntryRow) {
sb.append("<ul class='list-inline'>"); CatalogEntryRow entry = (CatalogEntryRow)val;
for (PriceMethod priceMethod : methods) { renderPriceMethods(sb, entry.getAccessTypes());
String price = priceMethod.getPrice(); }
String type = priceMethod.getType(); sb.append("</div>");
sb.append("<li title=\"").append(priceMethod.getDisplayName()).append("\"><i class='o_icon ").append(type).append(" o_icon-lg'></i>"); }
if(price != null && !price.isEmpty()) {
sb.append(" ").append(price); private void renderPriceMethods(StringOutput sb, List<PriceMethod> methods) {
} if (methods != null && methods.size() > 0) {
sb.append("</li>"); sb.append("<ul class='list-inline'>");
for (PriceMethod priceMethod : methods) {
String price = priceMethod.getPrice();
String type = priceMethod.getType();
sb.append("<li title=\"").append(priceMethod.getDisplayName()).append("\"><i class='o_icon ").append(type).append(" o_icon-lg'></i>");
if(price != null && !price.isEmpty()) {
sb.append(" ").append(price);
} }
sb.append("</ul>"); sb.append("</li>");
} }
sb.append("</ul>");
} }
sb.append("</div>");
} }
} }
...@@ -19,8 +19,12 @@ ...@@ -19,8 +19,12 @@
*/ */
package org.olat.repository.ui.catalog; package org.olat.repository.ui.catalog;
import java.util.List;
import org.olat.core.commons.persistence.SortKey;
import org.olat.core.gui.components.form.flexible.impl.elements.table.DefaultFlexiTableDataModel; import org.olat.core.gui.components.form.flexible.impl.elements.table.DefaultFlexiTableDataModel;
import org.olat.core.gui.components.form.flexible.impl.elements.table.FlexiTableColumnModel; import org.olat.core.gui.components.form.flexible.impl.elements.table.FlexiTableColumnModel;
import org.olat.core.gui.components.form.flexible.impl.elements.table.SortableFlexiTableDataModel;
/** /**
* *
...@@ -28,7 +32,8 @@ import org.olat.core.gui.components.form.flexible.impl.elements.table.FlexiTable ...@@ -28,7 +32,8 @@ import org.olat.core.gui.components.form.flexible.impl.elements.table.FlexiTable
* @author srosse, stephane.rosse@frentix.com, http://www.frentix.com * @author srosse, stephane.rosse@frentix.com, http://www.frentix.com
* *
*/ */
public class CatalogEntryRowModel extends DefaultFlexiTableDataModel<CatalogEntryRow> { public class CatalogEntryRowModel extends DefaultFlexiTableDataModel<CatalogEntryRow>
implements SortableFlexiTableDataModel<CatalogEntryRow> {
public CatalogEntryRowModel(FlexiTableColumnModel columnModel) { public CatalogEntryRowModel(FlexiTableColumnModel columnModel) {
super(columnModel); super(columnModel);
...@@ -42,6 +47,11 @@ public class CatalogEntryRowModel extends DefaultFlexiTableDataModel<CatalogEntr ...@@ -42,6 +47,11 @@ public class CatalogEntryRowModel extends DefaultFlexiTableDataModel<CatalogEntr
@Override @Override
public Object getValueAt(int row, int col) { public Object getValueAt(int row, int col) {
CatalogEntryRow item = getObject(row); CatalogEntryRow item = getObject(row);
return getValueAt(item, col);
}
@Override
public Object getValueAt(CatalogEntryRow item, int col) {
switch(Cols.values()[col]) { switch(Cols.values()[col]) {
case key: return item.getKey(); case key: return item.getKey();
case ac: return item; case ac: return item;
...@@ -62,7 +72,14 @@ public class CatalogEntryRowModel extends DefaultFlexiTableDataModel<CatalogEntr ...@@ -62,7 +72,14 @@ public class CatalogEntryRowModel extends DefaultFlexiTableDataModel<CatalogEntr
} }
return null; return null;
} }
@Override
public void sort(SortKey orderBy) {
if(orderBy != null) {
List<CatalogEntryRow> views = new CatalogEntryRowSortDelegate(orderBy, this, null).sort();
super.setObjects(views);
}
}
public enum Cols { public enum Cols {
key("table.header.key"), key("table.header.key"),
......
/**
* <a href="http://www.openolat.org">
* OpenOLAT - Online Learning and Training</a><br>
* <p>
* Licensed under the Apache License, Version 2.0 (the "License"); <br>
* you may not use this file except in compliance with the License.<br>
* You may obtain a copy of the License at the
* <a href="http://www.apache.org/licenses/LICENSE-2.0">Apache homepage</a>
* <p>
* Unless required by applicable law or agreed to in writing,<br>
* software distributed under the License is distributed on an "AS IS" BASIS, <br>
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. <br>
* See the License for the specific language governing permissions and <br>
* limitations under the License.
* <p>
* Initial code contributed and copyrighted by<br>
* frentix GmbH, http://www.frentix.com
* <p>
*/
package org.olat.repository.ui.catalog;
import java.util.Collections;
import java.util.Comparator;
import java.util.List;
import java.util.Locale;
import org.olat.core.commons.persistence.SortKey;
import org.olat.core.gui.components.form.flexible.impl.elements.table.SortableFlexiTableModelDelegate;
import org.olat.repository.ui.PriceMethod;
import org.olat.repository.ui.catalog.CatalogEntryRowModel.Cols;
/**
*
* Initial date: 05.01.2015<br>
* @author srosse, stephane.rosse@frentix.com, http://www.frentix.com
*
*/
public class CatalogEntryRowSortDelegate extends SortableFlexiTableModelDelegate<CatalogEntryRow> {
public CatalogEntryRowSortDelegate(SortKey orderBy, CatalogEntryRowModel tableModel, Locale locale) {
super(orderBy, tableModel, locale);
}
@Override
protected void sort(List<CatalogEntryRow> rows) {
int columnIndex = getColumnIndex();
Cols column = Cols.values()[columnIndex];
switch(column) {
case ac: Collections.sort(rows, new ACComparator()); break;
case type: Collections.sort(rows, new TypeComparator()); break;
default: {
super.sort(rows);
}
}
}
private class TypeComparator implements Comparator<CatalogEntryRow> {
@Override
public int compare(CatalogEntryRow t1, CatalogEntryRow t2) {
String r1 = t1.getResourceType();
String r2 = t2.getResourceType();
int compare = compareString(r1, r2);
if(compare == 0) {
compare = compareString(t1.getDisplayname(), t2.getDisplayname());
}
return compare;
}
}
private class ACComparator implements Comparator<CatalogEntryRow> {
@Override
public int compare(CatalogEntryRow t1, CatalogEntryRow t2) {
List<PriceMethod> r1 = t1.getAccessTypes();
List<PriceMethod> r2 = t2.getAccessTypes();
if(r1 != null && r1.size() > 0) {
if(r2 != null && r2.size() > 0) {
return r1.size() - r2.size();
}
return 1;
} else if(r2 != null && r2.size() > 0) {
return -1;
}
return compareString(t1.getDisplayname(), t2.getDisplayname());
}
}
}
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment