/* * 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-2003 Sun * Microsystems, Inc. All Rights Reserved. */ package org.openide.loaders; import java.io.IOException; import javax.swing.event.ChangeListener; import org.openide.ErrorManager; import org.openide.WizardDescriptor; import org.openide.filesystems.FileObject; import org.openide.loaders.DataObject; import org.openide.util.HelpCtx; import org.openide.util.NbBundle; /** Implementaion of WizardDescriptor.Panel that can be used in create from template. * * @author Jiri Rechtacek */ final class NewObjectWizardPanel implements WizardDescriptor.FinishPanel { private NewObjectPanel newObjectPanelUI; /** listener to changes in the wizard */ private ChangeListener listener; /** a folder in which will be new object created */ DataFolder targetFolder; /** File extension of the template and of the created file - * it is used to test whether file already exists. */ private String extension; private TemplateWizard wizard; private NewObjectPanel getPanelUI () { if (newObjectPanelUI == null) { newObjectPanelUI = new NewObjectPanel (); newObjectPanelUI.addChangeListener (listener); } return newObjectPanelUI; } /** Add a listener to changes of the panel's validity. * @param l the listener to add * @see #isValid */ public void addChangeListener (ChangeListener l) { if (listener != null) throw new IllegalStateException (); if (newObjectPanelUI != null) newObjectPanelUI.addChangeListener (l); listener = l; } /** Remove a listener to changes of the panel's validity. * @param l the listener to remove */ public void removeChangeListener (ChangeListener l) { listener = null; if (newObjectPanelUI != null) newObjectPanelUI.removeChangeListener (l); } /** Get the component displayed in this panel. * * Note; method can be called from any thread, but not concurrently * with other methods of this interface. * * @return the UI component of this wizard panel * */ public java.awt.Component getComponent() { return getPanelUI (); } /** Help for this panel. * @return the help or <code>null</code> if no help is supplied */ public org.openide.util.HelpCtx getHelp () { return new HelpCtx (NewObjectPanel.class); } /** Test whether the panel is finished and it is safe to proceed to the next one. * If the panel is valid, the "Next" (or "Finish") button will be enabled. * <p>The Attribute "isRemoteAndSlow" will be checked for on the targetFolder, * and if it is found and <b>true</b>, then * targetFolder.getPrimaryFile().getFileObject will NOT be called.</p> * @return <code>true</code> if the user has entered satisfactory information */ public boolean isValid () { String errorMsg = null; boolean isOK = true; // target filesystem should be writable if (targetFolder.getPrimaryFile ().isReadOnly ()) { errorMsg = NbBundle.getMessage(TemplateWizard2.class, "MSG_fs_is_readonly"); isOK = false; } if (isOK) { Object obj = targetFolder.getPrimaryFile().getAttribute( "isRemoteAndSlow" );//NOI18N boolean makeFileExistsChecks = true; if( obj instanceof Boolean ) makeFileExistsChecks = ! ((Boolean) obj).booleanValue(); if( makeFileExistsChecks ) { // test whether the selected name already exists FileObject f = targetFolder.getPrimaryFile().getFileObject(getPanelUI ().getNewObjectName (), extension); if (f != null) { errorMsg = NbBundle.getMessage(TemplateWizard2.class, "MSG_file_already_exist", f.getNameExt()); //NOI18N isOK = false; } } } wizard.putProperty("WizardPanel_errorMessage", errorMsg);//NOI18N return isOK; } /** Provides the wizard panel with the current data--either * the default data or already-modified settings, if the user used the previous and/or next buttons. * This method can be called multiple times on one instance of <code>WizardDescriptor.Panel</code>. * @param settings the object representing wizard panel state, as originally supplied to {@link WizardDescriptor#WizardDescriptor(WizardDescriptor.Iterator,Object)} */ public void readSettings(Object settings) { this.wizard = (TemplateWizard)settings; DataObject template = wizard.getTemplate (); if (template != null) { extension = template.getPrimaryFile().getExt(); } try { targetFolder = wizard.getTargetFolder(); } catch (IOException x) { ErrorManager.getDefault().notify(x); } } /** Provides the wizard panel with the opportunity to update the * settings with its current customized state. * Rather than updating its settings with every change in the GUI, it should collect them, * and then only save them when requested to by this method. * Also, the original settings passed to {@link #readSettings} should not be modified (mutated); * rather, the (copy) passed in here should be mutated according to the collected changes. * This method can be called multiple times on one instance of <code>WizardDescriptor.Panel</code>. * @param settings the object representing a settings of the wizard */ public void storeSettings(Object settings) { String name = getPanelUI ().getNewObjectName (); if (name.equals (NewObjectPanel.defaultNewObjectName ())) { name = null; } wizard.setTargetName (name); this.wizard = null; } }