blob: d5ffb6b353e3e0ee9bd7b03a6a52790b6f8a54ec [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2004 IBM Corporation and others.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/epl-v10.html
*
* Contributors:
* IBM Corporation - initial API and implementation
*******************************************************************************/
package org.eclipse.wst.css.core.internal.document;
import org.eclipse.wst.css.core.internal.provisional.document.ICSSNode;
import org.w3c.dom.DOMException;
import org.w3c.dom.stylesheets.MediaList;
/**
*
*/
class MediaListImpl extends CSSRegionContainer implements MediaList {
int mediumCounter;
/**
* MediaListImpl constructor comment.
*/
MediaListImpl() {
super();
}
/**
* MediaListImpl constructor comment.
*/
MediaListImpl(MediaListImpl that) {
super(that);
}
/**
* Adds the medium <code>newMedium</code> to the end of the list. If the
* <code>newMedium</code> is already used, it is first removed.
*
* @param newMediumThe
* new medium to add.
* @exception DOMException
* INVALID_CHARACTER_ERR: If the medium contains characters
* that are invalid in the underlying style language. <br>
* NO_MODIFICATION_ALLOWED_ERR: Raised if this list is
* readonly.
*/
public void appendMedium(String newMedium) throws DOMException {
if (newMedium == null)
return;
CSSNodeListImpl m = getMedia();
for (int i = 0; i != m.getLength(); i++) {
if (newMedium.equals(item(i)))
return;
}
setAttribute("medium" + Integer.toString(mediumCounter++), newMedium);//$NON-NLS-1$
}
public ICSSNode cloneNode(boolean deep) {
MediaListImpl cloned = new MediaListImpl(this);
return cloned;
}
/**
* Deletes the medium indicated by <code>oldMedium</code> from the list.
*
* @param oldMediumThe
* medium to delete in the media list.
* @exception DOMException
* NO_MODIFICATION_ALLOWED_ERR: Raised if this list is
* readonly. <br>
* NOT_FOUND_ERR: Raised if <code>oldMedium</code> is not
* in the list.
*/
public void deleteMedium(String oldMedium) throws DOMException {
for (int i = 0; i != getLength(); i++) {
if (oldMedium.equals(item(i))) {
removeAttributeNode((CSSAttrImpl) fAttrs.item(i));
}
}
}
/**
* The number of media in the list. The range of valid media is
* <code>0</code> to <code>length-1</code> inclusive.
*/
public int getLength() {
return getMedia().getLength();
}
/**
* @return CSSNodeListImpl
*/
CSSNodeListImpl getMedia() {
if (fAttrs == null)
fAttrs = new CSSNamedNodeMapImpl();
return fAttrs;
}
/**
* The parsable textual representation of the media list. This is a
* comma-separated list of media.
*
* @exception DOMException
* SYNTAX_ERR: Raised if the specified string value has a
* syntax error and is unparsable. <br>
* NO_MODIFICATION_ALLOWED_ERR: Raised if this media list
* is readonly.
*/
public String getMediaText() {
return getCssText();
}
/**
* Insert the method's description here. Creation date: (2001/01/17
* 18:50:29)
*
* @return short
*/
public short getNodeType() {
return MEDIALIST_NODE;
}
/**
* Returns the <code>index</code> th in the list. If <code>index</code>
* is greater than or equal to the number of media in the list, this
* returns <code>null</code>.
*
* @param index
* Index into the collection.
* @return The medium at the <code>index</code> th position in the
* <code>MediaList</code>, or <code>null</code> if that is
* not a valid index.
*/
public String item(int index) {
if (index < 0 || getLength() <= index)
return null;
return ((CSSAttrImpl) getMedia().item(index)).getValue();
}
/**
* setMediaText method comment.
*/
public void setMediaText(String mediaText) throws DOMException {
setCssText(mediaText);
}
}