/*
* 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.TblOemJpaController;
import com.intel.mtwilson.as.data.TblOem;
import com.intel.mtwilson.as.rest.v2.model.Oem;
import com.intel.mtwilson.as.rest.v2.model.OemCollection;
import com.intel.mtwilson.as.rest.v2.model.OemFilterCriteria;
import com.intel.mtwilson.as.rest.v2.model.OemLocator;
import com.intel.mtwilson.datatypes.OemData;
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.RepositoryInvalidInputException;
import com.intel.mtwilson.repository.RepositoryRetrieveException;
import com.intel.mtwilson.repository.RepositorySearchException;
import com.intel.mtwilson.repository.RepositoryStoreException;
import com.intel.mtwilson.wlm.business.OemBO;
import java.util.List;
import org.apache.shiro.authz.annotation.RequiresPermissions;
/**
*
* @author ssbangal
*/
public class OemRepository implements DocumentRepository<Oem, OemCollection, OemFilterCriteria, OemLocator>{
private static final org.slf4j.Logger log = org.slf4j.LoggerFactory.getLogger(OemRepository.class);
@Override
@RequiresPermissions("oems:search")
public OemCollection search(OemFilterCriteria criteria) {
log.debug("Oem:Search - Oem:Got request to search for the Oems.");
OemCollection oemCollection = new OemCollection();
try {
TblOemJpaController oemJpaController = My.jpa().mwOem();
if (criteria.filter == false) {
List<TblOem> oemList = oemJpaController.findTblOemEntities();
if (oemList != null && !oemList.isEmpty()) {
for(TblOem tblOemObj : oemList) {
oemCollection.getOems().add(convert(tblOemObj));
}
}
} else if (criteria.id != null) {
TblOem tblOem = oemJpaController.findTblOemByUUID(criteria.id.toString());
if( tblOem != null ) {
oemCollection.getOems().add(convert(tblOem));
}
} else if (criteria.nameEqualTo != null && !criteria.nameEqualTo.isEmpty()) {
// re-arranged slightly to look more like the nameContains case below
TblOem tblOem = oemJpaController.findTblOemByName(criteria.nameEqualTo);
if( tblOem != null ) {
oemCollection.getOems().add(convert(tblOem));
}
} else if (criteria.nameContains != null && !criteria.nameContains.isEmpty()) {
List<TblOem> oemList = oemJpaController.findTblOemByNameLike(criteria.nameContains);
if (oemList != null && !oemList.isEmpty()) {
for(TblOem tblOemObj : oemList) {
oemCollection.getOems().add(convert(tblOemObj));
}
}
}
} catch (Exception ex) {
log.error("Oem:Search - Error during OEM search.", ex);
throw new RepositorySearchException(ex, criteria);
}
log.debug("Oem:Search - Returning back {} of results.", oemCollection.getOems().size());
return oemCollection;
}
@Override
@RequiresPermissions("oems:retrieve")
public Oem retrieve(OemLocator locator) {
if( locator == null || locator.id == null ) { return null; }
log.debug("Oem:Retrieve - Got request to retrieve Oem with id {}.", locator.id);
String id = locator.id.toString();
try {
TblOemJpaController oemJpaController = My.jpa().mwOem();
TblOem tblOem = oemJpaController.findTblOemByUUID(id);
if (tblOem != null) {
Oem oem = convert(tblOem);
return oem;
}
} catch (Exception ex) {
log.error("Oem:Retrieve - Error during OEM retrieval.", ex);
throw new RepositoryRetrieveException(ex, locator);
}
return null;
}
@Override
@RequiresPermissions("oems:store")
public void store(Oem item) {
if (item == null || item.getId() == null) { throw new RepositoryInvalidInputException();}
log.debug("Oem:Store - Got request to update Oem with id {}.", item.getId().toString());
OemLocator locator = new OemLocator();
locator.id = item.getId();
OemData obj = new OemData();
try {
obj.setDescription(item.getDescription());
new OemBO().updateOem(obj, item.getId().toString());
log.debug("Oem:Store - Updated the Oem with id {} successfully.", item.getId().toString());
} catch (Exception ex) {
log.error("Oem:Store - Error during Oem update.", ex);
throw new RepositoryStoreException(ex, locator);
}
}
@Override
@RequiresPermissions("oems:create")
public void create(Oem item) {
log.debug("Oem:Create - Got request to create a new Oem.");
OemLocator locator = new OemLocator();
locator.id = item.getId();
OemData obj = new OemData();
try {
obj.setName(item.getName());
obj.setDescription(item.getDescription());
new OemBO().createOem(obj, item.getId().toString());
log.debug("Oem:Create - Created the Oem {} successfully.", item.getName());
} catch (Exception ex) {
log.error("Oem:Create - Error during role creation.", ex);
throw new RepositoryCreateException(ex, locator);
}
}
@Override
@RequiresPermissions("oems:delete")
public void delete(OemLocator locator) {
if( locator == null || locator.id == null ) { return; }
log.debug("Oem:Delete - Got request to delete Oem with id {}.", locator.id.toString());
String id = locator.id.toString();
try {
new OemBO().deleteOem(null, id);
log.debug("Oem:Delete - Deleted the Oem with id {} successfully.", locator.id.toString());
} catch (Exception ex) {
log.error("Oem:Delete - Error during Oem deletion.", ex);
throw new RepositoryDeleteException(ex, locator);
}
}
// passing null to this method would be a programming error and NullPointerException is appropriate
// calling code should check for null before calling
private Oem convert(TblOem tblOemObj) {
Oem oem = new Oem();
oem.setId(UUID.valueOf(tblOemObj.getUuid_hex()));
oem.setName(tblOemObj.getName());
oem.setDescription(tblOemObj.getDescription());
return oem;
}
@Override
@RequiresPermissions("oems:delete,search")
public void delete(OemFilterCriteria criteria) {
log.debug("Oem:Delete - Got request to delete Oem by search criteria.");
OemCollection objCollection = search(criteria);
try {
for (Oem obj : objCollection.getOems()) {
OemLocator locator = new OemLocator();
locator.id = obj.getId();
delete(locator);
}
} catch (RepositoryException re) {
throw re;
} catch (Exception ex) {
log.error("Oem:Delete - Error during Oem deletion.", ex);
throw new RepositoryDeleteException(ex);
}
}
}