package jscl.text; import org.solovyev.common.msg.AbstractMessage; import org.solovyev.common.msg.Message; import org.solovyev.common.msg.MessageLevel; import org.solovyev.common.msg.MessageType; import javax.annotation.Nonnull; import javax.annotation.Nullable; import java.util.Arrays; import java.util.List; import java.util.Locale; import java.util.ResourceBundle; public class ParseException extends Exception implements Message { private int position; @Nonnull private String expression; @Nonnull private String messageCode; @Nonnull private List<?> parameters; ParseException() { } public ParseException(int position, @Nonnull String expression, @Nonnull String messageCode, @Nullable Object... parameters) { set(position, expression, messageCode, parameters == null || parameters.length == 0 ? java.util.Collections.emptyList() : Arrays.asList(parameters)); } void set(int position, @Nonnull String expression, @Nonnull String messageCode, @Nonnull List<?> parameters) { this.position = position; this.expression = expression; this.messageCode = messageCode; this.parameters = parameters; } @Nonnull public String getMessageCode() { return messageCode; } @Nonnull public List<Object> getParameters() { return (List<Object>) parameters; } @Nonnull @Override public MessageLevel getMessageLevel() { return MessageType.error; } @Nonnull @Override public String getLocalizedMessage(@Nonnull Locale locale) { final ResourceBundle rb = ResourceBundle.getBundle("jscl/text/msg/messages", locale); return AbstractMessage.makeMessage(locale, rb.getString(getMessageCode()), parameters, MessageType.error); } public int getPosition() { return position; } @Nonnull public String getExpression() { return expression; } @Override public boolean equals(Object o) { if (this == o) return true; if (o == null || getClass() != o.getClass()) return false; ParseException exception = (ParseException) o; if (position != exception.position) return false; if (!expression.equals(exception.expression)) return false; if (!messageCode.equals(exception.messageCode)) return false; return parameters.equals(exception.parameters); } @Override public int hashCode() { int result = position; result = 31 * result + expression.hashCode(); result = 31 * result + messageCode.hashCode(); result = 31 * result + parameters.hashCode(); return result; } }