/* * This file is part of the Wayback archival access software * (http://archive-access.sourceforge.net/projects/wayback/). * * Licensed to the Internet Archive (IA) by one or more individual * contributors. * * The IA licenses this file to You 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.archive.wayback.accesspoint; import java.util.ArrayList; import java.util.List; import java.util.Locale; import java.util.Map; import java.util.Properties; import javax.servlet.ServletContext; import org.archive.wayback.ExceptionRenderer; import org.archive.wayback.QueryRenderer; import org.archive.wayback.ReplayDispatcher; import org.archive.wayback.RequestParser; import org.archive.wayback.ResultURIConverter; import org.archive.wayback.accesscontrol.CompositeExclusionFilterFactory; import org.archive.wayback.accesscontrol.ExclusionFilterFactory; import org.archive.wayback.accesscontrol.oracleclient.CustomPolicyOracleFilter; import org.archive.wayback.accesspoint.proxy.ProxyAccessPoint; import org.archive.wayback.core.WaybackRequest; import org.archive.wayback.replay.html.ContextResultURIConverterFactory; import org.archive.wayback.resourceindex.filters.ExclusionFilter; import org.archive.wayback.util.operator.BooleanOperator; import org.archive.wayback.webapp.AccessPoint; import org.archive.wayback.webapp.CustomResultFilterFactory; import org.archive.wayback.webapp.WaybackCollection; public class AccessPointAdapter extends AccessPoint { private CompositeAccessPoint baseAccessPoint; private AccessPointConfig config; private ExclusionFilterFactory exclusionFactory; private ResultURIConverter cacheUriConverter; private boolean switchable = false; private class DynamicExclusionFactory implements ExclusionFilterFactory { public ExclusionFilter get() { return new CustomPolicyOracleFilter(baseAccessPoint.getOracleUrl(), config.getBeanName(), null); } public void shutdown() { } } public AccessPointAdapter(CompositeAccessPoint baseAccessPoint, AccessPointConfig config) { this.baseAccessPoint = baseAccessPoint; this.config = config; this.exclusionFactory = null; this.switchable = true; } public AccessPointAdapter(String accessPointName, CompositeAccessPoint baseAccessPoint) { this.baseAccessPoint = baseAccessPoint; this.exclusionFactory = null; this.config = baseAccessPoint.getAccessPointConfigs().getAccessPointConfigs().get(accessPointName); this.switchable = false; } public CompositeAccessPoint getBaseAccessPoint() { return baseAccessPoint; } public boolean isProxyMode() { return (baseAccessPoint instanceof ProxyAccessPoint); } public boolean isProxySwitchable() { return switchable && isProxyMode(); } public String getSwitchCollPath() { return ProxyAccessPoint.SWITCH_COLLECTION_PATH; } public AccessPointConfig getAccessPointConfig() { return config; } public Map<String, Object> getUserProps() { return baseAccessPoint.getUserProps(); } @Override public List<String> getFileIncludePrefixes() { return config.getFileIncludePrefixes(); } @Override public List<String> getFileExcludePrefixes() { return config.getFileExcludePrefixes(); } @Override public Properties getConfigs() { // TODO Auto-generated method stub return config.getConfigs(); } @Override public ExclusionFilterFactory getExclusionFactory() { if (exclusionFactory == null) { exclusionFactory = buildExclusionFactory(); } return exclusionFactory; } protected ExclusionFilterFactory buildExclusionFactory() { ArrayList<ExclusionFilterFactory> staticExclusions = baseAccessPoint.getStaticExclusions(); if (staticExclusions == null) { return new DynamicExclusionFactory(); } else { CompositeExclusionFilterFactory composite = new CompositeExclusionFilterFactory(); ArrayList<ExclusionFilterFactory> allExclusions = new ArrayList<ExclusionFilterFactory>(); allExclusions.addAll(staticExclusions); allExclusions.add(new DynamicExclusionFactory()); composite.setFactories(allExclusions); return composite; } } protected String getPrefix(String basePrefix) { if (isProxyMode()) { return basePrefix; } else { return basePrefix + config.getBeanName() + "/"; } } @Override public String getStaticPrefix() { // TODO Auto-generated method stub return getPrefix(baseAccessPoint.getStaticPrefix()); } @Override public String getReplayPrefix() { // TODO Auto-generated method stub return getPrefix(baseAccessPoint.getReplayPrefix()); } @Override public String getQueryPrefix() { // TODO Auto-generated method stub return getPrefix(baseAccessPoint.getQueryPrefix()); } @Override public boolean isExactHostMatch() { // TODO Auto-generated method stub return baseAccessPoint.isExactHostMatch(); } @Override public boolean isExactSchemeMatch() { // TODO Auto-generated method stub return baseAccessPoint.isExactSchemeMatch(); } @Override public boolean isUseAnchorWindow() { // TODO Auto-generated method stub return baseAccessPoint.isUseAnchorWindow(); } @Override public boolean isServeStatic() { // TODO Auto-generated method stub return baseAccessPoint.isServeStatic(); } @Override public ServletContext getServletContext() { return baseAccessPoint.getServletContext(); } @Override public String getLiveWebPrefix() { // TODO Auto-generated method stub return baseAccessPoint.getLiveWebPrefix(); } @Override public String getInterstitialJsp() { // TODO Auto-generated method stub return baseAccessPoint.getInterstitialJsp(); } @Override public Locale getLocale() { // TODO Auto-generated method stub return baseAccessPoint.getLocale(); } @Override public List<String> getFilePatterns() { // TODO Auto-generated method stub return baseAccessPoint.getFilePatterns(); } @Override public WaybackCollection getCollection() { // TODO Auto-generated method stub return baseAccessPoint.getCollection(); } @Override public ExceptionRenderer getException() { // TODO Auto-generated method stub return baseAccessPoint.getException(); } @Override public QueryRenderer getQuery() { // TODO Auto-generated method stub return baseAccessPoint.getQuery(); } @Override public RequestParser getParser() { // TODO Auto-generated method stub return baseAccessPoint.getParser(); } @Override public ReplayDispatcher getReplay() { // TODO Auto-generated method stub return baseAccessPoint.getReplay(); } @Override public ResultURIConverter getUriConverter() { if (cacheUriConverter == null) { ContextResultURIConverterFactory factory = baseAccessPoint.getUriConverterFactory(); if (factory != null) { cacheUriConverter = factory.getContextConverter(getReplayPrefix()); } else { cacheUriConverter = baseAccessPoint.getUriConverter(); } } return cacheUriConverter; } @Override public BooleanOperator<WaybackRequest> getAuthentication() { // TODO Auto-generated method stub return baseAccessPoint.getAuthentication(); } @Override public String getRefererAuth() { // TODO Auto-generated method stub return baseAccessPoint.getRefererAuth(); } @Override public boolean isBounceToReplayPrefix() { // TODO Auto-generated method stub return baseAccessPoint.isBounceToReplayPrefix(); } @Override public boolean isBounceToQueryPrefix() { // TODO Auto-generated method stub return baseAccessPoint.isBounceToQueryPrefix(); } @Override public long getEmbargoMS() { // TODO Auto-generated method stub return baseAccessPoint.getEmbargoMS(); } @Override public boolean isForceCleanQueries() { // TODO Auto-generated method stub return baseAccessPoint.isForceCleanQueries(); } @Override public CustomResultFilterFactory getFilterFactory() { // TODO Auto-generated method stub return baseAccessPoint.getFilterFactory(); } }