org.apache.xml.dtm.ref
Class DTMNodeProxy

java.lang.Object
  |
  +--org.apache.xml.dtm.ref.DTMNodeProxy

public class DTMNodeProxy
extends java.lang.Object
implements Node, Document, Text, Element, Attr, ProcessingInstruction, Comment, DocumentFragment

DTMNodeProxy presents a DOM Node API front-end to the DTM model.

It does _not_ attempt to address the "node identity" question; no effort is made to prevent the creation of multiple proxies referring to a single DTM node. Users can create a mechanism for managing this, or relinquish the use of "==" and use the .sameNodeAs() mechanism, which is under consideration for future versions of the DOM.

DTMNodeProxy may be subclassed further to present specific DOM node types.

See Also:
org.w3c.dom
Usage:
**For internal use only**

Field Summary
 DTM dtm
          The DTM for this node.
 
Constructor Summary
DTMNodeProxy(DTM dtm, int node)
          Create a DTMNodeProxy Node representing a specific Node in a DTM
 
Method Summary
 Node adoptNode(Node source)
          NEEDSDOC Method adoptNode NEEDSDOC @param source
 Node appendChild(Node newChild)
           
 void appendData(java.lang.String arg)
           
 Node cloneNode(boolean deep)
           
 Attr createAttribute(java.lang.String name)
           
 Attr createAttributeNS(java.lang.String namespaceURI, java.lang.String qualifiedName)
           
 CDATASection createCDATASection(java.lang.String data)
           
 Comment createComment(java.lang.String data)
           
 DocumentFragment createDocumentFragment()
           
 Element createElement(java.lang.String tagName)
           
 Element createElementNS(java.lang.String namespaceURI, java.lang.String qualifiedName)
           
 EntityReference createEntityReference(java.lang.String name)
           
 ProcessingInstruction createProcessingInstruction(java.lang.String target, java.lang.String data)
           
 Text createTextNode(java.lang.String data)
           
 void deleteData(int offset, int count)
           
 boolean equals(Node node)
          Test for equality based on node number.
 boolean equals(java.lang.Object node)
          Test for equality based on node number.
 java.lang.String getAttribute(java.lang.String name)
           
 Attr getAttributeNode(java.lang.String name)
           
 Attr getAttributeNodeNS(java.lang.String namespaceURI, java.lang.String localName)
           
 java.lang.String getAttributeNS(java.lang.String namespaceURI, java.lang.String localName)
           
 NamedNodeMap getAttributes()
           
 NodeList getChildNodes()
           
 java.lang.String getData()
           
 DocumentType getDoctype()
           
 Element getDocumentElement()
          This is a bit of a problem in DTM, since a DTM may be a Document Fragment and hence not have a clear-cut Document Element.
 DTM getDTM()
          NON-DOM: Return the DTM model
 int getDTMNodeNumber()
          NON-DOM: Return the DTM node number
 Element getElementById(java.lang.String elementId)
           
 NodeList getElementsByTagName(java.lang.String tagname)
           
 NodeList getElementsByTagNameNS(java.lang.String namespaceURI, java.lang.String localName)
           
 java.lang.String getEncoding()
          EXPERIMENTAL! Based on the Document Object Model (DOM) Level 3 Core Working Draft of 5 June 2001..
 Node getFirstChild()
           
 DOMImplementation getImplementation()
           
 Node getLastChild()
           
 int getLength()
           
 java.lang.String getLocalName()
           
 java.lang.String getName()
           
 java.lang.String getNamespaceURI()
           
 Node getNextSibling()
           
 java.lang.String getNodeName()
           
 short getNodeType()
           
 java.lang.String getNodeValue()
           
 Document getOwnerDocument()
           
 Element getOwnerElement()
          Get the owner element of an attribute.
 Node getOwnerNode()
           
 Node getParentNode()
           
 java.lang.String getPrefix()
           
 Node getPreviousSibling()
           
 boolean getSpecified()
           
 boolean getStandalone()
          EXPERIMENTAL! Based on the Document Object Model (DOM) Level 3 Core Working Draft of 5 June 2001..
 boolean getStrictErrorChecking()
          EXPERIMENTAL! Based on the Document Object Model (DOM) Level 3 Core Working Draft of 5 June 2001..
 java.lang.String getStringValue()
           
 java.lang.String getTagName()
           
 java.lang.String getTarget()
          A PI's "target" states what processor channel the PI's data should be directed to.
 java.lang.String getValue()
           
 java.lang.String getVersion()
          EXPERIMENTAL! Based on the Document Object Model (DOM) Level 3 Core Working Draft of 5 June 2001..
 boolean hasAttribute(java.lang.String name)
          Method hasAttribute
 boolean hasAttributeNS(java.lang.String name, java.lang.String x)
          Method hasAttributeNS
 boolean hasAttributes()
          Introduced in DOM Level 2.
 boolean hasChildNodes()
           
 Node importNode(Node importedNode, boolean deep)
           
 Node insertBefore(Node newChild, Node refChild)
           
 void insertData(int offset, java.lang.String arg)
           
 boolean isSupported(java.lang.String feature, java.lang.String version)
          Ask whether we support a given DOM feature.
 void normalize()
           
 void removeAttribute(java.lang.String name)
           
 Attr removeAttributeNode(Attr oldAttr)
           
 void removeAttributeNS(java.lang.String namespaceURI, java.lang.String localName)
           
 Node removeChild(Node oldChild)
           
 Node replaceChild(Node newChild, Node oldChild)
           
 void replaceData(int offset, int count, java.lang.String arg)
           
 boolean sameNodeAs(Node other)
          FUTURE DOM: Test node identity, in lieu of Node==Node
 void setAttribute(java.lang.String name, java.lang.String value)
           
 Attr setAttributeNode(Attr newAttr)
           
 Attr setAttributeNodeNS(Attr newAttr)
           
 void setAttributeNS(java.lang.String namespaceURI, java.lang.String qualifiedName, java.lang.String value)
           
 void setData(java.lang.String data)
           
 void setEncoding(java.lang.String encoding)
          EXPERIMENTAL! Based on the Document Object Model (DOM) Level 3 Core Working Draft of 5 June 2001..
 void setNodeValue(java.lang.String nodeValue)
           
 void setPrefix(java.lang.String prefix)
           
 void setStandalone(boolean standalone)
          EXPERIMENTAL! Based on the Document Object Model (DOM) Level 3 Core Working Draft of 5 June 2001..
 void setStrictErrorChecking(boolean strictErrorChecking)
          EXPERIMENTAL! Based on the Document Object Model (DOM) Level 3 Core Working Draft of 5 June 2001..
 void setValue(java.lang.String value)
           
 void setVersion(java.lang.String version)
          EXPERIMENTAL! Based on the Document Object Model (DOM) Level 3 Core Working Draft of 5 June 2001..
 Text splitText(int offset)
           
 java.lang.String substringData(int offset, int count)
           
 boolean supports(java.lang.String feature, java.lang.String version)
          Ask whether we support a given DOM feature.
 
Methods inherited from class java.lang.Object
getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Field Detail

dtm

public DTM dtm
The DTM for this node.
Constructor Detail

DTMNodeProxy

public DTMNodeProxy(DTM dtm,
                    int node)
Create a DTMNodeProxy Node representing a specific Node in a DTM
Parameters:
dtm - The DTM Reference, must be non-null.
node - The DTM node handle.
Method Detail

getDTM

public final DTM getDTM()
NON-DOM: Return the DTM model
Returns:
The DTM that this proxy is a representative for.

getDTMNodeNumber

public final int getDTMNodeNumber()
NON-DOM: Return the DTM node number
Returns:
The DTM node handle.

equals

public final boolean equals(Node node)
Test for equality based on node number.
Parameters:
node - A DTM node proxy reference.
Returns:
true if the given node has the same handle as this node.

equals

public final boolean equals(java.lang.Object node)
Test for equality based on node number.
Parameters:
node - A DTM node proxy reference.
Returns:
true if the given node has the same handle as this node.
Overrides:
equals in class java.lang.Object

sameNodeAs

public final boolean sameNodeAs(Node other)
FUTURE DOM: Test node identity, in lieu of Node==Node
Parameters:
other -  
Returns:
true if the given node has the same handle as this node.

getNodeName

public final java.lang.String getNodeName()
Specified by:
getNodeName in interface Node
See Also:
Node

getTarget

public final java.lang.String getTarget()
A PI's "target" states what processor channel the PI's data should be directed to. It is defined differently in HTML and XML.

In XML, a PI's "target" is the first (whitespace-delimited) token following the " In HTML, target is always null.

Note that getNodeName is aliased to getTarget.

Specified by:
getTarget in interface ProcessingInstruction

getLocalName

public final java.lang.String getLocalName()
Specified by:
getLocalName in interface Node
See Also:
as of DOM Level 2

getPrefix

public final java.lang.String getPrefix()
Specified by:
getPrefix in interface Node
Returns:
The prefix for this node.
See Also:
as of DOM Level 2

setPrefix

public final void setPrefix(java.lang.String prefix)
                     throws DOMException
Specified by:
setPrefix in interface Node
Parameters:
prefix -  
Throws:
DOMException -  
See Also:
as of DOM Level 2 -- DTMNodeProxy is read-only

getNamespaceURI

public final java.lang.String getNamespaceURI()
Specified by:
getNamespaceURI in interface Node
See Also:
as of DOM Level 2

supports

public final boolean supports(java.lang.String feature,
                              java.lang.String version)
Ask whether we support a given DOM feature. In fact, we do not _fully_ support any DOM feature -- we're a read-only subset -- so arguably we should always return false. Or we could say that we support DOM Core Level 2 but all nodes are read-only. Unclear which answer is least misleading. NON-DOM method. This was present in early drafts of DOM Level 2, but was renamed isSupported. It's present here only because it's cheap, harmless, and might help some poor fool who is still trying to use an early Working Draft of the DOM.
Parameters:
feature -  
version -  
Returns:
false

isSupported

public final boolean isSupported(java.lang.String feature,
                                 java.lang.String version)
Ask whether we support a given DOM feature. In fact, we do not _fully_ support any DOM feature -- we're a read-only subset -- so arguably we should always return false.
Specified by:
isSupported in interface Node
Parameters:
feature -  
version -  
Returns:
false
See Also:
as of DOM Level 2

getNodeValue

public final java.lang.String getNodeValue()
                                    throws DOMException
Specified by:
getNodeValue in interface Node
Throws:
DOMException -  
See Also:
Node

getStringValue

public final java.lang.String getStringValue()
                                      throws DOMException
Returns:
The string value of the node
Throws:
DOMException -  

setNodeValue

public final void setNodeValue(java.lang.String nodeValue)
                        throws DOMException
Specified by:
setNodeValue in interface Node
Parameters:
nodeValue -  
Throws:
DOMException -  
See Also:
-- DTMNodeProxy is read-only

getNodeType

public final short getNodeType()
Specified by:
getNodeType in interface Node
See Also:
Node

getParentNode

public final Node getParentNode()
Specified by:
getParentNode in interface Node
See Also:
Node

getOwnerNode

public final Node getOwnerNode()
See Also:
Node

getChildNodes

public final NodeList getChildNodes()
Specified by:
getChildNodes in interface Node
See Also:
Node

getFirstChild

public final Node getFirstChild()
Specified by:
getFirstChild in interface Node
See Also:
Node

getLastChild

public final Node getLastChild()
Specified by:
getLastChild in interface Node
See Also:
Node

getPreviousSibling

public final Node getPreviousSibling()
Specified by:
getPreviousSibling in interface Node
See Also:
Node

getNextSibling

public final Node getNextSibling()
Specified by:
getNextSibling in interface Node
See Also:
Node

getAttributes

public final NamedNodeMap getAttributes()
Specified by:
getAttributes in interface Node
See Also:
Node

hasAttribute

public boolean hasAttribute(java.lang.String name)
Method hasAttribute
Specified by:
hasAttribute in interface Element
Parameters:
name -  

hasAttributeNS

public boolean hasAttributeNS(java.lang.String name,
                              java.lang.String x)
Method hasAttributeNS
Specified by:
hasAttributeNS in interface Element
Parameters:
name -  
x -  

getOwnerDocument

public final Document getOwnerDocument()
Specified by:
getOwnerDocument in interface Node
See Also:
Node

insertBefore

public final Node insertBefore(Node newChild,
                               Node refChild)
                        throws DOMException
Specified by:
insertBefore in interface Node
Parameters:
newChild -  
refChild -  
Throws:
DOMException -  
See Also:
-- DTMNodeProxy is read-only

replaceChild

public final Node replaceChild(Node newChild,
                               Node oldChild)
                        throws DOMException
Specified by:
replaceChild in interface Node
Parameters:
newChild -  
oldChild -  
Throws:
DOMException -  
See Also:
-- DTMNodeProxy is read-only

removeChild

public final Node removeChild(Node oldChild)
                       throws DOMException
Specified by:
removeChild in interface Node
Parameters:
oldChild -  
Throws:
DOMException -  
See Also:
-- DTMNodeProxy is read-only

appendChild

public final Node appendChild(Node newChild)
                       throws DOMException
Specified by:
appendChild in interface Node
Parameters:
newChild -  
Throws:
DOMException -  
See Also:
-- DTMNodeProxy is read-only

hasChildNodes

public final boolean hasChildNodes()
Specified by:
hasChildNodes in interface Node
See Also:
Node

cloneNode

public final Node cloneNode(boolean deep)
Specified by:
cloneNode in interface Node
Parameters:
deep -  
See Also:
-- DTMNodeProxy is read-only

getDoctype

public final DocumentType getDoctype()
Specified by:
getDoctype in interface Document
See Also:
Document

getImplementation

public final DOMImplementation getImplementation()
Specified by:
getImplementation in interface Document
See Also:
Document

getDocumentElement

public final Element getDocumentElement()
This is a bit of a problem in DTM, since a DTM may be a Document Fragment and hence not have a clear-cut Document Element. We can make it work in the well-formed cases but would that be confusing for others?
Specified by:
getDocumentElement in interface Document
See Also:
Document

createElement

public final Element createElement(java.lang.String tagName)
                            throws DOMException
Specified by:
createElement in interface Document
Parameters:
tagName -  
Throws:
DOMException -  
See Also:
Document

createDocumentFragment

public final DocumentFragment createDocumentFragment()
Specified by:
createDocumentFragment in interface Document
See Also:
Document

createTextNode

public final Text createTextNode(java.lang.String data)
Specified by:
createTextNode in interface Document
Parameters:
data -  
See Also:
Document

createComment

public final Comment createComment(java.lang.String data)
Specified by:
createComment in interface Document
Parameters:
data -  
See Also:
Document

createCDATASection

public final CDATASection createCDATASection(java.lang.String data)
                                      throws DOMException
Specified by:
createCDATASection in interface Document
Parameters:
data -  
Throws:
DOMException -  
See Also:
Document

createProcessingInstruction

public final ProcessingInstruction createProcessingInstruction(java.lang.String target,
                                                               java.lang.String data)
                                                        throws DOMException
Specified by:
createProcessingInstruction in interface Document
Parameters:
target -  
data -  
Throws:
DOMException -  
See Also:
Document

createAttribute

public final Attr createAttribute(java.lang.String name)
                           throws DOMException
Specified by:
createAttribute in interface Document
Parameters:
name -  
Throws:
DOMException -  
See Also:
Document

createEntityReference

public final EntityReference createEntityReference(java.lang.String name)
                                            throws DOMException
Specified by:
createEntityReference in interface Document
Parameters:
name -  
Throws:
DOMException -  
See Also:
Document

getElementsByTagName

public final NodeList getElementsByTagName(java.lang.String tagname)
Specified by:
getElementsByTagName in interface Document
Parameters:
tagname -  
See Also:
Document

importNode

public final Node importNode(Node importedNode,
                             boolean deep)
                      throws DOMException
Specified by:
importNode in interface Document
Parameters:
importedNode -  
deep -  
Throws:
DOMException -  
See Also:
as of DOM Level 2 -- DTMNodeProxy is read-only

createElementNS

public final Element createElementNS(java.lang.String namespaceURI,
                                     java.lang.String qualifiedName)
                              throws DOMException
Specified by:
createElementNS in interface Document
Parameters:
namespaceURI -  
qualifiedName -  
Throws:
DOMException -  
See Also:
as of DOM Level 2

createAttributeNS

public final Attr createAttributeNS(java.lang.String namespaceURI,
                                    java.lang.String qualifiedName)
                             throws DOMException
Specified by:
createAttributeNS in interface Document
Parameters:
namespaceURI -  
qualifiedName -  
Throws:
DOMException -  
See Also:
as of DOM Level 2

getElementsByTagNameNS

public final NodeList getElementsByTagNameNS(java.lang.String namespaceURI,
                                             java.lang.String localName)
Specified by:
getElementsByTagNameNS in interface Document
Parameters:
namespaceURI -  
localName -  
See Also:
as of DOM Level 2

getElementById

public final Element getElementById(java.lang.String elementId)
Specified by:
getElementById in interface Document
Parameters:
elementId -  
See Also:
as of DOM Level 2

splitText

public final Text splitText(int offset)
                     throws DOMException
Specified by:
splitText in interface Text
Parameters:
offset -  
Throws:
DOMException -  
See Also:
Text

getData

public final java.lang.String getData()
                               throws DOMException
Specified by:
getData in interface ProcessingInstruction
Throws:
DOMException -  
See Also:
CharacterData

setData

public final void setData(java.lang.String data)
                   throws DOMException
Specified by:
setData in interface ProcessingInstruction
Parameters:
data -  
Throws:
DOMException -  
See Also:
CharacterData

getLength

public final int getLength()
See Also:
CharacterData

substringData

public final java.lang.String substringData(int offset,
                                            int count)
                                     throws DOMException
Parameters:
offset -  
count -  
Throws:
DOMException -  
See Also:
CharacterData

appendData

public final void appendData(java.lang.String arg)
                      throws DOMException
Parameters:
arg -  
Throws:
DOMException -  
See Also:
CharacterData

insertData

public final void insertData(int offset,
                             java.lang.String arg)
                      throws DOMException
Parameters:
offset -  
arg -  
Throws:
DOMException -  
See Also:
CharacterData

deleteData

public final void deleteData(int offset,
                             int count)
                      throws DOMException
Parameters:
offset -  
count -  
Throws:
DOMException -  
See Also:
CharacterData

replaceData

public final void replaceData(int offset,
                              int count,
                              java.lang.String arg)
                       throws DOMException
Parameters:
offset -  
count -  
arg -  
Throws:
DOMException -  
See Also:
CharacterData

getTagName

public final java.lang.String getTagName()
Specified by:
getTagName in interface Element
See Also:
Element

getAttribute

public final java.lang.String getAttribute(java.lang.String name)
Specified by:
getAttribute in interface Element
Parameters:
name -  
See Also:
Element

setAttribute

public final void setAttribute(java.lang.String name,
                               java.lang.String value)
                        throws DOMException
Specified by:
setAttribute in interface Element
Parameters:
name -  
value -  
Throws:
DOMException -  
See Also:
Element

removeAttribute

public final void removeAttribute(java.lang.String name)
                           throws DOMException
Specified by:
removeAttribute in interface Element
Parameters:
name -  
Throws:
DOMException -  
See Also:
Element

getAttributeNode

public final Attr getAttributeNode(java.lang.String name)
Specified by:
getAttributeNode in interface Element
Parameters:
name -  
See Also:
Element

setAttributeNode

public final Attr setAttributeNode(Attr newAttr)
                            throws DOMException
Specified by:
setAttributeNode in interface Element
Parameters:
newAttr -  
Throws:
DOMException -  
See Also:
Element

removeAttributeNode

public final Attr removeAttributeNode(Attr oldAttr)
                               throws DOMException
Specified by:
removeAttributeNode in interface Element
Parameters:
oldAttr -  
Throws:
DOMException -  
See Also:
Element

hasAttributes

public boolean hasAttributes()
Introduced in DOM Level 2.
Specified by:
hasAttributes in interface Node

normalize

public final void normalize()
Specified by:
normalize in interface Node
See Also:
Element

getAttributeNS

public final java.lang.String getAttributeNS(java.lang.String namespaceURI,
                                             java.lang.String localName)
Specified by:
getAttributeNS in interface Element
Parameters:
namespaceURI -  
localName -  
See Also:
Element

setAttributeNS

public final void setAttributeNS(java.lang.String namespaceURI,
                                 java.lang.String qualifiedName,
                                 java.lang.String value)
                          throws DOMException
Specified by:
setAttributeNS in interface Element
Parameters:
namespaceURI -  
qualifiedName -  
value -  
Throws:
DOMException -  
See Also:
Element

removeAttributeNS

public final void removeAttributeNS(java.lang.String namespaceURI,
                                    java.lang.String localName)
                             throws DOMException
Specified by:
removeAttributeNS in interface Element
Parameters:
namespaceURI -  
localName -  
Throws:
DOMException -  
See Also:
Element

getAttributeNodeNS

public final Attr getAttributeNodeNS(java.lang.String namespaceURI,
                                     java.lang.String localName)
Specified by:
getAttributeNodeNS in interface Element
Parameters:
namespaceURI -  
localName -  
See Also:
Element

setAttributeNodeNS

public final Attr setAttributeNodeNS(Attr newAttr)
                              throws DOMException
Specified by:
setAttributeNodeNS in interface Element
Parameters:
newAttr -  
Throws:
DOMException -  
See Also:
Element

getName

public final java.lang.String getName()
Specified by:
getName in interface Attr
See Also:
Attr

getSpecified

public final boolean getSpecified()
Specified by:
getSpecified in interface Attr
See Also:
Attr

getValue

public final java.lang.String getValue()
Specified by:
getValue in interface Attr
See Also:
Attr

setValue

public final void setValue(java.lang.String value)
Specified by:
setValue in interface Attr
Parameters:
value -  
See Also:
Attr

getOwnerElement

public final Element getOwnerElement()
Get the owner element of an attribute.
Specified by:
getOwnerElement in interface Attr
See Also:
as of DOM Level 2

adoptNode

public Node adoptNode(Node source)
               throws DOMException
NEEDSDOC Method adoptNode NEEDSDOC @param source
Throws:
DOMException -  

getEncoding

public java.lang.String getEncoding()

EXPERIMENTAL! Based on the Document Object Model (DOM) Level 3 Core Working Draft of 5 June 2001..

An attribute specifying, as part of the XML declaration, the encoding of this document. This is null when unspecified.

Since:
DOM Level 3

setEncoding

public void setEncoding(java.lang.String encoding)

EXPERIMENTAL! Based on the Document Object Model (DOM) Level 3 Core Working Draft of 5 June 2001..

An attribute specifying, as part of the XML declaration, the encoding of this document. This is null when unspecified.

Since:
DOM Level 3 NEEDSDOC @param encoding

getStandalone

public boolean getStandalone()

EXPERIMENTAL! Based on the Document Object Model (DOM) Level 3 Core Working Draft of 5 June 2001..

An attribute specifying, as part of the XML declaration, whether this document is standalone.

Since:
DOM Level 3

setStandalone

public void setStandalone(boolean standalone)

EXPERIMENTAL! Based on the Document Object Model (DOM) Level 3 Core Working Draft of 5 June 2001..

An attribute specifying, as part of the XML declaration, whether this document is standalone.

Since:
DOM Level 3 NEEDSDOC @param standalone

getStrictErrorChecking

public boolean getStrictErrorChecking()

EXPERIMENTAL! Based on the Document Object Model (DOM) Level 3 Core Working Draft of 5 June 2001..

An attribute specifying whether errors checking is enforced or not. When set to false, the implementation is free to not test every possible error case normally defined on DOM operations, and not raise any DOMException. In case of error, the behavior is undefined. This attribute is true by defaults.

Since:
DOM Level 3

setStrictErrorChecking

public void setStrictErrorChecking(boolean strictErrorChecking)

EXPERIMENTAL! Based on the Document Object Model (DOM) Level 3 Core Working Draft of 5 June 2001..

An attribute specifying whether errors checking is enforced or not. When set to false, the implementation is free to not test every possible error case normally defined on DOM operations, and not raise any DOMException. In case of error, the behavior is undefined. This attribute is true by defaults.

Since:
DOM Level 3 NEEDSDOC @param strictErrorChecking

getVersion

public java.lang.String getVersion()

EXPERIMENTAL! Based on the Document Object Model (DOM) Level 3 Core Working Draft of 5 June 2001..

An attribute specifying, as part of the XML declaration, the version number of this document. This is null when unspecified.

Since:
DOM Level 3

setVersion

public void setVersion(java.lang.String version)

EXPERIMENTAL! Based on the Document Object Model (DOM) Level 3 Core Working Draft of 5 June 2001..

An attribute specifying, as part of the XML declaration, the version number of this document. This is null when unspecified.

Since:
DOM Level 3 NEEDSDOC @param version


Copyright © 2004 Apache XML Project. All Rights Reserved.