/** * */ package org.nightlabs.jfire.trade.ui.articlecontainer.detail.action.openrelated; import java.util.Set; import org.eclipse.ui.PartInitException; import org.nightlabs.base.ui.util.RCPUtil; import org.nightlabs.jfire.accounting.id.InvoiceID; import org.nightlabs.jfire.trade.Article; import org.nightlabs.jfire.trade.ui.articlecontainer.detail.ArticleContainerEdit; import org.nightlabs.jfire.trade.ui.articlecontainer.detail.ArticleContainerEditor; import org.nightlabs.jfire.trade.ui.articlecontainer.detail.ArticleContainerEditorInput; import org.nightlabs.util.Util; /** * @author Alexander Bieber <!-- alex [AT] nightlabs [DOT] de --> * */ public class OpenRelatedInvoiceAction extends OpenRelatedAction { @Override protected boolean calculateEnabledWithArticles(Set<Article> articles) { ArticleContainerEdit edit = getArticleEditActionRegistry().getActiveArticleContainerEdit(); // setText(Messages.getString("org.nightlabs.jfire.trade.ui.articlecontainer.detail.action.openrelated.OpenRelatedInvoiceAction.action.text.disabled")); //$NON-NLS-1$ InvoiceID invoiceID = getCommonInvoiceID(articles); setText(getText(invoiceID)); // if (invoiceID != null) { // setText( // String.format(Messages.getString("org.nightlabs.jfire.trade.ui.articlecontainer.detail.action.openrelated.OpenRelatedInvoiceAction.action.text.enabled"), //$NON-NLS-1$ // invoiceID.invoiceIDPrefix, ObjectIDUtil.longObjectIDFieldToString(invoiceID.invoiceID) // ) // ); // } return invoiceID != null && !(edit.getArticleContainerID() instanceof InvoiceID); } /** * Extracts the InvoiceID common to all given articles or <code>null</code>. * @param articles The articles to check. */ protected InvoiceID getCommonInvoiceID(Set<Article> articles) { InvoiceID invoiceID = null; boolean first = true; for (Article article : articles) { if (first) { invoiceID = article.getInvoiceID(); first = false; continue; } if (!Util.equals(invoiceID, article.getInvoiceID())) return null; } return invoiceID; } @Override public void run() { InvoiceID invoiceID = getCommonInvoiceID(getArticles()); if (invoiceID == null) return; try { RCPUtil.openEditor(new ArticleContainerEditorInput(invoiceID), ArticleContainerEditor.ID_EDITOR); } catch (PartInitException e) { throw new RuntimeException(e); } } }