14 * version 2 for more details (a copy is included in the LICENSE file that 15 * accompanied this code). 16 * 17 * You should have received a copy of the GNU General Public License version 18 * 2 along with this work; if not, write to the Free Software Foundation, 19 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. 20 * 21 * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA 22 * or visit www.oracle.com if you need additional information or have any 23 * questions. 24 */ 25 26 package com.sun.xml.internal.messaging.saaj.soap.impl; 27 28 import java.util.Iterator; 29 import java.util.NoSuchElementException; 30 31 import javax.xml.namespace.QName; 32 import javax.xml.soap.*; 33 34 import com.sun.xml.internal.messaging.saaj.util.SAAJUtil; 35 import org.w3c.dom.Element; 36 37 import com.sun.xml.internal.messaging.saaj.soap.SOAPDocumentImpl; 38 import com.sun.xml.internal.messaging.saaj.soap.name.NameImpl; 39 40 public abstract class DetailImpl extends FaultElementImpl implements Detail { 41 public DetailImpl(SOAPDocumentImpl ownerDoc, NameImpl detailName) { 42 super(ownerDoc, detailName); 43 } 44 45 public DetailImpl(SOAPDocumentImpl ownerDoc, Element domElement) { 46 super(ownerDoc, domElement); 47 } 48 49 protected abstract DetailEntry createDetailEntry(Name name); 50 protected abstract DetailEntry createDetailEntry(QName name); 51 52 public DetailEntry addDetailEntry(Name name) throws SOAPException { 53 DetailEntry entry = createDetailEntry(name); 54 addNode(entry); 55 return entry; 56 } 57 58 public DetailEntry addDetailEntry(QName qname) throws SOAPException { 59 DetailEntry entry = createDetailEntry(qname); 60 addNode(entry); 61 return entry; 62 } 63 64 protected SOAPElement addElement(Name name) throws SOAPException { 65 return addDetailEntry(name); 66 } 67 68 protected SOAPElement addElement(QName name) throws SOAPException { 69 return addDetailEntry(name); 70 } 71 72 protected SOAPElement convertToSoapElement(Element element) { 73 final javax.xml.soap.Node soapNode = getSoapDocument().find(element); 74 if (soapNode instanceof DetailEntry) { 75 return (SOAPElement) soapNode; 76 } else { 77 DetailEntry detailEntry = 78 createDetailEntry(NameImpl.copyElementName(element)); 79 return replaceElementWithSOAPElement( 80 element, 81 (ElementImpl) detailEntry); 82 } 83 } 84 85 public Iterator getDetailEntries() { 86 return new Iterator<SOAPElement>() { 87 Iterator<org.w3c.dom.Node> eachNode = getChildElementNodes(); 88 SOAPElement next = null; 89 SOAPElement last = null; 90 91 public boolean hasNext() { 92 if (next == null) { 93 while (eachNode.hasNext()) { 94 next = (SOAPElement) eachNode.next(); 95 if (next instanceof DetailEntry) { 96 break; 97 } 98 next = null; 99 } 100 } 101 return next != null; 102 } 103 104 public SOAPElement next() { 105 if (!hasNext()) { 106 throw new NoSuchElementException(); 107 } 108 last = next; 109 next = null; 110 return last; 111 } 112 113 public void remove() { 114 if (last == null) { 115 throw new IllegalStateException(); 116 } 117 SOAPElement target = last; 118 removeChild(target); 119 last = null; 120 } 121 }; 122 } 123 124 protected boolean isStandardFaultElement() { 125 return true; 126 } 127 128 } | 14 * version 2 for more details (a copy is included in the LICENSE file that 15 * accompanied this code). 16 * 17 * You should have received a copy of the GNU General Public License version 18 * 2 along with this work; if not, write to the Free Software Foundation, 19 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. 20 * 21 * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA 22 * or visit www.oracle.com if you need additional information or have any 23 * questions. 24 */ 25 26 package com.sun.xml.internal.messaging.saaj.soap.impl; 27 28 import java.util.Iterator; 29 import java.util.NoSuchElementException; 30 31 import javax.xml.namespace.QName; 32 import javax.xml.soap.*; 33 34 import org.w3c.dom.Element; 35 36 import com.sun.xml.internal.messaging.saaj.soap.SOAPDocumentImpl; 37 import com.sun.xml.internal.messaging.saaj.soap.name.NameImpl; 38 39 public abstract class DetailImpl extends FaultElementImpl implements Detail { 40 public DetailImpl(SOAPDocumentImpl ownerDoc, NameImpl detailName) { 41 super(ownerDoc, detailName); 42 } 43 44 public DetailImpl(SOAPDocumentImpl ownerDoc, Element domElement) { 45 super(ownerDoc, domElement); 46 } 47 48 protected abstract DetailEntry createDetailEntry(Name name); 49 protected abstract DetailEntry createDetailEntry(QName name); 50 51 @Override 52 public DetailEntry addDetailEntry(Name name) throws SOAPException { 53 DetailEntry entry = createDetailEntry(name); 54 addNode(entry); 55 return entry; 56 } 57 58 @Override 59 public DetailEntry addDetailEntry(QName qname) throws SOAPException { 60 DetailEntry entry = createDetailEntry(qname); 61 addNode(entry); 62 return entry; 63 } 64 65 @Override 66 protected SOAPElement addElement(Name name) throws SOAPException { 67 return addDetailEntry(name); 68 } 69 70 @Override 71 protected SOAPElement addElement(QName name) throws SOAPException { 72 return addDetailEntry(name); 73 } 74 75 @Override 76 protected SOAPElement convertToSoapElement(Element element) { 77 final javax.xml.soap.Node soapNode = getSoapDocument().find(element); 78 if (soapNode instanceof DetailEntry) { 79 return (SOAPElement) soapNode; 80 } else { 81 DetailEntry detailEntry = 82 createDetailEntry(NameImpl.copyElementName(element)); 83 return replaceElementWithSOAPElement( 84 element, 85 (ElementImpl) detailEntry); 86 } 87 } 88 89 @Override 90 public Iterator<DetailEntry> getDetailEntries() { 91 return new Iterator<DetailEntry>() { 92 Iterator<org.w3c.dom.Node> eachNode = getChildElementNodes(); 93 SOAPElement next = null; 94 SOAPElement last = null; 95 96 @Override 97 public boolean hasNext() { 98 if (next == null) { 99 while (eachNode.hasNext()) { 100 next = (SOAPElement) eachNode.next(); 101 if (next instanceof DetailEntry) { 102 break; 103 } 104 next = null; 105 } 106 } 107 return next != null; 108 } 109 110 @Override 111 public DetailEntry next() { 112 if (!hasNext()) { 113 throw new NoSuchElementException(); 114 } 115 last = next; 116 next = null; 117 return (DetailEntry) last; 118 } 119 120 @Override 121 public void remove() { 122 if (last == null) { 123 throw new IllegalStateException(); 124 } 125 SOAPElement target = last; 126 removeChild(target); 127 last = null; 128 } 129 }; 130 } 131 132 @Override 133 protected boolean isStandardFaultElement() { 134 return true; 135 } 136 137 } |