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.laun@gmail.com>
A minimum but complete set of *.java and *.drl files would help.
-W

2012/2/22 Matteo Cusmai <cusmaimatteo@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