From efd5fd615b2a419453ca2401ac08e1fc03d1ac14 Mon Sep 17 00:00:00 2001 From: srosse <none@none> Date: Tue, 18 Sep 2012 15:00:43 +0200 Subject: [PATCH] FXOLAT-461: order by VFSItem, not MetaTagged --- .../bc/meta/tagged/MetaTaggedComparator.java | 54 ++++++++++++++++++ .../bc/meta/tagged/TitleComparator.java | 30 +++++----- .../folder/OlatRootFolderTreeModel.java | 56 ++++--------------- 3 files changed, 82 insertions(+), 58 deletions(-) create mode 100644 src/main/java/org/olat/core/commons/modules/bc/meta/tagged/MetaTaggedComparator.java diff --git a/src/main/java/org/olat/core/commons/modules/bc/meta/tagged/MetaTaggedComparator.java b/src/main/java/org/olat/core/commons/modules/bc/meta/tagged/MetaTaggedComparator.java new file mode 100644 index 00000000000..9903de27991 --- /dev/null +++ b/src/main/java/org/olat/core/commons/modules/bc/meta/tagged/MetaTaggedComparator.java @@ -0,0 +1,54 @@ +/** + * <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.core.commons.modules.bc.meta.tagged; + +import java.text.Collator; +import java.util.Comparator; +import java.util.Locale; + +import org.olat.core.commons.modules.bc.meta.MetaInfo; +import org.olat.core.commons.modules.bc.meta.MetaTitleComparator; + +/** + * Compares the title of two meta tagged objects. + * + * <P> + * Initial Date: Jul 9, 2009 <br> + * + * @author gwassmann + */ +public class MetaTaggedComparator implements Comparator<MetaTagged> { + private final Comparator<MetaInfo> comparator; + + public MetaTaggedComparator(Collator collator) { + comparator = new MetaTitleComparator(collator); + } + + public MetaTaggedComparator(Locale locale) { + this(Collator.getInstance(locale)); + } + + public int compare(MetaTagged i1, MetaTagged i2) { + MetaInfo m1 = i1.getMetaInfo(); + MetaInfo m2 = i2.getMetaInfo(); + return comparator.compare(m1, m2); + + } +} diff --git a/src/main/java/org/olat/core/commons/modules/bc/meta/tagged/TitleComparator.java b/src/main/java/org/olat/core/commons/modules/bc/meta/tagged/TitleComparator.java index 2e78fb2e8ed..f2bac687cba 100644 --- a/src/main/java/org/olat/core/commons/modules/bc/meta/tagged/TitleComparator.java +++ b/src/main/java/org/olat/core/commons/modules/bc/meta/tagged/TitleComparator.java @@ -25,31 +25,35 @@ import java.util.Locale; import org.olat.core.commons.modules.bc.meta.MetaInfo; import org.olat.core.commons.modules.bc.meta.MetaTitleComparator; +import org.olat.core.util.vfs.VFSItem; /** - * Compares the title of two meta tagged objects. + * Compare the title or the filename * - * <P> - * Initial Date: Jul 9, 2009 <br> - * - * @author gwassmann + * @author srosse, stephane.rosse@frentix.com, http://www.frentix.com */ -public class TitleComparator implements Comparator<MetaTagged> { +public class TitleComparator implements Comparator<VFSItem> { private final Collator collator; + private final MetaTitleComparator comparator; public TitleComparator(Collator collator) { this.collator = collator; + comparator = new MetaTitleComparator(collator); } public TitleComparator(Locale locale) { - this.collator = Collator.getInstance(locale); + this(Collator.getInstance(locale)); } - public int compare(MetaTagged one, MetaTagged two) { - MetaInfo that = one.getMetaInfo(); - MetaInfo other = two.getMetaInfo(); - // Delegate! - MetaTitleComparator comparator = new MetaTitleComparator(collator); - return comparator.compare(that, other); + public int compare(VFSItem i1, VFSItem i2) { + if(i1 instanceof MetaTagged && i2 instanceof MetaTagged) { + MetaInfo m1 = ((MetaTagged)i1).getMetaInfo(); + MetaInfo m2 = ((MetaTagged)i2).getMetaInfo(); + return comparator.compare(m1, m2); + } + + String t1 = i1.getName(); + String t2 = i2.getName(); + return collator.compare(t1, t2); } } diff --git a/src/main/java/org/olat/core/gui/control/generic/folder/OlatRootFolderTreeModel.java b/src/main/java/org/olat/core/gui/control/generic/folder/OlatRootFolderTreeModel.java index c753cc4f217..b2ff45ad73b 100644 --- a/src/main/java/org/olat/core/gui/control/generic/folder/OlatRootFolderTreeModel.java +++ b/src/main/java/org/olat/core/gui/control/generic/folder/OlatRootFolderTreeModel.java @@ -24,14 +24,12 @@ */ package org.olat.core.gui.control.generic.folder; -import java.util.ArrayList; import java.util.Collections; import java.util.Comparator; import java.util.List; import org.olat.core.commons.modules.bc.meta.MetaInfo; import org.olat.core.commons.modules.bc.meta.MetaInfoFactory; -import org.olat.core.commons.modules.bc.meta.tagged.MetaTagged; import org.olat.core.commons.modules.bc.vfs.OlatRootFolderImpl; import org.olat.core.gui.components.tree.GenericTreeModel; import org.olat.core.util.StringHelper; @@ -62,7 +60,7 @@ public class OlatRootFolderTreeModel extends GenericTreeModel { static final long serialVersionUID = 1L; private VFSItemFilter filter; - private Comparator<MetaTagged> comparator; + private Comparator<VFSItem> comparator; public OlatRootFolderTreeModel(OlatRootFolderImpl root) { setRootNode(createNode(root)); @@ -79,7 +77,7 @@ public class OlatRootFolderTreeModel extends GenericTreeModel { } public OlatRootFolderTreeModel(OlatRootFolderImpl root, - VFSItemFilter filter, Comparator<MetaTagged> comparator) { + VFSItemFilter filter, Comparator<VFSItem> comparator) { this.filter = filter; this.comparator = comparator; setRootNode(createNode(root)); @@ -94,55 +92,23 @@ public class OlatRootFolderTreeModel extends GenericTreeModel { * @param root */ protected void makeChildren(OlatRootFolderTreeNode node, OlatRootFolderImpl root) { - List<MetaTagged> children = castToMetaTaggables(root.getItems(filter)); + List<VFSItem> children = root.getItems(filter); if (comparator != null) { Collections.sort(children, comparator); } - for (OlatRelPathImpl child : castToRelPathItems(children)) { + for (VFSItem child : children) { // create a node for each child and add it - OlatRootFolderTreeNode childNode = createNode(child); - node.addChild(childNode); - if (child instanceof OlatRootFolderImpl) { - // add the child's children recursively - makeChildren(childNode, (OlatRootFolderImpl) child); + if(child instanceof OlatRelPathImpl) { + OlatRootFolderTreeNode childNode = createNode((OlatRelPathImpl)child); + node.addChild(childNode); + if (child instanceof OlatRootFolderImpl) { + // add the child's children recursively + makeChildren(childNode, (OlatRootFolderImpl) child); + } } } } - /** - * Cast the list of VFSItems to a list of OlatRelPathImpl instances. - * - * @param items - * @return The OlatRelPathImpl list - */ - private List<OlatRelPathImpl> castToRelPathItems(List<MetaTagged> items) { - List<OlatRelPathImpl> relPathItems = new ArrayList<OlatRelPathImpl>( - items.size()); - for (MetaTagged item : items) { - if (item instanceof OlatRelPathImpl) { - relPathItems.add((OlatRelPathImpl) item); - } - } - return relPathItems; - } - - /** - * Cast the list of VFSItems to a list of OlatRelPathImpl instances. - * - * @param items - * @return The OlatRelPathImpl list - */ - private List<MetaTagged> castToMetaTaggables(List<VFSItem> items) { - List<MetaTagged> relPathItems = new ArrayList<MetaTagged>(items - .size()); - for (VFSItem item : items) { - if (item instanceof MetaTagged) { - relPathItems.add((MetaTagged) item); - } - } - return relPathItems; - } - /** * Create a node out of a relative path vfs item. The user object is set to * the relative path. -- GitLab