Refactoring code to use generics
This commit is contained in:
parent
e3848c5582
commit
ac3fed65ce
9 changed files with 131 additions and 99 deletions
|
@ -43,6 +43,7 @@ package org.rometools.feed.module.content;
|
|||
|
||||
import java.util.List;
|
||||
|
||||
import org.jdom2.Content;
|
||||
import org.jdom2.Namespace;
|
||||
|
||||
/**
|
||||
|
@ -53,10 +54,11 @@ import org.jdom2.Namespace;
|
|||
* @author <a href="mailto:cooper@screaming-penguin.com">Robert "kebernet" Cooper</a>
|
||||
*/
|
||||
public class ContentItem implements Cloneable {
|
||||
|
||||
private String contentFormat;
|
||||
private String contentEncoding;
|
||||
private String contentValue;
|
||||
private List contentValueDOM;
|
||||
private List<Content> contentValueDOM;
|
||||
private String contentAbout;
|
||||
private String contentValueParseType;
|
||||
private List<Namespace> contentValueNamespace;
|
||||
|
@ -90,11 +92,11 @@ public class ContentItem implements Cloneable {
|
|||
this.contentValue = contentValue;
|
||||
}
|
||||
|
||||
public List getContentValueDOM() {
|
||||
public List<Content> getContentValueDOM() {
|
||||
return contentValueDOM;
|
||||
}
|
||||
|
||||
public void setContentValueDOM(final List contentValueDOM) {
|
||||
public void setContentValueDOM(final List<Content> contentValueDOM) {
|
||||
this.contentValueDOM = contentValueDOM;
|
||||
}
|
||||
|
||||
|
|
|
@ -121,7 +121,7 @@ public class ContentModuleParser implements com.sun.syndication.io.ModuleParser
|
|||
contentStrings.add(value.getText());
|
||||
}
|
||||
|
||||
ci.setContentValueDOM(value.clone().getContent());
|
||||
ci.setContentValueDOM((List<Content>) value.clone().getContent());
|
||||
}
|
||||
|
||||
if (format != null) {
|
||||
|
|
|
@ -149,7 +149,6 @@ public class SlashImpl implements Slash {
|
|||
@Override
|
||||
public boolean equals(final Object obj) {
|
||||
final EqualsBean eBean = new EqualsBean(this.getClass(), this);
|
||||
|
||||
return eBean.beanEquals(obj);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -0,0 +1,26 @@
|
|||
package org.rometools.feed.module.sle;
|
||||
|
||||
import org.rometools.feed.module.sle.io.ModuleParser;
|
||||
import org.rometools.feed.module.sle.types.EntryValue;
|
||||
import org.rometools.feed.module.sle.types.Group;
|
||||
|
||||
import com.sun.syndication.feed.module.Extendable;
|
||||
|
||||
class GroupStrategy implements ValueStrategy {
|
||||
|
||||
@Override
|
||||
public Comparable getValue(final Extendable o, final Object value) {
|
||||
Comparable oc = null;
|
||||
try {
|
||||
final String uri = ModuleParser.TEMP.getURI();
|
||||
final SleEntry entry = (SleEntry) o.getModule(uri);
|
||||
final Group group = (Group) value;
|
||||
final EntryValue entryValue = entry.getGroupByElement(group);
|
||||
oc = entryValue.getValue();
|
||||
} catch (final NullPointerException npe) {
|
||||
; // watch it go by
|
||||
}
|
||||
return oc;
|
||||
}
|
||||
|
||||
}
|
|
@ -17,12 +17,9 @@
|
|||
*/
|
||||
package org.rometools.feed.module.sle;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.Collection;
|
||||
import java.util.List;
|
||||
|
||||
import org.jdom2.Document;
|
||||
import org.rometools.feed.module.sle.io.ModuleParser;
|
||||
import org.rometools.feed.module.sle.types.Group;
|
||||
import org.rometools.feed.module.sle.types.Sort;
|
||||
|
||||
|
@ -31,7 +28,6 @@ import com.sun.syndication.feed.synd.SyndFeed;
|
|||
import com.sun.syndication.io.FeedException;
|
||||
import com.sun.syndication.io.SyndFeedInput;
|
||||
import com.sun.syndication.io.SyndFeedOutput;
|
||||
import com.sun.syndication.io.impl.ModuleGenerators;
|
||||
|
||||
/**
|
||||
* This is a utiltiy class for grouping and sorting lists of entries based on the SLE.
|
||||
|
@ -44,12 +40,13 @@ import com.sun.syndication.io.impl.ModuleGenerators;
|
|||
* @author <a href="mailto:cooper@screaming-penguin.com">Robert "kebernet" Cooper</a>
|
||||
* @see SleEntry
|
||||
*/
|
||||
public class SleUtility {
|
||||
private static final String ITEM_MODULE_GENERATORS_POSFIX_KEY = ".item.ModuleGenerator.classes";
|
||||
public final class SleUtility {
|
||||
|
||||
/** Creates a new instance of GroupAndSort */
|
||||
// private static final String ITEM_MODULE_GENERATORS_POSFIX_KEY =
|
||||
// ".item.ModuleGenerator.classes";
|
||||
|
||||
/** Private constructor for utility class */
|
||||
private SleUtility() {
|
||||
super();
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -59,14 +56,12 @@ public class SleUtility {
|
|||
* @param groups Group fields (from the SimpleListExtension module)
|
||||
* @return Grouped list of entries.
|
||||
*/
|
||||
public static List group(final List values, final Group[] groups) {
|
||||
public static List<Extendable> group(final List<Extendable> values, final Group[] groups) {
|
||||
final SortableList list = values instanceof SortableList ? (SortableList) values : new SortableList(values);
|
||||
final GroupStrategy gs = new GroupStrategy();
|
||||
|
||||
for (int i = groups.length - 1; i >= 0; i--) {
|
||||
list.sortOnProperty(groups[i], true, gs);
|
||||
}
|
||||
|
||||
return list;
|
||||
}
|
||||
|
||||
|
@ -78,10 +73,9 @@ public class SleUtility {
|
|||
* @param ascending Sort ascending/descending.
|
||||
* @return Sorted list of values
|
||||
*/
|
||||
public static List sort(final List values, final Sort sort, final boolean ascending) {
|
||||
public static List<Extendable> sort(final List<Extendable> values, final Sort sort, final boolean ascending) {
|
||||
final SortableList list = values instanceof SortableList ? (SortableList) values : new SortableList(values);
|
||||
list.sortOnProperty(sort, ascending, new SortStrategy());
|
||||
|
||||
return list;
|
||||
}
|
||||
|
||||
|
@ -94,10 +88,9 @@ public class SleUtility {
|
|||
* @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);
|
||||
public static List<Extendable> sortAndGroup(final List<Extendable> values, final Group[] groups, final Sort sort, final boolean ascending) {
|
||||
List<Extendable> list = sort(values, sort, ascending);
|
||||
list = group(list, groups);
|
||||
|
||||
return list;
|
||||
}
|
||||
|
||||
|
@ -108,86 +101,13 @@ public class SleUtility {
|
|||
* structures. It is a very heavy operation and should not be called frequently!
|
||||
*/
|
||||
public static void initializeForSorting(final SyndFeed feed) throws FeedException {
|
||||
final List syndEntries = feed.getEntries();
|
||||
|
||||
// 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 ModuleGenerators g = new ModuleGenerators(feed.getFeedType() +
|
||||
// ITEM_MODULE_GENERATORS_POSFIX_KEY, null);
|
||||
final SyndFeedOutput o = new SyndFeedOutput();
|
||||
final Document d = o.outputJDom(feed);
|
||||
final SyndFeed feed2 = new SyndFeedInput().build(d);
|
||||
feed.copyFrom(feed2);
|
||||
}
|
||||
|
||||
private static interface ValueStrategy {
|
||||
public Comparable getValue(Extendable o, Object valueName);
|
||||
}
|
||||
|
||||
private static class GroupStrategy implements ValueStrategy {
|
||||
@Override
|
||||
public Comparable getValue(final Extendable o, final Object value) {
|
||||
Comparable oc = null;
|
||||
|
||||
try {
|
||||
oc = ((SleEntry) o.getModule(ModuleParser.TEMP.getURI())).getGroupByElement((Group) value).getValue();
|
||||
} catch (final NullPointerException npe) {
|
||||
; // watch it go by
|
||||
}
|
||||
|
||||
return oc;
|
||||
}
|
||||
}
|
||||
|
||||
private static class SortStrategy implements ValueStrategy {
|
||||
@Override
|
||||
public Comparable getValue(final Extendable o, final Object value) {
|
||||
Comparable oc = null;
|
||||
try {
|
||||
oc = ((SleEntry) o.getModule(ModuleParser.TEMP.getURI())).getSortByElement((Sort) value).getValue();
|
||||
} catch (final NullPointerException npe) {
|
||||
; // watch it go by
|
||||
}
|
||||
|
||||
return oc;
|
||||
}
|
||||
}
|
||||
|
||||
private static class SortableList extends ArrayList {
|
||||
/**
|
||||
*
|
||||
*/
|
||||
private static final long serialVersionUID = 1L;
|
||||
|
||||
public SortableList(final Collection c) {
|
||||
super(c);
|
||||
}
|
||||
|
||||
/**
|
||||
* performs a selection sort on all the beans in the List
|
||||
*/
|
||||
public synchronized void sortOnProperty(final Object value, final boolean ascending, final ValueStrategy strat) {
|
||||
|
||||
for (int i = 0; i < size() - 1; i++) {
|
||||
for (int j = i + 1; j < size(); j++) {
|
||||
final Extendable o1 = (Extendable) get(i);
|
||||
final Comparable oc1 = strat.getValue(o1, value);
|
||||
|
||||
final Extendable o2 = (Extendable) get(j);
|
||||
final Comparable oc2 = strat.getValue(o2, value);
|
||||
System.out.println(oc1 + " < " + oc2);
|
||||
if (ascending) {
|
||||
if (oc1 != oc2 && (oc2 == null || oc1 != null && oc2 != null && oc2.compareTo(oc1) < 0)) { // swap
|
||||
set(i, o2);
|
||||
set(j, o1);
|
||||
}
|
||||
} else {
|
||||
if (oc1 != oc2 && (oc1 == null || oc1 != null && oc2 != null && oc1.compareTo(oc2) < 0)) { // swap
|
||||
|
||||
set(i, o2);
|
||||
set(j, o1);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -0,0 +1,26 @@
|
|||
package org.rometools.feed.module.sle;
|
||||
|
||||
import org.rometools.feed.module.sle.io.ModuleParser;
|
||||
import org.rometools.feed.module.sle.types.EntryValue;
|
||||
import org.rometools.feed.module.sle.types.Sort;
|
||||
|
||||
import com.sun.syndication.feed.module.Extendable;
|
||||
|
||||
class SortStrategy implements ValueStrategy {
|
||||
|
||||
@Override
|
||||
public Comparable getValue(final Extendable o, final Object value) {
|
||||
Comparable oc = null;
|
||||
try {
|
||||
final String uri = ModuleParser.TEMP.getURI();
|
||||
final SleEntry entry = (SleEntry) o.getModule(uri);
|
||||
final Sort sort = (Sort) value;
|
||||
final EntryValue entryValue = entry.getSortByElement(sort);
|
||||
oc = entryValue.getValue();
|
||||
} catch (final NullPointerException npe) {
|
||||
; // watch it go by
|
||||
}
|
||||
return oc;
|
||||
}
|
||||
|
||||
}
|
|
@ -0,0 +1,47 @@
|
|||
package org.rometools.feed.module.sle;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.Collection;
|
||||
|
||||
import com.sun.syndication.feed.module.Extendable;
|
||||
|
||||
class SortableList extends ArrayList<Extendable> {
|
||||
|
||||
private static final long serialVersionUID = 1L;
|
||||
|
||||
public SortableList(final Collection<Extendable> c) {
|
||||
super(c);
|
||||
}
|
||||
|
||||
/**
|
||||
* performs a selection sort on all the beans in the List
|
||||
*/
|
||||
public synchronized void sortOnProperty(final Object value, final boolean ascending, final ValueStrategy strat) {
|
||||
for (int i = 0; i < size() - 1; i++) {
|
||||
for (int j = i + 1; j < size(); j++) {
|
||||
|
||||
final Extendable o1 = get(i);
|
||||
final Comparable oc1 = strat.getValue(o1, value);
|
||||
|
||||
final Extendable o2 = get(j);
|
||||
final Comparable oc2 = strat.getValue(o2, value);
|
||||
|
||||
System.out.println(oc1 + " < " + oc2);
|
||||
|
||||
if (ascending) {
|
||||
if (oc1 != oc2 && (oc2 == null || oc1 != null && oc2 != null && oc2.compareTo(oc1) < 0)) { // swap
|
||||
set(i, o2);
|
||||
set(j, o1);
|
||||
}
|
||||
} else {
|
||||
if (oc1 != oc2 && (oc1 == null || oc1 != null && oc2 != null && oc1.compareTo(oc2) < 0)) { // swap
|
||||
|
||||
set(i, o2);
|
||||
set(j, o1);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
}
|
|
@ -0,0 +1,9 @@
|
|||
package org.rometools.feed.module.sle;
|
||||
|
||||
import com.sun.syndication.feed.module.Extendable;
|
||||
|
||||
interface ValueStrategy {
|
||||
|
||||
public Comparable getValue(Extendable o, Object valueName);
|
||||
|
||||
}
|
|
@ -8,6 +8,7 @@
|
|||
package org.rometools.feed.module.sle;
|
||||
|
||||
import java.io.File;
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
import junit.framework.Test;
|
||||
|
@ -16,6 +17,7 @@ import junit.framework.TestSuite;
|
|||
import org.rometools.feed.module.AbstractTestCase;
|
||||
import org.rometools.feed.module.sle.types.Sort;
|
||||
|
||||
import com.sun.syndication.feed.module.Extendable;
|
||||
import com.sun.syndication.feed.synd.SyndEntry;
|
||||
import com.sun.syndication.feed.synd.SyndFeed;
|
||||
import com.sun.syndication.io.SyndFeedInput;
|
||||
|
@ -44,10 +46,10 @@ public class GroupAndSortTest extends AbstractTestCase {
|
|||
final SyndFeed feed = input.build(new File(super.getTestFile("data/bookexample.xml")));
|
||||
final SimpleListExtension sle = (SimpleListExtension) feed.getModule(SimpleListExtension.URI);
|
||||
|
||||
final List<SyndEntry> entries = feed.getEntries();
|
||||
final List<Extendable> entries = new ArrayList<Extendable>(feed.getEntries());
|
||||
final Sort[] sortFields = sle.getSortFields();
|
||||
final Sort sort = sortFields[1];
|
||||
List sortedEntries = SleUtility.sort(entries, sort, true);
|
||||
List<Extendable> sortedEntries = SleUtility.sort(entries, sort, true);
|
||||
SyndEntry entry = (SyndEntry) sortedEntries.get(0);
|
||||
assertEquals("Great Journeys of the Past", entry.getTitle());
|
||||
sortedEntries = SleUtility.sort(entries, sort, false);
|
||||
|
@ -100,7 +102,8 @@ public class GroupAndSortTest extends AbstractTestCase {
|
|||
final SyndFeed feed = input.build(new File(super.getTestFile("data/YahooTopSongs.xml")));
|
||||
final SimpleListExtension sle = (SimpleListExtension) feed.getModule(SimpleListExtension.URI);
|
||||
System.out.println("Sorting on " + sle.getSortFields()[0]);
|
||||
final List sortedEntries = SleUtility.sort(feed.getEntries(), sle.getSortFields()[0], true);
|
||||
final List<Extendable> entries = new ArrayList<Extendable>(feed.getEntries());
|
||||
final List<Extendable> sortedEntries = SleUtility.sort(entries, sle.getSortFields()[0], true);
|
||||
for (int i = 0; i < sortedEntries.size(); i++) {
|
||||
final SyndEntry entry = (SyndEntry) sortedEntries.get(i);
|
||||
System.out.println(entry.getTitle());
|
||||
|
|
Loading…
Reference in a new issue