/**
*
* 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.plugins.devices.simulation.gui;
import com.freedomotic.app.Freedomotic;
import com.freedomotic.events.LuminosityEvent;
import com.freedomotic.events.ProtocolRead;
import com.freedomotic.events.TemperatureEvent;
import com.freedomotic.plugins.devices.simulation.VariousSensors;
import com.freedomotic.reactions.Command;
import javax.swing.JFrame;
import javax.swing.event.ChangeEvent;
import javax.swing.event.ChangeListener;
/**
*
* @author Enrico Nicoletti
*/
public class VariousSensorsGui
extends JFrame {
private transient VariousSensors sensor;
/**
* Creates new form VariousSensorsForm
*
* @param sensors
*/
public VariousSensorsGui(VariousSensors sensors) {
this.sensor = sensors;
initComponents();
sldLuminosity.addChangeListener(new ChangeListener() {
@Override
public void stateChanged(ChangeEvent e) {
if (!sldLuminosity.getValueIsAdjusting()) {
notifyLuminosityEvent(sldLuminosity.getValue());
updateDescription("Selected temperature is " + sldTemperature.getValue()
+ "°C. Selected Luminosity is " + sldLuminosity.getValue() + "%.");
}
}
});
sldTemperature.addChangeListener(new ChangeListener() {
@Override
public void stateChanged(ChangeEvent e) {
if (!sldTemperature.getValueIsAdjusting()) {
notifyTemperatureEvent(sldTemperature.getValue());
updateDescription("Selected temperature is " + sldTemperature.getValue()
+ "°C. Selected Luminosity is " + sldLuminosity.getValue() + "%.");
}
}
});
}
/**
*
* @param text
*/
public void updateDescription(String text) {
txtResult.setText(text);
}
private void notifyLuminosityEvent(int luminosity) {
LuminosityEvent luminosityEvent
= new LuminosityEvent(this, luminosity,
sensor.getApi().environments().findAll().get(0).getPojo().getZone(0));
sensor.notifyEvent(luminosityEvent);
}
private void notifyTemperatureEvent(int temperature) {
TemperatureEvent temperatureEvent
= new TemperatureEvent(this, temperature,
sensor.getApi().environments().findAll().get(0).getPojo().getZone(0));
sensor.notifyEvent(temperatureEvent);
}
private void notifyTFreeFormText(String text) {
sensor.executeNlpCommand(text);
}
/**
* 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() {
jLabel1 = new javax.swing.JLabel();
sldLuminosity = new javax.swing.JSlider();
jLabel2 = new javax.swing.JLabel();
sldTemperature = new javax.swing.JSlider();
txtResult = new javax.swing.JLabel();
btnCancel = new javax.swing.JButton();
jButton1 = new javax.swing.JButton();
lblAsk = new javax.swing.JLabel();
jButton2 = new javax.swing.JButton();
jLabel3 = new javax.swing.JLabel();
btnJoinDevice = new javax.swing.JButton();
jLabel4 = new javax.swing.JLabel();
btnBypassTriggerSystem = new javax.swing.JButton();
jLabel5 = new javax.swing.JLabel();
btnSendNlpText = new javax.swing.JButton();
txtNlpText = new javax.swing.JTextField();
jLabel6 = new javax.swing.JLabel();
setDefaultCloseOperation(javax.swing.WindowConstants.DISPOSE_ON_CLOSE);
setTitle("Simulate Sensors Variables");
jLabel1.setText("Luminosity (0% to 100%):");
sldLuminosity.setMajorTickSpacing(5);
sldLuminosity.setMinorTickSpacing(1);
sldLuminosity.setPaintTicks(true);
sldLuminosity.setSnapToTicks(true);
sldLuminosity.setValue(70);
sldLuminosity.addChangeListener(new javax.swing.event.ChangeListener() {
public void stateChanged(javax.swing.event.ChangeEvent evt) {
sldLuminosityStateChanged(evt);
}
});
jLabel2.setText("Temperature (-10°C to +40°C)");
sldTemperature.setMajorTickSpacing(5);
sldTemperature.setMaximum(40);
sldTemperature.setMinimum(-10);
sldTemperature.setMinorTickSpacing(1);
sldTemperature.setPaintTicks(true);
sldTemperature.setSnapToTicks(true);
sldTemperature.setValue(22);
txtResult.setFont(new java.awt.Font("Tahoma", 1, 14)); // NOI18N
btnCancel.setText("Cancel");
btnCancel.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
btnCancelActionPerformed(evt);
}
});
jButton1.setText("Do it");
jButton1.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
jButton1ActionPerformed(evt);
}
});
lblAsk.setText("Use 'User Input' plugin to ask someting to the user");
jButton2.setText("Do it");
jButton2.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
jButton2ActionPerformed(evt);
}
});
jLabel3.setText("Use 'Plugin remote controller' to show or hide a plugin gui");
btnJoinDevice.setText("Do it");
btnJoinDevice.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
btnJoinDeviceActionPerformed(evt);
}
});
jLabel4.setText("Add a new object using 'JoinDevice' command");
btnBypassTriggerSystem.setText("Do it");
btnBypassTriggerSystem.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
btnBypassTriggerSystemActionPerformed(evt);
}
});
jLabel5.setText("Change an object behavior bypassing trigger system");
btnSendNlpText.setText("Send");
btnSendNlpText.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
btnSendNlpTextActionPerformed(evt);
}
});
jLabel6.setText("Execute free-text commands");
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, false)
.addGroup(layout.createSequentialGroup()
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addComponent(jLabel1)
.addComponent(jLabel2))
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING, false)
.addComponent(sldTemperature, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
.addComponent(sldLuminosity, javax.swing.GroupLayout.DEFAULT_SIZE, 462, Short.MAX_VALUE)))
.addGroup(layout.createSequentialGroup()
.addComponent(btnCancel)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addComponent(txtResult, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
.addGroup(layout.createSequentialGroup()
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING, false)
.addComponent(jButton2, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
.addComponent(jButton1, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
.addGap(18, 18, 18)
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addComponent(lblAsk, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
.addComponent(jLabel3, javax.swing.GroupLayout.DEFAULT_SIZE, 570, Short.MAX_VALUE)))
.addGroup(layout.createSequentialGroup()
.addComponent(btnBypassTriggerSystem, javax.swing.GroupLayout.PREFERRED_SIZE, 50, javax.swing.GroupLayout.PREFERRED_SIZE)
.addGap(26, 26, 26)
.addComponent(jLabel5, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
.addGroup(layout.createSequentialGroup()
.addComponent(btnJoinDevice)
.addGap(18, 18, 18)
.addComponent(jLabel4, javax.swing.GroupLayout.PREFERRED_SIZE, 406, javax.swing.GroupLayout.PREFERRED_SIZE))
.addGroup(layout.createSequentialGroup()
.addComponent(jLabel6)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addComponent(txtNlpText, javax.swing.GroupLayout.PREFERRED_SIZE, 348, javax.swing.GroupLayout.PREFERRED_SIZE)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addComponent(btnSendNlpText, javax.swing.GroupLayout.PREFERRED_SIZE, 58, javax.swing.GroupLayout.PREFERRED_SIZE)))
.addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
);
layout.setVerticalGroup(
layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(layout.createSequentialGroup()
.addContainerGap()
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING)
.addComponent(jLabel1)
.addComponent(sldLuminosity, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
.addGap(16, 16, 16)
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING)
.addComponent(jLabel2)
.addComponent(sldTemperature, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
.addGap(18, 18, 18)
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
.addComponent(jButton1)
.addComponent(lblAsk))
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
.addComponent(jButton2)
.addComponent(jLabel3))
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
.addComponent(btnJoinDevice)
.addComponent(jLabel4))
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
.addComponent(btnBypassTriggerSystem)
.addComponent(jLabel5))
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
.addComponent(btnSendNlpText)
.addComponent(txtNlpText, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
.addComponent(jLabel6))
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING)
.addComponent(btnCancel)
.addComponent(txtResult, javax.swing.GroupLayout.PREFERRED_SIZE, 24, javax.swing.GroupLayout.PREFERRED_SIZE))
.addContainerGap())
);
pack();
}// </editor-fold>//GEN-END:initComponents
private void sldLuminosityStateChanged(javax.swing.event.ChangeEvent evt) {
//GEN-FIRST:event_sldLuminosityStateChanged
}//GEN-LAST:event_sldLuminosityStateChanged
private void btnCancelActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_btnCancelActionPerformed
this.dispose();
}//GEN-LAST:event_btnCancelActionPerformed
private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jButton1ActionPerformed
sensor.askSomething();
}//GEN-LAST:event_jButton1ActionPerformed
private void jButton2ActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jButton2ActionPerformed
Command c = new Command();
c.setName("Ask user test");
c.setReceiver("app.actuators.plugins.controller.in");
c.setProperty("plugin", "Automations Editor");
c.setProperty("action", "show"); //the default choice
sensor.notifyCommand(c);
txtResult.setText("Command sent, the GUI should be visible now.");
}//GEN-LAST:event_jButton2ActionPerformed
private void btnJoinDeviceActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_btnJoinDeviceActionPerformed
Command c = new Command();
c.setName("Join Custom Light Object");
c.setReceiver("app.objects.create");
c.setProperty("object.class", "Light");
c.setProperty("object.name", "Created with JoinDevice");
c.setProperty("object.protocol", "test");
c.setProperty("object.address", "test");
sensor.notifyCommand(c);
txtResult.setText("Command sent, the new object should be on the map");
}//GEN-LAST:event_btnJoinDeviceActionPerformed
private void btnBypassTriggerSystemActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_btnBypassTriggerSystemActionPerformed
ProtocolRead event = new ProtocolRead(this, "test", "test");
event.addProperty("behavior.name", "powered");
event.addProperty("behaviorValue", "true");
Freedomotic.sendEvent(event);
}//GEN-LAST:event_btnBypassTriggerSystemActionPerformed
private void btnSendNlpTextActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_btnSendNlpTextActionPerformed
notifyTFreeFormText(txtNlpText.getText());
}//GEN-LAST:event_btnSendNlpTextActionPerformed
// Variables declaration - do not modify//GEN-BEGIN:variables
private javax.swing.JButton btnBypassTriggerSystem;
private javax.swing.JButton btnCancel;
private javax.swing.JButton btnJoinDevice;
private javax.swing.JButton btnSendNlpText;
private javax.swing.JButton jButton1;
private javax.swing.JButton jButton2;
private javax.swing.JLabel jLabel1;
private javax.swing.JLabel jLabel2;
private javax.swing.JLabel jLabel3;
private javax.swing.JLabel jLabel4;
private javax.swing.JLabel jLabel5;
private javax.swing.JLabel jLabel6;
private javax.swing.JLabel lblAsk;
private javax.swing.JSlider sldLuminosity;
private javax.swing.JSlider sldTemperature;
private javax.swing.JTextField txtNlpText;
private javax.swing.JLabel txtResult;
// End of variables declaration//GEN-END:variables
}