001 package org.nanocontainer.script; 002 003 import org.picocontainer.PicoException; 004 005 /** 006 * Indicates that a given file extension has no corresponding builder. The 007 * message will also indicate all supported builders. 008 * @author Michael Rimov 009 * @version 1.0 010 */ 011 public class UnsupportedScriptTypeException extends PicoException { 012 013 private final String specifiedFileExtension; 014 015 private final String[] allSupportedFileExtensions; 016 017 public UnsupportedScriptTypeException(String specifiedFileExtension, String[] allSupportedFileExtensions) { 018 super(); 019 this.specifiedFileExtension = specifiedFileExtension; 020 this.allSupportedFileExtensions = allSupportedFileExtensions; 021 } 022 023 024 025 /** 026 * Transforms the constructor arguments into a real exption 027 * @param specifiedFileExtension String 028 * @param allSupportedFileExtensions String[] 029 * @return String 030 */ 031 private String buildExceptionMessage() { 032 StringBuffer message = new StringBuffer(48); 033 message.append("Unsupported file extension '"); 034 message.append(specifiedFileExtension); 035 message.append("'. Supported extensions are: ["); 036 037 if (allSupportedFileExtensions != null) { 038 boolean needPipe = false; 039 for (int i = 0; i < allSupportedFileExtensions.length; i++) { 040 if (needPipe) { 041 message.append("|"); 042 } else { 043 needPipe = true; 044 } 045 046 message.append(allSupportedFileExtensions[i]); 047 } 048 049 message.append("]."); 050 } else { 051 message.append(" null "); 052 } 053 054 return message.toString(); 055 } 056 057 public String getMessage() { 058 return buildExceptionMessage(); 059 } 060 061 public String[] getSystemSupportedExtensions() { 062 return allSupportedFileExtensions; 063 } 064 065 public String getRequestedExtension() { 066 return specifiedFileExtension; 067 } 068 069 }