| /** |
| * Copyright (c) 2009-2010 Thales Corporate Services S.A.S. |
| * This program and the accompanying materials |
| * are made available under the terms of the Eclipse Public License v2.0 |
| * which accompanies this distribution, and is available at |
| * https://www.eclipse.org/legal/epl-v2.0 |
| * |
| * SPDX-License-Identifier: EPL-2.0 |
| * |
| * Contributors: |
| * Thales Corporate Services S.A.S - initial API and implementation |
| */ |
| package org.eclipse.egf.model.editor.adapter; |
| |
| import java.util.Collection; |
| |
| import org.eclipse.core.resources.IProject; |
| import org.eclipse.egf.common.helper.EMFHelper; |
| import org.eclipse.egf.common.ui.helper.ThrowableHandler; |
| import org.eclipse.egf.core.pde.tools.ConvertProjectOperation; |
| import org.eclipse.egf.model.editor.EGFModelEditorPlugin; |
| import org.eclipse.egf.model.fcore.ModelElement; |
| import org.eclipse.egf.model.ftask.FtaskPackage; |
| import org.eclipse.egf.model.pattern.PatternPackage; |
| import org.eclipse.egf.model.types.TypesPackage; |
| import org.eclipse.emf.common.notify.Notification; |
| import org.eclipse.emf.ecore.EObject; |
| import org.eclipse.emf.ecore.resource.Resource; |
| import org.eclipse.emf.ecore.resource.impl.ResourceImpl; |
| import org.eclipse.emf.ecore.util.EContentAdapter; |
| import org.eclipse.emf.ecore.util.EcoreUtil; |
| import org.eclipse.jdt.core.IJavaProject; |
| import org.eclipse.jdt.core.JavaCore; |
| import org.eclipse.jdt.core.JavaModelException; |
| import org.eclipse.ui.IWorkbenchPartSite; |
| import org.eclipse.ui.IWorkbenchWindow; |
| |
| /** |
| * @author Xavier Maysonnave |
| * |
| */ |
| public class ModelElementBundleAdapter extends EContentAdapter { |
| |
| private Resource _resource; |
| |
| private IWorkbenchWindow _window; |
| |
| public ModelElementBundleAdapter(Resource resource) { |
| _window = EGFModelEditorPlugin.getActiveWorkbenchWindow(); |
| _resource = resource; |
| } |
| |
| public ModelElementBundleAdapter(Resource resource, IWorkbenchPartSite site) { |
| _window = site != null ? site.getWorkbenchWindow() : EGFModelEditorPlugin.getActiveWorkbenchWindow(); |
| _resource = resource; |
| } |
| |
| @Override |
| public void notifyChanged(Notification notification) { |
| super.notifyChanged(notification); |
| if (notification.getNewValue() != null && notification.getNewValue() instanceof ModelElement) { |
| handleNotification(notification); |
| } |
| } |
| |
| private void handleNotification(Notification notification) { |
| |
| if (notification.getEventType() == Notification.ADD || notification.getEventType() == Notification.SET || notification.getEventType() == Notification.ADD_MANY) { |
| |
| ModelElement modelElement = (ModelElement) notification.getNewValue(); |
| Resource resource = modelElement.eResource(); |
| if (resource != _resource || ((ResourceImpl) resource).isLoading()) { |
| return; |
| } |
| IProject project = EMFHelper.getProject(resource); |
| if (project == null) { |
| return; |
| } |
| // Check whether or not we have Pattern in this new element |
| Collection<EObject> patterns = EMFHelper.getAllProperContents(PatternPackage.eINSTANCE.getPattern(), EcoreUtil.getRootContainer(modelElement, true)); |
| // Check whether or not we a new task in this new element |
| Collection<EObject> tasks = EMFHelper.getAllProperContents(FtaskPackage.eINSTANCE.getTask(), EcoreUtil.getRootContainer(modelElement, true)); |
| // Check whether or not we have a new TypeClass in this new element |
| Collection<EObject> typeClasses = EMFHelper.getAllProperContents(TypesPackage.eINSTANCE.getTypeClass(), EcoreUtil.getRootContainer(modelElement, true)); |
| // Project converter |
| ConvertProjectOperation operation = null; |
| if (patterns.isEmpty() && tasks.isEmpty()) { |
| |
| // Convert |
| if (typeClasses.isEmpty() == false) { |
| |
| // Do not convert if we already belong to a bundle java |
| // project |
| IJavaProject javaProject = JavaCore.create(project); |
| if (javaProject != null && javaProject.exists()) { |
| try { |
| javaProject.close(); |
| } catch (JavaModelException jme) { |
| // Just Ignore |
| } |
| return; |
| } |
| |
| operation = new ConvertProjectOperation(project, true, true); |
| operation.setInitialDependencies(new String[] { "org.eclipse.egf.model.ftask" });//$NON-NLS-1$ |
| operation.setInitialSourceFolders(new String[] { "src" });//$NON-NLS-1$ |
| } |
| |
| } else if (patterns.isEmpty() && tasks.isEmpty() == false) { |
| operation = new ConvertProjectOperation(project, true, true); |
| operation.setInitialDependencies(new String[] { "org.eclipse.egf.model.ftask" });//$NON-NLS-1$ |
| operation.setInitialSourceFolders(new String[] { "src" });//$NON-NLS-1$ |
| } else { |
| |
| operation = new ConvertProjectOperation(project, true, true); |
| operation.setInitialDependencies(new String[] { "org.eclipse.egf.pattern", "org.eclipse.egf.pattern.ftask" });//$NON-NLS-1$ |
| operation.setInitialSourceFolders(new String[] { "generated" });//$NON-NLS-1$ |
| |
| } |
| // synchronous operation, runned in thread UI |
| try { |
| if (operation != null) { |
| _window.run(false, false, operation); |
| _window.getWorkbench().getDisplay().readAndDispatch(); |
| } |
| } catch (InterruptedException ie) { |
| // Nothing to do |
| } catch (Exception e) { |
| ThrowableHandler.handleThrowable(EGFModelEditorPlugin.getPlugin().getSymbolicName(), e); |
| } |
| |
| } |
| |
| } |
| |
| } |