blob: 0269e4853236672a8fc45843dd709b93f264c2f6 [file] [log] [blame]
/*
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. The ASF licenses this file
* to you under the Apache License, Version 2.0 (the
* "License"); you may not use this file except in compliance
* with the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing,
* software distributed under the License is distributed on an
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
* KIND, either express or implied. See the License for the
* specific language governing permissions and limitations
* under the License.
*/
package org.netbeans.modules.project.ui;
import java.awt.Dialog;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.File;
import java.io.IOException;
import java.util.ArrayList;
import javax.swing.JButton;
import javax.swing.event.DocumentListener;
import org.openide.DialogDescriptor;
import org.openide.DialogDisplayer;
import org.openide.filesystems.FileObject;
import org.openide.filesystems.FileUtil;
import org.openide.loaders.DataObject;
import org.openide.loaders.DataFolder;
import org.openide.loaders.DataObjectNotFoundException;
import org.openide.util.NbBundle;
/**
*
* @author phrebejk
*/
public class NoProjectNew extends javax.swing.JPanel implements ActionListener, DocumentListener {
public static final int TYPE_FILE = 0;
public static final int TYPE_FOLDER = 1;
private static final String FILE_NAME = NbBundle.getMessage( NoProjectNew.class, "LBL_NonProject_File_Name" ); // NOI18N
private static final String FILE_TITLE = NbBundle.getMessage( NoProjectNew.class, "LBL_NonProject_File_Title" ); // NOI18N;
private static final String FILE_TEXT_FIELD_ACD = NbBundle.getMessage( NoProjectNew.class, "ACD_NonProject_File_TextField" ); // NOI18N;
private static final String FILE_DIALOG_ACD = NbBundle.getMessage( NoProjectNew.class, "ACD_NonProject_File_Dialog" ); // NOI18N;
private static final String FOLDER_NAME = NbBundle.getMessage( NoProjectNew.class, "LBL_NonProject_Folder_Name" ); // NOI18N;
private static final String FOLDER_TITLE = NbBundle.getMessage( NoProjectNew.class, "LBL_NonProject_Folder_Title" ); // NOI18N;
private static final String FOLDER_TEXT_FIELD_ACD = NbBundle.getMessage( NoProjectNew.class, "ACD_NonProject_Folder_TextField" ); // NOI18N;
private static final String FOLDER_DIALOG_ACD = NbBundle.getMessage( NoProjectNew.class, "ACD_NonProject_Folder_Dialog" ); // NOI18N;
public static final String COMMAND_OK = "OK";
public static final String COMMAND_CANCEL = "CANCEL";
private static DataObject[] templates;
private int type;
private DataFolder targetFolder;
private String result;
private JButton okOption;
/** Creates new form BrowseFolders */
public NoProjectNew( int type, DataFolder targetFolder, JButton okOption ) {
initComponents();
nameTextField.getDocument().addDocumentListener( this );
this.type = type;
this.targetFolder = targetFolder;
this.okOption = okOption;
switch ( type ) {
case TYPE_FILE:
org.openide.awt.Mnemonics.setLocalizedText(nameLabel, FILE_NAME);
nameTextField.getAccessibleContext().setAccessibleDescription(FILE_TEXT_FIELD_ACD);
getAccessibleContext().setAccessibleDescription(FILE_DIALOG_ACD);
break;
case TYPE_FOLDER:
org.openide.awt.Mnemonics.setLocalizedText(nameLabel, FOLDER_NAME);
nameTextField.getAccessibleContext().setAccessibleDescription(FOLDER_TEXT_FIELD_ACD);
getAccessibleContext().setAccessibleDescription(FOLDER_DIALOG_ACD);
break;
}
this.okOption.setEnabled( false );
}
/** This method is called from within the constructor to
* initialize the form.
* WARNING: Do NOT modify this code. The content of this method is
* always regenerated by the Form Editor.
*/
// <editor-fold defaultstate="collapsed" desc=" Generated Code ">//GEN-BEGIN:initComponents
private void initComponents() {
java.awt.GridBagConstraints gridBagConstraints;
nameLabel = new javax.swing.JLabel();
nameTextField = new javax.swing.JTextField();
setLayout(new java.awt.GridBagLayout());
setBorder(javax.swing.BorderFactory.createEmptyBorder(12, 12, 12, 12));
nameLabel.setLabelFor(nameTextField);
nameLabel.setText("Folders:");
gridBagConstraints = new java.awt.GridBagConstraints();
gridBagConstraints.gridheight = java.awt.GridBagConstraints.REMAINDER;
gridBagConstraints.anchor = java.awt.GridBagConstraints.WEST;
gridBagConstraints.insets = new java.awt.Insets(0, 0, 0, 6);
add(nameLabel, gridBagConstraints);
nameTextField.setColumns(25);
gridBagConstraints = new java.awt.GridBagConstraints();
gridBagConstraints.gridwidth = java.awt.GridBagConstraints.REMAINDER;
gridBagConstraints.gridheight = java.awt.GridBagConstraints.REMAINDER;
gridBagConstraints.fill = java.awt.GridBagConstraints.HORIZONTAL;
gridBagConstraints.anchor = java.awt.GridBagConstraints.WEST;
gridBagConstraints.weightx = 1.0;
add(nameTextField, gridBagConstraints);
}
// </editor-fold>//GEN-END:initComponents
// Variables declaration - do not modify//GEN-BEGIN:variables
public javax.swing.JLabel nameLabel;
public javax.swing.JTextField nameTextField;
// End of variables declaration//GEN-END:variables
public static void showDialog( DataObject template, DataFolder targetFolder ) {
int type;
if ( template.getPrimaryFile().getName().equals( "file") ) {
type = TYPE_FILE;
}
else {
type = TYPE_FOLDER;
}
JButton options[] = new JButton[] {
new JButton( NbBundle.getMessage( NoProjectNew.class, "LBL_NonProject_OK_Button") ), // NOI18N
new JButton( NbBundle.getMessage( NoProjectNew.class, "LBL_NonProject_Cancel_Button") ), // NOI18N
};
NoProjectNew npn = new NoProjectNew( type, targetFolder, options[0] );
options[ 0 ].setActionCommand( COMMAND_OK );
options[ 0 ].addActionListener( npn );
options[ 1 ].setActionCommand( COMMAND_CANCEL );
options[ 1 ].addActionListener( npn );
DialogDescriptor dialogDescriptor = new DialogDescriptor(
npn, // innerPane
type == TYPE_FILE ? FILE_TITLE : FOLDER_TITLE, // displayName
true, // modal
options, // options
options[ 0 ], // initial value
DialogDescriptor.BOTTOM_ALIGN, // options align
null, // helpCtx
null ); // listener
dialogDescriptor.setClosingOptions( new Object[] { options[ 0 ], options[ 1 ] } );
Dialog dialog = DialogDisplayer.getDefault().createDialog( dialogDescriptor );
dialog.setVisible(true);
npn.createFile();
}
public static DataObject[] getTemplates() {
if ( templates == null ) {
ArrayList<DataObject> tList = new ArrayList<DataObject>( 2 );
DataObject template;
template = findTemplate( "Templates/Other/file" );
if ( template != null ) {
tList.add( template );
}
template = findTemplate( "Templates/Other/Folder" );
if ( template != null ) {
tList.add( template );
}
templates = new DataObject[tList.size()];
tList.toArray( templates );
}
return templates;
}
// ActionListener implementation -------------------------------------------
@Override
public void actionPerformed( ActionEvent e ) {
result = COMMAND_OK.equals( e.getActionCommand() ) ? getFileName() : null;
}
// Document listener implementation ----------------------------------------
@Override
public void insertUpdate(javax.swing.event.DocumentEvent e) {
changedUpdate( e );
}
@Override
public void removeUpdate(javax.swing.event.DocumentEvent e) {
changedUpdate( e );
}
@Override
public void changedUpdate(javax.swing.event.DocumentEvent e) {
String fileName = getFileName();
if ( fileName.length() == 0 ) {
okOption.setEnabled( false );
return;
}
FileObject fo = targetFolder.getPrimaryFile().getFileObject( fileName );
if ( fo != null ) {
okOption.setEnabled( false );
return;
}
okOption.setEnabled( true );
}
// Private methods ---------------------------------------------------------
private static DataObject findTemplate( String name ) {
FileObject tFo = FileUtil.getConfigFile( name );
if ( tFo == null ) {
return null;
}
try {
return DataObject.find( tFo );
}
catch ( DataObjectNotFoundException e ) {
return null;
}
}
private String getFileName() {
String name = nameTextField.getText().trim();
return name.replace( File.separatorChar, '/' ); // NOI18N
}
private void createFile() {
if ( result != null && result.indexOf('\\') == -1 ) { // NOI18N
if ( !targetFolder.getPrimaryFile().canWrite() ) {
return;
}
DataObject dObj = null;
try {
FileObject fo = type == TYPE_FILE ?
FileUtil.createData( targetFolder.getPrimaryFile(), result ) :
FileUtil.createFolder( targetFolder.getPrimaryFile(), result );
if ( fo != null ) {
dObj = DataObject.find( fo );
}
}
catch ( DataObjectNotFoundException e ) {
// No data object no open
}
catch ( IOException e ) {
// XXX
}
if ( result != null ) {
// handle new template in SystemFileSystem
DataObject rootDO = findTemplate ("/Templates"); // NOI18N
if (rootDO != null && dObj != null) {
if (FileUtil.isParentOf (rootDO.getPrimaryFile (), dObj.getPrimaryFile ())) {
try {
dObj.setTemplate (true);
} catch (IOException e) {
// can ignore
}
}
}
}
if (dObj != null) {
ProjectUtilities.openAndSelectNewObject( dObj );
}
}
}
}