blob: 1c2ca806d510c987c8bed373835e84a214657f6f [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.ICSSDocument;
import org.eclipse.wst.css.core.internal.provisional.document.ICSSNode;
import org.eclipse.wst.css.core.internal.provisional.document.ICSSPrimitiveValue;
import org.w3c.dom.DOMException;
import org.w3c.dom.css.Counter;
import org.w3c.dom.css.RGBColor;
import org.w3c.dom.css.Rect;
/**
*
*/
class CSSPrimitiveValueImpl extends CSSRegionContainer implements ICSSPrimitiveValue {
protected short fPrimitiveType = CSS_UNKNOWN;
private float fFloatValue = 0.0f;
private String fStringValue = null;
CSSPrimitiveValueImpl(CSSPrimitiveValueImpl that) {
super(that);
this.fPrimitiveType = that.fPrimitiveType;
this.fFloatValue = that.fFloatValue;
this.fStringValue = that.fStringValue;
}
CSSPrimitiveValueImpl(short primitiveType) {
super();
fPrimitiveType = primitiveType;
}
public ICSSNode cloneNode(boolean deep) {
CSSPrimitiveValueImpl cloned = new CSSPrimitiveValueImpl(this);
return cloned;
}
/**
* This method is used to get the Counter value. If this CSS value doesn't
* contain a counter value, a <code>DOMException</code> is raised.
* Modification to the corresponding style property can be achieved using
* the <code>Counter</code> interface.
*
* @return The Counter value.
* @exception DOMException
* INVALID_ACCESS_ERR: Raised if the CSS value doesn't
* contain a Counter value (e.g. this is not
* <code>CSS_COUNTER</code>).
*/
public Counter getCounterValue() throws DOMException {
throw new DOMException(DOMException.INVALID_ACCESS_ERR, "");//$NON-NLS-1$
}
/**
* @return java.lang.String
*/
public java.lang.String getCSSValueText() {
return getCssText();
}
/**
* A code defining the type of the value as defined above.
*/
public short getCssValueType() {
if (getPrimitiveType() == CSS_INHERIT_PRIMITIVE) {
return CSS_INHERIT;
}
else {
return CSS_PRIMITIVE_VALUE;
}
}
/**
* This method is used to get a float value in a specified unit. If this
* CSS value doesn't contain a float value or can't be converted into the
* specified unit, a <code>DOMException</code> is raised.
*
* @param unitType
* A unit code to get the float value. The unit code can only
* be a float unit type (i.e. <code>CSS_NUMBER</code>,
* <code>CSS_PERCENTAGE</code>,<code>CSS_EMS</code>,
* <code>CSS_EXS</code>,<code>CSS_PX</code>,
* <code>CSS_CM</code>,<code>CSS_MM</code>,
* <code>CSS_IN</code>,<code>CSS_PT</code>,
* <code>CSS_PC</code>,<code>CSS_DEG</code>,
* <code>CSS_RAD</code>,<code>CSS_GRAD</code>,
* <code>CSS_MS</code>,<code>CSS_S</code>,
* <code>CSS_HZ</code>,<code>CSS_KHZ</code>,
* <code>CSS_DIMENSION</code>).
* @return The float value in the specified unit.
* @exception DOMException
* INVALID_ACCESS_ERR: Raised if the CSS value doesn't
* contain a float value or if the float value can't be
* converted into the specified unit.
*/
public float getFloatValue(short unitType) throws DOMException {
switch (fPrimitiveType) {
case CSS_NUMBER :
case CSS_PERCENTAGE :
case CSS_EMS :
case CSS_EXS :
case CSS_PX :
case CSS_CM :
case CSS_MM :
case CSS_IN :
case CSS_PT :
case CSS_PC :
case CSS_DEG :
case CSS_RAD :
case CSS_GRAD :
case CSS_MS :
case CSS_S :
case CSS_HZ :
case CSS_KHZ :
case CSS_DIMENSION :
case CSS_INTEGER :
case CSS_HASH :
return fFloatValue;
default :
throw new DOMException(DOMException.INVALID_ACCESS_ERR, "");//$NON-NLS-1$
}
}
/**
* Insert the method's description here. Creation date: (2001/01/17
* 12:12:18)
*
* @return short
*/
public short getNodeType() {
return PRIMITIVEVALUE_NODE;
}
/**
* The type of the value as defined by the constants specified above.
*/
public short getPrimitiveType() {
return fPrimitiveType;
}
/**
* This method is used to get the Rect value. If this CSS value doesn't
* contain a rect value, a <code>DOMException</code> is raised.
* Modification to the corresponding style property can be achieved using
* the <code>Rect</code> interface.
*
* @return The Rect value.
* @exception DOMException
* INVALID_ACCESS_ERR: Raised if the CSS value doesn't
* contain a Rect value. (e.g. this is not
* <code>CSS_RECT</code>).
*/
public Rect getRectValue() throws DOMException {
throw new DOMException(DOMException.INVALID_ACCESS_ERR, "");//$NON-NLS-1$
}
/**
* This method is used to get the RGB color. If this CSS value doesn't
* contain a RGB color value, a <code>DOMException</code> is raised.
* Modification to the corresponding style property can be achieved using
* the <code>RGBColor</code> interface.
*
* @return the RGB color value.
* @exception DOMException
* INVALID_ACCESS_ERR: Raised if the attached property
* can't return a RGB color value (e.g. this is not
* <code>CSS_RGBCOLOR</code>).
*/
public RGBColor getRGBColorValue() throws DOMException {
throw new DOMException(DOMException.INVALID_ACCESS_ERR, "");//$NON-NLS-1$
}
/**
* This method is used to get the string value. If the CSS value doesn't
* contain a string value, a <code>DOMException</code> is raised. Some
* properties (like 'font-family' or 'voice-family') convert a whitespace
* separated list of idents to a string.
*
* @return The string value in the current unit. The current
* <code>primitiveType</code> can only be a string unit type
* (i.e. <code>CSS_STRING</code>,<code>CSS_URI</code>,
* <code>CSS_IDENT</code> and <code>CSS_ATTR</code>).
* @exception DOMException
* INVALID_ACCESS_ERR: Raised if the CSS value doesn't
* contain a string value.
*/
public String getStringValue() throws DOMException {
switch (fPrimitiveType) {
case CSS_STRING :
case CSS_URI :
case CSS_IDENT :
case CSS_ATTR :
case CSS_URANGE :
case CSS_FORMAT :
case CSS_LOCAL :
case CSS_HASH :
case CSS_COMMA :
case CSS_SLASH :
case CSS_INHERIT_PRIMITIVE :
return fStringValue;
default :
throw new DOMException(DOMException.INVALID_ACCESS_ERR, "");//$NON-NLS-1$
}
}
/**
*
*/
protected void notifyValueChanged(String oldValue) {
// for model
ICSSDocument doc = getContainerDocument();
if (doc == null)
return;
CSSModelImpl model = (CSSModelImpl) doc.getModel();
if (model == null)
return;
model.valueChanged(this, oldValue);
// for adapters
notify(CHANGE, new Short(fPrimitiveType), null, null, getStartOffset());
}
/**
* A method to set the float value with a specified unit. If the property
* attached with this value can not accept the specified unit or the float
* value, the value will be unchanged and a <code>DOMException</code>
* will be raised.
*
* @param unitType
* A unit code as defined above. The unit code can only be a
* float unit type (i.e. <code>CSS_NUMBER</code>,
* <code>CSS_PERCENTAGE</code>,<code>CSS_EMS</code>,
* <code>CSS_EXS</code>,<code>CSS_PX</code>,
* <code>CSS_CM</code>,<code>CSS_MM</code>,
* <code>CSS_IN</code>,<code>CSS_PT</code>,
* <code>CSS_PC</code>,<code>CSS_DEG</code>,
* <code>CSS_RAD</code>,<code>CSS_GRAD</code>,
* <code>CSS_MS</code>,<code>CSS_S</code>,
* <code>CSS_HZ</code>,<code>CSS_KHZ</code>,
* <code>CSS_DIMENSION</code>).
* @param floatValue
* The new float value.
* @exception DOMException
* INVALID_ACCESS_ERR: Raised if the attached property
* doesn't support the float value or the unit type. <br>
* NO_MODIFICATION_ALLOWED_ERR: Raised if this property is
* readonly.
*/
public void setFloatValue(short unitType, float floatValue) throws DOMException {
switch (unitType) {
case CSS_NUMBER :
case CSS_PERCENTAGE :
case CSS_EMS :
case CSS_EXS :
case CSS_PX :
case CSS_CM :
case CSS_MM :
case CSS_IN :
case CSS_PT :
case CSS_PC :
case CSS_DEG :
case CSS_RAD :
case CSS_GRAD :
case CSS_MS :
case CSS_S :
case CSS_HZ :
case CSS_KHZ :
case CSS_DIMENSION :
case CSS_INTEGER :
String oldValue = getCSSValueText();
fPrimitiveType = unitType;
fFloatValue = floatValue;
notifyValueChanged(oldValue);
break;
default :
throw new DOMException(DOMException.INVALID_ACCESS_ERR, "");//$NON-NLS-1$
}
}
/**
* A method to set the string value with the specified unit. If the
* property attached to this value can't accept the specified unit or the
* string value, the value will be unchanged and a
* <code>DOMException</code> will be raised.
*
* @param stringType
* A string code as defined above. The string code can only be
* a string unit type (i.e. <code>CSS_STRING</code>,
* <code>CSS_URI</code>,<code>CSS_IDENT</code>, and
* <code>CSS_ATTR</code>).
* @param stringValue
* The new string value.
* @exception DOMException
* INVALID_ACCESS_ERR: Raised if the CSS value doesn't
* contain a string value or if the string value can't be
* converted into the specified unit. <br>
* NO_MODIFICATION_ALLOWED_ERR: Raised if this property is
* readonly.
*/
public void setStringValue(short stringType, String stringValue) throws DOMException {
switch (stringType) {
case CSS_STRING :
case CSS_URI :
case CSS_IDENT :
case CSS_ATTR :
case CSS_URANGE :
case CSS_FORMAT :
case CSS_LOCAL :
case CSS_HASH :
case CSS_COMMA :
case CSS_SLASH :
case CSS_INHERIT_PRIMITIVE :
String oldValue = getCSSValueText();
fPrimitiveType = stringType;
fStringValue = stringValue;
notifyValueChanged(oldValue);
break;
default :
throw new DOMException(DOMException.INVALID_ACCESS_ERR, "");//$NON-NLS-1$
}
}
/**
* Insert the method's description here. Creation date: (2001/01/24
* 15:06:25)
*
* @param floatValue
* float
* @exception org.w3c.dom.DOMException
* The exception description.
*/
public void setValue(float floatValue) throws org.w3c.dom.DOMException {
setFloatValue(getPrimitiveType(), floatValue);
}
/**
* Insert the method's description here. Creation date: (2001/01/24
* 15:06:25)
*
* @param stringValue
* java.lang.String
* @exception org.w3c.dom.DOMException
* The exception description.
*/
public void setValue(java.lang.String stringValue) throws org.w3c.dom.DOMException {
setStringValue(getPrimitiveType(), stringValue);
}
}