|
What this is
This file is included in the DevDaily.com
"Java Source Code
Warehouse" project. The intent of this project is to help you "Learn
Java by Example" TM.
Other links
The source code
/*
* 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-2004 Sun
* Microsystems, Inc. All Rights Reserved.
*/
package org.openide.loaders;
import java.io.IOException;
import org.openide.cookies.CloseCookie;
import org.openide.cookies.EditCookie;
import org.openide.cookies.EditorCookie;
import org.openide.cookies.OpenCookie;
import org.openide.cookies.PrintCookie;
import org.openide.cookies.SaveCookie;
import org.openide.filesystems.FileObject;
import org.openide.filesystems.FileLock;
import org.openide.loaders.DataObject;
import org.openide.loaders.MultiDataObject;
import org.openide.nodes.CookieSet;
import org.openide.nodes.Node.Cookie;
import org.openide.text.DataEditorSupport;
import org.openide.windows.CloneableOpenSupport;
/**
* Basic editor support.
*
* @author Jaroslav Tulach
*/
final class DefaultES extends DataEditorSupport
implements OpenCookie, EditCookie, EditorCookie.Observable, PrintCookie, CloseCookie {
/** SaveCookie for this support instance. The cookie is adding/removing
* data object's cookie set depending on if modification flag was set/unset. */
private final SaveCookie saveCookie = new SaveCookie() {
/** Implements SaveCookie interface. */
public void save() throws IOException {
DefaultES.this.saveDocument();
}
};
private CookieSet set;
/** Constructor.
* @param obj data object to work on
* @param set set to add/remove save cookie from
*/
DefaultES (DataObject obj, MultiDataObject.Entry entry, CookieSet set) {
super(obj, new Environment(obj, entry));
this.set = set;
setMIMEType("text/plain"); // NOI18N
}
/**
* Overrides superclass method. Adds adding of save cookie if the document has been marked modified.
* @return true if the environment accepted being marked as modified
* or false if it has refused and the document should remain unmodified
*/
protected boolean notifyModified () {
if (!super.notifyModified())
return false;
addSaveCookie();
return true;
}
/** Overrides superclass method. Adds removing of save cookie. */
protected void notifyUnmodified () {
super.notifyUnmodified();
removeSaveCookie();
}
/** Helper method. Adds save cookie to the data object. */
private void addSaveCookie() {
DataObject obj = getDataObject();
// Adds save cookie to the data object.
if(obj.getCookie(SaveCookie.class) == null) {
set.add(saveCookie);
obj.setModified(true);
}
}
/** Helper method. Removes save cookie from the data object. */
private void removeSaveCookie() {
DataObject obj = getDataObject();
// Remove save cookie from the data object.
Cookie cookie = obj.getCookie(SaveCookie.class);
if(cookie != null && cookie.equals(saveCookie)) {
set.remove(saveCookie);
obj.setModified(false);
}
}
/** Nested class. Environment for this support. Extends
* DataEditorSupport.Env abstract class.
*/
private static class Environment extends DataEditorSupport.Env {
private static final long serialVersionUID = 5451434321155443431L;
private MultiDataObject.Entry entry;
/** Constructor. */
public Environment(DataObject obj, MultiDataObject.Entry entry) {
super(obj);
this.entry = entry;
}
/** Implements abstract superclass method. */
protected FileObject getFile() {
return entry.getFile();
}
/** Implements abstract superclass method.*/
protected FileLock takeLock() throws IOException {
return entry.takeLock();
}
/**
* Overrides superclass method.
* @return text editor support (instance of enclosing class)
*/
public CloneableOpenSupport findCloneableOpenSupport() {
return (DefaultES)getDataObject().getCookie(DefaultES.class);
}
} // End of nested Environment class.
}
|