/* * SoapUI, Copyright (C) 2004-2016 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.actions; import com.eviware.soapui.impl.wsdl.support.HelpUrls; import com.eviware.soapui.support.MessageSupport; import com.eviware.soapui.support.UISupport; import com.eviware.soapui.support.action.swing.ActionList; import com.eviware.soapui.support.components.JUndoableTextField; import com.eviware.x.form.XForm; import com.eviware.x.form.XFormDialog; import com.eviware.x.form.XFormDialogBuilder; import com.eviware.x.form.XFormFactory; import com.eviware.x.form.XFormField; import com.eviware.x.impl.swing.JTextFieldFormField; import javax.swing.AbstractAction; import java.awt.Color; import java.awt.Font; import java.awt.event.KeyAdapter; import java.awt.event.KeyEvent; import java.awt.event.KeyListener; import java.awt.event.MouseAdapter; import java.awt.event.MouseEvent; import java.awt.event.MouseListener; /** * Constructs dialogs for inputting REST URIs and manages state in an open dialog. */ public class RestUriDialogHandler { private KeyListener initialKeyListener; private MouseListener initialMouseListener; private Font originalFont; private boolean defaultURIReplaced; private JUndoableTextField textField; private XFormDialog dialog; private String uriLabelKey; private String exampleUri; public XFormDialog buildDialog(MessageSupport messages) { return buildDialog(messages, HelpUrls.NEWRESTPROJECT_HELP_URL, null); } public XFormDialog buildDialog(MessageSupport messages, AbstractAction actionToBeAdded) { return buildDialog(messages, HelpUrls.NEWRESTPROJECT_HELP_URL, actionToBeAdded); } public XFormDialog buildDialog(MessageSupport messages, String helpUrl) { return buildDialog(messages, helpUrl, null); } public XFormDialog buildDialog(MessageSupport messages, String helpUrl, AbstractAction actionToBeAdded) { XFormDialogBuilder newDialogBuilder = XFormFactory.createDialogBuilder(messages.get("Title")); XForm form = newDialogBuilder.createForm(""); uriLabelKey = messages.get("Form.URI.Label"); exampleUri = messages.get("Form.Example.URI"); form.addTextField(uriLabelKey, messages.get("Form.URI.Description"), XForm.FieldType.TEXT); ActionList actions = newDialogBuilder.buildOkCancelHelpActions(helpUrl); if (actionToBeAdded != null) { actions.addAction(actionToBeAdded); } dialog = newDialogBuilder.buildDialog(actions, messages.get("Description"), UISupport.TOOL_ICON); dialog.setValue(uriLabelKey, exampleUri); XFormField uriField = dialog.getFormField(uriLabelKey); if (uriField instanceof JTextFieldFormField) { defaultURIReplaced = false; textField = ((JTextFieldFormField) uriField).getComponent(); textField.requestFocus(); originalFont = textField.getFont(); textField.setFont(originalFont.deriveFont(Font.ITALIC)); textField.setForeground(new Color(170, 170, 170)); addListenersToTextField(); } return dialog; } public void resetUriField() { if (!defaultURIReplaced && textField != null) { try { defaultURIReplaced = true; textField.setText(""); textField.setFont(originalFont); textField.setForeground(Color.BLACK); } finally { if (initialKeyListener != null) { textField.removeKeyListener(initialKeyListener); } if (initialMouseListener != null) { textField.removeMouseListener(initialMouseListener); } } } } private void addListenersToTextField() { initialKeyListener = new KeyAdapter() { @Override public void keyPressed(KeyEvent e) { resetUriField(); } }; textField.addKeyListener(initialKeyListener); initialMouseListener = new MouseAdapter() { @Override public void mouseClicked(MouseEvent e) { resetUriField(); } }; textField.addMouseListener(initialMouseListener); } public String getUri() { if (dialog.getReturnValue() != XFormDialog.OK_OPTION) { return null; } String uri = dialog.getValue(uriLabelKey).trim(); return uri.equals(exampleUri) ? "" : uri; } }