package org.fluxtream.core.services.impl; import org.fluxtream.core.domain.oauth2.Application; import org.fluxtream.core.services.PartnerAppsService; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import javax.persistence.EntityManager; import javax.persistence.PersistenceContext; import javax.persistence.TypedQuery; import java.util.List; /** * User: candide * Date: 16/04/14 * Time: 10:04 */ @Service @Transactional(readOnly=true) public class PartnerAppsServiceImpl implements PartnerAppsService { @PersistenceContext EntityManager em; @Override @Transactional(readOnly=false) public void createApplication(final long guestId, String organization, final String name, final String description, final String website) { Application app = new Application(guestId, organization, name, description, website); em.persist(app); } @Override @Transactional(readOnly=false) public void deleteApplication(final long guestId, final String uid) { final Application app = getApplication(guestId, uid); if (app!=null) em.remove(app); } @Override public List<Application> getApplications(final long guestId) { final TypedQuery<Application> query = em.createQuery("SELECT app FROM Application app WHERE app.guestId=?", Application.class); query.setParameter(1, guestId); return query.getResultList(); } @Override public Application getApplication(long guestId, String uid) { final TypedQuery<Application> query = em.createQuery("SELECT app FROM Application app WHERE app.uid=?", Application.class); query.setParameter(1, uid); if (query.getResultList().size()>0) { final Application app = query.getResultList().get(0); if (app.guestId!=guestId) throw new RuntimeException("Could not delete app: guestIds don't match"); return app; } return null; } @Override public Application getApplication(String appSecret) { final TypedQuery<Application> query = em.createQuery("SELECT app FROM Application app WHERE app.sharedSecret=?", Application.class); query.setParameter(1, appSecret); if (query.getResultList().size()>0) { final Application app = query.getResultList().get(0); return app; } return null; } @Override @Transactional(readOnly=false) public void updateApplication(final long guestId, final String organization, final String uid, final String name, final String description, final String website) { final Application app = getApplication(guestId, uid); if (app!=null) { app.name = name; app.organization = organization; app.description = description; app.website = website; em.persist(app); } } }