001: /*
002: * Licensed to the Apache Software Foundation (ASF) under one or more
003: * contributor license agreements. See the NOTICE file distributed with
004: * this work for additional information regarding copyright ownership.
005: * The ASF licenses this file to You under the Apache License, Version 2.0
006: * (the "License"); you may not use this file except in compliance with
007: * the License. You may obtain a copy of the License at
008: *
009: * http://www.apache.org/licenses/LICENSE-2.0
010: *
011: * Unless required by applicable law or agreed to in writing, software
012: * distributed under the License is distributed on an "AS IS" BASIS,
013: * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
014: * See the License for the specific language governing permissions and
015: * limitations under the License.
016: */
017: package org.apache.commons.vfs;
018:
019: import org.apache.commons.vfs.util.Messages;
020:
021: import java.io.IOException;
022:
023: /**
024: * Thrown for file system errors.
025: *
026: * @author <a href="mailto:adammurdoch@apache.org">Adam Murdoch</a>
027: * @version $Revision: 480428 $ $Date: 2006-11-28 22:15:24 -0800 (Tue, 28 Nov 2006) $
028: */
029: public class FileSystemException extends IOException {
030: /**
031: * The Throwable that caused this exception to be thrown.
032: */
033: private final Throwable throwable;
034:
035: /**
036: * The message code.
037: */
038: private final String code;
039:
040: /**
041: * array of complementary info (context).
042: */
043: private final String[] info;
044:
045: /**
046: * Constructs exception with the specified detail message.
047: *
048: * @param code the error code of the message.
049: */
050: public FileSystemException(final String code) {
051: this (code, null, null);
052: }
053:
054: /**
055: * Constructs exception with the specified detail message.
056: *
057: * @param code the error code of the message.
058: * @param info0 one context information.
059: */
060: public FileSystemException(final String code, final Object info0) {
061: this (code, new Object[] { info0 }, null);
062: }
063:
064: /**
065: * Constructs exception with the specified detail message.
066: *
067: * @param code the error code of the message.
068: * @param info0 one context information.
069: * @param throwable the cause.
070: */
071: public FileSystemException(final String code, final Object info0,
072: final Throwable throwable) {
073: this (code, new Object[] { info0 }, throwable);
074: }
075:
076: /**
077: * Constructs exception with the specified detail message.
078: *
079: * @param code the error code of the message.
080: * @param info array of complementary info (context).
081: */
082: public FileSystemException(final String code, final Object[] info) {
083: this (code, info, null);
084: }
085:
086: /**
087: * Constructs exception with the specified detail message.
088: *
089: * @param code the error code of the message.
090: * @param info array of complementary info (context).
091: */
092: public FileSystemException(final String code,
093: final Throwable throwable) {
094: this (code, null, throwable);
095: }
096:
097: /**
098: * Constructs exception with the specified detail message.
099: *
100: * @param code the error code of the message.
101: * @param info array of complementary info (context).
102: * @param throwable the cause.
103: */
104: public FileSystemException(final String code, final Object[] info,
105: final Throwable throwable) {
106: super (code);
107:
108: if (info == null) {
109: this .info = new String[0];
110: } else {
111: this .info = new String[info.length];
112: for (int i = 0; i < info.length; i++) {
113: this .info[i] = String.valueOf(info[i]);
114: }
115: }
116: this .code = code;
117: this .throwable = throwable;
118: }
119:
120: /**
121: * retrieve message from bundle
122: */
123: public String getMessage() {
124: return Messages.getString(super .getMessage(), getInfo());
125: }
126:
127: /**
128: * Constructs wrapper exception.
129: *
130: * @param throwable the root cause to wrap.
131: */
132: public FileSystemException(final Throwable throwable) {
133: this (throwable.getMessage(), null, throwable);
134: }
135:
136: /**
137: * Retrieve root cause of the exception.
138: *
139: * @return the root cause
140: */
141: public final Throwable getCause() {
142: return throwable;
143: }
144:
145: /**
146: * Retrieve error code of the exception.
147: * Could be used as key for internationalization.
148: *
149: * @return the code.
150: */
151: public String getCode() {
152: return code;
153: }
154:
155: /**
156: * Retrieve array of complementary info (context).
157: * Could be used as parameter for internationalization.
158: *
159: * @return the context info.
160: */
161: public String[] getInfo() {
162: return info;
163: }
164: }
|