package org.openflexo.foundation.action;
import java.util.Vector;
import org.openflexo.foundation.FlexoEditor;
import org.openflexo.foundation.FlexoException;
import org.openflexo.foundation.FlexoModelObject;
import org.openflexo.foundation.cg.GeneratedOutput;
import org.openflexo.foundation.cg.GenerationRepository;
import org.openflexo.foundation.rm.FlexoProject;
import org.openflexo.foundation.rm.FlexoProjectReference;
import org.openflexo.foundation.utils.ProjectLoadingCancelledException;
public class LoadAllImportedProject extends FlexoAction<LoadAllImportedProject, FlexoModelObject, FlexoModelObject> {
public static final FlexoActionType<LoadAllImportedProject, FlexoModelObject, FlexoModelObject> actionType = new FlexoActionType<LoadAllImportedProject, FlexoModelObject, FlexoModelObject>(
"load_all_imported_project") {
@Override
public LoadAllImportedProject makeNewAction(FlexoModelObject focusedObject, Vector<FlexoModelObject> globalSelection,
FlexoEditor editor) {
return new LoadAllImportedProject(focusedObject, globalSelection, editor);
}
@Override
public boolean isVisibleForSelection(FlexoModelObject object, Vector<FlexoModelObject> globalSelection) {
return object != null && object.getProject() != null && object.getProject().getProjectData() != null
&& object.getProject().getProjectData().getImportedProjects().size() > 0;
}
@Override
public boolean isEnabledForSelection(FlexoModelObject object, Vector<FlexoModelObject> globalSelection) {
return object != null && object.getProject() != null && !object.getProject().areAllImportedProjectsLoaded();
}
};
static {
FlexoModelObject.addActionForClass(actionType, GeneratedOutput.class);
FlexoModelObject.addActionForClass(actionType, GenerationRepository.class);
FlexoModelObject.addActionForClass(actionType, FlexoProject.class);
}
public LoadAllImportedProject(FlexoModelObject focusedObject, Vector<FlexoModelObject> globalSelection, FlexoEditor editor) {
super(actionType, focusedObject, globalSelection, editor);
}
@Override
protected void doAction(Object context) throws FlexoException {
FlexoProject project = getImportingProject();
if (!loadImportedProjects(project)) {
throw new ProjectLoadingCancelledException();
}
}
private boolean loadImportedProjects(FlexoProject project) {
boolean loaded = true;
if (project.getProjectData() != null) {
for (FlexoProjectReference ref : project.getProjectData().getImportedProjects()) {
FlexoProject referredProject = ref.getReferredProject(true);
if (referredProject != null) {
loaded &= loadImportedProjects(referredProject);
} else {
loaded = false;
}
}
}
return loaded;
}
public FlexoProject getImportingProject() {
return getFocusedObject().getProject();
}
}