Package com.eviware.x.impl.swing

Source Code of com.eviware.x.impl.swing.SwingXFormImpl

/*
*  soapUI, copyright (C) 2004-2011 eviware.com
*
*  soapUI is free software; you can redistribute it and/or modify it under the
*  terms of version 2.1 of the GNU Lesser General Public License as published by
*  the Free Software Foundation.
*
*  soapUI 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 Lesser General Public License for more details at gnu.org.
*/

package com.eviware.x.impl.swing;

import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;

import javax.swing.BorderFactory;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JSeparator;
import javax.swing.border.Border;

import com.eviware.soapui.impl.wsdl.WsdlInterface;
import com.eviware.soapui.impl.wsdl.actions.iface.tools.support.NamespaceTable;
import com.eviware.soapui.model.iface.Interface;
import com.eviware.soapui.support.StringUtils;
import com.eviware.soapui.support.types.StringToStringMap;
import com.eviware.x.form.XForm;
import com.eviware.x.form.XFormField;
import com.eviware.x.form.XFormOptionsField;
import com.eviware.x.form.XFormTextField;
import com.jgoodies.forms.layout.CellConstraints;
import com.jgoodies.forms.layout.FormLayout;
import com.jgoodies.forms.layout.RowSpec;

public class SwingXFormImpl implements XForm
{
  private JPanel panel;
  private CellConstraints cc = new CellConstraints();
  private FormLayout layout;
  private RowSpec rowSpec;
  private int rowSpacing = 5;
  private Map<String, XFormField> components = new HashMap<String, XFormField>();
  private String rowAlignment = "top";
  private String name;

  public SwingXFormImpl( String name )
  {
    this( name, 5 );
  }

  public SwingXFormImpl( String name, int leftIndent )
  {
    this.name = name;
    layout = new FormLayout( leftIndent + "px,left:pref,5px,left:default,5px:grow(1.0)" );
    panel = new JPanel( layout );
    rowSpec = new RowSpec( rowAlignment + ":pref" );
  }

  public String getName()
  {
    return name;
  }

  public int getRowSpacing()
  {
    return rowSpacing;
  }

  public void setRowSpacing( int rowSpacing )
  {
    this.rowSpacing = rowSpacing;
  }

  public void setName( String name )
  {
    this.name = name;
  }

  public JPanel getPanel()
  {
    return panel;
  }

  public void addSpace( int size )
  {
    if( size > 0 )
      layout.appendRow( new RowSpec( size + "px" ) );
  }

  public XFormField addCheckBox( String name, String description )
  {
    JCheckBoxFormField checkBox = new JCheckBoxFormField( description == null ? name : description );
    if( name != null && description != null )
      checkBox.setToolTip( description );

    addComponent( name, checkBox );
    return checkBox;
  }

  /*
   * If label starts with '###' do not show them. (non-Javadoc) if label ends
   * with '___' (3) right border is 30 and no ':' at the end
   *
   * @see com.eviware.x.form.XForm#addComponent(java.lang.String,
   * com.eviware.x.form.XFormField)
   */
  public XFormField addComponent( String label, XFormField formComponent )
  {
    if( rowSpacing > 0 && !components.isEmpty() )
      addSpace( rowSpacing );

    components.put( label, formComponent );

    layout.appendRow( rowSpec );

    int row = layout.getRowCount();

    AbstractSwingXFormField<?> swingFormComponent = ( AbstractSwingXFormField<?> )formComponent;

    if( label != null && !label.startsWith( "###" ) )
    {
      JLabel jlabel = null;
      if( label.endsWith( "___" ) )
      {
        jlabel = new JLabel( label.substring( 0, label.length() - 3 ) );
        jlabel.setBorder( BorderFactory.createEmptyBorder( 2, 0, 0, 30 ) );
      }
      else
      {
        jlabel = new JLabel( label.endsWith( ":" ) ? label : label + ":" );
        jlabel.setBorder( BorderFactory.createEmptyBorder( 2, 0, 0, 0 ) );
      }
      panel.add( jlabel, cc.xy( 2, row ) );

      jlabel.setLabelFor( swingFormComponent.getComponent() );
      int ix = label.indexOf( '&' );
      if( ix >= 0 )
      {
        jlabel.setText( label.substring( 0, ix ) + label.substring( ix + 1 ) );
        jlabel.setDisplayedMnemonicIndex( ix );
        jlabel.setDisplayedMnemonic( label.charAt( ix + 1 ) );
      }

      swingFormComponent.getComponent().getAccessibleContext().setAccessibleDescription( label );
    }

    if( label != null && label.startsWith( "###" ) )
      panel.add( swingFormComponent.getComponent(), cc.xyw( 2, row, 4 ) );
    else
      panel.add( swingFormComponent.getComponent(), cc.xy( 4, row ) );

    components.put( label, formComponent );

    return formComponent;
  }

  public XFormOptionsField addComboBox( String name, Object[] values, String description )
  {
    JComboBoxFormField comboBox = new JComboBoxFormField( values );
    comboBox.setToolTip( description );
    addComponent( name, comboBox );
    return comboBox;
  }

  public void addSeparator()
  {
    addSeparator( null );
  }

  public void addSeparator( String label )
  {
    addSpace( rowSpacing );
    addSpace( rowSpacing );

    layout.appendRow( rowSpec );
    int row = layout.getRowCount();

    if( StringUtils.isNullOrEmpty( label ) )
      panel.add( new JSeparator(), cc.xywh( 2, row, 3, 1 ) );
    else
      panel.add( new JLabel( label ), cc.xywh( 2, row, 3, 1 ) );

    addSpace( rowSpacing );
  }

  public XFormTextField addTextField( String name, String description, FieldType type )
  {
    if( type == FieldType.FOLDER || type == FieldType.FILE || type == FieldType.PROJECT_FOLDER
        || type == FieldType.PROJECT_FILE || type == FieldType.FILE_OR_FOLDER )
    {
      return ( XFormTextField )addComponent( name, new FileFormField( description, type ) );
    }
    else if( type == FieldType.PASSWORD )
    {
      JPasswordFieldFormField pwdField = new JPasswordFieldFormField();
      pwdField.getComponent().setColumns( 30 );
      pwdField.setToolTip( description );
      addComponent( name, pwdField );
      return pwdField;
    }
    else if( type == FieldType.TEXTAREA )
    {
      JTextAreaFormField field = new JTextAreaFormField();
      field.getTextArea().setColumns( 40 );
      field.getTextArea().setRows( 5 );
      field.setToolTip( description );
      addComponent( name, field );
      return field;
    }
    else
    {
      JTextFieldFormField textField = new JTextFieldFormField();
      textField.getComponent().setColumns( 40 );
      textField.setToolTip( description );
      addComponent( name, textField );
      return textField;
    }
  }

  public void setComponentValue( String label, String value )
  {
    XFormField component = getComponent( label );
    if( component != null )
      component.setValue( value );
  }

  public String getComponentValue( String name )
  {
    XFormField component = getComponent( name );
    return component == null ? null : component.getValue();
  }

  public XFormField getComponent( String label )
  {
    return components.get( label );
  }

  public void setBorder( Border border )
  {
    panel.setBorder( border );
  }

  public XFormField addComponent( XFormField component )
  {
    if( rowSpacing > 0 && !components.isEmpty() )
      addSpace( rowSpacing );

    layout.appendRow( rowSpec );
    int row = layout.getRowCount();

    AbstractSwingXFormField<?> swingFormComponent = ( AbstractSwingXFormField<?> )component;
    panel.add( swingFormComponent.getComponent(), cc.xyw( 1, row, 4 ) );

    return component;
  }

  public void setValues( StringToStringMap values )
  {
    for( Iterator<String> i = values.keySet().iterator(); i.hasNext(); )
    {
      String key = i.next();
      setComponentValue( key, values.get( key ) );
    }
  }

  public StringToStringMap getValues()
  {
    StringToStringMap values = new StringToStringMap();

    for( Iterator<String> i = components.keySet().iterator(); i.hasNext(); )
    {
      String key = i.next();
      values.put( key, getComponentValue( key ) );
    }

    return values;
  }

  public XFormField addNameSpaceTable( String label, Interface modelItem )
  {
    return addComponent( label, new NamespaceTable( ( WsdlInterface )modelItem ) );
  }

  public void setOptions( String name, Object[] values )
  {
    XFormOptionsField combo = ( XFormOptionsField )getComponent( name );
    if( combo != null )
      combo.setOptions( values );
  }

  public void addLabel( String name, String label )
  {
    addComponent( name, new JLabelFormField( label ) );
  }

  public XFormField[] getFormFields()
  {
    return components.values().toArray( new XFormField[components.size()] );
  }

  public void setFormFieldProperty( String name, Object value )
  {
    for( XFormField field : components.values() )
    {
      field.setProperty( name, value );
    }
  }

  public Object[] getOptions( String name )
  {
    XFormField combo = getComponent( name );
    if( combo instanceof XFormOptionsField )
      return ( ( XFormOptionsField )combo ).getOptions();

    return null;
  }

  public XFormField getFormField( String name )
  {
    return components.get( name );
  }
}
TOP

Related Classes of com.eviware.x.impl.swing.SwingXFormImpl

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.