Interface ProblemChangeDirector
- All Known Implementing Classes:
DefaultProblemChangeDirector
public interface ProblemChangeDirector
Allows external changes to the
working solution. If the changes are not applied through
the ProblemChangeDirector,
both internal and custom variable listeners are
never notified about them, resulting to inconsistencies in the working solution.
Should be used only from a ProblemChange implementation.
To see an example implementation, please refer to the ProblemChange Javadoc.-
Method Summary
Modifier and TypeMethodDescription<Entity> voidAdd a newPlanningEntityinstance into theworking solution.<ProblemFact>
voidaddProblemFact(@NonNull ProblemFact problemFact, @NonNull Consumer<ProblemFact> problemFactConsumer) Add a new problem fact into theworking solution.<EntityOrProblemFact>
voidchangeProblemProperty(@NonNull EntityOrProblemFact problemFactOrEntity, @NonNull Consumer<EntityOrProblemFact> problemFactOrEntityConsumer) Change a property of either aPlanningEntityor a problem fact.<Entity> voidchangeVariable(@NonNull Entity entity, @NonNull String variableName, @NonNull Consumer<Entity> entityConsumer) Change aPlanningVariablevalue of aPlanningEntity.<EntityOrProblemFact>
Optional<EntityOrProblemFact>lookUpWorkingObject(@Nullable EntityOrProblemFact externalObject) As defined bylookUpWorkingObjectOrFail(Object), but doesn't fail fast if no workingObject was ever added for the externalObject.<EntityOrProblemFact>
@Nullable EntityOrProblemFactlookUpWorkingObjectOrFail(@Nullable EntityOrProblemFact externalObject) Translate an entity or fact instance (often from anotherThreador JVM) to thisProblemChangeDirector's internal working instance.<Entity> voidremoveEntity(@NonNull Entity entity, @NonNull Consumer<Entity> entityConsumer) Remove an existingPlanningEntityinstance from theworking solution.<ProblemFact>
voidremoveProblemFact(@NonNull ProblemFact problemFact, @NonNull Consumer<ProblemFact> problemFactConsumer) Remove an existing problem fact from theworking solution.voidCalls variable listeners on the external changes submitted so far.
-
Method Details
-
addEntity
Add a newPlanningEntityinstance into theworking solution.- Type Parameters:
Entity- the planning entity object type- Parameters:
entity- thePlanningEntityinstanceentityConsumer- adds the entity to theworking solution
-
removeEntity
Remove an existingPlanningEntityinstance from theworking solution. Translates the entity to a working planning entity by performing a lookup as defined bylookUpWorkingObjectOrFail(Object).- Type Parameters:
Entity- the planning entity object type- Parameters:
entity- thePlanningEntityinstanceentityConsumer- removes the working entity from theworking solution
-
changeVariable
<Entity> void changeVariable(@NonNull Entity entity, @NonNull String variableName, @NonNull Consumer<Entity> entityConsumer) Change aPlanningVariablevalue of aPlanningEntity. Translates the entity to a working planning entity by performing a lookup as defined bylookUpWorkingObjectOrFail(Object).- Type Parameters:
Entity- the planning entity object type- Parameters:
entity- thePlanningEntityinstancevariableName- name of thePlanningVariableentityConsumer- updates the value of thePlanningVariableinside thePlanningEntity
-
addProblemFact
<ProblemFact> void addProblemFact(@NonNull ProblemFact problemFact, @NonNull Consumer<ProblemFact> problemFactConsumer) Add a new problem fact into theworking solution.- Type Parameters:
ProblemFact- the problem fact object type- Parameters:
problemFact- the problem fact instanceproblemFactConsumer- removes the working problem fact from theworking solution
-
removeProblemFact
<ProblemFact> void removeProblemFact(@NonNull ProblemFact problemFact, @NonNull Consumer<ProblemFact> problemFactConsumer) Remove an existing problem fact from theworking solution. Translates the problem fact to a working problem fact by performing a lookup as defined bylookUpWorkingObjectOrFail(Object).- Type Parameters:
ProblemFact- the problem fact object type- Parameters:
problemFact- the problem fact instanceproblemFactConsumer- removes the working problem fact from theworking solution
-
changeProblemProperty
<EntityOrProblemFact> void changeProblemProperty(@NonNull EntityOrProblemFact problemFactOrEntity, @NonNull Consumer<EntityOrProblemFact> problemFactOrEntityConsumer) Change a property of either aPlanningEntityor a problem fact. Translates the entity or the problem fact to itsworking solutioncounterpart by performing a lookup as defined bylookUpWorkingObjectOrFail(Object).- Type Parameters:
EntityOrProblemFact- the planning entity or problem fact object type- Parameters:
problemFactOrEntity- thePlanningEntityor the problem fact instanceproblemFactOrEntityConsumer- updates the property of thePlanningEntityor the problem fact
-
lookUpWorkingObjectOrFail
<EntityOrProblemFact> @Nullable EntityOrProblemFact lookUpWorkingObjectOrFail(@Nullable EntityOrProblemFact externalObject) Translate an entity or fact instance (often from anotherThreador JVM) to thisProblemChangeDirector's internal working instance.Matching is determined by the
LookUpStrategyTypeonPlanningSolution. Matching uses aPlanningIdby default.- Type Parameters:
EntityOrProblemFact- the object type- Returns:
- null if externalObject is null
- Throws:
IllegalArgumentException- if there is no workingObject for externalObject, if it cannot be looked up or if the externalObject's class is not supportedIllegalStateException- if it cannot be looked up
-
lookUpWorkingObject
<EntityOrProblemFact> Optional<EntityOrProblemFact> lookUpWorkingObject(@Nullable EntityOrProblemFact externalObject) As defined bylookUpWorkingObjectOrFail(Object), but doesn't fail fast if no workingObject was ever added for the externalObject. It's recommended to uselookUpWorkingObjectOrFail(Object)instead.- Type Parameters:
EntityOrProblemFact- the object type- Returns:
Optional.empty()if externalObject is null or if there is no workingObject for externalObject- Throws:
IllegalArgumentException- if it cannot be looked up or if the externalObject's class is not supportedIllegalStateException- if it cannot be looked up
-
updateShadowVariables
void updateShadowVariables()Calls variable listeners on the external changes submitted so far.This happens automatically after the entire
ProblemChangehas been processed, but this method allows the user to specifically request it in the middle of theProblemChange.
-