All Downloads are FREE. Search and download functionalities are using the official Maven repository.

com.rometools.modules.sle.SleUtility Maven / Gradle / Ivy

/*
 * GroupAndSort.java
 *
 * Created on April 29, 2006, 5:56 PM
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *     http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */
package com.rometools.modules.sle;

import java.util.List;

import org.jdom2.Document;

import com.rometools.modules.sle.types.Group;
import com.rometools.modules.sle.types.Sort;
import com.rometools.rome.feed.module.Extendable;
import com.rometools.rome.feed.synd.SyndFeed;
import com.rometools.rome.io.FeedException;
import com.rometools.rome.io.SyndFeedInput;
import com.rometools.rome.io.SyndFeedOutput;

/**
 * This is a utiltiy class for grouping and sorting lists of entries based on the SLE.
 *
 * 

* Note, this class can ONLY be used on parsed feeds, unless you manually add the appropriate * SleEntry objects on the items. *

* * @author Robert "kebernet" Cooper * @see SleEntry */ public final class SleUtility { // private static final String ITEM_MODULE_GENERATORS_POSFIX_KEY = // ".item.ModuleGenerator.classes"; /** Private constructor for utility class */ private SleUtility() { } /** * Groups values by the groups from the SLE. * * @param values List of Extendable implementations to group. * @param groups Group fields (from the SimpleListExtension module) * @return Grouped list of entries. */ public static List group(final List values, final Group[] groups) { final SortableList list = getSortableList(values); final GroupStrategy strategy = new GroupStrategy(); for (int i = groups.length - 1; i >= 0; i--) { list.sortOnProperty(groups[i], true, strategy); } return list; } /** * Sorts a list of values based on a given sort field using a selection sort. * * @param values List of values (implements Extendable) to sort. * @param sort The sort field to sort on. * @param ascending Sort ascending/descending. * @return Sorted list of values */ public static List sort(final List values, final Sort sort, final boolean ascending) { final SortableList list = getSortableList(values); list.sortOnProperty(sort, ascending, new SortStrategy()); return list; } /** * Sorts and groups a set of entries. * * @param values List of Extendable implementations. * @param groups Group items to group by. * @param sort Field to sort on. * @param ascending Sort ascending/descending * @return Grouped and sorted list of entries. */ public static List sortAndGroup(final List values, final Group[] groups, final Sort sort, final boolean ascending) { List list = sort(values, sort, ascending); list = group(list, groups); return list; } /** * This method will take a SyndFeed object with a SimpleListExtension on it and populate the * entries with current SleEntry values for sorting and grouping. NB: This basically does * this by re-generating the XML for all the entries then re-parsing them into the SLE data * structures. It is a very heavy operation and should not be called frequently! */ public static void initializeForSorting(final SyndFeed feed) throws FeedException { // TODO: the null parameter below will break delegating parsers and generators // final ModuleGenerators g = new ModuleGenerators(feed.getFeedType() + // ITEM_MODULE_GENERATORS_POSFIX_KEY, null); final SyndFeedOutput output = new SyndFeedOutput(); final Document document = output.outputJDom(feed); final SyndFeed copy = new SyndFeedInput().build(document); feed.copyFrom(copy); } private static SortableList getSortableList(final List list) { SortableList sortableList; if (list instanceof SortableList) { sortableList = (SortableList) list; } else { sortableList = new SortableList(list); } return sortableList; } }




© 2015 - 2025 Weber Informatics LLC | Privacy Policy