/* * Copyright 2007 Tim Peierls * * 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 org.directwebremoting.guice; import java.util.Collection; import java.util.HashSet; import java.util.List; import java.util.Set; import org.directwebremoting.extend.Configurator; import org.directwebremoting.util.FakeServletConfig; import com.google.inject.Inject; import com.google.inject.Injector; import com.google.inject.Key; import static org.directwebremoting.guice.ParamName.*; import static org.directwebremoting.impl.StartupUtil.*; class InjectedConfig { InjectedConfig(FakeServletConfig config) { this.config = config; } void setParameter(ParamName paramName, Object value) { if (value != null) { config.setInitParameter(paramName.getName(), value.toString()); } } void setClassesInitParameter() { Set<Class<?>> classes = new HashSet<Class<?>>(); Injector injector = DwrGuiceUtil.getInjector(); for (Key<?> key : injector.getBindings().keySet()) { Class<?> atype = key.getAnnotationType(); if (atype != null && InitParam.class.isAssignableFrom(atype)) { InitParam initParam = InitParam.class.cast(key.getAnnotation()); ParamName paramName = initParam.value(); if (paramName == CLASSES) { @SuppressWarnings("unchecked") List<Class<?>> classList = (List<Class<?>>) injector.getInstance(key); classes.addAll(classList); } } } config.setInitParameter(CLASSES.getName(), classesToString(classes)); } void setParameters() { setParameter(ALLOW_GET_FOR_SAFARI, allowGetForSafariButMakeForgeryEasier); setParameter(CROSS_DOMAIN_SESSION_SECURITY, crossDomainSessionSecurity); setParameter(ALLOW_SCRIPT_TAG_REMOTING, allowScriptTagRemoting); setParameter(DEBUG, debug); setParameter(SCRIPT_SESSION_TIMEOUT, scriptSessionTimeout); setParameter(MAX_CALL_COUNT, maxCallCount); setParameter(ACTIVE_REVERSE_AJAX_ENABLED, activeReverseAjaxEnabled); setParameter(MAX_WAIT_AFTER_WRITE, maxWaitAfterWrite); setParameter(DISCONNECTED_TIME, disconnectedTime); setParameter(POLL_AND_COMET_ENABLED, pollAndCometEnabled); setParameter(MAX_WAITING_THREADS, maxWaitingThreads); setParameter(MAX_POLL_HITS_PER_SECOND, maxPollHitsPerSecond); setParameter(PRE_STREAM_WAIT_TIME, preStreamWaitTime); setParameter(POST_STREAM_WAIT_TIME, postStreamWaitTime); setParameter(IGNORE_LAST_MODIFIED, ignoreLastModified); setParameter(SESSION_COOKIE_NAME, sessionCookieName); setParameter(WELCOME_FILES, welcomeFiles); setParameter(NORMALIZE_INCLUDES_QUERY_STRING, normalizeIncludesQueryString); setParameter(OVERRIDE_PATH, overridePath); if (configurator != null) { // InternalConfigurator knows how to look up the configurator // instance again and delegate to it. config.setInitParameter(INIT_CUSTOM_CONFIGURATOR, InternalConfigurator.class.getName()); } setClassesInitParameter(); } @Inject(optional=true) @InitParam(ALLOW_GET_FOR_SAFARI) Boolean allowGetForSafariButMakeForgeryEasier = null; @Inject(optional=true) @InitParam(CROSS_DOMAIN_SESSION_SECURITY) Boolean crossDomainSessionSecurity = null; @Inject(optional=true) @InitParam(ALLOW_SCRIPT_TAG_REMOTING) Boolean allowScriptTagRemoting = null; @Inject(optional=true) @InitParam(DEBUG) Boolean debug = null; @Inject(optional=true) @InitParam(SCRIPT_SESSION_TIMEOUT) Long scriptSessionTimeout = null; @Inject(optional=true) @InitParam(MAX_CALL_COUNT) Integer maxCallCount = null; @Inject(optional=true) @InitParam(ACTIVE_REVERSE_AJAX_ENABLED) Boolean activeReverseAjaxEnabled = null; @Inject(optional=true) @InitParam(MAX_WAIT_AFTER_WRITE) Long maxWaitAfterWrite = null; @Inject(optional=true) @InitParam(DISCONNECTED_TIME) Long disconnectedTime = null; @Inject(optional=true) @InitParam(POLL_AND_COMET_ENABLED) Boolean pollAndCometEnabled = null; @Inject(optional=true) @InitParam(MAX_WAITING_THREADS) Integer maxWaitingThreads = null; @Inject(optional=true) @InitParam(MAX_POLL_HITS_PER_SECOND) Integer maxPollHitsPerSecond = null; @Inject(optional=true) @InitParam(PRE_STREAM_WAIT_TIME) Long preStreamWaitTime = null; @Inject(optional=true) @InitParam(POST_STREAM_WAIT_TIME) Long postStreamWaitTime = null; @Inject(optional=true) @InitParam(IGNORE_LAST_MODIFIED) Boolean ignoreLastModified = null; @Inject(optional=true) @InitParam(SESSION_COOKIE_NAME) String sessionCookieName = null; @Inject(optional=true) @InitParam(WELCOME_FILES) String welcomeFiles = null; @Inject(optional=true) @InitParam(NORMALIZE_INCLUDES_QUERY_STRING) Boolean normalizeIncludesQueryString = null; @Inject(optional=true) @InitParam(OVERRIDE_PATH) String overridePath = null; @Inject(optional=true) Configurator configurator = null; private final FakeServletConfig config; private static String classesToString(Collection<Class<?>> classes) { StringBuilder buf = new StringBuilder(); int count = 0; for (Class<?> cls : classes) { if (count++ > 0) { buf.append(", "); } buf.append(cls.getName()); } return buf.toString(); } }