/** * Copyright (c) 2012 committers of YAKINDU and others. * 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: * committers of YAKINDU - initial API and implementation */ package org.yakindu.sct.generator.java.util; import org.eclipse.core.resources.IMarker; import org.eclipse.core.resources.IProject; import org.eclipse.core.resources.IResource; import org.eclipse.core.resources.IncrementalProjectBuilder; import org.eclipse.core.resources.ResourcesPlugin; import org.eclipse.core.runtime.NullProgressMonitor; import org.eclipse.jdt.core.IJavaModelMarker; import org.junit.Assert; import org.yakindu.sct.generator.builder.EclipseContextGeneratorExecutorLookup; import org.yakindu.sct.generator.core.console.IConsoleLogger; import org.yakindu.sct.generator.core.execution.IGeneratorEntryExecutor; import org.yakindu.sct.generator.core.library.ICoreLibraryHelper; import org.yakindu.sct.generator.core.library.impl.DefaultCoreLibraryHelper; import org.yakindu.sct.model.sgen.FeatureConfiguration; import org.yakindu.sct.model.sgen.FeatureParameter; import org.yakindu.sct.model.sgen.FeatureParameterValue; import org.yakindu.sct.model.sgen.FeatureType; import org.yakindu.sct.model.sgen.GeneratorEntry; import org.yakindu.sct.model.sgen.SGenFactory; import org.yakindu.sct.model.sgraph.Statechart; import com.google.inject.Binder; import com.google.inject.Module; import com.google.inject.util.Modules; /** * * @author andreas muelder - Initial contribution and API * */ public abstract class AbstractJavaGeneratorTest { private static final String SRC_GEN = "src-gen"; private static final String TARGET_PROJECT = "targetProject"; private static final String CONTENT_TYPE = "statechart"; private static final String OUTLET_FEATURE = "Outlet"; private static final String TARGET_FOLDER = "targetFolder"; private static final ICoreLibraryHelper outletFeatureConfigurationHelper = new DefaultCoreLibraryHelper(); public IMarker[] generateAndCompile(Statechart statechart) throws Exception { GeneratorEntry entry = createGeneratorEntry(statechart.getName(), SRC_GEN); entry.setElementRef(statechart); IProject targetProject = getProject(entry); targetProject.delete(true, new NullProgressMonitor()); targetProject = getProject(entry); if (!targetProject.exists()) { targetProject.create(new NullProgressMonitor()); targetProject.open(new NullProgressMonitor()); } IGeneratorEntryExecutor executor = new EclipseContextGeneratorExecutorLookup() { protected Module getContextModule() { return Modules.override(super.getContextModule()).with(new Module() { @Override public void configure(Binder binder) { binder.bind(IConsoleLogger.class).to(TestLogger.class); } }); }; }.createExecutor(entry, "yakindu::java"); executor.execute(entry); targetProject.refreshLocal(IResource.DEPTH_INFINITE, null); targetProject.getWorkspace().build(IncrementalProjectBuilder.INCREMENTAL_BUILD, null); targetProject.build(IncrementalProjectBuilder.INCREMENTAL_BUILD, new NullProgressMonitor()); IMarker[] markers = targetProject.findMarkers(IJavaModelMarker.JAVA_MODEL_PROBLEM_MARKER, true, IResource.DEPTH_INFINITE); return markers; } protected IProject getProject(GeneratorEntry entry) { return ResourcesPlugin.getWorkspace().getRoot() .getProject(outletFeatureConfigurationHelper.getTargetProjectValue(entry).getStringValue()); } private GeneratorEntry createGeneratorEntry(String targetProject, String targetFolder) { GeneratorEntry entry = SGenFactory.eINSTANCE.createGeneratorEntry(); entry.setContentType(CONTENT_TYPE); FeatureConfiguration config = SGenFactory.eINSTANCE.createFeatureConfiguration(); FeatureType type = SGenFactory.eINSTANCE.createFeatureType(); type.setName(OUTLET_FEATURE); config.setType(type); FeatureParameterValue project = SGenFactory.eINSTANCE.createFeatureParameterValue(); FeatureParameter projectParameter = SGenFactory.eINSTANCE.createFeatureParameter(); projectParameter.setName(TARGET_PROJECT); project.setParameter(projectParameter); project.setValue(targetProject); config.getParameterValues().add(project); FeatureParameterValue targetFolderValue = SGenFactory.eINSTANCE.createFeatureParameterValue(); FeatureParameter targetParameter = SGenFactory.eINSTANCE.createFeatureParameter(); targetParameter.setName(TARGET_FOLDER); targetFolderValue.setParameter(targetParameter); targetFolderValue.setValue(targetFolder); config.getParameterValues().add(targetFolderValue); entry.getFeatures().add(config); return entry; } public static class TestLogger implements IConsoleLogger { @Override public void logError(Throwable t) { t.printStackTrace(); Assert.fail(t.getMessage()); } @Override public void log(String line) { } @Override public void close() { } } }