Java tutorial
/* * To change this license header, choose License Headers in Project Properties. * To change this template file, choose Tools | Templates * and open the template in the editor. */ package com.dazito.couchdbrxjava; import com.dazito.couchdbrxjava.couchdb.CouchDBQuery; import com.dazito.couchdbrxjava.couchdb.MyCouchDd; import com.dazito.couchdbrxjava.model.Person; import com.fasterxml.jackson.databind.JsonNode; import java.net.MalformedURLException; import java.util.List; import java.util.logging.Level; import java.util.logging.Logger; import javax.swing.JOptionPane; import org.ektorp.CouchDbConnector; import org.ektorp.impl.changes.ContinuousChangesFeed; import org.ektorp.impl.changes.StdDocumentChange; import rx.Subscription; import rx.functions.Action1; import rx.functions.Func1; /** * * @author Pedro */ public class MainFrame extends javax.swing.JFrame { private static final String SERVER_IP = "http://myCouchDbIpAddress"; // Your CouchDb server ip address private static final int SERVER_PORT = 5984; // Place here your port number. The default one is 5984 private static final String DATABASE_NAME = "databaseName"; // Place here your database name private static final String ALERT_DIALOG_TITTLE = "Error"; private MyCouchDd myCouchDd; private CouchDbConnector dbConnector; private final CouchDBQuery couchDBQuery; private Subscription subscription; /** * Creates new form MainFrame */ public MainFrame() { initComponents(); couchDBQuery = new CouchDBQuery(); } /** * 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() { jPanel1 = new javax.swing.JPanel(); jScrollPane2 = new javax.swing.JScrollPane(); jTextArea = new javax.swing.JTextArea(); firstNameTextField = new javax.swing.JTextField(); lastNameTextField = new javax.swing.JTextField(); locationTextField = new javax.swing.JTextField(); countryTextField = new javax.swing.JTextField(); jLabel1 = new javax.swing.JLabel(); jLabel2 = new javax.swing.JLabel(); jLabel3 = new javax.swing.JLabel(); jLabel4 = new javax.swing.JLabel(); jButton4 = new javax.swing.JButton(); jLabel5 = new javax.swing.JLabel(); ageTextField = new javax.swing.JTextField(); jButton1 = new javax.swing.JButton(); jButton2 = new javax.swing.JButton(); jButton3 = new javax.swing.JButton(); jButton6 = new javax.swing.JButton(); setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE); jTextArea.setColumns(20); jTextArea.setRows(5); jScrollPane2.setViewportView(jTextArea); jLabel1.setText("First Name:"); jLabel2.setText("Last Name"); jLabel3.setText("Location"); jLabel4.setText("Country"); jButton4.setText("Insert"); jButton4.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { jButton4ActionPerformed(evt); } }); jLabel5.setText("Age"); javax.swing.GroupLayout jPanel1Layout = new javax.swing.GroupLayout(jPanel1); jPanel1.setLayout(jPanel1Layout); jPanel1Layout.setHorizontalGroup(jPanel1Layout .createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addGroup(jPanel1Layout.createSequentialGroup().addContainerGap().addComponent(jScrollPane2)) .addGroup(jPanel1Layout.createSequentialGroup() .addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addGroup(jPanel1Layout.createSequentialGroup().addGap(131, 131, 131) .addGroup(jPanel1Layout .createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING) .addComponent(jLabel3).addComponent(jLabel2).addComponent(jLabel1) .addComponent(jLabel4).addComponent(jLabel5)) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED) .addGroup(jPanel1Layout .createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addComponent(locationTextField).addComponent(countryTextField) .addComponent(firstNameTextField).addComponent(lastNameTextField) .addComponent(ageTextField, javax.swing.GroupLayout.DEFAULT_SIZE, 471, Short.MAX_VALUE))) .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, jPanel1Layout.createSequentialGroup() .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) .addComponent(jButton4))) .addContainerGap())); jPanel1Layout.setVerticalGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addGroup(jPanel1Layout.createSequentialGroup() .addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) .addComponent(firstNameTextField, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) .addComponent(jLabel1)) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED) .addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) .addComponent(lastNameTextField, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) .addComponent(jLabel2)) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED) .addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) .addComponent(locationTextField, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) .addComponent(jLabel3)) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED) .addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) .addComponent(countryTextField, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) .addComponent(jLabel4)) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED) .addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) .addComponent(jLabel5) .addComponent(ageTextField, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)) .addGap(18, 18, 18).addComponent(jButton4) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, 36, Short.MAX_VALUE) .addComponent(jScrollPane2, javax.swing.GroupLayout.PREFERRED_SIZE, 251, javax.swing.GroupLayout.PREFERRED_SIZE))); jButton1.setText("Connect"); jButton1.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { jButton1ActionPerformed(evt); } }); jButton2.setText("List Persons"); jButton2.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { jButton2ActionPerformed(evt); } }); jButton3.setText("Rx Subscribe"); jButton3.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { jButton3ActionPerformed(evt); } }); jButton6.setText("Rx Unsubscribe"); jButton6.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { jButton6ActionPerformed(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(jButton1).addComponent(jButton2).addComponent(jButton3) .addComponent(jButton6)) .addGap(19, 19, 19).addComponent(jPanel1, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) .addContainerGap())); layout.setVerticalGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addGroup(layout.createSequentialGroup().addContainerGap() .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addGroup(layout.createSequentialGroup().addComponent(jButton1).addGap(18, 18, 18) .addComponent(jButton2).addGap(18, 18, 18).addComponent(jButton3) .addGap(18, 18, 18).addComponent(jButton6).addGap(0, 0, Short.MAX_VALUE)) .addComponent(jPanel1, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)) .addContainerGap())); pack(); }// </editor-fold>//GEN-END:initComponents private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jButton1ActionPerformed try { myCouchDd = new MyCouchDd(SERVER_IP, SERVER_PORT, DATABASE_NAME); dbConnector = myCouchDd.connect(); } catch (MalformedURLException ex) { Logger.getLogger(MainFrame.class.getName()).log(Level.SEVERE, null, ex); } }//GEN-LAST:event_jButton1ActionPerformed private void jButton2ActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jButton2ActionPerformed if (dbConnector != null) { List<Person> list = couchDBQuery.getAllPersons(dbConnector); StringBuilder stringBuilder = new StringBuilder(); for (Person person : list) { createLine(stringBuilder, person); } jTextArea.append(stringBuilder.toString()); } else { showErrorAlertDialog("Not connected to the server."); } }//GEN-LAST:event_jButton2ActionPerformed private void jButton4ActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jButton4ActionPerformed if (dbConnector != null) { String firstName = firstNameTextField.getText(); String lastName = lastNameTextField.getText(); int age = Integer.parseInt(ageTextField.getText()); String location = locationTextField.getText(); String country = countryTextField.getText(); Person person = new Person(firstName, lastName, age, location, country); couchDBQuery.addPerson(dbConnector, person); } else { showErrorAlertDialog("Not connected to the server."); } }//GEN-LAST:event_jButton4ActionPerformed private void jButton3ActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jButton3ActionPerformed if (dbConnector != null) { ContinuousChangesFeed continuousChangesFeed = (ContinuousChangesFeed) couchDBQuery .changesFeed(myCouchDd.getDbConnector()); subscription = continuousChangesFeed.onAdded().map(new Func1<StdDocumentChange, Person>() { @Override public Person call(StdDocumentChange stdDocumentChange) { return parseDocumentChangeToPerson(stdDocumentChange); } }).subscribe(new Action1<Person>() { @Override public void call(Person person) { StringBuilder stringBuilder = new StringBuilder(); createLine(stringBuilder, person); jTextArea.append(stringBuilder.toString()); } }); } else { showErrorAlertDialog("Not connected to the server."); } }//GEN-LAST:event_jButton3ActionPerformed private void jButton6ActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jButton6ActionPerformed if (subscription != null) { if (!subscription.isUnsubscribed()) { subscription.unsubscribe(); } } }//GEN-LAST:event_jButton6ActionPerformed /** * @param args the command line arguments */ public static void main(String args[]) { /* Set the Nimbus look and feel */ //<editor-fold defaultstate="collapsed" desc=" Look and feel setting code (optional) "> /* If Nimbus (introduced in Java SE 6) is not available, stay with the default look and feel. * For details see http://download.oracle.com/javase/tutorial/uiswing/lookandfeel/plaf.html */ try { for (javax.swing.UIManager.LookAndFeelInfo info : javax.swing.UIManager.getInstalledLookAndFeels()) { if ("Nimbus".equals(info.getName())) { javax.swing.UIManager.setLookAndFeel(info.getClassName()); break; } } } catch (ClassNotFoundException ex) { java.util.logging.Logger.getLogger(MainFrame.class.getName()).log(java.util.logging.Level.SEVERE, null, ex); } catch (InstantiationException ex) { java.util.logging.Logger.getLogger(MainFrame.class.getName()).log(java.util.logging.Level.SEVERE, null, ex); } catch (IllegalAccessException ex) { java.util.logging.Logger.getLogger(MainFrame.class.getName()).log(java.util.logging.Level.SEVERE, null, ex); } catch (javax.swing.UnsupportedLookAndFeelException ex) { java.util.logging.Logger.getLogger(MainFrame.class.getName()).log(java.util.logging.Level.SEVERE, null, ex); } //</editor-fold> /* Create and display the form */ java.awt.EventQueue.invokeLater(new Runnable() { public void run() { new MainFrame().setVisible(true); } }); } private StringBuilder createLine(StringBuilder stringBuilder, Person person) { stringBuilder.append("Name: "); stringBuilder.append(person.getFirstName()); stringBuilder.append(" "); stringBuilder.append(person.getLastName()); stringBuilder.append(" :: Age: "); stringBuilder.append(person.getAge()); stringBuilder.append(" :: Location: "); stringBuilder.append(person.getLocation()); stringBuilder.append(" :: Country: "); stringBuilder.append(person.getCountry()); stringBuilder.append("\n"); return stringBuilder; } private void showErrorAlertDialog(String message) { JOptionPane.showMessageDialog(this, message, ALERT_DIALOG_TITTLE, JOptionPane.ERROR_MESSAGE); } private Person parseDocumentChangeToPerson(StdDocumentChange stdDocumentChange) { JsonNode jsonNode = stdDocumentChange.getDocAsNode(); String firstName = jsonNode.get("firstName").asText(); String lastName = jsonNode.get("lastName").asText(); String location = jsonNode.get("location").asText(); String country = jsonNode.get("country").asText(); int age = jsonNode.get("age").asInt(-1); return new Person(firstName, lastName, age, location, country); } // Variables declaration - do not modify//GEN-BEGIN:variables private javax.swing.JTextField ageTextField; private javax.swing.JTextField countryTextField; private javax.swing.JTextField firstNameTextField; private javax.swing.JButton jButton1; private javax.swing.JButton jButton2; private javax.swing.JButton jButton3; private javax.swing.JButton jButton4; private javax.swing.JButton jButton6; 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.JPanel jPanel1; private javax.swing.JScrollPane jScrollPane2; private javax.swing.JTextArea jTextArea; private javax.swing.JTextField lastNameTextField; private javax.swing.JTextField locationTextField; // End of variables declaration//GEN-END:variables }