package org.lobobrowser.html.domimpl;
import org.w3c.dom.html.HTMLFormElement;
import org.w3c.dom.html.HTMLOptionElement;
import org.w3c.dom.html.HTMLSelectElement;
public class HTMLOptionElementImpl extends HTMLElementImpl implements HTMLOptionElement {
public HTMLOptionElementImpl(final String name) {
super(name, true);
}
public boolean getDefaultSelected() {
return this.getAttributeAsBoolean("selected");
}
public boolean getDisabled() {
return false;
}
public HTMLFormElement getForm() {
return this.getForm();
}
public int getIndex() {
final Object parent = this.getParentNode();
if (parent instanceof HTMLSelectElement) {
final HTMLOptionsCollectionImpl options = (HTMLOptionsCollectionImpl) ((HTMLSelectElement) parent).getOptions();
return options.indexOf(this);
} else {
return -1;
}
}
public String getLabel() {
return this.getAttribute("label");
}
public boolean getSelected() {
return this.selected;
}
public String getText() {
return this.getRawInnerText(false);
}
public void setText(final String value) {
this.setTextContent(value);
}
public String getValue() {
return this.getAttribute("value");
}
public void setDefaultSelected(final boolean defaultSelected) {
this.setAttribute("selected", defaultSelected ? "selected" : null);
}
public void setDisabled(final boolean disabled) {
// TODO Unsupported
}
public void setLabel(final String label) {
this.setAttribute("label", label);
}
private boolean selected;
void setSelectedImpl(final boolean selected) {
this.selected = selected;
}
public void setSelected(final boolean selected) {
final boolean changed = selected != this.selected;
this.selected = selected;
// Changing the option state changes the selected index.
final Object parent = this.getParentNode();
if (parent instanceof HTMLSelectElementImpl) {
final HTMLSelectElementImpl parentSelect = ((HTMLSelectElementImpl) parent);
if (changed || (parentSelect.getSelectedIndex() == -1)) {
if (selected) {
parentSelect.setSelectedIndexImpl(this.getIndex());
} else {
final int currentIndex = parentSelect.getSelectedIndex();
if ((currentIndex != -1) && (currentIndex == this.getIndex())) {
parentSelect.setSelectedIndexImpl(-1);
}
}
}
}
}
public void setValue(final String value) {
this.setAttribute("value", value);
}
@Override
public String toString() {
return "HTMLOptionElementImpl[text=" + this.getText() + ",selected=" + this.getSelected() + "]";
}
}