package org.nightlabs.jfire.trade.ui.articlecontainer.detail.action; import java.util.HashSet; import java.util.Iterator; import java.util.Set; import org.nightlabs.jfire.trade.Article; import org.nightlabs.jfire.trade.ui.articlecontainer.detail.ArticleSelection; /** * This implementation of {@link ArticleEditAction} doesn't delegate to {@link ArticleEditActionDelegate}s, * but instead expects to be extended (it's abstract). This means, it is the same action for all kinds * of {@link Article}s and thus it's named "generic". * * @author Marco Schulze - marco at nightlabs dot de */ public abstract class GenericArticleEditAction extends ArticleEditAction { /** * This method is called by {@link #calculateEnabled() } for every {@link Article}. If this * method returns <code>false</code> for at least one article, the action will be disabled. * * @param article * @return */ protected abstract boolean excludeArticle(Article article); private Set<Article> articles = null; @Override public boolean calculateEnabled(Set<ArticleSelection> articleSelections) { if (articleSelections.isEmpty()) return false; this.articles = null; Set<Article> articles = new HashSet<Article>(); for (Iterator<ArticleSelection> itAS = articleSelections.iterator(); itAS.hasNext(); ) { ArticleSelection articleSelection = itAS.next(); for (Iterator<? extends Article> itSA = articleSelection.getSelectedArticles().iterator(); itSA.hasNext(); ) { Article article = itSA.next(); if (excludeArticle(article)) return false; articles.add(article); } } this.articles = articles; return true; } public Set<Article> getArticles() { return articles; } }