/**
*
*/
package de.hannesniederhausen.storynotes.ui.internal.navigation.widgets;
import java.util.ArrayList;
import java.util.List;
import org.eclipse.e4.core.contexts.IEclipseContext;
import org.eclipse.emf.ecore.EObject;
import org.eclipse.jface.action.IAction;
import de.hannesniederhausen.storynotes.model.Category;
import de.hannesniederhausen.storynotes.model.File;
import de.hannesniederhausen.storynotes.model.Project;
import de.hannesniederhausen.storynotes.ui.internal.actions.AbstractCreationAction;
import de.hannesniederhausen.storynotes.ui.internal.actions.CreateProjectAction;
import de.hannesniederhausen.storynotes.ui.internal.services.ICategoryProviderManager;
import de.hannesniederhausen.storynotes.ui.services.ICategoryProviderService;
/**
* @author Hannes Niederhausen
*
*/
public class StoryNotesActionProvider implements IActionProvider {
private IEclipseContext context;
private ICategoryProviderManager categoryProviderManager;
@Override
public IAction[] getActions(Object element) {
if (element instanceof File) {
return new IAction[]{getAction((EObject)element, CreateProjectAction.class)};
}
if (element instanceof Project) {
List<IAction> actionList = new ArrayList<IAction>();
for (ICategoryProviderService cps : categoryProviderManager.getServices()) {
IAction a = cps.getCategoryActions(context, (EObject) element);
if (a.isEnabled())
actionList.add(a);
}
return actionList.toArray(new IAction[actionList.size()]);
}
if (element instanceof Category) {
ICategoryProviderService s = categoryProviderManager.getServiceFor(((Category)element).getClass());
return s.getNoteActions(context, (EObject) element);
}
return new IAction[0];
}
public void setContext(IEclipseContext context) {
this.context = context;
this.categoryProviderManager = context.get(ICategoryProviderManager.class);
}
private IAction getAction(EObject element, Class<? extends AbstractCreationAction> clazz) {
try {
AbstractCreationAction a = (AbstractCreationAction) clazz.newInstance();
a.setParentElement(element);
a.setContext(context);
return a;
} catch (Exception e) {
e.printStackTrace();
throw new RuntimeException(e);
}
}
}