Package Torello.HTML
Class HTMLNode
- java.lang.Object
-
- Torello.HTML.HTMLNode
-
- All Implemented Interfaces:
java.io.Serializable
,java.lang.CharSequence
,java.lang.Cloneable
- Direct Known Subclasses:
CommentNode
,TagNode
,TextNode
public abstract class HTMLNode extends java.lang.Object implements java.lang.CharSequence, java.io.Serializable, java.lang.Cloneable
HTMLNode - Documentation.
This abstract class is the parent class forTagNode
and alsoTextNode
. It is an "immutable" class - meaning that the contents of anHTMLNode
can never change. Roughly 80% of instances ofHTMLNode
will never change, and even having multiple instances of aBR, HR, H1, H2, H3, B, or I
node is unnecessary. TheHTMLPage.getPageTokens()
is the class that worries about creatingHTMLNode's
. In order to change anHTMLNode
, one must instantiate a new one.
Light-Weight, Immutable Data-Class All three of the standard classes that inherit fromabstract class HTMLNode
are very light-weight, and do not contain any internal state what-so-ever, other than theString
which represents theTagNode, CommentNode, or TextNode
itself. When it is said that 100% ofHTMLNode's
are Immutable data-classes, this is an actual fact. TheTagNode
class has quite a few 'getter' methods, but each and every 'setter' method returns a new instance ofTagNode
that contains a completely new String inside. The classesTextNode
CommentNode
do not have any 'setter' methods at all.
The three inherited classes ofabstract class HTMLNode
are very light-weight, and contain some amount ofpublic
methods, but do not have heavy internal-state (either static, or non-static). Below is a list of the internal field's that are added to each of the three instantiations of the ancestorHTMLNode class
:class TagNode
adds a fieldpublic final boolean isClosing
- which tells a user if this tag has a forward-slash immediately following the '<' (less-than symbol) at character position 2. This is how one identifies a 'closing-version' of the element, for instance: '</DIV>
' and '</SPAN>
' would both have theirpublic final boolean isClosing
fields set to TRUE. There is also apublic final String tok
field added to instances ofTagNode
that identify what html element the TagNode represents. For example an HTML Element such as:<A HREF="http://My.URL.com" TARGET=_blank>
, would have it'sString 'tok'
field set to'a'
class TextNode
this inherited class fromclass HTMLNode
does not add any internal state at all. It has the exact same internally-maintained fields as its parent-class. Thepublic final String str
field merely states what text this text-node actually represents.
class CommentNode
for searching-purposes, and ease-of-use,class CommentNode
, which is the third and final class to inheritHTMLNode
keeps one extra internal-field, which ispublic final String body
. This field is a redundant, duplicate, of the internal stringpublic final String str
- which is inherited from the HTML Node class. The subtle difference is that, since comment nodes represent the HTML<!-- and -->
symbols, the'body'
of the comment sometimes needs to be searched, quickly. Thepublic final String body
leaves off these leading and ending comment delimiter symbols:<!-- and -->
Below is the inheritance diagram (with fields) of the three concrete-classes that extend theabstract
classHTMLNode:
- See Also:
- Serialized Form
Hi-Lited Source-Code:
- View Here: Torello/HTML/HTMLNode.java
- Open New Browser-Tab: Torello/HTML/HTMLNode.java
-
-
Field Summary
Fields Modifier and Type Field static long
serialVersionUID
String
str
-
Constructor Summary
Constructors Modifier Constructor protected
HTMLNode(String s)
-
Method Summary
isNode Methods Modifier and Type Method boolean
isCommentNode()
boolean
isTagNode()
boolean
isTextNode()
Methods: Interface java.lang.Charset Modifier and Type Method char
charAt(int index)
int
length()
CharSequence
subSequence(int start, int end)
String
toString()
Methods: Class java.lang.Object Modifier and Type Method abstract HTMLNode
clone()
boolean
equals(Object o)
int
hashCode()
-
-
-
Field Detail
-
serialVersionUID
public static final long serialVersionUID
This fulfils the SerialVersion UID requirement for all classes that implement Java'sinterface java.io.Serializable
. Using theSerializable
Implementation offered by java is very easy, and can make saving program state when debugging a lot easier. It can also be used in place of more complicated systems like "hibernate" to store data as well.- See Also:
- Constant Field Values
- Code:
- Exact Field Declaration Expression:
1
public static final long serialVersionUID = 1;
-
str
public final java.lang.String str
This is an immutable field. It stores the complete contents of an HTML node. It can be either the "textual contents" of an HTMLTagNode
, or the text (directly) of the text-inside of an HTML page!
FOR INSTANCE:- A subclass of HTMLNode -
TagNode
- could contain the String <SPAN STYLE="CSS INFO">" inside thisstr field
here. - The other sub-class of HTML -
TextNode
- could contain theString
"This is a news-page from www.Gov.CN Chinese Government Portal." inside thisstr field
here.
NOTE: Because sub-classes ofHTMLNode
are all immutable, generally, if you wish to change the contents of an HTML page, a programmer is required to create new nodes, rather than changing these fields.- Code:
- Exact Field Declaration Expression:
1
public final String str;
- A subclass of HTMLNode -
-
-
Constructor Detail
-
HTMLNode
protected HTMLNode(java.lang.String s)
Constructor that builds a newHTMLNode
- Parameters:
s
- A valid string of an HTML element.
-
-
Method Detail
-
hashCode
public final int hashCode()
Java's hash-code requirement.
FINAL METHOD: This method is final, and cannot be modified by sub-classes.- Overrides:
hashCode
in classjava.lang.Object
- Returns:
- A hash-code that may be used when storing this node in a java sorted-collection.
- Code:
- Exact Method Body:
1
return this.str.hashCode();
-
equals
public final boolean equals(java.lang.Object o)
Java'spublic boolean equals(Object o)
requirements.
FINAL METHOD: This method is final, and cannot be modified by sub-classes.- Overrides:
equals
in classjava.lang.Object
- Parameters:
o
- This may be any Java Object, but only ones of'this'
type whose internal-values are identical will cause this method to return TRUE.- Returns:
- TRUE If
'this'
equals another objectHTMLNode.
- Code:
- Exact Method Body:
1 2 3
return (this == o) || ( (o != null) && (this.getClass().equals(o.getClass())) && (((HTMLNode) o).str.equals(this.str)) );
-
clone
public abstract HTMLNode clone()
Sub-classes ofHTMLNode
must beCloneable.
- Overrides:
clone
in classjava.lang.Object
- Returns:
- Must return an identical copy of
'this'
node. The object reference cannot be'this'
reference.
-
toString
public final java.lang.String toString()
Java'stoString()
requirement.
FINAL METHOD: This method is final, and cannot be modified by sub-classes.- Specified by:
toString
in interfacejava.lang.CharSequence
- Overrides:
toString
in classjava.lang.Object
- Returns:
- A
String
-representation of thisHTMLNode.
- Code:
- Exact Method Body:
1
return this.str;
-
charAt
public final char charAt(int index)
Returns the char value at the specified index of the field:public final String str
. An index ranges from'0'
(zero) toHTMLNode.str.length() - 1.
The firstchar
value of the sequence is at index zero, the next at index one, and so on, as for array indexing.
NOTE: If thechar
value specified by the index is a surrogate, the surrogate value is returned.
FINAL METHOD: This method is final, and cannot be modified by sub-classes.- Specified by:
charAt
in interfacejava.lang.CharSequence
- Parameters:
index
- The index of thechar
value to be returned- Returns:
- The specified
char
value - Code:
- Exact Method Body:
1
return str.charAt(index);
-
length
public final int length()
Returns the length of the fieldpublic final String str
. The length is the number of 16-bit chars in the sequence.
FINAL METHOD: This method is final, and cannot be modified by sub-classes.- Specified by:
length
in interfacejava.lang.CharSequence
- Returns:
- the number of
chars
inthis.str
- Code:
- Exact Method Body:
1
return str.length();
-
subSequence
public final java.lang.CharSequence subSequence(int start, int end)
Returns aCharSequence
that is a subsequence of thepublic final String str
field of'this' HTMLNode
. The subsequence starts with thechar
value at the specified index and ends with thechar
value at indexend - 1.
The length (in chars) of the returned sequence isend - start
, so ifstart == end
then an empty sequence is returned.
FINAL METHOD: This method is final, and cannot be modified by sub-classes.- Specified by:
subSequence
in interfacejava.lang.CharSequence
- Parameters:
start
- The start index, inclusiveend
- The end index, exclusive- Returns:
- The specified subsequence
- Code:
- Exact Method Body:
1
return str.substring(start, end);
-
isCommentNode
public boolean isCommentNode()
This method will return TRUE for any instance of'CommentNode'
.
The purpose of this method is to efficiently return TRUE whenever an instance of'HTMLNode'
should be checked to see if it is actually an inherited instance ofCommentNode
. This is (marginally) more efficient than using the Java'instanceof'
operator.- Returns:
- This (top-level inheritance-tree) method always returns FALSE. The
'.java'
file forclass CommentNode
overrides this method, and returns TRUE. - See Also:
CommentNode.isCommentNode()
- Code:
- Exact Method Body:
1 2 3
return false; // This method will *only* be over-ridden by subclass CommentNode, where it shall return // TRUE. Neither class TextNode, nor class TagNode will over-ride this method.
-
isTextNode
public boolean isTextNode()
This method will return TRUE for any instance of'TextNode'
.
The purpose of this method is to efficiently return TRUE whenever an instance of'HTMLNode'
should be checked to see if it is actually an inherited instance ofTextNode
. This is (marginally) more efficient than using the Java'instanceof'
operator.- Returns:
- This (top-level inheritance-tree) method always returns FALSE. The
'.java'
file forclass TextNode
overrides this method, and returns TRUE. - See Also:
TextNode.isTextNode()
- Code:
- Exact Method Body:
1 2 3
return false; // This method will *only* be over-ridden by subclass TextNode, where it shall return // TRUE. Neither class CommentNode, nor class TagNode will over-ride this method.
-
isTagNode
public boolean isTagNode()
This method will return TRUE for any instance of'TagNode'
.
The purpose of this method is to efficiently return TRUE whenever an instance of'HTMLNode'
should be checked to see if it is actually an inherited instance ofTagNode
. This is (marginally) more efficient than using the Java'instanceof'
operator.- Returns:
- This (top-level inheritance-tree) method always returns FALSE. The
'.java'
file forclass TagNode
overrides this method, and returns TRUE. - See Also:
TagNode.isTagNode()
- Code:
- Exact Method Body:
1 2 3
return false; // This method will *only* be over-ridden by subclass TagNode, where it shall return // TRUE. Neither class TextNode, nor class CommentNode will over-ride this method.
-
-