| /* |
| * |
| * Licensed to the Apache Software Foundation (ASF) under one or more |
| * contributor license agreements. See the NOTICE file distributed with |
| * this work for additional information regarding copyright ownership. |
| * The ASF licenses this file to You under the Apache License, Version 2.0 |
| * (the "License"); you may not use this file except in compliance with |
| * the License. You may obtain a copy of the License at |
| * |
| * http://www.apache.org/licenses/LICENSE-2.0 |
| * |
| * Unless required by applicable law or agreed to in writing, software |
| * distributed under the License is distributed on an "AS IS" BASIS, |
| * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
| * See the License for the specific language governing permissions and |
| * limitations under the License. |
| * |
| */ |
| |
| package flex2.compiler.io; |
| |
| //import flash.util.FileUtils; |
| //import flash.util.Trace; |
| import flex2.compiler.util.MimeMappings; |
| |
| import java.io.File; |
| import java.io.IOException; |
| import java.io.InputStream; |
| import java.net.MalformedURLException; |
| |
| /** |
| * A VirtualFile implemenation, which is backed by a file on a local |
| * disk. |
| * |
| * @author Clement Wong |
| */ |
| public class LocalFile implements VirtualFile |
| { |
| |
| public LocalFile(File f) |
| { |
| this.f = f; |
| } |
| |
| private File f; |
| private String name; |
| private String mimeType; |
| |
| /** |
| * Return name... It could be canonical path name, URL, etc. But it must be unique among all the files |
| * processed by the compiler... |
| * |
| * The compiler should not use this to get... e.g. parent path... There is no guarantee that this returns |
| * a pathname even though the underlying implementation deals with files... |
| */ |
| public String getName() |
| { |
| if (name == null) |
| { |
| name = FileUtil.getCanonicalPath(f); |
| f = FileUtil.openFile(name); |
| } |
| |
| return name; |
| } |
| |
| public String getNameForReporting() |
| { |
| return getName(); |
| } |
| |
| @SuppressWarnings("deprecation") |
| public String getURL() |
| { |
| try |
| { |
| return f.toURL().toExternalForm(); |
| } |
| catch (MalformedURLException ex) |
| { |
| return null; |
| } |
| } |
| |
| // This is temporary... |
| public String getParent() |
| { |
| return f.getParentFile().getAbsolutePath(); |
| } |
| |
| public boolean isDirectory() |
| { |
| return f.isDirectory(); |
| } |
| |
| /** |
| * Return file size... |
| */ |
| public long size() |
| { |
| return f.length(); |
| } |
| |
| /** |
| * Return mime type |
| */ |
| public String getMimeType() |
| { |
| if (mimeType == null) |
| { |
| mimeType = MimeMappings.getMimeType(getName()); |
| } |
| return mimeType; |
| } |
| |
| /** |
| * Return input stream... |
| */ |
| public InputStream getInputStream() throws IOException |
| { |
| return FileUtil.openStream(f); |
| } |
| |
| public byte[] toByteArray() throws IOException |
| { |
| return null; |
| } |
| |
| /** |
| * Return last time the underlying source is modified. |
| */ |
| public long getLastModified() |
| { |
| return f.lastModified(); |
| } |
| |
| /** |
| * Return an instance of this interface which represents the specified relative path. |
| */ |
| public VirtualFile resolve(String relativeStr) |
| { |
| File relativeFile = null; |
| |
| if (f.isDirectory()) |
| { |
| relativeFile = FileUtil.openFile(f, relativeStr); |
| } |
| else if (f.isFile()) |
| { |
| relativeFile = FileUtil.openFile(f.getParentFile(), relativeStr); |
| } |
| |
| VirtualFile result = null; |
| |
| if (relativeFile != null && relativeFile.exists()) |
| { |
| result = new LocalFile(relativeFile); |
| } |
| |
| /* AJH later |
| if ((result != null) && Trace.pathResolver) |
| { |
| Trace.trace("LocalFile.resolve: resolved " + relativeStr + " to " + result.getName()); |
| } |
| (*/ |
| |
| return result; |
| } |
| |
| /** |
| * Signal the hosting environment that this instance is no longer used. |
| */ |
| public void close() |
| { |
| } |
| |
| public boolean equals(Object obj) |
| { |
| boolean result = false; |
| |
| if (obj instanceof LocalFile) |
| { |
| result = (this == obj) || getName().equals(((LocalFile) obj).getName()); |
| } |
| |
| return result; |
| } |
| |
| public int hashCode() |
| { |
| return getName().hashCode(); |
| } |
| |
| public boolean isTextBased() |
| { |
| return false; |
| } |
| |
| public String toString() |
| { |
| return getName(); |
| } |
| } |
| |
| |