package com.sap.hana.cloud.samples.benefits.persistence;
import java.util.List;
import javax.persistence.EntityManager;
import javax.persistence.NoResultException;
import javax.persistence.NonUniqueResultException;
import javax.persistence.TypedQuery;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import com.sap.hana.cloud.samples.benefits.persistence.manager.EntityManagerProvider;
import com.sap.hana.cloud.samples.benefits.persistence.model.Campaign;
import com.sap.hana.cloud.samples.benefits.persistence.model.DBQueries;
import com.sap.hana.cloud.samples.benefits.persistence.model.User;
@SuppressWarnings("nls")
public class CampaignDAO extends BasicDAO<Campaign> {
private final Logger logger = LoggerFactory.getLogger(this.getClass());
public CampaignDAO() {
super(EntityManagerProvider.getInstance());
}
public Campaign getByCaseInsensitiveName(String name, User user) {
final EntityManager em = emProvider.get();
try {
final TypedQuery<Campaign> query = em.createNamedQuery(DBQueries.GET_CAMPAIGN_BY_CASE_INSENSITIVE_NAME, Campaign.class);
query.setParameter("name", name);
query.setParameter("owner", user);
return query.getSingleResult();
} catch (NoResultException x) {
logger.warn("Could not retrieve entity {} for userId {} from table {}. Maybe the user doesn't exist yet.", name, user.getUserId(),
"Campaign");
} catch (NonUniqueResultException e) {
throw new IllegalStateException(String.format(
"More than one campaign with name %s for userId %s from table Campaign.", name, user.getUserId())); //$NON-NLS-1$
}
return null;
}
public void delete(long id) {
final EntityManager em = emProvider.get();
final Campaign campaign = em.find(Campaign.class, id);
em.getTransaction().begin();
if (campaign != null) {
campaign.getOwner().getCampaigns().remove(campaign);
em.merge(campaign.getOwner());
em.remove(campaign);
}
em.getTransaction().commit();
}
public Campaign getActiveCampaign(User owner) {
final EntityManager em = emProvider.get();
final TypedQuery<Campaign> query = em.createNamedQuery(DBQueries.GET_ACTIVE_CAMPAIGNS, Campaign.class);
query.setParameter("owner", owner);
List<Campaign> result = query.getResultList();
if (result.size() == 1) {
return result.get(0);
}
return null;
}
}