Author: lgiessmann Date: Fri Jul 8 10:29:08 2011 New Revision: 588
Log: gdl-frontend: Widgets: implemented a GWT widget as a pendant to the java.util.Pattern for regular expressions
Added: branches/gdl-frontend/src/anaToMia/GDL_Widgets/src/us/isidor/gdl/anaToMia/Widgets/environment/Pattern.java Modified: branches/gdl-frontend/src/anaToMia/GDL_Widgets/src/us/isidor/gdl/anaToMia/Widgets/base/GdlVisibleObject.java branches/gdl-frontend/src/anaToMia/GDL_Widgets/src/us/isidor/gdl/anaToMia/Widgets/base/TestClass.java branches/gdl-frontend/src/anaToMia/GDL_Widgets/src/us/isidor/gdl/anaToMia/Widgets/text/GdlTitle.java branches/gdl-frontend/src/anaToMia/GDL_Widgets/src/us/isidor/gdl/anaToMia/Widgets/values/FontWeightValue.java
Modified: branches/gdl-frontend/src/anaToMia/GDL_Widgets/src/us/isidor/gdl/anaToMia/Widgets/base/GdlVisibleObject.java ============================================================================== --- branches/gdl-frontend/src/anaToMia/GDL_Widgets/src/us/isidor/gdl/anaToMia/Widgets/base/GdlVisibleObject.java Fri Jul 8 09:27:41 2011 (r587) +++ branches/gdl-frontend/src/anaToMia/GDL_Widgets/src/us/isidor/gdl/anaToMia/Widgets/base/GdlVisibleObject.java Fri Jul 8 10:29:08 2011 (r588) @@ -105,8 +105,11 @@ public static void replaceStyleProperty(Element elem, String styleName, String styleValue){ String oldStyle = elem.getAttribute("style"); + //Window.alert(">> _" + oldStyle + "_<<" + " >> _" + styleName + "_<< => " + oldStyle.matches("(^| |;)" + styleName + " *:")); // TODO: remove if(oldStyle.matches("(^| |;)" + styleName + " *:")){ - elem.setAttribute("style", oldStyle.replaceAll(styleName + ":.+;", styleName + ": " + styleValue + ";")); + Window.alert("!!!TEST!!!"); + + elem.setAttribute("style", oldStyle.replaceFirst(styleName + ":.+;", styleName + ": " + styleValue + ";")); } else { elem.setAttribute("style", oldStyle + " " + styleName + ": " + styleValue + ";"); }
Modified: branches/gdl-frontend/src/anaToMia/GDL_Widgets/src/us/isidor/gdl/anaToMia/Widgets/base/TestClass.java ============================================================================== --- branches/gdl-frontend/src/anaToMia/GDL_Widgets/src/us/isidor/gdl/anaToMia/Widgets/base/TestClass.java Fri Jul 8 09:27:41 2011 (r587) +++ branches/gdl-frontend/src/anaToMia/GDL_Widgets/src/us/isidor/gdl/anaToMia/Widgets/base/TestClass.java Fri Jul 8 10:29:08 2011 (r588) @@ -1,12 +1,11 @@ package us.isidor.gdl.anaToMia.Widgets.base;
+ import us.isidor.gdl.anaToMia.TmEngine.jtmsBasedEngine.JtmsTmEngine; import us.isidor.gdl.anaToMia.TopicMaps.TopicMapsModel.Occurrence; import us.isidor.gdl.anaToMia.TopicMaps.TopicMapsModel.Topic; -import us.isidor.gdl.anaToMia.Widgets.container.GdlList; +import us.isidor.gdl.anaToMia.Widgets.environment.Pattern; import us.isidor.gdl.anaToMia.Widgets.isidorus.LoadSchemaCallback; -import us.isidor.gdl.anaToMia.Widgets.text.GdlListBox; -import us.isidor.gdl.anaToMia.Widgets.text.GdlText; import us.isidor.gdl.anaToMia.Widgets.text.GdlTitle; import us.isidor.gdl.anaToMia.Widgets.values.CursorValue; import com.google.gwt.core.client.EntryPoint; @@ -124,6 +123,20 @@ GdlTitle tmp = new GdlTitle(tmpRepresentative); this.mainPanel.add(tmp); + + + + + String oldStyle = "margin: 0px; width: 300px; max-idth: auto; min-width: auto; height: 300px; max-height: auto; min-height: auto; color: #000000; direction: rtl; text-align: left; line-height: normal; text-decoration: underline; font-style: normal; font-size: 15pt; font-weight: NORMAL; letter-spacing: normal; word-spacing: normal; font-size: 25pt; font-size: 25pt; width: 300px; max-idth: auto; min-width: auto; height: 300px; max-height: auto; min-height: auto; color: #000000; direction: rtl; text-align: left; line-height: ... word-spacing: normal; font-size: 25pt; font-size: 25pt; font-size: 25pt; font-size: 25pt; font-size: 25pt; font-size: 25pt; font-size: 25pt; font-size: 25pt; font-size: 25pt; font-size: 25pt; font-size: 25pt; width: 300px; max-idth: auto; min-width: auto; height: 300px; max-height: auto; min-height: auto; color: #000000; direction: rtl; text-align: left; line-height: normal; text-decoration: underline; font-style: normal; font-size: 15pt; font-weight: NORMAL; letter-spacing: normal; word-spacing: normal;"; + + /* + String rex = "width"; + Window.alert(" ==> " + oldStyle.matches("width")); + Window.alert(oldStyle.replaceAll(" width:[^;]*;", " WIDTH:xyz;")); + */ + + Pattern pattern = new Pattern("width"); + Window.alert(">> " + pattern.matches(oldStyle)); }catch(Exception e){ e.printStackTrace(); Window.alert(">> e >> " + e.getClass() + " >> " + e.getMessage());
Added: branches/gdl-frontend/src/anaToMia/GDL_Widgets/src/us/isidor/gdl/anaToMia/Widgets/environment/Pattern.java ============================================================================== --- /dev/null 00:00:00 1970 (empty, because file is newly added) +++ branches/gdl-frontend/src/anaToMia/GDL_Widgets/src/us/isidor/gdl/anaToMia/Widgets/environment/Pattern.java Fri Jul 8 10:29:08 2011 (r588) @@ -0,0 +1,182 @@ +package us.isidor.gdl.anaToMia.Widgets.environment; + +// source: http://www.java2s.com/Code/Java/GWT/ImplementjavautilregexPatternwithJavascr... + +/* + * Copyright 2006 Robert Hanson <iamroberthanson AT gmail.com> + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +import java.util.ArrayList; +import java.util.List; + +import com.google.gwt.core.client.JavaScriptObject; + +/** + * <p> + * Implementation of the {@link java.util.regex.Pattern} class with a + * wrapper aroung the Javascript <a href="http://developer.mozilla.org/en/docs/Core_JavaScript_1.5_Guide:Regular_Expressions">RegExp</a> object. + * As most of the methods delegate to the JavaScript RegExp object, certain differences in the + * declaration and behaviour of regular expressions must be expected. + * </p> + * <p> + * Please note that neither the {@link java.util.regex.Pattern#compile(String)} method nor + * {@link Matcher} instances are supported. For the later, consider using {@link Pattern#match(String)}. + * </p> + * + * @author George Georgovassilis + * + */ +public class Pattern { + + /** + * Declares that regular expressions should be matched across line borders. + */ + public final static int MULTILINE = 1; + + /** + * Declares that characters are matched reglardless of case. + */ + public final static int CASE_INSENSITIVE = 2; + + private JavaScriptObject regExp; + + private static JavaScriptObject createExpression(String pattern, int flags) { + String sFlags = ""; + if ((flags & MULTILINE) != 0) + sFlags += "m"; + if ((flags & CASE_INSENSITIVE) != 0) + sFlags += "i"; + return _createExpression(pattern, sFlags); + } + + private static native JavaScriptObject _createExpression(String pattern, + String flags)/*-{ + return new RegExp(pattern, flags); + }-*/; + + private native void _match(String text, @SuppressWarnings("rawtypes") List matches)/*-{ + var regExp = this.@us.isidor.gdl.anaToMia.Widgets.environment.Pattern::regExp; + var result = text.match(regExp); + if (result == null) return; + for (var i=0;i<result.length;i++) + matches.@java.util.ArrayList::add(Ljava/lang/Object;)(result[i]); + }-*/; + + /** + * Determines wether the specified regular expression is validated by the + * provided input. + * @param regex Regular expression + * @param input String to validate + * @return <code>true</code> if matched. + */ + public static boolean matches(String regex, String input) { + return new Pattern(regex).matches(input); + } + + /** + * Escape a provided string so that it will be interpreted as a literal + * in regular expressions. + * The current implementation does escape each character even if not neccessary, + * generating verbose literals. + * @param input + * @return + */ + public static String quote(String input) { + String output = ""; + for (int i = 0; i < input.length(); i++) { + output += "\" + input.charAt(i); + } + return output; + } + + /** + * Class constructor + * @param pattern Regular expression + */ + public Pattern(String pattern) { + this(pattern, 0); + } + + /** + * Class constructor + * @param pattern Regular expression + * @param flags + */ + public Pattern(String pattern, int flags) { + regExp = createExpression(pattern, flags); + } + + /** + * This method is borrowed from the JavaScript RegExp object. + * It parses a string and returns as an array any assignments to parenthesis groups + * in the pattern's regular expression + * @param text + * @return Array of strings following java's Pattern convention for groups: + * Group 0 is the entire input string and the remaining groups are the matched parenthesis. + * In case nothing was matched an empty array is returned. + */ + public String[] match(String text) { + @SuppressWarnings("rawtypes") + List matches = new ArrayList(); + _match(text, matches); + String arr[] = new String[matches.size()]; + for (int i = 0; i < matches.size(); i++) + arr[i] = matches.get(i).toString(); + return arr; + } + + /** + * Determines wether a provided text matches the regular expression + * @param text + * @return + */ + public native boolean matches(String text)/*-{ + var regExp = this.@us.isidor.gdl.anaToMia.Widgets.environment.Pattern::regExp; + return regExp.test(text); + }-*/; + + /** + * Returns the regular expression for this pattern + * @return + */ + public native String pattern()/*-{ + var regExp = this.@us.isidor.gdl.anaToMia.Widgets.environment.Pattern::regExp; + return regExp.source; + }-*/; + + private native void _split(String input, @SuppressWarnings("rawtypes") List results)/*-{ + var regExp = this.@us.isidor.gdl.anaToMia.Widgets.environment.Pattern::regExp; + var parts = input.split(regExp); + for (var i=0;i<parts.length;i++) + results.@java.util.ArrayList::add(Ljava/lang/Object;)(parts[i] ); + }-*/; + + /** + * Split an input string by the pattern's regular expression + * @param input + * @return Array of strings + */ + public String[] split(String input){ + @SuppressWarnings("rawtypes") + List results = new ArrayList(); + _split(input, results); + String[] parts = new String[results.size()]; + for (int i=0;i<results.size();i++) + parts[i] = (String)results.get(i); + return parts; + } + +} +
Modified: branches/gdl-frontend/src/anaToMia/GDL_Widgets/src/us/isidor/gdl/anaToMia/Widgets/text/GdlTitle.java ============================================================================== --- branches/gdl-frontend/src/anaToMia/GDL_Widgets/src/us/isidor/gdl/anaToMia/Widgets/text/GdlTitle.java Fri Jul 8 09:27:41 2011 (r587) +++ branches/gdl-frontend/src/anaToMia/GDL_Widgets/src/us/isidor/gdl/anaToMia/Widgets/text/GdlTitle.java Fri Jul 8 10:29:08 2011 (r588) @@ -278,10 +278,10 @@ public void setWidth(Widget widget, AutoNumUnitValue value, String styleClass) throws InvalidGdlSchemaException, ExecutionException { if(value != null && widget.getClass().equals(TitleWidget.class)) { if(styleClass == null){ - super.replaceStyleProperty(((TitleWidget)widget).getTitleElement(), "width", value.getCssValue()); + super.replaceStyleProperty(((TitleWidget)widget).getTitleElement(), "width", value.getCssValue()); // TODO: fix } this.addStyleToStore(styleClass, "width", value.getCssValue()); - this.setCssProperty(widget, styleClass, "width", value.getCssValue()); + super.setCssProperty(widget, styleClass, "width", value.getCssValue()); } }
@@ -290,10 +290,10 @@ public void setMinWidth(Widget widget, AutoNumUnitValue value, String styleClass) throws InvalidGdlSchemaException, ExecutionException { if(value != null && widget.getClass().equals(TitleWidget.class)) { if(styleClass == null){ - super.replaceStyleProperty(((TitleWidget)widget).getTitleElement(), "minWidth", value.getCssValue()); + super.replaceStyleProperty(((TitleWidget)widget).getTitleElement(), "min-width", value.getCssValue()); } - this.addStyleToStore(styleClass, "minWidth", value.getCssValue()); - this.setCssProperty(widget, styleClass, "minWidth", value.getCssValue()); + this.addStyleToStore(styleClass, "min-width", value.getCssValue()); + super.setCssProperty(widget, styleClass, "minWidth", value.getCssValue()); } }
@@ -302,10 +302,10 @@ public void setMaxWidth(Widget widget, AutoNumUnitValue value, String styleClass) throws InvalidGdlSchemaException, ExecutionException { if(value != null && widget.getClass().equals(TitleWidget.class)) { if(styleClass == null){ - super.replaceStyleProperty(((TitleWidget)widget).getTitleElement(), "maxWidth", value.getCssValue()); + super.replaceStyleProperty(((TitleWidget)widget).getTitleElement(), "max-width", value.getCssValue()); } - this.addStyleToStore(styleClass, "maxWidth", value.getCssValue()); - this.setCssProperty(widget, styleClass, "maxWidth", value.getCssValue()); + this.addStyleToStore(styleClass, "max-width", value.getCssValue()); + super.setCssProperty(widget, styleClass, "maxWidth", value.getCssValue()); } }
@@ -317,7 +317,7 @@ super.replaceStyleProperty(((TitleWidget)widget).getTitleElement(), "height", value.getCssValue()); } this.addStyleToStore(styleClass, "height", value.getCssValue()); - this.setCssProperty(widget, styleClass, "height", value.getCssValue()); + super.setCssProperty(widget, styleClass, "height", value.getCssValue()); } }
@@ -326,10 +326,10 @@ public void setMinHeight(Widget widget, AutoNumUnitValue value, String styleClass) throws InvalidGdlSchemaException, ExecutionException { if(value != null && widget.getClass().equals(TitleWidget.class)) { if(styleClass == null){ - super.replaceStyleProperty(((TitleWidget)widget).getTitleElement(), "minHeight", value.getCssValue()); + super.replaceStyleProperty(((TitleWidget)widget).getTitleElement(), "min-height", value.getCssValue()); } - this.addStyleToStore(styleClass, "minHeight", value.getCssValue()); - this.setCssProperty(widget, styleClass, "minHeight", value.getCssValue()); + this.addStyleToStore(styleClass, "min-height", value.getCssValue()); + super.setCssProperty(widget, styleClass, "minHeight", value.getCssValue()); } }
@@ -338,10 +338,10 @@ public void setMaxHeight(Widget widget, AutoNumUnitValue value, String styleClass) throws InvalidGdlSchemaException, ExecutionException { if(value != null && widget.getClass().equals(TitleWidget.class)) { if(styleClass == null){ - super.replaceStyleProperty(((TitleWidget)widget).getTitleElement(), "maxHeight", value.getCssValue()); + super.replaceStyleProperty(((TitleWidget)widget).getTitleElement(), "max-height", value.getCssValue()); } - this.addStyleToStore(styleClass, "maxHeight", value.getCssValue()); - this.setCssProperty(widget, styleClass, "maxHeight", value.getCssValue()); + this.addStyleToStore(styleClass, "max-height", value.getCssValue()); + super.setCssProperty(widget, styleClass, "maxHeight", value.getCssValue()); } }
Modified: branches/gdl-frontend/src/anaToMia/GDL_Widgets/src/us/isidor/gdl/anaToMia/Widgets/values/FontWeightValue.java ============================================================================== --- branches/gdl-frontend/src/anaToMia/GDL_Widgets/src/us/isidor/gdl/anaToMia/Widgets/values/FontWeightValue.java Fri Jul 8 09:27:41 2011 (r587) +++ branches/gdl-frontend/src/anaToMia/GDL_Widgets/src/us/isidor/gdl/anaToMia/Widgets/values/FontWeightValue.java Fri Jul 8 10:29:08 2011 (r588) @@ -17,7 +17,7 @@
@Override public String getCssValue() { - String str = this.toString(); + String str = this.toString().toLowerCase(); if(str.startsWith("_")) return str.substring(1); else return str; }