/*
* This file is part of LCMC written by Rasto Levrinc.
*
* Copyright (C) 2014, Rastislav Levrinc.
*
* The LCMC is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public License as published
* by the Free Software Foundation; either version 2, or (at your option)
* any later version.
*
* The LCMC is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with LCMC; see the file COPYING. If not, write to
* the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA.
*/
package lcmc.drbd.domain;
import lcmc.Exceptions;
import lcmc.host.ui.DrbdVersions;
import lcmc.logger.Logger;
import lcmc.logger.LoggerFactory;
import lcmc.common.domain.util.Tools;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
public class DrbdInstallation {
private static final Logger LOG = LoggerFactory.getLogger(DrbdInstallation.class);
/** Drbd version of the source tarball, that will be installed . */
private String drbdBuildToInstall = null;
private String drbdPackagesToInstall = null;
private boolean drbdWillBeUpgraded = false;
private boolean drbdWasNewlyInstalled = false;
private String drbdInstallMethodIndex;
private String proxyInstallMethodIndex;
private DrbdVersions drbdVersions;
private List<String> availableDrbdVersions = null;
public void setDrbdToInstall(final DrbdVersions drbdVersions) {
this.drbdVersions = drbdVersions;
}
public DrbdVersions getDrbdToInstall() {
return drbdVersions;
}
/**
* Sets drbdBuildToInstall. This build is the one that is to be installed.
*/
public void setDrbdBuildToInstall(final String drbdBuildToInstall) {
this.drbdBuildToInstall = drbdBuildToInstall;
}
/** Returns the drbd build to be installed. */
public String getDrbdBuildToInstall() {
return drbdBuildToInstall;
}
public void setDrbdPackagesToInstall(final String drbdPackagesToInstall) {
this.drbdPackagesToInstall = drbdPackagesToInstall;
}
public void setDrbdWillBeUpgraded(final boolean drbdWillBeUpgraded) {
this.drbdWillBeUpgraded = drbdWillBeUpgraded;
}
public void setDrbdWasNewlyInstalled(final boolean drbdWasNewlyInstalled) {
this.drbdWasNewlyInstalled = drbdWasNewlyInstalled;
}
/**
* Returns true if drbd will be upgraded and drbd was installed.
* TODO: ???
*/
public boolean isDrbdUpgraded() {
return drbdWillBeUpgraded && drbdWasNewlyInstalled;
}
/** Sets drbd installation method index. */
public void setDrbdInstallMethodIndex(final String drbdInstallMethodIndex) {
this.drbdInstallMethodIndex = drbdInstallMethodIndex;
}
public String getDrbdInstallMethodIndex() {
return drbdInstallMethodIndex;
}
public void setProxyInstallMethodIndex(final String proxyInstallMethodIndex) {
this.proxyInstallMethodIndex = proxyInstallMethodIndex;
}
public String getProxyInstallMethodIndex() {
return proxyInstallMethodIndex;
}
public String replaceVarsInCommand(String command) {
if (drbdVersions != null) {
final String drbdVersionToInstall = drbdVersions.getModuleVersion();
if (drbdVersionToInstall != null && command.contains("@DRBDVERSION@")) {
command = command.replaceAll("@DRBDVERSION@", drbdVersionToInstall);
}
final String utilVersionToInstall = drbdVersions.getUtilVersion();
if (utilVersionToInstall != null && command.contains("@DRBD-UTIL-VERSION@")) {
command = command.replaceAll("@DRBD-UTIL-VERSION@", utilVersionToInstall);
}
}
if (drbdBuildToInstall != null && command.contains("@BUILD@")) {
command = command.replaceAll("@BUILD@", drbdBuildToInstall);
}
if (drbdPackagesToInstall != null && command.contains("@DRBDPACKAGES@")) {
command = command.replaceAll("@DRBDPACKAGES@", drbdPackagesToInstall);
}
return command;
}
public void setAvailableDrbdVersions(final String[] versions) {
availableDrbdVersions = new ArrayList<String>(Arrays.asList(versions));
}
public String[] getAvailableDrbdVersions() {
if (availableDrbdVersions == null) {
return null;
}
return availableDrbdVersions.toArray(new String[availableDrbdVersions.size()]);
}
public boolean isDrbdUpgradeAvailable(final String versionString) {
if (availableDrbdVersions == null || versionString == null) {
return false;
}
final String version = versionString.split(" ")[0];
for (final String v : availableDrbdVersions) {
try {
if (Tools.compareVersions(v, version) > 0) {
return true;
}
} catch (final Exceptions.IllegalVersionException e) {
LOG.appWarning("isDrbdUpgradeAvailable: "+ e.getMessage(), e);
}
}
return false;
}
}