/* * 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.loaders; import java.io.*; import java.util.HashSet; import org.openide.filesystems.*; import org.openide.util.HelpCtx; import org.openide.util.NbBundle; import org.openide.nodes.Node; /** An implementation of a data object which consumes file objects not recognized by any other loaders. * * @author Ian Formanek */ class DefaultDataObject extends MultiDataObject { static final long serialVersionUID =-4936309935667095746L; /** generated Serialized Version UID */ // static final long serialVersionUID = 6305590675982925167L; /** Constructs new data shadow for given primary file and referenced original. * @param fo the primary file * @param original original data object */ DefaultDataObject (FileObject fo, MultiFileLoader loader) throws DataObjectExistsException { super (fo, loader); } /* Creates node delegate. */ protected Node createNodeDelegate () { DataNode dn = new DataNode (this, org.openide.nodes.Children.LEAF); // netbeans.core.nodes.description dn.setShortDescription (NbBundle.getMessage (DefaultDataObject.class, "HINT_DefaultDataObject")); // NOI18N return dn; } /** Get the name of the data object. * <p>The implementation uses the name of the primary file and its exten. * @return the name */ public String getName() { return getPrimaryFile ().getNameExt (); } /* Help context for this object. * @return help context */ public HelpCtx getHelpCtx () { return new HelpCtx (DefaultDataObject.class); } /* Handles renaming of the object. * Must be overriden in children. * * @param name name to rename the object to * @return new primary file of the object * @exception IOException if an error occures */ protected FileObject handleRename (String name) throws IOException { FileLock lock = getPrimaryFile ().lock (); int pos = name.lastIndexOf('.'); try { if (pos < 0){ // file without separator getPrimaryFile ().rename (lock, name, null); } else if (pos == 0){ getPrimaryFile ().rename (lock, name, getPrimaryFile ().getExt ()); } else { if (!name.equals(getPrimaryFile ().getNameExt())){ getPrimaryFile ().rename (lock, name.substring(0, pos), name.substring(pos+1, name.length())); DataObjectPool.getPOOL().revalidate( new HashSet (java.util.Collections.singleton(getPrimaryFile ())) ); } } } finally { lock.releaseLock (); } return getPrimaryFile (); } /* Creates new object from template. * @exception IOException */ protected DataObject handleCreateFromTemplate ( DataFolder df, String name ) throws IOException { // avoid doubling of extension if (name != null && name.endsWith("." + getPrimaryFile ().getExt ())) // NOI18N name = name.substring(0, name.lastIndexOf("." + getPrimaryFile ().getExt ())); // NOI18N return super.handleCreateFromTemplate (df, name); } }