/******************************************************************************* * Copyright (c) 2009-2013 CWI * 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: * * Jurgen J. Vinju - Jurgen.Vinju@cwi.nl - CWI * * Paul Klint - Paul.Klint@cwi.nl - CWI * * Arnold Lankamp - Arnold.Lankamp@cwi.nl * * Michael Steindorfer - Michael.Steindorfer@cwi.nl - CWI *******************************************************************************/ package org.rascalmpl.uri.file; import java.io.BufferedOutputStream; import java.io.File; import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; import java.net.URISyntaxException; import java.nio.charset.Charset; import org.rascalmpl.uri.BadURIException; import org.rascalmpl.uri.ISourceLocationInputOutput; import org.rascalmpl.uri.URIUtil; import org.rascalmpl.value.ISourceLocation; public class FileURIResolver implements ISourceLocationInputOutput { public FileURIResolver(){ super(); } public InputStream getInputStream(ISourceLocation uri) throws IOException { String path = getPath(uri); if (path != null) { return new FileInputStream(path); } throw new IOException("uri has no path: " + uri); } public OutputStream getOutputStream(ISourceLocation uri, boolean append) throws IOException { String path = getPath(uri); if (path != null) { return new BufferedOutputStream(new FileOutputStream(getPath(uri), append)); } throw new IOException("uri has no path: " + uri); } @Override public void remove(ISourceLocation uri) throws IOException { new File(getPath(uri)).delete(); } public String scheme() { return "file"; } public boolean exists(ISourceLocation uri) { return new File(getPath(uri)).exists(); } /** * To override to build resolvers to specific locations using a prefix for example. */ protected String getPath(ISourceLocation uri) { return uri.getPath(); } public boolean isDirectory(ISourceLocation uri) { return new File(getPath(uri)).isDirectory(); } public boolean isFile(ISourceLocation uri) { return new File(getPath(uri)).isFile(); } public long lastModified(ISourceLocation uri) { return new File(getPath(uri)).lastModified(); } @Override public String[] list(ISourceLocation uri) { return new File(getPath(uri)).list(); } public void mkDirectory(ISourceLocation uri) { new File(getPath(uri)).mkdirs(); } /** * Utility function to create a URI from an absolute path. * * @param path a platform-dependent string representation of this path * @return a file schema URI */ public static ISourceLocation constructFileURI(String path) { try{ return URIUtil.createFileLocation(path); }catch(URISyntaxException usex){ throw new BadURIException(usex); } } public boolean supportsHost() { return false; } @Override public Charset getCharset(ISourceLocation uri) throws IOException { return null; } }