View Javadoc

1   /*
2    * Copyright 2011 FatWire Corporation. All Rights Reserved.
3    *
4    * Licensed under the Apache License, Version 2.0 (the "License");
5    * you may not use this file except in compliance with the License.
6    * You may obtain a copy of the License at
7    *
8    *    http://www.apache.org/licenses/LICENSE-2.0
9    *
10   * Unless required by applicable law or agreed to in writing, software
11   * distributed under the License is distributed on an "AS IS" BASIS,
12   * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13   * See the License for the specific language governing permissions and
14   * limitations under the License.
15   */
16  
17  package com.fatwire.gst.foundation.controller.action.support;
18  
19  import java.util.Date;
20  
21  import COM.FutureTense.Interfaces.ICS;
22  
23  import com.fatwire.gst.foundation.controller.action.Factory;
24  import com.fatwire.gst.foundation.controller.action.Model;
25  import com.fatwire.gst.foundation.controller.annotation.ServiceProducer;
26  import com.fatwire.gst.foundation.facade.assetapi.AssetAccessTemplate;
27  import com.fatwire.gst.foundation.facade.assetapi.asset.PreviewContext;
28  import com.fatwire.gst.foundation.facade.assetapi.asset.ScatteredAssetAccessTemplate;
29  import com.fatwire.gst.foundation.facade.assetapi.asset.TemplateAssetAccess;
30  import com.fatwire.gst.foundation.facade.mda.DefaultLocaleService;
31  import com.fatwire.gst.foundation.facade.mda.LocaleService;
32  import com.fatwire.gst.foundation.facade.search.SimpleSearchEngine;
33  import com.fatwire.gst.foundation.include.DefaultIncludeService;
34  import com.fatwire.gst.foundation.include.IncludeService;
35  import com.fatwire.gst.foundation.mapping.IcsMappingService;
36  import com.fatwire.gst.foundation.mapping.MappingService;
37  import com.fatwire.gst.foundation.navigation.NavigationService;
38  import com.fatwire.gst.foundation.navigation.support.SimpleNavigationHelper;
39  import com.fatwire.gst.foundation.properties.AssetApiPropertyDao;
40  import com.fatwire.gst.foundation.properties.PropertyDao;
41  import com.fatwire.gst.foundation.url.WraPathTranslationService;
42  import com.fatwire.gst.foundation.url.db.DbSimpleWRADao;
43  import com.fatwire.gst.foundation.url.db.UrlRegistry2;
44  import com.fatwire.gst.foundation.url.db.UrlRegistryDao;
45  import com.fatwire.gst.foundation.url.db.UrlRegistryDaoImpl;
46  import com.fatwire.gst.foundation.vwebroot.VirtualWebrootApiBypassDao;
47  import com.fatwire.gst.foundation.vwebroot.VirtualWebrootDao;
48  import com.fatwire.gst.foundation.wra.AliasCoreFieldDao;
49  import com.fatwire.gst.foundation.wra.AssetApiAliasCoreFieldDao;
50  import com.fatwire.gst.foundation.wra.AssetApiWraCoreFieldDao;
51  import com.fatwire.gst.foundation.wra.SimpleWRADao;
52  import com.fatwire.gst.foundation.wra.WraCoreFieldDao;
53  import com.fatwire.gst.foundation.wra.navigation.WraNavigationService;
54  import com.fatwire.mda.DimensionFilterInstance;
55  
56  /**
57   * Factory implementation that works with a method naming convention to create
58   * objects. Objects are created in a delegated factory method. The delegated
59   * method is found by looking for a method that is prefixed by 'create' and then
60   * the the simple name of the class (classname without package prefix).
61   * <p>
62   * For instance to create a object of class 'com.bar.Foo' if will look for a
63   * method <tt>public Foo createFoo(ICS ics);</tt>. The method has to be public
64   * and has to accept one argument of type ICS.
65   * </p>
66   * 
67   * 
68   * @author Dolf.Dijkstra
69   * @since Apr 20, 2011
70   * 
71   */
72  public class IcsBackedObjectFactoryTemplate extends BaseFactory {
73      /**
74       * Constructor.
75       * 
76       * @param ics the Content Server context
77       */
78      public IcsBackedObjectFactoryTemplate(final ICS ics) {
79          super(ics);
80      }
81  
82      /**
83       * @param ics
84       * @param roots
85       */
86      public IcsBackedObjectFactoryTemplate(ICS ics, Factory... roots) {
87          super(ics, roots);
88      }
89  
90      @ServiceProducer(cache = true)
91      public WraCoreFieldDao createWraCoreFieldDao(final ICS ics) {
92          return AssetApiWraCoreFieldDao.getInstance(ics);
93      }
94  
95      @ServiceProducer(cache = true)
96      public AliasCoreFieldDao createAliasCoreFieldDao(final ICS ics) {
97          final WraCoreFieldDao wraCoreFieldDao = getObject("wraCoreFieldDao", WraCoreFieldDao.class);
98          return new AssetApiAliasCoreFieldDao(ics, wraCoreFieldDao);
99      }
100 
101     @ServiceProducer(cache = true)
102     public PropertyDao createPropertyDao(final ICS ics) {
103         return AssetApiPropertyDao.newInstance(ics);
104     }
105 
106     @ServiceProducer(cache = true)
107     public WraPathTranslationService createWraPathTranslationService(final ICS ics) {
108         final SimpleWRADao wraDao = new DbSimpleWRADao(ics);
109         final VirtualWebrootDao vwDao = new VirtualWebrootApiBypassDao(ics);
110         final UrlRegistryDao regDao = new UrlRegistryDaoImpl(ics);
111         final UrlRegistry2 x = new UrlRegistry2(ics, wraDao, vwDao, regDao);
112         return x;
113     }
114 
115     @ServiceProducer(cache = true)
116     public IncludeService createIncludeService(final ICS ics) {
117         return new DefaultIncludeService(ics);
118     }
119 
120     @ServiceProducer(cache = true)
121     public ScatteredAssetAccessTemplate createScatteredAssetAccessTemplate(final ICS ics) {
122         return new ScatteredAssetAccessTemplate(ics);
123     }
124 
125     @ServiceProducer(cache = true)
126     public AssetAccessTemplate createAssetAccessTemplate(final ICS ics) {
127         return new AssetAccessTemplate(ics);
128     }
129 
130     @ServiceProducer(cache = true)
131     public MappingService createMappingService(final ICS ics) {
132         return new IcsMappingService(ics);
133     }
134 
135     @ServiceProducer(cache = true)
136     public LocaleService createLocaleService(final ICS ics) {
137         return new DefaultLocaleService(ics);
138     }
139 
140     @ServiceProducer(cache = true)
141     public TemplateAssetAccess createTemplateAssetAccess(final ICS ics) {
142         return new TemplateAssetAccess(ics);
143     }
144 
145     @ServiceProducer(cache = false)
146     public Model createModel(final ICS ics) {
147         return new Model();
148     }
149 
150     @ServiceProducer(cache = true)
151     public SimpleSearchEngine createSimpleSearchEngine(final ICS ics) {
152         return new SimpleSearchEngine("lucene");
153     }
154 
155     @ServiceProducer(cache = false)
156     public NavigationService createNavigationService(final ICS ics) {
157         // TODO: check if unnamed association is a valid association for a Page
158         // assettype and create NavigationService based on that.
159 
160         boolean wraNavigationSupport = true;
161         TemplateAssetAccess taa = getObject("templateAssetAccess", TemplateAssetAccess.class);
162         // TODO come up with a generalized Strategy for per-site dispatching
163         if ("avisports".equalsIgnoreCase(ics.GetVar("site"))) {
164             return new SimpleNavigationHelper(ics, taa, "title", "path");
165         } else if (wraNavigationSupport) {
166             // BE AWARE that the NavigationService is cached per request and
167             // that the DimensionFilter is also reused per all the
168             // NavigationService calls per request.
169             // Depending on the outcome of the getDimensionFilter this may or
170             // may not what you want.
171             LocaleService ls = this.getObject("localeService", LocaleService.class);
172             String site = ics.GetVar("site");
173             DimensionFilterInstance filter = ls.getDimensionFilter(site);
174             if (filter == null && LOG.isTraceEnabled()) {
175                 LOG.trace("No DimensionFilterInstance returned from getDimensionFilter(). Disabling Locale support for NavigationService.");
176             }
177 
178             AliasCoreFieldDao aliasDao = getObject("aliasCoreFieldDao", AliasCoreFieldDao.class);
179             Date date = PreviewContext.getPreviewDateFromCSVar(ics, "previewDate");
180             return new WraNavigationService(ics, taa, aliasDao, filter, date);
181         } else {
182             return new SimpleNavigationHelper(ics, taa, "linktext", "path");
183 
184         }
185     }
186 
187 }