/* * Zed Attack Proxy (ZAP) and its related class files. * * ZAP is an HTTP/HTTPS proxy for assessing web application security. * * Copyright the ZAP Development team * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. * * Please note that this file was originally released under the * GNU General Public License as published by the Free Software Foundation; * either version 2 of the License, or (at your option) any later version * by Axel Neumann * * As of October 2014 Axel Neumann granted the OWASP ZAP Project * permission to redistribute this code under the Apache License, Version 2.0 */ package org.parosproxy.paros.view; import java.awt.GridBagConstraints; import java.awt.GridBagLayout; import java.awt.Insets; import java.net.URL; import javax.swing.BorderFactory; import javax.swing.ImageIcon; import javax.swing.JButton; import javax.swing.JComponent; import javax.swing.JLabel; import javax.swing.JPanel; import javax.swing.JToolBar; import org.parosproxy.paros.Constant; import org.zaproxy.zap.utils.DisplayUtils; public class MainFooterPanel extends JPanel { private static final long serialVersionUID = 1L; private JToolBar footerToolbarLeft = null; private JToolBar footerToolbarRight = null; private JLabel alertHigh = null; private JLabel alertMedium = null; private JLabel alertLow = null; private JLabel alertInfo = null; public MainFooterPanel () { super(); initialise(); } public void initialise () { setLayout(new GridBagLayout()); setPreferredSize(DisplayUtils.getScaledDimension(getMaximumSize().width, 20)); setMaximumSize(DisplayUtils.getScaledDimension(getMaximumSize().width, 20)); this.setBorder(BorderFactory.createEtchedBorder()); /* * ################################################################### * ### LEFT GBC ### <-- DYNAMIC LENGTH DUMMY GBC --> ### RIGHT GBC ### * ################################################################### */ GridBagConstraints gbcToolbarLeft = new GridBagConstraints(); GridBagConstraints gbcToolbarRight = new GridBagConstraints(); GridBagConstraints gbcDummyToFillSpace = new GridBagConstraints(); gbcToolbarLeft.gridx = 0; gbcToolbarLeft.gridy = 0; gbcToolbarLeft.insets = new Insets(0, 5, 0, 0); gbcToolbarLeft.anchor = GridBagConstraints.WEST; gbcDummyToFillSpace.gridx = 1; gbcDummyToFillSpace.gridy = 0; gbcDummyToFillSpace.weightx = 1.0; gbcDummyToFillSpace.weighty = 1.0; gbcDummyToFillSpace.anchor = GridBagConstraints.EAST; gbcDummyToFillSpace.fill = GridBagConstraints.HORIZONTAL; gbcToolbarRight.gridx = 2; gbcToolbarRight.gridy = 0; gbcToolbarRight.insets = new Insets(0, 5, 0, 0); gbcToolbarRight.anchor = GridBagConstraints.EAST; JLabel dummyLabel = new JLabel(); add(getToolbarLeft(), gbcToolbarLeft); add(dummyLabel, gbcDummyToFillSpace); add(getToolbarRight(), gbcToolbarRight); // Common alerts (Left) footerToolbarLeft.add(new JLabel(Constant.messages.getString("footer.alerts.label"))); footerToolbarLeft.add(getAlertHigh()); footerToolbarLeft.add(getAlertMedium()); footerToolbarLeft.add(getAlertLow()); footerToolbarLeft.add(getAlertInfo()); // Current Scans (Right) footerToolbarRight.add(new JLabel(Constant.messages.getString("footer.scans.label"))); } // Left toolbar for alerts private JToolBar getToolbarLeft() { if (footerToolbarLeft == null) { footerToolbarLeft = new JToolBar(); footerToolbarLeft.setEnabled(true); footerToolbarLeft.setFloatable(false); footerToolbarLeft.setRollover(true); footerToolbarLeft.setName("Footer Toolbar Left"); footerToolbarLeft.setBorder(BorderFactory.createEmptyBorder()); } return footerToolbarLeft; } // Right toolbar for current scan results private JToolBar getToolbarRight() { if (footerToolbarRight == null) { footerToolbarRight = new JToolBar(); footerToolbarRight.setEnabled(true); footerToolbarRight.setFloatable(false); footerToolbarRight.setRollover(true); footerToolbarRight.setName("Footer Toolbar Right"); footerToolbarRight.setBorder(BorderFactory.createEmptyBorder()); } return footerToolbarRight; } public void addAlertFlag (JButton button) { getToolbarLeft().add(button); } // FIXME Still needed? public void addSeparator() { getToolbarLeft().addSeparator(); } private JLabel getAlertHigh() { if (alertHigh == null) { alertHigh = createAlertLabel(Constant.messages.getString("footer.alerts.high.tooltip"), Constant.HIGH_FLAG_IMAGE_URL); // Red flag } return alertHigh; } public void setAlertHigh (int alert) { getAlertHigh().setText(Integer.toString(alert)); } private JLabel getAlertMedium() { if (alertMedium == null) { alertMedium = createAlertLabel(Constant.messages.getString("footer.alerts.medium.tooltip"), Constant.MED_FLAG_IMAGE_URL); // Orange flag } return alertMedium; } public void setAlertMedium (int alert) { getAlertMedium().setText(Integer.toString(alert)); } private JLabel getAlertLow() { if (alertLow == null) { alertLow = createAlertLabel(Constant.messages.getString("footer.alerts.low.tooltip"), Constant.LOW_FLAG_IMAGE_URL); // Yellow flag } return alertLow; } public void setAlertLow (int alert) { getAlertLow().setText(Integer.toString(alert)); } private JLabel getAlertInfo() { if (alertInfo == null) { alertInfo = createAlertLabel(Constant.messages.getString("footer.alerts.info.tooltip"), Constant.INFO_FLAG_IMAGE_URL); // Blue flag } return alertInfo; } public void setAlertInfo (int alert) { getAlertInfo().setText(Integer.toString(alert)); } /** * Creates a {@code JLabel} with text "0", an {@code ImageIcon} created from * the specified URL, the specified tool tip text and an empty border that * takes up 5 pixels to the right and left of the {@code JLabel}. * * @param toolTipText * the tool tip text, if toolTipText is {@code null} no tool tip * is displayed * @param imageUrl * the URL to the image * * @throws NullPointerException * if imageUrl is {@code null}. * * @return the {@code JLabel} object * * @see JLabel#setToolTipText(String) */ private JLabel createAlertLabel(String toolTipText, URL imageUrl) throws NullPointerException { JLabel label = new JLabel("0", DisplayUtils.getScaledIcon(new ImageIcon(imageUrl)), JLabel.LEADING); label.setToolTipText(toolTipText); label.setBorder(BorderFactory.createEmptyBorder(0, 5, 0, 5)); return label; } // Support for dynamic scanning results in the footer public void addFooterToolbarRightLabel (JLabel label) { DisplayUtils.scaleIcon(label); this.footerToolbarRight.add(label); this.validate(); } public void removeFooterToolbarRightLabel (JLabel label) { this.footerToolbarRight.remove(label); this.validate(); } public void addFooterToolbarRightComponent (JComponent comp) { if (comp instanceof JLabel) { DisplayUtils.scaleIcon((JLabel)comp); } else if (comp instanceof JButton) { DisplayUtils.scaleIcon((JButton)comp); } this.footerToolbarRight.add(comp); this.validate(); } public void removeFooterToolbarRightComponent (JComponent comp) { this.footerToolbarRight.remove(comp); this.validate(); } public void addFooterToolbarLeftComponent (JComponent comp) { if (comp instanceof JLabel) { DisplayUtils.scaleIcon((JLabel)comp); } else if (comp instanceof JButton) { DisplayUtils.scaleIcon((JButton)comp); } this.footerToolbarLeft.add(comp); this.validate(); } public void removeFooterToolbarLeftComponent (JComponent comp) { this.footerToolbarLeft.remove(comp); this.validate(); } public void removeFooterToolbarLeftLabel (JLabel label) { this.footerToolbarLeft.remove(label); this.validate(); } //FIXME Still needed? public void addFooterSeparator () { this.footerToolbarRight.addSeparator(); } }