Package com.eviware.soapui.support

Source Code of com.eviware.soapui.support.DefaultEditorFactory$EditorModelDocumentListener

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

import javax.swing.JComponent;
import javax.swing.JScrollPane;
import javax.swing.text.Document;
import javax.swing.text.JTextComponent;

import com.eviware.soapui.impl.wsdl.panels.teststeps.support.GroovyEditor;
import com.eviware.soapui.impl.wsdl.panels.teststeps.support.GroovyEditorModel;
import com.eviware.soapui.support.EditorModel.EditorModelListener;
import com.eviware.soapui.support.components.JUndoableTextArea;
import com.eviware.soapui.support.xml.JXEditTextArea;

public class DefaultEditorFactory implements EditorFactory
{
  public JComponent buildXPathEditor( EditorModel editorModel )
  {
    JUndoableTextArea textArea = new JUndoableTextArea();
    textArea.setText( editorModel.getEditorText() );
    textArea.getDocument()
        .addDocumentListener( new JTextComponentEditorModelDocumentListener( editorModel, textArea ) );
    return new JScrollPane( textArea );
  }

  public JComponent buildXmlEditor( EditorModel editorModel )
  {
    JXEditTextArea xmlEditor = JXEditTextArea.createXmlEditor( true );
    xmlEditor.setText( editorModel.getEditorText() );
    xmlEditor.getDocument().addDocumentListener( new EditorModelDocumentListener( editorModel, xmlEditor ) );
    JScrollPane scrollPane = new JScrollPane( xmlEditor );
    UISupport.addPreviewCorner( scrollPane, false );
    return scrollPane;
  }

  public JComponent buildGroovyEditor( GroovyEditorModel editorModel )
  {
    return new GroovyEditor( editorModel );
  }

  private static class EditorModelDocumentListener extends DocumentListenerAdapter implements EditorModelListener
  {
    private EditorModel editorModel;
    private final JXEditTextArea xmlEditor;

    public EditorModelDocumentListener( EditorModel editorModel, JXEditTextArea xmlEditor )
    {
      this.editorModel = editorModel;
      this.xmlEditor = xmlEditor;

      editorModel.addEditorModelListener( this );
    }

    public void update( Document document )
    {
      editorModel.setEditorText( getText( document ) );
    }

    public void editorTextChanged( String oldText, String newText )
    {
      xmlEditor.getDocument().removeDocumentListener( this );
      xmlEditor.setText( newText );
      xmlEditor.getDocument().addDocumentListener( this );
    }
  }

  private static class JTextComponentEditorModelDocumentListener extends DocumentListenerAdapter implements
      EditorModelListener
  {
    private final JTextComponent textField;
    private final EditorModel editorModel;

    public JTextComponentEditorModelDocumentListener( EditorModel editorModel, JTextComponent textField )
    {
      this.editorModel = editorModel;
      editorModel.addEditorModelListener( this );
      this.textField = textField;
    }

    public void editorTextChanged( String oldText, String newText )
    {
      textField.getDocument().removeDocumentListener( this );
      textField.setText( newText );
      textField.getDocument().addDocumentListener( this );
    }

    public void update( Document document )
    {
      editorModel.setEditorText( getText( document ) );
    }
  }
}
TOP

Related Classes of com.eviware.soapui.support.DefaultEditorFactory$EditorModelDocumentListener

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.
ww.google-analytics.com/analytics.js','ga'); ga('create', 'UA-20639858-1', 'auto'); ga('send', 'pageview');