001: /*
002: * Licensed to the Apache Software Foundation (ASF) under one or more
003: * contributor license agreements. See the NOTICE file distributed with
004: * this work for additional information regarding copyright ownership.
005: * The ASF licenses this file to You under the Apache License, Version 2.0
006: * (the "License"); you may not use this file except in compliance with
007: * the License. You may obtain a copy of the License at
008: *
009: * http://www.apache.org/licenses/LICENSE-2.0
010: *
011: * Unless required by applicable law or agreed to in writing, software
012: * distributed under the License is distributed on an "AS IS" BASIS,
013: * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
014: * See the License for the specific language governing permissions and
015: * limitations under the License.
016: */
017: package org.apache.cocoon.sitemap;
018:
019: import org.w3c.dom.NodeList;
020:
021: /**
022: * This class is used as a XSLT extension class.
023: *
024: * @deprecated This class has been used by the old sitemap engine
025: *
026: * @author <a href="mailto:Giacomo.Pati@pwr.ch">Giacomo Pati</a>
027: * @author <a href="mailto:bloritsch@apache.org">Berin Loritsch</a>
028: * @version CVS $Id: XSLTFactoryLoader.java 433543 2006-08-22 06:22:54Z crossley $
029: */
030: public class XSLTFactoryLoader {
031:
032: public String getClassSource(String className, String prefix,
033: String pattern, NodeList conf)
034: throws ClassNotFoundException, InstantiationException,
035: IllegalAccessException, Exception {
036:
037: throw new UnsupportedOperationException(
038: "CodeFactory is no longer supported.");
039: }
040:
041: public String getParameterSource(String className, NodeList conf)
042: throws ClassNotFoundException, InstantiationException,
043: IllegalAccessException, Exception {
044:
045: throw new UnsupportedOperationException(
046: "CodeFactory is no longer supported.");
047: }
048:
049: public String getMethodSource(String className, NodeList conf)
050: throws ClassNotFoundException, InstantiationException,
051: IllegalAccessException, Exception {
052:
053: throw new UnsupportedOperationException(
054: "CodeFactory is no longer supported.");
055: }
056:
057: public boolean isFactory(String className) {
058:
059: throw new UnsupportedOperationException(
060: "Factories are no longer supported.");
061: }
062:
063: /**
064: * Escapes '"' and '\' characters in a String (add a '\' before them) so that it can
065: * be inserted in java source.
066: */
067: public String escape(String string) {
068: if (string.indexOf('\\') == -1 && string.indexOf('"') == -1) {
069: // Nothing to escape
070: return string;
071: }
072:
073: StringBuffer buf = new StringBuffer();
074: for (int i = 0; i < string.length(); i++) {
075: char ch = string.charAt(i);
076: if (ch == '\\' || ch == '"') {
077: buf.append('\\');
078: }
079: buf.append(ch);
080: }
081: return buf.toString();
082: }
083:
084: /**
085: * Escapes like {@link #escape(String)} after having removed any '\' preceding a '{'.
086: * This is used to insert a pattern with escaped subsitution syntax in Java source.
087: */
088: public String escapeBraces(String string) {
089: if (string.indexOf("\\{") == -1) {
090: return escape(string);
091: }
092:
093: StringBuffer buf = new StringBuffer();
094: for (int i = 0; i < string.length(); i++) {
095: char ch = string.charAt(i);
096: if (ch != '\\' || i >= (string.length() - 1)
097: || string.charAt(i + 1) != '{') {
098: buf.append(ch);
099: }
100: }
101: return escape(buf.toString());
102: }
103:
104: public boolean hasSubstitutions(String pattern) {
105: if (pattern.length() == 0) {
106: return false;
107: }
108: // Does it start by a substitution ?
109: if (pattern.charAt(0) == '{') {
110: return true;
111: }
112:
113: // Search for an unescaped '{'
114: int i = 1;
115: while ((i = pattern.indexOf('{', i)) != -1) {
116: if (pattern.charAt(i - 1) != '\\') {
117: return true;
118: }
119: i++; // Pass '{'
120: }
121:
122: return false;
123: }
124: }
|