KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > org > apache > james > context > AvalonContextUtilities


1 /***********************************************************************
2  * Copyright (c) 2000-2004 The Apache Software Foundation. *
3  * All rights reserved. *
4  * ------------------------------------------------------------------- *
5  * Licensed under the Apache License, Version 2.0 (the "License"); you *
6  * may not use this file except in compliance with the License. You *
7  * 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 *
14  * implied. See the License for the specific language governing *
15  * permissions and limitations under the License. *
16  ***********************************************************************/

17
18 package org.apache.james.context;
19
20 import org.apache.avalon.framework.context.Context;
21 import org.apache.avalon.framework.context.ContextException;
22
23 import java.io.File JavaDoc;
24 import java.io.IOException JavaDoc;
25
26 /**
27  * This class is essentially a set of static functions for
28  * extracting information from the Avalon context. This class
29  * should never be instantiated. Each function takes the context
30  * as a first argument.
31  */

32 public class AvalonContextUtilities {
33
34     /**
35      * The file URL prefix
36      */

37     private static String JavaDoc filePrefix = "file://";
38
39     /**
40      * The file URL prefix length
41      */

42     private static int filePrefixLength = filePrefix.length();
43
44     /**
45      * Gets the file or directory described by the argument file URL.
46      *
47      * @param context the Avalon context
48      * @param fileURL an appropriately formatted URL describing a file on
49      * the filesystem on which the server is running. The
50      * URL is evaluated as a location relative to the
51      * application home, unless it begins with a slash. In
52      * the latter case the file location is evaluated relative
53      * to the underlying file system root.
54      *
55      * @throws IllegalArgumentException if the arguments are null or the file
56      * URL is not appropriately formatted.
57      * @throws ContextException if the underlying context generates a
58      * ContextException, if the application home is
59      * not correct, or if an IOException is generated
60      * while accessing the file.
61      */

62     public static File JavaDoc getFile(Context context, String JavaDoc fileURL)
63             throws Exception JavaDoc {
64         if ((context == null) || (fileURL == null)) {
65             throw new IllegalArgumentException JavaDoc("The getFile method doesn't allow null arguments.");
66         }
67         String JavaDoc internalFileURL = fileURL.trim();
68         if (!(internalFileURL.startsWith(filePrefix))) {
69             throw new IllegalArgumentException JavaDoc("The fileURL argument to getFile doesn't start with the required file prefix - " + filePrefix);
70         }
71
72         String JavaDoc fileName = fileURL.substring(filePrefixLength);
73         if (!(fileName.startsWith("/"))) {
74             String JavaDoc baseDirectory = "";
75             try {
76                 File JavaDoc applicationHome =
77                     (File JavaDoc)context.get(AvalonContextConstants.APPLICATION_HOME);
78                 baseDirectory = applicationHome.toString();
79             } catch (ContextException ce) {
80                 throw new ContextException("Encountered exception when resolving application home in Avalon context.", ce);
81             } catch (ClassCastException JavaDoc cce) {
82                 throw new ContextException("Application home object stored in Avalon context was not of type java.io.File.", cce);
83             }
84             StringBuffer JavaDoc fileNameBuffer =
85                 new StringBuffer JavaDoc(128)
86                     .append(baseDirectory)
87                     .append(File.separator)
88                             .append(fileName);
89             fileName = fileNameBuffer.toString();
90         }
91         try {
92             File JavaDoc returnValue = (new File JavaDoc(fileName)).getCanonicalFile();
93             return returnValue;
94         } catch (IOException JavaDoc ioe) {
95             throw new ContextException("Encountered an unexpected exception while retrieving file.", ioe);
96         }
97     }
98
99     /**
100      * Private constructor to ensure that instances of this class aren't
101      * instantiated.
102      */

103     private AvalonContextUtilities() {}
104 }
105
Popular Tags