package org.dddlib.organisation.application.impl; import org.dayatang.domain.Entity; import org.dayatang.domain.EntityRepository; import org.dddlib.organisation.application.OrganisationApplication; import org.dddlib.organisation.domain.OrgLineMgmt; import org.dddlib.organisation.domain.Organization; import org.dddlib.organisation.domain.Party; import org.dddlib.organisation.domain.Post; import javax.inject.Inject; import java.util.Date; public class OrganisationApplicationImpl implements OrganisationApplication { @Inject private EntityRepository repository; public OrganisationApplicationImpl(EntityRepository repository) { this.repository = repository; } @Override public <T extends Entity> T getEntity(Class<T> entityClass, Long entityId) { return repository.get(entityClass, entityId); } @Override public void createOrganization(Organization orgToCreate, Organization parent, Date date) { orgToCreate.setCreateDate(date); orgToCreate.save(); new OrgLineMgmt(parent, orgToCreate, date).save(); } @Override public void terminateParty(Party party, Date date) { party.terminate(date); } @Override public void changeParentOfOrganization(Organization organization, Organization newParent, Date date) { OrgLineMgmt.getByResponsible(organization, date).terminate(date); new OrgLineMgmt(newParent, organization, date).save(); } @Override public void createPostUnderOrganization(Post post, Organization organization, Date date) { post.setOrganization(organization); post.setCreateDate(date); post.save(); } }