Hi Wolfgang,<br>this is an extract of drl file:<br><br>declare GasObservation<br> @role(event)<br> @startTimestamp(timestamp)<br> @expires( 10s )<br> @duration(duration)<br>end<br><br>declare GasEvent<br> @startTimestamp(timestampDate)<br>
@role(event)<br> @duration(duration)<br>end<br><br>rule "gas1-event"<br> no-loop<br> when<br> $obs : GasObservation( $obsLocation : location, gasname == "UN 1017", value > 60 ) over window:length(1) from entry-point lowLevelSensorStream<br>
not GasEvent( location geoIsWithinDistance[ 5m ] $obsLocation, gasname == "UN 1017", this before[1s, 25s] $obs )<br> then<br> insert(new GasEvent( $obs, "UN 1017 value > threshold[60]", Event.THREAT_HIGH, $obsLocation, $obs.getSensor()));<br>
end<br>rule "gas1-event-update"<br> no-loop<br> when<br> $obs : GasObservation( $obsLocation : location, gasname == "UN 1017", value > 60 ) over window:length(1) from entry-point lowLevelSensorStream<br>
$event : GasEvent( location geoIsWithinDistance[ 5m ] $obsLocation, gasname == "UN 1017", this before[1s, 25s] $obs )<br> then<br> modify($event) { <br> updateDuration(),<br> addObservation($obs) <br>
}<br>end<br><br>and these are abstract Observation class and abstract Event<br><br>public abstract class Observation implements Serializable {<br><br> /**<br> * <br> */<br> private static final long serialVersionUID = 3483256523801072709L;<br>
private long timestamp;<br> private long duration;<br> <br> private Geometry location;<br> private Sensor sensor;<br> <br> public long getTimestamp() { return timestamp; }<br> public void setTimestamp(long timestamp) { this.timestamp = timestamp; }<br>
<br> public long getDuration() { return duration; }<br> public void setDuration(long duration) { this.duration = duration; }<br><br> public Sensor getSensor() { return sensor; }<br> public void setSensor(Sensor sensor) { this.sensor = sensor; }<br>
<br> public Geometry getLocation() { return location; }<br> public void setLocation(Geometry location) { this.location = location; }<br> <br> /**<br> * @param newTimeStamp<br> * this methods allows to update the duration of event by setting the timestamp of new observation.<br>
*/<br> public void updateDuration(long newTimeStamp) {<br> setDuration(newTimeStamp - getTimestamp());<br> }<br> <br> public Date getTimestampDate() { return new Date(timestamp); }<br> public void setTimestampDate(Date timestamp) { this.timestamp = timestamp.getTime(); }<br>
<br> public Observation(Sensor sensor, Geometry location, long timestamp) {<br> this.setLocation(location);<br> this.setTimestamp( timestamp );<br> this.setSensor( sensor );<br> }<br> <br> /**<br>
* @return identification by servicename:timestamp<br> */<br> public String getServiceIdentification() { <br> return getSensor().getServiceName() + ":" + getTimestamp() ;<br> }<br> <br> <br>
}<br><br><br><br><br>public abstract class Event implements Serializable {<br><br> .....<br> <br> <br> /**<br> * <br> */<br> private static final long serialVersionUID = 1L;<br> <br> /**<br> * The timestamp of event.<br>
*/<br> private long timestamp;<br> <br> <br> /**<br> * The level of threat of the event.<br> */<br> private int threat_level;<br> <br> /**<br> * The description of event.<br> */<br>
private String description;<br> <br> /**<br> * The location of event.<br> */<br> private Geometry location;<br> <br> /**<br> * Duration of event.<br> */<br> private long duration;<br>
<br> /**<br> * Id of sensor.<br> */<br> private Sensor sensor;<br> <br> /**<br> * The map feature involved into Event.<br> */<br> private MapFeature feature;<br> <br> /**<br> * link to the timestamp of parent event.<br>
*/<br> private long parent;<br> <br> private Collection<Observation> observations;<br> private Collection<Event> relatedEvents;<br> <br> public abstract int getType();<br> <br> public Collection<Observation> getObservations() { return observations; }<br>
public void addObservation(Observation obs) { observations.add(obs); }<br><br> public Collection<Event> getRelatedEvents() { return relatedEvents; }<br> public void addRelatedEvent(Event evnt) { relatedEvents.add(evnt); }<br>
<br> public Sensor getSensor() { return sensor; }<br> public void setSensor(Sensor sensorId) { this.sensor = sensorId; }<br> <br> public long getDuration() { return duration; }<br> public void setDuration(long duration) { this.duration = duration; }<br>
<br> public int getThreat_level() { return threat_level; }<br> public void setThreat_level(int threatLevel) { threat_level = threatLevel; }<br> <br> /**<br> * @param newTimeStamp<br> * this methods allows to update the duration of event by setting the timestamp of new observation.<br>
*/<br> public void updateDuration() {<br> setDuration(System.currentTimeMillis() - getTimestamp());<br> }<br> <br> public long getTimestamp() { return timestamp; }<br> public void setTimestamp(long timestamp) { this.timestamp = timestamp; }<br>
<br> public Date getTimestampDate() { return new Date(timestamp); }<br> public void setTimestampDate(Date timestamp) { this.timestamp = timestamp.getTime(); }<br> <br> public String getDescription() { return description; }<br>
public void setDescription(String description) { this.description = description; }<br> <br> public Geometry getLocation() { return location; }<br> public void setLocation(Geometry location) { this.location = location; }<br>
<br> /*<br> public int getType() { return type; }<br> public void setType(int type) { this.type = type; }<br> */<br> <br> public MapFeature getFeature() { return feature; }<br> public void setFeature(MapFeature feature) { this.feature = feature; }<br>
<br> public long getParent() { return parent; }<br> public void setParent(long timestamp) { parent = timestamp; }<br> <br> /**<br> * @param description description of event<br> * @param threat_level threat level of timestamp<br>
* @param location location of event<br> * @param sensor sensor related to this event<br> * @param feature map feature related to event<br> */<br> protected Event(String description, int threat_level, Geometry location, Sensor sensor, MapFeature feature) {<br>
this.setTimestamp(System.currentTimeMillis());<br> this.observations = new ArrayList<Observation>();<br> this.relatedEvents = new ArrayList<Event>();<br> this.setTimestamp( timestamp );<br>
this.setDescription( description );<br> this.setThreat_level( threat_level );<br> this.setLocation( location );<br> this.setSensor(sensor);<br> this.setFeature( feature );<br> }<br> <br>
public String getServiceIdentification() {<br> return "events:" + this.timestamp;<br> }<br> <br>}<br><br><br>Thanks a lot in advance.<br><br><div class="gmail_quote">2012/2/22 Wolfgang Laun <span dir="ltr"><<a href="mailto:wolfgang.laun@gmail.com">wolfgang.laun@gmail.com</a>></span><br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">A minimum but complete set of *.java and *.drl files would help.<div>-W<br><br><div class="gmail_quote">2012/2/22 Matteo Cusmai <span dir="ltr"><<a href="mailto:cusmaimatteo@gmail.com" target="_blank">cusmaimatteo@gmail.com</a>></span><br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div><div class="h5"><br>Hi all,
<br>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.
<br>Bye bye,
<br>Matteo.
        
<br></div></div>_______________________________________________<br>
rules-users mailing list<br>
<a href="mailto:rules-users@lists.jboss.org" target="_blank">rules-users@lists.jboss.org</a><br>
<a href="https://lists.jboss.org/mailman/listinfo/rules-users" target="_blank">https://lists.jboss.org/mailman/listinfo/rules-users</a><br>
<br></blockquote></div><br></div>
<br>_______________________________________________<br>
rules-users mailing list<br>
<a href="mailto:rules-users@lists.jboss.org">rules-users@lists.jboss.org</a><br>
<a href="https://lists.jboss.org/mailman/listinfo/rules-users" target="_blank">https://lists.jboss.org/mailman/listinfo/rules-users</a><br>
<br></blockquote></div><br>