blob: 81ef567f61514add78887dd0002709ca54425394 [file] [log] [blame]
J. Duke319a3b92007-12-01 00:00:00 +00001/*
2 * reserved comment block
3 * DO NOT REMOVE OR ALTER!
4 */
5/*
6 * Copyright 1999-2004 The Apache Software Foundation.
7 *
8 * Licensed under the Apache License, Version 2.0 (the "License");
9 * you may not use this file except in compliance with the License.
10 * You may obtain a copy of the License at
11 *
12 * http://www.apache.org/licenses/LICENSE-2.0
13 *
14 * Unless required by applicable law or agreed to in writing, software
15 * distributed under the License is distributed on an "AS IS" BASIS,
16 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
17 * See the License for the specific language governing permissions and
18 * limitations under the License.
19 *
20 */
21package com.sun.org.apache.xml.internal.security.utils;
22
23import com.sun.org.apache.xpath.internal.CachedXPathAPI;
24import org.w3c.dom.Document;
25
26
27/**
28 * @author Raul Benito
29 */
30public class CachedXPathAPIHolder {
31 static java.util.logging.Logger log =
32 java.util.logging.Logger.getLogger(CachedXPathAPIHolder.class.getName());
33
34 static ThreadLocal local=new ThreadLocal();
35 static ThreadLocal localDoc=new ThreadLocal();
36
37 /**
38 * Sets the doc for the xpath transformation. Resets the cache if needed
39 * @param doc
40 */
41 public static void setDoc(Document doc) {
42 if (localDoc.get()!=doc) {
43 CachedXPathAPI cx=(CachedXPathAPI)local.get();
44 if (cx==null) {
45 cx=new CachedXPathAPI();
46 local.set(cx);
47 localDoc.set(doc);
48 return;
49 }
50 //Different docs reset.
51 cx.getXPathContext().reset();
52 localDoc.set(doc);
53 }
54 }
55 /**
56 * @return the cachexpathapi for this thread
57 */
58 public static CachedXPathAPI getCachedXPathAPI() {
59 CachedXPathAPI cx=(CachedXPathAPI)local.get();
60 if (cx==null) {
61 cx=new CachedXPathAPI();
62 local.set(cx);
63 localDoc.set(null);
64 }
65 return cx;
66 }
67}