package com.plectix.simulator.staticanalysis.stories.storage;
import com.plectix.simulator.staticanalysis.stories.ActionOfAEvent;
public final class AtomicEvent<E> {
private ActionOfAEvent type;
private final Event container;
private AbstractState<E> state;
public AtomicEvent(Event container, ActionOfAEvent type) {
this.container = container;
state = new AbstractState<E>();
this.type = type;
}
final void setState(AbstractState<E> state) {
this.state = state;
}
public final AbstractState<E> getState() {
return state;
}
public final ActionOfAEvent getType() {
return type;
}
public final Event getContainer() {
return container;
}
public final void correctingType(ActionOfAEvent modification) {
if (type == ActionOfAEvent.TEST_AND_MODIFICATION)
return;
if (type == ActionOfAEvent.TEST && modification == ActionOfAEvent.MODIFICATION)
type = ActionOfAEvent.TEST_AND_MODIFICATION;
}
public final AtomicEvent<?> cloneWithBefore(Event container) {
AtomicEvent<E> outAEvent = new AtomicEvent<E>(container,ActionOfAEvent.MODIFICATION);
AbstractState<E> outState = new AbstractState<E>();
outAEvent.setState(outState);
outState.setAfterState(state.getBeforeState());
outState.setBeforeState(null);
return outAEvent;
}
public final AtomicEvent<?> clone(){
AtomicEvent<E> outAEvent = new AtomicEvent<E>(container,type);
AbstractState<E> outState = new AbstractState<E>();
outAEvent.setState(outState);
outState.setAfterState(state.getAfterState());
outState.setBeforeState(state.getBeforeState());
return outAEvent;
}
@Override
public final String toString(){
String answer = "";
answer +="container = " +container.getStepId();
answer +=" type =" + type;
answer += " state = "+ state.toString();
return answer;
}
}