/*******************************************************************************
* Copyright (c) 2012-2017 Codenvy, S.A.
* 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
*
* Contributors:
* Codenvy, S.A. - initial API and implementation
*******************************************************************************/
package org.eclipse.che.maven.util;
import org.jdom.Attribute;
import org.jdom.Element;
import org.jdom.Text;
import java.util.List;
import java.util.Objects;
/**
* Utility methods for JDOM classes.
*
* @author Evgen Vidolob
*/
public class JdomUtil {
public static boolean isElementEquals(Element e1, Element e2) {
if (e1 == null && e2 == null) {
return true;
}
if (e1 == null || e2 == null) {
return false;
}
return Objects.equals(e1.getName(), e2.getName()) && isAttributesEqual(e1.getAttributes(), e2.getAttributes());
}
private static boolean isAttributesEqual(List l1, List l2) {
if (l1.size() != l2.size()) {
return false;
}
for (int i = 0; i < l1.size(); i++) {
if (!isAttributeEqual((Attribute)l1.get(i), (Attribute)l2.get(i))) {
return false;
}
}
return true;
}
private static boolean isAttributeEqual(Attribute a1, Attribute a2) {
return a1.getName().equals(a2.getName()) && a1.getValue().equals(a2.getValue());
}
public static int getElementHash(Element element) {
return getHash(0, element);
}
private static int getHash(int hash, Element element) {
hash = sumHash(hash, element.getName());
for (Object object : element.getAttributes()) {
Attribute attribute = (Attribute)object;
hash = sumHash(hash, attribute.getName());
hash = sumHash(hash, attribute.getValue());
}
for (Object o : element.getContent()) {
if (o instanceof Element) {
hash = getHash(hash, (Element)o);
} else if (o instanceof Text) {
String text = ((Text)o).getText();
if (!isNullOrWhitespace(text)) {
hash = sumHash(hash, text);
}
}
}
return hash;
}
private static int sumHash(int hash, String element) {
return hash * 31 + element.hashCode();
}
public static boolean isNullOrWhitespace(String s) {
if (s == null) {
return true;
}
return s.isEmpty() | s.trim().isEmpty();
}
}