/**
*
* Copyright (c) 2009-2016 Freedomotic team http://freedomotic.com
*
* This file is part of Freedomotic
*
* This Program is free software; you can redistribute it and/or modify it under
* the terms of the GNU General Public License as published by the Free Software
* Foundation; either version 2, or (at your option) any later version.
*
* This Program is distributed in the hope that it will be useful, but WITHOUT
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
* FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
* details.
*
* You should have received a copy of the GNU General Public License along with
* Freedomotic; see the file COPYING. If not, see
* <http://www.gnu.org/licenses/>.
*/
package com.freedomotic.jfrontend.automationeditor;
import com.freedomotic.api.Client;
import com.freedomotic.api.Plugin;
import com.freedomotic.plugins.ClientStorage;
import com.freedomotic.reactions.Command;
import com.freedomotic.i18n.I18n;
import com.freedomotic.reactions.CommandRepository;
import com.google.inject.Inject;
import java.util.ArrayList;
import java.util.List;
import java.util.Map.Entry;
import javax.swing.DefaultComboBoxModel;
import javax.swing.JTable;
import javax.swing.table.DefaultTableModel;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
/**
*
* @author Enrico Nicoletti
*/
public class CustomizeCommand
extends javax.swing.JFrame {
private Command original;
private DefaultTableModel model = new DefaultTableModel();
private JTable table;
private final I18n I18n;
@Inject
private ClientStorage clients;
private final CommandRepository commandRepository;
private final static Logger LOG = LoggerFactory.getLogger(CustomizeCommand.class.getName());
/**
* Creates new form CustomizeEvent
*
* @param i18n
* @param original
* @param commandRepository
*/
public CustomizeCommand(I18n i18n, Command original, CommandRepository commandRepository) {
this.I18n = i18n;
this.commandRepository = commandRepository;
initComponents();
this.original = original;
txtName.setText(original.getName());
txtDescription.setText(original.getDescription());
model.addColumn(I18n.msg("property"));
model.addColumn(I18n.msg("value"));
table = new JTable(model);
pnlParam.add(table);
int row = 0;
for (Entry e : original.getProperties().entrySet()) {
List list = new ArrayList();
list.add(e.getKey().toString());
list.add(e.getValue().toString());
model.insertRow(row,
list.toArray());
row++;
}
this.toFront();
}
private void enqueueReceivers() {
DefaultComboBoxModel receiversModel = new DefaultComboBoxModel();
for (Client c : clients.getClients()) {
receiversModel.addElement(c.getName());
}
cmbReceiver.setModel(receiversModel);
}
private Command fillWithFormData() {
try {
table.getCellEditor().stopCellEditing();
} catch (Exception e) {
}
Command c = new Command();
c.setName(txtName.getText());
c.setDescription(txtDescription.getText());
if (cmbReceiver.isEnabled()) {
Plugin plugin = (Plugin) clients.get((String) cmbReceiver.getSelectedItem());
c.setReceiver(plugin.getReadQueue());
} else {
c.setReceiver(original.getReceiver());
}
LOG.debug("Receiver for {} is: {}", c.getName(), c.getReceiver());
for (int r = 0; r < model.getRowCount(); r++) {
c.setProperty(model.getValueAt(r, 0).toString(),
model.getValueAt(r, 1).toString());
}
LOG.debug(c.getProperties().toString());
return c;
}
/**
* 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( )
{
btnSave = new javax.swing.JButton( );
jLabel1 = new javax.swing.JLabel( );
txtName = new javax.swing.JTextField( );
jLabel2 = new javax.swing.JLabel( );
txtDescription = new javax.swing.JTextField( );
jLabel3 = new javax.swing.JLabel( );
btnEdit = new javax.swing.JButton( );
cmbReceiver = new javax.swing.JComboBox( );
txtReceiver = new javax.swing.JLabel( );
btnChangeReceiver = new javax.swing.JButton( );
btnDelete = new javax.swing.JButton( );
jScrollPane1 = new javax.swing.JScrollPane( );
pnlParam = new javax.swing.JPanel( );
txtAddRow = new javax.swing.JButton( );
setDefaultCloseOperation( javax.swing.WindowConstants.DISPOSE_ON_CLOSE );
btnSave.setText( I18n.msg( "save_as_new" ) );
btnSave.addActionListener( new java.awt.event.ActionListener( )
{
public void actionPerformed( java.awt.event.ActionEvent evt )
{
btnSaveActionPerformed( evt );
}
} );
jLabel1.setText( I18n.msg( "name" ) + ":" );
jLabel2.setText( I18n.msg( "description" ) + ":" );
jLabel3.setText( I18n.msg( "parameters" ) + ":" );
btnEdit.setText( I18n.msg( "save_changes" ) );
btnEdit.addActionListener( new java.awt.event.ActionListener( )
{
public void actionPerformed( java.awt.event.ActionEvent evt )
{
btnEditActionPerformed( evt );
}
} );
cmbReceiver.setEnabled( false );
txtReceiver.setText( I18n.msg( "performed_by" ) );
txtReceiver.setEnabled( false );
btnChangeReceiver.setText( I18n.msg( "change" ) );
btnChangeReceiver.addActionListener( new java.awt.event.ActionListener( )
{
public void actionPerformed( java.awt.event.ActionEvent evt )
{
btnChangeReceiverActionPerformed( evt );
}
} );
btnDelete.setText( I18n.msg( "delete_X",
new Object[] { I18n.msg( "command" ) } ) );
btnDelete.addActionListener( new java.awt.event.ActionListener( )
{
public void actionPerformed( java.awt.event.ActionEvent evt )
{
btnDeleteActionPerformed( evt );
}
} );
jScrollPane1.setVerticalScrollBarPolicy( javax.swing.ScrollPaneConstants.VERTICAL_SCROLLBAR_ALWAYS );
pnlParam.setLayout( new java.awt.BorderLayout( ) );
jScrollPane1.setViewportView( pnlParam );
txtAddRow.setText( I18n.msg( "add_X",
new Object[] { I18n.msg( "parameter" ) } ) );
txtAddRow.addActionListener( new java.awt.event.ActionListener( )
{
public void actionPerformed( java.awt.event.ActionEvent evt )
{
txtAddRowActionPerformed( evt );
}
} );
javax.swing.GroupLayout layout = new javax.swing.GroupLayout( getContentPane( ) );
getContentPane( ).setLayout( layout );
layout.setHorizontalGroup( layout.createParallelGroup( javax.swing.GroupLayout.Alignment.LEADING )
.addGroup( layout.createSequentialGroup( ).addContainerGap( )
.addGroup( layout.createParallelGroup( javax.swing.GroupLayout.Alignment.LEADING )
.addComponent( jScrollPane1,
javax.swing.GroupLayout.PREFERRED_SIZE,
590, Short.MAX_VALUE )
.addGroup( layout.createSequentialGroup( )
.addGroup( layout.createParallelGroup( javax.swing.GroupLayout.Alignment.LEADING )
.addComponent( jLabel1,
javax.swing.GroupLayout.PREFERRED_SIZE,
103,
javax.swing.GroupLayout.PREFERRED_SIZE )
.addComponent( jLabel2 )
.addComponent( txtReceiver ) )
.addPreferredGap( javax.swing.LayoutStyle.ComponentPlacement.RELATED )
.addGroup( layout.createParallelGroup( javax.swing.GroupLayout.Alignment.LEADING )
.addComponent( txtDescription,
javax.swing.GroupLayout.DEFAULT_SIZE,
483,
Short.MAX_VALUE )
.addGroup( layout.createSequentialGroup( )
.addComponent( cmbReceiver,
0,
385,
Short.MAX_VALUE )
.addPreferredGap( javax.swing.LayoutStyle.ComponentPlacement.RELATED )
.addComponent( btnChangeReceiver ) )
.addComponent( txtName,
javax.swing.GroupLayout.DEFAULT_SIZE,
483,
Short.MAX_VALUE ) ) )
.addGroup( layout.createSequentialGroup( )
.addComponent( jLabel3 )
.addPreferredGap( javax.swing.LayoutStyle.ComponentPlacement.RELATED )
.addComponent( txtAddRow ) )
.addGroup( layout.createSequentialGroup( )
.addComponent( btnEdit )
.addPreferredGap( javax.swing.LayoutStyle.ComponentPlacement.UNRELATED )
.addComponent( btnSave,
javax.swing.GroupLayout.PREFERRED_SIZE,
165,
javax.swing.GroupLayout.PREFERRED_SIZE )
.addGap( 10, 10, 10 )
.addComponent( btnDelete ) ) )
.addContainerGap( ) ) );
layout.setVerticalGroup( layout.createParallelGroup( javax.swing.GroupLayout.Alignment.LEADING )
.addGroup( layout.createSequentialGroup( ).addContainerGap( )
.addGroup( layout.createParallelGroup( javax.swing.GroupLayout.Alignment.BASELINE )
.addComponent( jLabel1 )
.addComponent( txtName,
javax.swing.GroupLayout.PREFERRED_SIZE,
javax.swing.GroupLayout.DEFAULT_SIZE,
javax.swing.GroupLayout.PREFERRED_SIZE ) )
.addPreferredGap( javax.swing.LayoutStyle.ComponentPlacement.RELATED )
.addGroup( layout.createParallelGroup( javax.swing.GroupLayout.Alignment.BASELINE )
.addComponent( jLabel2,
javax.swing.GroupLayout.DEFAULT_SIZE,
javax.swing.GroupLayout.DEFAULT_SIZE,
Short.MAX_VALUE )
.addComponent( txtDescription,
javax.swing.GroupLayout.PREFERRED_SIZE,
41,
javax.swing.GroupLayout.PREFERRED_SIZE ) )
.addPreferredGap( javax.swing.LayoutStyle.ComponentPlacement.UNRELATED )
.addGroup( layout.createParallelGroup( javax.swing.GroupLayout.Alignment.BASELINE )
.addComponent( txtReceiver )
.addComponent( cmbReceiver,
javax.swing.GroupLayout.PREFERRED_SIZE,
javax.swing.GroupLayout.DEFAULT_SIZE,
javax.swing.GroupLayout.PREFERRED_SIZE )
.addComponent( btnChangeReceiver ) )
.addGap( 18, 18, 18 )
.addGroup( layout.createParallelGroup( javax.swing.GroupLayout.Alignment.BASELINE )
.addComponent( jLabel3 ).addComponent( txtAddRow ) )
.addPreferredGap( javax.swing.LayoutStyle.ComponentPlacement.RELATED )
.addComponent( jScrollPane1,
javax.swing.GroupLayout.PREFERRED_SIZE, 226,
javax.swing.GroupLayout.PREFERRED_SIZE )
.addPreferredGap( javax.swing.LayoutStyle.ComponentPlacement.UNRELATED )
.addGroup( layout.createParallelGroup( javax.swing.GroupLayout.Alignment.BASELINE )
.addComponent( btnDelete ).addComponent( btnEdit )
.addComponent( btnSave ) ).addContainerGap( ) ) );
jLabel3.getAccessibleContext( ).setAccessibleName( "" );
pack( );
} // </editor-fold>//GEN-END:initComponents
private void btnSaveActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_btnSaveActionPerformed
Command c = fillWithFormData();
c.setEditable(true); //sets it needs to be saved on disk
int preSize = commandRepository.findAll().size();
commandRepository.create(c);
int postSize = commandRepository.findAll().size();
if (preSize < postSize) {
LOG.info("Command addedd correctly [{} commands]", postSize);
} else {
LOG.error("Error while adding a command");
}
// main.setTargetCommand(c);
this.dispose();
}//GEN-LAST:event_btnSaveActionPerformed
private void btnChangeReceiverActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_btnChangeReceiverActionPerformed
enqueueReceivers();
txtReceiver.setEnabled(true);
cmbReceiver.setEnabled(true);
}//GEN-LAST:event_btnChangeReceiverActionPerformed
private void btnEditActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_btnEditActionPerformed
Command newCommand = fillWithFormData();
newCommand.setEditable(true);
int preSize = commandRepository.findAll().size();
commandRepository.delete(original);
commandRepository.create(newCommand);
int postSize = commandRepository.findAll().size();
if (preSize == postSize) {
LOG.info("Command edited correctly [{} commands]", postSize);
} else {
LOG.error("Error while edit a command");
}
// main.setTargetCommand(newCommand);
this.dispose();
}//GEN-LAST:event_btnEditActionPerformed
private void btnDeleteActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_btnDeleteActionPerformed
LOG.info("Trying to remove a command from the list");
commandRepository.delete(original);
// main.updateData();
this.dispose();
}//GEN-LAST:event_btnDeleteActionPerformed
private void txtAddRowActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_txtAddRowActionPerformed
model.addRow(new Object[]{"", "", "", ""});
}//GEN-LAST:event_txtAddRowActionPerformed
// Variables declaration - do not modify//GEN-BEGIN:variables
private javax.swing.JButton btnChangeReceiver;
private javax.swing.JButton btnDelete;
private javax.swing.JButton btnEdit;
private javax.swing.JButton btnSave;
private javax.swing.JComboBox cmbReceiver;
private javax.swing.JLabel jLabel1;
private javax.swing.JLabel jLabel2;
private javax.swing.JLabel jLabel3;
private javax.swing.JScrollPane jScrollPane1;
private javax.swing.JPanel pnlParam;
private javax.swing.JButton txtAddRow;
private javax.swing.JTextField txtDescription;
private javax.swing.JTextField txtName;
private javax.swing.JLabel txtReceiver;
// End of variables declaration//GEN-END:variables
}