/******************************************************************************* * Copyright (c) 2010-2012, Zoltan Ujhelyi, Mark Czotter, 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, Mark Czotter - initial API and implementation *******************************************************************************/ package org.eclipse.incquery.tooling.core.generator.builder; import java.util.HashMap; import java.util.Map; import org.eclipse.core.resources.IFile; import org.eclipse.core.resources.IProject; import org.eclipse.core.runtime.NullProgressMonitor; import org.eclipse.xtext.builder.EclipseOutputConfigurationProvider; import org.eclipse.xtext.builder.EclipseResourceFileSystemAccess2; import org.eclipse.xtext.generator.OutputConfiguration; import com.google.inject.Inject; import com.google.inject.Provider; public class EclipseResourceSupport { private static final class EclipseResourceFileCallback implements EclipseResourceFileSystemAccess2.IFileCallback { public boolean beforeFileDeletion(IFile file) { return true; } public void afterFileUpdate(IFile file) { handleFileAccess(file); } public void afterFileCreation(IFile file) { handleFileAccess(file); } protected void handleFileAccess(IFile file) { } } @Inject private Provider<EclipseResourceFileSystemAccess2> fileSystemAccessProvider; @Inject private EclipseOutputConfigurationProvider outputConfigurationProvider; /** * Calculates a file system access component for the selected target project. This is required for code generation * API. * * @param targetProject * @return an initialized file system access component for the */ public EclipseResourceFileSystemAccess2 createProjectFileSystemAccess(IProject targetProject) { EclipseResourceFileSystemAccess2 fsa = fileSystemAccessProvider.get(); fsa.setProject(targetProject); fsa.setMonitor(new NullProgressMonitor()); Map<String, OutputConfiguration> outputs = new HashMap<String, OutputConfiguration>(); for (OutputConfiguration conf : outputConfigurationProvider.getOutputConfigurations(targetProject)) { outputs.put(conf.getName(), conf); } fsa.setOutputConfigurations(outputs); fsa.setPostProcessor(new EclipseResourceFileCallback()); return fsa; } }