package com.limegroup.gnutella.library; import java.io.File; import org.limewire.listener.SourcedEvent; import org.limewire.util.Objects; import org.limewire.util.StringUtils; /** An event that's triggered when a file view is changed. */ public class FileViewChangeEvent implements SourcedEvent<FileView> { public static enum Type { /** Notification a new FileDesc was added. */ FILE_ADDED, /** Notification a FileDesc was removed. */ FILE_REMOVED, /** Notification a File has changed from one FileDesc to another. */ FILE_CHANGED, /** Notification a FileDesc's metadata (such as URN, XML) has changed. */ FILE_META_CHANGED, /** Notification an add failed. */ FILE_ADD_FAILED, /** Notification that a change failed. */ FILE_CHANGE_FAILED, /** Notification that all files in the view were cleared. */ FILES_CLEARED; } private final Type type; private final FileView list; private final FileDesc newValue; private final FileDesc oldValue; private final File oldFile; private final File newFile; private boolean isShared = false; private boolean libraryCleared = false; public FileViewChangeEvent(FileView list, Type type, boolean libraryCleared) { assert type == Type.FILES_CLEARED; this.type = Objects.nonNull(type, "type"); this.list = Objects.nonNull(list, "list"); this.oldValue = null; this.newFile = null; this.oldFile = null; this.newValue = null; this.libraryCleared = libraryCleared; } public FileViewChangeEvent(FileView list, Type type, File file) { assert type == Type.FILE_ADD_FAILED; this.type = Objects.nonNull(type, "type"); this.list = Objects.nonNull(list, "list"); this.oldValue = null; this.newFile = Objects.nonNull(file, "file"); this.oldFile = null; this.newValue = null; } public FileViewChangeEvent(FileView list, Type type, File oldFile, FileDesc oldValue, File newValue) { assert type == Type.FILE_CHANGE_FAILED; this.type = Objects.nonNull(type, "type"); this.list = Objects.nonNull(list, "list"); this.oldValue = oldValue; // May be null! this.newValue = null; this.oldFile = Objects.nonNull(oldFile, "oldFile"); this.newFile = Objects.nonNull(newValue, "file"); } public FileViewChangeEvent(FileView list, Type type, FileDesc value) { assert type == Type.FILE_ADDED || type == Type.FILE_REMOVED || type == Type.FILE_META_CHANGED; this.type = Objects.nonNull(type, "type"); this.list = Objects.nonNull(list, "list"); this.oldValue = null; this.newValue = Objects.nonNull(value, "value"); this.oldFile = null; this.newFile = Objects.nonNull(newValue.getFile(), "value.getFile()"); } public FileViewChangeEvent(FileView list, Type type, FileDesc oldValue, FileDesc newValue) { assert type == Type.FILE_CHANGED; this.type = Objects.nonNull(type, "type"); this.list = Objects.nonNull(list, "list"); this.oldValue = Objects.nonNull(oldValue, "oldValue"); this.newValue = Objects.nonNull(newValue, "newValue"); this.oldFile = Objects.nonNull(oldValue.getFile(), "oldValue.getFile()"); this.newFile = Objects.nonNull(newValue.getFile(), "newValue.getFile()"); } @Override public FileView getSource() { return list; } public File getOldFile() { return oldFile; } public File getFile() { return newFile; } public Type getType() { return type; } public FileView getFileView() { return list; } public FileDesc getFileDesc() { return newValue; } public FileDesc getOldValue() { return oldValue; } public boolean isShared() { return isShared; } @Override public String toString() { return StringUtils.toString(this); } public boolean isLibraryClear() { return libraryCleared; } }