package com.amazonaws.eclipse.codedeploy.deploy.progress;
import org.eclipse.jface.dialogs.Dialog;
import org.eclipse.jface.dialogs.IDialogConstants;
import org.eclipse.jface.resource.JFaceResources;
import org.eclipse.swt.SWT;
import org.eclipse.swt.events.SelectionAdapter;
import org.eclipse.swt.events.SelectionEvent;
import org.eclipse.swt.layout.GridData;
import org.eclipse.swt.layout.GridLayout;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Control;
import org.eclipse.swt.widgets.Group;
import org.eclipse.swt.widgets.Label;
import org.eclipse.swt.widgets.Link;
import org.eclipse.swt.widgets.Shell;
import com.amazonaws.services.codedeploy.model.InstanceSummary;
import com.amazonaws.services.codedeploy.model.LifecycleEvent;
public class InstanceSummaryDetailDialog extends Dialog {
private final InstanceSummary instanceSummary;
public InstanceSummaryDetailDialog(Shell parentShell,
InstanceSummary instanceSummary) {
super(parentShell);
if (instanceSummary == null) {
throw new NullPointerException("instanceSummary must not be null.");
}
this.instanceSummary = instanceSummary;
}
/**
* To customize the dialog title
*/
@Override
protected void configureShell(Shell newShell) {
super.configureShell(newShell);
newShell.setText("Instance Lifecycle Events");
}
/**
* To customize the dialog button
*/
@Override
protected void createButtonsForButtonBar(Composite parent) {
createButton(parent, IDialogConstants.CANCEL_ID,
"Close", false);
}
@Override
protected Control createDialogArea(Composite parent) {
Composite container = (Composite) super.createDialogArea(parent);
GridLayout layout = new GridLayout(1, false);
container.setLayout(layout);
createControls(container, instanceSummary);
return container;
}
private void createControls(Composite parent, InstanceSummary instanceSummary) {
for (LifecycleEvent event : instanceSummary.getLifecycleEvents()) {
String eventName = event.getLifecycleEventName();
LifecycleEventUIGroup group = new LifecycleEventUIGroup(
parent, SWT.NONE, eventName);
group.update(event);
}
}
private static String toUIString(Object object) {
return object == null ? "n/a" : object.toString();
}
private static class LifecycleEventUIGroup extends Group {
private Label label_Status;
private Label label_StartTime;
private Label label_EndTime;
private Link link_Diagnostics;
public LifecycleEventUIGroup(Composite parent, int style, String groupName) {
super(parent, style);
setText(groupName);
setFont(JFaceResources.getBannerFont());
GridData gridData = new GridData(SWT.FILL, SWT.CENTER, true, false);
setLayoutData(gridData);
setLayout(new GridLayout(1, false));
label_Status = new Label(this, SWT.NONE);
label_StartTime = new Label(this, SWT.NONE);
label_EndTime = new Label(this, SWT.NONE);
link_Diagnostics = new Link(this, SWT.NONE);
link_Diagnostics.setText("<a>View diagnostics</a>");
link_Diagnostics.setEnabled(false);
}
public void update(final LifecycleEvent event) {
label_Status.setText("Status: " + toUIString(event.getStatus()));
label_StartTime.setText("Start time: " + toUIString(event.getStartTime()));
label_EndTime.setText("End time: " + toUIString(event.getEndTime()));
if (event.getDiagnostics() != null) {
link_Diagnostics.setEnabled(true);
link_Diagnostics.addSelectionListener(new SelectionAdapter() {
@Override
public void widgetSelected(SelectionEvent arg0) {
new LifecycleEventDiagnosticsDialog(
getShell(), event.getDiagnostics())
.open();
}
});
}
}
@Override
protected void checkSubclass() {
}
}
}