package com.limegroup.gnutella;
import java.io.File;
import java.util.EventObject;
/**
* This class implements a FileManagerEvent which is
* used by FileManager and MetaFileManager to notify
* the front end about add, remove, rename and change
* events in the Library.
*/
public class FileManagerEvent extends EventObject {
public static final int ADD = 1;
public static final int REMOVE = 2;
public static final int RENAME = 3;
public static final int CHANGE = 4;
public static final int FAILED = 5;
public static final int ALREADY_SHARED = 6;
public static final int ADD_FOLDER = 7;
public static final int REMOVE_FOLDER = 8;
private final int kind;
private final FileDesc[] fds;
private final File[] files;
/**
* Constructs a FileManagerEvent with a single FD.
* Useful for 'ADD' & 'REMOVE' events.
*/
public FileManagerEvent(FileManager manager, int kind, FileDesc fd) {
this(manager, kind, new FileDesc[] { fd });
}
/**
* Constructs a FileManagerEvent with multiple FDs.
* Useful for 'RENAME' & 'CHANGE' events.
*/
public FileManagerEvent(FileManager manager, int kind, FileDesc[] fds) {
super(manager);
this.kind = kind;
this.fds = fds;
this.files = null;
}
/**
* Constructs a FileManagerEvent with a single File.
* Useful for 'FAILED', 'ALREADY_SHARED', 'REMOVE_FOLDER' events.
*/
public FileManagerEvent(FileManager manager, int kind, File file) {
this(manager, kind, new File[] { file } );
}
/**
* Constructs a FileManagerEvent with a File & its parent.
* Useful for 'ADD_FOLDER' events.
*/
public FileManagerEvent(FileManager manager, int kind, File folder, File parent) {
this(manager, kind, new File[] { folder, parent });
}
/**
* Constructs a FileManagerEvent with a bunch of files.
*/
public FileManagerEvent(FileManager manager, int kind, File[] files) {
super(manager);
this.kind = kind;
this.files = files;
this.fds = null;
}
public int getKind() {
return kind;
}
/**
* Note: RENAME and CHANGE events return an array with
* two elements. The first element is the previous
* FileDesc and the second is the new FileDesc.
*/
public FileDesc[] getFileDescs() {
return fds;
}
/**
* Gets the effected file.
*/
public File[] getFiles() {
return files;
}
/**
* Returns true if this event is an ADD event
*/
public boolean isAddEvent() {
return (kind==ADD);
}
/**
* Returns true if this event is a REMOVE event
*/
public boolean isRemoveEvent() {
return (kind==REMOVE);
}
/**
* Returns true if this event is a RENAME (MOVE)
* event
*/
public boolean isRenameEvent() {
return (kind==RENAME);
}
/**
* Returns true if this event is a CHANGE (i.e.
* when ID3 Tags changed) event.
*/
public boolean isChangeEvent() {
return (kind==CHANGE);
}
/**
* Returns true if this is a FAILED add event (ie, addFile failed).
*/
public boolean isFailedEvent() {
return (kind==FAILED);
}
/**
* Returns true if this is an event for a file that was ALREADY_SHARED
* (ie, an addFile event was ignored because the file was already shared)
*/
public boolean isAlreadySharedEvent() {
return (kind==ALREADY_SHARED);
}
/**
* Returns true if this is a ADD_FOLDER event.
*/
public boolean isAddFolderEvent() {
return kind == ADD_FOLDER;
}
/**
* Returns true if this is a REMOVE_FOLDER event;
*/
public boolean isRemoveFolderEvent() {
return kind == REMOVE_FOLDER;
}
public String toString() {
StringBuffer buffer = new StringBuffer("FileManagerEvent: [event=");
switch(kind) {
case ADD:
buffer.append("ADD");
break;
case REMOVE:
buffer.append("REMOVE");
break;
case RENAME:
buffer.append("RENAME");
break;
case CHANGE:
buffer.append("CHANGE");
break;
case FAILED:
buffer.append("FAILED");
break;
case ALREADY_SHARED:
buffer.append("ALREADY_SHARED");
break;
case ADD_FOLDER:
buffer.append("ADD_FOLDER");
break;
case REMOVE_FOLDER:
buffer.append("REMOVE_FOLDER");
break;
default:
buffer.append("UNKNOWN");
break;
}
if (fds != null) {
buffer.append(", fds=").append(fds.length).append("\n");
for(int i = 0; i < fds.length; i++) {
buffer.append(fds[i]);
if(i != fds.length -1)
buffer.append(", ");
}
} else {
buffer.append(", fds=null");
}
if (files != null) {
buffer.append(", files=").append(files.length).append("\n");
for(int i = 0; i < files.length; i++) {
buffer.append(files[i]);
if(i != files.length -1)
buffer.append(", ");
}
} else {
buffer.append(", files=null");
}
return buffer.append("]").toString();
}
}