/**
* <copyright> Copyright (c) 2008-2009 Jonas Helming, Maximilian Koegel. All rights reserved. This program and the
* accompanying materials are made available under the terms of the Eclipse Public License v1.0 which accompanies this
* distribution, and is available at http://www.eclipse.org/legal/epl-v10.html </copyright>
*/
package org.eclipse.emf.emfstore.client.ui.views.users;
import java.util.Collection;
import java.util.HashSet;
import java.util.Iterator;
import org.eclipse.core.commands.ExecutionException;
import org.eclipse.core.commands.NotEnabledException;
import org.eclipse.core.commands.NotHandledException;
import org.eclipse.core.commands.common.NotDefinedException;
import org.eclipse.core.expressions.IEvaluationContext;
import org.eclipse.emf.common.util.BasicEList;
import org.eclipse.emf.ecore.EClass;
import org.eclipse.emf.ecore.EObject;
import org.eclipse.emf.ecp.common.model.AbstractECPMetaModelElementContext;
import org.eclipse.emf.ecp.common.model.AbstractECPModelElementContext;
import org.eclipse.emf.ecp.common.model.ECPAssociationClassElement;
import org.eclipse.emf.ecp.common.model.ECPMetaModelElementContext;
import org.eclipse.emf.ecp.common.util.ModelElementOpener;
import org.eclipse.emf.ecp.common.utilities.ActionHelper;
import org.eclipse.emf.edit.domain.AdapterFactoryEditingDomain;
import org.eclipse.emf.edit.domain.EditingDomain;
import org.eclipse.emf.emfstore.client.ui.util.EMFStoreMessageDialog;
import org.eclipse.emf.emfstore.server.model.accesscontrol.ACOrgUnit;
import org.eclipse.emf.emfstore.server.model.accesscontrol.Role;
import org.eclipse.ui.PlatformUI;
import org.eclipse.ui.handlers.IHandlerService;
/**
* @author boehlke
*
*/
public class EcpModelElementOpener implements ModelElementOpener {
private UserUiController controller;
public EcpModelElementOpener() {
this.controller = UserUiController.getInstance();
}
/**
* {@inheritDoc}
*
* @see org.eclipse.emf.ecp.common.util.ModelElementOpener#canOpen(org.eclipse.emf.ecore.EObject)
*/
public int canOpen(EObject modelElement) {
Class<?>[] supportedClasses = new Class<?>[] { ACOrgUnit.class, Role.class };
for (Class<?> clazz : supportedClasses) {
if (clazz.isAssignableFrom(modelElement.getClass())) {
return 100;
}
}
return DONOTOPEN;
}
/**
* {@inheritDoc}
*
* @see org.eclipse.emf.ecp.common.util.ModelElementOpener#openModelElement(org.eclipse.emf.ecore.EObject)
*/
public void openModelElement(EObject modelElement) {
PlatformUI.getWorkbench().getActiveWorkbenchWindow().getActivePage().closeAllEditors(true);
IHandlerService handlerService = (IHandlerService) PlatformUI.getWorkbench().getService(IHandlerService.class);
IEvaluationContext context = handlerService.getCurrentState();
context.addVariable(ActionHelper.ME_TO_OPEN_EVALUATIONCONTEXT_VARIABLE, modelElement);
try {
context.addVariable(ActionHelper.MECONTEXT_EVALUATIONCONTEXT_VARIABLE,
new AbstractECPModelElementContext() {
private HashSet<EObject> allElements;
private AdapterFactoryEditingDomain domain;
public ECPMetaModelElementContext getMetaModelElementContext() {
return new AbstractECPMetaModelElementContext() {
public boolean isAssociationClassElement(EClass eClazz) {
return false;
}
public boolean isAssociationClassElement(EObject eObject) {
return false;
}
public ECPAssociationClassElement getAssociationClassElement(EObject eObject) {
return null;
}
@Override
public boolean isNonDomainElement(EClass eClass) {
return false;
}
};
}
public EditingDomain getEditingDomain() {
return controller.getEditingDomain();
}
public Collection<EObject> getAllModelElementsbyClass(EClass clazz, boolean association) {
Collection<EObject> ret = new BasicEList<EObject>();
for (EObject element : getAllModelElements()) {
if ((element.eClass() == clazz || clazz.isInstance(element))
&& (association || !getMetaModelElementContext().isAssociationClassElement(element))) {
ret.add(element);
}
}
return ret;
}
public Collection<EObject> getAllModelElements() {
allElements = new HashSet<EObject>();
Iterator<EObject> iterator = controller.getPermissionSet().eAllContents();
while (iterator.hasNext()) {
allElements.add(iterator.next());
}
return allElements;
}
public void dispose() {
}
public boolean contains(EObject eObject) {
return allElements.contains(eObject);
}
});
handlerService.executeCommand(ActionHelper.MEEDITOR_OPENMODELELEMENT_COMMAND_ID, null);
} catch (ExecutionException e) {
EMFStoreMessageDialog.showExceptionDialog(e);
} catch (NotDefinedException e) {
EMFStoreMessageDialog.showExceptionDialog(e);
} catch (NotEnabledException e) {
EMFStoreMessageDialog.showExceptionDialog(e);
} catch (NotHandledException e) {
EMFStoreMessageDialog.showExceptionDialog(e);
}
}
}