/* * Copyright 2013 Guidewire Software, Inc. */ package gw.fs.jar; import gw.fs.IDirectoryUtil; import gw.fs.IFile; import gw.fs.IResource; import gw.lang.UnstableAPI; import gw.fs.IDirectory; import java.io.IOException; import java.util.List; import java.util.Map; import java.util.HashMap; import java.util.ArrayList; @UnstableAPI public class JarEntryDirectoryImpl extends JarEntryResourceImpl implements IJarFileDirectory { private Map<String, IResource> _resources = new HashMap<String, IResource>(); private List<IDirectory> _childDirs = new ArrayList<IDirectory>(); private List<IFile> _childFiles = new ArrayList<IFile>(); public JarEntryDirectoryImpl(String name, IJarFileDirectory parent, JarFileDirectoryImpl jarFile) { super(name, parent, jarFile); } @Override public JarEntryDirectoryImpl getOrCreateDirectory(String relativeName) { JarEntryDirectoryImpl result = (JarEntryDirectoryImpl) _resources.get(relativeName); if (result == null) { result = new JarEntryDirectoryImpl(relativeName, this, _jarFile); _resources.put(relativeName, result); _childDirs.add(result); } return result; } @Override public JarEntryFileImpl getOrCreateFile(String relativeName) { JarEntryFileImpl result = (JarEntryFileImpl) _resources.get(relativeName); if (result == null) { result = new JarEntryFileImpl(relativeName, this, _jarFile); _resources.put(relativeName, result); _childFiles.add(result); } return result; } @Override public IDirectory dir(String relativePath) { return IDirectoryUtil.dir(this, relativePath); } @Override public IFile file(String path) { return IDirectoryUtil.file(this, path); } @Override public boolean mkdir() throws IOException { throw new UnsupportedOperationException(); } @Override public List<? extends IDirectory> listDirs() { List<IDirectory> results = new ArrayList<IDirectory>(); for (IDirectory child : _childDirs) { if (child.exists()) { results.add(child); } } return results; } @Override public List<? extends IFile> listFiles() { List<IFile> results = new ArrayList<IFile>(); for (IFile child : _childFiles) { if (child.exists()) { results.add(child); } } return results; } @Override public String relativePath(IResource resource) { return IDirectoryUtil.relativePath(this, resource); } @Override public void clearCaches() { // Do nothing } }