Package com.eviware.soapui.impl.wsdl.panels.teststeps

Source Code of com.eviware.soapui.impl.wsdl.panels.teststeps.PropertiesStepDesktopPanel$SetPropertiesTargetAction

/*
*  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.soapui.impl.wsdl.panels.teststeps;

import java.awt.BorderLayout;
import java.awt.Dimension;
import java.awt.event.ActionEvent;
import java.awt.event.MouseEvent;
import java.beans.PropertyChangeEvent;
import java.beans.PropertyChangeListener;
import java.io.File;
import java.io.IOException;

import javax.swing.AbstractAction;
import javax.swing.Action;
import javax.swing.Box;
import javax.swing.JButton;
import javax.swing.JComponent;
import javax.swing.JLabel;
import javax.swing.JTextField;
import javax.swing.text.Document;

import com.eviware.soapui.impl.support.actions.ShowOnlineHelpAction;
import com.eviware.soapui.impl.wsdl.panels.support.TestRunComponentEnabler;
import com.eviware.soapui.impl.wsdl.panels.teststeps.support.PropertyHolderTable;
import com.eviware.soapui.impl.wsdl.support.HelpUrls;
import com.eviware.soapui.impl.wsdl.teststeps.WsdlPropertiesTestStep;
import com.eviware.soapui.model.ModelItem;
import com.eviware.soapui.model.support.ModelSupport;
import com.eviware.soapui.support.DocumentListenerAdapter;
import com.eviware.soapui.support.StringUtils;
import com.eviware.soapui.support.UISupport;
import com.eviware.soapui.support.components.JXToolBar;
import com.eviware.soapui.ui.support.ModelItemDesktopPanel;

/**
* DesktopPanel for WsdlPropertiesTestSteps
*
* @author Ole.Matzura
*/

public class PropertiesStepDesktopPanel extends ModelItemDesktopPanel<WsdlPropertiesTestStep> implements
    PropertyChangeListener
{
  private final WsdlPropertiesTestStep testStep;
  private JTextField sourceField;
  private JTextField targetField;
  private PropertyHolderTable propertiesTable;
  private TestRunComponentEnabler componentEnabler;
  protected boolean updatingSource;
  protected boolean updatingTarget;

  public PropertiesStepDesktopPanel( WsdlPropertiesTestStep testStep )
  {
    super( testStep );
    this.testStep = testStep;
    componentEnabler = new TestRunComponentEnabler( testStep.getTestCase() );
    buildUI();

    testStep.addPropertyChangeListener( this );
  }

  private void buildUI()
  {
    propertiesTable = createPropertyHolderTable();
    add( propertiesTable, BorderLayout.CENTER );

    JXToolBar toolbar = propertiesTable.getToolbar();

    toolbar.addRelatedGap();
    JButton reloadButton = UISupport.createToolbarButton( new ReloadPropertiesFromSourceAction() );
    toolbar.add( reloadButton );

    toolbar.addSeparator();
    toolbar.add( new JLabel( "Load from:" ) );
    sourceField = new JTextField( testStep.getSource(), 20 )
    {
      @Override
      public String getToolTipText( MouseEvent event )
      {
        return testStep.getSource( true );
      }
    };
    sourceField.setToolTipText( "The filename/url or referring system-property to load properties from" );
    sourceField.getDocument().addDocumentListener( new DocumentListenerAdapter()
    {
      public void update( Document document )
      {
        if( updatingSource )
          return;

        updatingSource = true;
        testStep.setSource( sourceField.getText() );
        updatingSource = false;
      }
    } );

    toolbar.addRelatedGap();
    toolbar.addFixed( sourceField );
    JButton setSourceButton = UISupport.createToolbarButton( new SetPropertiesSourceAction() );
    toolbar.addRelatedGap();
    toolbar.add( setSourceButton );

    toolbar.addSeparator();
    toolbar.add( new JLabel( "Save to:" ) );
    targetField = new JTextField( testStep.getTarget(), 20 )
    {
      @Override
      public String getToolTipText( MouseEvent event )
      {
        return testStep.getTarget( true );
      }
    };

    targetField.setToolTipText( "The filename/url or referring system-property to save properties to" );
    targetField.getDocument().addDocumentListener( new DocumentListenerAdapter()
    {
      public void update( Document document )
      {
        if( updatingTarget )
          return;

        updatingTarget = true;
        testStep.setTarget( targetField.getText() );
        updatingTarget = false;
      }
    } );

    toolbar.addRelatedGap();
    toolbar.addFixed( targetField );
    JButton setTargetButton = UISupport.createToolbarButton( new SetPropertiesTargetAction() );
    toolbar.addRelatedGap();
    toolbar.add( setTargetButton );

    toolbar.add( Box.createHorizontalGlue() );
    toolbar.addSeparator();
    toolbar.add( UISupport.createToolbarButton( new ShowOnlineHelpAction( HelpUrls.PROPERTIESSTEPEDITOR_HELP_URL ) ) );

    componentEnabler.add( sourceField );
    componentEnabler.add( targetField );
    componentEnabler.add( setTargetButton );
    componentEnabler.add( setSourceButton );
    componentEnabler.add( propertiesTable );

    setPreferredSize( new Dimension( 600, 400 ) );
  }

  protected PropertyHolderTable createPropertyHolderTable()
  {
    return new PropertyHolderTable( getModelItem() );
  }

  public boolean onClose( boolean canCancel )
  {
    componentEnabler.release();
    propertiesTable.release();
    return release();
  }

  public JComponent getComponent()
  {
    return this;
  }

  public boolean dependsOn( ModelItem modelItem )
  {
    return modelItem == testStep || modelItem == testStep.getTestCase()
        || modelItem == testStep.getTestCase().getTestSuite()
        || modelItem == testStep.getTestCase().getTestSuite().getProject();
  }

  private class SetPropertiesSourceAction extends AbstractAction
  {
    public SetPropertiesSourceAction()
    {
      putValue( Action.SMALL_ICON, UISupport.createImageIcon( "/set_properties_source.gif" ) );
      putValue( Action.SHORT_DESCRIPTION, "Selects the properties source file" );
    }

    public void actionPerformed( ActionEvent e )
    {
      String root = ModelSupport.getResourceRoot( testStep );
      File file = UISupport.getFileDialogs().open( this, "Set properties source", "properties",
          "Properties Files (*.properties)", root );
      if( file != null )
      {
        updatingSource = true;
        testStep.setSource( file.getAbsolutePath() );
        sourceField.setText( testStep.getSource() );
        updatingSource = false;
        try
        {
          boolean createMissing = UISupport.confirm( "Create missing properties?", "Set Properties Source" );
          int cnt = testStep.loadProperties( createMissing );
          UISupport.showInfoMessage( "Loaded " + cnt + " properties from [" + testStep.getSource() + "]" );
        }
        catch( IOException e1 )
        {
          UISupport.showErrorMessage( "Failed to load properties from [" + testStep.getSource() + "]; " + e1 );
        }
      }
    }
  }

  private class ReloadPropertiesFromSourceAction extends AbstractAction
  {
    public ReloadPropertiesFromSourceAction()
    {
      putValue( Action.SMALL_ICON, UISupport.createImageIcon( "/reload_properties.gif" ) );
      putValue( Action.SHORT_DESCRIPTION, "Reloads the current properties from the selected file" );
    }

    public void actionPerformed( ActionEvent e )
    {
      if( StringUtils.isNullOrEmpty( testStep.getSource() ) )
      {
        UISupport.showErrorMessage( "Missing source-file to load from" );
        return;
      }

      try
      {
        boolean createMissing = UISupport.confirm( "Create missing properties?", "Reload Properties" );
        int cnt = testStep.loadProperties( createMissing );
        UISupport.showInfoMessage( "Loaded " + cnt + " properties from [" + testStep.getSource() + "]" );
      }
      catch( Exception e1 )
      {
        UISupport.showErrorMessage( "Failed to load properties from [" + testStep.getSource() + "]; " + e1 );
      }
    }
  }

  private class SetPropertiesTargetAction extends AbstractAction
  {
    public SetPropertiesTargetAction()
    {
      putValue( Action.SMALL_ICON, UISupport.createImageIcon( "/set_properties_target.gif" ) );
      putValue( Action.SHORT_DESCRIPTION, "Selects the properties target file" );
    }

    public void actionPerformed( ActionEvent e )
    {
      String root = ModelSupport.getResourceRoot( testStep );
      File file = UISupport.getFileDialogs().saveAs( this, "Set properties target", "properties",
          "Properties Files (*.properties)", new File( root ) );
      if( file != null )
      {
        updatingTarget = true;
        testStep.setTarget( file.getAbsolutePath() );
        targetField.setText( testStep.getTarget() );
        updatingTarget = false;

        try
        {
          int cnt = testStep.saveProperties();
          UISupport.showInfoMessage( "Saved " + cnt + " properties to [" + testStep.getTarget() + "]" );
        }
        catch( IOException e1 )
        {
          UISupport.showErrorMessage( "Failed to save properties to [" + testStep.getTarget() + "]; " + e1 );
        }
      }
    }
  }

  public void propertyChange( PropertyChangeEvent evt )
  {
    if( !updatingSource && evt.getPropertyName().equals( WsdlPropertiesTestStep.SOURCE_PROPERTY ) )
      sourceField.setText( evt.getNewValue().toString() );
    else if( !updatingTarget && evt.getPropertyName().equals( WsdlPropertiesTestStep.TARGET_PROPERTY ) )
      targetField.setText( evt.getNewValue().toString() );

    super.propertyChange( evt );
  }

  @Override
  protected boolean release()
  {
    testStep.removePropertyChangeListener( this );
    return super.release();
  }

  /*
   * public class PropertiesTransferHandler extends
   * AbstractPropertiesTransferHandler { public
   * PropertiesTransferHandler(JComponent component) { super(component); }
   *
   * protected StepProperty getSelectedProperty(JComponent c) { int rowIndex =
   * propertiesTable.getSelectedRow(); if (rowIndex == -1) return null;
   *
   * return testStep.getTestStepPropertyAt(rowIndex); } }
   */
}
 
TOP

Related Classes of com.eviware.soapui.impl.wsdl.panels.teststeps.PropertiesStepDesktopPanel$SetPropertiesTargetAction

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.