/*******************************************************************************
* This file is part of the Symfony eclipse plugin.
*
* (c) Robert Gruendler <r.gruendler@gmail.com>
*
* For the full copyright and license information, please view the LICENSE
* file that was distributed with this source code.
******************************************************************************/
package com.dubture.symfony.ui.views;
import java.util.ArrayList;
import java.util.List;
import org.eclipse.core.runtime.Path;
import org.eclipse.dltk.internal.ui.actions.CompositeActionGroup;
import org.eclipse.dltk.internal.ui.scriptview.ScriptMessages;
import org.eclipse.dltk.ui.DLTKPluginImages;
import org.eclipse.jface.action.Action;
import org.eclipse.jface.action.ActionContributionItem;
import org.eclipse.jface.action.IAction;
import org.eclipse.jface.action.IMenuCreator;
import org.eclipse.jface.action.IMenuManager;
import org.eclipse.jface.action.IToolBarManager;
import org.eclipse.jface.action.MenuManager;
import org.eclipse.swt.SWT;
import org.eclipse.swt.widgets.Control;
import org.eclipse.swt.widgets.Menu;
import org.eclipse.swt.widgets.MenuItem;
import org.eclipse.ui.IActionBars;
import com.dubture.symfony.core.model.SymfonyModelAccess;
import com.dubture.symfony.ui.SymfonyPluginImages;
@SuppressWarnings("restriction")
public class ServicesViewerActionGroup extends CompositeActionGroup {
private ServicePart part;
private class CollapseAction extends Action {
public CollapseAction() {
super(ScriptMessages.CollapseAllAction_label);
setDescription(ScriptMessages.CollapseAllAction_description);
setToolTipText(ScriptMessages.CollapseAllAction_tooltip);
DLTKPluginImages.setLocalImageDescriptors(this, "collapseall.png"); //$NON-NLS-1$
}
@Override
public void run()
{
super.run();
}
}
private class FlatViewAction extends Action {
public FlatViewAction() {
setText("Flat");
DLTKPluginImages.setLocalImageDescriptors(this, "flatLayout.png"); //$NON-NLS-1$
}
@Override
public void run()
{
part.switchFlatView();
}
}
private class BundleViewAction extends Action {
public BundleViewAction() {
setText("Bundles");
DLTKPluginImages.setLocalImageDescriptors(this, "hierarchicalLayout.png"); //$NON-NLS-1$
}
@Override
public void run()
{
part.switchBundleView();
}
}
private class PublicFilter extends Action {
public PublicFilter() {
super("Hide private services", IAction.AS_CHECK_BOX);
DLTKPluginImages.setLocalImageDescriptors(this, "public_co.png"); //$NON-NLS-1$
}
@Override
public void run()
{
part.setPublicFilter(isChecked());
}
}
private class SortAction extends Action {
public SortAction() {
super("Sort order", IAction.AS_CHECK_BOX);
DLTKPluginImages.setLocalImageDescriptors(this, "alphab_sort_co.png"); //$NON-NLS-1$
}
@Override
public void run()
{
part.setSort(!isChecked());
}
}
private class TagFilterAction extends Action implements IMenuCreator {
public TagFilterAction() {
super("Filter by tags", IAction.AS_DROP_DOWN_MENU);
setImageDescriptor(SymfonyPluginImages.DESC_OBJS_TAG);
setMenuCreator(this);
}
@Override
public void run()
{
}
@Override
public void dispose()
{
}
@Override
public Menu getMenu(Control parent)
{
Menu menu = new Menu(parent);
final String remove = "Remove filter";
List<String> tags = new ArrayList<String>();
tags.add(remove);
// get all workspace tags
tags.addAll(SymfonyModelAccess.getDefault().findServiceTags(new Path("/")));
int i = 0;
for (String tag : tags) {
if(tag == null || tag.length() == 0)
continue;
Action action = new Action(tag) {
@Override
public void run()
{
if (getText().equals(remove))
part.filterByTag(null);
else part.filterByTag(getText());
}
};
ActionContributionItem item = new ActionContributionItem(action);
item.fill(menu, -1);
if (i++ == 0) {
new MenuItem(menu, SWT.SEPARATOR);
}
}
return menu;
}
@Override
public Menu getMenu(Menu parent)
{
return null;
}
}
public ServicesViewerActionGroup(ServicePart servicePart) {
part = servicePart;
}
@Override
public void fillActionBars(IActionBars actionBars)
{
super.fillActionBars(actionBars);
setGlobalActionHandlers(actionBars);
fillToolBar(actionBars.getToolBarManager());
fillViewMenu(actionBars.getMenuManager());
}
private void fillViewMenu(IMenuManager menuManager)
{
final MenuManager subMenu = new MenuManager("Service Representation");
subMenu.add(new FlatViewAction());
subMenu.add(new BundleViewAction());
menuManager.add(subMenu);
}
private void fillToolBar(IToolBarManager toolBarManager)
{
toolBarManager.add(new CollapseAction());
toolBarManager.add(new SortAction());
toolBarManager.add(new PublicFilter());
toolBarManager.add(new TagFilterAction());
}
private void setGlobalActionHandlers(IActionBars actionBars)
{
}
}