Interface ProblemChangeDirector
- All Known Implementing Classes:
DefaultProblemChangeDirector
,MockProblemChangeDirector
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> void
Add a newPlanningEntity
instance into theworking solution
.<ProblemFact>
voidaddProblemFact
(ProblemFact problemFact, Consumer<ProblemFact> problemFactConsumer) Add a new problem fact into theworking solution
.<EntityOrProblemFact>
voidchangeProblemProperty
(EntityOrProblemFact problemFactOrEntity, Consumer<EntityOrProblemFact> problemFactOrEntityConsumer) Change a property of either aPlanningEntity
or a problem fact.<Entity> void
changeVariable
(Entity entity, String variableName, Consumer<Entity> entityConsumer) Change aPlanningVariable
value of aPlanningEntity
.<EntityOrProblemFact>
Optional<EntityOrProblemFact>lookUpWorkingObject
(EntityOrProblemFact externalObject) As defined bylookUpWorkingObjectOrFail(Object)
, but doesn't fail fast if no workingObject was ever added for the externalObject.<EntityOrProblemFact>
EntityOrProblemFactlookUpWorkingObjectOrFail
(EntityOrProblemFact externalObject) Translate an entity or fact instance (often from anotherThread
or JVM) to thisProblemChangeDirector
's internal working instance.<Entity> void
removeEntity
(Entity entity, Consumer<Entity> entityConsumer) Remove an existingPlanningEntity
instance from theworking solution
.<ProblemFact>
voidremoveProblemFact
(ProblemFact problemFact, Consumer<ProblemFact> problemFactConsumer) Remove an existing problem fact from theworking solution
.
-
Method Details
-
addEntity
Add a newPlanningEntity
instance into theworking solution
.- Type Parameters:
Entity
- the planning entity object type- Parameters:
entity
- never null; thePlanningEntity
instanceentityConsumer
- never null; adds the entity to theworking solution
-
removeEntity
Remove an existingPlanningEntity
instance 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
- never null; thePlanningEntity
instanceentityConsumer
- never null; removes the working entity from theworking solution
-
changeVariable
Change aPlanningVariable
value 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
- never null; thePlanningEntity
instancevariableName
- never null; name of thePlanningVariable
entityConsumer
- never null; updates the value of thePlanningVariable
inside thePlanningEntity
-
addProblemFact
<ProblemFact> void addProblemFact(ProblemFact problemFact, Consumer<ProblemFact> problemFactConsumer) Add a new problem fact into theworking solution
.- Type Parameters:
ProblemFact
- the problem fact object type- Parameters:
problemFact
- never null; the problem fact instanceproblemFactConsumer
- never null; removes the working problem fact from theworking solution
-
removeProblemFact
<ProblemFact> void removeProblemFact(ProblemFact problemFact, 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
- never null; the problem fact instanceproblemFactConsumer
- never null; removes the working problem fact from theworking solution
-
changeProblemProperty
<EntityOrProblemFact> void changeProblemProperty(EntityOrProblemFact problemFactOrEntity, Consumer<EntityOrProblemFact> problemFactOrEntityConsumer) Change a property of either aPlanningEntity
or a problem fact. Translates the entity or the problem fact to itsworking solution
counterpart by performing a lookup as defined bylookUpWorkingObjectOrFail(Object)
.- Type Parameters:
EntityOrProblemFact
- the planning entity or problem fact object type- Parameters:
problemFactOrEntity
- never null; thePlanningEntity
or the problem fact instanceproblemFactOrEntityConsumer
- never null; updates the property of thePlanningEntity
or the problem fact
-
lookUpWorkingObjectOrFail
<EntityOrProblemFact> EntityOrProblemFact lookUpWorkingObjectOrFail(EntityOrProblemFact externalObject) Translate an entity or fact instance (often from anotherThread
or JVM) to thisProblemChangeDirector
's internal working instance.Matching is determined by the
LookUpStrategyType
onPlanningSolution
. Matching uses aPlanningId
by default.- Type Parameters:
EntityOrProblemFact
- the object type- Parameters:
externalObject
- sometimes null- 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(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- Parameters:
externalObject
- sometimes null- 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
-