/* * Copyright (C) 2014 GG-Net GmbH - Oliver Günther * * 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 3 of the License, 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 this program. If not, see <http://www.gnu.org/licenses/>. */ package eu.ggnet.dwoss.stock; import java.awt.*; import java.beans.PropertyChangeEvent; import java.beans.PropertyChangeListener; import java.text.DateFormat; import java.util.*; import javax.swing.*; import org.apache.commons.lang3.SystemUtils; import eu.ggnet.dwoss.stock.entity.StockTransaction; import eu.ggnet.dwoss.stock.entity.StockUnit; public class CommissioningManagerView extends javax.swing.JDialog { private class StockTransactionRenderer extends JLabel implements ListCellRenderer { @Override public Component getListCellRendererComponent( JList list, // the list Object value, // value to display int index, // cell index boolean isSelected, // is the cell selected boolean cellHasFocus) // does the cell have focus { if ( !(value instanceof StockTransaction) ) { setText("Use of StockTransactionManagerListCellRenderer for a non standard value"); return this; } StockTransaction st = (StockTransaction)value; boolean commissionComplete = false; if ( model != null && model.getStockUnits().containsAll(st.getUnits()) ) { commissionComplete = true; } String ccs = "Kommisionsstatus: nicht vollständig"; if ( commissionComplete ) ccs = "Kommisionsstatus: vollständig"; DateFormat df = DateFormat.getDateTimeInstance(DateFormat.MEDIUM, DateFormat.SHORT); setText("<html>Transaktion(" + st.getId() + ") von " + st.getSource().getName() + " nach " + st.getDestination().getName() + "<br>" + st.getStatus().getType() + " - " + df.format(st.getStatus().getOccurence()) + "<br />" + ccs + "</html>"); if ( isSelected && commissionComplete ) { setBackground(Color.GREEN); setForeground(Color.WHITE); } else if ( isSelected ) { setBackground(Color.RED); setForeground(Color.WHITE); } else if ( commissionComplete ) { setBackground(Color.WHITE); setForeground(Color.GREEN); } else { setBackground(Color.WHITE); setForeground(Color.RED); } setEnabled(list.isEnabled()); setFont(list.getFont()); setOpaque(true); return this; } } public class StockUnitRenderer extends JLabel implements ListCellRenderer { @Override public Component getListCellRendererComponent( JList list, // the list Object value, // value to display int index, // cell index boolean isSelected, // is the cell selected boolean cellHasFocus) // does the cell have focus { if ( !(value instanceof StockUnit) ) { setText("Missuse:renderer=" + this.getClass().getSimpleName() + ", value=" + value.getClass().getSimpleName()); return this; } StockUnit stockUnit = (StockUnit)value; setText(stockUnit.getRefurbishId() + " - " + stockUnit.getName()); if ( isSelected ) { setBackground(list.getSelectionBackground()); setForeground(list.getSelectionForeground()); } else { setBackground(list.getBackground()); setForeground(list.getForeground()); } setEnabled(list.isEnabled()); setFont(list.getFont()); setOpaque(true); return this; } } private CommissioningManagerModel model; private CommissioningManagerController controller; /** Creates new form StockTransactionManagerHandelStatusDialog */ public CommissioningManagerView(Window parent) { super(parent); setModalityType(ModalityType.APPLICATION_MODAL); initComponents(); if ( parent != null ) setLocationRelativeTo(parent); transactionList.setCellRenderer(new StockTransactionRenderer()); unitsList.setCellRenderer(new StockUnitRenderer()); } public void setModel(CommissioningManagerModel model) { this.model = model; updateStatus(); model.addPropertyChangeListener(new PropertyChangeListener() { @Override public void propertyChange(PropertyChangeEvent evt) { updateStatus(); if ( evt.getPropertyName().equals(CommissioningManagerModel.PROP_FULL) ) { boolean temp = (Boolean)evt.getNewValue(); done1Button.setEnabled(temp); done2Button.setEnabled(temp); } if ( evt.getPropertyName().equals(CommissioningManagerModel.PROP_PARTICIPANT_ONE) ) { done1Button.setText("Authentifiziere " + evt.getNewValue().toString()); } if ( evt.getPropertyName().equals(CommissioningManagerModel.PROP_PARTICIPANT_TWO) ) { done2Button.setText("Authentifiziere " + evt.getNewValue().toString()); } if ( evt.getPropertyName().equals(CommissioningManagerModel.PROP_COMPLETEABLE) ) { boolean temp = (Boolean)evt.getNewValue(); confirmButton.setEnabled(temp); } } }); unitsList.setModel(model.getUnitModel()); transactionList.setModel(model.getTransactionModel()); } public void setController(CommissioningManagerController controller) { this.controller = controller; } private void updateStatus() { StringBuilder sb = new StringBuilder("<html>"); sb.append("<u>StatusMsg:</u> ").append(model.getStatusMessage()).append("<br />"); if ( !model.isFull() ) { sb.append("<div style=\"color:red\">Mind. ein Gerät fehlt noch.</div>"); } if ( !model.isParticipantOneAuthenticated() ) { sb.append("<div style=\"color:red\">").append(model.getParticipantOne()).append(" noch nicht authentifiziert.</div>"); } if ( !model.isParticipantTwoAuthenticated() ) { sb.append("<div style=\"color:red\">").append(model.getParticipantTwo()).append(" noch nicht authentifiziert.</div>"); } if ( !model.isCompleteAble() ) { sb.append("<div style=\"color:red\">Transaktionsvorgang nicht vollständig.</div>"); } else { sb.append("<div style=\"color:#C8C800\">Transaktionsvorgang vollstädigen, bitte bestätigen.</div>"); } sb.append("</html>"); statusTextPane.setText(sb.toString()); } /** 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() { unitIdLabel = new javax.swing.JLabel(); unitIdTextField = new javax.swing.JTextField(); jScrollPane1 = new javax.swing.JScrollPane(); unitsList = new javax.swing.JList(); jScrollPane2 = new javax.swing.JScrollPane(); transactionList = new javax.swing.JList(); cancelButton = new javax.swing.JButton(); done2Button = new javax.swing.JButton(); detailButton = new javax.swing.JButton(); failButton = new javax.swing.JButton(); done1Button = new javax.swing.JButton(); confirmButton = new javax.swing.JButton(); jScrollPane4 = new javax.swing.JScrollPane(); statusTextPane = new javax.swing.JTextPane(); setDefaultCloseOperation(javax.swing.WindowConstants.DISPOSE_ON_CLOSE); setTitle("Kommissionsmanager"); unitIdLabel.setText("UnitId:"); unitIdTextField.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { unitIdTextFieldActionPerformed(evt); } }); jScrollPane1.setViewportView(unitsList); jScrollPane2.setViewportView(transactionList); cancelButton.setText("Abbrechen"); cancelButton.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { cancelButtonActionPerformed(evt); } }); done2Button.setText("Authentifiziere User 2"); done2Button.setEnabled(false); done2Button.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { done2ButtonActionPerformed(evt); } }); detailButton.setText("Details"); detailButton.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { detailButtonActionPerformed(evt); } }); failButton.setText("Fail Transaktion"); failButton.setEnabled(false); done1Button.setText("Authentifiziere User 1"); done1Button.setEnabled(false); done1Button.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { done1ButtonActionPerformed(evt); } }); confirmButton.setFont(confirmButton.getFont()); confirmButton.setText("Statusänderung durchführen"); confirmButton.setEnabled(false); confirmButton.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { confirmButtonActionPerformed(evt); } }); statusTextPane.setContentType("text/html"); // NOI18N jScrollPane4.setViewportView(statusTextPane); 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.TRAILING) .addComponent(jScrollPane1, javax.swing.GroupLayout.Alignment.LEADING, javax.swing.GroupLayout.DEFAULT_SIZE, 360, Short.MAX_VALUE) .addGroup(javax.swing.GroupLayout.Alignment.LEADING, layout.createSequentialGroup() .addComponent(unitIdLabel) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) .addComponent(unitIdTextField, javax.swing.GroupLayout.PREFERRED_SIZE, 162, javax.swing.GroupLayout.PREFERRED_SIZE))) .addGap(18, 18, 18) .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING, false) .addComponent(jScrollPane4) .addComponent(jScrollPane2, javax.swing.GroupLayout.DEFAULT_SIZE, 243, Short.MAX_VALUE) .addGroup(layout.createSequentialGroup() .addComponent(failButton, javax.swing.GroupLayout.PREFERRED_SIZE, 119, javax.swing.GroupLayout.PREFERRED_SIZE) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING, false) .addComponent(detailButton, javax.swing.GroupLayout.Alignment.TRAILING, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) .addComponent(cancelButton, javax.swing.GroupLayout.Alignment.TRAILING, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))) .addComponent(done2Button, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) .addComponent(confirmButton, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) .addComponent(done1Button, javax.swing.GroupLayout.Alignment.LEADING, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)) .addGap(15, 15, 15)) ); 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(jScrollPane2, javax.swing.GroupLayout.DEFAULT_SIZE, 154, Short.MAX_VALUE) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) .addComponent(detailButton) .addComponent(failButton)) .addGap(31, 31, 31) .addComponent(jScrollPane4, javax.swing.GroupLayout.PREFERRED_SIZE, 124, javax.swing.GroupLayout.PREFERRED_SIZE) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) .addComponent(done1Button) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) .addComponent(done2Button, javax.swing.GroupLayout.PREFERRED_SIZE, 29, javax.swing.GroupLayout.PREFERRED_SIZE) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) .addComponent(confirmButton) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) .addComponent(cancelButton)) .addGroup(layout.createSequentialGroup() .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) .addComponent(unitIdLabel) .addComponent(unitIdTextField, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) .addComponent(jScrollPane1, javax.swing.GroupLayout.DEFAULT_SIZE, 479, Short.MAX_VALUE))) .addContainerGap()) ); pack(); }// </editor-fold>//GEN-END:initComponents private void unitIdTextFieldActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_unitIdTextFieldActionPerformed if ( controller != null ) controller.addUnit(unitIdTextField.getText()); }//GEN-LAST:event_unitIdTextFieldActionPerformed private void cancelButtonActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_cancelButtonActionPerformed this.setVisible(false); }//GEN-LAST:event_cancelButtonActionPerformed private void done1ButtonActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_done1ButtonActionPerformed if ( controller != null ) controller.authenticateUserOne(); }//GEN-LAST:event_done1ButtonActionPerformed private void done2ButtonActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_done2ButtonActionPerformed if ( controller != null ) controller.authenticateUserTwo(); }//GEN-LAST:event_done2ButtonActionPerformed private void confirmButtonActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_confirmButtonActionPerformed if ( controller == null ) return; boolean successful = controller.executeTransmutation(); if ( successful ) this.setVisible(false); }//GEN-LAST:event_confirmButtonActionPerformed private void detailButtonActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_detailButtonActionPerformed StringBuilder sb = new StringBuilder("Noch nicht erfasst: ").append(SystemUtils.LINE_SEPARATOR).append(SystemUtils.LINE_SEPARATOR); SortedSet<String> missing = model.getMissingRefurbishedIds(); if ( missing.isEmpty() ) { sb.append("Alle Gerät sind erfasst."); } else { for (String line : missing) { sb.append(" - ").append(line).append(SystemUtils.LINE_SEPARATOR); } } JOptionPane.showMessageDialog(this, sb.toString()); }//GEN-LAST:event_detailButtonActionPerformed // Variables declaration - do not modify//GEN-BEGIN:variables javax.swing.JButton cancelButton; javax.swing.JButton confirmButton; javax.swing.JButton detailButton; javax.swing.JButton done1Button; javax.swing.JButton done2Button; javax.swing.JButton failButton; javax.swing.JScrollPane jScrollPane1; javax.swing.JScrollPane jScrollPane2; javax.swing.JScrollPane jScrollPane4; javax.swing.JTextPane statusTextPane; javax.swing.JList transactionList; javax.swing.JLabel unitIdLabel; javax.swing.JTextField unitIdTextField; javax.swing.JList unitsList; // End of variables declaration//GEN-END:variables }