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    }