/* * 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.archivalurl; import org.archive.wayback.RequestParser; import org.archive.wayback.archivalurl.requestparser.ArchivalUrlFormRequestParser; import org.archive.wayback.archivalurl.requestparser.DatelessReplayRequestParser; import org.archive.wayback.archivalurl.requestparser.PathDatePrefixQueryRequestParser; import org.archive.wayback.archivalurl.requestparser.PathDateRangeQueryRequestParser; import org.archive.wayback.archivalurl.requestparser.PathPrefixDatePrefixQueryRequestParser; import org.archive.wayback.archivalurl.requestparser.PathPrefixDateRangeQueryRequestParser; import org.archive.wayback.archivalurl.requestparser.ReplayRequestParser; import org.archive.wayback.memento.TimeMapRequestParser; import org.archive.wayback.requestparser.CompositeRequestParser; import org.archive.wayback.requestparser.OpenSearchRequestParser; /** * CompositeRequestParser that handles Archival Url Replay and Query requests, * in addition to "standard" OpenSearch and Form RequestParsers. * * <p>Typically, this class is set to AccessPoint to configure ArchivalUrl * access point.</p> * * <h4>Refactoring Note</h4> * <p>It doesn't make much sense to split Archival-Url request parsing * into such fine-grained classes. It just make code less efficient, more difficult to maintain. * It is hard to think of the situation where these sub-parsers are customized separately, and * order is very important. * It also sounds weird to include TimeMapRequestParser in <em>ArchivalUrlRequestParser</em>, even if * TimeMapRequestParser works only in Archival-Url space. * Refactor these classes into one ArchivalUrl replay/query request parser, and rename this class. * Probably this class may be bundled with other ArchivalUrl-related classes for better abstraction.</p> * * @see org.archive.wayback.webapp.AccessPoint#getParser * @see org.archive.wayback.webapp.AccessPoint#handleRequest * @author brad */ public class ArchivalUrlRequestParser extends CompositeRequestParser { // TODO: move these constants to where they are actually used. // ArchivalUrl? ReplayRequestParser? /** * delimiter character for datespec flags */ public final static String FLAG_DELIM = "_"; /** * text/javascript context */ public final static String JS_CONTEXT = "js"; /** * text/css context */ public final static String CSS_CONTEXT = "cs"; /** * image/* context */ public final static String IMG_CONTEXT = "im"; /** * raw/identity context */ public final static String IDENTITY_CONTEXT = "id"; /** * frame-wrapper context */ public final static String FRAME_WRAPPED_CONTEXT = "fw"; /** * iframe-wrapped context */ public final static String IFRAME_WRAPPED_CONTEXT = "if"; /** * object/embed wrapped context */ public final static String OBJECT_EMBED_WRAPPED_CONTEXT = "oe"; /** * Charset detection strategy context - should be followed by an integer * indicating which strategy to use */ public final static String CHARSET_MODE = "cm"; protected RequestParser[] getRequestParsers() { RequestParser[] theParsers = { new ReplayRequestParser(this), new TimeMapRequestParser(this), new PathDatePrefixQueryRequestParser(this), new PathDateRangeQueryRequestParser(this), new PathPrefixDatePrefixQueryRequestParser(this), new PathPrefixDateRangeQueryRequestParser(this), new OpenSearchRequestParser(this), new ArchivalUrlFormRequestParser(this), new DatelessReplayRequestParser(this) }; return theParsers; } }