| /******************************************************************************* |
| * Copyright (c) 2004, 2005 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); |
| } |
| } |