Mercurial > hg > ismi-richfaces
diff src/main/java/de/mpiwg/itgroup/ismi/browse/FullEntityRepositoryBean.java @ 173:aa564b1b5e1f public_by_author
publicByAuthor feature ui for selecting texts ready.
actual changing of public state not yet implemented.
author | Robert Casties <casties@mpiwg-berlin.mpg.de> |
---|---|
date | Wed, 06 Jun 2018 21:01:05 +0200 |
parents | 0b5d02012299 |
children | 0d31c8be7c31 |
line wrap: on
line diff
--- a/src/main/java/de/mpiwg/itgroup/ismi/browse/FullEntityRepositoryBean.java Mon Jun 04 20:17:04 2018 +0200 +++ b/src/main/java/de/mpiwg/itgroup/ismi/browse/FullEntityRepositoryBean.java Wed Jun 06 21:01:05 2018 +0200 @@ -1,9 +1,13 @@ package de.mpiwg.itgroup.ismi.browse; import java.util.ArrayList; +import java.util.Collections; +import java.util.Comparator; +import java.util.List; import org.apache.commons.lang.StringUtils; import org.mpi.openmind.cache.WrapperService; +import org.mpi.openmind.repository.bo.Attribute; import org.mpi.openmind.repository.bo.Entity; /** @@ -16,8 +20,15 @@ private static final long serialVersionUID = 8022526185079972610L; - /* (non-Javadoc) - * @see de.mpiwg.itgroup.ismi.browse.AbstractEntityRepositoryBean#updateAdvancedEntities() + protected String sortAttributeName; + + protected boolean sortAttributeNumerically = false; + + /* + * (non-Javadoc) + * + * @see de.mpiwg.itgroup.ismi.browse.AbstractEntityRepositoryBean# + * updateAdvancedEntities() */ @Override protected void updateAdvancedEntities() { @@ -45,11 +56,121 @@ WrapperService store = getWrapper(); for (Entity ent : this.currentEntities) { if (ent.isLightweight()) { - store.getEntityContent(ent); + store.getEntityContent(ent); } } } - - + public String actionSortByAttributes() { + try { + this.sortByAttributes(); + } catch (Exception e) { + printInternalError(e); + logger.error(e.getMessage(), e); + } + return GOTO_ENTITY_REPOSITORY; + } + + public void sortByAttributes() throws Exception { + this.resultMode = MODE_ADVANCED; + this.setPage(""); + this.entities = new ArrayList<Entity>(); + this.currentEntities = new ArrayList<Entity>(); + + this.resultSummaryMsg = ""; + + /* + * run search and sort result (by attribute) + */ + List<Entity> resultList = getWrapper().getEntitiesByDef(this.objectClass); + // sort List (by ownvalue) + Collections.sort(resultList, + getEntityAttributeComparator(this.sortAttributeName, this.sortAttributeNumerically)); + this.entities = resultList; + + if (resultList.size() > 0) { + this.resultSummaryMsg = resultList.size() + " items were found!"; + this.advancedPaginator.setCurrentPage(0); + int entitiesCount = this.entities.size(); + this.advancedPaginator.resetNumberOfPages(entitiesCount); + this.updateAdvancedEntities(); + } else { + this.resultSummaryMsg = "No items were found!"; + } + } + + public Comparator<Entity> getEntityAttributeComparator(final String attName, final boolean numerically) { + return new Comparator<Entity>() { + @Override + public int compare(Entity e1, Entity e2) { + if (e1.isLightweight()) { + e1 = getWrapper().getEntityContent(e1); + } + Attribute att1 = e1.getAttributeByName(attName); + if (e2.isLightweight()) { + e2 = getWrapper().getEntityContent(e2); + } + Attribute att2 = e2.getAttributeByName(attName); + if (att1 == null && att2 != null) { + return 1; + } else if (att1 != null && att2 == null) { + return -1; + } else if (att1 == null && att2 == null) { + return 0; + } + if (numerically) { + Integer a1 = null; + Integer a2 = null; + try { + a1 = Integer.parseInt(att1.getValue()); + } catch (Exception e) { + } + try { + a2 = Integer.parseInt(att2.getValue()); + } catch (Exception e) { + } + if (a1 == null && a2 != null) { + return 1; + } else if (a1 != null && a2 == null) { + return -1; + } else if (a1 == null && a2 == null) { + return 0; + } + return Integer.compare(a1, a2); + } else { + return att1.getValue().compareTo(att2.getValue()); + } + } + }; + } + + /** + * @return the sortAttributeName + */ + public String getSortAttributeName() { + return sortAttributeName; + } + + /** + * @param sortAttributeName + * the sortAttributeName to set + */ + public void setSortAttributeName(String sortAttributeName) { + this.sortAttributeName = sortAttributeName; + } + + /** + * @return the sortAttributeNumerical + */ + public boolean isSortAttributeNumerically() { + return sortAttributeNumerically; + } + + /** + * @param sortAttributeNumerical + * the sortAttributeNumerical to set + */ + public void setSortAttributeNumerically(boolean sortAttributeNumerical) { + this.sortAttributeNumerically = sortAttributeNumerical; + } }