/** * Copyright (c) 2015 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.builder.efs; import java.io.File; import org.eclipse.core.resources.IFile; import org.eclipse.core.resources.IProject; import org.eclipse.core.resources.IWorkspace; import org.eclipse.core.runtime.NullProgressMonitor; import org.eclipse.emf.common.util.URI; import org.eclipse.xtext.builder.EclipseResourceFileSystemAccess2; import org.eclipse.xtext.generator.OutputConfiguration; import org.yakindu.sct.generator.core.filesystem.ISCTFileSystemAccess; import com.google.inject.Inject; import com.google.inject.Singleton; /** * * @author Johannes Dicks - Initial contribution and API * */ @Singleton public class SCTEclipseResourceFileSystemAccess extends EclipseResourceFileSystemAccess2 implements ISCTFileSystemAccess { @Inject private IWorkspace ws; public SCTEclipseResourceFileSystemAccess() { setMonitor(new NullProgressMonitor()); } public void setContext(String projectName) { IProject project = ws.getRoot().getProject(projectName); super.setProject(project); } @Override public URI getURI(String path, String outputConfiguration) { OutputConfiguration outputConfig = getOutputConfig(outputConfiguration); String outputDir = outputConfig.getOutputDirectory(); if (isRootPath(outputDir) && isRootPath(path)) { return URI.createFileURI(getProject().getLocationURI().getPath()); } IFile file = getProject().getFile(outputDir + File.separator + path); if (file != null) { return URI.createFileURI(file.getLocationURI().getPath()); } return super.getURI(path); } protected boolean isRootPath(String path) { return (".".equals(path) || "/".equals(path) || "./".equals(path) || "".equals(path)); } }