KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > org > nanocontainer > deployer > DifferenceAnalysingFolderContentHandler


1 package org.nanocontainer.deployer;
2
3 import org.apache.commons.vfs.FileObject;
4 import org.apache.commons.vfs.FileSystemException;
5 import org.apache.commons.vfs.FileSystemManager;
6 import org.apache.commons.vfs.FileType;
7
8 import java.util.ArrayList JavaDoc;
9 import java.util.Arrays JavaDoc;
10 import java.util.Iterator JavaDoc;
11 import java.util.List JavaDoc;
12
13 /**
14  * @author Aslak Hellesøy
15  * @version $Revision: 2343 $
16  */

17 public class DifferenceAnalysingFolderContentHandler implements FolderContentHandler {
18     private final FileObject folder;
19     private final FileSystemManager fileSystemManager;
20
21     private FileObject[] lastChildren = new FileObject[0];
22
23     public DifferenceAnalysingFolderContentHandler(FileObject folder, FileSystemManager fileSystemManager) {
24         this.folder = folder;
25         this.fileSystemManager = fileSystemManager;
26     }
27
28     public void setCurrentChildren(FileObject[] currentChildren) {
29         List JavaDoc current = Arrays.asList(currentChildren);
30         List JavaDoc last = Arrays.asList(lastChildren);
31
32         fireFolderAddedMaybe(current, last);
33         fireFolderRemovedMaybe(current, last);
34
35         lastChildren = currentChildren;
36     }
37
38     private void fireFolderAddedMaybe(List JavaDoc current, List JavaDoc last) {
39         current = new ArrayList JavaDoc(current);
40         last = new ArrayList JavaDoc(last);
41
42         current.removeAll(last);
43         for (Iterator JavaDoc iterator = current.iterator(); iterator.hasNext();) {
44             FileObject fileObject = (FileObject) iterator.next();
45             FileObject folderObject = convertToFolder(fileObject);
46             if (folderObject != null && folderListener != null) {
47                 folderListener.folderAdded(folderObject);
48             }
49         }
50     }
51
52     private void fireFolderRemovedMaybe(List JavaDoc current, List JavaDoc last) {
53         current = new ArrayList JavaDoc(current);
54         last = new ArrayList JavaDoc(last);
55
56         last.removeAll(current);
57         for (Iterator JavaDoc iterator = last.iterator(); iterator.hasNext();) {
58             FileObject fileObject = (FileObject) iterator.next();
59             FileObject folderObject = convertToFolder(fileObject);
60             if (folderObject != null && folderListener != null) {
61                 folderListener.folderRemoved(fileObject);
62             }
63         }
64     }
65
66     private FileObject convertToFolder(FileObject fileObject) {
67         FileObject result = null;
68         try {
69             if (fileObject.getType().equals(FileType.FOLDER)) {
70                 result = fileObject;
71             } else if (fileObject.getType().equals(FileType.FILE)) {
72                 String JavaDoc extension = fileObject.getName().getExtension();
73                 if (extension.equals("zip") || extension.equals("jar")) {
74                     String JavaDoc url = "zip:" + fileObject.getURL().getFile();
75                     result = fileSystemManager.resolveFile(url);
76                 }
77             }
78         } catch (FileSystemException ignore) {
79         }
80         return result;
81     }
82
83     public FileObject getFolder() {
84         return folder;
85     }
86
87     private FolderListener folderListener;
88
89     public void addFolderListener(FolderListener folderListener) {
90         if (this.folderListener != null) {
91             throw new IllegalStateException JavaDoc(FolderListener.class.getName() + " already added");
92         }
93         this.folderListener = folderListener;
94     }
95
96     public void removeFolderListener(DeployingFolderListener deployingFolderListener) {
97         this.folderListener = null;
98     }
99 }
Popular Tags