[237143] Source > Cleanup Document... for CSS can lower-case ids and classnames
diff --git a/bundles/org.eclipse.wst.css.core/src/org/eclipse/wst/css/core/internal/cleanup/CSSCleanupStrategy.java b/bundles/org.eclipse.wst.css.core/src/org/eclipse/wst/css/core/internal/cleanup/CSSCleanupStrategy.java
index eb6d86e..d1551ce 100644
--- a/bundles/org.eclipse.wst.css.core/src/org/eclipse/wst/css/core/internal/cleanup/CSSCleanupStrategy.java
+++ b/bundles/org.eclipse.wst.css.core/src/org/eclipse/wst/css/core/internal/cleanup/CSSCleanupStrategy.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2004, 2005 IBM Corporation and others.
+ * Copyright (c) 2004, 2010 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
@@ -42,6 +42,10 @@
 	 */
 	short getSelectorTagCase();
 
+	short getClassSelectorCase();
+
+	short getIdSelectorCase();
+
 	/**
 	 * 
 	 * @return boolean
@@ -95,4 +99,8 @@
 	 *            short
 	 */
 	void setSelectorTagCase(short selectorTagCase);
+
+	void setClassSelectorCase(short classSelectorCase);
+
+	void setIdSelectorCase(short idSelectorCase);
 }
diff --git a/bundles/org.eclipse.wst.css.core/src/org/eclipse/wst/css/core/internal/cleanup/CSSCleanupStrategyImpl.java b/bundles/org.eclipse.wst.css.core/src/org/eclipse/wst/css/core/internal/cleanup/CSSCleanupStrategyImpl.java
index 5b190f4..9c01902 100644
--- a/bundles/org.eclipse.wst.css.core/src/org/eclipse/wst/css/core/internal/cleanup/CSSCleanupStrategyImpl.java
+++ b/bundles/org.eclipse.wst.css.core/src/org/eclipse/wst/css/core/internal/cleanup/CSSCleanupStrategyImpl.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2004, 2005 IBM Corporation and others.
+ * Copyright (c) 2004, 2010 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
@@ -26,6 +26,8 @@
 	protected short fSelectorTagCase = UPPER;
 	protected boolean fQuoteValues = true;
 	protected boolean fFormatSource = true;
+	protected short fClassCase = ASIS;
+	protected short fIdCase = ASIS;
 
 	/**
 	 * CSSCleanupStrategyImpl constructor comment.
@@ -86,6 +88,8 @@
 		fPropNameCase = getCleanupCaseValue(prefs.getInt(CSSCorePreferenceNames.CLEANUP_CASE_PROPERTY_NAME));
 		fPropValueCase = getCleanupCaseValue(prefs.getInt(CSSCorePreferenceNames.CLEANUP_CASE_PROPERTY_VALUE));
 		fSelectorTagCase = getCleanupCaseValue(prefs.getInt(CSSCorePreferenceNames.CLEANUP_CASE_SELECTOR));
+		fIdCase = getCleanupCaseValue(prefs.getInt(CSSCorePreferenceNames.CLEANUP_CASE_ID_SELECTOR));
+		fClassCase = getCleanupCaseValue(prefs.getInt(CSSCorePreferenceNames.CLEANUP_CASE_CLASS_SELECTOR));
 		fQuoteValues = prefs.getBoolean(CSSCorePreferenceNames.QUOTE_ATTR_VALUES);
 		fFormatSource = prefs.getBoolean(CSSCorePreferenceNames.FORMAT_SOURCE);
 	}
@@ -183,8 +187,26 @@
 		CSSCorePlugin.getDefault().getPluginPreferences().setValue(CSSCorePreferenceNames.CLEANUP_CASE_PROPERTY_NAME, fPropNameCase);
 		CSSCorePlugin.getDefault().getPluginPreferences().setValue(CSSCorePreferenceNames.CLEANUP_CASE_PROPERTY_VALUE, fPropValueCase);
 		CSSCorePlugin.getDefault().getPluginPreferences().setValue(CSSCorePreferenceNames.CLEANUP_CASE_SELECTOR, fSelectorTagCase);
+		CSSCorePlugin.getDefault().getPluginPreferences().setValue(CSSCorePreferenceNames.CLEANUP_CASE_ID_SELECTOR, fIdCase);
+		CSSCorePlugin.getDefault().getPluginPreferences().setValue(CSSCorePreferenceNames.CLEANUP_CASE_CLASS_SELECTOR, fClassCase);
 		CSSCorePlugin.getDefault().getPluginPreferences().setValue(CSSCorePreferenceNames.QUOTE_ATTR_VALUES, fQuoteValues);
 		CSSCorePlugin.getDefault().getPluginPreferences().setValue(CSSCorePreferenceNames.FORMAT_SOURCE, fFormatSource);
 		CSSCorePlugin.getDefault().savePluginPreferences();
 	}
+
+	public short getClassSelectorCase() {
+		return fClassCase;
+	}
+
+	public short getIdSelectorCase() {
+		return fIdCase;
+	}
+
+	public void setClassSelectorCase(short classSelectorCase) {
+		fClassCase = classSelectorCase;
+	}
+
+	public void setIdSelectorCase(short idSelectorCase) {
+		fIdCase = idSelectorCase;
+	}
 }
diff --git a/bundles/org.eclipse.wst.css.core/src/org/eclipse/wst/css/core/internal/formatter/DeclContainerFormatter.java b/bundles/org.eclipse.wst.css.core/src/org/eclipse/wst/css/core/internal/formatter/DeclContainerFormatter.java
index ea79996..d8b4e2a 100644
--- a/bundles/org.eclipse.wst.css.core/src/org/eclipse/wst/css/core/internal/formatter/DeclContainerFormatter.java
+++ b/bundles/org.eclipse.wst.css.core/src/org/eclipse/wst/css/core/internal/formatter/DeclContainerFormatter.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2004, 2008 IBM Corporation and others.
+ * Copyright (c) 2004, 2010 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
@@ -48,14 +48,24 @@
 			text = region.getText();
 		
 		String type = region.getType();
-		if (type == CSSRegionContexts.CSS_SELECTOR_ATTRIBUTE_NAME || type == CSSRegionContexts.CSS_SELECTOR_ATTRIBUTE_VALUE || type == CSSRegionContexts.CSS_SELECTOR_CLASS || type == CSSRegionContexts.CSS_SELECTOR_ELEMENT_NAME || type == CSSRegionContexts.CSS_SELECTOR_ID || type == CSSRegionContexts.CSS_SELECTOR_PSEUDO) {
-			short selCase = stgy.getSelectorTagCase();
-			if (selCase == org.eclipse.wst.css.core.internal.cleanup.CSSCleanupStrategy.UPPER) {
-				return text.toUpperCase();
-			}
-			else if (selCase == org.eclipse.wst.css.core.internal.cleanup.CSSCleanupStrategy.LOWER) {
-				return text.toLowerCase();
-			}
+		short selCase = -1;
+		if (type == CSSRegionContexts.CSS_SELECTOR_ATTRIBUTE_NAME || type == CSSRegionContexts.CSS_SELECTOR_ATTRIBUTE_VALUE || type == CSSRegionContexts.CSS_SELECTOR_ELEMENT_NAME || type == CSSRegionContexts.CSS_SELECTOR_PSEUDO) {
+			selCase = stgy.getSelectorTagCase();
+		}
+		else if (type == CSSRegionContexts.CSS_SELECTOR_CLASS) {
+			selCase = stgy.getClassSelectorCase();
+		}
+		else if (type == CSSRegionContexts.CSS_SELECTOR_ID) {
+			selCase = stgy.getIdSelectorCase();
+		}
+
+		if (selCase == org.eclipse.wst.css.core.internal.cleanup.CSSCleanupStrategy.UPPER) {
+			return text.toUpperCase();
+		}
+		else if (selCase == org.eclipse.wst.css.core.internal.cleanup.CSSCleanupStrategy.LOWER) {
+			return text.toLowerCase();
+		}
+		else if (selCase == org.eclipse.wst.css.core.internal.cleanup.CSSCleanupStrategy.ASIS) {
 			return text;
 		}
 
diff --git a/bundles/org.eclipse.wst.css.core/src/org/eclipse/wst/css/core/internal/preferences/CSSCorePreferenceNames.java b/bundles/org.eclipse.wst.css.core/src/org/eclipse/wst/css/core/internal/preferences/CSSCorePreferenceNames.java
index d6fdf06..bce17d8 100644
--- a/bundles/org.eclipse.wst.css.core/src/org/eclipse/wst/css/core/internal/preferences/CSSCorePreferenceNames.java
+++ b/bundles/org.eclipse.wst.css.core/src/org/eclipse/wst/css/core/internal/preferences/CSSCorePreferenceNames.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2005, 2009 IBM Corporation and others.
+ * Copyright (c) 2005, 2010 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
@@ -38,6 +38,8 @@
 	public static final String CLEANUP_CASE_PROPERTY_NAME = "cleanupPropNameCase"; //$NON-NLS-1$
 	public static final String CLEANUP_CASE_PROPERTY_VALUE = "cleanupPropValueCase"; //$NON-NLS-1$
 	public static final String CLEANUP_CASE_SELECTOR = "cleanupSelectorCase"; //$NON-NLS-1$
+	public static final String CLEANUP_CASE_ID_SELECTOR = "cleanupIdSelectorCase"; //$NON-NLS-1$
+	public static final String CLEANUP_CASE_CLASS_SELECTOR = "cleanupClassSelectorCase"; //$NON-NLS-1$
 
 	/**
 	 * The default extension to use when none is specified in the New CSS File
diff --git a/bundles/org.eclipse.wst.css.ui/src/org/eclipse/wst/css/ui/internal/CSSUIMessages.java b/bundles/org.eclipse.wst.css.ui/src/org/eclipse/wst/css/ui/internal/CSSUIMessages.java
index 56040a5..692fed1 100644
--- a/bundles/org.eclipse.wst.css.ui/src/org/eclipse/wst/css/ui/internal/CSSUIMessages.java
+++ b/bundles/org.eclipse.wst.css.ui/src/org/eclipse/wst/css/ui/internal/CSSUIMessages.java
@@ -35,6 +35,7 @@
 		return fResourceBundle;
 	}
 	
+	public static String ID_Selector_Case__UI_;
 	public static String INFO_Not_Categorized_1;
 	public static String PrefsLabel_WrappingWithoutAttr;
 	public static String PrefsLabel_WrappingInsertLineBreak;
@@ -83,6 +84,7 @@
 	public static String Title_InvalidValue;
 	public static String Message_InvalidValue;
 	public static String FormatMenu_label;
+	public static String Class_Selector_Case__UI_;
 	public static String CleanupDocument_label; // resource bundle
 	public static String CleanupDocument_tooltip; // resource bundle
 	public static String CleanupDocument_description; // resource bundle
diff --git a/bundles/org.eclipse.wst.css.ui/src/org/eclipse/wst/css/ui/internal/CSSUIPluginResources.properties b/bundles/org.eclipse.wst.css.ui/src/org/eclipse/wst/css/ui/internal/CSSUIPluginResources.properties
index d165328..238c540 100644
--- a/bundles/org.eclipse.wst.css.ui/src/org/eclipse/wst/css/ui/internal/CSSUIPluginResources.properties
+++ b/bundles/org.eclipse.wst.css.ui/src/org/eclipse/wst/css/ui/internal/CSSUIPluginResources.properties
@@ -9,6 +9,7 @@
 #     IBM Corporation - initial API and implementation
 ###############################################################################
 
+ID_Selector_Case__UI_=ID Selector case:
 INFO_Not_Categorized_1=Not Categorized
 
 ## CSS Preferences -- source ##
@@ -71,6 +72,7 @@
 Message_InvalidValue=Invalid property value.
 # Copied from sse.ui
 FormatMenu_label=F&ormat
+Class_Selector_Case__UI_=Class Selector case:
 CleanupDocument_label=C&leanup Document...
 CleanupDocument_tooltip=Cleanup Document
 CleanupDocument_description=Cleanup Document
diff --git a/bundles/org.eclipse.wst.css.ui/src/org/eclipse/wst/css/ui/internal/edit/ui/CleanupDialogCSS.java b/bundles/org.eclipse.wst.css.ui/src/org/eclipse/wst/css/ui/internal/edit/ui/CleanupDialogCSS.java
index 7c60678..1bab4fd 100644
--- a/bundles/org.eclipse.wst.css.ui/src/org/eclipse/wst/css/ui/internal/edit/ui/CleanupDialogCSS.java
+++ b/bundles/org.eclipse.wst.css.ui/src/org/eclipse/wst/css/ui/internal/edit/ui/CleanupDialogCSS.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2004, 2005 IBM Corporation and others.
+ * Copyright (c) 2004, 2010 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
@@ -41,6 +41,12 @@
 	protected Button fRadioButtonSelectorTagCaseAsis;
 	protected Button fRadioButtonSelectorTagCaseLower;
 	protected Button fRadioButtonSelectorTagCaseUpper;
+	protected Button fRadioButtonSelectorIdCaseAsis;
+	protected Button fRadioButtonSelectorIdCaseLower;
+	protected Button fRadioButtonSelectorIdCaseUpper;
+	protected Button fRadioButtonSelectorClassCaseAsis;
+	protected Button fRadioButtonSelectorClassCaseLower;
+	protected Button fRadioButtonSelectorClassCaseUpper;
 	protected Button fCheckBoxQuoteValues;
 	protected Button fCheckBoxFormatSource;
 
@@ -158,6 +164,36 @@
 			fRadioButtonSelectorTagCaseUpper = new Button(selectorTagCase, SWT.RADIO);
 			fRadioButtonSelectorTagCaseUpper.setText(CSSUIMessages.Upper_UI_);
 			fRadioButtonSelectorTagCaseUpper.addSelectionListener(this);
+
+			Group selectorIdCase = new Group(panel, SWT.NULL);
+			selectorIdCase.setText(CSSUIMessages.ID_Selector_Case__UI_);
+			hLayout = new GridLayout();
+			hLayout.numColumns = 3;
+			selectorIdCase.setLayout(hLayout);
+			fRadioButtonSelectorIdCaseAsis = new Button(selectorIdCase, SWT.RADIO);
+			fRadioButtonSelectorIdCaseAsis.setText(CSSUIMessages.As_is_UI_);
+			fRadioButtonSelectorIdCaseAsis.addSelectionListener(this);
+			fRadioButtonSelectorIdCaseLower = new Button(selectorIdCase, SWT.RADIO);
+			fRadioButtonSelectorIdCaseLower.setText(CSSUIMessages.Lower_UI_);
+			fRadioButtonSelectorIdCaseLower.addSelectionListener(this);
+			fRadioButtonSelectorIdCaseUpper = new Button(selectorIdCase, SWT.RADIO);
+			fRadioButtonSelectorIdCaseUpper.setText(CSSUIMessages.Upper_UI_);
+			fRadioButtonSelectorIdCaseUpper.addSelectionListener(this);
+
+			Group selectorClassCase = new Group(panel, SWT.NULL);
+			selectorClassCase.setText(CSSUIMessages.Class_Selector_Case__UI_);
+			hLayout = new GridLayout();
+			hLayout.numColumns = 3;
+			selectorClassCase.setLayout(hLayout);
+			fRadioButtonSelectorClassCaseAsis = new Button(selectorClassCase, SWT.RADIO);
+			fRadioButtonSelectorClassCaseAsis.setText(CSSUIMessages.As_is_UI_);
+			fRadioButtonSelectorClassCaseAsis.addSelectionListener(this);
+			fRadioButtonSelectorClassCaseLower = new Button(selectorClassCase, SWT.RADIO);
+			fRadioButtonSelectorClassCaseLower.setText(CSSUIMessages.Lower_UI_);
+			fRadioButtonSelectorClassCaseLower.addSelectionListener(this);
+			fRadioButtonSelectorClassCaseUpper = new Button(selectorClassCase, SWT.RADIO);
+			fRadioButtonSelectorClassCaseUpper.setText(CSSUIMessages.Upper_UI_);
+			fRadioButtonSelectorClassCaseUpper.addSelectionListener(this);
 		}
 
 		// Quote attribute values
@@ -236,6 +272,24 @@
 				fRadioButtonSelectorTagCaseAsis.setSelection(true);
 		}
 
+		if (fRadioButtonSelectorIdCaseAsis != null) {
+			if (stgy.getIdSelectorCase() == CSSCleanupStrategy.UPPER)
+				fRadioButtonSelectorIdCaseUpper.setSelection(true);
+			else if (stgy.getIdSelectorCase() == CSSCleanupStrategy.LOWER)
+				fRadioButtonSelectorIdCaseLower.setSelection(true);
+			else
+				fRadioButtonSelectorIdCaseAsis.setSelection(true);
+		}
+
+		if (fRadioButtonSelectorClassCaseAsis != null) {
+			if (stgy.getClassSelectorCase() == CSSCleanupStrategy.UPPER)
+				fRadioButtonSelectorClassCaseUpper.setSelection(true);
+			else if (stgy.getClassSelectorCase() == CSSCleanupStrategy.LOWER)
+				fRadioButtonSelectorClassCaseLower.setSelection(true);
+			else
+				fRadioButtonSelectorClassCaseAsis.setSelection(true);
+		}
+
 		if (fCheckBoxQuoteValues != null)
 			fCheckBoxQuoteValues.setSelection(stgy.isQuoteValues());
 
@@ -296,6 +350,24 @@
 				stgy.setSelectorTagCase(CSSCleanupStrategy.ASIS);
 		}
 
+		if (fRadioButtonSelectorIdCaseAsis != null) {
+			if (fRadioButtonSelectorIdCaseUpper.getSelection())
+				stgy.setIdSelectorCase(CSSCleanupStrategy.UPPER);
+			else if (fRadioButtonSelectorIdCaseLower.getSelection())
+				stgy.setIdSelectorCase(CSSCleanupStrategy.LOWER);
+			else
+				stgy.setIdSelectorCase(CSSCleanupStrategy.ASIS);
+		}
+
+		if (fRadioButtonSelectorClassCaseAsis != null) {
+			if (fRadioButtonSelectorClassCaseUpper.getSelection())
+				stgy.setClassSelectorCase(CSSCleanupStrategy.UPPER);
+			else if (fRadioButtonSelectorClassCaseLower.getSelection())
+				stgy.setClassSelectorCase(CSSCleanupStrategy.LOWER);
+			else
+				stgy.setClassSelectorCase(CSSCleanupStrategy.ASIS);
+		}
+
 		if (fCheckBoxQuoteValues != null)
 			stgy.setQuoteValues(fCheckBoxQuoteValues.getSelection());
 
@@ -313,6 +385,8 @@
 		|| ((fRadioButtonPropNameCaseLower != null && fRadioButtonPropNameCaseLower.getSelection()) || (fRadioButtonPropNameCaseUpper != null && fRadioButtonPropNameCaseUpper.getSelection()))
 		|| ((fRadioButtonPropValueCaseLower != null && fRadioButtonPropValueCaseLower.getSelection()) || (fRadioButtonPropValueCaseUpper != null && fRadioButtonPropValueCaseUpper.getSelection()))
 		|| ((fRadioButtonSelectorTagCaseLower != null && fRadioButtonSelectorTagCaseLower.getSelection()) || (fRadioButtonSelectorTagCaseUpper != null && fRadioButtonSelectorTagCaseUpper.getSelection()))
+		|| ((fRadioButtonSelectorIdCaseLower != null && fRadioButtonSelectorIdCaseLower.getSelection()) || (fRadioButtonSelectorIdCaseUpper != null && fRadioButtonSelectorIdCaseUpper.getSelection()))
+		|| ((fRadioButtonSelectorClassCaseLower != null && fRadioButtonSelectorClassCaseLower.getSelection()) || (fRadioButtonSelectorClassCaseUpper != null && fRadioButtonSelectorClassCaseUpper.getSelection()))
 		;
 		getButton(OK).setEnabled(okEnabled);