001 // Copyright 2004, 2005 The Apache Software Foundation 002 // 003 // Licensed under the Apache License, Version 2.0 (the "License"); 004 // you may not use this file except in compliance with the License. 005 // You may obtain a copy of the License at 006 // 007 // http://www.apache.org/licenses/LICENSE-2.0 008 // 009 // Unless required by applicable law or agreed to in writing, software 010 // distributed under the License is distributed on an "AS IS" BASIS, 011 // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 012 // See the License for the specific language governing permissions and 013 // limitations under the License. 014 015 package org.apache.hivemind.impl; 016 017 import java.util.ArrayList; 018 import java.util.Collections; 019 import java.util.HashMap; 020 import java.util.List; 021 import java.util.Map; 022 023 import org.apache.hivemind.Attribute; 024 import org.apache.hivemind.Element; 025 import org.apache.hivemind.util.ToStringBuilder; 026 027 /** 028 * Implementation of {@link org.apache.hivemind.Element}. 029 * 030 * @author Howard Lewis Ship 031 */ 032 public final class ElementImpl extends BaseLocatable implements Element 033 { 034 private String _elementName; 035 private String _content; 036 private List _elements; 037 private List _safeElements; 038 private List _attributes; 039 private Map _attributesMap; 040 private List _safeAttributes; 041 042 public void setElementName(String elementName) 043 { 044 _elementName = elementName; 045 } 046 047 public String getElementName() 048 { 049 return _elementName; 050 } 051 052 public void addAttribute(Attribute attribute) 053 { 054 if (_attributes == null) 055 { 056 _attributes = new ArrayList(); 057 _attributesMap = new HashMap(); 058 } 059 060 _attributes.add(attribute); 061 _attributesMap.put(attribute.getName(), attribute); 062 } 063 064 public void addElement(Element element) 065 { 066 if (_elements == null) 067 _elements = new ArrayList(); 068 069 _elements.add(element); 070 } 071 072 public synchronized List getAttributes() 073 { 074 if (_attributes == null) 075 return Collections.EMPTY_LIST; 076 077 if (_safeAttributes == null) 078 _safeAttributes = Collections.unmodifiableList(_attributes); 079 080 return _safeAttributes; 081 } 082 083 public String getContent() 084 { 085 if (_content == null) 086 return ""; 087 088 return _content; 089 } 090 091 public synchronized List getElements() 092 { 093 if (_elements == null) 094 return Collections.EMPTY_LIST; 095 096 if (_safeElements == null) 097 _safeElements = Collections.unmodifiableList(_elements); 098 099 return _safeElements; 100 } 101 102 public String getAttributeValue(String attributeName) 103 { 104 if (_attributesMap == null) 105 return null; 106 107 Attribute a = (Attribute) _attributesMap.get(attributeName); 108 109 if (a == null) 110 return null; 111 112 return a.getValue(); 113 } 114 115 public boolean isEmpty() 116 { 117 return _elements == null || _elements.size() == 0; 118 } 119 120 public void setContent(String string) 121 { 122 _content = string; 123 } 124 125 public String toString() 126 { 127 ToStringBuilder builder = new ToStringBuilder(this); 128 129 builder.append("elementName", _elementName); 130 builder.append("attributes", _attributes); 131 builder.append("elements", _elements); 132 builder.append("content", _content); 133 134 return builder.toString(); 135 } 136 }