/** * Copyright 2010 JBoss Inc * * 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.drools.common; import org.drools.FactHandle; import org.drools.runtime.rule.WorkingMemoryEntryPoint; public class EventFactHandle extends DefaultFactHandle { private static final long serialVersionUID = 510l; private long startTimestamp; private long duration; private boolean expired; private long activationsCount; // ---------------------------------------------------------------------- // Constructors // ---------------------------------------------------------------------- public EventFactHandle() { super(); this.startTimestamp = 0; this.duration = 0; } /** * Creates a new event fact handle. * * @param id this event fact handle ID * @param object the event object encapsulated in this event fact handle * @param recency the recency of this event fact handle * @param timestamp the timestamp of the occurrence of this event * @param duration the duration of this event. May be 0 (zero) in case this is a primitive event. */ public EventFactHandle(final int id, final Object object, final long recency, final long timestamp, final long duration, final WorkingMemoryEntryPoint wmEntryPoint) { super( id, object, recency, wmEntryPoint ); this.startTimestamp = timestamp; this.duration = duration; } /** * @see FactHandle * 1: is used for EventFactHandle */ public String toExternalForm() { //return "[event fid:" + getId() + ":" + getRecency() + ":" + getObject() + "]"; return "1:" + this.getId() + ":" + getIdentityHashCode() + ":" + getObjectHashCode() + ":" + getRecency(); } /** * @see Object */ public String toString() { return toExternalForm(); } /** * Always returns true, since the EventFactHandle is * only used for Events, and not for regular Facts */ public boolean isEvent() { return true; } /** * Returns the timestamp of the occurrence of this event. * @return */ public long getStartTimestamp() { return startTimestamp; } /** * Returns the duration of this event. In case this is a primitive event, * returns 0 (zero). * * @return */ public long getDuration() { return duration; } /** * Returns the end timestamp for this event. This is the same as: * * startTimestamp + duration * * @return */ public long getEndTimestamp() { return this.startTimestamp + this.duration; } public boolean isExpired() { return expired; } public void setExpired(boolean expired) { this.expired = expired; } public long getActivationsCount() { return activationsCount; } public void increaseActivationsCount() { this.activationsCount++; } public void decreaseActivationsCount() { this.activationsCount--; } public EventFactHandle clone() { EventFactHandle clone = new EventFactHandle( getId(), getObject(), getRecency(), startTimestamp, duration, getEntryPoint() ); clone.activationsCount = activationsCount; clone.expired = expired; clone.setEntryPoint( getEntryPoint() ); clone.setEqualityKey( getEqualityKey() ); clone.setFirstLeftTuple( getLastLeftTuple() ); clone.setLastLeftTuple( getLastLeftTuple() ); clone.setFirstRightTuple( getFirstRightTuple() ); clone.setLastRightTuple( getLastRightTuple() ); clone.setObjectHashCode( getObjectHashCode() ); return clone; } }