/*
* To change this template, choose Tools | Templates
* and open the template in the editor.
*/
package com.intel.mtwilson.as.rest.v2.repository;
import com.intel.dcsg.cpg.io.UUID;
import com.intel.mtwilson.My;
import com.intel.mtwilson.as.controller.TblModuleManifestJpaController;
import com.intel.mtwilson.as.data.TblModuleManifest;
import com.intel.mtwilson.as.rest.v2.model.MleModule;
import com.intel.mtwilson.as.rest.v2.model.MleModuleCollection;
import com.intel.mtwilson.as.rest.v2.model.MleModuleFilterCriteria;
import com.intel.mtwilson.as.rest.v2.model.MleModuleLocator;
import com.intel.mtwilson.datatypes.ModuleWhiteList;
import com.intel.mtwilson.jaxrs2.server.resource.DocumentRepository;
import com.intel.mtwilson.repository.RepositoryCreateException;
import com.intel.mtwilson.repository.RepositoryDeleteException;
import com.intel.mtwilson.repository.RepositoryException;
import com.intel.mtwilson.repository.RepositoryRetrieveException;
import com.intel.mtwilson.repository.RepositorySearchException;
import com.intel.mtwilson.repository.RepositoryStoreException;
import com.intel.mtwilson.wlm.business.MleBO;
import java.util.List;
import org.apache.shiro.authz.annotation.RequiresPermissions;
/**
*
* @author ssbangal
*/
public class MleModuleRepository implements DocumentRepository<MleModule, MleModuleCollection, MleModuleFilterCriteria, MleModuleLocator> {
private static final org.slf4j.Logger log = org.slf4j.LoggerFactory.getLogger(MleModuleRepository.class);
@Override
@RequiresPermissions("mle_modules:search")
public MleModuleCollection search(MleModuleFilterCriteria criteria) {
log.debug("MleModule:Search - Got request to search for the Mle modules.");
MleModuleCollection objCollection = new MleModuleCollection();
try {
TblModuleManifestJpaController jpaController = My.jpa().mwModuleManifest();
if (criteria.mleUuid != null) {
List<TblModuleManifest> objList = jpaController.findTblModuleManifestByMleUuid(criteria.mleUuid.toString());
if (objList != null && !objList.isEmpty()) {
// Before we add to the collection we need to check if the user has specified any other search criteria
if (criteria.filter == false) {
for(TblModuleManifest obj : objList) {
objCollection.getMleModules().add(convert(obj));
}
} else if (criteria.id != null) {
for(TblModuleManifest obj : objList) {
if (obj.getUuid_hex().contains(criteria.id.toString()))
objCollection.getMleModules().add(convert(obj));
}
} else if (criteria.nameContains != null && !criteria.nameContains.isEmpty()) {
for(TblModuleManifest obj : objList) {
if (obj.getComponentName().contains(criteria.nameContains))
objCollection.getMleModules().add(convert(obj));
}
} else if (criteria.valueEqualTo != null && !criteria.valueEqualTo.isEmpty()) {
for(TblModuleManifest obj : objList) {
if (obj.getDigestValue().equalsIgnoreCase(criteria.valueEqualTo))
objCollection.getMleModules().add(convert(obj));
}
}
}
}
} catch (Exception ex) {
log.error("MleModule:Search - Error during Module whitelist search.", ex);
throw new RepositorySearchException(ex, criteria);
}
log.debug("MleModule:Search - Returning back {} of results.", objCollection.getMleModules().size());
return objCollection;
}
@Override
@RequiresPermissions("mle_modules:retrieve")
public MleModule retrieve(MleModuleLocator locator) {
if( locator.id == null ) { return null; }
log.debug("MleModule:Retrieve - Got request to retrieve Mle Module with id {}.", locator.id);
try {
TblModuleManifestJpaController jpaController = My.jpa().mwModuleManifest();
TblModuleManifest obj = jpaController.findTblModuleManifestByUuid(locator.id.toString());
if (obj != null) {
MleModule convObj = convert(obj);
return convObj;
}
} catch (Exception ex) {
log.error("MleModule:Retrieve - Error during Module whitelist retrieval.", ex);
throw new RepositoryRetrieveException(ex, locator);
}
return null;
}
@Override
@RequiresPermissions("mle_modules:store")
public void store(MleModule item) {
log.debug("MleModule:Store - Got request to update Mle module with id {}.", item.getId().toString());
MleModuleLocator locator = new MleModuleLocator();
locator.mleUuid = UUID.valueOf(item.getMleUuid());
locator.id = item.getId();
ModuleWhiteList obj = new ModuleWhiteList();
try {
obj.setDigestValue(item.getModuleValue());
obj.setDescription(item.getDescription());
new MleBO().updateModuleWhiteList(obj, null, item.getId().toString());
log.debug("MleModule:Store - Updated the MleModule with id {} successfully.", item.getId().toString());
} catch (Exception ex) {
log.error("MleModule:Store - Error during module whitelist update.", ex);
throw new RepositoryStoreException(ex, locator);
}
}
@Override
@RequiresPermissions("mle_modules:create")
public void create(MleModule item) {
log.debug("MleModule:Create - Got request to create a new Mle module.");
MleModuleLocator locator = new MleModuleLocator();
locator.mleUuid = UUID.valueOf(item.getMleUuid());
locator.id = item.getId();
ModuleWhiteList obj = new ModuleWhiteList();
try {
obj.setComponentName(item.getModuleName());
obj.setDigestValue(item.getModuleValue());
obj.setDescription(item.getDescription());
obj.setEventName(item.getEventName());
obj.setExtendedToPCR(item.getExtendedToPCR());
obj.setPackageName(item.getPackageName());
obj.setPackageVendor(item.getPackageVendor());
obj.setPackageVersion(item.getPackageVersion());
obj.setUseHostSpecificDigest(item.getUseHostSpecificDigest());
new MleBO().addModuleWhiteList(obj, null, item.getId().toString(), item.getMleUuid());
log.debug("MleModule:Create - Created the MleModule {} successfully.", item.getModuleName());
} catch (Exception ex) {
log.error("MleModule:Create - Error during MleModule creation.", ex);
throw new RepositoryCreateException(ex, locator);
}
}
@Override
@RequiresPermissions("mle_modules:delete")
public void delete(MleModuleLocator locator) {
if (locator.id == null) { return; }
log.debug("MleModule:Delete - Got request to delete Mle Module with id {}.", locator.id.toString());
try {
new MleBO().deleteModuleWhiteList(null, null, null, null, null, null, null, locator.id.toString());
log.debug("MleModule:Delete - Deleted the MleModule with id {} successfully.", locator.id.toString());
} catch (Exception ex) {
log.error("MleModule:Delete - Error during module whitelist deletion.", ex);
throw new RepositoryDeleteException(ex, locator);
}
}
private MleModule convert(TblModuleManifest obj) {
MleModule convObj = new MleModule();
convObj.setId(UUID.valueOf(obj.getUuid_hex()));
convObj.setMleUuid(obj.getUuid_hex());
convObj.setModuleName(obj.getComponentName());
convObj.setDescription(obj.getDescription());
convObj.setModuleValue(obj.getDigestValue());
convObj.setEventName(obj.getEventID().getName());
convObj.setExtendedToPCR(obj.getExtendedToPCR());
convObj.setPackageName(obj.getPackageName());
convObj.setPackageVendor(obj.getPackageVendor());
convObj.setPackageVersion(obj.getPackageVersion());
return convObj;
}
@Override
@RequiresPermissions("mle_modules:delete,search")
public void delete(MleModuleFilterCriteria criteria) {
log.debug("MleModule:Delete - Got request to delete MleModule by search criteria.");
MleModuleCollection objCollection = search(criteria);
try {
for (MleModule obj : objCollection.getMleModules()) {
MleModuleLocator locator = new MleModuleLocator();
locator.id = obj.getId();
delete(locator);
}
} catch (RepositoryException re) {
throw re;
} catch (Exception ex) {
log.error("MleModule:Delete - Error during module whitelist deletion.", ex);
throw new RepositoryDeleteException(ex);
}
}
}