Java tutorial
/* * Copyright 2008 Michal Trzcinka * * Licensed 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. */ package org.trzcinka.intellitrac.view.configuration; import com.intellij.openapi.diagnostic.Logger; import com.intellij.openapi.ui.Messages; import com.intellij.ui.DocumentAdapter; import org.trzcinka.intellitrac.BundleLocator; import org.trzcinka.intellitrac.dto.*; import org.trzcinka.intellitrac.gateway.ConnectionFailedException; import org.trzcinka.intellitrac.gateway.TracGateway; import org.trzcinka.intellitrac.gateway.TracGatewayLocator; import org.trzcinka.intellitrac.utils.CollectionsUtils; import org.trzcinka.intellitrac.utils.DeepCopyUtils; import static org.trzcinka.intellitrac.view.view_utils.FormUtils.fillComboBox; import org.trzcinka.intellitrac.view.view_utils.MouseCursors; import javax.swing.*; import javax.swing.event.*; import java.awt.*; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.net.MalformedURLException; import java.util.ResourceBundle; /** * IntelliTrac configuration form. The configuration is per-project - it is shown under * project settings. */ public class ConfigurationForm { private static Logger logger = Logger.getInstance(ConfigurationForm.class.getName()); private static TracGateway gateway = TracGatewayLocator.retrieveTracGateway(); private JPanel connectionPanel; private JTextField tracUrl; private JTextField login; private JTextField password; private JButton testConnectionButton; private JTabbedPane rootComponent; private JComboBox componentComboBox; private JComboBox priorityComboBox; private JComboBox typeComboBox; private JComboBox milestoneComboBox; private JComboBox versionComboBox; private JList ticketTemplatesList; private JTextField ticketTemplateNameTextField; private JEditorPane ticketTemplateContentEditorPane; private JEditorPane scpWithSelectionEditorPane; private JEditorPane scpWithoutSelectionEditorPane; private JButton newButton; private JButton removeButton; private JPanel defaultValuesPanel; private DefaultComboBoxModel componentComboBoxModel; private DefaultComboBoxModel priorityComboBoxModel; private DefaultComboBoxModel typeComboBoxModel; private DefaultComboBoxModel milestoneComboBoxModel; private DefaultComboBoxModel versionComboBoxModel; private SimpleListModel<Template> ticketTemplatesListModel; public ConfigurationForm() { testConnectionButton.addActionListener(new ActionListener() { /** * Invoked when an action occurs. */ public void actionPerformed(ActionEvent e) { Container parent = ((Component) e.getSource()).getParent(); Cursor oldCursor = parent.getCursor(); parent.setCursor(MouseCursors.WAIT_CURSOR); ResourceBundle bundle = BundleLocator.getBundle(); TracGateway gateway = TracGatewayLocator.retrieveTracGateway(); try { ConnectionSettings settings = new ConnectionSettings(); settings.setLogin(login.getText()); settings.setPassword(password.getText()); settings.setTracUrl(tracUrl.getText()); gateway.testConnection(settings); Messages.showMessageDialog( bundle.getString("configuration.connection.dialogs.connection_success"), bundle.getString("dialogs.success"), Messages.getInformationIcon()); } catch (ConnectionFailedException exception) { Messages.showMessageDialog( bundle.getString("configuration.connection.dialogs.connection_failed"), bundle.getString("dialogs.error"), Messages.getErrorIcon()); } catch (MalformedURLException e1) { Messages.showMessageDialog(bundle.getString("configuration.connection.dialogs.malformed_url"), bundle.getString("dialogs.error"), Messages.getErrorIcon()); } finally { parent.setCursor(oldCursor); } } }); ticketTemplatesList.getSelectionModel().addListSelectionListener(new ListSelectionListener() { public void valueChanged(ListSelectionEvent e) { ListSelectionModel model = (ListSelectionModel) e.getSource(); if (model.isSelectionEmpty()) { ticketTemplateNameTextField.setEnabled(false); ticketTemplateContentEditorPane.setEnabled(false); ticketTemplateNameTextField.setText(null); ticketTemplateContentEditorPane.setText(null); removeButton.setEnabled(false); } else { Template selected = (Template) ticketTemplatesList.getSelectedValue(); ticketTemplateNameTextField.setEnabled(true); ticketTemplateContentEditorPane.setEnabled(true); ticketTemplateNameTextField.setText(selected.getName()); ticketTemplateContentEditorPane.setText(selected.getContent()); removeButton.setEnabled(true); } } }); ticketTemplateNameTextField.getDocument().addDocumentListener(new DocumentAdapter() { protected void textChanged(DocumentEvent e) { Template selected = (Template) ticketTemplatesList.getSelectedValue(); if (selected != null) { selected.setName(ticketTemplateNameTextField.getText()); } } }); ticketTemplateContentEditorPane.getDocument().addDocumentListener(new DocumentAdapter() { protected void textChanged(DocumentEvent e) { Template selected = (Template) ticketTemplatesList.getSelectedValue(); if (selected != null) { selected.setContent(ticketTemplateContentEditorPane.getText()); } } }); newButton.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { Template template = new Template(); template.setName( BundleLocator.getBundle().getString("configuration.ticket_templates.new_template_name")); ticketTemplatesListModel.add(template); } }); removeButton.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { ticketTemplatesListModel.remove(ticketTemplatesList.getSelectedIndex()); } }); rootComponent.addChangeListener(new ChangeListener() { public void stateChanged(ChangeEvent e) { if (defaultValuesPanel == rootComponent.getSelectedComponent()) { ConnectionSettings connectionSettings = new ConnectionSettings(); connectionSettings.setLogin(login.getText()); connectionSettings.setPassword(password.getText()); connectionSettings.setTracUrl(tracUrl.getText()); try { gateway.setConfiguration(connectionSettings); fillComboBox(componentComboBoxModel, gateway.retrieveComponents(), componentComboBox.getSelectedItem(), false); fillComboBox(priorityComboBoxModel, gateway.retrievePriorities(), priorityComboBox.getSelectedItem(), false); fillComboBox(typeComboBoxModel, gateway.retrieveTypes(), typeComboBox.getSelectedItem(), false); fillComboBox(milestoneComboBoxModel, gateway.retrieveMilestones(), milestoneComboBox.getSelectedItem(), false); fillComboBox(versionComboBoxModel, gateway.retrieveVersions(), versionComboBox.getSelectedItem(), false); } catch (Exception e1) { if (logger.isDebugEnabled()) { logger.debug(e1); } } } } }); } public void setData(TracConfiguration data) { ConnectionSettings connectionSettings = data.getConnectionSettings(); if (connectionSettings != null) { tracUrl.setText(connectionSettings.getTracUrl()); login.setText(connectionSettings.getLogin()); password.setText(connectionSettings.getPassword()); } DefaultValues defaultValues = data.getDefaultValues(); if (defaultValues != null) { componentComboBoxModel.setSelectedItem(defaultValues.getComponent()); priorityComboBoxModel.setSelectedItem(defaultValues.getPriority()); typeComboBoxModel.setSelectedItem(defaultValues.getType()); milestoneComboBoxModel.setSelectedItem(defaultValues.getMilestone()); versionComboBoxModel.setSelectedItem(defaultValues.getVersion()); try { fillComboBox(componentComboBoxModel, gateway.retrieveComponents(), defaultValues.getComponent(), false); fillComboBox(priorityComboBoxModel, gateway.retrievePriorities(), defaultValues.getPriority(), false); fillComboBox(typeComboBoxModel, gateway.retrieveTypes(), defaultValues.getType(), false); fillComboBox(milestoneComboBoxModel, gateway.retrieveMilestones(), defaultValues.getMilestone(), false); fillComboBox(versionComboBoxModel, gateway.retrieveVersions(), defaultValues.getVersion(), false); } catch (Exception e) { if (logger.isDebugEnabled()) { logger.debug(e); } } } if (data.getTicketTemplates() != null) { ticketTemplatesListModel.setData(DeepCopyUtils.deepCopy(data.getTicketTemplates())); } SendCodePointerSettings scpSettings = data.getSendCodePointerSettings(); if (scpSettings != null) { scpWithoutSelectionEditorPane.setText(scpSettings.getNoSelectionTemplate().getContent()); scpWithSelectionEditorPane.setText(scpSettings.getSelectionTemplate().getContent()); } } public void getData(TracConfiguration data) { ConnectionSettings connectionSettings = new ConnectionSettings(); connectionSettings.setTracUrl(tracUrl.getText()); connectionSettings.setLogin(login.getText()); connectionSettings.setPassword(password.getText()); data.setConnectionSettings(connectionSettings); DefaultValues defaultValues = new DefaultValues(); defaultValues.setComponent((String) componentComboBoxModel.getSelectedItem()); defaultValues.setMilestone((String) milestoneComboBoxModel.getSelectedItem()); defaultValues.setPriority((String) priorityComboBoxModel.getSelectedItem()); defaultValues.setType((String) typeComboBoxModel.getSelectedItem()); defaultValues.setVersion((String) versionComboBoxModel.getSelectedItem()); data.setDefaultValues(defaultValues); SendCodePointerSettings sendCodePointerSettings = new SendCodePointerSettings(); sendCodePointerSettings.setNoSelectionTemplate(new Template(scpWithoutSelectionEditorPane.getText())); sendCodePointerSettings.setSelectionTemplate(new Template(scpWithSelectionEditorPane.getText())); data.setSendCodePointerSettings(sendCodePointerSettings); data.setTicketTemplates(ticketTemplatesListModel.getList()); } public boolean isModified(TracConfiguration data) { ConnectionSettings connectionSettings = data.getConnectionSettings(); DefaultValues defaultValues = data.getDefaultValues(); java.util.List<Template> templates = data.getTicketTemplates(); SendCodePointerSettings scpSettings = data.getSendCodePointerSettings(); boolean connectionSettingsModified = false; if (connectionSettings != null) { connectionSettingsModified = (!login.getText().equals(connectionSettings.getLogin()) || !tracUrl.getText().equals(connectionSettings.getTracUrl()) || !password.getText().equals(connectionSettings.getPassword())); } boolean defaultValuesModified = false; if (defaultValues != null) { defaultValuesModified = modified(componentComboBoxModel, defaultValues.getComponent()) || modified(milestoneComboBoxModel, defaultValues.getMilestone()) || modified(versionComboBoxModel, defaultValues.getVersion()) || modified(typeComboBoxModel, defaultValues.getType()) || modified(priorityComboBoxModel, defaultValues.getPriority()); } boolean templatesModified = false; if (templates != null) { templatesModified = !CollectionsUtils.areListsEqual(ticketTemplatesListModel.getList(), templates); } boolean scpSettingsModified = false; if (scpSettings != null) { Template inEditorWithout = new Template(scpWithoutSelectionEditorPane.getText()); Template inEditorWith = new Template(scpWithSelectionEditorPane.getText()); scpSettingsModified = !inEditorWith.equals(scpSettings.getSelectionTemplate()) || !inEditorWithout.equals(scpSettings.getNoSelectionTemplate()); } return connectionSettingsModified || defaultValuesModified || templatesModified || scpSettingsModified; } private boolean modified(ComboBoxModel model, String value) { boolean result; Object selected = model.getSelectedItem(); if (selected == null) { result = value != null; } else { result = !selected.equals(value); } return result; } public JTabbedPane getRootComponent() { return rootComponent; } private void createUIComponents() { componentComboBoxModel = new DefaultComboBoxModel(); priorityComboBoxModel = new DefaultComboBoxModel(); typeComboBoxModel = new DefaultComboBoxModel(); milestoneComboBoxModel = new DefaultComboBoxModel(); versionComboBoxModel = new DefaultComboBoxModel(); ticketTemplatesListModel = new SimpleListModel<Template>(); componentComboBox = new JComboBox(componentComboBoxModel); priorityComboBox = new JComboBox(priorityComboBoxModel); typeComboBox = new JComboBox(typeComboBoxModel); milestoneComboBox = new JComboBox(milestoneComboBoxModel); versionComboBox = new JComboBox(versionComboBoxModel); ticketTemplatesList = new JList(ticketTemplatesListModel); ticketTemplatesList.setCellRenderer(new TicketTemplatesListCellRenderer()); } }