All Downloads are FREE. Search and download functionalities are using the official Maven repository.

org.enhydra.xml.xmlc.metadata.URLRegExpMapping Maven / Gradle / Ivy

The newest version!
/*
 * Enhydra Java Application Server Project
 * 
 * The contents of this file are subject to the Enhydra Public License
 * Version 1.1 (the "License"); you may not use this file except in
 * compliance with the License. You may obtain a copy of the License on
 * the Enhydra web site ( http://www.enhydra.org/ ).
 * 
 * Software distributed under the License is distributed on an "AS IS"
 * basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See 
 * the License for the specific terms governing rights and limitations
 * under the License.
 * 
 * The Initial Developer of the Enhydra Application Server is Lutris
 * Technologies, Inc. The Enhydra Application Server and portions created
 * by Lutris Technologies, Inc. are Copyright Lutris Technologies, Inc.
 * All Rights Reserved.
 * 
 * Contributor(s):
 * 
 * $Id: URLRegExpMapping.java,v 1.2 2005/01/26 08:29:24 jkjome Exp $
 */

package org.enhydra.xml.xmlc.metadata;

import gnu.regexp.RE;
import gnu.regexp.REException;
import gnu.regexp.RESyntax;

import org.enhydra.xml.xmlc.XMLCException;
import org.w3c.dom.Document;

/**
 * Specifies the regular expression replacement of URLs in element attributes.
 */
public class URLRegExpMapping extends URLEdit {
    /**
     * Element name.
     */
    public static final String TAG_NAME = "urlRegExpMapping";

    /**
     * Compiled regular expression.
     */
    private RE regExp;

    /**
     * Cached subtitution attribute.
     */
    private String substitution;

    /**
     * Constructor.
     */
    public URLRegExpMapping(Document ownerDoc) {
    	super(ownerDoc, TAG_NAME);
    }

    /**
     * Attribute names.
     */
    private static final String REGEXP_ATTR = "regexp";
    private static final String SUBST_ATTR = "subst";

    /**
     * Get the regexp attribute value.
     */
    public String getRegexp() {
        return getAttributeNull(REGEXP_ATTR);
    }

    /**
     * Set the regexp attribute value.
     */
    public void setRegexp(String value) {
        setRemoveAttribute(REGEXP_ATTR, value);
    }

    /**
     * Get the subst attribute value.
     */
    public String getSubst() {
        return getAttributeNull(SUBST_ATTR);
    }

    /**
     * Set the subst attribute value.
     */
    public void setSubst(String value) {
        setRemoveAttribute(SUBST_ATTR, value);
    }

    /**
     * Complete modifications to DOM, compiles regular expression if set.
     * @see MetaDataElement#completeModifications
     */
    protected void completeModifications() throws XMLCException {
        super.completeModifications();
        substitution = getSubst();

        String regExpStr = getRegexp();
        if (regExpStr == null) {
            regExp = null;
        } else {
            try {
                regExp = new RE(regExpStr, 0,
                                RESyntax.RE_SYNTAX_POSIX_EXTENDED);
            } catch (REException except) {
                throw new XMLCException("invalid URL mapping regular expression: "
                                        + except.toString(),
                                        except);
            }
            
        }
    }

    /**
     * Substitute a URL based on the regular expression.
     *
     * @return The updated URL or null if the URL doesn't match.
     */
    public String mapURL(String url) throws XMLCException {
        if (regExp.getMatch(url) == null) {
            return null;
        }
        return regExp.substituteAll(url, substitution);
    }

}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy