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.makewizard;
043:
044: import java.io.File;
045: import java.util.ArrayList;
046: import javax.swing.DefaultListModel;
047: import org.netbeans.modules.cnd.makewizard.EnterItemsPanel.ErrorInfo;
048:
049: /**
050: * Create the Sources panel in the Makefile wizard.
051: */
052:
053: public class MakefileSourcesPanel extends EnterItemsPanel {
054:
055: /** Save the source filter rather than doing repeated lookups */
056: private String srcFilter;
057:
058: /** Serial version number */
059: static final long serialVersionUID = -6961895016031819992L;
060:
061: private boolean initialized;
062:
063: /** Store the target key */
064: private int key;
065:
066: /**
067: * Constructor for the Makefile sources panel.
068: */
069: public MakefileSourcesPanel(MakefileWizard wd) {
070: super (wd);
071: String subtitle = new String(
072: getString("LBL_MakefileSourcesPanel")); // NOI18N
073: setSubTitle(subtitle);
074: this .getAccessibleContext().setAccessibleDescription(subtitle);
075: initialized = false;
076: }
077:
078: /** Defer widget creation until the panel needs to be displayed */
079: private void create() {
080: int flags;
081: String msg;
082: if (getMakefileData().getMakefileType() == MakefileData.COMPLEX_MAKEFILE_TYPE) {
083: flags = EXPAND_DIRS | MSP_FILTER | DYNAMIC_DEFAULT_BUTTONS
084: | DYNAMIC_LAST_BUTTON | ITEMS_REQUIRED;
085: msg = getString("LBL_SourceNamesComplex"); // NOI18N
086: } else {
087: flags = EXPAND_DIRS | MSP_FILTER | DYNAMIC_DEFAULT_BUTTONS
088: | ITEMS_REQUIRED;
089: msg = getString("LBL_SourceNamesSimple"); // NOI18N
090: }
091: create(msg, getString("MNEM_SourceNames").charAt(0), flags); // NOI18N
092: }
093:
094: /** Set the label for the Source List */
095: protected String getListLabel() {
096: return getString("LBL_SourceList"); // NOI18N
097: }
098:
099: /** Set the mnemonic for the Source List */
100: protected char getListMnemonic() {
101: return getString("MNEM_SourceList").charAt(0); // NOI18N
102: }
103:
104: /** Get the title and message for the error dialog */
105: protected ErrorInfo getErrorInfo() {
106: return new ErrorInfo(getString("DLG_NoFilesError"), // NOI18N
107: getString("MSG_NoFilesMatched")); // NOI18N
108: }
109:
110: /** Validate the source files */
111: public void validateData(ArrayList msgs, int key) {
112: TargetData target = (TargetData) getMakefileData().getTarget(
113: key);
114:
115: String[] slist = target.getSourcesList();
116: if (slist == null) {
117: warn(msgs, WARN_NO_SRC_FILES, target.getName());
118: } else {
119: String cwd = getMakefileData().getBaseDirectory(
120: MakefileData.EXPAND);
121: ArrayList dne = new ArrayList();
122: int absCount = 0;
123: int hdrCount = 0;
124: int i;
125:
126: for (i = 0; i < slist.length; i++) {
127: String srcFile = slist[i].toString();
128:
129: if (srcFile.startsWith("/")) { // NOI18N
130: absCount++;
131: }
132:
133: if (srcFile.endsWith(".h")) { // NOI18N
134: hdrCount++;
135: }
136:
137: File file;
138: if (srcFile.startsWith(File.separator)) {
139: file = new File(srcFile);
140: } else {
141: file = new File(cwd, srcFile);
142: }
143: if (!file.exists()) {
144: dne.add(new StringBuffer("\t"). // NOI18N
145: append(file.getPath()).append("\n")); // NOI18N
146: }
147: }
148:
149: if (absCount > 0) {
150: warn(msgs, WARN_ABSPATH_SRC_COUNT, target.getName(),
151: new Integer(absCount).toString());
152: }
153:
154: if (hdrCount > 0) {
155: warn(msgs, WARN_HDR_SRC_COUNT, target.getName(),
156: new Integer(hdrCount).toString());
157: }
158:
159: if (dne.size() > 0) {
160: if (dne.size() < MAX_ITEMS_TO_SHOW) {
161: warn(msgs, WARN_DNE_FILES, target.getName());
162: for (i = 0; i < dne.size(); i++) {
163: msgs.add(dne.get(i));
164: }
165: msgs.add(new String("\n")); // NOI18N
166: } else {
167: warn(msgs, WARN_DNE_COUNT, target.getName(),
168: new Integer(dne.size()).toString());
169: }
170: }
171: }
172: }
173:
174: /** Create the widgets if not initialized. Also initialize the text field */
175: public void addNotify() {
176: TargetData target = getMakefileData().getCurrentTarget();
177: key = target.getKey();
178:
179: if (!initialized) {
180: create();
181: srcFilter = getString("DFLT_SourceFilter"); // NOI18N
182: initialized = true;
183: }
184:
185: // Initialize the text field
186: getEntryText().setText(srcFilter);
187:
188: // Initialize the list. First, remove any from the JList. Then, add any
189: // entries from the target into the JList.
190: DefaultListModel model = (DefaultListModel) getList()
191: .getModel();
192: model.removeAllElements();
193: String[] slist = target.getSourcesList();
194: if (slist != null) {
195: for (int i = 0; i < slist.length; i++) {
196: model.addElement(slist[i]);
197: }
198: }
199:
200: super .addNotify();
201: }
202:
203: /** Get the data from the panel and update the target */
204: public void removeNotify() {
205: super .removeNotify();
206:
207: TargetData target = getMakefileData().getTarget(key);
208:
209: String[] slist = getListItems();
210: target.setSourcesList(slist);
211: }
212: }
|