/** * Posts a constraints in the problem. If it has ever been posted (but deactivated), it is only * reactivated and repropagated. * * @param constraint The constraint to post. */ public void post(SConstraint constraint) { if (constraint instanceof PalmSConstraint) { PalmSConstraint pconstraint = (PalmSConstraint) constraint; PalmConstraintPlugin pi = (PalmConstraintPlugin) pconstraint.getPlugIn(); if (!(pi.isEverConnected())) { int idx; constraints.staticAdd((Propagator) constraint); idx = this.constraints.size() - 1; pi.setConstraintIdx(idx); pconstraint.addListener(false); ConstraintEvent event = (ConstraintEvent) pconstraint.getEvent(); propagationEngine.registerEvent(event); propagationEngine.postConstAwake(pconstraint, true); } else { logger.fine("The constraint " + constraint + " is reactivated."); this.propagationEngine.postConstAwake(pconstraint, true); pconstraint.setActive(); } if (pi.isDepending()) pi.setDependance(); } else { throw new Error("Impossible to post non-Palm constraints to a Palm problem"); } }