/******************************************************************************* * Copyright (c) 2010-2012, Tamas Szabo, Zoltan Ujhelyi, Istvan Rath and Daniel Varro * 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 * * Contributors: * Tamas Szabo, Zoltan Ujhelyi - initial API and implementation *******************************************************************************/ package org.eclipse.incquery.tooling.ui.wizards.internal.operations; import java.io.IOException; import java.util.List; import org.eclipse.core.resources.IFile; import org.eclipse.core.resources.IProject; import org.eclipse.core.runtime.CoreException; import org.eclipse.core.runtime.IProgressMonitor; import org.eclipse.core.runtime.IStatus; import org.eclipse.core.runtime.Status; import org.eclipse.core.runtime.SubProgressMonitor; import org.eclipse.emf.codegen.ecore.genmodel.GenModel; import org.eclipse.emf.common.util.EList; import org.eclipse.incquery.tooling.core.generator.genmodel.IEiqGenmodelProvider; import org.eclipse.incquery.tooling.core.project.IncQueryNature; import org.eclipse.incquery.tooling.generator.model.generatorModel.GeneratorModelFactory; import org.eclipse.incquery.tooling.generator.model.generatorModel.GeneratorModelReference; import org.eclipse.incquery.tooling.generator.model.generatorModel.IncQueryGeneratorModel; import org.eclipse.incquery.tooling.ui.IncQueryGUIPlugin; import org.eclipse.ui.actions.WorkspaceModifyOperation; import org.eclipse.xtext.ui.resource.IResourceSetProvider; import org.eclipse.xtext.util.StringInputStream; public class CreateGenmodelOperation extends WorkspaceModifyOperation { private final IProject project; private final List<GenModel> genmodels; private final IEiqGenmodelProvider genmodelProvider; private final IResourceSetProvider resourceSetProvider; public CreateGenmodelOperation(IProject project, List<GenModel> genmodels, IEiqGenmodelProvider genmodelProvider, IResourceSetProvider resourceSetProvider) { this.project = project; this.genmodels = genmodels; this.genmodelProvider = genmodelProvider; this.resourceSetProvider = resourceSetProvider; } @Override protected void execute(IProgressMonitor monitor) throws CoreException { try { IncQueryGeneratorModel generatorModel = genmodelProvider.getGeneratorModel(project, resourceSetProvider.get(project)); EList<GeneratorModelReference> genmodelRefs = generatorModel.getGenmodels(); for (GenModel ecoreGenmodel : genmodels) { GeneratorModelReference ref = GeneratorModelFactory.eINSTANCE.createGeneratorModelReference(); ref.setGenmodel(ecoreGenmodel); genmodelRefs.add(ref); } if (genmodelRefs.isEmpty()) { IFile file = project.getFile(IncQueryNature.IQGENMODEL); file.create(new StringInputStream(""), false, new SubProgressMonitor(monitor, 1)); } else { genmodelProvider.saveGeneratorModel(project, generatorModel); } } catch (IOException e) { throw new CoreException(new Status(IStatus.ERROR, IncQueryGUIPlugin.PLUGIN_ID, "Cannot create generator model: " + e.getMessage(), e)); } } }