import java.util.ArrayList;
import java.util.Collection;
import java.util.Collections;
-import java.util.Comparator;
import java.util.List;
import eu.etaxonomy.cdm.api.conversation.ConversationHolder;
import eu.etaxonomy.cdm.model.common.OriginalSourceType;
import eu.etaxonomy.cdm.model.description.DescriptionElementBase;
import eu.etaxonomy.cdm.model.description.DescriptionElementSource;
-import eu.etaxonomy.cdm.model.reference.Reference;
import eu.etaxonomy.taxeditor.ui.element.CdmFormFactory;
import eu.etaxonomy.taxeditor.ui.element.ICdmFormElement;
import eu.etaxonomy.taxeditor.ui.section.AbstractEntityCollectionSection;
@Override
public Collection<DescriptionElementSource> getCollection(DescriptionElementBase entity) {
List<DescriptionElementSource> sources = new ArrayList<DescriptionElementSource>(entity.getSources());
- Collections.sort(sources, new Comparator<DescriptionElementSource>() {
-
- @Override
- public int compare(DescriptionElementSource o1, DescriptionElementSource o2) {
- int id1 = o1.getId();
- int id2 = o2.getId();
- OriginalSourceType type1 = o1.getType();
- OriginalSourceType type2 = o2.getType();
- Reference citation1 = o1.getCitation();
- Reference citation2 = o2.getCitation();
-
- // the newly created should always be on top
- if (id1 == 0 && id2!=0) {
- return -1;
- }
- if (id1 != 0 && id2==0) {
- return 1;
- }
-
- // sort by type (Primary taxonomic > Primary Media > others
- // alphabetically by reference title cache)
- if (type1 != null && type1.equals(OriginalSourceType.PrimaryTaxonomicSource)
- && type2 != null && !type2.equals(OriginalSourceType.PrimaryTaxonomicSource)) {
- return -1;
- }
- if (type1 != null && !type1.equals(OriginalSourceType.PrimaryTaxonomicSource)
- && type2 != null && type2.equals(OriginalSourceType.PrimaryTaxonomicSource)) {
- return 1;
- }
- if (type1 != null && type1.equals(OriginalSourceType.PrimaryMediaSource)
- && type2!=null && !type2.equals(OriginalSourceType.PrimaryTaxonomicSource)) {
- return -1;
- }
- if (type2 != null && type2.equals(OriginalSourceType.PrimaryMediaSource)
- && type1!=null && !type1.equals(OriginalSourceType.PrimaryTaxonomicSource)) {
- return 1;
- }
-
- //sort by citation title cache
- if(citation1!=null && citation2!=null){
- return citation1.getTitleCache().compareTo(citation2.getTitleCache());
- }
- return o2.getCreated().compareTo(o1.getCreated());
- }
- });
+ Collections.sort(sources, new SourceComparator());
return sources;
}