BackgroundPositionShorthand.java :  » Graphic-Library » fop » org » apache » fop » fo » properties » Java Open Source

Java Open Source » Graphic Library » fop 
fop » org » apache » fop » fo » properties » BackgroundPositionShorthand.java
/*
 * 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: BackgroundPositionShorthand.java 679326 2008-07-24 09:35:34Z vhennebert $ */

package org.apache.fop.fo.properties;

import java.util.List;

import org.apache.fop.datatypes.PercentBase;
import org.apache.fop.datatypes.PercentBaseContext;
import org.apache.fop.fo.Constants;
import org.apache.fop.fo.FObj;
import org.apache.fop.fo.PropertyList;
import org.apache.fop.fo.expr.PropertyException;

/**
 * Class encapsulating functionality for the <a href="http://www.w3.org/TR/xsl/#background-position>
 * <code>background-position</code></a> shorthand.
 */

public class BackgroundPositionShorthand extends ListProperty {

    /**
     * Inner class for creating instances of this property
     *
     */
    public static class Maker extends ListProperty.Maker {

        /**
         * Construct an instance of a Maker for the given property.
         *
         * @param propId The Constant ID of the property to be made.
         */
        public Maker(int propId) {
            super(propId);
        }


        /**
         * {@inheritDoc}
         * If only <code>background-position-horizontal</code> is
         * specified, <code>background-position-vertical</code> is set
         * to "50%".
         */
        public Property make(PropertyList propertyList, String value, FObj fo) throws PropertyException {
            Property p = super.make(propertyList, value, fo);
            if (p.getList().size() == 1) {
                /* only background-position-horizontal specified
                 * through the shorthand, as a length or percentage:
                 * background-position-vertical=50% (see: XSL-FO 1.1 -- 7.31.2)
                 */
                PropertyMaker m = FObj.getPropertyMakerFor(
                                    Constants.PR_BACKGROUND_POSITION_VERTICAL);
                p.getList().add(1, m.make(propertyList, "50%", fo));
            }
            return p;
        }

        /**
         * {@inheritDoc}
         * Returns a {@link org.apache.fop.datatypes.PercentBase} whose
         * <code>getDimension()</code> returns 1.
         */
        public PercentBase getPercentBase(PropertyList pl) {
            return new PercentBase() {
                /** {@inheritDoc} */
                public int getBaseLength(PercentBaseContext context) throws PropertyException {
                    return 0;
                }

                /** {@inheritDoc} */
                public double getBaseValue() {
                    return 0;
                }

                /** {@inheritDoc} */
                public int getDimension() {
                    return 1;
                }

            };
        }
    }

    /**
     * Inner class to provide shorthand parsing capabilities
     *
     */
    public static class Parser extends GenericShorthandParser {

        /** {@inheritDoc} */
        public Property getValueForProperty(int propId,
                                            Property property,
                                            PropertyMaker maker,
                                            PropertyList propertyList)
                        throws PropertyException {

            int index = -1;
            List propList = property.getList();
            if (propId == Constants.PR_BACKGROUND_POSITION_HORIZONTAL) {
                index = 0;
            } else if (propId == Constants.PR_BACKGROUND_POSITION_VERTICAL) {
                index = 1;
            }
            if (index >= 0) {
                return maker.convertProperty(
                        (Property) propList.get(index),
                        propertyList,
                        propertyList.getFObj());
            } // else: invalid index? shouldn't happen...
            return null;
        }
    }

}
java2s.com  | Contact Us | Privacy Policy
Copyright 2009 - 12 Demo Source and Support. All rights reserved.
All other trademarks are property of their respective owners.