com.liferay.util.xml.descriptor.SimpleXMLDescriptor Maven / Gradle / Ivy
/**
* Copyright (c) 2000-present Liferay, Inc. All rights reserved.
*
* This library is free software; you can redistribute it and/or modify it under
* the terms of the GNU Lesser General Public License as published by the Free
* Software Foundation; either version 2.1 of the License, or (at your option)
* any later version.
*
* This library is distributed in the hope that it will be useful, but WITHOUT
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
* FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more
* details.
*/
package com.liferay.util.xml.descriptor;
import com.liferay.portal.kernel.util.ArrayUtil;
import com.liferay.util.xml.ElementComparator;
import com.liferay.util.xml.ElementIdentifier;
import org.dom4j.Document;
import org.dom4j.Element;
/**
* @author Jorge Ferrer
*/
public abstract class SimpleXMLDescriptor implements XMLDescriptor {
@Override
public boolean areEqual(Element el1, Element el2) {
String name1 = el1.getName();
String name2 = el2.getName();
if ((name1 == null) || !name1.equals(name2)) {
return false;
}
if (ArrayUtil.contains(getUniqueElements(), el1.getName())) {
return true;
}
ElementIdentifier[] elIds = getElementsIdentifiedByAttribute();
for (int i = 0; i < elIds.length; i++) {
if (name1.equals(elIds[i].getElementName())) {
if (_compareAttribute(
el1, el2, elIds[i].getIdentifierName()) == 0) {
return true;
}
else {
return false;
}
}
}
elIds = getElementsIdentifiedByChild();
for (int i = 0; i < elIds.length; i++) {
if (name1.equals(elIds[i].getElementName())) {
if (_compareChildText(
el1, el2, elIds[i].getIdentifierName()) == 0) {
return true;
}
else {
return false;
}
}
}
ElementComparator comparator = new ElementComparator();
if (comparator.compare(el1, el2) == 0) {
return true;
}
else {
return false;
}
}
@Override
public abstract boolean canHandleType(String doctype, Document root);
@Override
public boolean canJoinChildren(Element element) {
return ArrayUtil.contains(getJoinableElements(), element.getName());
}
@Override
public String[] getChildrenOrder(Element parentElement) {
return new String[0];
}
public ElementIdentifier[] getElementsIdentifiedByAttribute() {
return new ElementIdentifier[0];
}
public ElementIdentifier[] getElementsIdentifiedByChild() {
return new ElementIdentifier[0];
}
public String[] getJoinableElements() {
return new String[0];
}
@Override
public String[] getRootChildrenOrder() {
return new String[0];
}
public String[] getUniqueElements() {
return new String[0];
}
private int _compareAttribute(Element el1, Element el2, String attrName) {
String name1 = el1.attributeValue(attrName);
String name2 = el2.attributeValue(attrName);
if ((name1 == null) || (name2 == null)) {
return -1;
}
return name1.compareTo(name2);
}
private int _compareChildText(Element el1, Element el2, String childName) {
Element child1 = _getChild(el1, childName);
Element child2 = _getChild(el2, childName);
if ((child1 == null) || (child2 == null)) {
return -1;
}
String name1 = child1.getText();
String name2 = child2.getText();
if ((name1 == null) || (name2 == null)) {
return -1;
}
return name1.compareTo(name2);
}
private Element _getChild(Element parent, String childName) {
Element child = parent.element(childName);
/*if (child == null) {
child = parent.element(childName, parent.getNamespace());
}*/
return child;
}
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy