/* * Copyright 2004-2012 the Seasar Foundation and the Others. * * 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.seasar.mayaa.impl.source; import java.util.ArrayList; import java.util.Iterator; import java.util.List; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.seasar.mayaa.impl.IllegalParameterValueException; import org.seasar.mayaa.impl.ParameterAwareImpl; import org.seasar.mayaa.impl.util.ObjectUtil; import org.seasar.mayaa.impl.util.StringUtil; import org.seasar.mayaa.impl.util.collection.NullIterator; import org.seasar.mayaa.source.SourceDescriptor; import org.seasar.mayaa.source.PageSourceFactory; import org.seasar.mayaa.source.SourceHolder; /** * @author Masataka Kurihara (Gluegent, Inc.) */ public class PageSourceFactoryImpl extends ParameterAwareImpl implements PageSourceFactory { private static final long serialVersionUID = 3334813227060846723L; private static final Log LOG = LogFactory.getLog(PageSourceFactoryImpl.class); private Object _context; private Class _serviceClass; private List _parameterNames; private List _parameterValues; public void setServiceClass(Class serviceClass) { if (serviceClass == null) { throw new IllegalArgumentException(); } _serviceClass = serviceClass; } public Class getServiceClass() { if (_serviceClass == null) { throw new IllegalArgumentException(); } return _serviceClass; } public SourceDescriptor getPageSource(String systemID) { if (StringUtil.isEmpty(systemID)) { throw new IllegalArgumentException(); } Class sourceClass = getServiceClass(); if (sourceClass == null) { throw new IllegalStateException("serviceClass is null"); } SourceDescriptor source = (SourceDescriptor) ObjectUtil.newInstance(sourceClass); if (_parameterNames != null) { for (int i = 0; i < _parameterNames.size(); i++) { String key = (String) _parameterNames.get(i); String value = (String) _parameterValues.get(i); source.setParameter(key, value); } } source.setSystemID(systemID); return source; } // ContextAware implements ------------------------------------- public void setUnderlyingContext(Object context) { if (context == null) { throw new IllegalArgumentException(); } _context = context; } public Object getUnderlyingContext() { if (_context == null) { throw new IllegalStateException("context is null"); } return _context; } // ParameterAware implements ------------------------------------- public void setParameter(String name, String value) { if (StringUtil.isEmpty(name)) { throw new IllegalArgumentException(); } if (value == null) { throw new IllegalParameterValueException(getClass(), name); } if (LOG.isInfoEnabled()) { LOG.info(name + ": "+ value); } if (_parameterNames == null) { _parameterNames = new ArrayList(); } if (_parameterValues == null) { _parameterValues = new ArrayList(); } _parameterNames.add(name); _parameterValues.add(value); Class sourceHolderClass = null; if ("folder".equals(name)) { if (IS_SECURE_WEB && ("".equals(value) || "/".equals(value))) { sourceHolderClass = WebContextRootResourceHolder.class; } else { sourceHolderClass = WebContextFolderSourceHolder.class; } } else if ("absolutePath".equals(name)) { sourceHolderClass = AbsolutePathSourceHolder.class; } else { super.setParameter(name, value); return; } SourceHolder holder = (SourceHolder) ObjectUtil.newInstance(sourceHolderClass); try { holder.setRoot(value); } catch (IllegalArgumentException e) { throw new IllegalParameterValueException( sourceHolderClass, name + "=" + value); } SourceHolderFactory.appendSourceHolder(holder); } // first value only public String getParameter(String name) { if (StringUtil.isEmpty(name)) { throw new IllegalArgumentException(); } if (_parameterNames == null) { return null; } for (int i = 0; i < _parameterNames.size(); i++) { if (name.equals(_parameterNames.get(i))) { return (String) _parameterValues.get(i); } } return null; } public Iterator iterateParameterNames() { if (_parameterNames == null) { return NullIterator.getInstance(); } return _parameterNames.iterator(); } }