resource-manager-gcore/src/org/gcube/vremanagement/resourcemanager/impl/state/observers/Executor.java

59 lines
1.7 KiB
Java

package org.gcube.vremanagement.resourcemanager.impl.state.observers;
import org.gcube.vremanagement.resourcemanager.impl.operators.Operator.ACTION;
import org.gcube.vremanagement.resourcemanager.impl.resources.ScopedResource;
import org.gcube.vremanagement.resourcemanager.impl.resources.ScopedResource.STATUS;
import org.gcube.vremanagement.resourcemanager.impl.state.ScopeState;
import org.gcube.vremanagement.resourcemanager.impl.state.ScopeState.OPERATION;
/**
*
* Performs operations on {@link ScopedResource}s
*
* @author Manuele Simi (ISTI-CNR)
*
*/
public class Executor extends ScopeObserver {
@Override
protected void scopeChanged(ScopeState scopeState) {
if (scopeState.getLastOperationPerformed() == OPERATION.EXECUTED)
return; //nothing to manage
boolean managed = false;
for (ScopedResource resource : scopeState.getAllResources()) {
switch (resource.getStatus()) {
case ADDREQUESTED: this.addResourceToScope(resource); managed = true; break;
case REMOVEREQUESTED: this.removeResourceFromScope(resource); managed = true;break;
}
}
//notify the others for serialization and publication duties
if (managed) {
scopeState.setLastOperationPerformed(OPERATION.EXECUTED);
scopeState.notifyObservers();
}
}
private void addResourceToScope(ScopedResource resource) {
try {
resource.doAction(ACTION.ADD);
resource.setStatus(STATUS.ADDED);
} catch (Exception e) {
resource.setStatus(STATUS.LOST);
}
}
private void removeResourceFromScope(ScopedResource resource) {
try {
resource.doAction(ACTION.REMOVE);
resource.setStatus(STATUS.REMOVED);
} catch (Exception e) {
resource.setStatus(STATUS.LOST);
}
}
}