📄 jahiausermanagerroutingservice.java
字号:
if (curProviderEntry instanceof String) { String curProviderKey = (String) curProviderEntry; UserManagerProviderBean curProviderBean = (UserManagerProviderBean) providersTable.get(curProviderKey); JahiaUserManagerProvider curProviderInstance = curProviderBean.getInstance(); if (curProviderInstance != null) { tmpProviderInstances.add(curProviderInstance); } } } } } if (tmpProviderInstances.size() == 0) { tmpProviderInstances = new Vector(); Iterator providerIter = sortedProviders.iterator (); while (providerIter.hasNext()) { UserManagerProviderBean curBean = (UserManagerProviderBean) providerIter.next (); JahiaUserManagerProvider curProvider = curBean.getInstance(); tmpProviderInstances.add(curProvider); } } return tmpProviderInstances; } private boolean loadConfiguration(String configFileName) throws JahiaException { Document documentRoot = null; try { DocumentBuilderFactory dfactory = DocumentBuilderFactory.newInstance(); // dfactory.setValidating(true); // create only parsers that are validating DocumentBuilder docBuilder = dfactory.newDocumentBuilder(); FileInputStream configStream = new FileInputStream(configFileName); documentRoot = docBuilder.parse(configStream); documentRoot.normalize(); // clean up DOM tree a little } catch (Throwable t) { throw new JahiaException ("JahiaUserManagerRoutingService.loadConfiguration", "Exception while loading configuration", JahiaException.CRITICAL, JahiaException.CONFIG_ERROR, t); } Element rootTag = documentRoot.getDocumentElement(); if (!rootTag.getTagName ().equals (JahiaUserManagerRoutingService.XML_ROOT_TAG)) { throw new JahiaException("JahiaUserManagerRoutingService.loadConfiguration", "Invalid root tag in configuration. Expected " + this.XML_ROOT_TAG + ", found " + rootTag.getTagName(), JahiaException.CRITICAL, JahiaException.CONFIG_ERROR); } this.providersTable = getProvidersFromDOM( rootTag ); sortedProviders.addAll (providersTable.values ()); this.criteriaList = getCriteriasFromDOM( rootTag ); return true; } private Map getProvidersFromDOM( Element rootElement ) throws JahiaException { Map result = new InsertionSortedMap (); // we have to do copies because we cannot do nested node list parsing... NodeList providerElementList = rootElement.getElementsByTagName ( JahiaUserManagerRoutingService.XML_PROVIDER_ROOT_TAG); Vector providerElements = new Vector(); for (int i = 0; i < providerElementList.getLength(); i++) { providerElements.add((Element) providerElementList.item(i)); } Enumeration providerEnum = providerElements.elements(); int providerCounter = 0; while (providerEnum.hasMoreElements()) { Element curProviderElement = (Element) providerEnum.nextElement(); UserManagerProviderBean providerBean = getProviderFromDOM (curProviderElement, providerCounter); if (providerBean != null) { if (providerBean.getIsDefault()) { /** @todo FIXME : this is a class variable set, not very * elegant... how can we avoid this ? */ this.defaultProviderInstance = providerBean.getInstance(); } result.put(providerBean.getKey(), providerBean); } providerCounter++; } return result; } private Vector getCriteriasFromDOM( Element rootElement ) throws JahiaException { Vector result = new Vector(); // we have to do copies because we cannot do nested node list parsing... NodeList criteriaElementList = rootElement.getElementsByTagName ( JahiaUserManagerRoutingService.XML_CRITERIA_ROOT_TAG); Vector criteriaElements = new Vector(); for (int i = 0; i < criteriaElementList.getLength(); i++) { criteriaElements.add((Element) criteriaElementList.item(i)); } Enumeration criteriaEnum = criteriaElements.elements(); while (criteriaEnum.hasMoreElements()) { Element curCriteriaElement = (Element) criteriaEnum.nextElement(); RoutingCriteria curCriteria = getCriteriaFromDOM(curCriteriaElement); if (curCriteria != null) { result.add(curCriteria); } } return result; } /** * Returns a UserManagerProviderBean from a XML DOM. Format : * <provider> * <key>jahia_db</key> * <class>org.jahia.services.usermanager.JahiaUserManagerDBProvider</class> * <title>Jahia User Manager Database Provider</title> * <description> * ... * </description> * <is-default>true</is-default> * </provider> * * @param providerElement the Element containing the tag for a provider * DOM. * * @return UserManagerProviderBean a bean constructed by loading the values * from the XML DOM. * * @throws JahiaException */ private UserManagerProviderBean getProviderFromDOM (Element providerElement, int providerCounter) throws JahiaException { if (!providerElement.getTagName ().equals ( JahiaUserManagerRoutingService.XML_PROVIDER_ROOT_TAG)) { throw new JahiaException("JahiaUserManagerRoutingService.getProviderFromDOM", "May not call getProviderFromDOM on elements other than " + this.XML_PROVIDER_ROOT_TAG, JahiaException.CRITICAL, JahiaException.CONFIG_ERROR); } UserManagerProviderBean result = null; String key = getElementValue (JahiaUserManagerRoutingService.XML_PROVIDER_KEY_TAG, providerElement); String className = getElementValue ( JahiaUserManagerRoutingService.XML_PROVIDER_CLASS_TAG, providerElement); String title = getElementValue (JahiaUserManagerRoutingService.XML_PROVIDER_TITLE_TAG, providerElement); String description = getElementValue ( JahiaUserManagerRoutingService.XML_PROVIDER_DESCRIPTION_TAG, providerElement); String isDefaultStr = getElementValue ( JahiaUserManagerRoutingService.XML_PROVIDER_ISDEFAULT_TAG, providerElement); boolean isDefault = ("true".equals(isDefaultStr)); boolean isReadOnly = false; try { // this tag is currently optional, so if we don't find it we set it to false by default String isReadOnlyStr = getElementValue ( JahiaUserManagerRoutingService.XML_PROVIDER_ISREADONLY_TAG, providerElement); isReadOnly = ("true".equals(isReadOnlyStr)); } catch (JahiaException je) { JahiaConsole.println("JahiaUserManagerRoutingService.getProviderFromDOM", "Warning : error loading tag <" + this.XML_PROVIDER_ISREADONLY_TAG + ">. Please update your configuration file to include it !"); isReadOnly = false; } int priority = 99; try { String priorityStr = getElementValue ( JahiaUserManagerRoutingService.XML_PROVIDER_PRIORITY_TAG, providerElement); priority = Integer.parseInt (priorityStr); } catch (Exception e) { // optional parameter, ignore exception priority = providerCounter; } result = new UserManagerProviderBean (key, className, title, description, isDefault, isReadOnly, priority); return result; } /** * Returns a RoutingCriteria from a XML DOM. Format : * <criteria> * <key>jahia_db_criteria</key> * <description> * ... * </description> * <condition propertyName="user.key" propertyValue="{jahia_db}*"/> * <condition ... /> * <provider-destination>jahia_db</provider-destination> * </criteria> * * @param criteriaElement the Element containing the tag for a criteria * DOM. * * @return UserManagerProviderBean a bean constructed by loading the values * from the XML DOM. * * @throws JahiaException */ private RoutingCriteria getCriteriaFromDOM (Element criteriaElement) throws JahiaException { RoutingCriteria result = null; if (!criteriaElement.getTagName ().equals ( JahiaUserManagerRoutingService.XML_CRITERIA_ROOT_TAG)) { throw new JahiaException("JahiaUserManagerRoutingService.getProviderFromDOM", "May not call getCriteriaFromDOM on elements other than " + this.XML_CRITERIA_ROOT_TAG, JahiaException.CRITICAL, JahiaException.CONFIG_ERROR); } String key = getElementValue (JahiaUserManagerRoutingService.XML_CRITERIA_KEY_TAG, criteriaElement); String description = getElementValue ( JahiaUserManagerRoutingService.XML_CRITERIA_DESCRIPTION_TAG, criteriaElement); Properties conditions = getConditionsFromDOM (criteriaElement); String providerDestination = getElementValue ( JahiaUserManagerRoutingService.XML_CRITERIA_DESTINATION_TAG, criteriaElement); result = new RoutingCriteria(key, description, conditions, providerDestination); return result; } private Properties getConditionsFromDOM (Element criteriaElement) throws JahiaException { Properties result = new Properties(); NodeList criteriaElementList = criteriaElement.getElementsByTagName ( JahiaUserManagerRoutingService.XML_CRITERIA_CONDITION_TAG); for (int i = 0; i < criteriaElementList.getLength(); i++) { Element curConditionElement = (Element) criteriaElementList.item(i); NamedNodeMap attrib = curConditionElement.getAttributes(); Node propertyNameAttrib = attrib.getNamedItem ( JahiaUserManagerRoutingService.XML_CRITERIA_CONDITION_PROPNAME_ATTR); if (propertyNameAttrib == null) { throw new JahiaException("JahiaUserManagerRoutingService.getConditionsFromDOM", this.XML_CRITERIA_CONDITION_PROPNAME_ATTR + " attribute not found on tag " + curConditionElement.getTagName(), JahiaException.CRITICAL, JahiaException.CONFIG_ERROR); } String propertyName = propertyNameAttrib.getNodeValue(); Node propertyValueAttrib = attrib.getNamedItem ( JahiaUserManagerRoutingService.XML_CRITERIA_CONDITION_PROPVALUE_ATTR); if (propertyValueAttrib == null) { throw new JahiaException("JahiaUserManagerRoutingService.getConditionsFromDOM", this.XML_CRITERIA_CONDITION_PROPVALUE_ATTR + " attribute not found on tag " + curConditionElement.getTagName(), JahiaException.CRITICAL, JahiaException.CONFIG_ERROR); } String propertyValue = propertyValueAttrib.getNodeValue(); result.setProperty(propertyName, propertyValue); } return result; } private String getElementTextValue (Element rootElement) throws JahiaException { NodeList childNodes = rootElement.getChildNodes(); StringBuffer result = new StringBuffer(); for (int i = 0; i < childNodes.getLength(); i++) { if (childNodes.item(i).getNodeType() == Node.TEXT_NODE) { result.append(childNodes.item(i).getNodeValue()); } else { throw new JahiaException("JahiaUserManagerRoutingService.getElementTextValue", "Only text values are allowed in tag " + rootElement.getTagName(), JahiaException.CRITICAL, JahiaException.CONFIG_ERROR); } } return result.toString(); } private String getElementValue(String tagName, Element parentElement) throws JahiaException { NodeList foundElements = parentElement.getElementsByTagName(tagName); if (foundElements.getLength() == 1) { return getElementTextValue((Element)foundElements.item(0)); } else { if (foundElements.getLength() != 0) { throw new JahiaException("JahiaUserManagerRoutingService.getElementValue", "Only one <" + tagName + "> is allowed in a <" + parentElement.getTagName() + "> tag.", JahiaException.CRITICAL, JahiaException.CONFIG_ERROR); } else { throw new JahiaException("JahiaUserManagerRoutingService.getElementValue", "Couldn't find tag <" + tagName + "> in <" + parentElement.getTagName() + "> tag.", JahiaException.CRITICAL, JahiaException.CONFIG_ERROR); } } }}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -