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 }