59 lines
1.7 KiB
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);
|
|
|
|
}
|
|
}
|
|
}
|