package com.intuit.tank.tools.debugger; /* * #%L * Intuit Tank Agent Debugger * %% * Copyright (C) 2011 - 2015 Intuit Inc. * %% * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html * #L% */ import java.awt.BorderLayout; import java.io.IOException; import java.io.Writer; import java.util.List; import javax.swing.BorderFactory; import javax.swing.JButton; import javax.swing.JFileChooser; import javax.swing.JLabel; import javax.swing.JPanel; import javax.swing.JPopupMenu; import javax.swing.JScrollPane; import javax.swing.JSplitPane; import javax.swing.JTextArea; import org.apache.commons.lang3.StringUtils; import org.fife.ui.rtextarea.RTextArea; import com.intuit.tank.harness.data.HDTestPlan; public class RequestResponsePanel extends JPanel implements StepListener, ScriptChangedListener, OutputTextWriter { private static final long serialVersionUID = 1L; private RTextArea requestTA; private RTextArea responseTA; private AgentDebuggerFrame parent; public RequestResponsePanel(AgentDebuggerFrame parent) { super(new BorderLayout()); this.parent = parent; parent.addScriptChangedListener(this); parent.addStepChangedListener(this); } public void init() { JSplitPane pane = new JSplitPane(JSplitPane.VERTICAL_SPLIT, true); pane.setBorder(BorderFactory.createEmptyBorder(0, 0, 0, 0)); requestTA = new RTextArea(); requestTA.setEditable(false); requestTA.setAutoscrolls(true); requestTA.setHighlightCurrentLine(false); JScrollPane sp1 = new JScrollPane(requestTA, JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED, JScrollPane.HORIZONTAL_SCROLLBAR_AS_NEEDED); sp1.setBorder(BorderFactory.createEmptyBorder(0, 0, 0, 0)); JPanel reqPane = new JPanel(new BorderLayout()); // JPanel titlePanel = new JPanel(new BorderLayout()); // titlePanel.add(BorderLayout.WEST, new JLabel("Request:")); // JButton saveBT = new JButton(parent.getDebuggerActions().getSaveReqResponseAction()); // saveBT.setText(""); // titlePanel.add(BorderLayout.EAST, saveBT); reqPane.add(BorderLayout.NORTH, new JLabel("Request:")); reqPane.add(BorderLayout.CENTER, sp1); pane.setTopComponent(reqPane); responseTA = new RTextArea(); responseTA.setEditable(false); responseTA.setAutoscrolls(true); responseTA.setHighlightCurrentLine(false); JScrollPane sp2 = new JScrollPane(responseTA, JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED, JScrollPane.HORIZONTAL_SCROLLBAR_AS_NEEDED); sp2.setBorder(BorderFactory.createEmptyBorder(0, 0, 0, 0)); JPanel responsePane = new JPanel(new BorderLayout()); responsePane.add(BorderLayout.NORTH, new JLabel("Response:")); responsePane.add(BorderLayout.CENTER, sp2); pane.setBottomComponent(responsePane); pane.setDividerLocation(0.5D); pane.setResizeWeight(0.5D); add(pane, BorderLayout.CENTER); JPopupMenu popupMenu = new JPopupMenu(); popupMenu.add(parent.getDebuggerActions().getSaveReqResponseAction()); requestTA.setPopupMenu(popupMenu); responseTA.setPopupMenu(popupMenu); } @Override public void scriptChanged(HDTestPlan plan) { setTextAreas(null); } @Override public void stepChanged(DebugStep step) { setTextAreas(step); requestTA.setCaretPosition(0); responseTA.setCaretPosition(0); } @Override public void stepEntered(DebugStep step) { setTextAreas(step); requestTA.setCaretPosition(0); responseTA.setCaretPosition(0); } @Override public void stepExited(DebugStep step) { setTextAreas(step); responseTA.setCaretPosition(0); } private void setTextAreas(DebugStep step) { requestTA.setText(""); if (step != null && step.getRequest() != null && StringUtils.isNotBlank(step.getRequest().getLogMsg())) { requestTA.setText(step.getRequest().getLogMsg()); } responseTA.setText(""); if (step != null && step.getResponse() != null && StringUtils.isNotBlank(step.getResponse().getLogMsg())) { responseTA.setText(step.getResponse().getLogMsg()); } } @Override public void writeText(Writer w) { List<DebugStep> steps = parent.getSteps(); if (steps != null && !steps.isEmpty()) { for (DebugStep step : steps) { if (step != null && step.getRequest() != null && StringUtils.isNotBlank(step.getRequest().getLogMsg())) { try { w.write("\n############## REQUEST " + step.getStepRun().getStepIndex() + " #############\n"); w.write(step.getStepRun().getInfo() + "\n"); w.write(step.getRequest().getLogMsg() + "\n"); if (step != null && step.getResponse() != null && StringUtils.isNotBlank(step.getResponse().getLogMsg())) { w.write("\n############## RESPONSE " + step.getStepRun().getStepIndex() + " #############\n"); w.write(step.getResponse().getLogMsg() + "\n"); } } catch (IOException e) { System.err.println("Error writing doc: " + e); } } } } } @Override public boolean hasData() { boolean ret = false; List<DebugStep> steps = parent.getSteps(); if (steps != null && !steps.isEmpty()) { for (DebugStep step : steps) { if (step != null && step.getRequest() != null && StringUtils.isNotBlank(step.getRequest().getLogMsg())) { ret = true; break; } } } return ret; } }