/* * Copyright 2016 Function1. All Rights Reserved. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package tools.gsf.config; import com.fatwire.assetapi.data.AssetDataManager; import com.fatwire.assetapi.site.SiteManager; import com.fatwire.system.Session; import com.fatwire.system.SessionFactory; import COM.FutureTense.Interfaces.ICS; import tools.gsf.config.inject.AnnotationInjector; import tools.gsf.config.inject.BindInjector; import tools.gsf.config.inject.CurrentAssetInjector; import tools.gsf.config.inject.InjectForRequestInjector; import tools.gsf.config.inject.Injector; import tools.gsf.config.inject.MappingInjector; import tools.gsf.facade.assetapi.AssetAccessTemplate; import tools.gsf.facade.assetapi.asset.ScatteredAssetAccessTemplate; import tools.gsf.facade.assetapi.asset.TemplateAsset; import tools.gsf.facade.assetapi.asset.TemplateAssetAccess; import tools.gsf.mapping.IcsMappingService; import tools.gsf.mapping.MappingService; import tools.gsf.time.Stopwatch; import tools.gsf.properties.AssetApiPropertyDao; import tools.gsf.properties.PropertyDao; import tools.gsf.facade.mda.DefaultLocaleService; import tools.gsf.facade.mda.LocaleService; /** * @author Tony Field * @since 2016-08-05 */ public class IcsBackedFactory extends AbstractDelegatingFactory<ICS> { private final ICS ics; @ServiceProducer(cache = true, name="ics") public ICS getICS() { return this.ics; } public IcsBackedFactory(ICS ics, Factory delegate) { super(ics, delegate); this.ics = ics; } @ServiceProducer(cache = true, name="bindInjector") public Injector createBindInjector() { return new BindInjector(ics); } @ServiceProducer(cache = true, name="injectForRequestInjector") public Injector createInjectForRequestInjector() { Factory factory = FactoryLocator.locateFactory(ics); return new InjectForRequestInjector(factory); } @ServiceProducer(cache = true) public MappingService createMappingService() { AssetAccessTemplate aat = getObject("assetAccessTemplate", AssetAccessTemplate.class); return new IcsMappingService(ics, aat); } @ServiceProducer(cache = true, name="mappingInjector") public Injector createMappingInjector(final ICS ics) { MappingService mappingService = getObject("mappingService", MappingService.class); return new MappingInjector(ics, mappingService); } @ServiceProducer(cache = true, name="currentAssetInjector") public Injector createCurrentAssetInjector(final ICS ics) { AssetAccessTemplate aat = getObject("assetAccessTemplate", AssetAccessTemplate.class); TemplateAssetAccess taa = getObject("templateAssetAccess", TemplateAssetAccess.class); ScatteredAssetAccessTemplate saa = getObject("scatteredAssetAccessTemplate", ScatteredAssetAccessTemplate.class); return new CurrentAssetInjector(ics, taa, saa, aat); } @ServiceProducer(cache = true, name="compositeInjector") public Injector createCompositeInjector() { Injector bind = getObject("bindInjector", Injector.class); Injector map = getObject("mappingInjector", Injector.class); Injector ifr = getObject("injectForRequestInjector", Injector.class); Injector currentAsset = getObject("currentAssetInjector", Injector.class); Stopwatch stopwatch = getObject("stopwatch", Stopwatch.class); return new AnnotationInjector(stopwatch, bind, map, ifr, currentAsset); } @ServiceProducer(cache = true) public PropertyDao createPropertyDao(final ICS ics) { Session session = SessionFactory.getSession(ics); AssetDataManager adm = (AssetDataManager) session.getManager(AssetDataManager.class.getName()); SiteManager sm = (SiteManager) session.getManager(SiteManager.class.getName()); String type = "GSTProperty"; String flexDefName = "GSTProperty"; String propNameAttr = "name"; String propDescAttr = "description"; String propValueAttr = "value"; return new AssetApiPropertyDao(adm, sm, type, flexDefName, propNameAttr, propDescAttr, propValueAttr, ics); } @ServiceProducer(cache = true) public AssetAccessTemplate createAssetAccessTemplate() { return new AssetAccessTemplate(this.ics); } @ServiceProducer(cache = true) public ScatteredAssetAccessTemplate createScatteredAssetAccessTemplate() { return new ScatteredAssetAccessTemplate(this.ics); } @ServiceProducer(cache = true) public TemplateAssetAccess createTemplateAssetAccess() { return new TemplateAssetAccess(this.ics); } @ServiceProducer(cache = true) public LocaleService createLocaleService(final ICS ics) { return new DefaultLocaleService(ics); } }