📄 merge.java
字号:
/*
* Merge.java
*
* Created on 04 November 2006, 18:55
*
* To change this template, choose Tools | Template Manager
* and open the template in the editor.
*/
package uk.ac.kent.dpa.custom.authz.util;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.parsers.ParserConfigurationException;
import org.w3c.dom.*;
import javax.xml.parsers.*;
import java.util.*;
/**
*
* @author ls97
*/
public class Merge {
/** Creates a new instance of Merge */
public Merge() {
}
public Element merge(Element e1, Element e2) throws AuthzException {
if (e1==null) return e2;
if (e2==null) return e1;
DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
factory.setValidating(false);
Document doc = null;
try {
doc = factory.newDocumentBuilder().newDocument();
} catch (ParserConfigurationException pe) {
throw new AuthzException("XML parser error:"+pe);
}
Element request = doc.createElement("Request");
request.setAttribute("xmlns","urn:oasis:names:tc:xacml:1.0:context");
request.setAttribute("xmlns:xsi","http://www.w3.org/2001/XMLSchema-instance");
request.setAttribute("xmlns:permis","http://issrg.cs.kent.ac.uk");
Element subject = doc.createElement("Subject");
Element resource = doc.createElement("Resource");
Element action = doc.createElement("Action");
Element environment = doc.createElement("Environment");
NodeList list1 = e1.getChildNodes();
NodeList list2 = e2.getChildNodes();
this.merge(subject,list1,doc);
this.merge(subject,list2,doc);
this.merge(resource,list1,doc);
this.merge(resource,list2,doc);
this.merge(action,list1,doc);
this.merge(action,list2,doc);
this.merge(environment,list1,doc);
this.merge(environment,list2,doc);
request.appendChild(subject);
request.appendChild(resource);
request.appendChild(action);
request.appendChild(environment);
return request;
}
private void merge(Element result, NodeList source, Document doc) {
for (int i=0; i<source.getLength(); i++) {
Node node = source.item(i);
if (Text.class.isAssignableFrom(node.getClass())) continue;
if (node.getNodeName().equals(result.getNodeName())) {
NodeList attrs = node.getChildNodes();
for (int j=0; j<attrs.getLength(); j++) {
Node attr = attrs.item(j);
if (Text.class.isAssignableFrom(attr.getClass())) continue;
String id = ((Element)attr).getAttribute("AttributeId");
String type = ((Element)attr).getAttribute("DataType");
Element attrEle = doc.createElement(attr.getNodeName());
attrEle.setAttribute("AttributeId",id);
attrEle.setAttribute("DataType",type);
NodeList values = attr.getChildNodes();
for (int k=0; k<values.getLength(); k++) {
Node value = values.item(k);
if (Text.class.isAssignableFrom(value.getClass())) continue;
Element valEle = doc.createElement(value.getNodeName());
NodeList texts = value.getChildNodes();
for (int l=0; l<texts.getLength(); l++) {
Node text = texts.item(l);
Text t = (Text)text;
String str = t.getNodeValue();
Text txt = doc.createTextNode(str);
valEle.appendChild(txt);
}
attrEle.appendChild(valEle);
}
result.appendChild(attrEle);
}
}
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -