KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > org > netbeans > bluej > BluejProjectProperties


1 /*
2  * The contents of this file are subject to the terms of the Common Development
3  * and Distribution License (the License). You may not use this file except in
4  * compliance with the License.
5  *
6  * You can obtain a copy of the License at http://www.netbeans.org/cddl.html
7  * or http://www.netbeans.org/cddl.txt.
8  *
9  * When distributing Covered Code, include this CDDL Header Notice in each file
10  * and include the License file at http://www.netbeans.org/cddl.txt.
11  * If applicable, add the following below the CDDL Header, with the fields
12  * enclosed by brackets [] replaced by your own identifying information:
13  * "Portions Copyrighted [year] [name of copyright owner]"
14  *
15  * The Original Software is NetBeans. The Initial Developer of the Original
16  * Software is Sun Microsystems, Inc. Portions Copyright 1997-2006 Sun
17  * Microsystems, Inc. All Rights Reserved.
18  */

19
20 package org.netbeans.bluej;
21
22 import java.io.File JavaDoc;
23 import java.io.IOException JavaDoc;
24 import java.net.MalformedURLException JavaDoc;
25 import java.net.URL JavaDoc;
26 import java.util.HashMap JavaDoc;
27 import java.util.HashSet JavaDoc;
28 import java.util.Iterator JavaDoc;
29 import java.util.List JavaDoc;
30 import java.util.Properties JavaDoc;
31 import java.util.Set JavaDoc;
32 import java.util.Vector JavaDoc;
33 import javax.swing.ButtonModel JavaDoc;
34 import javax.swing.ComboBoxModel JavaDoc;
35 import javax.swing.DefaultListModel JavaDoc;
36 import javax.swing.JButton JavaDoc;
37 import javax.swing.JToggleButton JavaDoc;
38 import javax.swing.ListCellRenderer JavaDoc;
39 import javax.swing.table.DefaultTableModel JavaDoc;
40 import javax.swing.text.BadLocationException JavaDoc;
41 import javax.swing.text.Document JavaDoc;
42 import org.netbeans.api.project.ProjectManager;
43 import org.netbeans.api.queries.CollocationQuery;
44 import org.netbeans.spi.project.support.ant.AntProjectHelper;
45 import org.netbeans.spi.project.support.ant.EditableProperties;
46 import org.netbeans.spi.project.support.ant.GeneratedFilesHelper;
47 import org.netbeans.spi.project.support.ant.PropertyEvaluator;
48 import org.netbeans.spi.project.support.ant.PropertyUtils;
49 import org.netbeans.spi.project.support.ant.ReferenceHelper;
50 import org.netbeans.spi.project.support.ant.ui.StoreGroup;
51 import org.openide.DialogDisplayer;
52 import org.openide.ErrorManager;
53 import org.openide.NotifyDescriptor;
54 import org.openide.filesystems.FileObject;
55 import org.openide.filesystems.FileUtil;
56 import org.openide.modules.SpecificationVersion;
57 import org.openide.util.Mutex;
58 import org.openide.util.MutexException;
59 import org.openide.util.NbBundle;
60
61 /**
62  * @author mkleint
63  */

64 public class BluejProjectProperties {
65     
66     
67     // Properties stored in the PROJECT.PROPERTIES
68
public static final String JavaDoc RUN_JVM_ARGS = "run.jvmargs"; // NOI18N
69
public static final String JavaDoc RUN_WORK_DIR = "work.dir"; // NOI18N
70
public static final String JavaDoc MAIN_CLASS = "main.class"; // NOI18N
71

72     
73                 
74     // Properties stored in the PRIVATE.PROPERTIES
75
public static final String JavaDoc APPLICATION_ARGS = "application.args"; // NOI18N
76

77     
78
79     // CustomizerRun
80
Document JavaDoc MAIN_CLASS_MODEL;
81     Document JavaDoc APPLICATION_ARGS_MODEL;
82     Document JavaDoc RUN_JVM_ARGS_MODEL;
83     Document JavaDoc RUN_WORK_DIR_MODEL;
84
85
86     // CustomizerRunTest
87

88     // Private fields ----------------------------------------------------------
89
private BluejProject project;
90     private HashMap JavaDoc properties;
91     private UpdateHelper updateHelper;
92     private PropertyEvaluator evaluator;
93     
94     private StoreGroup privateGroup;
95     private StoreGroup projectGroup;
96     
97     private Properties JavaDoc additionalProperties;
98     
99     BluejProject getProject() {
100         return project;
101     }
102     
103     /** Creates a new instance of J2SEUIProperties and initializes them */
104     public BluejProjectProperties( BluejProject project, UpdateHelper updateHelper, PropertyEvaluator evaluator ) {
105         this.project = project;
106         this.updateHelper = updateHelper;
107         this.evaluator = evaluator;
108         privateGroup = new StoreGroup();
109         projectGroup = new StoreGroup();
110                 
111         
112         additionalProperties = new Properties JavaDoc();
113         
114         init(); // Load known properties
115
}
116
117     /** Initializes the visual models
118      */

119     private void init() {
120         
121     
122                 
123         // CustomizerLibraries
124
EditableProperties projectProperties = updateHelper.getProperties( AntProjectHelper.PROJECT_PROPERTIES_PATH );
125         
126
127         // CustomizerRun
128
MAIN_CLASS_MODEL = projectGroup.createStringDocument( evaluator, MAIN_CLASS );
129         APPLICATION_ARGS_MODEL = privateGroup.createStringDocument( evaluator, APPLICATION_ARGS );
130         RUN_JVM_ARGS_MODEL = projectGroup.createStringDocument( evaluator, RUN_JVM_ARGS );
131         RUN_WORK_DIR_MODEL = privateGroup.createStringDocument( evaluator, RUN_WORK_DIR );
132                 
133     }
134     
135     public void save() {
136         try {
137             // Store properties
138
Boolean JavaDoc result = (Boolean JavaDoc) ProjectManager.mutex().writeAccess(new Mutex.ExceptionAction() {
139                 public Object JavaDoc run() throws IOException JavaDoc {
140                    
141                     storeProperties();
142                     return Boolean.TRUE;
143                 }
144             });
145             // and save the project
146
if (result == Boolean.TRUE) {
147                 ProjectManager.getDefault().saveProject(project);
148             }
149         }
150         catch (MutexException e) {
151             ErrorManager.getDefault().notify((IOException JavaDoc)e.getException());
152         }
153         catch ( IOException JavaDoc ex ) {
154             ErrorManager.getDefault().notify( ex );
155         }
156     }
157     
158     
159         
160     private void storeProperties() throws IOException JavaDoc {
161         // Store special properties
162

163
164         // Store standard properties
165
EditableProperties projectProperties = updateHelper.getProperties( AntProjectHelper.PROJECT_PROPERTIES_PATH );
166         EditableProperties privateProperties = updateHelper.getProperties( AntProjectHelper.PRIVATE_PROPERTIES_PATH );
167         
168         if ( getDocumentText( RUN_WORK_DIR_MODEL ).trim().equals( "" ) ) { // NOI18N
169
privateProperties.remove( RUN_WORK_DIR ); // Remove the property completely if not set
170
}
171         
172         // Standard store of the properties
173
projectGroup.store( projectProperties );
174         privateGroup.store( privateProperties );
175                 
176         storeAdditionalProperties(projectProperties);
177         
178         // Store the property changes into the project
179
updateHelper.putProperties( AntProjectHelper.PROJECT_PROPERTIES_PATH, projectProperties );
180         updateHelper.putProperties( AntProjectHelper.PRIVATE_PROPERTIES_PATH, privateProperties );
181         
182     }
183   
184     private void storeAdditionalProperties(EditableProperties projectProperties) {
185         for (Iterator JavaDoc i = additionalProperties.keySet().iterator(); i.hasNext();) {
186             String JavaDoc key = (String JavaDoc)i.next();
187             projectProperties.put(key, additionalProperties.getProperty(key));
188         }
189     }
190     
191     private static String JavaDoc getDocumentText( Document JavaDoc document ) {
192         try {
193             return document.getText( 0, document.getLength() );
194         }
195         catch( BadLocationException JavaDoc e ) {
196             return ""; // NOI18N
197
}
198     }
199     
200     /* This is used by CustomizerWSServiceHost */
201     public void putAdditionalProperty(String JavaDoc propertyName, String JavaDoc propertyValue) {
202         additionalProperties.setProperty(propertyName, propertyValue);
203     }
204     
205 // private static boolean showModifiedMessage (String title) {
206
// String message = NbBundle.getMessage(BluejProjectProperties.class,"TXT_Regenerate");
207
// JButton regenerateButton = new JButton (NbBundle.getMessage(BluejProjectProperties.class,"CTL_RegenerateButton"));
208
// regenerateButton.setDefaultCapable(true);
209
// regenerateButton.getAccessibleContext().setAccessibleDescription (NbBundle.getMessage(BluejProjectProperties.class,"AD_RegenerateButton"));
210
// NotifyDescriptor d = new NotifyDescriptor.Message (message, NotifyDescriptor.WARNING_MESSAGE);
211
// d.setTitle(title);
212
// d.setOptionType(NotifyDescriptor.OK_CANCEL_OPTION);
213
// d.setOptions(new Object[] {regenerateButton, NotifyDescriptor.CANCEL_OPTION});
214
// return DialogDisplayer.getDefault().notify(d) == regenerateButton;
215
// }
216

217 }
218
Popular Tags