/* * 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.netbeans.modules.java.j2seproject.ui.customizer; import java.io.IOException; import java.util.HashMap; import javax.swing.ButtonModel; import javax.swing.Icon; import javax.swing.ImageIcon; import javax.swing.table.DefaultTableModel; import javax.swing.text.BadLocationException; import javax.swing.text.Document; import org.netbeans.api.project.Project; import org.netbeans.api.project.ProjectManager; import org.netbeans.modules.java.j2seproject.UpdateHelper; import org.netbeans.spi.project.support.ant.AntProjectHelper; import org.netbeans.spi.project.support.ant.EditableProperties; import org.netbeans.spi.project.support.ant.PropertyEvaluator; import org.netbeans.spi.project.support.ant.ReferenceHelper; import org.netbeans.spi.project.support.ant.ui.StoreGroup; import org.openide.ErrorManager; import org.openide.util.Mutex; import org.openide.util.MutexException; import org.openide.util.Utilities; /** * * @author Petr Hrebejk */ public class J2SEUIProperties { // Special properties of the project public static final String J2SE_PROJECT_NAME = "j2se.project.name"; // NOI18N public static final String JAVA_PLATFORM = "platform.active"; // NOI18N // Properties stored in the PROJECT.PROPERTIES public static final String DIST_DIR = "dist.dir"; // NOI18N public static final String DIST_JAR = "dist.jar"; // NOI18N public static final String JAVAC_CLASSPATH = "javac.classpath"; // NOI18N public static final String RUN_CLASSPATH = "run.classpath"; // NOI18N public static final String RUN_JVM_ARGS = "run.jvmargs"; // NOI18N public static final String RUN_WORK_DIR = "work.dir"; // NOI18N public static final String DEBUG_CLASSPATH = "debug.classpath"; // NOI18N public static final String JAR_COMPRESS = "jar.compress"; // NOI18N public static final String MAIN_CLASS = "main.class"; // NOI18N public static final String JAVAC_SOURCE = "javac.source"; // NOI18N public static final String JAVAC_TARGET = "javac.target"; // NOI18N public static final String JAVAC_TEST_CLASSPATH = "javac.test.classpath"; // NOI18N public static final String JAVAC_DEBUG = "javac.debug"; // NOI18N public static final String JAVAC_DEPRECATION = "javac.deprecation"; // NOI18N public static final String JAVAC_COMPILER_ARG = "javac.compilerargs"; //NOI18N public static final String RUN_TEST_CLASSPATH = "run.test.classpath"; // NOI18N public static final String SRC_DIR = "src.dir"; // NOI18N public static final String TEST_SRC_DIR = "test.src.dir"; // NOI18N public static final String BUILD_DIR = "build.dir"; // NOI18N public static final String BUILD_CLASSES_DIR = "build.classes.dir"; // NOI18N public static final String BUILD_TEST_CLASSES_DIR = "build.test.classes.dir"; // NOI18N public static final String BUILD_TEST_RESULTS_DIR = "build.test.results.dir"; // NOI18N public static final String BUILD_CLASSES_EXCLUDES = "build.classes.excludes"; // NOI18N public static final String DIST_JAVADOC_DIR = "dist.javadoc.dir"; // NOI18N public static final String NO_DEPENDENCIES="no.dependencies"; // NOI18N public static final String DEBUG_TEST_CLASSPATH = "debug.test.classpath"; // NOI18N public static final String JAVADOC_PRIVATE="javadoc.private"; // NOI18N public static final String JAVADOC_NO_TREE="javadoc.notree"; // NOI18N public static final String JAVADOC_USE="javadoc.use"; // NOI18N public static final String JAVADOC_NO_NAVBAR="javadoc.nonavbar"; // NOI18N public static final String JAVADOC_NO_INDEX="javadoc.noindex"; // NOI18N public static final String JAVADOC_SPLIT_INDEX="javadoc.splitindex"; // NOI18N public static final String JAVADOC_AUTHOR="javadoc.author"; // NOI18N public static final String JAVADOC_VERSION="javadoc.version"; // NOI18N public static final String JAVADOC_WINDOW_TITLE="javadoc.windowtitle"; // NOI18N public static final String JAVADOC_ENCODING="javadoc.encoding"; // NOI18N // Properties stored in the PRIVATE.PROPERTIES public static final String APPLICATION_ARGS = "application.args"; // NOI18N public static final String JAVADOC_PREVIEW="javadoc.preview"; // NOI18N // SOURCE ROOTS // public static final String SOURCE_ROOTS = "__virtual_source_roots__"; //NOI18N // public static final String TEST_ROOTS = "__virtual_test_roots__"; // NOI18N // MODELS FOR VISUAL CONTROLS // CustomizerSources // CustomizerLibraries DefaultTableModel JAVAC_CLASSPATH_MODEL; // CustomizerCompile ButtonModel JAVAC_DEPRECATION_MODEL; ButtonModel JAVAC_DEBUG_MODEL; ButtonModel NO_DEPENDENCIES_MODEL; Document JAVAC_COMPILER_ARG_MODEL; // CustomizerCompileTest // CustomizerJar Document DIST_JAR_MODEL; Document BUILD_CLASSES_EXCLUDES_MODEL; ButtonModel JAR_COMPRESS_MODEL; // CustomizerJavadoc ButtonModel JAVADOC_PRIVATE_MODEL; ButtonModel JAVADOC_NO_TREE_MODEL; ButtonModel JAVADOC_USE_MODEL; ButtonModel JAVADOC_NO_NAVBAR_MODEL; ButtonModel JAVADOC_NO_INDEX_MODEL; ButtonModel JAVADOC_SPLIT_INDEX_MODEL; ButtonModel JAVADOC_AUTHOR_MODEL; ButtonModel JAVADOC_VERSION_MODEL; Document JAVADOC_WINDOW_TITLE_MODEL; ButtonModel JAVADOC_PREVIEW_MODEL; // CustomizerRun Document MAIN_CLASS_MODEL; Document APPLICATION_ARGS_MODEL; Document RUN_JVM_ARGS_MODEL; Document RUN_WORK_DIR_MODEL; // CustomizerRunTest // Private fields ---------------------------------------------------------- private Project project; private HashMap properties; private UpdateHelper updateHelper; private PropertyEvaluator evaluator; private ReferenceHelper refHelper; private StoreGroup privateGroup; private StoreGroup projectGroup; /** Creates a new instance of J2SEUIProperties and initializes them */ public J2SEUIProperties( Project project, UpdateHelper updateHelper, PropertyEvaluator evaluator, ReferenceHelper refHelper ) { this.project = project; this.updateHelper = updateHelper; this.evaluator = evaluator; this.refHelper = refHelper; privateGroup = new StoreGroup(); projectGroup = new StoreGroup(); init(); // Load known properties } /** Initializes the visual models */ private void init() { // CustomizerSources // CustomizerLibraries EditableProperties projectProperties = updateHelper.getProperties( AntProjectHelper.PROJECT_PROPERTIES_PATH ); JAVAC_CLASSPATH_MODEL = new DefaultTableModel();//ClassPathSupport.createClasspathModel( evaluator, JAVAC_CLASSPATH, (String)projectProperties.get( JAVAC_CLASSPATH ) ); addIconsToModel( JAVAC_CLASSPATH_MODEL ); // CustomizerCompile JAVAC_DEPRECATION_MODEL = projectGroup.createBooleanButtonModel( evaluator, JAVAC_DEPRECATION ); JAVAC_DEBUG_MODEL = privateGroup.createBooleanButtonModel( evaluator, JAVAC_DEBUG ); NO_DEPENDENCIES_MODEL = projectGroup.createInverseBooleanButtonModel( evaluator, NO_DEPENDENCIES ); JAVAC_COMPILER_ARG_MODEL = projectGroup.createStringDocument( evaluator, JAVAC_COMPILER_ARG ); // CustomizerCompileTest // CustomizerJar DIST_JAR_MODEL = projectGroup.createStringDocument( evaluator, DIST_JAR ); BUILD_CLASSES_EXCLUDES_MODEL = projectGroup.createStringDocument( evaluator, BUILD_CLASSES_EXCLUDES ); JAR_COMPRESS_MODEL = projectGroup.createBooleanButtonModel( evaluator, JAR_COMPRESS ); // CustomizerJavadoc JAVADOC_PRIVATE_MODEL = projectGroup.createBooleanButtonModel( evaluator, JAVADOC_PRIVATE ); JAVADOC_NO_TREE_MODEL = projectGroup.createInverseBooleanButtonModel( evaluator, JAVADOC_NO_TREE ); JAVADOC_USE_MODEL = projectGroup.createBooleanButtonModel( evaluator, JAVADOC_USE ); JAVADOC_NO_NAVBAR_MODEL = projectGroup.createInverseBooleanButtonModel( evaluator, JAVADOC_NO_NAVBAR ); JAVADOC_NO_INDEX_MODEL = projectGroup.createInverseBooleanButtonModel( evaluator, JAVADOC_NO_INDEX ); JAVADOC_SPLIT_INDEX_MODEL = projectGroup.createBooleanButtonModel( evaluator, JAVADOC_SPLIT_INDEX ); JAVADOC_AUTHOR_MODEL = projectGroup.createBooleanButtonModel( evaluator, JAVADOC_AUTHOR ); JAVADOC_VERSION_MODEL = projectGroup.createBooleanButtonModel( evaluator, JAVADOC_VERSION ); JAVADOC_WINDOW_TITLE_MODEL = projectGroup.createStringDocument( evaluator, JAVADOC_WINDOW_TITLE ); JAVADOC_PREVIEW_MODEL = privateGroup.createBooleanButtonModel( evaluator, JAVADOC_PREVIEW ); // CustomizerRun MAIN_CLASS_MODEL = projectGroup.createStringDocument( evaluator, MAIN_CLASS ); APPLICATION_ARGS_MODEL = privateGroup.createStringDocument( evaluator, APPLICATION_ARGS ); RUN_JVM_ARGS_MODEL = projectGroup.createStringDocument( evaluator, RUN_JVM_ARGS ); RUN_WORK_DIR_MODEL = privateGroup.createStringDocument( evaluator, RUN_WORK_DIR ); // CustomizerRunTest } public void save() { try { // Store properties ProjectManager.mutex().writeAccess(new Mutex.ExceptionAction() { public Object run() throws IOException { storeProperties(); return null; } }); // and save the project ProjectManager.getDefault().saveProject(project); } catch (MutexException e) { ErrorManager.getDefault().notify((IOException)e.getException()); } catch ( IOException ex ) { ErrorManager.getDefault().notify( ex ); } } private void storeProperties() { // Store special properties // Store standard properties EditableProperties projectPropeties = updateHelper.getProperties( AntProjectHelper.PROJECT_PROPERTIES_PATH ); EditableProperties privatePropeties = updateHelper.getProperties( AntProjectHelper.PRIVATE_PROPERTIES_PATH ); // Assure inegrity which can't shound not be assured in UI if ( JAVADOC_NO_INDEX_MODEL.isSelected() ) { JAVADOC_SPLIT_INDEX_MODEL.setSelected( false ); // Can't split non existing index } // Standard store of the properties projectGroup.store( projectPropeties ); privateGroup.store( privatePropeties ); // Handle other special cases if ( !NO_DEPENDENCIES_MODEL.isSelected() ) { // NOI18N projectPropeties.remove( NO_DEPENDENCIES ); // Remove the property completely if not set } if ( getDocumentText( RUN_WORK_DIR_MODEL ).trim().equals( "" ) ) { // NOI18N privatePropeties.remove( RUN_WORK_DIR ); // Remove the property completely if not set } // Store the property changes into the project updateHelper.putProperties( AntProjectHelper.PROJECT_PROPERTIES_PATH, projectPropeties ); updateHelper.putProperties( AntProjectHelper.PRIVATE_PROPERTIES_PATH, privatePropeties ); } private static String getDocumentText( Document document ) { try { return document.getText( 0, document.getLength() ); } catch( BadLocationException e ) { return ""; // NOI18N } } private static String RESOURCE_ICON_JAR = "org/netbeans/modules/java/j2seproject/ui/resources/jar.gif"; //NOI18N private static String RESOURCE_ICON_LIBRARY = "org/netbeans/modules/java/j2seproject/ui/resources/libraries.gif"; //NOI18N private static String RESOURCE_ICON_ARTIFACT = "org/netbeans/modules/java/j2seproject/ui/resources/projectDependencies.gif"; //NOI18N private static String RESOURCE_ICON_CLASSPATH = "org/netbeans/modules/java/j2seproject/ui/resources/referencedClasspath.gif"; //NOI18N private static Icon ICON_JAR = new ImageIcon( Utilities.loadImage( RESOURCE_ICON_JAR ) ); private static Icon ICON_FOLDER = null; private static Icon ICON_LIBRARY = new ImageIcon( Utilities.loadImage( RESOURCE_ICON_LIBRARY ) ); private static Icon ICON_ARTIFACT = new ImageIcon( Utilities.loadImage( RESOURCE_ICON_ARTIFACT ) ); private static Icon ICON_CLASSPATH = new ImageIcon( Utilities.loadImage( RESOURCE_ICON_CLASSPATH ) ); private static final String LIBRARY_PREFIX = "${libs."; // NOI18N private static final String ANT_ARTIFACT_PREFIX = "${reference."; // NOI18N private void addIconsToModel( DefaultTableModel model ) { Icon[] icons = new Icon[ model.getRowCount() ]; for( int i = 0; i < model.getRowCount(); i++ ) { String raw = (String)model.getValueAt( i, 0 ); if ( raw.startsWith( LIBRARY_PREFIX ) ) { icons[i] = ICON_LIBRARY; } else if ( raw.startsWith( ANT_ARTIFACT_PREFIX ) ) { icons[i] = ICON_ARTIFACT; } else { icons[i] = ICON_JAR; } } model.addColumn( "Icon", icons ); } }