/*
* Zed Attack Proxy (ZAP) and its related class files.
*
* ZAP is an HTTP/HTTPS proxy for assessing web application security.
*
* Copyright 2011 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.
*/
package org.zaproxy.zap.extension.alert;
import java.util.Collections;
import java.util.Comparator;
import javax.swing.tree.DefaultMutableTreeNode;
import javax.swing.tree.MutableTreeNode;
import org.parosproxy.paros.core.scanner.Alert;
import javax.swing.tree.TreeNode;
public class AlertNode extends DefaultMutableTreeNode {
private static final long serialVersionUID = 1L;
private final Comparator<AlertNode> childComparator;
private String nodeName = null;
private int risk = -1;
private Alert alert;
public AlertNode(int risk, String nodeName) {
this(risk, nodeName, null);
}
public AlertNode(int risk, String nodeName, Comparator<AlertNode> childComparator) {
super();
this.nodeName = nodeName;
this.setRisk(risk);
this.childComparator = childComparator;
}
@Override
public void setUserObject(Object userObject) {
if (!(userObject instanceof Alert)) {
throw new IllegalArgumentException("Parameter userObject must be an Alert.");
}
this.alert = (Alert) userObject;
}
@Override
public Alert getUserObject() {
return alert;
}
@Override
public AlertNode getChildAt(int index) {
return (AlertNode) super.getChildAt(index);
}
@Override
public AlertNode getParent() {
return (AlertNode) super.getParent();
}
@Override
public void add(MutableTreeNode newChild) {
if (!(newChild instanceof AlertNode)) {
throw new IllegalArgumentException("Parameter newChild must be an AlertNode.");
}
super.add(newChild);
}
@Override
public void insert(MutableTreeNode newChild, int childIndex) {
if (!(newChild instanceof AlertNode)) {
throw new IllegalArgumentException("Parameter newChild must be an AlertNode.");
}
super.insert(newChild, childIndex);
}
@Override
public int getIndex(TreeNode aChild) {
if (aChild == null) {
throw new IllegalArgumentException("argument is null");
}
if (!(aChild instanceof AlertNode)) {
return -1;
}
if (!isNodeChild(aChild)) {
return -1;
}
int idx = findIndex((AlertNode) aChild);
if (idx < 0) {
return -1;
}
return idx;
}
public int findIndex(AlertNode aChild) {
if (children == null) {
return -1;
}
// Safe, only child AlertNode are allowed to be added/inserted to AlertNode;
// Variable idx is only used to add the @SuppressWarnings annotation locally (instead of the whole method).
@SuppressWarnings("unchecked")
int idx = Collections.binarySearch(children, aChild, childComparator);
return idx;
}
@Override
public String toString() {
if (this.getChildCount() > 1) {
return nodeName + " (" + this.getChildCount() + ")";
}
return nodeName;
}
public String getNodeName() {
return nodeName;
}
public void setRisk(int risk) {
this.risk = risk;
}
public int getRisk() {
return risk;
}
}