001    /**
002     * 
003     */
004    package de.jw.cloud42.webapp;
005    
006    
007    import java.util.List;
008    
009    import java.util.logging.Logger;
010    
011    
012    
013    import org.apache.axis2.addressing.EndpointReference;
014    import org.apache.axis2.addressing.EndpointReferenceHelper;
015    import org.hibernate.Query;
016    import org.hibernate.Session;
017    import org.jboss.seam.ScopeType;
018    import org.jboss.seam.annotations.In;
019    import org.jboss.seam.annotations.Name;
020    import org.jboss.seam.annotations.Scope;
021    import org.jboss.seam.annotations.Synchronized;
022    import org.jboss.seam.faces.FacesMessages;
023    
024    
025    import de.jw.cloud42.core.eventing.storage.DefaultSubscriberStore;
026    import de.jw.cloud42.core.eventing.subscription.SOAPSubscription;
027    import de.jw.cloud42.core.eventing.subscriptionProcessor.GenericSubscriptionProcessor;
028    
029    /**
030     * Seam component for handling subscriptions.
031     * Caution: handles only <code>SOAPSubscriptions</code>, 
032     * no generic subscriptions like the Web Service application.
033     * 
034     * @author fbitzer
035     * 
036     */
037    @Name("subscriptionManager")
038    @Scope(ScopeType.SESSION)
039    @Synchronized(timeout=1000000000)
040    public class SubscriptionManager {
041    
042                    
043            /**
044             * Inject faces messages to trigger error and success messages.
045             */
046            @In 
047            FacesMessages facesMessages;
048    
049            /**
050             * injected Hibernate session
051             */
052            @In 
053            Session session;
054            
055            /**
056             * The list of subscriptions.
057             */
058            private List<SOAPSubscription> subscriptionList = null;
059            
060            
061            
062            /**
063             * @return the subscriptionList
064             */
065            public List<SOAPSubscription> getSubscriptionList() {
066                    
067                    //load form DB if list not in cache
068                    if (this.subscriptionList == null){
069                            
070                            session.beginTransaction();
071                            //Note: only real SOAPSubscriptions are loaded!
072                            Query q = session.createQuery("SELECT s FROM SOAPSubscription s");
073                            session.getTransaction().commit();
074                            
075                            subscriptionList = q.list();
076    
077                            
078                    }
079                    
080                    
081                    return subscriptionList;
082                    
083            }
084    
085    
086    
087            /**
088             * Reset subscriptionList and force reload next time it is accessed.
089             */
090            public void resetSubscriptionList(){
091            
092                    this.subscriptionList = null;
093            }
094            
095            
096            /**
097             * Creates a new SOAPSubscription and stores it in database.
098             * 
099             * @param topic
100             * @param endpointAddress
101             */
102            public void subscribe(String topic, String endpointAddress){
103                    
104                    
105                    SOAPSubscription s = new SOAPSubscription();
106                    
107                    s.setTopic(topic);
108                    
109                    try {
110                            s.setId(GenericSubscriptionProcessor.generateId());
111                            
112                            EndpointReference epr =  new EndpointReference(endpointAddress);
113                            
114                            s.setToEndpoint(epr);
115                            
116                    } catch (Exception ex){
117                            Logger.getAnonymousLogger().severe("Error creating a subsription: " + ex.getMessage());
118                    }
119                    
120                    
121                    DefaultSubscriberStore store = new DefaultSubscriberStore();
122                    
123                    store.store(s);
124                    
125                    this.resetSubscriptionList();
126                    
127                    
128            }
129            /**
130             * Remove a subscription identified by its id.
131             * 
132             * @param subscriptionId
133             */
134            public void unsubscribe(String subscriptionId){
135                    DefaultSubscriberStore store = new DefaultSubscriberStore();
136                    
137                    store.delete(subscriptionId);
138                    
139                    this.resetSubscriptionList();
140                    
141            }
142            
143            
144    }