package fi.otavanopisto.muikku.plugins.schooldatapyramus.rest; import javax.enterprise.context.ContextNotActiveException; import javax.enterprise.context.RequestScoped; import javax.enterprise.context.SessionScoped; import javax.enterprise.inject.Instance; import javax.enterprise.inject.Produces; import javax.enterprise.inject.spi.BeanManager; import javax.inject.Inject; import fi.otavanopisto.muikku.plugins.schooldatapyramus.rest.qualifier.PyramusSystem; import fi.otavanopisto.muikku.plugins.schooldatapyramus.rest.qualifier.PyramusUser; import fi.otavanopisto.muikku.schooldata.SchoolDataBridgeSessionController; public class PyramusClientProducer { @Inject @PyramusUser private Instance<UserPyramusClient> userPyramusClient; @Inject @PyramusSystem private Instance<SystemPyramusClient> systemPyramusClient; @Inject private Instance<SchoolDataBridgeSessionController> schoolDataBridgeSessionController; @Inject private BeanManager beanManager; @Produces public PyramusClient producePyramusClient() { if (isSessionActive()) { if (isRequestActive() && schoolDataBridgeSessionController.get().isSystemSessionActive()) { return systemPyramusClient.get(); } else { return userPyramusClient.get(); } } else { return systemPyramusClient.get(); } } private boolean isSessionActive() { try { return beanManager.getContext(SessionScoped.class).isActive(); } catch (ContextNotActiveException ex) { return false; } } private boolean isRequestActive() { try { return beanManager.getContext(RequestScoped.class).isActive(); } catch (ContextNotActiveException ex) { return false; } } }