/*
*
* This is a simple Content Management System (CMS)
* Copyright (C) 2010 Imran M Yousuf (imyousuf@smartitengineering.com)
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
package com.smartitengineering.cms.binder.guice;
import com.google.inject.AbstractModule;
import com.google.inject.Singleton;
import com.google.inject.multibindings.MapBinder;
import com.google.inject.name.Names;
import com.smartitengineering.cms.api.common.TemplateType;
import com.smartitengineering.cms.api.factory.content.ContentLoader;
import com.smartitengineering.cms.api.factory.event.EventRegistrar;
import com.smartitengineering.cms.api.factory.type.ContentTypeLoader;
import com.smartitengineering.cms.api.factory.workspace.WorkspaceAPI;
import com.smartitengineering.cms.api.impl.workspace.WorkspaceAPIImpl;
import com.smartitengineering.cms.api.impl.content.ContentLoaderImpl;
import com.smartitengineering.cms.api.impl.event.EventRegistrarImpl;
import com.smartitengineering.cms.api.impl.type.ContentTypeLoaderImpl;
import com.smartitengineering.cms.api.type.ValidatorType;
import com.smartitengineering.cms.spi.content.template.ContentCoProcessorGenerator;
import com.smartitengineering.cms.spi.content.template.TypeFieldValidator;
import com.smartitengineering.cms.spi.content.template.TypeRepresentationGenerator;
import com.smartitengineering.cms.spi.content.template.TypeVariationGenerator;
import com.smartitengineering.cms.spi.impl.content.template.GroovyContentCoProcessorGenerator;
import com.smartitengineering.cms.spi.impl.content.template.GroovyRepresentationGenerator;
import com.smartitengineering.cms.spi.impl.content.template.GroovyValidatorGenerator;
import com.smartitengineering.cms.spi.impl.content.template.GroovyVariationGenerator;
import com.smartitengineering.cms.spi.impl.content.template.JasperRepresentationGenerator;
import com.smartitengineering.cms.spi.impl.content.template.JasperVariationGenerator;
import com.smartitengineering.cms.spi.impl.content.template.JavascriptContentCoProcessorGenerator;
import com.smartitengineering.cms.spi.impl.content.template.JavascriptRepresentationGenerator;
import com.smartitengineering.cms.spi.impl.content.template.JavascriptValidatorGenerator;
import com.smartitengineering.cms.spi.impl.content.template.JavascriptVariationGenerator;
import com.smartitengineering.cms.spi.impl.content.template.PythonContentCoProcessorGenerator;
import com.smartitengineering.cms.spi.impl.content.template.PythonRepresentationGenerator;
import com.smartitengineering.cms.spi.impl.content.template.PythonValidatorGenerator;
import com.smartitengineering.cms.spi.impl.content.template.PythonVariationGenerator;
import com.smartitengineering.cms.spi.impl.content.template.RubyContentCoProcessorGenerator;
import com.smartitengineering.cms.spi.impl.content.template.RubyRepresentationGenerator;
import com.smartitengineering.cms.spi.impl.content.template.RubyValidatorGenerator;
import com.smartitengineering.cms.spi.impl.content.template.RubyVariationGenerator;
import com.smartitengineering.cms.spi.impl.content.template.VelocityRepresentationGenerator;
import com.smartitengineering.cms.spi.impl.content.template.VelocityVariationGenerator;
import java.util.Properties;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
public class APIModule extends AbstractModule {
private final Properties properties;
private final Logger logger = LoggerFactory.getLogger(getClass());
public APIModule(Properties properties) {
if (properties != null) {
this.properties = properties;
}
else {
this.properties = new Properties();
}
}
@Override
protected void configure() {
bind(ContentTypeLoader.class).annotatedWith(Names.named("apiContentTypeLoader")).to(ContentTypeLoaderImpl.class);
bind(ContentLoader.class).annotatedWith(Names.named("apiContentLoader")).to(ContentLoaderImpl.class);
bind(WorkspaceAPI.class).annotatedWith(Names.named("apiWorkspaceApi")).to(WorkspaceAPIImpl.class);
bind(EventRegistrar.class).annotatedWith(Names.named("apiEventRegistrar")).to(EventRegistrarImpl.class);
final String globalNamespace = properties.getProperty("com.smartitengineering.cms.globalNamespace");
if (logger.isDebugEnabled()) {
logger.debug(new StringBuilder("Global Namespace ").append(globalNamespace).toString());
}
bind(String.class).annotatedWith(Names.named("globalNamespace")).toInstance(globalNamespace);
MapBinder<TemplateType, ContentCoProcessorGenerator> ccpGenBinder =
MapBinder.newMapBinder(binder(), TemplateType.class,
ContentCoProcessorGenerator.class);
ccpGenBinder.addBinding(TemplateType.RUBY).to(RubyContentCoProcessorGenerator.class).in(Singleton.class);
ccpGenBinder.addBinding(TemplateType.GROOVY).to(GroovyContentCoProcessorGenerator.class).in(Singleton.class);
ccpGenBinder.addBinding(TemplateType.JAVASCRIPT).to(JavascriptContentCoProcessorGenerator.class).in(Singleton.class);
ccpGenBinder.addBinding(TemplateType.PYTHON).to(PythonContentCoProcessorGenerator.class).in(Singleton.class);
MapBinder<TemplateType, TypeRepresentationGenerator> typeGenBinder =
MapBinder.newMapBinder(binder(), TemplateType.class,
TypeRepresentationGenerator.class);
typeGenBinder.addBinding(TemplateType.RUBY).to(RubyRepresentationGenerator.class);
typeGenBinder.addBinding(TemplateType.GROOVY).to(GroovyRepresentationGenerator.class);
typeGenBinder.addBinding(TemplateType.JAVASCRIPT).to(JavascriptRepresentationGenerator.class);
typeGenBinder.addBinding(TemplateType.VELOCITY).to(VelocityRepresentationGenerator.class);
typeGenBinder.addBinding(TemplateType.PYTHON).to(PythonRepresentationGenerator.class);
typeGenBinder.addBinding(TemplateType.JASPER).to(JasperRepresentationGenerator.class);
MapBinder<TemplateType, TypeVariationGenerator> typeVarGenBinder =
MapBinder.newMapBinder(binder(), TemplateType.class,
TypeVariationGenerator.class);
typeVarGenBinder.addBinding(TemplateType.RUBY).to(RubyVariationGenerator.class);
typeVarGenBinder.addBinding(TemplateType.GROOVY).to(GroovyVariationGenerator.class);
typeVarGenBinder.addBinding(TemplateType.JAVASCRIPT).to(JavascriptVariationGenerator.class);
typeVarGenBinder.addBinding(TemplateType.VELOCITY).to(VelocityVariationGenerator.class);
typeVarGenBinder.addBinding(TemplateType.PYTHON).to(PythonVariationGenerator.class);
typeVarGenBinder.addBinding(TemplateType.JASPER).to(JasperVariationGenerator.class);
MapBinder<ValidatorType, TypeFieldValidator> typeFieldValBinder =
MapBinder.newMapBinder(binder(), ValidatorType.class,
TypeFieldValidator.class);
typeFieldValBinder.addBinding(ValidatorType.RUBY).to(RubyValidatorGenerator.class);
typeFieldValBinder.addBinding(ValidatorType.GROOVY).to(GroovyValidatorGenerator.class);
typeFieldValBinder.addBinding(ValidatorType.JAVASCRIPT).to(JavascriptValidatorGenerator.class);
typeFieldValBinder.addBinding(ValidatorType.PYTHON).to(PythonValidatorGenerator.class);
}
}