001/* 002 * Licensed to the Apache Software Foundation (ASF) under one or more 003 * contributor license agreements. See the NOTICE file distributed with 004 * this work for additional information regarding copyright ownership. 005 * The ASF licenses this file to You under the Apache License, Version 2.0 006 * (the "License"); you may not use this file except in compliance with 007 * the License. You may obtain a copy of the License at 008 * 009 * http://www.apache.org/licenses/LICENSE-2.0 010 * 011 * Unless required by applicable law or agreed to in writing, software 012 * distributed under the License is distributed on an "AS IS" BASIS, 013 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 014 * See the License for the specific language governing permissions and 015 * limitations under the License. 016 */ 017package org.apache.commons.jxpath.ri.model.jdom; 018 019import org.apache.commons.jxpath.ri.QName; 020import org.apache.commons.jxpath.ri.model.NodePointer; 021import org.apache.commons.jxpath.util.TypeUtils; 022import org.jdom.Attribute; 023 024/** 025 * A Pointer that points to a DOM node. 026 * 027 * @author Dmitri Plotnikov 028 * @version $Revision: 652884 $ $Date: 2008-05-02 22:02:00 +0200 (Fr, 02 Mai 2008) $ 029 */ 030public class JDOMAttributePointer extends NodePointer { 031 private Attribute attr; 032 033 private static final long serialVersionUID = 8896050354479644028L; 034 035 /** 036 * Create a JDOMAttributePointer. 037 * @param parent NodePointer parent 038 * @param attr JDOM Attribute 039 */ 040 public JDOMAttributePointer(NodePointer parent, Attribute attr) { 041 super(parent); 042 this.attr = attr; 043 } 044 045 public QName getName() { 046 return new QName( 047 JDOMNodePointer.getPrefix(attr), 048 JDOMNodePointer.getLocalName(attr)); 049 } 050 051 public String getNamespaceURI() { 052 String uri = attr.getNamespaceURI(); 053 if (uri != null && uri.equals("")) { 054 uri = null; 055 } 056 return uri; 057 } 058 059 public Object getValue() { 060 return attr.getValue(); 061 } 062 063 public Object getBaseValue() { 064 return attr; 065 } 066 067 public boolean isCollection() { 068 return false; 069 } 070 071 public int getLength() { 072 return 1; 073 } 074 075 public Object getImmediateNode() { 076 return attr; 077 } 078 079 public boolean isActual() { 080 return true; 081 } 082 083 public boolean isLeaf() { 084 return true; 085 } 086 087 public void setValue(Object value) { 088 attr.setValue((String) TypeUtils.convert(value, String.class)); 089 } 090 091 public void remove() { 092 attr.getParent().removeAttribute(attr); 093 } 094 095 public String asPath() { 096 StringBuffer buffer = new StringBuffer(); 097 if (parent != null) { 098 buffer.append(parent.asPath()); 099 if (buffer.length() == 0 100 || buffer.charAt(buffer.length() - 1) != '/') { 101 buffer.append('/'); 102 } 103 } 104 buffer.append('@'); 105 buffer.append(getName()); 106 return buffer.toString(); 107 } 108 109 public int hashCode() { 110 return System.identityHashCode(attr); 111 } 112 113 public boolean equals(Object object) { 114 return object == this || object instanceof JDOMAttributePointer 115 && ((JDOMAttributePointer) object).attr == attr; 116 } 117 118 public int compareChildNodePointers( 119 NodePointer pointer1, 120 NodePointer pointer2) { 121 // Won't happen - attributes don't have children 122 return 0; 123 } 124}