8d22687fbdc540bd0b4d05fd90d87fb6037f4b9fJorgen Austvik/*
8d22687fbdc540bd0b4d05fd90d87fb6037f4b9fJorgen Austvik * ====================================================================
8d22687fbdc540bd0b4d05fd90d87fb6037f4b9fJorgen Austvik *
8d22687fbdc540bd0b4d05fd90d87fb6037f4b9fJorgen Austvik * The Apache Software License, Version 1.1
8d22687fbdc540bd0b4d05fd90d87fb6037f4b9fJorgen Austvik *
8d22687fbdc540bd0b4d05fd90d87fb6037f4b9fJorgen Austvik * Copyright (c) 1999-2003 The Apache Software Foundation.
8d22687fbdc540bd0b4d05fd90d87fb6037f4b9fJorgen Austvik * All rights reserved.
8d22687fbdc540bd0b4d05fd90d87fb6037f4b9fJorgen Austvik *
8d22687fbdc540bd0b4d05fd90d87fb6037f4b9fJorgen Austvik * Redistribution and use in source and binary forms, with or without
8d22687fbdc540bd0b4d05fd90d87fb6037f4b9fJorgen Austvik * modification, are permitted provided that the following conditions
8d22687fbdc540bd0b4d05fd90d87fb6037f4b9fJorgen Austvik * are met:
8d22687fbdc540bd0b4d05fd90d87fb6037f4b9fJorgen Austvik *
8d22687fbdc540bd0b4d05fd90d87fb6037f4b9fJorgen Austvik * 1. Redistributions of source code must retain the above copyright
8d22687fbdc540bd0b4d05fd90d87fb6037f4b9fJorgen Austvik * notice, this list of conditions and the following disclaimer.
8d22687fbdc540bd0b4d05fd90d87fb6037f4b9fJorgen Austvik *
8d22687fbdc540bd0b4d05fd90d87fb6037f4b9fJorgen Austvik * 2. Redistributions in binary form must reproduce the above copyright
8d22687fbdc540bd0b4d05fd90d87fb6037f4b9fJorgen Austvik * notice, this list of conditions and the following disclaimer in
8d22687fbdc540bd0b4d05fd90d87fb6037f4b9fJorgen Austvik * the documentation and/or other materials provided with the
8d22687fbdc540bd0b4d05fd90d87fb6037f4b9fJorgen Austvik * distribution.
8d22687fbdc540bd0b4d05fd90d87fb6037f4b9fJorgen Austvik *
8d22687fbdc540bd0b4d05fd90d87fb6037f4b9fJorgen Austvik * 3. The end-user documentation included with the redistribution, if
8d22687fbdc540bd0b4d05fd90d87fb6037f4b9fJorgen Austvik * any, must include the following acknowledgement:
8d22687fbdc540bd0b4d05fd90d87fb6037f4b9fJorgen Austvik * "This product includes software developed by the
8d22687fbdc540bd0b4d05fd90d87fb6037f4b9fJorgen Austvik * Apache Software Foundation (http://www.apache.org/)."
8d22687fbdc540bd0b4d05fd90d87fb6037f4b9fJorgen Austvik * Alternately, this acknowledgement may appear in the software itself,
8d22687fbdc540bd0b4d05fd90d87fb6037f4b9fJorgen Austvik * if and wherever such third-party acknowledgements normally appear.
8d22687fbdc540bd0b4d05fd90d87fb6037f4b9fJorgen Austvik *
8d22687fbdc540bd0b4d05fd90d87fb6037f4b9fJorgen Austvik * 4. The names "The Jakarta Project", "Commons", and "Apache Software
8d22687fbdc540bd0b4d05fd90d87fb6037f4b9fJorgen Austvik * Foundation" must not be used to endorse or promote products derived
8d22687fbdc540bd0b4d05fd90d87fb6037f4b9fJorgen Austvik * from this software without prior written permission. For written
8d22687fbdc540bd0b4d05fd90d87fb6037f4b9fJorgen Austvik * permission, please contact apache@apache.org.
8d22687fbdc540bd0b4d05fd90d87fb6037f4b9fJorgen Austvik *
8d22687fbdc540bd0b4d05fd90d87fb6037f4b9fJorgen Austvik * 5. Products derived from this software may not be called "Apache"
8d22687fbdc540bd0b4d05fd90d87fb6037f4b9fJorgen Austvik * nor may "Apache" appear in their names without prior written
8d22687fbdc540bd0b4d05fd90d87fb6037f4b9fJorgen Austvik * permission of the Apache Software Foundation.
8d22687fbdc540bd0b4d05fd90d87fb6037f4b9fJorgen Austvik *
8d22687fbdc540bd0b4d05fd90d87fb6037f4b9fJorgen Austvik * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
8d22687fbdc540bd0b4d05fd90d87fb6037f4b9fJorgen Austvik * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
8d22687fbdc540bd0b4d05fd90d87fb6037f4b9fJorgen Austvik * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
8d22687fbdc540bd0b4d05fd90d87fb6037f4b9fJorgen Austvik * DISCLAIMED. IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
8d22687fbdc540bd0b4d05fd90d87fb6037f4b9fJorgen Austvik * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
8d22687fbdc540bd0b4d05fd90d87fb6037f4b9fJorgen Austvik * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
8d22687fbdc540bd0b4d05fd90d87fb6037f4b9fJorgen Austvik * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
8d22687fbdc540bd0b4d05fd90d87fb6037f4b9fJorgen Austvik * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
8d22687fbdc540bd0b4d05fd90d87fb6037f4b9fJorgen Austvik * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
8d22687fbdc540bd0b4d05fd90d87fb6037f4b9fJorgen Austvik * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
8d22687fbdc540bd0b4d05fd90d87fb6037f4b9fJorgen Austvik * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
8d22687fbdc540bd0b4d05fd90d87fb6037f4b9fJorgen Austvik * SUCH DAMAGE.
8d22687fbdc540bd0b4d05fd90d87fb6037f4b9fJorgen Austvik * ====================================================================
8d22687fbdc540bd0b4d05fd90d87fb6037f4b9fJorgen Austvik *
8d22687fbdc540bd0b4d05fd90d87fb6037f4b9fJorgen Austvik * This software consists of voluntary contributions made by many
8d22687fbdc540bd0b4d05fd90d87fb6037f4b9fJorgen Austvik * individuals on behalf of the Apache Software Foundation. For more
8d22687fbdc540bd0b4d05fd90d87fb6037f4b9fJorgen Austvik * information on the Apache Software Foundation, please see
8d22687fbdc540bd0b4d05fd90d87fb6037f4b9fJorgen Austvik * <http://www.apache.org/>.
8d22687fbdc540bd0b4d05fd90d87fb6037f4b9fJorgen Austvik *
8d22687fbdc540bd0b4d05fd90d87fb6037f4b9fJorgen Austvik */
8d22687fbdc540bd0b4d05fd90d87fb6037f4b9fJorgen Austvik
495a0ec1fba92bef6bc9f75d781f4f98e17ee5eeKnut Anders Hatlen/*
495a0ec1fba92bef6bc9f75d781f4f98e17ee5eeKnut Anders Hatlen * Copyright (c) 2010, Oracle and/or its affiliates. All rights reserved.
495a0ec1fba92bef6bc9f75d781f4f98e17ee5eeKnut Anders Hatlen */
495a0ec1fba92bef6bc9f75d781f4f98e17ee5eeKnut Anders Hatlen
8d22687fbdc540bd0b4d05fd90d87fb6037f4b9fJorgen Austvikpackage org.apache.commons.jrcs.rcs;
8d22687fbdc540bd0b4d05fd90d87fb6037f4b9fJorgen Austvik
8d22687fbdc540bd0b4d05fd90d87fb6037f4b9fJorgen Austvikimport java.text.Format;
8d22687fbdc540bd0b4d05fd90d87fb6037f4b9fJorgen Austvikimport java.text.MessageFormat;
8d22687fbdc540bd0b4d05fd90d87fb6037f4b9fJorgen Austvik
8d22687fbdc540bd0b4d05fd90d87fb6037f4b9fJorgen Austvik/**
8d22687fbdc540bd0b4d05fd90d87fb6037f4b9fJorgen Austvik * Formatter for the RCS keywords. It is intended as an helper class to
8d22687fbdc540bd0b4d05fd90d87fb6037f4b9fJorgen Austvik * replace the use of gnu.regexp. This class is NOT threadsafe.
8d22687fbdc540bd0b4d05fd90d87fb6037f4b9fJorgen Austvik *
8d22687fbdc540bd0b4d05fd90d87fb6037f4b9fJorgen Austvik * @author <a href="mailto:sbailliez@apache.org">Stephane Bailliez</a>
8d22687fbdc540bd0b4d05fd90d87fb6037f4b9fJorgen Austvik */
8d22687fbdc540bd0b4d05fd90d87fb6037f4b9fJorgen Austvikfinal class KeywordsFormat
8d22687fbdc540bd0b4d05fd90d87fb6037f4b9fJorgen Austvik{
8d22687fbdc540bd0b4d05fd90d87fb6037f4b9fJorgen Austvik final Format Header_FORMAT =
495a0ec1fba92bef6bc9f75d781f4f98e17ee5eeKnut Anders Hatlen new MessageFormat("\\$Header: {1} {2} {3, date,yyyy/MM/dd HH:mm:ss} {4} {5} \\$");
8d22687fbdc540bd0b4d05fd90d87fb6037f4b9fJorgen Austvik final Format Id_FORMAT =
495a0ec1fba92bef6bc9f75d781f4f98e17ee5eeKnut Anders Hatlen new MessageFormat("\\$Id: {1} {2} {3, date,yyyy/MM/dd HH:mm:ss} {4} {5} \\$");
8d22687fbdc540bd0b4d05fd90d87fb6037f4b9fJorgen Austvik final Format RCSFile_FORMAT =
495a0ec1fba92bef6bc9f75d781f4f98e17ee5eeKnut Anders Hatlen new MessageFormat("\\$RCSfile: {1} \\$");
8d22687fbdc540bd0b4d05fd90d87fb6037f4b9fJorgen Austvik final Format Revision_FORMAT =
495a0ec1fba92bef6bc9f75d781f4f98e17ee5eeKnut Anders Hatlen new MessageFormat("\\$Revision: {2} \\$");
8d22687fbdc540bd0b4d05fd90d87fb6037f4b9fJorgen Austvik final Format Date_FORMAT =
495a0ec1fba92bef6bc9f75d781f4f98e17ee5eeKnut Anders Hatlen new MessageFormat("\\$Date: {3, date,yyyy/MM/dd HH:mm:ss} \\$");
8d22687fbdc540bd0b4d05fd90d87fb6037f4b9fJorgen Austvik final Format Author_FORMAT =
495a0ec1fba92bef6bc9f75d781f4f98e17ee5eeKnut Anders Hatlen new MessageFormat("\\$Author: {4} \\$");
8d22687fbdc540bd0b4d05fd90d87fb6037f4b9fJorgen Austvik final Format State_FORMAT =
495a0ec1fba92bef6bc9f75d781f4f98e17ee5eeKnut Anders Hatlen new MessageFormat("\\$State: {5} \\$");
8d22687fbdc540bd0b4d05fd90d87fb6037f4b9fJorgen Austvik final Format Locker_FORMAT =
495a0ec1fba92bef6bc9f75d781f4f98e17ee5eeKnut Anders Hatlen new MessageFormat("\\$Locker: {6} \\$");
8d22687fbdc540bd0b4d05fd90d87fb6037f4b9fJorgen Austvik final Format Source_FORMAT =
495a0ec1fba92bef6bc9f75d781f4f98e17ee5eeKnut Anders Hatlen new MessageFormat("\\$Source: {0} \\$");
8d22687fbdc540bd0b4d05fd90d87fb6037f4b9fJorgen Austvik
123edc876010aee39f9c9caf2520c418d6b96fcaTrond Norbye private static final String ID_RE = "\\$Id(:[^\\$]*)?\\$";
123edc876010aee39f9c9caf2520c418d6b96fcaTrond Norbye private static final String HEADER_RE = "\\$Header(:[^\\$]*)?\\$";
123edc876010aee39f9c9caf2520c418d6b96fcaTrond Norbye private static final String SOURCE_RE = "\\$Source(:[^\\$]*)?\\$";
123edc876010aee39f9c9caf2520c418d6b96fcaTrond Norbye private static final String RCSFILE_RE = "\\$RCSfile(:[^\\$]*)?\\$";
123edc876010aee39f9c9caf2520c418d6b96fcaTrond Norbye private static final String REVISION_RE = "\\$Revision(:[^\\$]*)?\\$";
123edc876010aee39f9c9caf2520c418d6b96fcaTrond Norbye private static final String DATE_RE = "\\$Date(:[^\\$]*)?\\$";
123edc876010aee39f9c9caf2520c418d6b96fcaTrond Norbye private static final String AUTHOR_RE = "\\$Author(:[^\\$]*)?\\$";
123edc876010aee39f9c9caf2520c418d6b96fcaTrond Norbye private static final String STATE_RE = "\\$State(:[^\\$]*)?\\$";
123edc876010aee39f9c9caf2520c418d6b96fcaTrond Norbye private static final String LOCKER_RE = "\\$Locker(:[^\\$]*)?\\$";
8d22687fbdc540bd0b4d05fd90d87fb6037f4b9fJorgen Austvik
8d22687fbdc540bd0b4d05fd90d87fb6037f4b9fJorgen Austvik /**
8d22687fbdc540bd0b4d05fd90d87fb6037f4b9fJorgen Austvik * update the given text made of RCS keywords with the appropriate
8d22687fbdc540bd0b4d05fd90d87fb6037f4b9fJorgen Austvik * revision info.
8d22687fbdc540bd0b4d05fd90d87fb6037f4b9fJorgen Austvik * @param text the input text containing the RCS keywords.
8d22687fbdc540bd0b4d05fd90d87fb6037f4b9fJorgen Austvik * @param revisionInfo the revision information.
8d22687fbdc540bd0b4d05fd90d87fb6037f4b9fJorgen Austvik * @return the formatted text with the RCS keywords.
8d22687fbdc540bd0b4d05fd90d87fb6037f4b9fJorgen Austvik */
8d22687fbdc540bd0b4d05fd90d87fb6037f4b9fJorgen Austvik String update(String text, Object[] revisionInfo)
8d22687fbdc540bd0b4d05fd90d87fb6037f4b9fJorgen Austvik {
495a0ec1fba92bef6bc9f75d781f4f98e17ee5eeKnut Anders Hatlen String data = text
495a0ec1fba92bef6bc9f75d781f4f98e17ee5eeKnut Anders Hatlen .replaceAll(ID_RE, Id_FORMAT.format(revisionInfo))
495a0ec1fba92bef6bc9f75d781f4f98e17ee5eeKnut Anders Hatlen .replaceAll(HEADER_RE, Header_FORMAT.format(revisionInfo))
495a0ec1fba92bef6bc9f75d781f4f98e17ee5eeKnut Anders Hatlen .replaceAll(SOURCE_RE, Source_FORMAT.format(revisionInfo))
495a0ec1fba92bef6bc9f75d781f4f98e17ee5eeKnut Anders Hatlen .replaceAll(RCSFILE_RE, RCSFile_FORMAT.format(revisionInfo))
495a0ec1fba92bef6bc9f75d781f4f98e17ee5eeKnut Anders Hatlen .replaceAll(REVISION_RE, Revision_FORMAT.format(revisionInfo))
495a0ec1fba92bef6bc9f75d781f4f98e17ee5eeKnut Anders Hatlen .replaceAll(DATE_RE, Date_FORMAT.format(revisionInfo))
495a0ec1fba92bef6bc9f75d781f4f98e17ee5eeKnut Anders Hatlen .replaceAll(AUTHOR_RE, Author_FORMAT.format(revisionInfo))
495a0ec1fba92bef6bc9f75d781f4f98e17ee5eeKnut Anders Hatlen .replaceAll(STATE_RE, State_FORMAT.format(revisionInfo))
495a0ec1fba92bef6bc9f75d781f4f98e17ee5eeKnut Anders Hatlen .replaceAll(LOCKER_RE, Locker_FORMAT.format(revisionInfo));
8d22687fbdc540bd0b4d05fd90d87fb6037f4b9fJorgen Austvik //@TODO: should do something about Name and Log
8d22687fbdc540bd0b4d05fd90d87fb6037f4b9fJorgen Austvik return data;
8d22687fbdc540bd0b4d05fd90d87fb6037f4b9fJorgen Austvik }
8d22687fbdc540bd0b4d05fd90d87fb6037f4b9fJorgen Austvik
8d22687fbdc540bd0b4d05fd90d87fb6037f4b9fJorgen Austvik /**
8d22687fbdc540bd0b4d05fd90d87fb6037f4b9fJorgen Austvik * Reinitialize all RCS keywords match.
8d22687fbdc540bd0b4d05fd90d87fb6037f4b9fJorgen Austvik * @param text the text to look for RCS keywords.
8d22687fbdc540bd0b4d05fd90d87fb6037f4b9fJorgen Austvik * @return the text with initialized RCS keywords.
8d22687fbdc540bd0b4d05fd90d87fb6037f4b9fJorgen Austvik */
8d22687fbdc540bd0b4d05fd90d87fb6037f4b9fJorgen Austvik String reset(String text)
8d22687fbdc540bd0b4d05fd90d87fb6037f4b9fJorgen Austvik {
495a0ec1fba92bef6bc9f75d781f4f98e17ee5eeKnut Anders Hatlen String data = text
495a0ec1fba92bef6bc9f75d781f4f98e17ee5eeKnut Anders Hatlen .replaceAll(ID_RE, "\\$Id\\$")
495a0ec1fba92bef6bc9f75d781f4f98e17ee5eeKnut Anders Hatlen .replaceAll(HEADER_RE, "\\$Header\\$")
495a0ec1fba92bef6bc9f75d781f4f98e17ee5eeKnut Anders Hatlen .replaceAll(SOURCE_RE, "\\$Source\\$")
495a0ec1fba92bef6bc9f75d781f4f98e17ee5eeKnut Anders Hatlen .replaceAll(RCSFILE_RE, "\\$RCSfile\\$")
495a0ec1fba92bef6bc9f75d781f4f98e17ee5eeKnut Anders Hatlen .replaceAll(REVISION_RE, "\\$Revision\\$")
495a0ec1fba92bef6bc9f75d781f4f98e17ee5eeKnut Anders Hatlen .replaceAll(DATE_RE, "\\$Date\\$")
495a0ec1fba92bef6bc9f75d781f4f98e17ee5eeKnut Anders Hatlen .replaceAll(AUTHOR_RE, "\\$Author\\$")
495a0ec1fba92bef6bc9f75d781f4f98e17ee5eeKnut Anders Hatlen .replaceAll(STATE_RE, "\\$State\\$")
495a0ec1fba92bef6bc9f75d781f4f98e17ee5eeKnut Anders Hatlen .replaceAll(LOCKER_RE, "\\$Locker\\$");
8d22687fbdc540bd0b4d05fd90d87fb6037f4b9fJorgen Austvik //@TODO: should do something about Name and Log
8d22687fbdc540bd0b4d05fd90d87fb6037f4b9fJorgen Austvik return data;
8d22687fbdc540bd0b4d05fd90d87fb6037f4b9fJorgen Austvik }
8d22687fbdc540bd0b4d05fd90d87fb6037f4b9fJorgen Austvik}