Index: openide/loaders/api/apichanges.xml =================================================================== RCS file: /shared/data/ccvs/repository/openide/loaders/api/apichanges.xml,v retrieving revision 1.23 diff -u -r1.23 apichanges.xml --- openide/loaders/api/apichanges.xml 6 Nov 2006 08:23:46 -0000 1.23 +++ openide/loaders/api/apichanges.xml 7 Nov 2006 07:39:26 -0000 @@ -85,7 +85,7 @@ - DataNode.getLookup contains FileObject + DataNode.getLookup contains FileObject, DataObject has getLookup() @@ -96,9 +96,17 @@ shall have FileObject(s) associated with its DataObject available in its own lookup. + Also a + DataObject + has been retrofitted to implement a + Lookup.Provider + interface and thus have its + getLookup + method that can be used instead of the old getCookie one.

+
Index: openide/loaders/src/org/openide/loaders/DataObject.java =================================================================== RCS file: /shared/data/ccvs/repository/openide/loaders/src/org/openide/loaders/DataObject.java,v retrieving revision 1.31 diff -u -r1.31 DataObject.java --- openide/loaders/src/org/openide/loaders/DataObject.java 28 Oct 2006 21:57:37 -0000 1.31 +++ openide/loaders/src/org/openide/loaders/DataObject.java 7 Nov 2006 07:39:26 -0000 @@ -30,11 +30,14 @@ import org.openide.nodes.*; import org.openide.util.*; -/** Object that represents one or more file objects, with added behavior. +/** Object that represents one or more file objects, with added behavior +* accessible though {@link #getLookup} lookup pattern. Since version 6.0 +* this class implements {@link Lookup.Provider}. * * @author Jaroslav Tulach, Petr Hamernik, Jan Jancura, Ian Formanek */ -public abstract class DataObject extends Object implements Node.Cookie, Serializable, HelpCtx.Provider { +public abstract class DataObject extends Object +implements Node.Cookie, Serializable, HelpCtx.Provider, Lookup.Provider { /** generated Serialized Version UID */ private static final long serialVersionUID = 3328227388376142699L; @@ -882,6 +885,19 @@ return c.cast(this); } return null; + } + + /** Represents a context of the data object. This method is a more + * general replacement for {@link #getCookie} and should preferably + * be used instead of the old method. The default implementation + * inside a data object + * returns the getNodeDelegate().getLookup(). + * + * @return lookup representing this data object and its content + * @since 6.0 + */ + public Lookup getLookup() { + return getNodeDelegate().getLookup(); } /** When a request for a cookie is done on a DataShadow of this DataObject Index: openide/loaders/test/unit/src/org/openide/loaders/BasicDataObjectTest.java =================================================================== RCS file: /shared/data/ccvs/repository/openide/loaders/test/unit/src/org/openide/loaders/BasicDataObjectTest.java,v retrieving revision 1.5 diff -u -r1.5 BasicDataObjectTest.java --- openide/loaders/test/unit/src/org/openide/loaders/BasicDataObjectTest.java 10 Jul 2006 10:25:46 -0000 1.5 +++ openide/loaders/test/unit/src/org/openide/loaders/BasicDataObjectTest.java 7 Nov 2006 07:39:33 -0000 @@ -278,6 +278,15 @@ )); } + public void testDataObjectIsInItLookup() throws Exception { + DataObject obj = DataObject.find ( + FileUtil.createData (subDir, "somedata.txt") + ); + + DataObject query = obj.getLookup().lookup(DataObject.class); + assertSame("Object is in its own lookup", obj, query); + } + private void doSerTest (DataObject obj) throws Exception { org.openide.util.io.NbMarshalledObject mar = new org.openide.util.io.NbMarshalledObject (obj); Index: openide/loaders/test/unit/src/org/openide/loaders/DataNodeTest.java =================================================================== RCS file: /shared/data/ccvs/repository/openide/loaders/test/unit/src/org/openide/loaders/DataNodeTest.java,v retrieving revision 1.7 diff -u -r1.7 DataNodeTest.java --- openide/loaders/test/unit/src/org/openide/loaders/DataNodeTest.java 2 Aug 2006 06:53:32 -0000 1.7 +++ openide/loaders/test/unit/src/org/openide/loaders/DataNodeTest.java 7 Nov 2006 07:39:33 -0000 @@ -23,6 +23,7 @@ import java.lang.ref.WeakReference; import java.util.Set; import junit.textui.TestRunner; +import org.openide.cookies.OpenCookie; import org.openide.filesystems.FileObject; import org.openide.filesystems.FileStatusEvent; import org.openide.filesystems.FileSystem; @@ -103,6 +104,25 @@ assertEquals ("Size is two", 2, fs.lastFiles.size ()); assertEquals ("Now the secondary entry had to be created", 1, TwoPartLoader.get ().secondary); } + + + public void testWhatIsAddedToNodeLookupIsByDefaultVisibleInDataObjectLookup() throws Exception { + org.openide.filesystems.FileSystem lfs = TestUtilHid.createLocalFileSystem(getWorkDir (), new String[] { + "F.java", "F.form" + }); + + FSWithStatus fs = new FSWithStatus (); + fs.setRootDirectory(org.openide.filesystems.FileUtil.toFile(lfs.getRoot())); + + DataObject obj = DataObject.find (fs.findResource("F.java")); + + OpenCookie fromNode = obj.getNodeDelegate().getLookup().lookup(OpenCookie.class); + assertNotNull("There is some cookie in node", fromNode); + + OpenCookie fromObject = obj.getLookup().lookup(OpenCookie.class); + assertNotNull("There is a cookie in data object too", fromObject); + + } public void testDataNodeGetDataFromLookup() throws Exception { @@ -245,6 +265,26 @@ public static final class TwoPartObject extends MultiDataObject { public TwoPartObject(TwoPartLoader l, FileObject folder) throws DataObjectExistsException { super(folder, l); + } + + protected Node createNodeDelegate() { + return new DN(this); + } + } + + private static final class DN extends DataNode { + public DN(TwoPartObject obj) { + super(obj, Children.LEAF); + } + + public T getCookie(Class clazz) { + if (clazz.isAssignableFrom(OpenCookie.class)) { + return clazz.cast(new OpenCookie () { + public void open() { + } + }); + } + return super.getCookie(clazz); } } Index: openide/loaders/test/unit/src/org/openide/loaders/MultiDataObjectTest.java =================================================================== RCS file: /shared/data/ccvs/repository/openide/loaders/test/unit/src/org/openide/loaders/MultiDataObjectTest.java,v retrieving revision 1.5 diff -u -r1.5 MultiDataObjectTest.java --- openide/loaders/test/unit/src/org/openide/loaders/MultiDataObjectTest.java 27 Sep 2006 16:10:26 -0000 1.5 +++ openide/loaders/test/unit/src/org/openide/loaders/MultiDataObjectTest.java 7 Nov 2006 07:39:33 -0000 @@ -21,6 +21,7 @@ import java.beans.PropertyChangeEvent; import java.beans.PropertyChangeListener; +import org.openide.cookies.OpenCookie; import org.openide.filesystems.*; import org.netbeans.junit.*; @@ -147,7 +148,7 @@ err.log(i + " end of cycle"); } } - + public void testConsistencyWithContinuousQueryingForDeletedFiles() throws Exception { err.log(" getting children of to"); DataObject[] to1 = to.getChildren(); @@ -238,6 +239,23 @@ assertEquals("Fourty deleted files:" + que.deleted, 40, que.deleted.size()); } + + public void testAdditionsToCookieSetAreVisibleInLookup() throws Exception { + assertTrue(this.one instanceof SimpleObject); + SimpleObject s = (SimpleObject)this.one; + + class Open implements OpenCookie { + public void open() { + } + } + Open openCookie = new Open(); + + + s.getCookieSet().add(openCookie); + + assertSame("Cookie is in the lookup", openCookie, one.getLookup().lookup(OpenCookie.class)); + } + public static final class Pool extends DataLoaderPool { protected Enumeration loaders() {