/*
* Copyright (C) 2014 Intel Corporation
* All rights reserved.
*/
package com.intel.mtwilson.tpm.endorsement.repository;
import com.intel.mtwilson.My;
import com.intel.mtwilson.jaxrs2.server.resource.DocumentRepository;
import com.intel.mtwilson.repository.RepositoryCreateConflictException;
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.tpm.endorsement.model.TpmEndorsement;
import com.intel.mtwilson.tpm.endorsement.model.TpmEndorsementCollection;
import com.intel.mtwilson.tpm.endorsement.model.TpmEndorsementFilterCriteria;
import com.intel.mtwilson.tpm.endorsement.model.TpmEndorsementLocator;
import com.intel.mtwilson.tpm.endorsement.jdbi.TpmEndorsementDAO;
import com.intel.mtwilson.tpm.endorsement.jdbi.TpmEndorsementJdbiFactory;
import java.io.IOException;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.HashSet;
import java.util.List;
import org.apache.shiro.authz.annotation.RequiresPermissions;
/**
*
* @author jbuhacoff
*/
public class TpmEndorsementRepository implements DocumentRepository<TpmEndorsement, TpmEndorsementCollection, TpmEndorsementFilterCriteria, TpmEndorsementLocator> {
private static final org.slf4j.Logger log = org.slf4j.LoggerFactory.getLogger(TpmEndorsementRepository.class);
@Override
@RequiresPermissions("tpm_endorsements:search")
public TpmEndorsementCollection search(TpmEndorsementFilterCriteria criteria) {
TpmEndorsementCollection objCollection = new TpmEndorsementCollection();
log.debug("TpmEndorsementRepository search");
try (TpmEndorsementDAO dao = TpmEndorsementJdbiFactory.tpmEndorsementDAO()) {
List<TpmEndorsement> result = new ArrayList<>();
if (criteria.filter) {
// id search
if (criteria.id != null) {
String[] ids = criteria.id.split("\\s*,\\s*");
log.debug("TpmEndorsementRepository search ids: {}", (Object[]) ids);
HashSet<String> set = new HashSet<>(Arrays.asList(ids));
List<TpmEndorsement> tpmEndorsementRecords = dao.findTpmEndorsementByIds(set);
if (tpmEndorsementRecords != null) {
result.addAll(tpmEndorsementRecords);
}
} else if (criteria.hardwareUuidEqualTo != null) {
TpmEndorsement tpmEndorsementRecord = dao.findTpmEndorsementByHardwareUuidEqualTo(criteria.hardwareUuidEqualTo);
if (tpmEndorsementRecord != null) {
result.add(tpmEndorsementRecord);
}
} else if (criteria.revokedEqualTo != null) {
List<TpmEndorsement> tpmEndorsementRecords = dao.findTpmEndorsementByRevokedEqualTo(criteria.revokedEqualTo.booleanValue());
if (tpmEndorsementRecords != null) {
result.addAll(tpmEndorsementRecords);
}
} else if (criteria.issuerEqualTo != null) {
TpmEndorsement tpmEndorsementRecord = dao.findTpmEndorsementByIssuerEqualTo(criteria.issuerEqualTo);
if (tpmEndorsementRecord != null) {
result.add(tpmEndorsementRecord);
}
} else if (criteria.issuerContains != null) {
List<TpmEndorsement> tpmEndorsementRecords = dao.findTpmEndorsementByIssuerContains(criteria.issuerContains);
if (tpmEndorsementRecords != null) {
result.addAll(tpmEndorsementRecords);
}
} else if (criteria.commentEqualTo != null) {
TpmEndorsement tpmEndorsementRecord = dao.findTpmEndorsementByCommentEqualTo(criteria.commentEqualTo);
if (tpmEndorsementRecord != null) {
result.add(tpmEndorsementRecord);
}
} else if (criteria.commentContains != null) {
List<TpmEndorsement> tpmEndorsementRecords = dao.findTpmEndorsementByCommentContains(criteria.commentContains);
if (tpmEndorsementRecords != null) {
result.addAll(tpmEndorsementRecords);
}
}
} else {
// no filter, get all records
List<TpmEndorsement> tpmEndorsementRecords = dao.findAllTpmEndorsement();
if (tpmEndorsementRecords != null) {
result.addAll(tpmEndorsementRecords);
}
}
objCollection.getTpmEndorsements().addAll(result);
} catch (IOException ex) {
log.error("TpmEndorsement:Search - Error during TpmEndorsement search.", ex);
throw new RepositorySearchException(ex, criteria);
}
log.debug("TpmEndorsement:Search - Returning back {} of results.", objCollection.getTpmEndorsements().size());
return objCollection;
}
/*
TblHostsJpaController jpaController = My.jpa().mwHosts();
// when searching for a private tpmEndorsement, the tpmEndorsement name is the host uuid
if (criteria.privateEqualTo != null && criteria.privateEqualTo.booleanValue() && criteria.nameEqualTo != null) {
TblHosts obj = jpaController.findHostByUuid(criteria.nameEqualTo.toString());
if (obj != null) {
objCollection.getTpmEndorsements().add(convert(obj));
}
}
*
*/
@Override
@RequiresPermissions("tpm_endorsements:retrieve")
public TpmEndorsement retrieve(TpmEndorsementLocator locator) {
if (locator.id == null) {
return null;
}
log.debug("TpmEndorsementRepository retrieve id {}", locator.id);
try (TpmEndorsementDAO dao = TpmEndorsementJdbiFactory.tpmEndorsementDAO()) {
TpmEndorsement tpmEndorsementRecord = dao.findTpmEndorsementById(locator.id);
return tpmEndorsementRecord;
} catch (IOException ex) {
log.error("TpmEndorsement:Retrieve - Error during TpmEndorsement retrieval.", ex);
throw new RepositoryRetrieveException(ex, locator);
}
}
@Override
@RequiresPermissions("tpm_endorsements:store")
public void store(TpmEndorsement item) {
log.debug("TpmEndorsementRepository store id {}", item.getId().toString());
if (item.getId() == null) {
return;
}
TpmEndorsementLocator locator = new TpmEndorsementLocator();
locator.id = item.getId();
try (TpmEndorsementDAO dao = TpmEndorsementJdbiFactory.tpmEndorsementDAO()) {
dao.updateTpmEndorsement(item);
} catch (IOException ex) {
log.error("TpmEndorsementRepository store error: {}", ex.getMessage());
throw new RepositoryStoreException(ex, locator);
}
}
/*
try {
TblHostsJpaController jpaController = My.jpa().mwHosts();
TblHosts obj = jpaController.findHostByUuid(item.getHostUuid());
if (obj != null) {
obj.setTpmEndorsementName(item.getName());
// obj.setTlsKeystore(item.getKeyStore());
jpaController.edit(obj);
}
} catch (ASException aex) {
throw aex;
} catch (Exception ex) {
log.error("Error during update of host Tls Policy.", ex);
throw new ASException(ErrorCode.AS_UPDATE_HOST_ERROR, ex.getClass().getSimpleName());
*/
@Override
@RequiresPermissions("tpm_endorsements:create")
public void create(TpmEndorsement item) {
log.debug("TpmEndorsementRepository create");
if (item.getId() == null) {
return;
}
TpmEndorsementLocator locator = new TpmEndorsementLocator();
locator.id = item.getId();
try (TpmEndorsementDAO dao = TpmEndorsementJdbiFactory.tpmEndorsementDAO()) {
if ((dao.findTpmEndorsementById(item.getId()) != null) || (dao.findTpmEndorsementByHardwareUuidEqualTo(item.getHardwareUuid()) != null)) {
log.error("TpmEndorsementRepository create - TpmEndorsement {} will not be created since a duplicate TpmEndorsement already exists.", item.getId().toString());
throw new RepositoryCreateConflictException(locator);
}
dao.insertTpmEndorsement(item);
} catch (IOException ex) {
log.error("TpmEndorsementRepository create error during TpmEndorsement creation.", ex);
throw new RepositoryCreateException(ex, locator);
}
}
@Override
@RequiresPermissions("tpm_endorsements:delete")
public void delete(TpmEndorsementLocator locator) {
if (locator.id == null) {
return;
}
log.debug("TpmEndorsementRepository delete id {}.", locator.id.toString());
try (TpmEndorsementDAO dao = TpmEndorsementJdbiFactory.tpmEndorsementDAO()) {
dao.deleteTpmEndorsementById(locator.id);
} catch (IOException ex) {
log.error("TpmEndorsement:Delete - Error during TpmEndorsement deletion.", ex);
throw new RepositoryDeleteException(ex, locator);
}
}
@Override
@RequiresPermissions("tpm_endorsements:delete,search")
public void delete(TpmEndorsementFilterCriteria criteria) {
log.debug("TpmEndorsementRepository delete by search criteria");
try {
TpmEndorsementCollection result = search(criteria);
for (TpmEndorsement hostTpmEndorsement : result.getTpmEndorsements()) {
TpmEndorsementLocator locator = new TpmEndorsementLocator();
locator.id = hostTpmEndorsement.getId();
delete(locator);
}
} catch (RepositoryException re) {
throw re;
} catch (Exception ex) {
log.error("TpmEndorsement:Delete - Error during TpmEndorsement deletion.", ex);
throw new RepositoryDeleteException(ex);
}
}
}