277 lines
6.9 KiB
Java
277 lines
6.9 KiB
Java
/*
|
|
* Licensed to the Apache Software Foundation (ASF) under one or more
|
|
* contributor license agreements. See the NOTICE file distributed with
|
|
* this work for additional information regarding copyright ownership.
|
|
* The ASF licenses this file to You under the Apache License, Version 2.0
|
|
* (the "License"); you may not use this file except in compliance with
|
|
* the License. You may obtain a copy of the License at
|
|
*
|
|
* http://www.apache.org/licenses/LICENSE-2.0
|
|
*
|
|
* Unless required by applicable law or agreed to in writing, software
|
|
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
* See the License for the specific language governing permissions and
|
|
* limitations under the License.
|
|
*/
|
|
package org.apache.html.dom;
|
|
|
|
import org.w3c.dom.Node;
|
|
import org.w3c.dom.NodeList;
|
|
import org.w3c.dom.html.HTMLCollection;
|
|
import org.w3c.dom.html.HTMLElement;
|
|
import org.w3c.dom.html.HTMLTableCellElement;
|
|
import org.w3c.dom.html.HTMLTableElement;
|
|
import org.w3c.dom.html.HTMLTableRowElement;
|
|
import org.w3c.dom.html.HTMLTableSectionElement;
|
|
|
|
/**
|
|
* @xerces.internal
|
|
* @version $Revision$ $Date$
|
|
* @author <a href="mailto:arkin@exoffice.com">Assaf Arkin</a>
|
|
* @see org.w3c.dom.html.HTMLTableRowElement
|
|
* @see org.apache.xerces.dom.ElementImpl
|
|
*/
|
|
public class HTMLTableRowElementImpl
|
|
extends HTMLElementImpl
|
|
implements HTMLTableRowElement
|
|
{
|
|
|
|
private static final long serialVersionUID = 5409562635656244263L;
|
|
|
|
public int getRowIndex()
|
|
{
|
|
Node parent;
|
|
|
|
parent = getParentNode();
|
|
if ( parent instanceof HTMLTableSectionElement ) {
|
|
parent = parent.getParentNode();
|
|
}
|
|
if ( parent instanceof HTMLTableElement ) {
|
|
return getRowIndex( parent );
|
|
}
|
|
return -1;
|
|
}
|
|
|
|
|
|
public void setRowIndex( int rowIndex )
|
|
{
|
|
Node parent;
|
|
|
|
parent = getParentNode();
|
|
if ( parent instanceof HTMLTableSectionElement ) {
|
|
parent = parent.getParentNode();
|
|
}
|
|
if ( parent instanceof HTMLTableElement ) {
|
|
( (HTMLTableElementImpl) parent ).insertRowX( rowIndex, this );
|
|
}
|
|
}
|
|
|
|
|
|
public int getSectionRowIndex()
|
|
{
|
|
Node parent;
|
|
|
|
parent = getParentNode();
|
|
if ( parent instanceof HTMLTableSectionElement ) {
|
|
return getRowIndex( parent );
|
|
}
|
|
return -1;
|
|
}
|
|
|
|
|
|
public void setSectionRowIndex( int sectionRowIndex )
|
|
{
|
|
Node parent;
|
|
|
|
parent = getParentNode();
|
|
if ( parent instanceof HTMLTableSectionElement ) {
|
|
( (HTMLTableSectionElementImpl) parent ).insertRowX( sectionRowIndex, this );
|
|
}
|
|
}
|
|
|
|
|
|
int getRowIndex( Node parent )
|
|
{
|
|
NodeList rows;
|
|
int i;
|
|
|
|
// Use getElementsByTagName() which creates a snapshot of all the
|
|
// TR elements under the TABLE/section. Access to the returned NodeList
|
|
// is very fast and the snapshot solves many synchronization problems.
|
|
rows = ( (HTMLElement) parent ).getElementsByTagName( "TR" );
|
|
for ( i = 0 ; i < rows.getLength() ; ++i ) {
|
|
if ( rows.item( i ) == this ) {
|
|
return i;
|
|
}
|
|
}
|
|
return -1;
|
|
}
|
|
|
|
|
|
public HTMLCollection getCells()
|
|
{
|
|
if ( _cells == null ) {
|
|
_cells = new HTMLCollectionImpl( this, HTMLCollectionImpl.CELL );
|
|
}
|
|
return _cells;
|
|
}
|
|
|
|
|
|
public void setCells( HTMLCollection cells )
|
|
{
|
|
Node child;
|
|
int i;
|
|
|
|
child = getFirstChild();
|
|
while ( child != null ) {
|
|
removeChild( child );
|
|
child = child.getNextSibling();
|
|
}
|
|
i = 0;
|
|
child = cells.item( i );
|
|
while ( child != null ) {
|
|
appendChild ( child );
|
|
++i;
|
|
child = cells.item( i );
|
|
}
|
|
}
|
|
|
|
|
|
public HTMLElement insertCell( int index )
|
|
{
|
|
Node child;
|
|
HTMLElement newCell;
|
|
|
|
newCell = new HTMLTableCellElementImpl( (HTMLDocumentImpl) getOwnerDocument(), "TD" );
|
|
child = getFirstChild();
|
|
while ( child != null ) {
|
|
if ( child instanceof HTMLTableCellElement ) {
|
|
if ( index == 0 ) {
|
|
insertBefore( newCell, child );
|
|
return newCell;
|
|
}
|
|
--index;
|
|
}
|
|
child = child.getNextSibling();
|
|
}
|
|
appendChild( newCell );
|
|
return newCell;
|
|
}
|
|
|
|
|
|
public void deleteCell( int index )
|
|
{
|
|
Node child;
|
|
|
|
child = getFirstChild();
|
|
while ( child != null ) {
|
|
if ( child instanceof HTMLTableCellElement ) {
|
|
if ( index == 0 ) {
|
|
removeChild ( child );
|
|
return;
|
|
}
|
|
--index;
|
|
}
|
|
child = child.getNextSibling();
|
|
}
|
|
}
|
|
|
|
|
|
public String getAlign()
|
|
{
|
|
return capitalize( getAttribute( "align" ) );
|
|
}
|
|
|
|
|
|
public void setAlign( String align )
|
|
{
|
|
setAttribute( "align", align );
|
|
}
|
|
|
|
|
|
public String getBgColor()
|
|
{
|
|
return getAttribute( "bgcolor" );
|
|
}
|
|
|
|
|
|
public void setBgColor( String bgColor )
|
|
{
|
|
setAttribute( "bgcolor", bgColor );
|
|
}
|
|
|
|
|
|
public String getCh()
|
|
{
|
|
String ch;
|
|
|
|
// Make sure that the access key is a single character.
|
|
ch = getAttribute( "char" );
|
|
if ( ch != null && ch.length() > 1 ) {
|
|
ch = ch.substring( 0, 1 );
|
|
}
|
|
return ch;
|
|
}
|
|
|
|
|
|
public void setCh( String ch )
|
|
{
|
|
// Make sure that the access key is a single character.
|
|
if ( ch != null && ch.length() > 1 ) {
|
|
ch = ch.substring( 0, 1 );
|
|
}
|
|
setAttribute( "char", ch );
|
|
}
|
|
|
|
|
|
public String getChOff()
|
|
{
|
|
return getAttribute( "charoff" );
|
|
}
|
|
|
|
|
|
public void setChOff( String chOff )
|
|
{
|
|
setAttribute( "charoff", chOff );
|
|
}
|
|
|
|
|
|
public String getVAlign()
|
|
{
|
|
return capitalize( getAttribute( "valign" ) );
|
|
}
|
|
|
|
|
|
public void setVAlign( String vAlign )
|
|
{
|
|
setAttribute( "valign", vAlign );
|
|
}
|
|
|
|
/**
|
|
* Explicit implementation of cloneNode() to ensure that cache used
|
|
* for getCells() gets cleared.
|
|
*/
|
|
public Node cloneNode( boolean deep ) {
|
|
HTMLTableRowElementImpl clonedNode = (HTMLTableRowElementImpl)super.cloneNode( deep );
|
|
clonedNode._cells = null;
|
|
return clonedNode;
|
|
}
|
|
|
|
/**
|
|
* Constructor requires owner document.
|
|
*
|
|
* @param owner The owner HTML document
|
|
*/
|
|
public HTMLTableRowElementImpl( HTMLDocumentImpl owner, String name )
|
|
{
|
|
super( owner, name );
|
|
}
|
|
|
|
|
|
HTMLCollection _cells;
|
|
|
|
|
|
}
|
|
|