/* * Sun Public License Notice * * The contents of this file are subject to the Sun Public License * Version 1.0 (the "License"). You may not use this file except in * compliance with the License. A copy of the License is available at * http://www.sun.com/ * * The Original Code is NetBeans. The Initial Developer of the Original * Code is Sun Microsystems, Inc. Portions Copyright 1997-2000 Sun * Microsystems, Inc. All Rights Reserved. */ package org.openide.filesystems; /** Event for listening on filesystem changes. * <P> * By calling {@link #getFile} the original file where the action occurred * can be obtained. * * @author Jaroslav Tulach, Petr Hamernik */ public class FileEvent extends java.util.EventObject { /** generated Serialized Version UID */ private static final long serialVersionUID = 1028087432345400108L; /** Original file object where the action took place. */ private FileObject file; /** time when this event has been fired */ private long time; /** is expected? */ private boolean expected; /***/ private EventControl.AtomicActionLink atomActionID; /** Creates new <code>FileEvent</code>. The <code>FileObject</code> where the action occurred * is assumed to be the same as the source object. * @param src source file which sent this event */ public FileEvent(FileObject src) { this(src, src); } /** Creates new <code>FileEvent</code>, specifying the action object. * <p> * Note that the two arguments of this method need not be identical * in cases where it is reasonable that a different file object from * the one affected would be listened to by other components. E.g., * in the case of a file creation event, the event source (which * listeners are attached to) would be the containing folder, while * the action object would be the newly created file object. * @param src source file which sent this event * @param file <code>FileObject</code> where the action occurred */ public FileEvent(FileObject src, FileObject file) { super(src); this.file = file; this.time = System.currentTimeMillis (); } /** Creates new <code>FileEvent</code>. The <code>FileObject</code> where the action occurred * is assumed to be the same as the source object. Important if FileEvent is created according to * existing FileEvent but with another source and file but with the same time. */ FileEvent(FileObject src, FileObject file, long time) { this (src, file); this.time = time; } /** Creates new <code>FileEvent</code>, specifying the action object. * <p> * Note that the two arguments of this method need not be identical * in cases where it is reasonable that a different file object from * the one affected would be listened to by other components. E.g., * in the case of a file creation event, the event source (which * listeners are attached to) would be the containing folder, while * the action object would be the newly created file object. * @param src source file which sent this event * @param file <code>FileObject</code> where the action occurred * @param expected sets flag whether the value was expected*/ public FileEvent(FileObject src, FileObject file, boolean expected) { this(src,file); this.expected = expected; } /** @return the original file where action occurred */ public final FileObject getFile() { return file; } /** The time when this event has been created. * @return the milliseconds */ public final long getTime () { return time; } /** Getter to test whether the change has been expected or not. */ public final boolean isExpected () { return expected; } public String toString () { FileSystem fs; try { fs = file.getFileSystem(); } catch (FileStateInvalidException fsie) { fs = null; } return super.toString () + "[file=" + file + ",time=" + time // NOI18N + ",expected=" + expected + ",fs=" + fs + "]"; // NOI18N } /** */ void setAtomicActionLink (EventControl.AtomicActionLink atomActionID) { this.atomActionID = atomActionID; } /** Tests if FileEvent was fired from atomic action. * @param run is tested atomic action. * @return true if fired from run. * @since 1.35 */ public boolean firedFrom (FileSystem.AtomicAction run) { EventControl.AtomicActionLink currentPropID = this.atomActionID; if (run == null) return false; while (currentPropID != null) { if (run.equals(currentPropID.getAtomicAction ())) return true; currentPropID = currentPropID.getPreviousLink (); } return false; } }