001 /*******************************************************************************
002 * Copyright (C) PicoContainer Organization. All rights reserved.
003 * ---------------------------------------------------------------------------
004 * The software in this package is published under the terms of the BSD style
005 * license a copy of which has been included with this distribution in the
006 * LICENSE.txt file.
007 ******************************************************************************/
008 package org.picocontainer.script;
009
010 import org.picocontainer.PicoException;
011
012 /**
013 * Thrown when a given script type extension has no corresponding builder. The
014 * message will also indicate all supported builders.
015 *
016 * @author Michael Rimov
017 */
018 @SuppressWarnings("serial")
019 public class UnsupportedScriptTypeException extends PicoException {
020
021 private final String specifiedFileExtension;
022
023 private final String[] allSupportedFileExtensions;
024
025 public UnsupportedScriptTypeException(String specifiedFileExtension, String[] allSupportedFileExtensions) {
026 super();
027 this.specifiedFileExtension = specifiedFileExtension;
028 this.allSupportedFileExtensions = allSupportedFileExtensions;
029 }
030
031 /**
032 * Builds the exception message from the fields
033 *
034 * @return The exception message
035 */
036 private String buildExceptionMessage() {
037 StringBuffer message = new StringBuffer(48);
038 message.append("Unsupported file extension '");
039 message.append(specifiedFileExtension);
040 message.append("'. Supported extensions are: [");
041
042 if (allSupportedFileExtensions != null) {
043 boolean needPipe = false;
044 for (String allSupportedFileExtension : allSupportedFileExtensions) {
045 if (needPipe) {
046 message.append("|");
047 } else {
048 needPipe = true;
049 }
050
051 message.append(allSupportedFileExtension);
052 }
053
054 message.append("].");
055 } else {
056 message.append(" null ");
057 }
058
059 return message.toString();
060 }
061
062 @Override
063 public String getMessage() {
064 return buildExceptionMessage();
065 }
066
067 public String[] getSystemSupportedExtensions() {
068 return allSupportedFileExtensions;
069 }
070
071 public String getRequestedExtension() {
072 return specifiedFileExtension;
073 }
074
075 }