001: /*
002: * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
003: *
004: * Copyright 1997-2007 Sun Microsystems, Inc. All rights reserved.
005: *
006: * The contents of this file are subject to the terms of either the GNU
007: * General Public License Version 2 only ("GPL") or the Common
008: * Development and Distribution License("CDDL") (collectively, the
009: * "License"). You may not use this file except in compliance with the
010: * License. You can obtain a copy of the License at
011: * http://www.netbeans.org/cddl-gplv2.html
012: * or nbbuild/licenses/CDDL-GPL-2-CP. See the License for the
013: * specific language governing permissions and limitations under the
014: * License. When distributing the software, include this License Header
015: * Notice in each file and include the License file at
016: * nbbuild/licenses/CDDL-GPL-2-CP. Sun designates this
017: * particular file as subject to the "Classpath" exception as provided
018: * by Sun in the GPL Version 2 section of the License file that
019: * accompanied this code. If applicable, add the following below the
020: * License Header, with the fields enclosed by brackets [] replaced by
021: * your own identifying information:
022: * "Portions Copyrighted [year] [name of copyright owner]"
023: *
024: * Contributor(s):
025: *
026: * The Original Software is NetBeans. The Initial Developer of the Original
027: * Software is Sun Microsystems, Inc. Portions Copyright 1997-2007 Sun
028: * Microsystems, Inc. All Rights Reserved.
029: *
030: * If you wish your version of this file to be governed by only the CDDL
031: * or only the GPL Version 2, indicate your decision by adding
032: * "[Contributor] elects to include this software in this distribution
033: * under the [CDDL or GPL Version 2] license." If you do not indicate a
034: * single choice of license, a recipient has the option to distribute
035: * your version of this file under either the CDDL, the GPL Version 2 or
036: * to extend the choice of license to its licensees as provided above.
037: * However, if you add GPL Version 2 code and therefore, elected the GPL
038: * Version 2 license, then the option applies only if the new code is
039: * made subject to such option by the copyright holder.
040: */
041:
042: package org.netbeans.modules.cnd.settings;
043:
044: import java.beans.PropertyEditorManager;
045: import java.io.File;
046: import java.util.ResourceBundle;
047: import org.netbeans.modules.cnd.builds.ErrorExpression;
048: import org.netbeans.modules.cnd.builds.ErrorExpressionEditor;
049: import org.openide.DialogDisplayer;
050: import org.openide.NotifyDescriptor;
051: import org.openide.util.HelpCtx;
052: import org.openide.util.NbBundle;
053: import org.openide.util.SharedClassObject;
054:
055: /** Settings for the C/C++/Fortran Module. The compile/build options stored
056: * in this class are <B>default</B> options which will be applied to new files.
057: * Once a file has been created its options may diverge from the defaults. A
058: * files options do not change if these default options are changed.
059: *
060: */
061:
062: public class MakeSettings extends SharedClassObject {
063:
064: /** serial uid */
065: static final long serialVersionUID = 1276277545941336641L;
066:
067: public static final String PROP_DEFAULT_BUILD_DIR = "defaultBuildDirectory"; //NOI18N
068: public static final String PROP_DEFAULT_MAKE_COMMAND = "defaultMakeCommand"; //NOI18N
069: public static final String PROP_ERROR_EXPRESSION = "errorExpression"; //NOI18N
070: public static final String PROP_EXECUTOR = "executor"; //NOI18N
071: public static final String PROP_REUSE_OUTPUT = "reuseOutput"; //NOI18N
072: public static final String PROP_SAVE_ALL = "saveAll"; //NOI18N
073:
074: public static final ErrorExpression SUN_COMPILERS;
075: public static final ErrorExpression GNU_COMPILERS;
076:
077: /** The resource bundle for the form editor */
078: private static ResourceBundle bundle;
079:
080: static {
081: SUN_COMPILERS = new ErrorExpression(
082: getString("LBL_SunErrorName"), //NOI18N
083: getString("CTL_SunErrorRE"), 1, 2, -1, 3); //NOI18N
084: GNU_COMPILERS = new ErrorExpression(
085: getString("LBL_GnuErrorName"), //NOI18N
086: getString("CTL_GnuErrorRE"), 1, 2, -1, 3); //NOI18N
087: }
088:
089: /**
090: * Initialize each property.
091: */
092: protected void initialize() {
093:
094: super .initialize();
095: registerPropertyEditors();
096:
097: setDefaultMakeCommand(getString("DEFAULT_MAKE_COMMAND_VALUE")); // NOI18N
098: setReuseOutput(false);
099: setSaveAll(true);
100:
101: // Define and set the initial ErrorExpressions
102: if (System.getProperty("os.name", "").toLowerCase().indexOf(
103: "sunos") >= 0)
104: setErrorExpression(SUN_COMPILERS);
105: else
106: setErrorExpression(GNU_COMPILERS);
107: }
108:
109: /**
110: * Get the display name.
111: *
112: * @return value of OPTION_MAKE_SETTINGS_NAME
113: */
114: public String displayName() {
115: return getString("OPTION_MAKE_SETTINGS_NAME"); //NOI18N
116: }
117:
118: /**
119: * Return the singleton instance. Instantiate it if necessary.
120: */
121: public static MakeSettings getDefault() {
122: return (MakeSettings) findObject(MakeSettings.class, true);
123: }
124:
125: /** @return localized string */
126: static String getString(String s) {
127: if (bundle == null) {
128: bundle = NbBundle.getBundle(MakeSettings.class);
129: }
130: return bundle.getString(s);
131: }
132:
133: private void registerPropertyEditors() {
134: String[] searchPath = PropertyEditorManager
135: .getEditorSearchPath();
136: String[] newSP = new String[searchPath.length + 1];
137:
138: for (int i = 0; i < searchPath.length; i++) {
139: newSP[i] = searchPath[i];
140: }
141:
142: newSP[searchPath.length] = "org.netbeans.modules.cnd.builds"; // NOI18N
143: PropertyEditorManager.setEditorSearchPath(newSP);
144: PropertyEditorManager.registerEditor(ErrorExpression.class,
145: ErrorExpressionEditor.class);
146: }
147:
148: /**
149: * Getter for the default build directory. This should be a relative path
150: * from the filesystem of the current
151: * {@link org.openide.filesystems.FileObject#FileObject() FileObject}.
152: *
153: * @return the default build directory
154: */
155: public String getDefaultBuildDirectory() {
156: String dir = (String) getProperty(PROP_DEFAULT_BUILD_DIR);
157: if (dir == null) {
158: return "."; // NOI18N
159: } else {
160: return dir;
161: }
162: }
163:
164: /**
165: * Set the default build directory. This cannot be an absolute path.
166: *
167: * @param path Relative path to the build directory
168: */
169: public void setDefaultBuildDirectory(String dir) {
170: if (!dir.startsWith(File.separator)) {
171: String odir = getDefaultBuildDirectory();
172: if (!odir.equals(dir)) {
173: putProperty(PROP_DEFAULT_BUILD_DIR, dir, true);
174: }
175: } else {
176: DialogDisplayer.getDefault().notify(
177: new NotifyDescriptor.Message(
178: getString("MSG_RelBuildPath"))); //NOI18N
179: }
180: }
181:
182: /**
183: * Getter for the default make(1) program.
184: *
185: * @return the default name
186: */
187: public String getDefaultMakeCommand() {
188: return (String) getProperty(PROP_DEFAULT_MAKE_COMMAND);
189: }
190:
191: /**
192: * Set the default make command. This can be either a simple name or
193: * a path name to a specific make program.
194: *
195: * @param make name or path of the desired make program
196: */
197: public void setDefaultMakeCommand(String make) {
198: putProperty(PROP_DEFAULT_MAKE_COMMAND, make);
199: }
200:
201: /** @return Error Expression */
202: public ErrorExpression getErrorExpression() {
203: return (ErrorExpression) getProperty(PROP_ERROR_EXPRESSION);
204: }
205:
206: /** Setter for PROP_ERROR_EXPRESSION */
207: public void setErrorExpression(ErrorExpression err) {
208: putProperty(PROP_ERROR_EXPRESSION, err);
209: }
210:
211: /** If true, Ant Execution uses always the same Output tab. */
212: public boolean getReuseOutput() {
213: return ((Boolean) getProperty(PROP_REUSE_OUTPUT))
214: .booleanValue();
215: }
216:
217: /** Sets the reuseOutput property. */
218: public void setReuseOutput(boolean b) {
219: putProperty(PROP_REUSE_OUTPUT,
220: b ? Boolean.TRUE : Boolean.FALSE, true);
221: }
222:
223: /** Getter for the SaveAll property */
224: public boolean getSaveAll() {
225: return ((Boolean) getProperty(PROP_SAVE_ALL)).booleanValue();
226: }
227:
228: /** Setter for the SaveAll property */
229: public void setSaveAll(boolean sa) {
230: putProperty(PROP_SAVE_ALL, sa ? Boolean.TRUE : Boolean.FALSE,
231: true);
232: }
233:
234: public HelpCtx getHelpCtx() {
235: return new HelpCtx("Welcome_opt_building_make"); //NOI18N
236: }
237: }
|