/*
* =============================================================================
*
* Copyright (c) 2011-2016, The THYMELEAF team (http://www.thymeleaf.org)
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*
* =============================================================================
*/
package org.thymeleaf.engine;
import java.util.Arrays;
/**
*
* @author Daniel Fernández
* @since 3.0.0
*
*/
public abstract class ElementName {
/*
* NOTE it is VERY important that an ElementName does NOT contain a TemplateMode, because there is a type
* of ElementName (TextElementName) that is used for 3 different template modes: TEXT, JAVASCRIPT and CSS
*/
protected final String prefix;
protected final String elementName;
protected final String[] completeElementNames;
private final int h;
protected ElementName(final String prefix, final String elementName, final String[] completeElementNames) {
super();
if (elementName == null || (elementName.length() > 0 && elementName.trim().length() == 0)) { // can be the empty string (e.g. in text modes)
throw new IllegalArgumentException("Element name cannot be null");
}
// Prefix CAN be null (if the element is not prefixed)
this.prefix = prefix;
this.elementName = elementName;
this.completeElementNames = completeElementNames;
this.h = Arrays.hashCode(this.completeElementNames);
}
public String getElementName() {
return this.elementName;
}
public boolean isPrefixed() {
return this.prefix != null;
}
public String getPrefix() {
return this.prefix;
}
public String[] getCompleteElementNames() {
return this.completeElementNames;
}
@Override
public boolean equals(final Object o) {
if (this == o) {
return true;
}
if (!(o instanceof ElementName)) {
return false;
}
final ElementName that = (ElementName) o;
if (this.h != that.h) {
return false;
}
if (!Arrays.equals(this.completeElementNames, that.completeElementNames)) {
return false;
}
return true;
}
@Override
public int hashCode() {
return this.h;
}
@Override
public String toString() {
final StringBuilder strBuilder = new StringBuilder();
strBuilder.append('{');
strBuilder.append(this.completeElementNames[0]);
for (int i = 1; i < this.completeElementNames.length; i++) {
strBuilder.append(',');
strBuilder.append(this.completeElementNames[i]);
}
strBuilder.append('}');
return strBuilder.toString();
}
}