package gov.redhawk.ui.views.event; /******************************************************************************* * This file is protected by Copyright. * Please refer to the COPYRIGHT file distributed with this source distribution. * * This file is part of REDHAWK IDE. * * 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 *******************************************************************************/ import java.text.DateFormat; import java.text.SimpleDateFormat; import org.eclipse.core.runtime.IStatus; import org.eclipse.core.runtime.Status; import org.eclipse.jface.viewers.ILabelProviderListener; import org.eclipse.nebula.widgets.xviewer.XViewer; import org.eclipse.nebula.widgets.xviewer.XViewerLabelProvider; import org.eclipse.nebula.widgets.xviewer.core.model.XViewerColumn; import org.eclipse.swt.graphics.Image; import org.eclipse.ui.statushandlers.StatusManager; import org.omg.CORBA.TypeCodePackage.BadKind; import CF.DataType; import CF.LogEvent; import CF.LogEventHelper; import CF.PropertyChangeListenerPackage.PropertyChangeEvent; import CF.PropertyChangeListenerPackage.PropertyChangeEventHelper; import CF.PropertyChangeListenerPackage.PropertyChangeEventHelper_2_0; import ExtendedEvent.PropertySetChangeEventType; import ExtendedEvent.PropertySetChangeEventTypeHelper; import ExtendedEvent.ResourceStateChangeEventType; import ExtendedEvent.ResourceStateChangeEventTypeHelper; import StandardEvent.AbnormalComponentTerminationEventType; import StandardEvent.AbnormalComponentTerminationEventTypeHelper; import StandardEvent.DomainManagementObjectAddedEventType; import StandardEvent.DomainManagementObjectAddedEventTypeHelper; import StandardEvent.DomainManagementObjectRemovedEventType; import StandardEvent.DomainManagementObjectRemovedEventTypeHelper; import StandardEvent.StateChangeEventType; import StandardEvent.StateChangeEventTypeHelper; import gov.redhawk.ui.views.event.model.Event; import gov.redhawk.ui.views.event.utils.EventViewUtils; public class EventViewerLabelProvider extends XViewerLabelProvider { private static final DateFormat DATE_FORMAT_SS = new SimpleDateFormat("HH:mm:ss"); public EventViewerLabelProvider(XViewer viewer) { super(viewer); } @Override public boolean isLabelProperty(Object element, String property) { return false; } @Override public void addListener(ILabelProviderListener listener) { // do nothing } @Override public void removeListener(ILabelProviderListener listener) { // do nothing } @Override public void dispose() { } @Override public Image getColumnImage(Object element, XViewerColumn xCol, int columnIndex) throws Exception { return null; } @Override public String getColumnText(Object element, XViewerColumn xCol, int columnIndex) throws Exception { if (element instanceof Event) { Event event = (Event) element; if (xCol.equals(EventViewerFactory.TIME_COL_SS)) { return EventViewerLabelProvider.DATE_FORMAT_SS.format(event.getTimestamp()); } else if (xCol.equals(EventViewerFactory.TYPE_COL)) { if (event.valueIsType(CF.PropertiesHelper.type())) { return "MessageEvent"; } try { return event.getValue().type().name(); } catch (BadKind e) { StatusManager.getManager().handle( new Status(IStatus.ERROR, EventViewPlugin.PLUGIN_ID, "Error retrieving event name: " + e.getMessage(), e), StatusManager.SHOW | StatusManager.LOG); } return "UNKNOWN"; } else if (xCol.equals(EventViewerFactory.SUMMARY)) { return getEventSummary(event); } } return ""; } private String getEventSummary(Event event) { if (event.valueIsType(DomainManagementObjectAddedEventTypeHelper.type())) { DomainManagementObjectAddedEventType value = DomainManagementObjectAddedEventTypeHelper.extract(event.getValue()); return (value.sourceName + " added to the domain"); } else if (event.valueIsType(DomainManagementObjectRemovedEventTypeHelper.type())) { DomainManagementObjectRemovedEventType value = DomainManagementObjectRemovedEventTypeHelper.extract(event.getValue()); return (value.sourceName + " removed from the domain"); } else if (event.valueIsType(StateChangeEventTypeHelper.type())) { StateChangeEventType value = StateChangeEventTypeHelper.extract(event.getValue()); return (value.sourceId + " state changed from " + EventViewUtils.toString(value.stateChangeFrom) + " to " + EventViewUtils.toString(value.stateChangeTo)); } else if (event.valueIsType(PropertyChangeEventHelper.type())) { PropertyChangeEvent value = PropertyChangeEventHelper.extract(event.getValue()); StringBuilder sb = new StringBuilder(100); sb.append("Properties for "); sb.append(value.resource_id); sb.append(" have been changed: "); appendPropIdList(sb, value.properties); return sb.toString(); } else if (event.valueIsType(PropertySetChangeEventTypeHelper.type())) { PropertySetChangeEventType value = PropertySetChangeEventTypeHelper.extract(event.getValue()); StringBuilder sb = new StringBuilder(100); sb.append("Properties for "); sb.append(value.sourceName); sb.append(" have been changed: "); appendPropIdList(sb, value.properties); return sb.toString(); } else if (event.valueIsType(ResourceStateChangeEventTypeHelper.type())) { ResourceStateChangeEventType value = ResourceStateChangeEventTypeHelper.extract(event.getValue()); return (value.sourceName + " state changed from " + EventViewUtils.toString(value.stateChangeFrom) + " to " + EventViewUtils.toString(value.stateChangeTo)); } else if (event.valueIsType(AbnormalComponentTerminationEventTypeHelper.type())) { AbnormalComponentTerminationEventType value = AbnormalComponentTerminationEventTypeHelper.extract(event.getValue()); return (value.componentId + " terminated unexpectedly"); } else if (event.valueIsType(CF.PropertiesHelper.type())) { DataType[] value = CF.PropertiesHelper.extract(event.getValue()); StringBuilder sb = new StringBuilder("Event received regarding structs: "); appendPropIdList(sb, value); return sb.toString(); } else if (event.valueIsType(LogEventHelper.type())) { LogEvent value = LogEventHelper.extract(event.getValue()); return value.msg; } else if (event.valueIsType(PropertyChangeEventHelper_2_0.type())) { PropertyChangeEvent value = PropertyChangeEventHelper_2_0.extract(event.getValue()); StringBuilder sb = new StringBuilder(100); sb.append("Properties for "); sb.append(value.resource_id); sb.append(" have been changed: "); appendPropIdList(sb, value.properties); return sb.toString(); } return ""; } private String appendPropIdList(StringBuilder sb, DataType[] props) { sb.append('['); int len = 0; boolean ellipsis = false; for (DataType prop : props) { len += prop.id.length(); if (len < 50) { sb.append(prop.id); sb.append(", "); } else { sb.append("..."); ellipsis = true; break; } } if (!ellipsis && props.length > 0) { sb.setLength(sb.length() - 2); } sb.append(']'); return sb.toString(); } @Override public Object getBackingData(Object element, XViewerColumn xViewerColumn, int columnIndex) throws Exception { // If not shown, don't process any further if (!xViewerColumn.isShow()) { return ""; } if (xViewerColumn.getId().equals(EventViewerFactory.TIME_COL_SS.getId()) && element instanceof Event) { return ((Event) element).getTimestamp(); } return super.getBackingData(element, xViewerColumn, columnIndex); } }