/******************************************************************************* * Copyright (c) 2010-2012, 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: * Zoltan Ujhelyi - initial API and implementation *******************************************************************************/ package org.eclipse.incquery.tooling.generator.model.ui; import org.apache.log4j.Logger; import org.eclipse.core.resources.IProject; import org.eclipse.core.runtime.CoreException; import org.eclipse.emf.codegen.ecore.genmodel.GenModel; import org.eclipse.emf.ecore.resource.Resource; import org.eclipse.incquery.tooling.core.project.ProjectGenerationHelper; import org.eclipse.incquery.tooling.generator.model.generatorModel.GeneratorModelReference; import org.eclipse.incquery.tooling.generator.model.validation.GeneratorModelJavaValidator; import org.eclipse.xtext.common.types.access.jdt.IJavaProjectProvider; import org.eclipse.xtext.validation.Check; import com.google.inject.Inject; public class GenmodelProjectBasedValidation extends GeneratorModelJavaValidator { public static final String GENMODEL_DEPENDENCY = "org.eclipse.incquery.tooling.generator.model.ui." + "genmodel_dependency"; @Inject private IJavaProjectProvider projectProvider; @Inject private Logger logger; @Check public void checkGenmodelDependencies(GeneratorModelReference ref) { Resource res = ref.eResource(); if (res != null && projectProvider != null) { IProject project = projectProvider.getJavaProject(res.getResourceSet()).getProject(); final GenModel genmodel = ref.getGenmodel(); if (genmodel != null) { checkExistingDependency(ref, project, genmodel); } } } private void checkExistingDependency(final GeneratorModelReference ref, IProject project, final GenModel genmodel) { String modelPluginID = genmodel.getModelPluginID(); try { if (modelPluginID != null && !modelPluginID.isEmpty() && !ProjectGenerationHelper.checkBundleDependency(project, modelPluginID)) { error(String.format( "To refer elements from the Generator Model %s the bundle %s must be added as dependency", genmodel.eResource().getURI().toString(), modelPluginID), ref, null, GENMODEL_DEPENDENCY, modelPluginID); } } catch (CoreException e) { logger.error("Error checking project: ", e); } } }