Author: yradtsevich
Date: 2009-03-18 15:02:26 -0400 (Wed, 18 Mar 2009)
New Revision: 14258
Modified:
trunk/jst/plugins/org.jboss.tools.jst.jsp/src/org/jboss/tools/jst/jsp/outline/cssdialog/CSSClassDialog.java
trunk/jst/plugins/org.jboss.tools.jst.jsp/src/org/jboss/tools/jst/jsp/outline/cssdialog/common/CSSModel.java
trunk/jst/plugins/org.jboss.tools.jst.jsp/src/org/jboss/tools/jst/jsp/outline/cssdialog/common/CSSValidator.java
trunk/jst/plugins/org.jboss.tools.jst.jsp/src/org/jboss/tools/jst/jsp/outline/cssdialog/events/StyleAttributes.java
Log:
RESOLVED - issue JBIDE-3910: Need extended validator for CSS class name
https://jira.jboss.org/jira/browse/JBIDE-3910
- validator has been added.
- now css dialog does not format CSS before save
Modified:
trunk/jst/plugins/org.jboss.tools.jst.jsp/src/org/jboss/tools/jst/jsp/outline/cssdialog/CSSClassDialog.java
===================================================================
---
trunk/jst/plugins/org.jboss.tools.jst.jsp/src/org/jboss/tools/jst/jsp/outline/cssdialog/CSSClassDialog.java 2009-03-18
14:03:03 UTC (rev 14257)
+++
trunk/jst/plugins/org.jboss.tools.jst.jsp/src/org/jboss/tools/jst/jsp/outline/cssdialog/CSSClassDialog.java 2009-03-18
19:02:26 UTC (rev 14258)
@@ -51,6 +51,7 @@
import org.jboss.tools.common.model.ui.widgets.Split;
import org.jboss.tools.jst.jsp.messages.JstUIMessages;
import org.jboss.tools.jst.jsp.outline.cssdialog.common.CSSModel;
+import org.jboss.tools.jst.jsp.outline.cssdialog.common.CSSValidator;
import org.jboss.tools.jst.jsp.outline.cssdialog.common.Constants;
import org.jboss.tools.jst.jsp.outline.cssdialog.common.Util;
import org.jboss.tools.jst.jsp.outline.cssdialog.events.ChangeStyleEvent;
@@ -360,14 +361,16 @@
InputDialog dlg = new InputDialog(parent.getShell(),
JstUIMessages.ENTER_CSS_CLASS_NAME,
JstUIMessages.ENTER_CSS_CLASS_NAME, classCombo.getText(),
new IInputValidator(){
+ private CSSValidator cssValidator = CSSValidator.getInstance();
/**
* Simple validation of new CSS Class Name, now we just check that
it's not empty string
*/
public String isValid(String newText) {
- if(newText==null || newText.trim().length()==0){
+ if (cssValidator.isValidSelector(newText)) {
+ return null;
+ } else {
return JstUIMessages.CSS_CLASS_NAME_NOT_VALID;
}
- return null;
}
});
Modified:
trunk/jst/plugins/org.jboss.tools.jst.jsp/src/org/jboss/tools/jst/jsp/outline/cssdialog/common/CSSModel.java
===================================================================
---
trunk/jst/plugins/org.jboss.tools.jst.jsp/src/org/jboss/tools/jst/jsp/outline/cssdialog/common/CSSModel.java 2009-03-18
14:03:03 UTC (rev 14257)
+++
trunk/jst/plugins/org.jboss.tools.jst.jsp/src/org/jboss/tools/jst/jsp/outline/cssdialog/common/CSSModel.java 2009-03-18
19:02:26 UTC (rev 14258)
@@ -33,6 +33,7 @@
import org.eclipse.wst.css.core.internal.provisional.document.ICSSDocument;
import org.eclipse.wst.css.core.internal.provisional.document.ICSSModel;
import org.eclipse.wst.css.core.internal.provisional.document.ICSSNode;
+import org.eclipse.wst.css.core.internal.provisional.document.ICSSRuleContainer;
import org.eclipse.wst.css.core.internal.provisional.document.ICSSStyleSheet;
import org.eclipse.wst.css.core.internal.text.StructuredTextPartitionerForCSS;
import org.eclipse.wst.sse.core.StructuredModelManager;
@@ -273,9 +274,9 @@
// formatProcessorCSS.formatModel(model);
CSSStyleRule rule = getRulesMapping().get(selector);
if (rule == null) {
- styleSheet.insertRule(selector + startBraces
- + styleAttributes.getStyle() + endBraces, list
- .getLength());
+ rule = (CSSStyleRule)((ICSSDocument)styleSheet).createCSSRule(
+ selector + startBraces + styleAttributes.getStyle() + endBraces);
+ ((ICSSStyleSheet)styleSheet).appendRule(rule);
} else {
CSSStyleDeclaration declaration = rule.getStyle();
@@ -290,9 +291,6 @@
Constants.EMPTY);
}
}
-
- formatProcessorCSS.formatModel(model);
-
}
}
Modified:
trunk/jst/plugins/org.jboss.tools.jst.jsp/src/org/jboss/tools/jst/jsp/outline/cssdialog/common/CSSValidator.java
===================================================================
---
trunk/jst/plugins/org.jboss.tools.jst.jsp/src/org/jboss/tools/jst/jsp/outline/cssdialog/common/CSSValidator.java 2009-03-18
14:03:03 UTC (rev 14257)
+++
trunk/jst/plugins/org.jboss.tools.jst.jsp/src/org/jboss/tools/jst/jsp/outline/cssdialog/common/CSSValidator.java 2009-03-18
19:02:26 UTC (rev 14258)
@@ -10,13 +10,17 @@
******************************************************************************/
package org.jboss.tools.jst.jsp.outline.cssdialog.common;
+import java.lang.ref.Reference;
+import java.lang.ref.SoftReference;
import java.lang.reflect.Field;
import java.util.ArrayList;
import org.eclipse.wst.css.core.internal.provisional.document.ICSSModel;
import org.eclipse.wst.sse.core.StructuredModelManager;
import org.eclipse.wst.sse.core.internal.provisional.IModelManager;
+import org.eclipse.wst.sse.core.internal.provisional.text.IStructuredDocument;
import org.jboss.tools.jst.jsp.JspEditorPlugin;
+import org.w3c.dom.css.CSSRuleList;
import org.w3c.dom.css.CSSStyleDeclaration;
import org.w3c.dom.css.CSSStyleRule;
import org.w3c.dom.css.CSSStyleSheet;
@@ -25,111 +29,133 @@
* CSS Validator
*
* @author yradtsevich
- *
+ *
*/
+@SuppressWarnings("restriction")
public class CSSValidator {
- // FIXME: this hard-coded string have to be replaced by reference
- private static final String CSS_CONTENT_TYPE_IDENTIFIER =
"org.eclipse.wst.css.core.csssource"; //$NON-NLS-1$
- private final CSSStyleSheet validatingCSS;
- private final LogHacker logHacker = new LogHacker();
-
- @SuppressWarnings("restriction")
- public CSSValidator() {
- IModelManager modelManager = StructuredModelManager.getModelManager();
- ICSSModel validatingModel = (ICSSModel)
modelManager.createUnManagedStructuredModelFor(CSS_CONTENT_TYPE_IDENTIFIER);
-
- validatingCSS = (CSSStyleSheet) validatingModel.getDocument();
- }
+ // FIXME: this hard-coded string have to be replaced by reference
+ private static final String CSS_CONTENT_TYPE_IDENTIFIER =
"org.eclipse.wst.css.core.csssource"; //$NON-NLS-1$
+ private final CSSStyleSheet validatingCSS;
+ private final IStructuredDocument validatingDocument;
+ private final LogHacker logHacker = new LogHacker();
+ private static Reference<CSSValidator> instanceCache;
- private void cleanValidatingCSS() {
- int ruleNumber;
+ public static CSSValidator getInstance() {
+ CSSValidator instance = null;
+ if (instanceCache != null) {
+ instance = instanceCache.get();
+ }
+ if (instance == null) {
+ instance = new CSSValidator();
+ instanceCache = new SoftReference<CSSValidator>(instance);
+ }
+ return instance;
+ }
+
+ private CSSValidator() {
+ IModelManager modelManager = StructuredModelManager.getModelManager();
+ ICSSModel validatingModel = (ICSSModel) modelManager
+ .createUnManagedStructuredModelFor(CSS_CONTENT_TYPE_IDENTIFIER);
+ validatingDocument = validatingModel.getStructuredDocument();
+ validatingCSS = (CSSStyleSheet) validatingModel.getDocument();
+ }
- while ((ruleNumber = validatingCSS.getCssRules().getLength()) > 0) {
- validatingCSS.deleteRule(ruleNumber - 1);
- }
- }
+ private void cleanValidatingDocument() {
+ validatingDocument.set(""); //$NON-NLS-1$
+ }
- /**
- * Validates value of a CSS attribute.
- *
- * @param value the
- * @return {@code true} if the attribute is valid, {@code false} otherwise
- */
- public boolean isValidValue(String value) {
- logHacker.disableLogging();
- boolean valid = true;
- try {
- validatingCSS.insertRule(".testSelector {}", 0); //$NON-NLS-1$
- CSSStyleRule cssRule = ((CSSStyleRule) validatingCSS.getCssRules().item(0));
- CSSStyleDeclaration declaration = cssRule.getStyle();
- declaration.setProperty("background", value, Constants.EMPTY);
//$NON-NLS-1$
- } catch (Throwable e) {
- valid = false;
- } finally {
- logHacker.enableLogging();
- cleanValidatingCSS();
- }
+ /**
+ * Validates value of a CSS attribute.
+ *
+ * @param value
+ * the
+ * @return {@code true} if the attribute is valid, {@code false} otherwise
+ */
+ public boolean isValidValue(String value) {
+ logHacker.disableLogging();
+ boolean valid = true;
+ try {
+ validatingCSS.insertRule(".testSelector {}", 0); //$NON-NLS-1$
+ CSSStyleRule cssRule = ((CSSStyleRule) validatingCSS.getCssRules().item(0));
+ CSSStyleDeclaration declaration = cssRule.getStyle();
+ declaration.setProperty("background", value, Constants.EMPTY);
//$NON-NLS-1$
+ } catch (Throwable e) {
+ valid = false;
+ } finally {
+ logHacker.enableLogging();
+ cleanValidatingDocument();
+ }
- return valid;
- }
+ return valid;
+ }
- /**
- * Validates CSS selector value.
- *
- * @param selector the selector value
- * @return {@code true} if the selector is valid, {@code false} otherwise
- */
- public boolean isValidSelector(String selector) {
- boolean valid = true;
- try {
- validatingCSS.insertRule(selector + " {}", 0); //$NON-NLS-1$
- } catch (Throwable e) {
- valid = false;
- } finally {
- cleanValidatingCSS();
- }
+ /**
+ * Validates CSS selector value.
+ *
+ * @param selector
+ * the selector value
+ * @return {@code true} if the selector is valid, {@code false} otherwise
+ */
+ public boolean isValidSelector(String selector) {
+ validatingDocument.set(selector + "{}"); //$NON-NLS-1$
- return valid;
- }
+ CSSRuleList cssRules = validatingCSS.getCssRules();
+ if (cssRules.getLength() != 1) {
+ // if the selector is like 'a{} b', or it is empty, or the rule cannot be
created
+ return false;
+ }
- /**
- * Gives opportunity to delete all loggers from {@link
org.eclipse.core.internal.runtime.RuntimeLog}
- *
- * @author yradtsevich
- *
- */
- private class LogHacker {
- private Field logListeners = null;
- private Object oldValue = null;
-
- public LogHacker() {
- try {
- logListeners =
org.eclipse.core.internal.runtime.RuntimeLog.class.getDeclaredField("logListeners");
- logListeners.setAccessible(true);
- } catch (Throwable e) {
- JspEditorPlugin.getPluginLog().logError(e);
- }
- }
+ CSSStyleRule cssRule = (CSSStyleRule) cssRules.item(0);
+ if (!selector.equals(cssRule.getSelectorText())) {
+ // if the selector is like 'a{{{'
+ return false;
+ }
- public void disableLogging() {
- try {
- oldValue = logListeners.get(null);
- logListeners.set(null, new ArrayList(0));
- } catch (Throwable e) {
- JspEditorPlugin.getPluginLog().logError(e);
- }
- }
+ cleanValidatingDocument();
- public void enableLogging() {
- try {
- if (oldValue != null) {
- logListeners.set(null, oldValue);
- }
- } catch (Throwable e) {
- JspEditorPlugin.getPluginLog().logError(e);
- } finally {
- oldValue = null;
- }
- }
- }
+ return true;
+ }
+
+ /**
+ * Provides a way to temporarily delete all loggers from
+ * {@link org.eclipse.core.internal.runtime.RuntimeLog}
+ *
+ * @author yradtsevich
+ *
+ */
+ private class LogHacker {
+ private Field logListeners = null;
+ private Object oldValue = null;
+
+ public LogHacker() {
+ try {
+ logListeners = org.eclipse.core.internal.runtime.RuntimeLog.class
+ .getDeclaredField("logListeners");
+ logListeners.setAccessible(true);
+ } catch (Throwable e) {
+ JspEditorPlugin.getPluginLog().logError(e);
+ }
+ }
+
+ public void disableLogging() {
+ try {
+ oldValue = logListeners.get(null);
+ logListeners.set(null, new ArrayList<Object>(0));
+ } catch (Throwable e) {
+ JspEditorPlugin.getPluginLog().logError(e);
+ }
+ }
+
+ public void enableLogging() {
+ try {
+ if (oldValue != null) {
+ logListeners.set(null, oldValue);
+ }
+ } catch (Throwable e) {
+ JspEditorPlugin.getPluginLog().logError(e);
+ } finally {
+ oldValue = null;
+ }
+ }
+ }
}
Modified:
trunk/jst/plugins/org.jboss.tools.jst.jsp/src/org/jboss/tools/jst/jsp/outline/cssdialog/events/StyleAttributes.java
===================================================================
---
trunk/jst/plugins/org.jboss.tools.jst.jsp/src/org/jboss/tools/jst/jsp/outline/cssdialog/events/StyleAttributes.java 2009-03-18
14:03:03 UTC (rev 14257)
+++
trunk/jst/plugins/org.jboss.tools.jst.jsp/src/org/jboss/tools/jst/jsp/outline/cssdialog/events/StyleAttributes.java 2009-03-18
19:02:26 UTC (rev 14258)
@@ -33,7 +33,7 @@
*/
public StyleAttributes() {
this.attributeMap = new HashMap<String, String>();
- cssValidator = new CSSValidator();
+ cssValidator = CSSValidator.getInstance();
}
/**