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.math.exception; 018 019 import java.util.Locale; 020 021 import org.apache.commons.math.exception.util.ArgUtils; 022 import org.apache.commons.math.exception.util.MessageFactory; 023 import org.apache.commons.math.exception.util.Localizable; 024 import org.apache.commons.math.exception.util.LocalizedFormats; 025 026 /** 027 * Base class for all unsupported features. 028 * It is used for all the exceptions that share the semantics of the standard 029 * {@link UnsupportedOperationException}, but must also provide a localized 030 * message. 031 * 032 * @since 2.2 033 * @version $Revision$ $Date$ 034 */ 035 public class MathUnsupportedOperationException extends UnsupportedOperationException implements MathThrowable { 036 037 /** Serializable version Id. */ 038 private static final long serialVersionUID = -6024911025449780478L; 039 040 /** 041 * Pattern used to build the message (specific context). 042 */ 043 private final Localizable specific; 044 /** 045 * Arguments used to build the message. 046 */ 047 private final Object[] arguments; 048 049 /** 050 * @param args Arguments. 051 */ 052 public MathUnsupportedOperationException(Object ... args) { 053 this(null, args); 054 } 055 /** 056 * @param specific Message pattern providing the specific context of 057 * the error. 058 * @param args Arguments. 059 */ 060 public MathUnsupportedOperationException(Localizable specific, 061 Object ... args) { 062 this.specific = specific; 063 arguments = ArgUtils.flatten(args); 064 } 065 066 /** {@inheritDoc} */ 067 public Localizable getSpecificPattern() { 068 return specific; 069 } 070 071 /** {@inheritDoc} */ 072 public Localizable getGeneralPattern() { 073 return LocalizedFormats.UNSUPPORTED_OPERATION; 074 } 075 076 /** {@inheritDoc} */ 077 public Object[] getArguments() { 078 return arguments.clone(); 079 } 080 081 /** 082 * Get the message in a specified locale. 083 * 084 * @param locale Locale in which the message should be translated. 085 * 086 * @return the localized message. 087 */ 088 public String getMessage(final Locale locale) { 089 return MessageFactory.buildMessage(locale, 090 specific, 091 LocalizedFormats.UNSUPPORTED_OPERATION, 092 arguments); 093 } 094 095 /** {@inheritDoc} */ 096 @Override 097 public String getMessage() { 098 return getMessage(Locale.US); 099 } 100 101 /** {@inheritDoc} */ 102 @Override 103 public String getLocalizedMessage() { 104 return getMessage(Locale.getDefault()); 105 } 106 }