Java tutorial
/** * Copyright (c) 1997-2013, www.tinygroup.org (luo_guo@icloud.com). * * Licensed under the GPL, Version 3.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.gnu.org/licenses/gpl.html * * 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.tinygroup.config.util; import java.io.IOException; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; import java.util.regex.Matcher; import java.util.regex.Pattern; import org.apache.commons.lang.StringUtils; import org.tinygroup.commons.io.StreamUtil; import org.tinygroup.commons.tools.CollectionUtil; import org.tinygroup.config.ConfigurationManager; import org.tinygroup.config.impl.ConfigurationManagerImpl; import org.tinygroup.parser.filter.NameFilter; import org.tinygroup.vfs.FileObject; import org.tinygroup.xmlparser.node.XmlNode; import org.tinygroup.xmlparser.parser.XmlStringParser; /** * ???? * * @author luoguo */ public final class ConfigurationUtil { private static ConfigurationManager configurationManager = new ConfigurationManagerImpl(); // private static Logger logger = // LoggerFactory.getLogger(ConfigurationUtil.class); private ConfigurationUtil() { } public static ConfigurationManager getConfigurationManager() { return configurationManager; } /** * ?? * * @param applicationNode * @param componentNode * @param attributeName * @return */ public static String getPropertyName(XmlNode applicationNode, XmlNode componentNode, String attributeName) { String value = null; checkNodeName(applicationNode, componentNode); if (applicationNode != null) { value = applicationNode.getAttribute(attributeName); } if (value == null && componentNode != null) { value = componentNode.getAttribute(attributeName); } return value; } /** * ??<br> * ?Null"" * * @param applicationNode * @param componentNode * @param attributeName * @param defaultValue * @return */ public static String getPropertyName(XmlNode applicationNode, XmlNode componentNode, String attributeName, String defaultValue) { String value = getPropertyName(applicationNode, componentNode, attributeName); if (value == null || value.trim().length() == 0) { value = defaultValue; } return value; } private static void checkNodeName(XmlNode applicationNode, XmlNode componentNode) { if (applicationNode == null || componentNode == null) {// return; } String applicationNodeName = applicationNode.getNodeName(); String componentNodeName = componentNode.getNodeName(); if (applicationNodeName != null && componentNodeName != null && !applicationNodeName.equals(componentNodeName)) { throw new RuntimeException( applicationNodeName + "" + componentNodeName + "????"); } } /** * ??? * * @param applicationNode * @param componentNode * @param keyPropertyName * @return */ public static List<XmlNode> combineSubList(XmlNode applicationNode, XmlNode componentNode, String nodeName, String keyPropertyName) { checkNodeName(applicationNode, componentNode); List<XmlNode> result = new ArrayList<XmlNode>(); if (applicationNode == null && componentNode == null) { return result; } List<XmlNode> applicationNodeList = getNodeList(applicationNode, nodeName); List<XmlNode> componentNodeList = getNodeList(componentNode, nodeName); if (componentNodeList.isEmpty()) {// ? result.addAll(applicationNodeList); return result; } if (applicationNodeList.isEmpty()) {// ? result.addAll(componentNodeList); return result; } combineSubList(keyPropertyName, result, applicationNodeList, componentNodeList); return result; } private static List<XmlNode> getNodeList(XmlNode node, String nodeName) { List<XmlNode> nodeList = new ArrayList<XmlNode>(); if (node != null) { nodeList = node.getSubNodes(nodeName); } return nodeList; } private static void combineSubList(String keyPropertyName, List<XmlNode> result, List<XmlNode> applicationNodeList, List<XmlNode> componentNodeList) { Map<String, XmlNode> appConfigMap = nodeListToMap(applicationNodeList, keyPropertyName); Map<String, XmlNode> compConfigMap = nodeListToMap(componentNodeList, keyPropertyName); for (String key : appConfigMap.keySet()) { XmlNode compNode = compConfigMap.get(key); XmlNode appNode = appConfigMap.get(key); if (compNode == null) { result.add(appNode); } else {// ? result.add(combine(appNode, compNode)); } } for (String key : compConfigMap.keySet()) { // ??? XmlNode appNode = appConfigMap.get(key); // ??? if (appNode == null) { result.add(compConfigMap.get(key)); } } } /** * ?? * * @param applicationNode * @param componentNode * @return */ public static XmlNode combineXmlNode(XmlNode applicationNode, XmlNode componentNode) { checkNodeName(applicationNode, componentNode); if (applicationNode == null && componentNode == null) { return null; } XmlNode result = null; if (applicationNode != null && componentNode == null) { result = applicationNode; } else if (applicationNode == null && componentNode != null) { result = componentNode; } else { result = combine(applicationNode, componentNode); } return result; } private static XmlNode combine(XmlNode appNode, XmlNode compNode) { XmlNode result = new XmlNode(appNode.getNodeName()); result.setAttribute(compNode.getAttributes()); result.setAttribute(appNode.getAttributes()); if (!CollectionUtil.isEmpty(compNode.getSubNodes())) { result.addAll(compNode.getSubNodes()); } if (!CollectionUtil.isEmpty(appNode.getSubNodes())) { result.addAll(appNode.getSubNodes()); } return result; } private static Map<String, XmlNode> nodeListToMap(List<XmlNode> subNodes, String keyPropertyName) { Map<String, XmlNode> nodeMap = new HashMap<String, XmlNode>(); for (XmlNode node : subNodes) { String value = node.getAttribute(keyPropertyName); nodeMap.put(value, node); } return nodeMap; } /** * ?? * * @param applicationNode * @param componentNode * @return */ public static List<XmlNode> combineSubList(XmlNode applicationNode, XmlNode componentNode) { checkNodeName(applicationNode, componentNode); List<XmlNode> result = new ArrayList<XmlNode>(); if (applicationNode == null && componentNode == null) { return result; } if (componentNode != null && componentNode.getSubNodes() != null) { result.addAll(componentNode.getSubNodes()); } if (applicationNode != null && applicationNode.getSubNodes() != null) { result.addAll(applicationNode.getSubNodes()); } return result; } /** * ?? * * @param nodeName * @param applicationNode * @param componentNode * @return */ public static List<XmlNode> combineSubList(String nodeName, XmlNode applicationNode, XmlNode componentNode) { checkNodeName(applicationNode, componentNode); List<XmlNode> result = new ArrayList<XmlNode>(); if (applicationNode == null && componentNode == null) { return result; } if (componentNode != null && componentNode.getSubNodes(nodeName) != null) { result.addAll(componentNode.getSubNodes(nodeName)); } if (applicationNode != null && applicationNode.getSubNodes(nodeName) != null) { result.addAll(applicationNode.getSubNodes(nodeName)); } return result; } /** * ?? * * @param nodeName * @param applicationNode * @param componentNode * @return */ public static List<XmlNode> combineFindNodeList(String nodeName, XmlNode applicationNode, XmlNode componentNode) { checkNodeName(applicationNode, componentNode); List<XmlNode> result = new ArrayList<XmlNode>(); if (applicationNode == null && componentNode == null) { return result; } if (componentNode != null) { NameFilter<XmlNode> nameFilter = new NameFilter<XmlNode>(componentNode); List<XmlNode> nodes = nameFilter.findNodeList(nodeName); if (nodes != null) { result.addAll(nodes); } } if (applicationNode != null) { NameFilter<XmlNode> nameFilter = new NameFilter<XmlNode>(applicationNode); List<XmlNode> nodes = nameFilter.findNodeList(nodeName); if (nodes != null) { result.addAll(nodes); } } return result; } public static String replace(String content, String name, String value) { Pattern pattern = Pattern.compile("[{]" + name + "[}]"); Matcher matcher = pattern.matcher(content); StringBuilder buf = new StringBuilder(); int curpos = 0; while (matcher.find()) { buf.append(content.substring(curpos, matcher.start())); curpos = matcher.end(); buf.append(value); continue; } buf.append(content.substring(curpos)); return buf.toString(); } public static XmlNode parseXmlFromFileObject(FileObject fileObject) throws IOException { String config = StreamUtil.readText(fileObject.getInputStream(), "UTF-8", true); return new XmlStringParser().parse(config).getRoot(); } /** * ??? * * @param value * @param proMap * @return */ public static String replace(String value, Map<String, String> proMap) { Pattern pattern = Pattern.compile("(\\{[^\\}]*\\})"); Matcher matcher = pattern.matcher(value); int curpos = 0; StringBuilder buf = new StringBuilder(); while (matcher.find()) { buf.append(value.substring(curpos, matcher.start())); curpos = matcher.end(); String var = value.substring(matcher.start(), curpos); buf.append(proMap.get(StringUtils.substring(var, 1, var.length() - 1))); continue; } buf.append(value.substring(curpos)); return buf.toString(); } }