Package com.eviware.soapui.security.boundary

Source Code of com.eviware.soapui.security.boundary.SchemeTypeExtractor

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

import java.util.TreeMap;

import javax.swing.tree.TreePath;
import javax.wsdl.Definition;

import org.apache.xmlbeans.XmlException;

import com.eviware.soapui.impl.wsdl.WsdlRequest;
import com.eviware.soapui.impl.wsdl.teststeps.WsdlTestRequest;
import com.eviware.soapui.impl.wsdl.teststeps.WsdlTestRequestStep;
import com.eviware.soapui.model.testsuite.TestStep;
import com.eviware.soapui.support.xml.XmlObjectTreeModel;
import com.eviware.soapui.support.xml.XmlObjectTreeModel.XmlTreeNode;
import com.eviware.soapui.support.xml.XmlUtils;

public class SchemeTypeExtractor
{

  private WsdlRequest request;
  private TreeMap<String, NodeInfo> nodes;

  public SchemeTypeExtractor( WsdlTestRequest request )
  {
    this.request = request;
  }

  public SchemeTypeExtractor( TestStep testStep )
  {
    if( testStep instanceof WsdlTestRequestStep )
    {
      request = ( ( WsdlTestRequestStep )testStep ).getHttpRequest();
    }

  }

  public String getTypeFor( String name ) throws Exception
  {
    NodeInfo node = nodes.get( name );
    if( node == null )
      return null;
    return node.getType();
  }

  public TreeMap<String, NodeInfo> getParams()
  {
    return nodes;
  }

  public TreeMap<String, NodeInfo> extract() throws XmlException, Exception
  {
    // XmlObjectTreeModel model = new XmlObjectTreeModel(
    // request.getOperation().getInterface().getDefinitionContext()
    // .getSchemaTypeSystem(), XmlObject.Factory.parse(
    // request.getRequestContent() ) );
    XmlObjectTreeModel model = new XmlObjectTreeModel( request.getOperation().getInterface().getDefinitionContext()
        .getSchemaTypeSystem(), XmlUtils.createXmlObject( request.getRequestContent() ) );

    nodes = getElements( model.getRootNode() );

    // these two lines used for testing
    for( NodeInfo node : nodes.values() )
      printNode( node );
    return nodes;
  }

  /*
   * used for testing
   */
  private void printNode( NodeInfo node )
  {
    XmlTreeNode mynode = node.node;

    System.out.println( mynode.getNodeName() );
    System.out.println( node.getType() );
    System.out.println( node.xpath );
  }

  public TreeMap<String, NodeInfo> getVariableSet()
  {
    return nodes;
  }

  /**
   * Recursive look for leafs which types are primitive type. Those elements
   * actualy carry values.
   */
  TreeMap<String, NodeInfo> getElements( XmlTreeNode rootXmlTreeNode )
  {
    TreeMap<String, NodeInfo> result = new TreeMap<String, NodeInfo>();
    for( int cnt = 0; cnt < rootXmlTreeNode.getChildCount(); cnt++ )
    {
      XmlTreeNode xmlTreeNodeChild = ( XmlTreeNode )rootXmlTreeNode.getChild( cnt );

      if( xmlTreeNodeChild.getChildCount() > 0 )
        result.putAll( getElements( rootXmlTreeNode.getChild( cnt ) ) );
      else
      {
        if( xmlTreeNodeChild.getSchemaType() != null && xmlTreeNodeChild.getSchemaType().isPrimitiveType() )
          result.put( xmlTreeNodeChild.getDomNode().getLocalName(), new NodeInfo( rootXmlTreeNode.getChild( cnt ) ) );
      }
    }
    return result;
  }

  private String declareXPathNamespaces( Definition definition )
  {
    StringBuilder result = new StringBuilder();
    for( Object shortName : definition.getNamespaces().keySet() )
    {
      result.append( "declare namespace " ).append( shortName.toString() ).append( "=\'" )
          .append( definition.getNamespaces().get( shortName ).toString() ).append( "\';" );
    }
    return result.toString();
  }

  public class NodeInfo
  {

    private String name;
    private String text;
    private TreePath treePath;
    private XmlTreeNode node;
    private String xpath;
    private String type;
    private boolean selected = false;

    public boolean isSelected()
    {
      return selected;
    }

    public void setSelected( boolean selected )
    {
      this.selected = selected;
    }

    public String getName()
    {
      return name;
    }

    public String getText()
    {
      return text;
    }

    public TreePath getTreePath()
    {
      return treePath;
    }

    public String getXPath()
    {
      return xpath;

    }

    public NodeInfo( String name, String text, TreePath treePath, XmlTreeNode node, String xpath )
    {
      this.name = name;
      this.text = text;
      this.treePath = treePath;
      this.node = node;
      this.xpath = xpath;

    }

    public NodeInfo( XmlTreeNode child )
    {
      this.name = child.getNodeName();
      this.text = child.getNodeText();
      this.treePath = child.getTreePath();
      this.type = child.getSchemaType().toString();
      this.node = child;
      this.xpath = XmlUtils.createXPath( child.getDomNode(), true, false, false, null );
    }

    public String getType()
    {
      return type;
    }

    public String getSimpleName()
    {
      return node.getDomNode().getLocalName();
    }
  }

}
TOP

Related Classes of com.eviware.soapui.security.boundary.SchemeTypeExtractor

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.