001    /**
002     * Copyright (C) 2009-2011 the original author or authors.
003     * See the notice.md file distributed with this work for additional
004     * information regarding copyright ownership.
005     *
006     * Licensed under the Apache License, Version 2.0 (the "License");
007     * you may not use this file except in compliance with the License.
008     * You may obtain a copy of the License at
009     *
010     *     http://www.apache.org/licenses/LICENSE-2.0
011     *
012     * Unless required by applicable law or agreed to in writing, software
013     * distributed under the License is distributed on an "AS IS" BASIS,
014     * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
015     * See the License for the specific language governing permissions and
016     * limitations under the License.
017     */
018    
019    package org.fusesource.restygwt.example.client.dispatcher;
020    
021    import org.fusesource.restygwt.client.cache.DefaultQueueableCacheStorage;
022    import org.fusesource.restygwt.client.cache.QueueableCacheStorage;
023    import org.fusesource.restygwt.client.cache.VolatileQueueableCacheStorage;
024    import org.fusesource.restygwt.client.callback.CachingCallbackFilter;
025    import org.fusesource.restygwt.client.callback.CallbackFactory;
026    import org.fusesource.restygwt.client.callback.CallbackFilter;
027    import org.fusesource.restygwt.client.callback.DefaultCallbackFactory;
028    import org.fusesource.restygwt.client.callback.RestfulCachingCallbackFilter;
029    import org.fusesource.restygwt.client.callback.RetryingCallbackFactory;
030    import org.fusesource.restygwt.client.callback.XSRFToken;
031    import org.fusesource.restygwt.client.callback.XSRFTokenCallbackFilter;
032    import org.fusesource.restygwt.client.dispatcher.CachingDispatcherFilter;
033    import org.fusesource.restygwt.client.dispatcher.DefaultDispatcherFilter;
034    import org.fusesource.restygwt.client.dispatcher.DefaultFilterawareDispatcher;
035    import org.fusesource.restygwt.client.dispatcher.DispatcherFilter;
036    import org.fusesource.restygwt.client.dispatcher.FilterawareDispatcher;
037    import org.fusesource.restygwt.client.dispatcher.RestfulCachingDispatcherFilter;
038    import org.fusesource.restygwt.client.dispatcher.XSRFTokenDispatcherFilter;
039    
040    /**
041     * this factory can be used to create a Dispatcher which can be used as dispatcher Option on
042     * the RestService interface.<br />
043     * <code><pre>
044     * public class RestfulRetryingDispatcherSingleton implements Dispatcher{
045     *
046     *   public static Dispatcher INSTANCE = new DispatcherFactory().restfulCachingDispatcher();
047     *
048     *   // do not allow concrete instances of this class
049     *   private RestfulRetryingDispatcherSingleton(){
050     *     throw new Error("never called");
051     *   }
052     *
053     *   public Request send(Method method, RequestBuilder builder) throws RequestException {
054     *     return null;   // dummy
055     *   }
056     * }
057     * </pre></code>
058     *
059     * @author kristian
060     *
061     */
062    public class DispatcherFactory {
063    
064        public static final XSRFToken xsrf = new XSRFToken();
065    
066        public FilterawareDispatcher xsrfProtectionDispatcher(){
067            DispatcherFilter xsrfDispatcherFilter = new XSRFTokenDispatcherFilter(xsrf);
068    
069            CallbackFilter xsrfCallbackFilter = new XSRFTokenCallbackFilter(xsrf);
070            CallbackFactory callbackFactory = new DefaultCallbackFactory(xsrfCallbackFilter);
071            DispatcherFilter defaultDispatcherFilter = new DefaultDispatcherFilter(callbackFactory);
072    
073            FilterawareDispatcher dispatcher = new DefaultFilterawareDispatcher(xsrfDispatcherFilter, defaultDispatcherFilter);
074    
075            return dispatcher;
076        }
077    
078        public FilterawareDispatcher cachingDispatcher(){
079            QueueableCacheStorage cache = new DefaultQueueableCacheStorage();
080    
081            CallbackFilter cachingCallbackFilter = new CachingCallbackFilter(cache);
082            CallbackFactory callbackFactory = new DefaultCallbackFactory(cachingCallbackFilter);
083            DispatcherFilter cachingDispatcherFilter = new CachingDispatcherFilter(cache,callbackFactory);
084    
085            FilterawareDispatcher dispatcher = new DefaultFilterawareDispatcher(cachingDispatcherFilter);
086    
087            return dispatcher;
088        }
089    
090        public FilterawareDispatcher cachingXSRFProtectionDispatcher(){
091            DispatcherFilter xsrfDispatcherFilter = new XSRFTokenDispatcherFilter(xsrf);
092    
093            CallbackFilter xsrfCallbackFilter = new XSRFTokenCallbackFilter(xsrf);
094    
095            QueueableCacheStorage cache = new DefaultQueueableCacheStorage();
096    
097            CallbackFilter cachingCallbackFilter = new CachingCallbackFilter(cache);
098            CallbackFactory callbackFactory = new DefaultCallbackFactory(xsrfCallbackFilter, cachingCallbackFilter);
099            DispatcherFilter cachingDispatcherFilter = new CachingDispatcherFilter(cache, callbackFactory);
100    
101            FilterawareDispatcher dispatcher = new DefaultFilterawareDispatcher(xsrfDispatcherFilter, cachingDispatcherFilter);
102    
103            return dispatcher;
104        }
105    
106        public FilterawareDispatcher retryingDispatcher(){
107            QueueableCacheStorage cache = new VolatileQueueableCacheStorage();
108    
109            CallbackFilter cachingCallbackFilter = new CachingCallbackFilter(cache);
110            CallbackFactory callbackFactory = new RetryingCallbackFactory(cachingCallbackFilter);
111            DispatcherFilter cachingDispatcherFilter = new CachingDispatcherFilter(cache, callbackFactory);
112    
113            FilterawareDispatcher dispatcher = new DefaultFilterawareDispatcher(cachingDispatcherFilter);
114    
115            return dispatcher;
116        }
117    
118        public FilterawareDispatcher retryingCachingDispatcher(){
119            QueueableCacheStorage cache = new DefaultQueueableCacheStorage();
120    
121            CallbackFilter cachingCallbackFilter = new CachingCallbackFilter(cache);
122            CallbackFactory callbackFactory = new RetryingCallbackFactory(cachingCallbackFilter);
123            DispatcherFilter cachingDispatcherFilter = new CachingDispatcherFilter(cache, callbackFactory);
124    
125            FilterawareDispatcher dispatcher = new DefaultFilterawareDispatcher(cachingDispatcherFilter);
126    
127            return dispatcher;
128        }
129    
130        public FilterawareDispatcher retryingCachingXSRFProtectionDispatcher(){
131            DispatcherFilter xsrfDispatcherFilter = new XSRFTokenDispatcherFilter(xsrf);
132    
133            CallbackFilter xsrfCallbackFilter = new XSRFTokenCallbackFilter(xsrf);
134    
135            QueueableCacheStorage cache = new DefaultQueueableCacheStorage();
136    
137            CallbackFilter cachingCallbackFilter = new CachingCallbackFilter(cache);
138            CallbackFactory callbackFactory = new RetryingCallbackFactory(xsrfCallbackFilter, cachingCallbackFilter);
139            DispatcherFilter cachingDispatcherFilter = new CachingDispatcherFilter(cache, callbackFactory);
140    
141            FilterawareDispatcher dispatcher = new DefaultFilterawareDispatcher(xsrfDispatcherFilter, cachingDispatcherFilter);
142    
143            return dispatcher;
144        }
145    
146        public FilterawareDispatcher restfulCachingDispatcher(){
147            QueueableCacheStorage cache = new DefaultQueueableCacheStorage();
148    
149            CallbackFilter cachingCallbackFilter = new RestfulCachingCallbackFilter(cache);
150            CallbackFactory callbackFactory = new DefaultCallbackFactory(cachingCallbackFilter);
151            DispatcherFilter cachingDispatcherFilter = new RestfulCachingDispatcherFilter(cache, callbackFactory);
152    
153            FilterawareDispatcher dispatcher = new DefaultFilterawareDispatcher(cachingDispatcherFilter);
154    
155            return dispatcher;
156        }
157    
158        public FilterawareDispatcher restfulCachingXSRFProtectionDispatcher(){
159            DispatcherFilter xsrfDispatcherFilter = new XSRFTokenDispatcherFilter(xsrf);
160    
161            CallbackFilter xsrfCallbackFilter = new XSRFTokenCallbackFilter(xsrf);
162    
163            QueueableCacheStorage cache = new DefaultQueueableCacheStorage();
164    
165            CallbackFilter cachingCallbackFilter = new RestfulCachingCallbackFilter(cache);
166            CallbackFactory callbackFactory = new DefaultCallbackFactory(xsrfCallbackFilter, cachingCallbackFilter);
167            DispatcherFilter cachingDispatcherFilter = new RestfulCachingDispatcherFilter(cache, callbackFactory);
168    
169            FilterawareDispatcher dispatcher = new DefaultFilterawareDispatcher(xsrfDispatcherFilter, cachingDispatcherFilter);
170    
171            return dispatcher;
172        }
173    
174        public FilterawareDispatcher restfulRetryingCachingDispatcher(){
175            QueueableCacheStorage cache = new DefaultQueueableCacheStorage();
176    
177            CallbackFilter cachingCallbackFilter = new RestfulCachingCallbackFilter(cache);
178            CallbackFactory callbackFactory = new RetryingCallbackFactory(cachingCallbackFilter);
179            DispatcherFilter cachingDispatcherFilter = new RestfulCachingDispatcherFilter(cache, callbackFactory);
180    
181            FilterawareDispatcher dispatcher = new DefaultFilterawareDispatcher(cachingDispatcherFilter);
182    
183            return dispatcher;
184        }
185    
186        public FilterawareDispatcher restfulRetryingCachingXSRFProtectionDispatcher(){
187            DispatcherFilter xsrfDispatcherFilter = new XSRFTokenDispatcherFilter(xsrf);
188    
189            CallbackFilter xsrfCallbackFilter = new XSRFTokenCallbackFilter(xsrf);
190    
191            QueueableCacheStorage cache = new DefaultQueueableCacheStorage();
192    
193            CallbackFilter cachingCallbackFilter = new RestfulCachingCallbackFilter(cache);
194            CallbackFactory callbackFactory = new RetryingCallbackFactory(xsrfCallbackFilter, cachingCallbackFilter);
195            DispatcherFilter cachingDispatcherFilter = new RestfulCachingDispatcherFilter(cache, callbackFactory);
196    
197            FilterawareDispatcher dispatcher = new DefaultFilterawareDispatcher(xsrfDispatcherFilter, cachingDispatcherFilter);
198    
199            return dispatcher;
200        }
201    
202    }