package org.jboss.as.patching.installation;
import java.io.File;
import java.io.IOException;
import java.util.List;
import org.jboss.as.patching.PatchingException;
import org.jboss.as.patching.metadata.LayerType;
import org.jboss.as.patching.metadata.Patch;
import org.jboss.as.version.ProductConfig;
/**
* The installation manager, basically represents a mutable {@code InstalledIdentity}.
*
* @author Emanuel Muckenhuber
*/
public abstract class InstallationManager {
public abstract InstalledIdentity getDefaultIdentity();
public abstract List<InstalledIdentity> getInstalledIdentities() throws PatchingException;
public abstract InstalledIdentity getInstalledIdentity(String productName, String productVersion) throws PatchingException;
public abstract InstalledImage getInstalledImage();
/**
* Check whether the instance requires a restart.
*
* @return {@code true} if a restart is required, {@code false} otherwise
*/
public abstract boolean requiresRestart();
/**
* Require a restart. This will set the patching service to read-only
* and the server has to be restarted in order to execute the next
* patch operation.
* <p/>
* In case the patch operation does not succeed it needs to clear the
* reload required state using {@link #clearRestartRequired()}.
*
* @return this will return {@code true}
*/
public abstract boolean restartRequired();
/**
* Clear the the restart required state.
*/
public abstract void clearRestartRequired();
public interface InstallationModification extends MutablePatchingTarget {
/**
* Get the identity name.
*
* @return the identity name
*/
String getName();
/**
* Get the current version of the identity.
*
* @return the identity version
*/
String getVersion();
/**
* Set the resulting version.
*
* @param version the resulting version
*/
void setResultingVersion(String version);
/**
* Add a patch to the installed list.
*
* @param patchId the patch id
*/
void addInstalledPatch(String patchId) throws PatchingException;
/**
* Remove a patch from the installed list.
*
* @param patchId the patch id
* @throws PatchingException
*/
void removeInstalledPatch(String patchId) throws PatchingException;
/**
* Get the unmodified state.
*
* @return the originals tate
*/
InstalledIdentity getUnmodifiedInstallationState();
/**
* Resolve a target for patching.
*
* @param name the layer name
* @param type the layer type
* @return the patching target
*/
MutablePatchingTarget resolve(String name, LayerType type);
/**
* Complete the modifications.
*/
void complete();
/**
* Cancel the modifications. The installation is unchanged.
*/
void cancel();
}
public interface MutablePatchingTarget extends PatchableTarget.TargetInfo {
/**
* Rollback an applied patch.
*
* @param patchId the patch id to rollback
*/
void rollback(String patchId);
/**
* Checks whether the specified patch id was rolled back in the current process.
*
* @param patchId patch is to check
* @return true if the patch was rolled back in the current process, otherwise - false
*/
boolean isRolledback(String patchId);
/**
* Apply a patch.
*
* @param patchId the patch id
* @param patchType the patch type
*/
void apply(String patchId, Patch.PatchType patchType);
/**
* Check whether a patch is applied.
*
* @param patchId the patch id
* @return {@code true} if the given patch is currently applied, {@code false} otherwise
*/
boolean isApplied(String patchId);
/**
* Get the modified state.
*
* @return the modified state
*/
PatchableTarget.TargetInfo getModifiedState();
}
public interface ModificationCompletionCallback {
/**
* The modification has been successfully completed.
*/
void completed();
/**
* The modification has been canceled. The installation did not change.
*/
void canceled();
}
/**
* Load the default installation manager implementation.
*
* @param jbossHome the jboss home directory
* @param moduleRoots the module roots
* @param bundlesRoots the bundle roots
* @param productConfig the product config
* @return the installation manager implementation
* @throws IOException
*/
public static InstallationManager load(final File jbossHome, final List<File> moduleRoots, final List<File> bundlesRoots, final ProductConfig productConfig) throws IOException {
final InstalledImage installedImage = InstalledIdentity.installedImage(jbossHome);
return new InstallationManagerImpl(installedImage, moduleRoots, bundlesRoots, productConfig);
}
}