/*
* Copyright (C) 2006-2016 DLR, Germany
*
* All rights reserved
*
* http://www.rcenvironment.de/
*/
package de.rcenvironment.core.instancemanagement.internal;
import java.io.File;
import java.io.IOException;
import java.util.List;
import de.rcenvironment.core.utils.common.textstream.TextOutputReceiver;
/**
* Abstract basis class for {@link InstanceOperations} decorators.
*
* @author David Scholz
*/
// TODO review this decorator approach - misc_ro
public abstract class AbstractInstanceOperationsDecorator implements InstanceOperations {
private final InstanceOperations delegate;
public AbstractInstanceOperationsDecorator(InstanceOperations delegate) {
this.delegate = delegate;
if (delegate == null) {
throw new IllegalStateException("No object to decorate is defined!");
}
}
@Override
public final boolean isProfileLocked(File profileDir) throws IOException {
return delegate.isProfileLocked(profileDir);
}
@Override
public final void shutdownInstance(List<File> profileDirList, long timeout, TextOutputReceiver userOutputReceiver)
throws InstanceOperationException {
try {
beforeShutdown(profileDirList, timeout);
delegate.shutdownInstance(profileDirList, timeout, userOutputReceiver);
} catch (InstanceOperationException e) {
onShutdownFailure(e.getFailedInstances());
throw e;
}
}
@Override
public final void startInstanceUsingInstallation(List<File> profileDirList, File installationDir, long timeout,
TextOutputReceiver userOutputReceiver, boolean startWithGUI)
throws InstanceOperationException {
try {
beforeStart(profileDirList, installationDir, timeout);
delegate.startInstanceUsingInstallation(profileDirList, installationDir, timeout, userOutputReceiver, startWithGUI);
} catch (InstanceOperationException e) {
onStartupFailure(e.getFailedInstances());
throw e;
}
}
abstract void beforeShutdown(List<File> profileDirList, long timeout) throws InstanceOperationException;
abstract void beforeStart(List<File> profileDirList, File installationDir, long timeout) throws InstanceOperationException;
abstract void onStartupFailure(List<File> profileDirList) throws InstanceOperationException;
abstract void onShutdownFailure(List<File> profileDirList) throws InstanceOperationException;
@Override
public final void registerInstanceOperationCallbackListener(InstanceOperationCallbackListener callbackListener) {
delegate.registerInstanceOperationCallbackListener(callbackListener);
}
@Override
public final void unregisterInstanceOperationCallbackListener(InstanceOperationCallbackListener callbackListener) {
delegate.unregisterInstanceOperationCallbackListener(callbackListener);
}
@Override
public final void fireCommandFinishEvent(final File profile) throws IOException {
delegate.fireCommandFinishEvent(profile);
}
}