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

Source Code of com.eviware.soapui.impl.wsdl.panels.project.WsdlProjectDesktopPanel$LoadScriptGroovyEditorModel$AfterLoadScriptRunAction

/*
*  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.project;

import java.awt.BorderLayout;
import java.awt.Component;
import java.awt.Dimension;
import java.awt.event.ActionEvent;
import java.util.HashSet;
import java.util.Set;

import javax.swing.AbstractAction;
import javax.swing.Action;
import javax.swing.BorderFactory;
import javax.swing.JComponent;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTabbedPane;
import javax.swing.event.TreeModelEvent;
import javax.swing.event.TreeModelListener;
import javax.swing.text.Document;

import com.eviware.soapui.SoapUI;
import com.eviware.soapui.impl.rest.RestService;
import com.eviware.soapui.impl.support.actions.ShowOnlineHelpAction;
import com.eviware.soapui.impl.wsdl.WsdlInterface;
import com.eviware.soapui.impl.wsdl.WsdlProject;
import com.eviware.soapui.impl.wsdl.panels.teststeps.support.AbstractGroovyEditorModel;
import com.eviware.soapui.impl.wsdl.panels.teststeps.support.PropertyHolderTable;
import com.eviware.soapui.impl.wsdl.support.HelpUrls;
import com.eviware.soapui.model.ModelItem;
import com.eviware.soapui.model.iface.Interface;
import com.eviware.soapui.model.mock.MockOperation;
import com.eviware.soapui.model.mock.MockResponse;
import com.eviware.soapui.model.mock.MockService;
import com.eviware.soapui.model.project.Project;
import com.eviware.soapui.model.testsuite.Assertable;
import com.eviware.soapui.model.testsuite.LoadTest;
import com.eviware.soapui.model.testsuite.TestAssertion;
import com.eviware.soapui.model.testsuite.TestCase;
import com.eviware.soapui.model.testsuite.TestStep;
import com.eviware.soapui.model.testsuite.TestSuite;
import com.eviware.soapui.model.util.ModelItemIconFactory;
import com.eviware.soapui.security.panels.ProjectSensitiveInformationPanel;
import com.eviware.soapui.settings.UISettings;
import com.eviware.soapui.support.DocumentListenerAdapter;
import com.eviware.soapui.support.StringUtils;
import com.eviware.soapui.support.UISupport;
import com.eviware.soapui.support.components.GroovyEditorComponent;
import com.eviware.soapui.support.components.GroovyEditorInspector;
import com.eviware.soapui.support.components.JComponentInspector;
import com.eviware.soapui.support.components.JFocusableComponentInspector;
import com.eviware.soapui.support.components.JInspectorPanel;
import com.eviware.soapui.support.components.JInspectorPanelFactory;
import com.eviware.soapui.support.components.JUndoableTextArea;
import com.eviware.soapui.support.components.JXToolBar;
import com.eviware.soapui.support.components.MetricsPanel;
import com.eviware.soapui.support.components.MetricsPanel.MetricType;
import com.eviware.soapui.support.components.MetricsPanel.MetricsSection;
import com.eviware.soapui.ui.support.ModelItemDesktopPanel;
import com.eviware.x.impl.swing.JFormDialog;

public class WsdlProjectDesktopPanel extends ModelItemDesktopPanel<WsdlProject>
{
  protected static final String MOCKRESPONSES_STATISTICS = "MockResponses";
  protected static final String MOCKOPERATIONS_STATISTICS = "MockOperations";
  protected static final String MOCKSERVICES_STATISTICS = "MockServices";
  protected static final String LOADTESTS_STATISTICS = "LoadTests";
  protected static final String ASSERTIONS_STATISTICS = "Assertions";
  protected static final String TESTSTEPS_STATISTICS = "TestSteps";
  protected static final String TESTCASES_STATISTICS = "TestCases";
  protected static final String TESTSUITES_STATISTICS = "TestSuites";
  private PropertyHolderTable propertiesTable;
  private JUndoableTextArea descriptionArea;
  private InternalTreeModelListener treeModelListener;
  private Set<String> interfaceNameSet = new HashSet<String>();
  private WSSTabPanel wssTabPanel;
  protected MetricsPanel metrics;
  private GroovyEditorComponent loadScriptGroovyEditor;
  private GroovyEditorComponent saveScriptGroovyEditor;
  private JInspectorPanel inspectorPanel;
  private WsdlProjectTestSuitesTabPanel testSuitesPanel;
  private ProjectSensitiveInformationPanel sensitiveInfoPanel;

  public WsdlProjectDesktopPanel( WsdlProject modelItem )
  {
    super( modelItem );

    add( buildTabbedPane(), BorderLayout.CENTER );

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

  private Component buildTabbedPane()
  {
    JTabbedPane mainTabs = new JTabbedPane();
    addTabs( mainTabs );
    return UISupport.createTabPanel( mainTabs, true );
  }

  protected void addTabs( JTabbedPane mainTabs )
  {
    mainTabs.addTab( "Overview", null, buildOverviewTab(), "Shows General Project information and metrics" );
    mainTabs.addTab( "TestSuites", null, testSuitesPanel = buildTestSuitesTab(),
        "Shows and runs all TestSuites in project" );
    mainTabs.addTab( "WS-Security Configurations", null, buildWSSTab(), "Manages Security-related configurations" );
    mainTabs.addTab( "Security Scan Defaults", null, buildSecConfigTab(), "Manages Security related configurations" );
  }

  private Component buildSecConfigTab()
  {
    sensitiveInfoPanel = new ProjectSensitiveInformationPanel( getModelItem().getConfig() );
    sensitiveInfoPanel.build();
    return ( ( JFormDialog )sensitiveInfoPanel.getDialog() ).getPanel();
  }

  public WsdlProjectTestSuitesTabPanel getTestSuitesPanel()
  {
    return testSuitesPanel;
  }

  protected WsdlProjectTestSuitesTabPanel buildTestSuitesTab()
  {
    return new WsdlProjectTestSuitesTabPanel( getModelItem() );
  }

  protected Component buildWSSTab()
  {
    wssTabPanel = new WSSTabPanel( getModelItem().getWssContainer() );
    return wssTabPanel;
  }

  protected Component buildOverviewTab()
  {
    inspectorPanel = JInspectorPanelFactory.build( buildProjectOverview() );

    addOverviewInspectors( inspectorPanel );

    inspectorPanel.setCurrentInspector( "Properties" );

    if( StringUtils.hasContent( getModelItem().getDescription() )
        && getModelItem().getSettings().getBoolean( UISettings.SHOW_DESCRIPTIONS ) )
    {
      inspectorPanel.setCurrentInspector( "Description" );
    }

    treeModelListener = new InternalTreeModelListener();
    SoapUI.getNavigator().getMainTree().getModel().addTreeModelListener( treeModelListener );

    updateStatistics();

    return inspectorPanel.getComponent();
  }

  protected void addOverviewInspectors( JInspectorPanel inspectorPanel )
  {
    inspectorPanel.addInspector( new JFocusableComponentInspector<JPanel>( buildDescriptionPanel(), descriptionArea,
        "Description", "Project description", true ) );
    inspectorPanel.addInspector( new JComponentInspector<JComponent>( buildPropertiesPanel(), "Properties",
        "Project level properties", true ) );
    inspectorPanel.addInspector( new GroovyEditorInspector( buildLoadScriptPanel(), "Load Script",
        "Script to run after loading the project" ) );
    inspectorPanel.addInspector( new GroovyEditorInspector( buildSaveScriptPanel(), "Save Script",
        "Script to run before saving the project" ) );
  }

  private void updateStatistics()
  {
    metrics.setMetric( "File Path", getModelItem().getPath() );

    Set<String> newNames = new HashSet<String>();
    boolean rebuilt = false;
    for( Interface iface : getModelItem().getInterfaceList() )
    {
      if( !metrics.hasMetric( iface.getName() ) )
      {
        MetricsSection section = metrics.getSection( "Interface Summary" );
        buildInterfaceSummary( section.clear() );
        rebuilt = true;
        break;
      }

      newNames.add( iface.getName() );
      interfaceNameSet.remove( iface.getName() );
    }

    if( !rebuilt )
    {
      if( !interfaceNameSet.isEmpty() )
      {
        MetricsSection section = metrics.getSection( "Interface Summary" );
        buildInterfaceSummary( section.clear() );
      }

      interfaceNameSet = newNames;
    }

    metrics.setMetric( TESTSUITES_STATISTICS, getModelItem().getTestSuiteCount() );

    int testCaseCount = 0;
    int testStepsCount = 0;
    int assertionsCount = 0;
    int loadTestsCount = 0;

    for( TestSuite testSuite : getModelItem().getTestSuiteList() )
    {
      testCaseCount += testSuite.getTestCaseCount();

      for( TestCase testCase : testSuite.getTestCaseList() )
      {
        testStepsCount += testCase.getTestStepCount();
        loadTestsCount += testCase.getLoadTestCount();

        for( TestStep testStep : testCase.getTestStepList() )
        {
          if( testStep instanceof Assertable )
          {
            assertionsCount += ( ( Assertable )testStep ).getAssertionCount();
          }
        }
      }
    }

    metrics.setMetric( TESTCASES_STATISTICS, testCaseCount );
    metrics.setMetric( TESTSTEPS_STATISTICS, testStepsCount );
    metrics.setMetric( ASSERTIONS_STATISTICS, assertionsCount );
    metrics.setMetric( LOADTESTS_STATISTICS, loadTestsCount );

    int mockOperationCount = 0;
    int mockResponseCount = 0;

    for( MockService testSuite : getModelItem().getMockServiceList() )
    {
      mockOperationCount += testSuite.getMockOperationCount();

      for( MockOperation testCase : testSuite.getMockOperationList() )
      {
        mockResponseCount += testCase.getMockResponseCount();
      }
    }

    metrics.setMetric( MOCKSERVICES_STATISTICS, getModelItem().getMockServiceCount() );
    metrics.setMetric( MOCKOPERATIONS_STATISTICS, mockOperationCount );
    metrics.setMetric( MOCKRESPONSES_STATISTICS, mockResponseCount );
  }

  private JComponent buildProjectOverview()
  {
    metrics = new MetricsPanel();

    JXToolBar toolbar = buildOverviewToolbar();
    metrics.add( toolbar, BorderLayout.NORTH );

    MetricsSection section = metrics.addSection( "Project Summary" );
    section.addMetric( ModelItemIconFactory.getIcon( Project.class ), "File Path", MetricType.URL );
    section.finish();

    section = metrics.addSection( "Interface Summary" );
    buildInterfaceSummary( section );

    section = metrics.addSection( "Test Summary" );
    section.addMetric( ModelItemIconFactory.getIcon( TestSuite.class ), TESTSUITES_STATISTICS );
    section.addMetric( ModelItemIconFactory.getIcon( TestCase.class ), TESTCASES_STATISTICS );
    section.addMetric( ModelItemIconFactory.getIcon( TestStep.class ), TESTSTEPS_STATISTICS );
    section.addMetric( ModelItemIconFactory.getIcon( TestAssertion.class ), ASSERTIONS_STATISTICS );
    section.addMetric( ModelItemIconFactory.getIcon( LoadTest.class ), LOADTESTS_STATISTICS );
    section.finish();

    section = metrics.addSection( "Mock Summary" );
    section.addMetric( ModelItemIconFactory.getIcon( MockService.class ), MOCKSERVICES_STATISTICS );
    section.addMetric( ModelItemIconFactory.getIcon( MockOperation.class ), MOCKOPERATIONS_STATISTICS );
    section.addMetric( ModelItemIconFactory.getIcon( MockResponse.class ), MOCKRESPONSES_STATISTICS );
    section.finish();
    return new JScrollPane( metrics );
  }

  protected JXToolBar buildOverviewToolbar()
  {
    JXToolBar toolbar = UISupport.createSmallToolbar();
    toolbar.addGlue();
    toolbar
        .addFixed( UISupport.createToolbarButton( new ShowOnlineHelpAction( HelpUrls.PROJECT_OVERVIEW_HELP_URL ) ) );
    return toolbar;
  }

  protected void buildInterfaceSummary( MetricsSection section )
  {
    interfaceNameSet.clear();
    for( Interface ic : getModelItem().getInterfaceList() )
    {
      if( ic instanceof WsdlInterface )
      {
        WsdlInterface iface = ( WsdlInterface )ic;
        section.addMetric( iface.getIcon(), iface.getName(), MetricType.URL ).set( iface.getDefinition() );
      }
      else if( ic instanceof RestService )
      {
        RestService iface = ( RestService )ic;
        section.addMetric( iface.getIcon(), iface.getName(), MetricType.URL ).set( iface.getWadlUrl() );
      }

      interfaceNameSet.add( ic.getName() );
    }

    section.finish();
  }

  private JPanel buildDescriptionPanel()
  {
    JPanel panel = new JPanel( new BorderLayout() );
    descriptionArea = new JUndoableTextArea( getModelItem().getDescription() );
    descriptionArea.getDocument().addDocumentListener( new DocumentListenerAdapter()
    {
      @Override
      public void update( Document document )
      {
        getModelItem().setDescription( descriptionArea.getText() );
      }
    } );

    panel.setBorder( BorderFactory.createEmptyBorder( 2, 2, 2, 2 ) );
    panel.add( new JScrollPane( descriptionArea ), BorderLayout.CENTER );
    UISupport.addTitledBorder( panel, "Project Description" );

    return panel;
  }

  protected GroovyEditorComponent buildLoadScriptPanel()
  {
    loadScriptGroovyEditor = new GroovyEditorComponent( new LoadScriptGroovyEditorModel(), null );
    return loadScriptGroovyEditor;
  }

  protected GroovyEditorComponent buildSaveScriptPanel()
  {
    saveScriptGroovyEditor = new GroovyEditorComponent( new SaveScriptGroovyEditorModel(), null );
    return saveScriptGroovyEditor;
  }

  private JComponent buildPropertiesPanel()
  {
    JPanel panel = new JPanel( new BorderLayout() );
    propertiesTable = new PropertyHolderTable( getModelItem() );
    panel.add( propertiesTable, BorderLayout.CENTER );
    return panel;
  }

  @Override
  public boolean dependsOn( ModelItem modelItem )
  {
    return modelItem == getModelItem();
  }

  public boolean onClose( boolean canCancel )
  {
    propertiesTable.release();
    loadScriptGroovyEditor.getEditor().release();
    saveScriptGroovyEditor.getEditor().release();

    SoapUI.getNavigator().getMainTree().getModel().removeTreeModelListener( treeModelListener );
    wssTabPanel.release();
    sensitiveInfoPanel.release();

    inspectorPanel.release();
    testSuitesPanel.release();
    return release();
  }

  private final class InternalTreeModelListener implements TreeModelListener
  {
    public void treeNodesChanged( TreeModelEvent e )
    {
      updateStatistics();
    }

    public void treeNodesInserted( TreeModelEvent e )
    {
      updateStatistics();
    }

    public void treeNodesRemoved( TreeModelEvent e )
    {
      updateStatistics();
    }

    public void treeStructureChanged( TreeModelEvent e )
    {
      updateStatistics();
    }
  }

  private class LoadScriptGroovyEditorModel extends AbstractGroovyEditorModel
  {
    public LoadScriptGroovyEditorModel()
    {
      super( new String[] { "log", "project" }, WsdlProjectDesktopPanel.this.getModelItem(), "Load" );
    }

    @Override
    public String getScript()
    {
      return WsdlProjectDesktopPanel.this.getModelItem().getAfterLoadScript();
    }

    @Override
    public void setScript( String text )
    {
      WsdlProjectDesktopPanel.this.getModelItem().setAfterLoadScript( text );
    }

    @Override
    public Action getRunAction()
    {
      return new AfterLoadScriptRunAction();
    }

    private final class AfterLoadScriptRunAction extends AbstractAction
    {
      public AfterLoadScriptRunAction()
      {
        putValue( Action.SMALL_ICON, UISupport.createImageIcon( "/run_groovy_script.gif" ) );
        putValue( SHORT_DESCRIPTION, "Runs this script" );
      }

      public void actionPerformed( ActionEvent e )
      {
        try
        {
          WsdlProjectDesktopPanel.this.getModelItem().runAfterLoadScript();
        }
        catch( Exception e1 )
        {
          UISupport.showErrorMessage( e1 );
        }
      }
    }
  }

  private class SaveScriptGroovyEditorModel extends AbstractGroovyEditorModel
  {
    public SaveScriptGroovyEditorModel()
    {
      super( new String[] { "log", "project" }, WsdlProjectDesktopPanel.this.getModelItem(), "Save" );
    }

    @Override
    public String getScript()
    {
      return WsdlProjectDesktopPanel.this.getModelItem().getBeforeSaveScript();
    }

    @Override
    public void setScript( String text )
    {
      WsdlProjectDesktopPanel.this.getModelItem().setBeforeSaveScript( text );
    }

    @Override
    public Action getRunAction()
    {
      return new BeforeSaveScriptRunAction();
    }

    private final class BeforeSaveScriptRunAction extends AbstractAction
    {
      public BeforeSaveScriptRunAction()
      {
        putValue( Action.SMALL_ICON, UISupport.createImageIcon( "/run_groovy_script.gif" ) );
        putValue( SHORT_DESCRIPTION, "Runs this script" );
      }

      public void actionPerformed( ActionEvent e )
      {
        try
        {
          WsdlProjectDesktopPanel.this.getModelItem().runBeforeSaveScript();
        }
        catch( Exception e1 )
        {
          UISupport.showErrorMessage( e1 );
        }
      }
    }
  }

}
TOP

Related Classes of com.eviware.soapui.impl.wsdl.panels.project.WsdlProjectDesktopPanel$LoadScriptGroovyEditorModel$AfterLoadScriptRunAction

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.