View Javadoc

1   /**************************************************************************
2   Copyright 2005 Webstersmalley
3   
4   Licensed under the Apache License, Version 2.0 (the "License");
5   you may not use this file except in compliance with the License.
6   You may obtain a copy of the License at
7   
8       http://www.apache.org/licenses/LICENSE-2.0
9   
10  Unless required by applicable law or agreed to in writing, software
11  distributed under the License is distributed on an "AS IS" BASIS,
12  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13  See the License for the specific language governing permissions and
14  limitations under the License.
15  *************************************************************************/
16  
17  
18  package com.webstersmalley.picweb.utils;
19  
20  import java.io.File;
21  import java.util.ArrayList;
22  import java.util.Collections;
23  import java.util.Iterator;
24  import java.util.List;
25  
26  
27  /***
28   * @author Matthew Smalley
29   */
30  public class FolderContents
31  {
32  	private static FolderFileFilter folderFileFilter = new FolderFileFilter();
33  	private static PictureFilenameFilter pictureFilenameFilter = new PictureFilenameFilter();
34  	
35  	private String rootPath;
36  	private String relativePath;
37  	private String path;
38  	
39  	private List folders;
40  	private List pictures;
41  	private int pictureCount = 0;
42  	private int folderDepth;
43  	private String topName;
44  	
45  	public FolderContents(String rootPath)
46  	{
47  		this.rootPath = rootPath;
48  		this.relativePath = ".";
49  		this.path = rootPath + File.separator + relativePath;
50  		this.folderDepth = 0;
51  		this.topName = "Pictures";
52  		recurse();
53  	}
54  	
55  	private FolderContents(String rootPath, String relativePath, int folderDepth)
56  	{
57  		this.rootPath = rootPath;
58  		this.relativePath = relativePath;
59  		this.path = rootPath + File.separator + relativePath;
60  		this.folderDepth = folderDepth;
61  		recurse();
62  	}
63  
64  	/***
65  	 * 
66  	 */
67  	private void recurse()
68  	{
69  		File root = new File(path);
70  		if (!root.isDirectory())
71  		{
72  			throw new RuntimeException("Error - given root path (" + path + ") is not a folder or cannot be found.");
73  		}
74  		if (topName == null)
75  		{
76  			topName = root.getName();
77  		}
78  		topName = topName.replaceAll("'", "");
79  		folders = new ArrayList();
80  		pictures = new ArrayList();
81  		
82  		File[] childFolders = root.listFiles(folderFileFilter);
83  		for (int i = 0; i < childFolders.length; i++)
84  		{
85  			FolderContents child = new FolderContents(rootPath, relativePath + File.separator + childFolders[i].getName(), folderDepth + 1);
86  			folders.add(child);
87  			pictureCount += child.getPictureCount();
88  		}
89  		
90  		File[] pictureFiles = root.listFiles(pictureFilenameFilter);
91  		for (int i = 0; i < pictureFiles.length; i++)
92  		{
93  			pictures.add(pictureFiles[i]);
94  		}
95  		pictureCount += pictures.size();
96  
97  		Collections.sort(folders, new FolderContentsComparator());
98  		Collections.sort(pictures);
99  	}
100 	
101 	public int getPictureCount()
102 	{
103 		return pictureCount;
104 	}
105 	
106 	public String getRelativePath()
107 	{
108 		return relativePath;
109 	}
110 
111 	public String toString()
112 	{
113 		StringBuffer sb = new StringBuffer();
114 		Iterator it = folders.iterator();
115 		sb.append(getRelativePath());
116 		sb.append(" ");
117 		sb.append(getPictureCount());
118 		sb.append("\n");
119 		while (it.hasNext())
120 		{
121 			FolderContents child = (FolderContents)it.next();
122 			sb.append(child.toString());
123 		}
124 		it = pictures.iterator();
125 		while (it.hasNext())
126 		{
127 			File picture = (File)it.next();
128 			sb.append(relativePath);
129 			sb.append(File.separator);
130 			sb.append(picture.getName());
131 			sb.append("\n");
132 		}
133 		return sb.toString();
134 	}
135 	
136 	public String getDisplayName()
137 	{
138 		return getTopName() + " " + getPictureCount();
139 	}
140 	
141 	public static void main(String[] args)
142 	{
143 		FolderContents contents = new FolderContents("c:/pics");
144 		System.out.println(contents);
145 	}
146 
147 	/***
148 	 * @return
149 	 */
150 	public boolean hasChildren()
151 	{
152 		return (folders.size() > 0);
153 	}
154 	
155 	public List getChildren()
156 	{
157 		return folders;
158 	}
159 	
160 	public List getPictures()
161 	{
162 		return pictures;
163 	}
164 	
165 	public int getFolderDepth()
166 	{
167 		return folderDepth;
168 	}
169 	
170 	public String getTopName()
171 	{
172 		return topName;
173 	}
174 }