blob: 253a1bdcdb056a82491d7b865f85fda1004409c8 [file] [log] [blame]
/*
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. The ASF licenses this file
* to you under the Apache License, Version 2.0 (the
* "License"); you may not use this file except in compliance
* with the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing,
* software distributed under the License is distributed on an
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
* KIND, either express or implied. See the License for the
* specific language governing permissions and limitations
* under the License.
*/
/*
* Contributor(s): Craig MacKay
*/
package org.netbeans.modules.spring.webmvc;
import java.util.ArrayList;
import java.util.List;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.swing.ComboBoxModel;
import javax.swing.DefaultComboBoxModel;
import javax.swing.SwingUtilities;
import javax.swing.event.DocumentEvent;
import javax.swing.event.DocumentListener;
import org.netbeans.api.project.libraries.Library;
import org.netbeans.api.project.libraries.LibraryManager;
import org.netbeans.modules.spring.api.SpringUtilities;
import org.openide.util.ChangeSupport;
import org.openide.util.NbBundle.Messages;
import org.openide.util.RequestProcessor;
/**
* Provides the user interface for configuring a Spring Web MVC web application
*
* @author Craig MacKay
*/
public class SpringConfigPanelVisual extends javax.swing.JPanel {
private static final Logger LOG = Logger.getLogger(SpringConfigPanelVisual.class.getName());
private static final long serialVersionUID = 1L;
private boolean libsInitialized = false;
private final List<SpringLibrary> springLibs = new ArrayList<>();
private SpringLibrary springLibrary;
private final SpringWebModuleExtender extender;
private final ChangeSupport changeSupport = new ChangeSupport(this);
private final DocumentListener docListener = new DocumentListener() {
@Override
public void insertUpdate(DocumentEvent e) {
fireChange();
}
@Override
public void removeUpdate(DocumentEvent e) {
fireChange();
}
@Override
public void changedUpdate(DocumentEvent e) {
fireChange();
}
};
public SpringConfigPanelVisual(SpringWebModuleExtender extender) {
this.extender = extender;
initComponents();
dispatcherNameText.setText(extender.getDispatcherName());
dispatcherNameText.getDocument().addDocumentListener(docListener);
dispatcherMappingText.setText(extender.getDispatcherMapping());
dispatcherMappingText.getDocument().addDocumentListener(docListener);
includeJstlCheckBox.setSelected(extender.getIncludeJstl());
// Only add the listener at the end to make sure no events are
// fired while initializing the UI.
changeSupport.addChangeListener(extender);
initLibraries();
}
@Override
public void setEnabled(boolean enabled) {
tabbedPanel.setEnabled(enabled);
dispatcherNameText.setEnabled(enabled);
dispatcherMappingText.setEnabled(enabled);
includeJstlCheckBox.setEnabled(enabled);
springVersionLabel.setEnabled(enabled);
cbSpringVersion.setEnabled(enabled);
super.setEnabled(enabled);
}
public String getDispatcherName() {
return dispatcherNameText.getText();
}
public String getDispatcherMapping() {
return dispatcherMappingText.getText();
}
public boolean getIncludeJstl() {
return includeJstlCheckBox.isSelected();
}
private void fireChange() {
changeSupport.fireChange();
}
/** This method is called from within the constructor to
* initialize the form.
* WARNING: Do NOT modify this code. The content of this method is
* always regenerated by the Form Editor.
*/
// <editor-fold defaultstate="collapsed" desc="Generated Code">//GEN-BEGIN:initComponents
private void initComponents() {
tabbedPanel = new javax.swing.JTabbedPane();
libPanel = new javax.swing.JPanel();
includeJstlCheckBox = new javax.swing.JCheckBox();
springVersionLabel = new javax.swing.JLabel();
cbSpringVersion = new javax.swing.JComboBox();
standardPanel = new javax.swing.JPanel();
dispatcherNameText = new javax.swing.JTextField();
dispatcherNameLabel = new javax.swing.JLabel();
dispatcherMappingLabel = new javax.swing.JLabel();
dispatcherMappingText = new javax.swing.JTextField();
setLayout(new java.awt.BorderLayout());
libPanel.setAlignmentX(0.2F);
libPanel.setAlignmentY(0.2F);
org.openide.awt.Mnemonics.setLocalizedText(includeJstlCheckBox, org.openide.util.NbBundle.getMessage(SpringConfigPanelVisual.class, "LBL_IncludeJstl")); // NOI18N
includeJstlCheckBox.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
includeJstlCheckBoxActionPerformed(evt);
}
});
springVersionLabel.setLabelFor(cbSpringVersion);
org.openide.awt.Mnemonics.setLocalizedText(springVersionLabel, org.openide.util.NbBundle.getMessage(SpringConfigPanelVisual.class, "SpringConfigPanelVisual.springVersionLabel.text")); // NOI18N
cbSpringVersion.setModel(getLibrariesComboBoxModel());
cbSpringVersion.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
cbSpringVersionActionPerformed(evt);
}
});
javax.swing.GroupLayout libPanelLayout = new javax.swing.GroupLayout(libPanel);
libPanel.setLayout(libPanelLayout);
libPanelLayout.setHorizontalGroup(
libPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(libPanelLayout.createSequentialGroup()
.addContainerGap()
.addGroup(libPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(libPanelLayout.createSequentialGroup()
.addComponent(springVersionLabel)
.addGap(18, 18, 18)
.addComponent(cbSpringVersion, 0, 450, Short.MAX_VALUE))
.addGroup(libPanelLayout.createSequentialGroup()
.addComponent(includeJstlCheckBox)
.addGap(0, 0, Short.MAX_VALUE)))
.addContainerGap())
);
libPanelLayout.setVerticalGroup(
libPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(libPanelLayout.createSequentialGroup()
.addContainerGap()
.addGroup(libPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
.addComponent(springVersionLabel)
.addComponent(cbSpringVersion, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
.addGap(18, 18, 18)
.addComponent(includeJstlCheckBox)
.addContainerGap(313, Short.MAX_VALUE))
);
includeJstlCheckBox.getAccessibleContext().setAccessibleDescription(org.openide.util.NbBundle.getMessage(SpringConfigPanelVisual.class, "SpringConfigPanelVisual.includeJstlCheckBox.AccessibleContext.accessibleDescription")); // NOI18N
tabbedPanel.addTab(org.openide.util.NbBundle.getMessage(SpringConfigPanelVisual.class, "LBL_Libraries"), libPanel); // NOI18N
org.openide.awt.Mnemonics.setLocalizedText(dispatcherNameLabel, org.openide.util.NbBundle.getMessage(SpringConfigPanelVisual.class, "LBL_DispatcherName")); // NOI18N
org.openide.awt.Mnemonics.setLocalizedText(dispatcherMappingLabel, org.openide.util.NbBundle.getMessage(SpringConfigPanelVisual.class, "LBL_DispatcherMapping")); // NOI18N
javax.swing.GroupLayout standardPanelLayout = new javax.swing.GroupLayout(standardPanel);
standardPanel.setLayout(standardPanelLayout);
standardPanelLayout.setHorizontalGroup(
standardPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(standardPanelLayout.createSequentialGroup()
.addContainerGap()
.addGroup(standardPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addComponent(dispatcherNameLabel)
.addComponent(dispatcherMappingLabel))
.addGap(8, 8, 8)
.addGroup(standardPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addComponent(dispatcherNameText, javax.swing.GroupLayout.DEFAULT_SIZE, 418, Short.MAX_VALUE)
.addComponent(dispatcherMappingText, javax.swing.GroupLayout.DEFAULT_SIZE, 416, Short.MAX_VALUE))
.addContainerGap())
);
standardPanelLayout.setVerticalGroup(
standardPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(standardPanelLayout.createSequentialGroup()
.addContainerGap()
.addGroup(standardPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
.addComponent(dispatcherNameLabel)
.addComponent(dispatcherNameText, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addGroup(standardPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
.addComponent(dispatcherMappingLabel)
.addComponent(dispatcherMappingText, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
.addContainerGap(334, Short.MAX_VALUE))
);
tabbedPanel.addTab(org.openide.util.NbBundle.getMessage(SpringConfigPanelVisual.class, "LBL_Configuration"), standardPanel); // NOI18N
add(tabbedPanel, java.awt.BorderLayout.CENTER);
tabbedPanel.getAccessibleContext().setAccessibleName(org.openide.util.NbBundle.getMessage(SpringConfigPanelVisual.class, "SpringConfigPanelVisual.tabbedPanel.AccessibleContext.accessibleName")); // NOI18N
}// </editor-fold>//GEN-END:initComponents
private void includeJstlCheckBoxActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_includeJstlCheckBoxActionPerformed
fireChange();
}//GEN-LAST:event_includeJstlCheckBoxActionPerformed
private void cbSpringVersionActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_cbSpringVersionActionPerformed
springLibrary = springLibs.get(cbSpringVersion.getSelectedIndex());
}//GEN-LAST:event_cbSpringVersionActionPerformed
public void enableComponents(boolean enabled) {
standardPanel.setEnabled(enabled);
dispatcherMappingLabel.setEnabled(enabled);
dispatcherMappingText.setEnabled(enabled);
dispatcherNameLabel.setEnabled(enabled);
dispatcherNameText.setEnabled(enabled);
tabbedPanel.setEnabled(enabled);
springVersionLabel.setEnabled(enabled);
cbSpringVersion.setEnabled(enabled);
}
// Variables declaration - do not modify//GEN-BEGIN:variables
private javax.swing.JComboBox cbSpringVersion;
private javax.swing.JLabel dispatcherMappingLabel;
private javax.swing.JTextField dispatcherMappingText;
private javax.swing.JLabel dispatcherNameLabel;
private javax.swing.JTextField dispatcherNameText;
private javax.swing.JCheckBox includeJstlCheckBox;
private javax.swing.JPanel libPanel;
private javax.swing.JLabel springVersionLabel;
private javax.swing.JPanel standardPanel;
private javax.swing.JTabbedPane tabbedPanel;
// End of variables declaration//GEN-END:variables
public Library getSpringLibrary() {
if (springLibrary == null) {
return null;
}
return springLibrary.getLibrary();
}
public String getSpringLibraryVersion() {
return springLibrary.getVersion();
}
@Messages("JSFConfigurationPanelVisual.lbl.searching.libraries=Searching Libraries...")
private static ComboBoxModel getLibrariesComboBoxModel() {
return new DefaultComboBoxModel(new String[] {Bundle.JSFConfigurationPanelVisual_lbl_searching_libraries()});
}
private synchronized void initLibraries() {
if (libsInitialized) {
return;
}
springLibs.clear();
RequestProcessor.getDefault().submit(new Runnable() {
@Override
public void run() {
long startTime = System.currentTimeMillis();
final List<String> items = new ArrayList<>();
for (Library library : LibraryManager.getDefault().getLibraries()) {
if (SpringUtilities.isSpringLibrary(library)) {
items.add(library.getDisplayName());
springLibs.add(new SpringLibrary(library));
}
}
SwingUtilities.invokeLater(new Runnable() {
@Override
public void run() {
cbSpringVersion.setModel(new DefaultComboBoxModel(items.toArray(new String[items.size()])));
int selectedIndex = cbSpringVersion.getSelectedIndex();
if (selectedIndex < springLibs.size()) {
springLibrary = springLibs.get(selectedIndex);
libsInitialized = true;
repaint();
fireChange();
}
}
});
LOG.log(Level.FINEST, "Time spent in {0} initLibraries = {1} ms",
new Object[]{this.getClass().getName(), System.currentTimeMillis() - startTime});
}
});
}
private class SpringLibrary {
private Library springLibrary;
private String version;
public SpringLibrary(Library springLibrary) {
this.springLibrary = springLibrary;
}
public String getVersion() {
if (version == null) {
version = SpringUtilities.getSpringLibraryVersion(springLibrary);
}
return version;
}
public Library getLibrary() {
return springLibrary;
}
@Override
public String toString() {
return springLibrary.getDisplayName();
}
}
}