Package org.apache.felix.upnp.tester.gui

Source Code of org.apache.felix.upnp.tester.gui.SliderEditor

/*
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements.  See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership.  The ASF licenses this file
* to you under the Apache License, Version 2.0 (the
* "License"); you may not use this file except in compliance
* with the License.  You may obtain a copy of the License at
*
*   http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing,
* software distributed under the License is distributed on an
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
* KIND, either express or implied.  See the License for the
* specific language governing permissions and limitations
* under the License.
*/

package org.apache.felix.upnp.tester.gui;

import java.awt.BorderLayout;
import java.awt.Component;
import java.awt.GridBagLayout;
import java.awt.event.ActionEvent;
import java.util.Dictionary;
import java.util.Hashtable;

import javax.swing.AbstractAction;
import javax.swing.AbstractCellEditor;
import javax.swing.DefaultCellEditor;
import javax.swing.JButton;
import javax.swing.JComboBox;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JSlider;
import javax.swing.JTable;
import javax.swing.JTextField;
import javax.swing.SwingConstants;
import javax.swing.event.ChangeEvent;
import javax.swing.event.ChangeListener;
import javax.swing.event.TableModelEvent;
import javax.swing.table.AbstractTableModel;
import javax.swing.table.TableCellEditor;
import javax.swing.table.TableModel;

import org.osgi.service.upnp.UPnPAction;
import org.osgi.service.upnp.UPnPException;
import org.osgi.service.upnp.UPnPStateVariable;

import org.apache.felix.upnp.basedriver.util.Converter;
import org.apache.felix.upnp.tester.Mediator;

/*
* @author <a href="mailto:dev@felix.apache.org">Felix Project Team</a>
*/
public class ActionPanel extends JPanel {
 
  UPnPAction action;
  ArgumentsModel argsModel;
  MyTable table;
  JPanel buttonPanel;
 
  OutputArgumentsModel outArgsModel;
  JTable outTable;
 
  /**
   *
   */
  public ActionPanel() {
    super(new GridBagLayout());
    buildButtonPanel();
    buildTable();
    add(new JScrollPane(table),Util.setConstrains(0,0,1,1,100,100));
    add(new JScrollPane(outTable),Util.setConstrains(0,1,1,1,100,100));
    add(buttonPanel,Util.setConstrains(1,0,1,1,1,1));
  }

  private void buildButtonPanel(){
    buttonPanel = new JPanel();
    JButton doAction = new JButton("Do Action");
    doAction.addActionListener(new AbstractAction(){
      public void actionPerformed(ActionEvent e) {
        outArgsModel.clearData();

        Dictionary params = null;
        Dictionary result = null;
        if (argsModel.getRowCount()!= 0){
          if (table.isEditing()) table.getCellEditor().stopCellEditing();
          params = new Hashtable();
          for (int i =0;i<argsModel.getRowCount();i++){
            String name = (String) argsModel.getValueAt(i,0);
            String value = (String)argsModel.getValueAt(i,3);
            try {
                            params.put(
                              name,
                                Converter.parseString(
                                    value,
                                    action.getStateVariable(name).getUPnPDataType()));
                        } catch (Exception ex) {
                          LogPanel.log("Error invoking action (bad parameter)");
                           return ;
                        }
          }
        }
        try {result = action.invoke(params);}
                catch (UPnPException ex){
                    String error = 
                        "===== Action Failed =====" +
                        "\nUPnP Error Code::\n    " +ex.getUPnPError_Code() +
                        "\nUPnP Error Description::\n    " +ex.getMessage();
                    printReport(params,error);
                    JOptionPane.showMessageDialog(
                        Mediator.getPropertiesViewer(),error);                  
                }
                catch (Exception ex){
                    printReport(params,ex.getMessage());
          JOptionPane.showMessageDialog(
            Mediator.getPropertiesViewer(),
            ex.getMessage()
          );
        }
        if (result != null) {
                    printReport(params,result);
          outArgsModel.setData(action,result);
          JOptionPane.showMessageDialog(
            Mediator.getPropertiesViewer(),
            "Action invoked!"
          );
       
        }
      }
            private void printReport(Dictionary params,Object result) {
                String input = "";
                String output = "";
                if (params != null) input = params.toString();
                if (output != null) output = result.toString();
                String method = action.getName();
                String report = "\n==== Action:: " + method + " ====\n"
                                + input
                                + "\n----------- result ----------\n"
                                + output
                                + "\n-----------------------------";
               LogPanel.log(report);
            }
    });   
      buttonPanel.add(doAction);
  }
 
  private void buildTable(){
    argsModel = new ArgumentsModel();
      table = new MyTable(argsModel);
    argsModel.setTable(table);    

    outArgsModel = new OutputArgumentsModel();
      outTable = new JTable(outArgsModel);
  }

  public void setArguments(UPnPAction action){
    this.action = action;
    argsModel.setData(action);   
    outArgsModel.clearData();
  }
 
}

//thanks to Thomas Wagner 18/10/2005
class OutputArgumentsModel extends ArgumentsModel {

  public OutputArgumentsModel() {
    super();
        header = new String[]{"output arg name","related Var","Java \\ UpnP type","value"};
  }

  public void clearData() {
    names = new String[]{""};
        related = new String[]{""};
      types = new String[]{""};
      values = new String[]{""};
    size=0;
    this.fireTableChanged(new TableModelEvent(this));
  }

    public void setData(UPnPAction  action, Object result){

    Hashtable res = (Hashtable) result;

        String[] names = action.getOutputArgumentNames();
         size = 0;
      this.names = names;
      if (names!=null){
        values = new String[names.length];
            types = new String[names.length];
            related = new String[names.length];
        for (int i=0;i<names.length;i++) {
                UPnPStateVariable currentStateVar = action.getStateVariable(names[i]);

        Object value = res.get(names[i]);
                values[i]=value.toString();
                related[i] = currentStateVar.getName();
               
                String javaType =currentStateVar.getJavaDataType().toString();
                javaType = javaType.substring(javaType.lastIndexOf('.')+1);
                String upnpType = currentStateVar.getUPnPDataType();
                types[i] = javaType + " \\ " + upnpType;
            }    
        size = names.length;
      }
    this.fireTableChanged(new TableModelEvent(this));
    }
}

//thanks to Thomas Wagner 12/10/2005
class ArgumentsModel extends  AbstractTableModel {
  int size = 0;
  private MyTable table; 
  String[] names = new String[]{""};
    String[] related = new String[]{""};
    String[] types = new String[]{""};
    String[] values = new String[]{""};
  String[] header = new String[]{"arg name","related Var","Java \\ UpnP type","value"};
  
  public void setTable(MyTable table) {
    this.table = table;
  }
  public int getColumnCount() { return 4; }
    public int getRowCount() { return size;}
    public String getColumnName(int col) { return header[col]; }
    public boolean isCellEditable(int rowIndex, int columnIndex) {
      return (columnIndex ==3);
    }
    public Object getValueAt(int row, int col) {
      if (col == 0) return names[row];
        else if (col == 1) return related[row];
        else if (col == 2) return types[row];
        else if (col == 3) return values[row];
      return null;
  }  
    public void setValueAt(Object aValue, int rowIndex, int columnIndex) {
      values[rowIndex]= (String) aValue;
    }

    public void setData(UPnPAction  action){

    table.deleteMyCellEditors();
       

        String[] names = action.getInputArgumentNames();
         size = 0;
      this.names = names;
      if (names!=null){
        values = new String[names.length];
            related = new String[names.length];
            types = new String[names.length];
        for (int i=0;i<names.length;i++) {
                values[i]="";
                UPnPStateVariable currentStateVar = action.getStateVariable(names[i]);
                related[i] = currentStateVar.getName();
                String javaType = currentStateVar.getJavaDataType().toString();
                javaType = javaType.substring(javaType.lastIndexOf('.')+1);
                String upnpType = currentStateVar.getUPnPDataType();
                types[i] = javaType + " \\ " + upnpType;

        //handle allowed value list
        if ( currentStateVar.getAllowedValues() != null) {
          String av[] = currentStateVar.getAllowedValues();
          JComboBox comboBox = new JComboBox();
          for (int j = 0; j < av.length; j++) {
            comboBox.addItem(av[j]);
          }
          values[i] = av[0]; //preset the first value from list
          table.setMyCellEditor(new DefaultCellEditor(comboBox),i);
        }

        //handle default value
        if (currentStateVar.getDefaultValue() != null) {
          String val = currentStateVar.getDefaultValue().toString();
          if(val.length() > 0)
            values[i] = val;
        }
       
               //handle range values
               if ((currentStateVar.getMaximum()!= null)
                   &&(currentStateVar.getMinimum()!= null)){
                   int max = currentStateVar.getMaximum().intValue();
                   int min = currentStateVar.getMinimum().intValue();
                   int value = min;
                   try { value = Integer.parseInt(values[i]);}
                   catch (NumberFormatException ignored){}
                   table.setMyCellEditor(new SliderEditor(min,max,value),i);
               }

            }    
        size = names.length;
      }
    this.fireTableChanged(new TableModelEvent(this));
        this.fireTableStructureChanged();
    }
}

// thanks to Thomas Wagner 12/10/2005
class MyTable extends JTable {

  private Hashtable cellEditors;
 
  public MyTable(TableModel dm) {
    super(dm);
    cellEditors = new Hashtable();
  }

  public void setMyCellEditor(TableCellEditor editor,int col){
    cellEditors.put(new Integer(col),editor);
  }

  public void deleteMyCellEditors(){
    cellEditors.clear();
  }

  //overwritten JTable method 
  public TableCellEditor getCellEditor(int row,int col) {
    TableCellEditor tce = (TableCellEditor) cellEditors.get(new Integer(row));
    if( tce != null) {
      return tce;
    } else {
      return super.getCellEditor(row,col);
    }
  }
}

class SliderEditor extends AbstractCellEditor implements TableCellEditor
{
    JPanel editor;
    JTextField text;
    JSlider slider;
    public SliderEditor(int min, int max, int value){
         editor = new JPanel(new BorderLayout());
         //editor.setBorder(new EmptyBorder(1,0,1,0));
         text = new JTextField(Integer.toString(max).length());
         slider = new JSlider(SwingConstants.HORIZONTAL,min,max,value);
         editor.add(text,BorderLayout.WEST);
         editor.add(slider);
         slider.addChangeListener(new ChangeListener(){
            public void stateChanged(ChangeEvent e) {
                //if (! replSlider.getValueIsAdjusting()){
                text.setText(new Integer(slider.getValue()).toString());
                //}
            }
         });

    }
   
    public Component getTableCellEditorComponent(JTable table, Object value, boolean isSelected, int row, int column) {
        text.setText((String) value);
        try {
            slider.setValue(Integer.parseInt((String)value));
        } catch (NumberFormatException ignored) {}
        return editor;
    }

    public Object getCellEditorValue() {
        return text.getText();
    }
}
TOP

Related Classes of org.apache.felix.upnp.tester.gui.SliderEditor

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.