~vcs-imports/xena/trunk

473 by matthewoliver
Merged Xena Testing into Xena Stable for the Xena 5 release.
1
/*
2
 * Licensed to the Apache Software Foundation (ASF) under one or more
3
 * contributor license agreements.  See the NOTICE file distributed with
4
 * this work for additional information regarding copyright ownership.
5
 * The ASF licenses this file to You under the Apache License, Version 2.0
6
 * (the "License"); you may not use this file except in compliance with
7
 * the License.  You may obtain a copy of the License at
8
 * 
9
 *      http://www.apache.org/licenses/LICENSE-2.0
10
 * 
11
 * Unless required by applicable law or agreed to in writing, software
12
 * distributed under the License is distributed on an "AS IS" BASIS,
13
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14
 * See the License for the specific language governing permissions and
15
 * limitations under the License.
16
 */
17
18
package org.apache.xerces.jaxp.validation;
19
20
import java.lang.ref.WeakReference;
21
22
import org.apache.xerces.xni.grammars.XMLGrammarPool;
23
24
/**
25
 * <p>An implementation of Schema for W3C XML Schemas
26
 * that keeps a weak reference to its grammar pool. If
27
 * no validators currently have a reference to the
28
 * grammar pool, the garbage collector is free to reclaim
29
 * its memory.</p>
30
 * 
31
 * @author Michael Glavassevich, IBM
32
 * @version $Id: WeakReferenceXMLSchema.java,v 1.2 2009/12/10 03:18:25 matthewoliver Exp $
33
 */
34
final class WeakReferenceXMLSchema extends AbstractXMLSchema {
35
    
36
    /** Weak reference to grammar pool. */
37
    private WeakReference fGrammarPool = new WeakReference(null);
38
39
    public WeakReferenceXMLSchema() {}
40
    
41
    /*
42
     * XSGrammarPoolContainer methods
43
     */
44
45
    public synchronized XMLGrammarPool getGrammarPool() {
46
        XMLGrammarPool grammarPool = (XMLGrammarPool) fGrammarPool.get();
47
        // If there's no grammar pool then either we haven't created one
48
        // yet or the garbage collector has already cleaned out the previous one. 
49
        if (grammarPool == null) {
50
            grammarPool = new SoftReferenceGrammarPool();
51
            fGrammarPool = new WeakReference(grammarPool);
52
        }
53
        return grammarPool;
54
    }
55
56
    public boolean isFullyComposed() {
57
        return false;
58
    }
59
60
} // WeakReferenceXMLSchema