1/*
2 * Licensed to the Apache Software Foundation (ASF) under one
3 * or more contributor license agreements. See the NOTICE file
4 * distributed with this work for additional information
5 * regarding copyright ownership. The ASF licenses this file
6 * to you under the Apache License, Version 2.0 (the  "License");
7 * you may not use this file except in compliance with the License.
8 * You may obtain a copy of the License at
9 *
10 *     http://www.apache.org/licenses/LICENSE-2.0
11 *
12 * Unless required by applicable law or agreed to in writing, software
13 * distributed under the License is distributed on an "AS IS" BASIS,
14 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
15 * See the License for the specific language governing permissions and
16 * limitations under the License.
17 */
18/*
19 * $Id: ThreadControllerWrapper.java 468655 2006-10-28 07:12:06Z minchau $
20 */
21package org.apache.xml.utils;
22
23/**
24 * A utility class that wraps the ThreadController, which is used
25 * by IncrementalSAXSource for the incremental building of DTM.
26 */
27public class ThreadControllerWrapper
28{
29
30  /** The ThreadController pool   */
31  private static ThreadController m_tpool = new ThreadController();
32
33  public static Thread runThread(Runnable runnable, int priority)
34  {
35    return m_tpool.run(runnable, priority);
36  }
37
38  public static void waitThread(Thread worker, Runnable task)
39    throws InterruptedException
40  {
41    m_tpool.waitThread(worker, task);
42  }
43
44  /**
45   * Thread controller utility class for incremental SAX source. Must
46   * be overriden with a derived class to support thread pooling.
47   *
48   * All thread-related stuff is in this class.
49   */
50  public static class ThreadController
51  {
52
53    /**
54     * Will get a thread from the pool, execute the task
55     *  and return the thread to the pool.
56     *
57     *  The return value is used only to wait for completion
58     *
59     *
60     * NEEDSDOC @param task
61     * @param priority if >0 the task will run with the given priority
62     *  ( doesn't seem to be used in xalan, since it's allways the default )
63     * @return  The thread that is running the task, can be used
64     *          to wait for completion
65     */
66    public Thread run(Runnable task, int priority)
67    {
68
69      Thread t = new Thread(task);
70
71      t.start();
72
73      //       if( priority > 0 )
74      //      t.setPriority( priority );
75      return t;
76    }
77
78    /**
79     *  Wait until the task is completed on the worker
80     *  thread.
81     *
82     * NEEDSDOC @param worker
83     * NEEDSDOC @param task
84     *
85     * @throws InterruptedException
86     */
87    public void waitThread(Thread worker, Runnable task)
88            throws InterruptedException
89    {
90
91      // This should wait until the transformThread is considered not alive.
92      worker.join();
93    }
94  }
95
96}
97