/******************************************************************************* * Copyright (c) 2011 Subgraph. * 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 * * Contributors: * Subgraph - initial API and implementation ******************************************************************************/ package com.subgraph.vega.ui.scanner.alerts.tree; import java.text.SimpleDateFormat; import org.apache.http.HttpHost; import com.subgraph.vega.api.model.IWorkspace; import com.subgraph.vega.api.model.alerts.IScanAlert; import com.subgraph.vega.api.model.alerts.IScanInstance; import com.subgraph.vega.api.model.requests.IRequestLogRecord; public class AlertScanNode extends AbstractAlertTreeNode { private final static String SCAN_IMAGE = "icons/scanner.png"; private final static String PROXY_IMAGE = "icons/proxy.png"; private final static String NO_HOSTNAME = "No Hostname"; private final IWorkspace workspace; private final long scanId; private final SimpleDateFormat dateFormat = new SimpleDateFormat("MM/dd/yyyy HH:mm:ss"); private IScanInstance scanInstance; AlertScanNode(long scanId, IWorkspace workspace) { this.workspace = workspace; this.scanId = scanId; } void setScanInstance(IScanInstance scanInstance) { this.scanInstance = scanInstance; } public IScanInstance getScanInstance() { return scanInstance; } @Override public String getLabel() { if(scanId == -1) { return "Proxy "; } else if(scanInstance == null) { return "Scan [id: #"+ Long.toString(scanId) +"] "; } else { return renderScanInstance(); } } private String renderScanInstance() { final StringBuilder sb = new StringBuilder(); sb.append(dateFormat.format(scanInstance.getStartTime())); sb.append(" ["); switch(scanInstance.getScanStatus()) { case IScanInstance.SCAN_IDLE: sb.append("Idle"); break; case IScanInstance.SCAN_STARTING: sb.append("Starting"); break; case IScanInstance.SCAN_AUDITING: sb.append("Auditing"); break; case IScanInstance.SCAN_CANCELLED: sb.append("Cancelled"); break; case IScanInstance.SCAN_COMPLETED: sb.append("Completed"); break; } sb.append("] "); return sb.toString(); } @Override protected AbstractAlertTreeNode createNodeForAlert(IScanAlert alert) { return new AlertHostNode(createKeyForAlert(alert)); } @Override public String getImage() { if(scanId == -1) { return PROXY_IMAGE; } else { return SCAN_IMAGE; } } @Override protected String createKeyForAlert(IScanAlert alert) { if(!alert.hasAssociatedRequest()) { return NO_HOSTNAME; } final IRequestLogRecord record = workspace.getRequestLog().lookupRecord(alert.getRequestId()); if(record == null) { return NO_HOSTNAME; } final HttpHost host = record.getHttpHost(); if(host == null) { return NO_HOSTNAME; } return host.toString(); } public long getScanId() { return scanId; } }