/* * NOTE: This copyright doesnot cover user programs that use HQ program services * by normal system calls through the application program interfaces provided as * part of the Hyperic Plug-in Development Kit or the Hyperic Client Development * Kit - this is merely considered normal use of the program, and doesnot fall * under the heading of "derived work". Copyright (C) [2004, 2005, 2006], * Hyperic, Inc. This file is part of HQ. HQ is free software; you can * redistribute it and/or modify it under the terms version 2 of the GNU General * Public License as published by the Free Software Foundation. This program is * distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A * PARTICULAR PURPOSE. See the GNU General Public License for more details. You * should have received a copy of the GNU General Public License along with this * program; if not, write to the Free Software Foundation, Inc., 59 Temple * Place, Suite 330, Boston, MA 02111-1307 USA. */ package org.hyperic.hq.events; import java.util.ArrayList; import java.util.Arrays; public class TriggerFiredEvent extends AbstractEvent implements java.io.Serializable { private static final long serialVersionUID = -2813854367589382845L; /** Holds value of property value. */ private AbstractEvent[] events; /** Holds value of property message. */ private String message; /** Creates a new instance of TriggerFiredEvent */ public TriggerFiredEvent(Integer instanceId, AbstractEvent event) { setInstanceId(instanceId); setEvents(new AbstractEvent[] { event }); } /** Creates a new instance of TriggerFiredEvent */ public TriggerFiredEvent(Integer instanceId, AbstractEvent[] events) { setInstanceId(instanceId); setEvents(events); } /** * Getter for property events. * @return Value of property events. * */ public AbstractEvent[] getEvents() { return this.events; } /** * Getter for property message. * @return Value of property message. * */ public String getMessage() { return this.message; } /** * Traverse down nested events to a non TriggerFired event * @return The root event which caused the TriggerFiredEvent */ public TriggerFiredEvent[] getRootEvents() { if (events.length == 1 && !(events[0] instanceof TriggerFiredEvent)) { return new TriggerFiredEvent[] { this }; } else { // Go through the events and create an list of TriggerFiredEvents ArrayList list = new ArrayList(); for (int i = 0; i < events.length; i++) { // Theoretically, they should all be TriggerFiredEvents if (events[i] instanceof TriggerFiredEvent) { TriggerFiredEvent tfe = (TriggerFiredEvent) events[i]; list.addAll(Arrays.asList(tfe.getRootEvents())); } else { // Not a valid case, but let's be safe list.add(new TriggerFiredEvent(getInstanceId(), events[i])); } } // Now return the list as array return (TriggerFiredEvent[]) list.toArray(new TriggerFiredEvent[list.size()]); } } public long getTimestamp() { long timestamp = 0; for (int i = 0; i < events.length; i++) { timestamp = Math.max(timestamp, events[i].getTimestamp()); } return timestamp; } /** * Setter for property events. * @param events New value of property events. * */ public void setEvents(AbstractEvent[] events) { this.events = events; } /** * Setter for property message. * @param message New value of property message. * */ public void setMessage(String message) { this.message = message; } public String toString() { if (events.length == 1) { return events[0].toString(); } else if (this.message != null) { return this.message; } else { return super.toString(); } } }