Hi Wolfgang, this is an extract of drl file: declare GasObservation @role(event) @startTimestamp(timestamp) @expires( 10s ) @duration(duration) end
declare GasEvent @startTimestamp(timestampDate) @role(event) @duration(duration) end rule "gas1-event" no-loop when $obs : GasObservation( $obsLocation : location, gasname == "UN 1017", value > 60 ) over window:length(1) from entry-point lowLevelSensorStream not GasEvent( location geoIsWithinDistance[ 5m ] $obsLocation, gasname == "UN 1017", this before[1s, 25s] $obs ) then insert(new GasEvent( $obs, "UN 1017 value > threshold[60]", Event.THREAT_HIGH, $obsLocation, $obs.getSensor())); end rule "gas1-event-update" no-loop when $obs : GasObservation( $obsLocation : location, gasname == "UN 1017", value > 60 ) over window:length(1) from entry-point lowLevelSensorStream $event : GasEvent( location geoIsWithinDistance[ 5m ] $obsLocation, gasname == "UN 1017", this before[1s, 25s] $obs ) then modify($event) { updateDuration(), addObservation($obs) } end and these are abstract Observation class and abstract Event public abstract class Observation implements Serializable { /** * */ private static final long serialVersionUID = 3483256523801072709L; private long timestamp; private long duration; private Geometry location; private Sensor sensor; public long getTimestamp() { return timestamp; } public void setTimestamp(long timestamp) { this.timestamp = timestamp; } public long getDuration() { return duration; } public void setDuration(long duration) { this.duration = duration; } public Sensor getSensor() { return sensor; } public void setSensor(Sensor sensor) { this.sensor = sensor; } public Geometry getLocation() { return location; } public void setLocation(Geometry location) { this.location = location; } /** * @param newTimeStamp * this methods allows to update the duration of event by setting the timestamp of new observation. */ public void updateDuration(long newTimeStamp) { setDuration(newTimeStamp - getTimestamp()); } public Date getTimestampDate() { return new Date(timestamp); } public void setTimestampDate(Date timestamp) { this.timestamp = timestamp.getTime(); } public Observation(Sensor sensor, Geometry location, long timestamp) { this.setLocation(location); this.setTimestamp( timestamp ); this.setSensor( sensor ); } /** * @return identification by servicename:timestamp */ public String getServiceIdentification() { return getSensor().getServiceName() + ":" + getTimestamp() ; } } public abstract class Event implements Serializable { ..... /** * */ private static final long serialVersionUID = 1L; /** * The timestamp of event. */ private long timestamp; /** * The level of threat of the event. */ private int threat_level; /** * The description of event. */ private String description; /** * The location of event. */ private Geometry location; /** * Duration of event. */ private long duration; /** * Id of sensor. */ private Sensor sensor; /** * The map feature involved into Event. */ private MapFeature feature; /** * link to the timestamp of parent event. */ private long parent; private Collection<Observation> observations; private Collection<Event> relatedEvents; public abstract int getType(); public Collection<Observation> getObservations() { return observations; } public void addObservation(Observation obs) { observations.add(obs); } public Collection<Event> getRelatedEvents() { return relatedEvents; } public void addRelatedEvent(Event evnt) { relatedEvents.add(evnt); } public Sensor getSensor() { return sensor; } public void setSensor(Sensor sensorId) { this.sensor = sensorId; } public long getDuration() { return duration; } public void setDuration(long duration) { this.duration = duration; } public int getThreat_level() { return threat_level; } public void setThreat_level(int threatLevel) { threat_level = threatLevel; } /** * @param newTimeStamp * this methods allows to update the duration of event by setting the timestamp of new observation. */ public void updateDuration() { setDuration(System.currentTimeMillis() - getTimestamp()); } public long getTimestamp() { return timestamp; } public void setTimestamp(long timestamp) { this.timestamp = timestamp; } public Date getTimestampDate() { return new Date(timestamp); } public void setTimestampDate(Date timestamp) { this.timestamp = timestamp.getTime(); } public String getDescription() { return description; } public void setDescription(String description) { this.description = description; } public Geometry getLocation() { return location; } public void setLocation(Geometry location) { this.location = location; } /* public int getType() { return type; } public void setType(int type) { this.type = type; } */ public MapFeature getFeature() { return feature; } public void setFeature(MapFeature feature) { this.feature = feature; } public long getParent() { return parent; } public void setParent(long timestamp) { parent = timestamp; } /** * @param description description of event * @param threat_level threat level of timestamp * @param location location of event * @param sensor sensor related to this event * @param feature map feature related to event */ protected Event(String description, int threat_level, Geometry location, Sensor sensor, MapFeature feature) { this.setTimestamp(System.currentTimeMillis()); this.observations = new ArrayList<Observation>(); this.relatedEvents = new ArrayList<Event>(); this.setTimestamp( timestamp ); this.setDescription( description ); this.setThreat_level( threat_level ); this.setLocation( location ); this.setSensor(sensor); this.setFeature( feature ); } public String getServiceIdentification() { return "events:" + this.timestamp; } } Thanks a lot in advance. 2012/2/22 Wolfgang Laun <wolfgang.l...@gmail.com> > A minimum but complete set of *.java and *.drl files would help. > -W > > 2012/2/22 Matteo Cusmai <cusmaimat...@gmail.com> > >> >> Hi all, >> i am using Drools Fusion in multi sensor data fusion system. I have some >> rules that generate a new event when some situations occur. But from the >> other hand, i would like to update the event, when i understand that new >> sensor observation is referring to the same event. I have my Event clazz >> with duration field, i try to update it in modify clause, but i have >> concern about it, because when i use temporal operator (such as before, >> meets, so on) it seems that Drools manage them as event with duration null. >> I could post the code too. >> Bye bye, >> Matteo. >> _______________________________________________ >> rules-users mailing list >> rules-users@lists.jboss.org >> https://lists.jboss.org/mailman/listinfo/rules-users >> >> > > _______________________________________________ > rules-users mailing list > rules-users@lists.jboss.org > https://lists.jboss.org/mailman/listinfo/rules-users > >
_______________________________________________ rules-users mailing list rules-users@lists.jboss.org https://lists.jboss.org/mailman/listinfo/rules-users