/* Retrieve those actions that are forcable to run */
List<IFilterAction> actions = filter.getActions();
List<IFilterAction> forcableActions = new ArrayList<IFilterAction>(actions.size());
for (IFilterAction action : actions) {
NewsActionDescriptor newsActionDescriptor = fNewsActionPresentationManager.getNewsActionDescriptor(action.getActionId());
if (newsActionDescriptor != null && newsActionDescriptor.isForcable())
forcableActions.add(action);
}
/* Return early if selected Action is not forcable */
if (forcableActions.isEmpty()) {
MessageDialog.openWarning(getShell(), NLS.bind(Messages.NewsFiltersListDialog_RUN_SELECTED_FILTER_N, filter.getName()), NLS.bind(Messages.NewsFiltersListDialog_NO_ACTIONS_TO_RUN, filter.getName()));
return;
}
IModelSearch search = Owl.getPersistenceService().getModelSearch();
List<SearchHit<NewsReference>> targetNews = null;
/* Search for all Visible News */
Set<State> visibleStates = INews.State.getVisible();
if (filter.getSearch() == null) {
ISearchField stateField = Owl.getModelFactory().createSearchField(INews.STATE, INews.class.getName());
ISearchCondition stateCondition = Owl.getModelFactory().createSearchCondition(stateField, SearchSpecifier.IS, EnumSet.of(State.NEW, State.UNREAD, State.UPDATED, State.READ));
targetNews = search.searchNews(Collections.singleton(stateCondition), true);
}
/* Use Search from Filter */
else {
List<SearchHit<NewsReference>> result = search.searchNews(filter.getSearch());
targetNews = new ArrayList<SearchHit<NewsReference>>(result.size());
/* Filter out those that are not visible */
for (SearchHit<NewsReference> resultItem : result) {
INews.State state = (State) resultItem.getData(INews.STATE);
if (visibleStates.contains(state))
targetNews.add(resultItem);
}
}
/* Return early if there is no matching News */
if (targetNews.isEmpty()) {
MessageDialog.openWarning(getShell(), NLS.bind(Messages.NewsFiltersListDialog_RUN_SELECTED_FILTER_N, filter.getName()), NLS.bind(Messages.NewsFiltersListDialog_NO_FILTER_MATCH, filter.getName()));
return;
}
/* Ask for Confirmation */
boolean multipleActions = forcableActions.size() > 1;
String title = NLS.bind(Messages.NewsFiltersListDialog_RUN_SELECTED_FILTER_N, filter.getName());
StringBuilder message = new StringBuilder();
if (multipleActions)
message.append(NLS.bind(Messages.NewsFiltersListDialog_PERFORM_ACTIONS, targetNews.size())).append("\n"); //$NON-NLS-1$
else
message.append(NLS.bind(Messages.NewsFiltersListDialog_PERFORM_ACTION, targetNews.size())).append("\n"); //$NON-NLS-1$
for (IFilterAction action : forcableActions) {
NewsActionDescriptor newsActionDescriptor = fNewsActionPresentationManager.getNewsActionDescriptor(action.getActionId());
String label = newsActionDescriptor.getNewsAction() != null ? newsActionDescriptor.getNewsAction().getLabel(action.getData()) : null;
if (StringUtils.isSet(label))
message.append("\n").append(NLS.bind(Messages.NewsFiltersListDialog_FILTER_LIST_ELEMENT, label)); //$NON-NLS-1$
else
message.append("\n").append(NLS.bind(Messages.NewsFiltersListDialog_FILTER_LIST_ELEMENT, newsActionDescriptor.getName())); //$NON-NLS-1$
}
message.append("\n\n").append(Messages.NewsFiltersListDialog_CONFIRM); //$NON-NLS-1$
ConfirmDialog dialog = new ConfirmDialog(getShell(), title, Messages.NewsFiltersListDialog_NO_UNDO, message.toString(), IDialogConstants.OK_LABEL, null) {