001 package com.ochafik.lang.compiler;
002
003 import java.io.File;
004 import java.io.IOException;
005 import java.io.InputStream;
006 import java.io.InputStreamReader;
007 import java.io.OutputStream;
008 import java.io.Reader;
009 import java.io.Writer;
010 import java.net.URI;
011 import java.net.URISyntaxException;
012 import java.net.URL;
013 import java.net.URLConnection;
014
015 import javax.tools.FileObject;
016
017 import com.ochafik.io.ReadText;
018
019 public class URLFileObject implements FileObject {
020 URL url;
021
022 public URLFileObject(URL url) {
023 this.url = url;
024 }
025
026 public String getPath() {
027 return url.getFile();
028 }
029
030 @Override
031 public boolean delete() {
032 return false;
033 }
034
035 @Override
036 public CharSequence getCharContent(boolean ignoreEncodingErrors) throws IOException {
037 return ReadText.readText(url);
038 }
039
040 @Override
041 public long getLastModified() {
042 try {
043 URLConnection con = url.openConnection();
044 long lastModified = con.getLastModified();
045 con.getInputStream().close();
046 return lastModified;
047 } catch (Exception ex) {
048 ex.printStackTrace();
049 return -1;
050 }
051 }
052
053 @Override
054 public String getName() {
055 return new File(url.getFile()).getName();
056 }
057
058 @Override
059 public InputStream openInputStream() throws IOException {
060 return url.openStream();
061 }
062
063 @Override
064 public OutputStream openOutputStream() throws IOException {
065 return null;
066 }
067
068 @Override
069 public Reader openReader(boolean arg0) throws IOException {
070 return new InputStreamReader(openInputStream());
071 }
072
073 @Override
074 public Writer openWriter() throws IOException {
075 return null;
076 }
077
078 @Override
079 public URI toUri() {
080 try {
081 return url.toURI();
082 } catch (URISyntaxException e) {
083 e.printStackTrace();
084 return null;
085 }
086 }
087 }