themeinstaller/source/src/com/nokia/tools/themeinstaller/cssparser/CSSSpecificity.java
branchRCL_3
changeset 18 04b7640f6fb5
parent 0 05da4621cfb2
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/themeinstaller/source/src/com/nokia/tools/themeinstaller/cssparser/CSSSpecificity.java	Wed Sep 01 12:32:13 2010 +0100
@@ -0,0 +1,135 @@
+/*
+* 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:  Stores the information for Style rules priority
+ *
+*/
+
+
+package com.nokia.tools.themeinstaller.cssparser;
+
+/**
+ * The Class CSSSpecificity stores the information for Style rules priority
+ */
+public class CSSSpecificity
+    {
+    final public static int ID = 0;
+    final public static int ATTRIBUTE = 1;
+    final public static int ELEMENT = 2;
+
+    /** Table for counting specificity occurrences. */
+    private int[] iSpecificity = { 0, 0, 0 };
+
+    /**
+     * Increase id count.
+     */
+    public void incID()
+        {
+        ++iSpecificity[ ID ];
+        }
+
+    /**
+     * Increase attribute count.
+     */
+    public void incAttribute()
+        {
+        ++iSpecificity[ ATTRIBUTE ];
+        }
+
+    /**
+     * Increase element count.
+     */
+    public void incElement()
+        {
+        ++iSpecificity[ ELEMENT ];
+        }
+
+    /**
+     * Gets the specificity table.
+     *
+     * @return the specificity
+     */
+    public int[] getSpecificity()
+        {
+        return iSpecificity;
+        }
+
+    /**
+     * Reset the table.
+     */
+    public void reset()
+        {
+        iSpecificity[ ID ] = 0;
+        iSpecificity[ ATTRIBUTE ] = 0;
+        iSpecificity[ ELEMENT ] = 0;
+        }
+
+    /**
+     * Compare for another specificity.
+     *
+     * Order for priorities (3 has the highest priority): 1. element 2. .class
+     * 3. #id
+     *
+     * @param aSpecificity Specificity to be compared
+     *
+     * @return 0 if this is equal, -1 if this is less, +1 if this is greater.
+     */
+    public int compare( CSSSpecificity aSpecificity )
+        {
+        int difference;
+
+        difference = iSpecificity[ ID ] - aSpecificity.iSpecificity[ ID ];
+        if ( difference != 0 )
+            {
+            if ( difference < 0 )
+                {
+                return -1;
+                }
+            else
+                {
+                return 1;
+                }
+            }
+
+        difference = iSpecificity[ ATTRIBUTE ]
+                - aSpecificity.iSpecificity[ ATTRIBUTE ];
+        if ( difference != 0 )
+            {
+            if ( difference < 0 )
+                {
+                return -1;
+                }
+            else
+                {
+                return 1;
+                }
+            }
+
+        difference = iSpecificity[ ELEMENT ]
+                - aSpecificity.iSpecificity[ ELEMENT ];
+        if ( difference != 0 )
+            {
+            if ( difference < 0 )
+                {
+                return -1;
+                }
+            else
+                {
+                return 1;
+                }
+            }
+
+        return 0;
+        }
+
+    }