View Javadoc

1   /*
2    * Copyright 2004-2008 the Seasar Foundation and the Others.
3    *
4    * Licensed under the Apache License, Version 2.0 (the "License");
5    * you may not use this file except in compliance with the License.
6    * You may obtain a copy of the License at
7    *
8    *     http://www.apache.org/licenses/LICENSE-2.0
9    *
10   * Unless required by applicable law or agreed to in writing, software
11   * distributed under the License is distributed on an "AS IS" BASIS,
12   * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, 
13   * either express or implied. See the License for the specific language
14   * governing permissions and limitations under the License.
15   */
16  package org.seasar.uruma.util.resource;
17  
18  import java.net.URL;
19  import java.util.ArrayList;
20  import java.util.List;
21  
22  import org.seasar.uruma.util.resource.impl.FileResourceTraverser;
23  
24  /**
25   * {@link ResourceTraverser} のためのファクトリクラスです。<br />
26   * 
27   * @author y-komori
28   */
29  public class ResourceTraverserFactory {
30      private static final List<ResourceTraverser> traversers = new ArrayList<ResourceTraverser>();
31  
32      static {
33          addResourceTraverser(new FileResourceTraverser());
34      }
35  
36      private ResourceTraverserFactory() {
37  
38      }
39  
40      /**
41       * {@link ResourceTraverser} を登録します。<br />
42       * 同じプロトコルの {@link ResourceTraverser} が既に登録されている場合、上書きします。<br />
43       * 
44       * @param traverser
45       *            {@link ResourceTraverser}
46       */
47      public static void addResourceTraverser(final ResourceTraverser traverser) {
48          ResourceTraverser known = getResourceTraverser(traverser.getProtocol());
49          if (known != null) {
50              traversers.remove(known);
51          }
52          traversers.add(traverser);
53      }
54  
55      /**
56       * 指定されたプロトコルに対応した {@link ResourceTraverser} を取得します。<br />
57       * 
58       * @param protocol
59       *            プロトコル
60       * @return {@link ResourceTraverser} オブジェクト。プロトコルに対応するものが存在しない場合は
61       *         <code>null</code>。
62       */
63      public static ResourceTraverser getResourceTraverser(final String protocol) {
64          if (protocol == null) {
65              return null;
66          }
67          int size = traversers.size();
68          for (int i = 0; i < size; i++) {
69              ResourceTraverser traverser = traversers.get(i);
70              if (protocol.equals(traverser.getProtocol())) {
71                  return traverser;
72              }
73          }
74          return null;
75      }
76  
77      /**
78       * 指定された URL のプロトコルに対応した {@link ResourceTraverser} を取得します。<br />
79       * 
80       * @param url
81       *            URL
82       * @return {@link ResourceTraverser} オブジェクト。プロトコルに対応するものが存在しない場合は
83       *         <code>null</code>。
84       */
85      public static ResourceTraverser getResourceTraverser(final URL url) {
86          if (url == null) {
87              return null;
88          } else {
89              return getResourceTraverser(url.getProtocol());
90          }
91      }
92  }