]> source.dussan.org Git - xmlgraphics-fop.git/commitdiff
Small cleanup: extract TextDecorationMaker, move validation into convertProperty...
authorAndreas L. Delmelle <adelmelle@apache.org>
Tue, 1 Feb 2011 20:47:54 +0000 (20:47 +0000)
committerAndreas L. Delmelle <adelmelle@apache.org>
Tue, 1 Feb 2011 20:47:54 +0000 (20:47 +0000)
git-svn-id: https://svn.apache.org/repos/asf/xmlgraphics/fop/trunk@1066198 13f79535-47bb-0310-9956-ffa450edef68

src/java/org/apache/fop/fo/FOPropertyMapping.java
src/java/org/apache/fop/fo/properties/TextDecorationMaker.java [new file with mode: 0644]
src/java/org/apache/fop/fo/properties/TextDecorationProperty.java [deleted file]

index c32aca0f04dd3bd61b5b1973353e87061888cd48..cf4eef3a5b540c34e1e066f3f5785245283653d6 100644 (file)
@@ -62,7 +62,7 @@ import org.apache.fop.fo.properties.SpacePropertyMaker;
 import org.apache.fop.fo.properties.SpacingPropertyMaker;
 import org.apache.fop.fo.properties.StringProperty;
 import org.apache.fop.fo.properties.TableBorderPrecedence;
-import org.apache.fop.fo.properties.TextDecorationProperty;
+import org.apache.fop.fo.properties.TextDecorationMaker;
 import org.apache.fop.fo.properties.ToBeImplementedProperty;
 import org.apache.fop.fo.properties.URIProperty;
 import org.apache.fop.fo.properties.VerticalAlignShorthandParser;
@@ -1695,7 +1695,7 @@ public final class FOPropertyMapping implements Constants {
 
         // text-decoration
         //m  = new EnumProperty.Maker(PR_TEXT_DECORATION);
-        m  = new TextDecorationProperty.Maker(PR_TEXT_DECORATION);
+        m  = new TextDecorationMaker(PR_TEXT_DECORATION);
         m.setInherited(false);
         m.addEnum("none", getEnumProperty(EN_NONE, "NONE"));
         m.addEnum("underline", getEnumProperty(EN_UNDERLINE, "UNDERLINE"));
diff --git a/src/java/org/apache/fop/fo/properties/TextDecorationMaker.java b/src/java/org/apache/fop/fo/properties/TextDecorationMaker.java
new file mode 100644 (file)
index 0000000..de26934
--- /dev/null
@@ -0,0 +1,123 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You 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.
+ */
+
+/* $Id$ */
+
+package org.apache.fop.fo.properties;
+
+import java.util.List;
+
+import org.apache.fop.fo.Constants;
+import org.apache.fop.fo.FObj;
+import org.apache.fop.fo.PropertyList;
+import org.apache.fop.fo.expr.NCnameProperty;
+import org.apache.fop.fo.expr.PropertyException;
+
+/**
+ * Dedicated {@link org.apache.fop.fo.properties.PropertyMaker} for handling the
+ * <a href="http://www.w3.org/TR/xsl/#text-decoration"><code>text-decoration</code></a>
+ * property.
+ */
+public class TextDecorationMaker extends ListProperty.Maker {
+
+    /**
+     * Create a maker for the given property id.
+     * @param propId id of the property for which a maker should be created
+     */
+    public TextDecorationMaker(int propId) {
+        super(propId);
+    }
+
+    /**
+     * {@inheritDoc}
+     * Add validation rules for the <code>text-decoration</code> property.
+     */
+    @Override
+    public Property convertProperty(Property p,
+                                    PropertyList propertyList,
+                                    FObj fo)
+                        throws PropertyException {
+
+        ListProperty listProp = (ListProperty) super.convertProperty(p, propertyList, fo);
+        List lst = listProp.getList();
+        boolean none = false;
+        boolean under = false;
+        boolean over = false;
+        boolean through = false;
+        boolean blink = false;
+        int enumValue;
+        for (int i = lst.size(); --i >= 0;) {
+            Property prop = (Property)lst.get(i);
+            if (prop instanceof NCnameProperty) {
+                prop = checkEnumValues(prop.getString());
+                lst.set(i, prop);
+            }
+            enumValue = prop.getEnum();
+            switch (enumValue) {
+                case Constants.EN_NONE:
+                    if (under | over | through | blink) {
+                        throw new PropertyException("Invalid combination of values");
+                    }
+                    none = true;
+                    break;
+                case Constants.EN_UNDERLINE:
+                case Constants.EN_NO_UNDERLINE:
+                case Constants.EN_OVERLINE:
+                case Constants.EN_NO_OVERLINE:
+                case Constants.EN_LINE_THROUGH:
+                case Constants.EN_NO_LINE_THROUGH:
+                case Constants.EN_BLINK:
+                case Constants.EN_NO_BLINK:
+                    if (none) {
+                        throw new PropertyException
+                                ("'none' specified, no additional values allowed");
+                    }
+                    switch (enumValue) {
+                        case Constants.EN_UNDERLINE:
+                        case Constants.EN_NO_UNDERLINE:
+                            if (!under) {
+                                under = true;
+                                continue;
+                            }
+                        case Constants.EN_OVERLINE:
+                        case Constants.EN_NO_OVERLINE:
+                            if (!over) {
+                                over = true;
+                                continue;
+                            }
+                        case Constants.EN_LINE_THROUGH:
+                        case Constants.EN_NO_LINE_THROUGH:
+                            if (!through) {
+                                through = true;
+                                continue;
+                            }
+                        case Constants.EN_BLINK:
+                        case Constants.EN_NO_BLINK:
+                            if (!blink) {
+                                blink = true;
+                                continue;
+                            }
+                        default:
+                            throw new PropertyException("Invalid combination of values");
+                    }
+                default:
+                    throw new PropertyException("Invalid value specified: " + prop);
+            }
+        }
+        return listProp;
+    }
+}
diff --git a/src/java/org/apache/fop/fo/properties/TextDecorationProperty.java b/src/java/org/apache/fop/fo/properties/TextDecorationProperty.java
deleted file mode 100644 (file)
index bcd41fb..0000000
+++ /dev/null
@@ -1,167 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You 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.
- */
-
-/* $Id$ */
-
-package org.apache.fop.fo.properties;
-
-import java.util.Iterator;
-import java.util.List;
-
-import org.apache.fop.fo.Constants;
-import org.apache.fop.fo.FObj;
-import org.apache.fop.fo.PropertyList;
-import org.apache.fop.fo.expr.NCnameProperty;
-import org.apache.fop.fo.expr.PropertyException;
-
-/**
- * Special list property for text-decoration.
- */
-public class TextDecorationProperty extends ListProperty {
-
-    /**
-     * Inner class for creating instances of ListProperty
-     */
-    public static class Maker extends PropertyMaker {
-
-        /**
-         * @param propId ID of the property for which Maker should be created
-         */
-        public Maker(int propId) {
-            super(propId);
-        }
-
-        /**
-         * {@inheritDoc}
-         */
-        public Property convertProperty(Property p,
-                                        PropertyList propertyList, FObj fo)
-                    throws PropertyException {
-            if (p instanceof TextDecorationProperty) {
-                return p;
-            } else {
-                if (p instanceof ListProperty) {
-                    ListProperty lst = (ListProperty)p;
-                    lst = checkEnums(lst);
-                    return new TextDecorationProperty((ListProperty)p);
-                } else if (p instanceof EnumProperty) {
-                    ListProperty lst = new ListProperty(p);
-                    return new TextDecorationProperty(lst);
-                } else {
-                    throw new PropertyException("Cannot convert anything other "
-                            + "than a list property, got a " + p.getClass().getName());
-                }
-            }
-        }
-
-        private ListProperty checkEnums(ListProperty lst) throws PropertyException {
-            List l = lst.getList();
-            for (int i = 0; i < l.size(); i++) {
-                Property prop = (Property)l.get(i);
-                if (prop instanceof EnumProperty) {
-                    //skip
-                } else if (prop instanceof NCnameProperty) {
-                    Property propEnum = checkEnumValues(((NCnameProperty)prop).getString());
-                    if (propEnum == null) {
-                        throw new PropertyException("Illegal enum value: " + prop.getString());
-                    }
-                    l.set(i, propEnum);
-                } else {
-                    throw new PropertyException("Invalid content for text-decoration "
-                            + "property: " + prop);
-                }
-            }
-            return lst;
-        }
-
-    }
-
-    /**
-     * Constructs a new instance by converting a ListProperty.
-     * @param listProp the ListProperty to be converted
-     * @throws PropertyException in case the conversion fails
-     */
-    public TextDecorationProperty(ListProperty listProp) throws PropertyException {
-        List lst = listProp.getList();
-        boolean none = false;
-        boolean under = false;
-        boolean over = false;
-        boolean through = false;
-        boolean blink = false;
-        Iterator i = lst.iterator();
-        while (i.hasNext()) {
-            Property prop = (Property)i.next();
-            switch (prop.getEnum()) {
-                case Constants.EN_NONE:
-                    if (under | over | through | blink) {
-                        throw new PropertyException(
-                                "Invalid combination of values");
-                    }
-                    none = true;
-                    break;
-                case Constants.EN_UNDERLINE:
-                case Constants.EN_NO_UNDERLINE:
-                    if (none) {
-                        throw new PropertyException
-                            ("'none' specified, no additional values allowed");
-                    }
-                    if (under) {
-                        throw new PropertyException("Invalid combination of values");
-                    }
-                    under = true;
-                    break;
-                case Constants.EN_OVERLINE:
-                case Constants.EN_NO_OVERLINE:
-                    if (none) {
-                        throw new PropertyException
-                            ("'none' specified, no additional values allowed");
-                    }
-                    if (over) {
-                        throw new PropertyException("Invalid combination of values");
-                    }
-                    over = true;
-                    break;
-                case Constants.EN_LINE_THROUGH:
-                case Constants.EN_NO_LINE_THROUGH:
-                    if (none) {
-                        throw new PropertyException
-                            ("'none' specified, no additional values allowed");
-                    }
-                    if (through) {
-                        throw new PropertyException("Invalid combination of values");
-                    }
-                    through = true;
-                    break;
-                case Constants.EN_BLINK:
-                case Constants.EN_NO_BLINK:
-                    if (none) {
-                        throw new PropertyException
-                            ("'none' specified, no additional values allowed");
-                    }
-                    if (blink) {
-                        throw new PropertyException("Invalid combination of values");
-                    }
-                    blink = true;
-                    break;
-                default:
-                    throw new PropertyException("Invalid value specified: " + prop);
-            }
-            addProperty(prop);
-        }
-    }
-
-}