franta-hg@149: package cz.frantovo.nekurak.ejb; franta-hg@149: franta-hg@149: import cz.frantovo.nekurak.chat.MistnostPripojena; franta-hg@149: import cz.frantovo.nekurak.chat.Nastaveni; franta-hg@149: import cz.frantovo.nekurak.chat.Spojeni; franta-hg@149: import cz.frantovo.nekurak.chat.SpravceNastaveni; franta-hg@149: import cz.frantovo.nekurak.chat.UcetRobota; franta-hg@149: import cz.frantovo.nekurak.dto.ZpravaChatu; franta-hg@149: import cz.frantovo.nekurak.vyjimky.NekurakVyjimka; franta-hg@149: import java.util.ArrayList; franta-hg@149: import java.util.Collection; franta-hg@149: import java.util.logging.Level; franta-hg@149: import java.util.logging.Logger; franta-hg@149: import javax.annotation.PostConstruct; franta-hg@149: import javax.annotation.PreDestroy; franta-hg@149: import javax.ejb.Singleton; franta-hg@149: import javax.ejb.Startup; franta-hg@149: import javax.naming.NamingException; franta-hg@149: franta-hg@149: /** franta-hg@149: * franta-hg@149: * @author fiki franta-hg@149: */ franta-hg@149: @Singleton franta-hg@149: @Startup franta-hg@149: public class ChatEJB implements ChatRemote { franta-hg@149: franta-hg@149: private static final Logger log = Logger.getLogger(ChatRemote.class.getSimpleName()); franta-hg@149: private Nastaveni nastaveni; franta-hg@149: private Collection spojeni = new ArrayList(); franta-hg@149: franta-hg@149: @Override franta-hg@149: public void posliZpravu(String mistnost, String prezdivka, String zprava) throws NekurakVyjimka { franta-hg@149: MistnostPripojena mp = najdiMistnost(mistnost); franta-hg@149: if (mp == null) { franta-hg@149: throw new NekurakVyjimka("Místnost s tímto názvem neexistuje", null); franta-hg@149: } else { franta-hg@149: try { franta-hg@149: mp.posliZpravu(new ZpravaChatu(prezdivka, zprava)); franta-hg@149: } catch (Exception e) { franta-hg@149: log.log(Level.SEVERE, "Selhalo odesílání zprávy", e); franta-hg@149: throw new NekurakVyjimka("Zprávu se nepodařilo odeslat.", e); franta-hg@149: } franta-hg@149: } franta-hg@149: } franta-hg@149: franta-hg@149: /** franta-hg@149: * @param mistnost název místnosti včetně zavináče a serveru franta-hg@149: * @param poradoveCislo pořadové číslo poslední zprávy, kterou jsme dostali franta-hg@149: * @return všechny novější zprávy než dané pořadové číslo franta-hg@149: * @throws NekurakVyjimka franta-hg@149: */ franta-hg@149: @Override franta-hg@149: public Collection getZpravy(String mistnost, int poradoveCislo) throws NekurakVyjimka { franta-hg@149: MistnostPripojena mp = najdiMistnost(mistnost); franta-hg@149: if (mp == null) { franta-hg@149: throw new NekurakVyjimka("Místnost s tímto názvem neexistuje", null); franta-hg@149: } else { franta-hg@149: return mp.getZpravy(poradoveCislo); franta-hg@149: } franta-hg@149: } franta-hg@149: franta-hg@149: public ChatEJB() throws NekurakVyjimka { franta-hg@149: /** TODO: vyřešit lépe. */ franta-hg@149: nastaveni = new SpravceNastaveni().getNastaveni(); franta-hg@149: } franta-hg@149: franta-hg@149: @PreDestroy franta-hg@149: public void odpoj() { franta-hg@149: for (Spojeni s : spojeni) { franta-hg@149: s.odpoj(); franta-hg@149: } franta-hg@149: } franta-hg@149: franta-hg@149: @PostConstruct franta-hg@149: public void inicializuj() throws NekurakVyjimka, NamingException { franta-hg@149: pripojXMPP(); franta-hg@149: } franta-hg@149: franta-hg@149: private void pripojXMPP() throws NekurakVyjimka { franta-hg@149: try { franta-hg@149: for (UcetRobota u : nastaveni.getUctyRobota()) { franta-hg@149: Spojeni s = new Spojeni(u); franta-hg@149: spojeni.add(s); franta-hg@149: } franta-hg@149: } catch (Exception e) { franta-hg@149: throw new NekurakVyjimka("Chyba při připojování.", e); franta-hg@149: } franta-hg@149: } franta-hg@149: franta-hg@149: /** franta-hg@149: * @param nazev Název místnosti, kterou hledáme. franta-hg@149: * @return nalezená místnost, nebo null, pokud místnost nebyla nalezena. franta-hg@149: */ franta-hg@149: private MistnostPripojena najdiMistnost(String nazev) { franta-hg@149: for (Spojeni s : spojeni) { franta-hg@149: for (MistnostPripojena mp : s.getMistnosti()) { franta-hg@149: if (mp.porovnejNazev(nazev)) { franta-hg@149: return mp; franta-hg@149: } franta-hg@149: } franta-hg@149: } franta-hg@149: return null; franta-hg@149: } franta-hg@149: }