MemberShareService+MemberShareRemote
This commit is contained in:
parent
2c9785af14
commit
87d698f828
@ -0,0 +1,33 @@
|
|||||||
|
package de.hsadmin.dao.customer;
|
||||||
|
|
||||||
|
import javax.persistence.EntityManager;
|
||||||
|
import javax.persistence.PersistenceContext;
|
||||||
|
import javax.persistence.Query;
|
||||||
|
|
||||||
|
import de.hsadmin.bo.customer.MemberShare;
|
||||||
|
import de.hsadmin.common.error.TechnicalException;
|
||||||
|
import de.hsadmin.common.error.UserException;
|
||||||
|
import de.hsadmin.service.customer.MemberShareVO;
|
||||||
|
|
||||||
|
public class MemberShareDao {
|
||||||
|
|
||||||
|
@PersistenceContext(name="hsar")
|
||||||
|
private EntityManager entityManager;
|
||||||
|
|
||||||
|
public MemberShare findMemberShareByValues(MemberShareVO prototype) throws UserException, TechnicalException {
|
||||||
|
// TODO MHOENNIG -> PHORMANNS: warum werden immer alle verglichen? OptimisticLocking?
|
||||||
|
// (p.s. code analog zu Beispielen von dir)
|
||||||
|
final Query query = entityManager.createQuery("SELECT s FROM MemberShare s " +
|
||||||
|
"WHERE s.customer.name = :customer " +
|
||||||
|
" AND m.action = :action " +
|
||||||
|
" AND m.date.name = :date" +
|
||||||
|
" AND m.quantity = :quantity"+
|
||||||
|
" AND m.comment = :comment");
|
||||||
|
query.setParameter("customer", prototype.get("customer").getValue());
|
||||||
|
query.setParameter("action", prototype.get("action").getValue());
|
||||||
|
query.setParameter("date", prototype.get("date").getValue());
|
||||||
|
query.setParameter("quantity", prototype.get("quantity").getValue());
|
||||||
|
query.setParameter("comment", prototype.get("comment").getValue());
|
||||||
|
return (MemberShare) query.getSingleResult();
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,14 @@
|
|||||||
|
package de.hsadmin.service.customer;
|
||||||
|
|
||||||
|
import de.hsadmin.xmlrpc.AbstractRemote;
|
||||||
|
import de.hsadmin.xmlrpc.Remote;
|
||||||
|
|
||||||
|
|
||||||
|
public class MemberShareRemote extends AbstractRemote<MemberShareVO> implements Remote {
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected String getModuleLookup() {
|
||||||
|
return MemberShareServiceLocal.class.getSimpleName();
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
@ -0,0 +1,96 @@
|
|||||||
|
package de.hsadmin.service.customer;
|
||||||
|
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
import javax.ejb.EJB;
|
||||||
|
import javax.ejb.Stateless;
|
||||||
|
import javax.persistence.EntityManager;
|
||||||
|
import javax.persistence.PersistenceContext;
|
||||||
|
|
||||||
|
import org.apache.commons.lang3.NotImplementedException;
|
||||||
|
|
||||||
|
import de.hsadmin.bo.customer.MemberShare;
|
||||||
|
import de.hsadmin.common.error.TechnicalException;
|
||||||
|
import de.hsadmin.common.error.UserException;
|
||||||
|
import de.hsadmin.dao.customer.CustomerDao;
|
||||||
|
import de.hsadmin.dao.customer.MemberShareDao;
|
||||||
|
import de.hsadmin.login.RequestContext;
|
||||||
|
import de.hsadmin.login.RequiredScope;
|
||||||
|
import de.hsadmin.login.Role;
|
||||||
|
import de.hsadmin.login.ScopePolicy;
|
||||||
|
import de.hsadmin.module.impl.AbstractModule;
|
||||||
|
import de.hsadmin.module.util.QueryBuilder;
|
||||||
|
|
||||||
|
@Stateless
|
||||||
|
public class MemberShareService extends AbstractModule<MemberShareVO> implements MemberShareServiceLocal {
|
||||||
|
|
||||||
|
@PersistenceContext(name="hsar")
|
||||||
|
private EntityManager entityManager;
|
||||||
|
|
||||||
|
@EJB
|
||||||
|
private CustomerDao customerDao;
|
||||||
|
|
||||||
|
@EJB
|
||||||
|
private MemberShareDao memberShareDao;
|
||||||
|
|
||||||
|
public MemberShareService() {
|
||||||
|
}
|
||||||
|
|
||||||
|
public MemberShareService(final EntityManager em, final CustomerDao customerDao, final MemberShareDao memberShareDao) {
|
||||||
|
this.entityManager = em;
|
||||||
|
this.customerDao = customerDao;
|
||||||
|
this.memberShareDao = memberShareDao;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public MemberShareVO buildVO() throws TechnicalException {
|
||||||
|
return new MemberShareVO();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
@RequiredScope({@ScopePolicy(Role.SYSTEM)})
|
||||||
|
public MemberShareVO create(final RequestContext requestContext, final MemberShareVO prototype)
|
||||||
|
throws UserException, TechnicalException {
|
||||||
|
final MemberShareVO vo = super.create(requestContext, prototype);
|
||||||
|
final MemberShare bo = new MemberShare();
|
||||||
|
bo.setCustomer(customerDao.findCustomerByName(prototype.getCustomer()));
|
||||||
|
vo.copyPropertiesToPersistentObject(bo);
|
||||||
|
entityManager.persist(bo);
|
||||||
|
final MemberShareVO newVO = new MemberShareVO();
|
||||||
|
newVO.copyPropertiesFromPersistentObject(bo);
|
||||||
|
return newVO;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
@RequiredScope({@ScopePolicy(Role.SYSTEM), @ScopePolicy(value=Role.CUSTOMER, property="customer")})
|
||||||
|
public List<MemberShareVO> read(final RequestContext requestContext, final MemberShareVO criteria)
|
||||||
|
throws UserException, TechnicalException {
|
||||||
|
final List<MemberShareVO> emptyList = super.read(requestContext, criteria);
|
||||||
|
final List<MemberShare> list = runCriteriaQuery(criteria);
|
||||||
|
for (MemberShare c : list) {
|
||||||
|
final MemberShareVO vo = new MemberShareVO();
|
||||||
|
vo.copyPropertiesFromPersistentObject(c);
|
||||||
|
emptyList.add(vo);
|
||||||
|
}
|
||||||
|
return emptyList;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
@RequiredScope({@ScopePolicy(Role.SYSTEM)})
|
||||||
|
public List<MemberShareVO> update(final RequestContext requestContext, final MemberShareVO criteria, final MemberShareVO prototype)
|
||||||
|
throws UserException, TechnicalException {
|
||||||
|
throw new TechnicalException(new NotImplementedException("MemberShares are immuatable"));
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
@RequiredScope({@ScopePolicy(Role.SYSTEM)})
|
||||||
|
public void delete(final RequestContext requestContext, final MemberShareVO criteria)
|
||||||
|
throws UserException, TechnicalException {
|
||||||
|
throw new TechnicalException(new NotImplementedException("MemberShares are immuatable"));
|
||||||
|
}
|
||||||
|
|
||||||
|
// macht diese Klasse Unit-testbar
|
||||||
|
List<MemberShare> runCriteriaQuery(final MemberShareVO criteria) throws UserException, TechnicalException {
|
||||||
|
return QueryBuilder.newBuilder(entityManager, MemberShare.class).getResultList(criteria);
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,10 @@
|
|||||||
|
package de.hsadmin.service.customer;
|
||||||
|
|
||||||
|
import javax.ejb.Local;
|
||||||
|
|
||||||
|
import de.hsadmin.module.Module;
|
||||||
|
|
||||||
|
@Local
|
||||||
|
public interface MemberShareServiceLocal extends Module<MemberShareVO> {
|
||||||
|
|
||||||
|
}
|
@ -1,6 +1,7 @@
|
|||||||
customer=de.hsadmin.service.customer.CustomerRemote
|
customer=de.hsadmin.service.customer.CustomerRemote
|
||||||
contact=de.hsadmin.service.customer.ContactRemote
|
contact=de.hsadmin.service.customer.ContactRemote
|
||||||
mandat=de.hsadmin.service.customer.SEPADirectDebitRemote
|
mandat=de.hsadmin.service.customer.SEPADirectDebitRemote
|
||||||
|
memberShare=de.hsadmin.service.customer.MemberShareRemote
|
||||||
hive=de.hsadmin.service.pac.HiveRemote
|
hive=de.hsadmin.service.pac.HiveRemote
|
||||||
pac=de.hsadmin.service.pac.PacRemote
|
pac=de.hsadmin.service.pac.PacRemote
|
||||||
property=de.hsadmin.service.property.PropertyRemote
|
property=de.hsadmin.service.property.PropertyRemote
|
@ -0,0 +1,15 @@
|
|||||||
|
package de.hsadmin.service.customer;
|
||||||
|
|
||||||
|
import org.junit.Test;
|
||||||
|
|
||||||
|
import de.hsadmin.test.BaseRemoteTest;
|
||||||
|
|
||||||
|
public class MemberShareRemoteTest extends BaseRemoteTest {
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void canInstantiateMemberShareServiceLocalViaRemoteRegistry() throws Exception {
|
||||||
|
givenRegisteredModuleLookupFor(MemberShareServiceLocal.class);
|
||||||
|
whenServiceIsRetrievedFromRemoteRegistryKey("memberShare");
|
||||||
|
thenModuleInstantiatesServiceOfClass(MemberShareService.class);
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,152 @@
|
|||||||
|
package de.hsadmin.service.customer;
|
||||||
|
|
||||||
|
import static org.junit.Assert.assertEquals;
|
||||||
|
|
||||||
|
import java.util.Arrays;
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
import javax.persistence.EntityManager;
|
||||||
|
|
||||||
|
import org.apache.commons.lang3.NotImplementedException;
|
||||||
|
import org.joda.time.LocalDate;
|
||||||
|
import org.junit.Before;
|
||||||
|
import org.junit.Rule;
|
||||||
|
import org.junit.Test;
|
||||||
|
import org.junit.rules.ExpectedException;
|
||||||
|
import org.mockito.Mock;
|
||||||
|
import org.mockito.Mockito;
|
||||||
|
import org.mockito.MockitoAnnotations;
|
||||||
|
|
||||||
|
import de.hsadmin.bo.customer.Customer;
|
||||||
|
import de.hsadmin.bo.customer.MemberShare;
|
||||||
|
import de.hsadmin.bo.customer.ShareAction;
|
||||||
|
import de.hsadmin.common.error.TechnicalException;
|
||||||
|
import de.hsadmin.common.error.UserException;
|
||||||
|
import de.hsadmin.dao.customer.CustomerDao;
|
||||||
|
import de.hsadmin.dao.customer.MemberShareDao;
|
||||||
|
import de.hsadmin.login.RequestContext;
|
||||||
|
import de.hsadmin.login.Role;
|
||||||
|
import de.hsadmin.test.CauseMatcher;
|
||||||
|
|
||||||
|
public class MemberShareServiceTest {
|
||||||
|
|
||||||
|
@Mock
|
||||||
|
private RequestContext requestContextMock;
|
||||||
|
|
||||||
|
@Mock
|
||||||
|
private EntityManager emMock;
|
||||||
|
|
||||||
|
@Mock
|
||||||
|
private CustomerDao customerDaoMock;
|
||||||
|
|
||||||
|
@Mock
|
||||||
|
private MemberShareDao memberShareDao;
|
||||||
|
|
||||||
|
@Rule
|
||||||
|
public ExpectedException expectedExeption = ExpectedException.none();
|
||||||
|
|
||||||
|
private MemberShareService memberShareService;
|
||||||
|
|
||||||
|
protected List<MemberShare> memberSharesCriteriaQueryResult;
|
||||||
|
|
||||||
|
@Before
|
||||||
|
public void init() {
|
||||||
|
MockitoAnnotations.initMocks(this);
|
||||||
|
memberShareService = new MemberShareService(emMock, customerDaoMock, memberShareDao) {
|
||||||
|
@Override
|
||||||
|
List<MemberShare> runCriteriaQuery(MemberShareVO criteria) throws UserException, TechnicalException {
|
||||||
|
return memberSharesCriteriaQueryResult;
|
||||||
|
}
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void buildVO() throws TechnicalException {
|
||||||
|
MemberShareVO newVO = memberShareService.buildVO();
|
||||||
|
assertEquals(new MemberShareVO().toString(), newVO.toString());
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void create() throws TechnicalException, UserException {
|
||||||
|
// given
|
||||||
|
givenLoginRole(Role.SYSTEM);
|
||||||
|
MemberShareVO prototypeVO = MemberShareVOTest.givenInitializedMemberShareVOForCustomer(givenFakeCustomerWithName("testCust").getName());
|
||||||
|
|
||||||
|
// when
|
||||||
|
MemberShareVO createdVO = memberShareService.create(requestContextMock, prototypeVO);
|
||||||
|
|
||||||
|
// then
|
||||||
|
assertEquals(prototypeVO.toString(), createdVO.toString());
|
||||||
|
Mockito.verify(emMock, Mockito.only()).persist(Mockito.any(MemberShare.class));
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void read() throws TechnicalException, UserException {
|
||||||
|
// given
|
||||||
|
givenLoginRole(Role.SYSTEM);
|
||||||
|
Customer fakeCustomer = givenFakeCustomerWithName("testCust");
|
||||||
|
MemberShareVO prototypeVO = MemberShareVOTest.givenEmptyMemberShareVOForCustomer(fakeCustomer.getName());
|
||||||
|
MemberShare memberShare1 = givenFakeMemberShare(fakeCustomer, ShareAction.SUBSCRIPTION, 4 );
|
||||||
|
MemberShare memberShare2 = givenFakeMemberShare(fakeCustomer, ShareAction.UNSUBSCRIPTION, 2 );
|
||||||
|
givenCriteriaQueryResult(prototypeVO, memberShare1, memberShare2);
|
||||||
|
|
||||||
|
// when
|
||||||
|
List<MemberShareVO> readVOs = memberShareService.read(requestContextMock, prototypeVO);
|
||||||
|
|
||||||
|
// then
|
||||||
|
assertEquals(2, readVOs.size());
|
||||||
|
assertEquals("MemberShareVO [customer=testCust, action=SUBSCRIPTION, date=Fri Apr 14 00:00:00 CEST 2017, quantity=4, comment=some comment]", readVOs.get(0).toString());
|
||||||
|
assertEquals("MemberShareVO [customer=testCust, action=UNSUBSCRIPTION, date=Fri Apr 14 00:00:00 CEST 2017, quantity=2, comment=some comment]", readVOs.get(1).toString());
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void update() throws TechnicalException, UserException {
|
||||||
|
MemberShareVO prototypeVO = MemberShareVOTest.givenInitializedMemberShareVOForCustomer("testCust");
|
||||||
|
|
||||||
|
// then
|
||||||
|
expectedExeption.expect(TechnicalException.class);
|
||||||
|
expectedExeption.expectCause(new CauseMatcher(NotImplementedException.class, "MemberShares are immuatable"));
|
||||||
|
|
||||||
|
// when
|
||||||
|
memberShareService.update(requestContextMock, prototypeVO, prototypeVO);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void delete() throws TechnicalException, UserException {
|
||||||
|
MemberShareVO prototypeVO = MemberShareVOTest.givenInitializedMemberShareVOForCustomer("testCust");
|
||||||
|
|
||||||
|
// then
|
||||||
|
expectedExeption.expect(TechnicalException.class);
|
||||||
|
expectedExeption.expectCause(new CauseMatcher(NotImplementedException.class, "MemberShares are immuatable"));
|
||||||
|
|
||||||
|
// when
|
||||||
|
memberShareService.delete(requestContextMock, prototypeVO);
|
||||||
|
}
|
||||||
|
|
||||||
|
// === test fixture ===
|
||||||
|
|
||||||
|
private void givenLoginRole(Role role) {
|
||||||
|
Mockito.when(requestContextMock.getLoginRole()).thenReturn(role);
|
||||||
|
}
|
||||||
|
|
||||||
|
private Customer givenFakeCustomerWithName(String name) throws UserException {
|
||||||
|
Customer fakeCustomer = new Customer();
|
||||||
|
fakeCustomer.setName(name);
|
||||||
|
Mockito.when(customerDaoMock.findCustomerByName(name)).thenReturn(fakeCustomer);
|
||||||
|
return fakeCustomer;
|
||||||
|
}
|
||||||
|
|
||||||
|
private MemberShare givenFakeMemberShare(Customer customer, ShareAction action, int quantity) {
|
||||||
|
MemberShare share = new MemberShare();
|
||||||
|
share.setCustomer(customer);
|
||||||
|
share.setAction(action);
|
||||||
|
share.setQuantity(quantity);
|
||||||
|
share.setDate(new LocalDate(2017, 4, 14).toDate());
|
||||||
|
share.setComment("some comment");
|
||||||
|
return share;
|
||||||
|
}
|
||||||
|
|
||||||
|
private void givenCriteriaQueryResult(MemberShareVO prototypeVO, MemberShare... memberShare) {
|
||||||
|
memberSharesCriteriaQueryResult = Arrays.asList(memberShare);
|
||||||
|
}
|
||||||
|
}
|
Loading…
Reference in New Issue
Block a user