package org.ovirt.engine.core.dal.dbbroker.auditloghandling;
import java.util.List;
import javax.transaction.Transaction;
import org.ovirt.engine.core.common.AuditLogType;
import org.ovirt.engine.core.common.businessentities.StorageDomainStatus;
import org.ovirt.engine.core.common.businessentities.VDS;
import org.ovirt.engine.core.common.businessentities.VDSGroup;
import org.ovirt.engine.core.common.businessentities.VM;
import org.ovirt.engine.core.common.businessentities.VmTemplate;
import org.ovirt.engine.core.common.businessentities.storage_domains;
import org.ovirt.engine.core.common.businessentities.storage_pool;
import org.ovirt.engine.core.common.interfaces.IVdcUser;
import org.ovirt.engine.core.compat.Guid;
import org.ovirt.engine.core.compat.LogCompat;
import org.ovirt.engine.core.compat.LogFactoryCompat;
import org.ovirt.engine.core.compat.NGuid;
import org.ovirt.engine.core.compat.StringHelper;
import org.ovirt.engine.core.dal.dbbroker.DbFacade;
import org.ovirt.engine.core.dao.StorageDomainDAO;
import org.ovirt.engine.core.dao.StoragePoolDAO;
import org.ovirt.engine.core.dao.VdsDAO;
import org.ovirt.engine.core.dao.VdsGroupDAO;
import org.ovirt.engine.core.dao.VmDAO;
import org.ovirt.engine.core.dao.VmStaticDAO;
import org.ovirt.engine.core.dao.VmStatisticsDAO;
import org.ovirt.engine.core.dao.VmTemplateDAO;
import org.ovirt.engine.core.utils.transaction.TransactionSupport;
public class AuditLogableBase extends TimeoutBase {
private static final long serialVersionUID = -4764813076922800727L;
private NGuid mVmId = Guid.Empty;
private IVdcUser mVdcUser;
private Guid mUserId = Guid.Empty;
private String mUserName;
private String mVmName;
private final java.util.HashMap<String, String> customValues = new java.util.HashMap<String, String>();
private NGuid mVdsId;
private String mVdsName;
private NGuid mVmTemplateId;
private String mVmTemplateName;
private VDS mVds;
private VM mVm;
private VmTemplate mVmTemplate;
private NGuid _storageDomainId;
private NGuid _storagePoolId;
private Guid mVdsGroupId;
private VDSGroup mVdsGroup;
private NGuid glusterVolumeId;
private String glusterVolumeName;
public AuditLogableBase() {
}
public AuditLogableBase(final NGuid vdsId) {
mVdsId = vdsId;
}
public AuditLogableBase(final NGuid vdsId, final Guid vmId) {
this(vdsId);
mVmId = vmId;
}
public NGuid getUserId() {
if (mUserId.equals(Guid.Empty) && getCurrentUser() != null) {
mUserId = getCurrentUser().getUserId();
}
return mUserId;
}
public void setUserId(final NGuid value) {
mUserId = value.getValue();
}
public String getUserName() {
if (StringHelper.isNullOrEmpty(mUserName) && getCurrentUser() != null) {
mUserName = getCurrentUser().getUserName();
}
return mUserName;
}
public void setUserName(final String value) {
mUserName = value;
}
public IVdcUser getCurrentUser() {
return mVdcUser;
}
public void setCurrentUser(final IVdcUser value) {
mVdcUser = value;
}
public Guid getVmTemplateId() {
return getVmTemplateIdRef() != null ? getVmTemplateIdRef().getValue() : Guid.Empty;
}
public void setVmTemplateId(final Guid value) {
mVmTemplateId = value;
}
public NGuid getVmTemplateIdRef() {
if (mVmTemplateId == null && getVmTemplate() != null) {
mVmTemplateId = getVmTemplate().getId();
}
return mVmTemplateId;
}
public String getVmTemplateName() {
if (mVmTemplateName == null && getVmTemplate() != null) {
mVmTemplateName = getVmTemplate().getname();
}
return mVmTemplateName;
}
protected void setVmTemplateName(final String value) {
mVmTemplateName = value;
}
public Guid getVmId() {
return getVmIdRef() != null ? getVmIdRef().getValue() : Guid.Empty;
}
public void setVmId(final Guid value) {
mVmId = value;
}
private String privateSnapshotName;
public String getSnapshotName() {
return privateSnapshotName;
}
public void setSnapshotName(final String value) {
privateSnapshotName = value;
}
public NGuid getVmIdRef() {
if (mVmId == null && getVm() != null) {
mVmId = getVm().getvm_guid();
}
return mVmId;
}
public String getVmName() {
if (mVmName == null && getVm() != null) {
mVmName = getVm().getvm_name();
}
return mVmName;
}
protected void setVmName(final String value) {
mVmName = value;
}
public NGuid getVdsIdRef() {
if (mVdsId == null && getVds() != null) {
mVdsId = getVds().getvds_id();
}
return mVdsId;
}
protected void setVdsIdRef(final NGuid value) {
mVdsId = value;
}
public Guid getVdsId() {
return mVdsId != null ? mVdsId.getValue() : Guid.Empty;
}
public void setVdsId(final Guid value) {
mVdsId = value;
}
public String getVdsName() {
if (mVdsName == null && getVds() != null) {
mVdsName = getVds().getvds_name();
}
return mVdsName;
}
protected void setVdsName(final String value) {
mVdsName = value;
}
private storage_domains _storageDomain;
public storage_domains getStorageDomain() {
if (_storageDomain == null && getStorageDomainId() != null) {
if (_storagePoolId != null && getStoragePool() != null) {
_storageDomain = getStorageDomainDAO().getForStoragePool(
getStorageDomainId().getValue(), getStoragePool().getId());
}
if (_storageDomain == null) {
final List<storage_domains> storageDomainList =
getStorageDomainDAO().getAllForStorageDomain(getStorageDomainId().getValue());
if (storageDomainList.size() != 0) {
_storageDomain = storageDomainList.get(0);
for (final storage_domains storageDomainFromList : storageDomainList) {
if (storageDomainFromList.getstatus() != null
&& storageDomainFromList.getstatus() == StorageDomainStatus.Active) {
_storageDomain = storageDomainFromList;
break;
}
}
}
}
}
return _storageDomain;
}
public StorageDomainDAO getStorageDomainDAO() {
return DbFacade.getInstance().getStorageDomainDAO();
}
public void setStorageDomain(final storage_domains value) {
_storageDomain = value;
}
public NGuid getStorageDomainId() {
if (_storageDomain != null) {
return _storageDomain.getid();
} else {
return _storageDomainId;
}
}
public void setStorageDomainId(final NGuid value) {
_storageDomainId = value;
}
public String getStorageDomainName() {
if (getStorageDomain() != null) {
return getStorageDomain().getstorage_name();
} else {
return "";
}
}
private storage_pool _storagePool;
public storage_pool getStoragePool() {
if (_storagePool == null && getStoragePoolId() != null && !Guid.Empty.equals(getStoragePoolId())) {
_storagePool = getStoragePoolDAO().get(getStoragePoolId().getValue());
}
return _storagePool;
}
public StoragePoolDAO getStoragePoolDAO() {
return DbFacade.getInstance().getStoragePoolDAO();
}
public void setStoragePool(final storage_pool value) {
_storagePool = value;
}
public NGuid getStoragePoolId() {
if (_storagePoolId == null) {
if (_storagePool != null) {
_storagePoolId = _storagePool.getId();
} else if (getStorageDomain() != null) {
_storagePoolId = getStorageDomain().getstorage_pool_id();
}
}
return _storagePoolId;
}
public void setStoragePoolId(final NGuid value) {
_storagePoolId = value;
}
public String getStoragePoolName() {
if (getStoragePool() != null) {
return getStoragePool().getname();
} else {
return "";
}
}
public AuditLogType getAuditLogTypeValue() {
return AuditLogType.UNASSIGNED;
}
protected VDS getVds() {
if (mVds == null && (mVdsId != null || (getVm() != null && getVm().getrun_on_vds() != null))) {
if (mVdsId == null) {
mVdsId = new Guid(getVm().getrun_on_vds().toString());
}
try {
mVds = getVdsDAO().get(getVdsId());
} catch (final RuntimeException e) {
log.infoFormat("Failed to get vds {0}\n{1}", mVdsId, e.getMessage());
}
}
return mVds;
}
public VdsDAO getVdsDAO() {
return DbFacade.getInstance().getVdsDAO();
}
protected void setVds(final VDS value) {
mVds = value;
mVdsName = null;
}
public VM getVm() {
if (mVm == null && mVmId != null && !mVmId.equals(Guid.Empty)) {
try {
mVm = getVmDAO().getById(mVmId.getValue());
} catch (final java.lang.Exception e) {
log.infoFormat("Failed to get vm {0}", mVmId);
log.debug(e);
}
}
return mVm;
}
protected void setVm(final VM value) {
mVm = value;
}
public VmTemplate getVmTemplate() {
if (mVmTemplate == null && (mVmTemplateId != null || getVm() != null))
{
mVmTemplate = getVmTemplateDAO()
.get(mVmTemplateId != null ? getVmTemplateId() : getVm()
.getvmt_guid());
}
return mVmTemplate;
}
public VmTemplateDAO getVmTemplateDAO() {
return DbFacade.getInstance().getVmTemplateDAO();
}
protected VmDAO getVmDAO() {
return DbFacade.getInstance().getVmDAO();
}
public VmStaticDAO getVmStaticDAO() {
return DbFacade.getInstance().getVmStaticDAO();
}
protected VmStatisticsDAO getVmStatisticsDAO() {
return DbFacade.getInstance().getVmStatisticsDAO();
}
protected void setVmTemplate(final VmTemplate value) {
mVmTemplate = value;
}
public Guid getVdsGroupId() {
if (mVdsGroupId != null) {
return mVdsGroupId;
} else if (getVdsGroup() != null) {
mVdsGroupId = getVdsGroup().getID();
return mVdsGroupId;
} else {
return Guid.Empty;
}
}
public void setVdsGroupId(final Guid value) {
mVdsGroupId = value;
}
protected VDSGroup getVdsGroup() {
if (mVdsGroup == null) {
if (mVdsGroupId != null) {
mVdsGroup = getVdsGroupDAO().get(mVdsGroupId);
} else if (getVds() != null) {
mVdsGroupId = getVds().getvds_group_id();
mVdsGroup = getVdsGroupDAO().get(mVdsGroupId);
} else if (getVm() != null) {
mVdsGroupId = getVm().getvds_group_id();
mVdsGroup = getVdsGroupDAO().get(mVdsGroupId);
}
}
return mVdsGroup;
}
protected VdsGroupDAO getVdsGroupDAO() {
return DbFacade.getInstance().getVdsGroupDAO();
}
protected void setVdsGroup(final VDSGroup value) {
mVdsGroup = value;
}
public String getVdsGroupName() {
if (getVdsGroup() != null) {
return getVdsGroup().getname();
} else {
return "";
}
}
public NGuid getGlusterVolumeId() {
return glusterVolumeId;
}
public void setGlusterVolumeId(NGuid value) {
glusterVolumeId = value;
}
public String getGlusterVolumeName() {
return glusterVolumeName;
}
public void setGlusterVolumeName(String value) {
glusterVolumeName = value;
}
protected void log() {
final Transaction transaction = TransactionSupport.suspend();
try {
try {
AuditLogDirector.log(this);
} catch (final RuntimeException ex) {
log.errorFormat("Error during log command: {0}. Exception {1}", getClass().getName(), ex);
}
} finally {
TransactionSupport.resume(transaction);
}
}
public void DefaultLog() {
}
public void AddCustomValue(final String name, final String value) {
customValues.put(name.toLowerCase(), value);
}
public void AppendCustomValue(final String name, final String value, final String separator) {
final String key = name.toLowerCase();
String newValue = value;
if (customValues.containsKey(key)) {
newValue = String.format("%1$s%2$s%3$s", customValues.get(key), separator, value);
}
customValues.put(name.toLowerCase(), newValue);
}
public java.util.Map<String, String> getCustomValues() {
return customValues;
}
@Override
protected String getKey() {
return getAuditLogTypeValue().toString();
}
public String GetCustomValue(final String name) {
if (customValues.containsKey(name)) {
return customValues.get(name);
} else {
return "";
}
}
private static LogCompat log = LogFactoryCompat.getLog(AuditLogableBase.class);
}