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

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

/*
* Copyright 2004-2014 SmartBear Software
*
* Licensed under the EUPL, Version 1.1 or - as soon as they will be approved by the European Commission - subsequent
* versions of the EUPL (the "Licence");
* You may not use this work except in compliance with the Licence.
* You may obtain a copy of the Licence at:
*
* http://ec.europa.eu/idabc/eupl
*
* Unless required by applicable law or agreed to in writing, software distributed under the Licence is
* distributed on an "AS IS" basis, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either
* express or implied. See the Licence for the specific language governing permissions and limitations
* under the Licence.
*/

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.