package husacct.control.task;
import husacct.ServiceProvider;
import husacct.analyse.IAnalyseService;
import husacct.common.dto.ApplicationDTO;
import husacct.common.enums.States;
import husacct.common.services.IServiceListener;
import husacct.define.IDefineService;
import husacct.graphics.IGraphicsService;
import husacct.validate.IValidateService;
import java.util.ArrayList;
import java.util.List;
public class StateController {
private List<States> states = new ArrayList<States>();
private ArrayList<IStateChangeListener> stateListeners = new ArrayList<IStateChangeListener>();
private WorkspaceController workspaceController;
private boolean isAnalysing = false;
private boolean isValidating = false;
public StateController(MainController mainController){
workspaceController = mainController.getWorkspaceController();
states.add(States.NONE);
}
public void setServiceListeners(){
IDefineService defineService = ServiceProvider.getInstance().getDefineService();
IAnalyseService analyseService = ServiceProvider.getInstance().getAnalyseService();
IValidateService validateService = ServiceProvider.getInstance().getValidateService();
IGraphicsService graphicsService = ServiceProvider.getInstance().getGraphicsService();
IServiceListener serviceListener = new IServiceListener() {
@Override
public void update() {
checkState();
}
};
defineService.addServiceListener(serviceListener);
analyseService.addServiceListener(serviceListener);
validateService.addServiceListener(serviceListener);
graphicsService.addServiceListener(serviceListener);
}
public void checkState(){
IDefineService defineService = ServiceProvider.getInstance().getDefineService();
IAnalyseService analyseService = ServiceProvider.getInstance().getAnalyseService();
IValidateService validateService = ServiceProvider.getInstance().getValidateService();
List<States> newStates = new ArrayList<States>();
if(workspaceController.isAWorkspaceOpened()){
newStates.add(States.OPENED);
}
ApplicationDTO applicationData = defineService.getApplicationDetails();
if(applicationData.projects.size() > 0) {
newStates.add(States.APPSET);
}
if(defineService.isDefined()){
newStates.add(States.DEFINED);
}
if(defineService.isMapped()){
newStates.add(States.MAPPED);
}
if(analyseService.isAnalysed()){
newStates.add(States.ANALYSED);
}
if(isAnalysing()) {
newStates.add(States.ANALYSING);
}
if(validateService.isValidated()){
newStates.add(States.VALIDATED);
}
if(isValidating()) {
newStates.add(States.VALIDATING);
}
if(newStates.isEmpty()){
newStates.add(States.NONE);
}
setStates(newStates);
}
public List<States> getStates(){
return this.states;
}
public void setStates(List<States> states){
this.states = states;
notifyStateListeners(states);
}
public void addStateChangeListener(IStateChangeListener listener) {
this.stateListeners.add(listener);
}
public void notifyStateListeners(List<States> states){
for(IStateChangeListener listener : this.stateListeners){
listener.changeState(states);
}
}
public boolean isValidating() {
return this.isValidating;
}
public boolean isAnalysing() {
return this.isAnalysing;
}
public void setAnalysing(boolean analysing) {
this.isAnalysing = analysing;
checkState();
}
public void setValidating(boolean validating) {
this.isValidating = validating;
checkState();
}
}