ada.project/src/org/netbeans/modules/ada/project/ui/properties/CustomizerBuild.java
author Andrea Lucarelli <raster@netbeans.org>
Sun, 22 Aug 2010 23:37:11 +0200
branchrelease68
changeset 16367 d2820c029d3a
parent 15779 367c7fdb5d23
permissions -rw-r--r--
Add JVM compiler support.
raster@14488
     1
/*
raster@14488
     2
 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
raster@14488
     3
 *
raster@14488
     4
 * Copyright 2008 Sun Microsystems, Inc. All rights reserved.
raster@14488
     5
 *
raster@14488
     6
 * The contents of this file are subject to the terms of either the GNU
raster@14488
     7
 * General Public License Version 2 only ("GPL") or the Common
raster@14488
     8
 * Development and Distribution License("CDDL") (collectively, the
raster@14488
     9
 * "License"). You may not use this file except in compliance with the
raster@14488
    10
 * License. You can obtain a copy of the License at
raster@14488
    11
 * http://www.netbeans.org/cddl-gplv2.html
raster@14488
    12
 * or nbbuild/licenses/CDDL-GPL-2-CP. See the License for the
raster@14488
    13
 * specific language governing permissions and limitations under the
raster@14488
    14
 * License.  When distributing the software, include this License Header
raster@14488
    15
 * Notice in each file and include the License file at
raster@14488
    16
 * nbbuild/licenses/CDDL-GPL-2-CP.  Sun designates this
raster@14488
    17
 * particular file as subject to the "Classpath" exception as provided
raster@14488
    18
 * by Sun in the GPL Version 2 section of the License file that
raster@14488
    19
 * accompanied this code. If applicable, add the following below the
raster@14488
    20
 * License Header, with the fields enclosed by brackets [] replaced by
raster@14488
    21
 * your own identifying information:
raster@14488
    22
 * "Portions Copyrighted [year] [name of copyright owner]"
raster@14488
    23
 *
raster@14488
    24
 * If you wish your version of this file to be governed by only the CDDL
raster@14488
    25
 * or only the GPL Version 2, indicate your decision by adding
raster@14488
    26
 * "[Contributor] elects to include this software in this distribution
raster@14488
    27
 * under the [CDDL or GPL Version 2] license." If you do not indicate a
raster@14488
    28
 * single choice of license, a recipient has the option to distribute
raster@14488
    29
 * your version of this file under either the CDDL, the GPL Version 2 or
raster@14488
    30
 * to extend the choice of license to its licensees as provided above.
raster@14488
    31
 * However, if you add GPL Version 2 code and therefore, elected the GPL
raster@14488
    32
 * Version 2 license, then the option applies only if the new code is
raster@14488
    33
 * made subject to such option by the copyright holder.
raster@14488
    34
 *
raster@14488
    35
 * Contributor(s):
raster@14488
    36
 *
raster@14488
    37
 * Portions Copyrighted 2008 Sun Microsystems, Inc.
raster@14488
    38
 */
raster@14488
    39
package org.netbeans.modules.ada.project.ui.properties;
raster@14488
    40
raster@14488
    41
import java.io.IOException;
raster@15779
    42
import javax.swing.JPanel;
raster@14488
    43
import javax.swing.event.DocumentEvent;
raster@14488
    44
import javax.swing.event.DocumentListener;
raster@14488
    45
import javax.swing.text.Document;
raster@14488
    46
import org.netbeans.api.ada.platform.AdaPlatform;
raster@14488
    47
import org.netbeans.api.ada.platform.AdaPlatformManager;
raster@14488
    48
import org.netbeans.modules.ada.project.ui.Utils;
raster@14488
    49
import org.openide.filesystems.FileObject;
jskrivanek@14752
    50
import org.openide.filesystems.FileUtil;
raster@14488
    51
import org.openide.loaders.DataObject;
raster@14488
    52
import org.openide.loaders.InstanceDataObject;
raster@14488
    53
import org.openide.util.Exceptions;
raster@14488
    54
import org.openide.util.HelpCtx;
raster@14488
    55
import org.openide.util.actions.CallableSystemAction;
raster@14488
    56
raster@14488
    57
/**
raster@14488
    58
 *
raster@14488
    59
 * @author  Andrea Lucarelli
raster@14488
    60
 */
raster@15779
    61
public class CustomizerBuild extends JPanel implements HelpCtx.Provider {
raster@14488
    62
raster@14488
    63
    private final AdaProjectProperties uiProperties;
raster@14488
    64
    private final DocListener listener;
raster@16367
    65
    private final AdaPlatformManager manager;
raster@16367
    66
    
raster@14488
    67
    /** Creates new form CustomizerBuild */
raster@14488
    68
    public CustomizerBuild(final AdaProjectProperties uiProperties) {
raster@14488
    69
        assert uiProperties != null;
raster@14488
    70
        this.uiProperties = uiProperties;
raster@14488
    71
        initComponents();
raster@14488
    72
        String _tmp = uiProperties.getMainModule();
raster@14488
    73
        if (_tmp != null) {
raster@14488
    74
            this.mainModule.setText(_tmp);
raster@14488
    75
        }
raster@14488
    76
        this.listener = new DocListener();
raster@14488
    77
        this.mainModule.getDocument().addDocumentListener(listener);
raster@14488
    78
raster@14488
    79
        this.platforms.setRenderer(Utils.createPlatformRenderer());
raster@14488
    80
        this.platforms.setModel(Utils.createPlatformModel());
raster@16367
    81
        manager = AdaPlatformManager.getInstance();
raster@14488
    82
        String pid = uiProperties.getActivePlatformId();
raster@14488
    83
        if (pid == null) {
raster@14488
    84
            pid = manager.getDefaultPlatform();
raster@14488
    85
        }
raster@16367
    86
raster@14488
    87
        final AdaPlatform activePlatform = manager.getPlatform(pid);
raster@14488
    88
        if (activePlatform != null) {
raster@14488
    89
            platforms.setSelectedItem(activePlatform);
raster@14488
    90
        }
raster@16367
    91
        
raster@16367
    92
        if (activePlatform.getJvmGnatCompilerCommand() != null) {
raster@16367
    93
            nativeFormat.setEnabled(true);
raster@16367
    94
            jvmFormat.setEnabled(true);
raster@16367
    95
            if (uiProperties.getOutputBuildFormat().equalsIgnoreCase(AdaProjectProperties.NATIVE_FORMAT)) {
raster@16367
    96
                nativeFormat.setSelected(true);
raster@16367
    97
                jvmFormat.setSelected(false);
raster@16367
    98
            }
raster@16367
    99
            else {
raster@16367
   100
                nativeFormat.setSelected(false);
raster@16367
   101
                jvmFormat.setSelected(true);
raster@16367
   102
            }
raster@16367
   103
        }
raster@16367
   104
        else {
raster@16367
   105
            nativeFormat.setSelected(true);
raster@16367
   106
            jvmFormat.setSelected(false);
raster@16367
   107
            nativeFormat.setEnabled(false);
raster@16367
   108
            jvmFormat.setEnabled(false);
raster@16367
   109
        }
raster@16367
   110
        
raster@14488
   111
    }
raster@14488
   112
raster@14488
   113
    public HelpCtx getHelpCtx() {
raster@14488
   114
        return new HelpCtx(this.getClass());
raster@14488
   115
    }
raster@14488
   116
raster@14488
   117
    /** This method is called from within the constructor to
raster@14488
   118
     * initialize the form.
raster@14488
   119
     * WARNING: Do NOT modify this code. The content of this method is
raster@14488
   120
     * always regenerated by the Form Editor.
raster@14488
   121
     */
raster@14488
   122
    @SuppressWarnings("unchecked")
raster@14488
   123
    // <editor-fold defaultstate="collapsed" desc="Generated Code">//GEN-BEGIN:initComponents
raster@14488
   124
    private void initComponents() {
raster@14488
   125
raster@14488
   126
        jLabel1 = new javax.swing.JLabel();
raster@14488
   127
        mainModule = new javax.swing.JTextField();
raster@15779
   128
        browse = new javax.swing.JButton();
raster@14488
   129
        platforms = new javax.swing.JComboBox();
raster@14488
   130
        jLabel2 = new javax.swing.JLabel();
raster@14488
   131
        manage = new javax.swing.JButton();
raster@16367
   132
        jLabel3 = new javax.swing.JLabel();
raster@16367
   133
        nativeFormat = new javax.swing.JRadioButton();
raster@16367
   134
        jvmFormat = new javax.swing.JRadioButton();
raster@14488
   135
raster@14488
   136
        jLabel1.setLabelFor(mainModule);
raster@14488
   137
        org.openide.awt.Mnemonics.setLocalizedText(jLabel1, org.openide.util.NbBundle.getMessage(CustomizerBuild.class, "CustomizerRun.mainModule.text")); // NOI18N
raster@14488
   138
raster@14488
   139
        mainModule.setEditable(false);
raster@14488
   140
raster@15779
   141
        org.openide.awt.Mnemonics.setLocalizedText(browse, org.openide.util.NbBundle.getMessage(CustomizerBuild.class, "CustomizerRun.browseMain.text")); // NOI18N
raster@15779
   142
        browse.addActionListener(new java.awt.event.ActionListener() {
raster@14488
   143
            public void actionPerformed(java.awt.event.ActionEvent evt) {
raster@15779
   144
                browseActionPerformed(evt);
raster@14488
   145
            }
raster@14488
   146
        });
raster@14488
   147
raster@14488
   148
        platforms.setModel(new javax.swing.DefaultComboBoxModel(new String[] { "Item 1", "Item 2", "Item 3", "Item 4" }));
raster@14488
   149
        platforms.addActionListener(new java.awt.event.ActionListener() {
raster@14488
   150
            public void actionPerformed(java.awt.event.ActionEvent evt) {
raster@14488
   151
                platformsActionPerformed(evt);
raster@14488
   152
            }
raster@14488
   153
        });
raster@14488
   154
raster@14488
   155
        jLabel2.setText(org.openide.util.NbBundle.getMessage(CustomizerBuild.class, "CustomizerBuild.jLabel2.text")); // NOI18N
raster@14488
   156
raster@14488
   157
        manage.setText(org.openide.util.NbBundle.getMessage(CustomizerBuild.class, "CustomizerBuild.manage.text")); // NOI18N
raster@14488
   158
        manage.addActionListener(new java.awt.event.ActionListener() {
raster@14488
   159
            public void actionPerformed(java.awt.event.ActionEvent evt) {
raster@14488
   160
                manageActionPerformed(evt);
raster@14488
   161
            }
raster@14488
   162
        });
raster@14488
   163
raster@16367
   164
        jLabel3.setLabelFor(mainModule);
raster@16367
   165
        org.openide.awt.Mnemonics.setLocalizedText(jLabel3, org.openide.util.NbBundle.getMessage(CustomizerBuild.class, "CustomizerBuild.jLabel3.text")); // NOI18N
raster@16367
   166
raster@16367
   167
        nativeFormat.setText(org.openide.util.NbBundle.getMessage(CustomizerBuild.class, "CustomizerBuild.nativeFormat.text")); // NOI18N
raster@16367
   168
        nativeFormat.addActionListener(new java.awt.event.ActionListener() {
raster@16367
   169
            public void actionPerformed(java.awt.event.ActionEvent evt) {
raster@16367
   170
                nativeFormatActionPerformed(evt);
raster@16367
   171
            }
raster@16367
   172
        });
raster@16367
   173
raster@16367
   174
        jvmFormat.setText(org.openide.util.NbBundle.getMessage(CustomizerBuild.class, "CustomizerBuild.jvmFormat.text")); // NOI18N
raster@16367
   175
        jvmFormat.addActionListener(new java.awt.event.ActionListener() {
raster@16367
   176
            public void actionPerformed(java.awt.event.ActionEvent evt) {
raster@16367
   177
                jvmFormatActionPerformed(evt);
raster@16367
   178
            }
raster@16367
   179
        });
raster@16367
   180
raster@14488
   181
        org.jdesktop.layout.GroupLayout layout = new org.jdesktop.layout.GroupLayout(this);
raster@14488
   182
        this.setLayout(layout);
raster@14488
   183
        layout.setHorizontalGroup(
raster@14488
   184
            layout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING)
raster@14488
   185
            .add(layout.createSequentialGroup()
raster@14488
   186
                .addContainerGap()
raster@14488
   187
                .add(layout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING)
raster@16367
   188
                    .add(layout.createSequentialGroup()
raster@16367
   189
                        .add(jLabel3)
raster@16367
   190
                        .add(49, 49, 49)
raster@16367
   191
                        .add(nativeFormat)
raster@16367
   192
                        .add(18, 18, 18)
raster@16367
   193
                        .add(jvmFormat))
raster@16367
   194
                    .add(layout.createSequentialGroup()
raster@16367
   195
                        .add(layout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING)
raster@16367
   196
                            .add(jLabel1)
raster@16367
   197
                            .add(jLabel2))
raster@16367
   198
                        .add(49, 49, 49)
raster@16367
   199
                        .add(layout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING)
raster@16367
   200
                            .add(platforms, 0, 323, Short.MAX_VALUE)
raster@16367
   201
                            .add(mainModule, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, 323, Short.MAX_VALUE))
raster@16367
   202
                        .addPreferredGap(org.jdesktop.layout.LayoutStyle.RELATED)
raster@16367
   203
                        .add(layout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING, false)
raster@16367
   204
                            .add(org.jdesktop.layout.GroupLayout.TRAILING, browse, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
raster@16367
   205
                            .add(org.jdesktop.layout.GroupLayout.TRAILING, manage, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))))
raster@14488
   206
                .addContainerGap())
raster@14488
   207
        );
raster@14488
   208
        layout.setVerticalGroup(
raster@14488
   209
            layout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING)
raster@14488
   210
            .add(layout.createSequentialGroup()
raster@14488
   211
                .add(4, 4, 4)
raster@14488
   212
                .add(layout.createParallelGroup(org.jdesktop.layout.GroupLayout.BASELINE)
raster@14488
   213
                    .add(platforms, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE)
raster@14488
   214
                    .add(jLabel2)
raster@14488
   215
                    .add(manage))
raster@14488
   216
                .add(9, 9, 9)
raster@14488
   217
                .add(layout.createParallelGroup(org.jdesktop.layout.GroupLayout.BASELINE)
raster@14488
   218
                    .add(jLabel1)
raster@15779
   219
                    .add(browse)
raster@14488
   220
                    .add(mainModule, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE))
raster@16367
   221
                .addPreferredGap(org.jdesktop.layout.LayoutStyle.UNRELATED)
raster@16367
   222
                .add(layout.createParallelGroup(org.jdesktop.layout.GroupLayout.BASELINE)
raster@16367
   223
                    .add(jLabel3)
raster@16367
   224
                    .add(nativeFormat)
raster@16367
   225
                    .add(jvmFormat))
raster@16367
   226
                .addContainerGap(194, Short.MAX_VALUE))
raster@14488
   227
        );
raster@14488
   228
    }// </editor-fold>//GEN-END:initComponents
raster@14488
   229
raster@15779
   230
private void browseActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_browseActionPerformed
raster@14488
   231
    String main = Utils.chooseMainModule(uiProperties.getProject().getSourceRoots().getRoots());
raster@14488
   232
    if (main != null) {
raster@14488
   233
        mainModule.setText(main);
raster@14488
   234
    }
raster@15779
   235
}//GEN-LAST:event_browseActionPerformed
raster@14488
   236
raster@14488
   237
private void platformsActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_platformsActionPerformed
raster@14488
   238
    uiProperties.setActivePlatformId(
raster@14488
   239
            ((AdaPlatform) platforms.getSelectedItem()).getName());
raster@16367
   240
raster@16367
   241
    final AdaPlatform activePlatform = manager.getPlatform(uiProperties.getActivePlatformId());
raster@16367
   242
    
raster@16367
   243
    if (activePlatform.getJvmGnatCompilerCommand() != null) {
raster@16367
   244
        nativeFormat.setEnabled(true);
raster@16367
   245
        jvmFormat.setEnabled(true);
raster@16367
   246
        if (uiProperties.getOutputBuildFormat().equalsIgnoreCase(AdaProjectProperties.NATIVE_FORMAT)) {
raster@16367
   247
            nativeFormat.setSelected(true);
raster@16367
   248
            jvmFormat.setSelected(false);
raster@16367
   249
        } else {
raster@16367
   250
            nativeFormat.setSelected(false);
raster@16367
   251
            jvmFormat.setSelected(true);
raster@16367
   252
        }
raster@16367
   253
    } else {
raster@16367
   254
        nativeFormat.setSelected(true);
raster@16367
   255
        jvmFormat.setSelected(false);
raster@16367
   256
        nativeFormat.setEnabled(false);
raster@16367
   257
        jvmFormat.setEnabled(false);
raster@16367
   258
        uiProperties.setOutputBuildFormat(AdaProjectProperties.NATIVE_FORMAT);
raster@16367
   259
    }
raster@16367
   260
raster@14488
   261
}//GEN-LAST:event_platformsActionPerformed
raster@14488
   262
raster@14488
   263
private void manageActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_manageActionPerformed
raster@14626
   264
    // Workaround, Needs an API to display platform customizer
raster@16367
   265
    final FileObject fo = FileUtil.getConfigFile("Actions/Ada/org-netbeans-modules-ada-platform-PlatformsCustomizerAction.instance");  //NOI18N
raster@14488
   266
    if (fo != null) {
raster@14488
   267
        try {
raster@14488
   268
            InstanceDataObject ido = (InstanceDataObject) DataObject.find(fo);
raster@14488
   269
            CallableSystemAction action = (CallableSystemAction) ido.instanceCreate();
raster@14488
   270
            action.performAction();
raster@14626
   271
            platforms.setModel(Utils.createPlatformModel()); //Currentl the AdaManager doesn't fire events, we need to replace model.
raster@14488
   272
        } catch (IOException ex) {
raster@14488
   273
            Exceptions.printStackTrace(ex);
raster@14488
   274
        } catch (ClassNotFoundException ex) {
raster@14488
   275
            Exceptions.printStackTrace(ex);
raster@14488
   276
        }
raster@14488
   277
    }
raster@14488
   278
}//GEN-LAST:event_manageActionPerformed
raster@16367
   279
raster@16367
   280
private void nativeFormatActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_nativeFormatActionPerformed
raster@16367
   281
    uiProperties.setOutputBuildFormat(AdaProjectProperties.NATIVE_FORMAT);
raster@16367
   282
    jvmFormat.setSelected(false);
raster@16367
   283
}//GEN-LAST:event_nativeFormatActionPerformed
raster@16367
   284
raster@16367
   285
private void jvmFormatActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jvmFormatActionPerformed
raster@16367
   286
    uiProperties.setOutputBuildFormat(AdaProjectProperties.JVM_FORMAT);
raster@16367
   287
    nativeFormat.setSelected(false);
raster@16367
   288
}//GEN-LAST:event_jvmFormatActionPerformed
raster@16367
   289
raster@14488
   290
    // Variables declaration - do not modify//GEN-BEGIN:variables
raster@15779
   291
    private javax.swing.JButton browse;
raster@14488
   292
    private javax.swing.JLabel jLabel1;
raster@14488
   293
    private javax.swing.JLabel jLabel2;
raster@16367
   294
    private javax.swing.JLabel jLabel3;
raster@16367
   295
    private javax.swing.JRadioButton jvmFormat;
raster@14488
   296
    private javax.swing.JTextField mainModule;
raster@14488
   297
    private javax.swing.JButton manage;
raster@16367
   298
    private javax.swing.JRadioButton nativeFormat;
raster@14488
   299
    private javax.swing.JComboBox platforms;
raster@14488
   300
    // End of variables declaration//GEN-END:variables
raster@14488
   301
raster@14488
   302
    private class DocListener implements DocumentListener {
raster@14488
   303
raster@14488
   304
        public void insertUpdate(DocumentEvent e) {
raster@14488
   305
            handleDocEvent(e);
raster@14488
   306
        }
raster@14488
   307
raster@14488
   308
        public void removeUpdate(DocumentEvent e) {
raster@14488
   309
            handleDocEvent(e);
raster@14488
   310
        }
raster@14488
   311
raster@14488
   312
        public void changedUpdate(DocumentEvent e) {
raster@14488
   313
            handleDocEvent(e);
raster@14488
   314
        }
raster@14488
   315
raster@14488
   316
        private void handleDocEvent(final DocumentEvent e) {
raster@14488
   317
            final Document doc = e.getDocument();
raster@14488
   318
            if (doc == mainModule.getDocument()) {
raster@14488
   319
                uiProperties.setMainModule(mainModule.getText());
raster@14488
   320
            }
raster@14488
   321
        }
raster@14488
   322
    }
raster@14488
   323
}