themeinstaller/source/src/com/nokia/tools/themeinstaller/odtconverter/PropertyValue.java
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/themeinstaller/source/src/com/nokia/tools/themeinstaller/odtconverter/PropertyValue.java Tue Feb 02 00:15:44 2010 +0200
@@ -0,0 +1,233 @@
+/*
+* Copyright (c) 2007 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: Single property value for property value list.
+ *
+*/
+
+
+package com.nokia.tools.themeinstaller.odtconverter;
+
+import java.awt.Color;
+import java.io.IOException;
+
+/**
+ * Property value stores style related data before it is externalized
+ * to a binary format.
+ */
+public class PropertyValue
+ {
+
+ // CONSTANTS
+ // Ident types
+ public static final String STRING_AUTO = "auto";
+ public static final String STRING_NONE = "none";
+ public static final String STRING_INHERIT = "inherit";
+
+ public static final int E_NOT_SET = 0;
+ public static final int E_AUTO = 1;
+ public static final int E_NONE = 2;
+ public static final int E_INHERIT = 3;
+
+ // Property value type
+ private Short iValueType;
+
+ // Flag to identify ident
+ private int iIdentType;
+
+ // Rgb color value
+ private Color iRgbValue;
+
+ // Real value
+ private double iRealValue;
+
+ // String pool index to a string value
+ private int iStringRef;
+
+ // Reference to the String Pool
+ private StringPool iStringPool;
+
+ /**
+ * Constructor.
+ * @param aStringPool Reference to the String Pool
+ */
+ public PropertyValue( StringPool aStringPool )
+ {
+ iStringPool = aStringPool;
+ }
+
+ /**
+ * Set rgb value.
+ * @param aRgbValue the value to set
+ * @param aValueType primitive value type
+ * @throws ODTException
+ * @throws ODTException if primitive value type is not a rgb color type
+ */
+ public void setRgbValue( Color aRgbValue )
+ throws ODTException
+ {
+ iRgbValue = aRgbValue;
+ iValueType = new Short( ValueTypeResolver.E_RGB_COLOR );
+ }
+
+ /**
+ * Set real value.
+ * @param aRealValue the value to set
+ * @param aValueType primitive value type
+ * @throws ODTException if primitive value type is not a real value type
+ */
+ public void setRealValue( double aRealValue, short aValueType )
+ throws ODTException
+ {
+ // Verify the value type
+ switch( aValueType )
+ {
+ case ValueTypeResolver.E_NUMBER:
+ case ValueTypeResolver.E_PERCENTAGE:
+ case ValueTypeResolver.E_EMS:
+ case ValueTypeResolver.E_EXS:
+ case ValueTypeResolver.E_PX:
+ case ValueTypeResolver.E_CM:
+ case ValueTypeResolver.E_MM:
+ case ValueTypeResolver.E_IN:
+ case ValueTypeResolver.E_PT:
+ case ValueTypeResolver.E_PC:
+ case ValueTypeResolver.E_DEG:
+ case ValueTypeResolver.E_RAD:
+ case ValueTypeResolver.E_GRAD:
+ case ValueTypeResolver.E_MS:
+ case ValueTypeResolver.E_S:
+ case ValueTypeResolver.E_HZ:
+ case ValueTypeResolver.E_KHZ:
+ case ValueTypeResolver.E_UNIT_VALUE:
+ break;
+
+ default:
+ throw new ODTException(
+ "Property value type is not compatible with real: "
+ + aValueType );
+ }
+
+ iRealValue = aRealValue;
+ iValueType = new Short( aValueType );
+ }
+
+ /**
+ * Set string value.
+ * @param aString the string to set
+ * @param aValueType primitive value type
+ * @throws ODTException if primitive value type is not a string type
+ */
+ public void setString( String aString, short aValueType )
+ throws ODTException
+ {
+ // Verify the value type
+ switch( aValueType )
+ {
+ case ValueTypeResolver.E_STRING:
+ case ValueTypeResolver.E_IDENT:
+ case ValueTypeResolver.E_URI:
+ case ValueTypeResolver.E_ATTR:
+ case ValueTypeResolver.E_UNKNOWN:
+ break;
+
+ default:
+ throw new ODTException(
+ "Property value type is not compatible with string: "
+ + aValueType );
+ }
+
+ // Add string to the pool
+ iStringRef = iStringPool.addString( aString );
+
+ // Resolve ident type
+ if ( aString.equals( STRING_AUTO ) )
+ {
+ iIdentType = E_AUTO;
+ }
+ else if ( aString.equals( STRING_INHERIT ) )
+ {
+ iIdentType = E_INHERIT;
+ }
+ else if ( aString.equals( STRING_NONE ) )
+ {
+ iIdentType = E_NONE;
+ }
+ else
+ {
+ iIdentType = E_NOT_SET;
+ }
+ iValueType = new Short( aValueType );
+ }
+
+ /**
+ * Externalize the property value to a stream.
+ * @param aStream stream to use for externalization
+ * @throws IOException if writing to a stream fails
+ * @throws ODTException if value type can not be resolved
+ */
+ public void externalize( ODTDataOutputStream aStream )
+ throws IOException, ODTException
+ {
+ // Write property value type - int8
+ aStream.writeByte( iValueType.byteValue() );
+
+ // Write property value data - real/int16/rgb
+ switch( iValueType.intValue() )
+ {
+ // Real value
+ case ValueTypeResolver.E_NUMBER:
+ case ValueTypeResolver.E_PERCENTAGE:
+ case ValueTypeResolver.E_EMS:
+ case ValueTypeResolver.E_EXS:
+ case ValueTypeResolver.E_PX:
+ case ValueTypeResolver.E_CM:
+ case ValueTypeResolver.E_MM:
+ case ValueTypeResolver.E_IN:
+ case ValueTypeResolver.E_PT:
+ case ValueTypeResolver.E_PC:
+ case ValueTypeResolver.E_DEG:
+ case ValueTypeResolver.E_RAD:
+ case ValueTypeResolver.E_GRAD:
+ case ValueTypeResolver.E_MS:
+ case ValueTypeResolver.E_S:
+ case ValueTypeResolver.E_HZ:
+ case ValueTypeResolver.E_KHZ:
+ case ValueTypeResolver.E_UNIT_VALUE:
+ aStream.writeTReal64( iRealValue );
+ break;
+
+ // String value and ident type
+ case ValueTypeResolver.E_STRING:
+ case ValueTypeResolver.E_IDENT:
+ case ValueTypeResolver.E_URI:
+ case ValueTypeResolver.E_ATTR:
+ case ValueTypeResolver.E_UNKNOWN:
+ aStream.writeInt16( iStringRef );
+ aStream.writeByte( iIdentType );
+ break;
+
+ // Rgb value
+ case ValueTypeResolver.E_RGB_COLOR:
+ aStream.writeByte( iRgbValue.getRed() );
+ aStream.writeByte( iRgbValue.getGreen() );
+ aStream.writeByte( iRgbValue.getBlue() );
+ break;
+ default:
+ throw new ODTException( "Property value can not be resolved: "
+ + iValueType );
+ }
+
+ }
+
+ }