001: /*
002: * $Id: Path.java 456899 2005-06-05 18:37:38Z jonl $ $Revision: 456899 $
003: * $Date: 2005-06-05 20:37:38 +0200 (Sun, 05 Jun 2005) $
004: *
005: * ==============================================================================
006: * Licensed under the Apache License, Version 2.0 (the "License"); you may not
007: * use this file except in compliance with the License. You may obtain a copy of
008: * the License at
009: *
010: * http://www.apache.org/licenses/LICENSE-2.0
011: *
012: * Unless required by applicable law or agreed to in writing, software
013: * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
014: * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
015: * License for the specific language governing permissions and limitations under
016: * the License.
017: */
018: package wicket.util.file;
019:
020: import java.net.MalformedURLException;
021: import java.net.URL;
022: import java.util.ArrayList;
023: import java.util.Iterator;
024: import java.util.List;
025:
026: import wicket.util.string.StringList;
027:
028: /**
029: * Mantains a list of folders as a path.
030: *
031: * @author Jonathan Locke
032: */
033: public final class Path implements IResourcePath {
034: /** The list of folders in the path */
035: private final List folders = new ArrayList();
036:
037: /**
038: * Constructor
039: */
040: public Path() {
041: }
042:
043: /**
044: * Constructor
045: *
046: * @param folder
047: * A single folder to add to the path
048: */
049: public Path(final Folder folder) {
050: add(folder);
051: }
052:
053: /**
054: * Constructor
055: *
056: * @param folders
057: * An array of folders to add to the path
058: */
059: public Path(final Folder[] folders) {
060: for (int i = 0; i < folders.length; i++) {
061: add(folders[i]);
062: }
063: }
064:
065: /**
066: * @param folder
067: * Folder to add to path
068: */
069: public void add(final Folder folder) {
070: if (!folder.exists()) {
071: throw new IllegalArgumentException("Folder " + folder
072: + " does not exist");
073: }
074:
075: folders.add(folder);
076: }
077:
078: /**
079: * @param path
080: * Folder to add to path
081: * @see wicket.util.file.IResourcePath#add(java.lang.String)
082: */
083: public void add(final String path) {
084: add(new Folder(path));
085: }
086:
087: /**
088: * Looks for a given pathname along this path
089: *
090: * @param pathname
091: * The filename with possible path
092: * @return The url located on the path
093: */
094: public URL find(final String pathname) {
095: for (final Iterator iterator = folders.iterator(); iterator
096: .hasNext();) {
097: final Folder folder = (Folder) iterator.next();
098: final File file = new File(folder, pathname);
099:
100: if (file.exists()) {
101: try {
102: return file.toURI().toURL();
103: } catch (MalformedURLException ex) {
104: // ignore
105: }
106: }
107: }
108:
109: return null;
110: }
111:
112: /**
113: * @return Returns the folders.
114: */
115: public List getFolders() {
116: return folders;
117: }
118:
119: /**
120: * @return Number of folders on the path.
121: */
122: public int size() {
123: return folders.size();
124: }
125:
126: /**
127: * @see java.lang.Object#toString()
128: */
129: public String toString() {
130: return "[folders = " + StringList.valueOf(folders) + "]";
131: }
132: }
|