public void modelSensorValue(String value, long timeNow) { synchronized (ans) { boolean makeNew = false; if (currentAct == null) { makeNew = true; } else if (currentAct != null) { // If it has not changed, do nothing - otherwise: if (this.hasChanged(value)) { // change value AllenIntervalConstraint deadline = new AllenIntervalConstraint( AllenIntervalConstraint.Type.Deadline, new Bounds(timeNow, timeNow)); deadline.setFrom(currentAct.getVariable()); deadline.setTo(currentAct.getVariable()); ans.removeConstraint(currentMeetsFuture); boolean ret = ans.addConstraint(deadline); if (!ret) throw new NetworkMaintenanceError(deadline); // if (!ret) throw new // NetworkMaintenanceError(future.getTemporalVariable().getEST(),timeNow); makeNew = true; } } // First reading or value changed --> make new activity if (makeNew) { Activity act = this.createNewActivity(value); AllenIntervalConstraint rel = new AllenIntervalConstraint( AllenIntervalConstraint.Type.Release, new Bounds(timeNow, timeNow)); rel.setFrom(act.getVariable()); rel.setTo(act.getVariable()); AllenIntervalConstraint meetsFuture = new AllenIntervalConstraint(AllenIntervalConstraint.Type.Meets); meetsFuture.setFrom(act.getVariable()); meetsFuture.setTo(future); currentAct = act; currentMeetsFuture = meetsFuture; boolean ret = ans.addConstraints(new Constraint[] {rel, meetsFuture}); // if (!ret) throw new NetworkMaintenanceError(rel,meetsFuture); if (!ret) throw new NetworkMaintenanceError(future.getTemporalVariable().getEST(), timeNow); logger.info("" + currentAct); } } }