/** * Copyright (c) 2014-2017 by the respective copyright holders. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html */ package org.eclipse.smarthome.config.core.validation; import java.util.Arrays; import java.util.Collections; import org.eclipse.smarthome.config.core.ConfigDescription; import org.eclipse.smarthome.config.core.ConfigDescriptionParameter; import com.google.common.base.Preconditions; /** * The {@link ConfigValidationMessage} is the result of a specific {@link ConfigDescriptionParameter} * validation, e.g. the validation of the required flag or of the min/max attribute. It contains the name of the * configuration parameter whose value does not meet its declaration in the {@link ConfigDescription}, a default * message, a message key to be used for internationalization and an optional content to be passed as parameters into * the message. * * @author Thomas Höfer - Initial contribution */ public final class ConfigValidationMessage { /** The name of the configuration parameter whose value does not meet its {@link ConfigDescription} declaration. */ public final String parameterName; /** The default message describing the validation issue. */ public final String defaultMessage; /** The key of the message to be used for internationalization. */ public final String messageKey; /** The optional content to be passed as message parameters into the message. */ public final Object[] content; /** * Creates a new {@link ConfigValidationMessage} * * @param parameterName the parameter name * @param defaultMessage the default message * @param messageKey the message key to be used for internationalization */ public ConfigValidationMessage(String parameterName, String defaultMessage, String messageKey) { this(parameterName, defaultMessage, messageKey, Collections.<String> emptyList()); } /** * Creates a new {@link ConfigValidationMessage} * * @param parameterName the parameter name * @param defaultMessage the default message * @param messageKey the message key to be used for internationalization * @param content the content to be passed as parameters into the message */ public ConfigValidationMessage(String parameterName, String defaultMessage, String messageKey, Object... content) { Preconditions.checkNotNull(parameterName, "Parameter Name must not be null"); Preconditions.checkNotNull(defaultMessage, "Default message must not be null"); Preconditions.checkNotNull(messageKey, "Message key must not be null"); Preconditions.checkNotNull(content, "Content must not be null"); this.parameterName = parameterName; this.defaultMessage = defaultMessage; this.messageKey = messageKey; this.content = content; } @Override public int hashCode() { final int prime = 31; int result = 1; result = prime * result + Arrays.hashCode(content); result = prime * result + ((defaultMessage == null) ? 0 : defaultMessage.hashCode()); result = prime * result + ((messageKey == null) ? 0 : messageKey.hashCode()); result = prime * result + ((parameterName == null) ? 0 : parameterName.hashCode()); return result; } @Override public boolean equals(Object obj) { if (this == obj) return true; if (obj == null) return false; if (getClass() != obj.getClass()) return false; ConfigValidationMessage other = (ConfigValidationMessage) obj; if (!Arrays.equals(content, other.content)) return false; if (defaultMessage == null) { if (other.defaultMessage != null) return false; } else if (!defaultMessage.equals(other.defaultMessage)) return false; if (messageKey == null) { if (other.messageKey != null) return false; } else if (!messageKey.equals(other.messageKey)) return false; if (parameterName == null) { if (other.parameterName != null) return false; } else if (!parameterName.equals(other.parameterName)) return false; return true; } @Override public String toString() { return "ConfigDescriptionValidationMessage [parameterName=" + parameterName + ", defaultMessage=" + defaultMessage + ", messageKey=" + messageKey + ", content=" + Arrays.toString(content) + "]"; } }