/* * Copyright 2012 BetaSteward_at_googlemail.com. All rights reserved. * * Redistribution and use in source and binary forms, with or without modification, are * permitted provided that the following conditions are met: * * 1. Redistributions of source code must retain the above copyright notice, this list of * conditions and the following disclaimer. * * 2. Redistributions in binary form must reproduce the above copyright notice, this list * of conditions and the following disclaimer in the documentation and/or other materials * provided with the distribution. * * THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com ``AS IS'' AND ANY EXPRESS OR IMPLIED * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. * * The views and conclusions contained in the software and documentation are those of the * authors and should not be interpreted as representing official policies, either expressed * or implied, of BetaSteward_at_googlemail.com. */ package mage.client.dialog; import mage.client.SessionHandler; import org.apache.log4j.Logger; import javax.swing.*; /** * Feedback dialog. * * @author noxx */ public class FeedbackDialog extends javax.swing.JDialog { private static final Logger log = Logger.getLogger(PreferencesDialog.class); private final String[] feedbackTypes = {"", "Bug or \"something doesn't work\"", "Feature or \"I need that function\"", "Thank you or \"Devs, you are so cool!\"", "Question or \"I'm so curious about\""}; /** Creates new form PreferencesDialog */ public FeedbackDialog(java.awt.Frame parent, boolean modal) { super(parent, modal); initComponents(); cbFeedbackType.setModel(new DefaultComboBoxModel(feedbackTypes)); } /** 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. */ @SuppressWarnings("unchecked") // <editor-fold defaultstate="collapsed" desc="Generated Code">//GEN-BEGIN:initComponents private void initComponents() { jTabbedPane1 = new javax.swing.JTabbedPane(); jPanel6 = new javax.swing.JPanel(); pnlProxy = new javax.swing.JPanel(); lblProxyServer = new javax.swing.JLabel(); txtIdeaTitle = new javax.swing.JTextField(); lblProxyPort = new javax.swing.JLabel(); txtEmail = new javax.swing.JTextField(); lblProxyUserName = new javax.swing.JLabel(); cbFeedbackType = new javax.swing.JComboBox(); lblProxyType = new javax.swing.JLabel(); jScrollPane1 = new javax.swing.JScrollPane(); txtFeedbackMessage = new javax.swing.JTextArea(); jLabel2 = new javax.swing.JLabel(); jLabel3 = new javax.swing.JLabel(); jLabel1 = new javax.swing.JLabel(); sendButton = new javax.swing.JButton(); cancelButton = new javax.swing.JButton(); setDefaultCloseOperation(javax.swing.WindowConstants.DISPOSE_ON_CLOSE); setTitle("Feedback"); lblProxyServer.setText("Enter your idea*"); lblProxyPort.setText("Your email:"); lblProxyUserName.setText("Describe your idea*"); lblProxyType.setText("Category"); txtFeedbackMessage.setColumns(20); txtFeedbackMessage.setFont(new java.awt.Font("Tahoma", 0, 11)); txtFeedbackMessage.setRows(5); txtFeedbackMessage.setText("(300 characters max)"); jScrollPane1.setViewportView(txtFeedbackMessage); jLabel2.setFont(new java.awt.Font("Tahoma", 2, 11)); jLabel2.setText("(optional)"); jLabel3.setFont(new java.awt.Font("Tahoma", 2, 11)); jLabel3.setText("(optional)"); javax.swing.GroupLayout pnlProxyLayout = new javax.swing.GroupLayout(pnlProxy); pnlProxy.setLayout(pnlProxyLayout); pnlProxyLayout.setHorizontalGroup( pnlProxyLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addGroup(pnlProxyLayout.createSequentialGroup() .addContainerGap() .addGroup(pnlProxyLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addGroup(pnlProxyLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING, false) .addComponent(lblProxyUserName, javax.swing.GroupLayout.Alignment.LEADING, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) .addComponent(lblProxyType, javax.swing.GroupLayout.Alignment.LEADING) .addComponent(lblProxyServer, javax.swing.GroupLayout.Alignment.LEADING)) .addComponent(lblProxyPort)) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) .addGroup(pnlProxyLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, pnlProxyLayout.createSequentialGroup() .addComponent(cbFeedbackType, 0, 243, Short.MAX_VALUE) .addGap(26, 26, 26) .addComponent(jLabel2, javax.swing.GroupLayout.PREFERRED_SIZE, 46, javax.swing.GroupLayout.PREFERRED_SIZE) .addGap(20, 20, 20)) .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, pnlProxyLayout.createSequentialGroup() .addGroup(pnlProxyLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING) .addGroup(pnlProxyLayout.createSequentialGroup() .addComponent(txtEmail, javax.swing.GroupLayout.DEFAULT_SIZE, 238, Short.MAX_VALUE) .addGap(32, 32, 32) .addComponent(jLabel3, javax.swing.GroupLayout.PREFERRED_SIZE, 46, javax.swing.GroupLayout.PREFERRED_SIZE) .addGap(9, 9, 9)) .addComponent(txtIdeaTitle, javax.swing.GroupLayout.Alignment.LEADING, javax.swing.GroupLayout.DEFAULT_SIZE, 325, Short.MAX_VALUE) .addComponent(jScrollPane1, javax.swing.GroupLayout.Alignment.LEADING, javax.swing.GroupLayout.DEFAULT_SIZE, 325, Short.MAX_VALUE)) .addContainerGap()))) ); pnlProxyLayout.setVerticalGroup( pnlProxyLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addGroup(pnlProxyLayout.createSequentialGroup() .addGroup(pnlProxyLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) .addComponent(lblProxyServer) .addComponent(txtIdeaTitle, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) .addGroup(pnlProxyLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) .addComponent(cbFeedbackType, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) .addComponent(lblProxyType) .addComponent(jLabel2)) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) .addGroup(pnlProxyLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addComponent(lblProxyUserName) .addComponent(jScrollPane1, javax.swing.GroupLayout.PREFERRED_SIZE, 85, javax.swing.GroupLayout.PREFERRED_SIZE)) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED) .addGroup(pnlProxyLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) .addComponent(jLabel3) .addComponent(txtEmail, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) .addComponent(lblProxyPort)) .addContainerGap(21, Short.MAX_VALUE)) ); jLabel1.setFont(new java.awt.Font("Arial", 1, 14)); jLabel1.setForeground(new java.awt.Color(255, 153, 51)); jLabel1.setText("I suggest you..."); javax.swing.GroupLayout jPanel6Layout = new javax.swing.GroupLayout(jPanel6); jPanel6.setLayout(jPanel6Layout); jPanel6Layout.setHorizontalGroup( jPanel6Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addGroup(jPanel6Layout.createSequentialGroup() .addContainerGap() .addGroup(jPanel6Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addComponent(pnlProxy, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) .addComponent(jLabel1)) .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)) ); jPanel6Layout.setVerticalGroup( jPanel6Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addGroup(jPanel6Layout.createSequentialGroup() .addContainerGap() .addComponent(jLabel1) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) .addComponent(pnlProxy, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) .addContainerGap(41, Short.MAX_VALUE)) ); jTabbedPane1.addTab("Give feedback", jPanel6); sendButton.setText("Send"); sendButton.addActionListener(evt -> sendButtonActionPerformed(evt)); cancelButton.setText("Cancel"); cancelButton.addActionListener(evt -> cancelButtonActionPerformed(evt)); javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane()); getContentPane().setLayout(layout); layout.setHorizontalGroup( layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addComponent(jTabbedPane1, javax.swing.GroupLayout.DEFAULT_SIZE, 469, Short.MAX_VALUE) .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, layout.createSequentialGroup() .addContainerGap(324, Short.MAX_VALUE) .addComponent(sendButton) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) .addComponent(cancelButton) .addGap(17, 17, 17)) ); layout.setVerticalGroup( layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addGroup(layout.createSequentialGroup() .addComponent(jTabbedPane1, javax.swing.GroupLayout.PREFERRED_SIZE, 292, javax.swing.GroupLayout.PREFERRED_SIZE) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) .addComponent(cancelButton) .addComponent(sendButton)) .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)) ); jTabbedPane1.getAccessibleContext().setAccessibleName("Feedback"); pack(); }// </editor-fold>//GEN-END:initComponents private void cancelButtonActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_cancelButtonActionPerformed dialog.setVisible(false); dialog.dispose(); }//GEN-LAST:event_cancelButtonActionPerformed private void sendButtonActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_sendButtonActionPerformed String title = txtIdeaTitle.getText().trim(); if (title.isEmpty()) { JOptionPane.showMessageDialog(null, "\"Enter your idea\" is a mandatory field", "Warning", JOptionPane.INFORMATION_MESSAGE); return; } if (title.length() > 100) { JOptionPane.showMessageDialog(null, "\"Enter your idea\" value is too long (100 characters max)", "Warning", JOptionPane.INFORMATION_MESSAGE); return; } String type = cleanUpType(cbFeedbackType.getSelectedItem().toString()); String message = txtFeedbackMessage.getText().trim(); if (message.isEmpty()) { JOptionPane.showMessageDialog(null, "\"Describe your idea\" is a mandatory field.", "Warning", JOptionPane.INFORMATION_MESSAGE); return; } if (message.length() > 300) { JOptionPane.showMessageDialog(null, "\"Describe your idea\" value is too long (300 characters max)", "Warning", JOptionPane.INFORMATION_MESSAGE); } String email = txtEmail.getText().trim(); if (email.length() > 100) { email = email.substring(0, 100); } if (SessionHandler.sendFeedback(title, type, message, email)) { JOptionPane.showMessageDialog(null, "Feedback was sent. Thank you!", "Success", JOptionPane.INFORMATION_MESSAGE); reset(); dialog.setVisible(false); } else { JOptionPane.showMessageDialog(null, "Couldn't sent feedback.", "Error", JOptionPane.ERROR_MESSAGE); } }//GEN-LAST:event_sendButtonActionPerformed private String cleanUpType(String type) { if (type == null || type.isEmpty()) { return ""; } if (type.toLowerCase().startsWith("bug")) { return "bug"; } if (type.toLowerCase().startsWith("feature")) { return "feature"; } if (type.toLowerCase().startsWith("thank")) { return "thank"; } if (type.toLowerCase().startsWith("question")) { return "question"; } return ""; } private void reset() { cbFeedbackType.setSelectedIndex(0); txtIdeaTitle.setText(""); txtFeedbackMessage.setText(""); txtEmail.setText(""); } /** * @param args the command line arguments */ public static void main(String args[]) { java.awt.EventQueue.invokeLater(() -> { if (!dialog.isVisible()) { dialog.setLocation(300, 200); dialog.setVisible(true); } else { dialog.requestFocus(); } }); } // Variables declaration - do not modify//GEN-BEGIN:variables private javax.swing.JButton cancelButton; private javax.swing.JComboBox cbFeedbackType; private javax.swing.JLabel jLabel1; private javax.swing.JLabel jLabel2; private javax.swing.JLabel jLabel3; private javax.swing.JPanel jPanel6; private javax.swing.JScrollPane jScrollPane1; private javax.swing.JTabbedPane jTabbedPane1; private javax.swing.JLabel lblProxyPort; private javax.swing.JLabel lblProxyServer; private javax.swing.JLabel lblProxyType; private javax.swing.JLabel lblProxyUserName; private javax.swing.JPanel pnlProxy; private javax.swing.JButton sendButton; private javax.swing.JTextField txtEmail; private javax.swing.JTextArea txtFeedbackMessage; private javax.swing.JTextField txtIdeaTitle; // End of variables declaration//GEN-END:variables private static final FeedbackDialog dialog = new FeedbackDialog(new javax.swing.JFrame(), true); static { dialog.setResizable(false); } }