| /******************************************************************************* |
| * Licensed to the Apache Software Foundation (ASF) under one |
| * or more contributor license agreements. See the NOTICE file |
| * distributed with this work for additional information |
| * regarding copyright ownership. The ASF licenses this file |
| * to you under the Apache License, Version 2.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.apache.org/licenses/LICENSE-2.0 |
| * |
| * 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.ofbiz.entity.config.model; |
| |
| import java.util.ArrayList; |
| import java.util.Collections; |
| import java.util.List; |
| import java.util.Map; |
| import java.util.HashMap; |
| |
| import org.ofbiz.base.lang.ThreadSafe; |
| import org.ofbiz.base.util.UtilXml; |
| import org.ofbiz.entity.GenericEntityConfException; |
| import org.w3c.dom.Element; |
| |
| /** |
| * An object that models the <code><delegator></code> element. |
| * |
| * @see <code>entity-config.xsd</code> |
| */ |
| @ThreadSafe |
| public final class DelegatorElement { |
| |
| private final String name; // type = xs:string |
| private final String entityModelReader; // type = xs:string |
| private final String entityGroupReader; // type = xs:string |
| private final String entityEcaReader; // type = xs:string |
| private final boolean entityEcaEnabled; |
| private final String entityEcaHandlerClassName; // type = xs:string |
| private final boolean distributedCacheClearEnabled; |
| private final String distributedCacheClearClassName; // type = xs:string |
| private final String distributedCacheClearUserLoginId; // type = xs:string |
| private final String sequencedIdPrefix; // type = xs:string |
| private final String defaultGroupName; // type = xs:string |
| private final String keyEncryptingKey; // type = xs:string |
| private final List<GroupMap> groupMapList; // <group-map> |
| private final Map<String, String> groupMapMap; // <group-map> |
| |
| DelegatorElement(Element element) throws GenericEntityConfException { |
| String lineNumberText = EntityConfig.createConfigFileLineNumberText(element); |
| String name = element.getAttribute("name").intern(); |
| if (name.isEmpty()) { |
| throw new GenericEntityConfException("<delegator> element name attribute is empty" + lineNumberText); |
| } |
| this.name = name; |
| String entityModelReader = element.getAttribute("entity-model-reader").intern(); |
| if (entityModelReader.isEmpty()) { |
| throw new GenericEntityConfException("<delegator> element entity-model-reader attribute is empty" + lineNumberText); |
| } |
| this.entityModelReader = entityModelReader; |
| String entityGroupReader = element.getAttribute("entity-group-reader").intern(); |
| if (entityGroupReader.isEmpty()) { |
| throw new GenericEntityConfException("<delegator> element entity-group-reader attribute is empty" + lineNumberText); |
| } |
| this.entityGroupReader = entityGroupReader; |
| this.entityEcaReader = element.getAttribute("entity-eca-reader").intern(); |
| this.entityEcaEnabled = !"false".equalsIgnoreCase(element.getAttribute("entity-eca-enabled")); |
| String entityEcaHandlerClassName = element.getAttribute("entity-eca-handler-class-name").intern(); |
| if (entityEcaHandlerClassName.isEmpty()) { |
| entityEcaHandlerClassName = "org.ofbiz.entityext.eca.DelegatorEcaHandler"; |
| } |
| this.entityEcaHandlerClassName = entityEcaHandlerClassName; |
| this.distributedCacheClearEnabled = "true".equalsIgnoreCase(element.getAttribute("distributed-cache-clear-enabled")); |
| String distributedCacheClearClassName = element.getAttribute("distributed-cache-clear-class-name").intern(); |
| if (distributedCacheClearClassName.isEmpty()) { |
| distributedCacheClearClassName = "org.ofbiz.entityext.cache.EntityCacheServices"; |
| } |
| this.distributedCacheClearClassName = distributedCacheClearClassName; |
| String distributedCacheClearUserLoginId = element.getAttribute("distributed-cache-clear-user-login-id").intern(); |
| if (distributedCacheClearUserLoginId.isEmpty()) { |
| distributedCacheClearUserLoginId = "system"; |
| } |
| this.distributedCacheClearUserLoginId = distributedCacheClearUserLoginId; |
| this.sequencedIdPrefix = element.getAttribute("sequenced-id-prefix").intern(); |
| String defaultGroupName = element.getAttribute("default-group-name").intern(); |
| if (defaultGroupName.isEmpty()) { |
| defaultGroupName = "org.ofbiz"; |
| } |
| this.defaultGroupName = defaultGroupName; |
| this.keyEncryptingKey = element.getAttribute("key-encrypting-key").intern(); |
| List<? extends Element> groupMapElementList = UtilXml.childElementList(element, "group-map"); |
| if (groupMapElementList.isEmpty()) { |
| throw new GenericEntityConfException("<delegator> element child elements <group-map> are missing" + lineNumberText); |
| } else { |
| List<GroupMap> groupMapList = new ArrayList<GroupMap>(groupMapElementList.size()); |
| Map<String, String> groupMapMap = new HashMap<String, String>(); |
| for (Element groupMapElement : groupMapElementList) { |
| GroupMap groupMap = new GroupMap(groupMapElement); |
| groupMapList.add(groupMap); |
| groupMapMap.put(groupMap.getGroupName(), groupMap.getDatasourceName()); |
| } |
| this.groupMapList = Collections.unmodifiableList(groupMapList); |
| this.groupMapMap = Collections.unmodifiableMap(groupMapMap); |
| } |
| } |
| |
| /** Returns the value of the <code>name</code> attribute. */ |
| public String getName() { |
| return this.name; |
| } |
| |
| /** Returns the value of the <code>entity-model-reader</code> attribute. */ |
| public String getEntityModelReader() { |
| return this.entityModelReader; |
| } |
| |
| /** Returns the value of the <code>entity-group-reader</code> attribute. */ |
| public String getEntityGroupReader() { |
| return this.entityGroupReader; |
| } |
| |
| /** Returns the value of the <code>entity-eca-reader</code> attribute. */ |
| public String getEntityEcaReader() { |
| return this.entityEcaReader; |
| } |
| |
| /** Returns the value of the <code>entity-eca-enabled</code> attribute. */ |
| public boolean getEntityEcaEnabled() { |
| return this.entityEcaEnabled; |
| } |
| |
| /** Returns the value of the <code>entity-eca-handler-class-name</code> attribute. */ |
| public String getEntityEcaHandlerClassName() { |
| return this.entityEcaHandlerClassName; |
| } |
| |
| /** Returns the value of the <code>distributed-cache-clear-enabled</code> attribute. */ |
| public boolean getDistributedCacheClearEnabled() { |
| return this.distributedCacheClearEnabled; |
| } |
| |
| /** Returns the value of the <code>distributed-cache-clear-class-name</code> attribute. */ |
| public String getDistributedCacheClearClassName() { |
| return this.distributedCacheClearClassName; |
| } |
| |
| /** Returns the value of the <code>distributed-cache-clear-user-login-id</code> attribute. */ |
| public String getDistributedCacheClearUserLoginId() { |
| return this.distributedCacheClearUserLoginId; |
| } |
| |
| /** Returns the value of the <code>sequenced-id-prefix</code> attribute. */ |
| public String getSequencedIdPrefix() { |
| return this.sequencedIdPrefix; |
| } |
| |
| /** Returns the value of the <code>default-group-name</code> attribute. */ |
| public String getDefaultGroupName() { |
| return this.defaultGroupName; |
| } |
| |
| /** Returns the value of the <code>key-encrypting-key</code> attribute. */ |
| public String getKeyEncryptingKey() { |
| return this.keyEncryptingKey; |
| } |
| |
| /** Returns the <code><group-map></code> child elements. */ |
| public List<GroupMap> getGroupMapList() { |
| return this.groupMapList; |
| } |
| |
| /** Returns the specified <code><group-map> datasource-name</code> attribute value, |
| * or <code>null</code> if the <code><group-map></code> element does not exist . */ |
| public String getGroupDataSource(String groupName) { |
| return this.groupMapMap.get(groupName); |
| } |
| } |