Skip to content
Snippets Groups Projects
Commit b3846ef2 authored by Julian Horner's avatar Julian Horner
Browse files

Implement exercise 7.11.1

parent dfec470c
No related branches found
No related tags found
No related merge requests found
...@@ -26,6 +26,11 @@ ...@@ -26,6 +26,11 @@
<artifactId>primefaces</artifactId> <artifactId>primefaces</artifactId>
<version>8.0</version> <version>8.0</version>
</dependency> </dependency>
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-core</artifactId>
<version>5.4.18.Final</version>
</dependency>
</dependencies> </dependencies>
<build> <build>
......
...@@ -32,7 +32,8 @@ import javax.validation.constraints.Size; ...@@ -32,7 +32,8 @@ import javax.validation.constraints.Size;
@NamedQuery(name = Campaign.findAll, @NamedQuery(name = Campaign.findAll,
query = "SELECT c FROM Campaign c ORDER BY c.name"), query = "SELECT c FROM Campaign c ORDER BY c.name"),
@NamedQuery(name = Campaign.getAmountDonatedSoFar, @NamedQuery(name = Campaign.getAmountDonatedSoFar,
query = "SELECT SUM(d.amount) FROM Donation d WHERE d.campaign = :campaign") }) query = "SELECT SUM(d.amount) FROM Donation d WHERE d.campaign = :campaign")
})
@Entity @Entity
public class Campaign { public class Campaign {
//---------------------------------------------------------------------------------------------- //----------------------------------------------------------------------------------------------
......
/*
* Copyright 2019 (C) by Julian Horner.
* All Rights Reserved.
*/
package de.dpunkt.myaktion.model;
/**
* @author Julian
*
*/
public class DateEntity {
}
...@@ -11,6 +11,7 @@ import java.util.logging.Level; ...@@ -11,6 +11,7 @@ import java.util.logging.Level;
import java.util.logging.Logger; import java.util.logging.Logger;
import javax.ejb.Stateless; import javax.ejb.Stateless;
import javax.enterprise.inject.Alternative;
import javax.inject.Inject; import javax.inject.Inject;
import javax.persistence.EntityManager; import javax.persistence.EntityManager;
import javax.persistence.TypedQuery; import javax.persistence.TypedQuery;
...@@ -22,6 +23,7 @@ import de.dpunkt.myaktion.util.Log.TecLog; ...@@ -22,6 +23,7 @@ import de.dpunkt.myaktion.util.Log.TecLog;
* @author Julian * @author Julian
*/ */
@Stateless @Stateless
@Alternative
public class CampaignServiceBean implements CampaignService { public class CampaignServiceBean implements CampaignService {
//---------------------------------------------------------------------------------------------- //----------------------------------------------------------------------------------------------
......
/*
* Copyright 2019 (C) by Julian Horner.
* All Rights Reserved.
*/
package de.dpunkt.myaktion.services;
import java.math.BigDecimal;
import java.util.List;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.ejb.Stateless;
import javax.enterprise.inject.Alternative;
import javax.inject.Inject;
import javax.persistence.EntityManager;
import javax.persistence.TypedQuery;
import javax.persistence.criteria.CriteriaBuilder;
import javax.persistence.criteria.CriteriaQuery;
import javax.persistence.criteria.ParameterExpression;
import javax.persistence.criteria.Root;
import de.dpunkt.myaktion.model.Campaign;
import de.dpunkt.myaktion.model.Donation;
import de.dpunkt.myaktion.util.Log.TecLog;
/**
* @author Julian
*/
@Stateless
@Alternative
public class CriteriaCampaignServiceBean implements CampaignService {
//----------------------------------------------------------------------------------------------
@Inject
@TecLog
private Logger logger;
@Inject
EntityManager entityManager;
//----------------------------------------------------------------------------------------------
@Override
public List<Campaign> getAllCampaigns() {
CriteriaBuilder cb = entityManager.getCriteriaBuilder();
CriteriaQuery<Campaign> criteriaQuery = cb.createQuery(Campaign.class);
Root<Campaign> campaignRoot = criteriaQuery.from(Campaign.class);
criteriaQuery.select(campaignRoot).orderBy(cb.asc(campaignRoot.get("name")));
TypedQuery<Campaign> query = entityManager.createQuery(criteriaQuery);
List<Campaign> campaigns = query.getResultList();
// campaigns.forEach(campaign ->
// campaign.setAmountDonatedSoFar(new BigDecimal(getAmountDonatedSoFar(campaign))));
for (Campaign campaign : campaigns) {
campaign.setAmountDonatedSoFar(new BigDecimal(getAmountDonatedSoFar(campaign)));
}
logger.log(Level.INFO, "Loaded all campaign entities with criteria query");
return campaigns;
}
//----------------------------------------------------------------------------------------------
@Override
public void addCampaign(Campaign campaign) {
entityManager.persist(campaign);
}
//----------------------------------------------------------------------------------------------
@Override
public void updateCampaign(Campaign campaign) {
entityManager.merge(campaign);
}
//----------------------------------------------------------------------------------------------
@Override
public void deleteCampaign(Campaign campaign) {
Campaign managedCampaign = entityManager.find(Campaign.class, campaign.getId());
entityManager.remove(managedCampaign);
}
//----------------------------------------------------------------------------------------------
private Double getAmountDonatedSoFar(Campaign campaign) {
CriteriaBuilder criteriaBuilder = entityManager.getCriteriaBuilder();
CriteriaQuery<Double> criteriaQuery = criteriaBuilder.createQuery(Double.class);
Root<Donation> donation = criteriaQuery.from(Donation.class);
ParameterExpression<Campaign> campaignParameter = criteriaBuilder.parameter(Campaign.class);
criteriaQuery.select(criteriaBuilder.sumAsDouble(donation.get("amount")))
.where(criteriaBuilder.equal(donation.get("campaign"), campaignParameter));
TypedQuery<Double> query = entityManager.createQuery(criteriaQuery);
query.setParameter(campaignParameter, campaign);
Double result = query.getSingleResult();
if (result == null)
result = 0d;
return result;
}
//----------------------------------------------------------------------------------------------
}
\ No newline at end of file
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment