# Numbers.java

    /*
     * Copyright (c) 2009, Rickard Öberg. All Rights Reserved.
     *
     * 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.
     *
     */

    package org.qi4j.api.property;

    import java.math.BigDecimal;

    /**
     * Convenience class for mathematical operations on numerical properties.
     * <pre>import static org.qi4j.api.property.Numbers.*;
     * ...
     * add( object.numberProperty(), 5 );</pre>
     */
    public final class Numbers
    {
        // Integer operations

        public static Property<Integer> add( Property<Integer> property, int amount )
        {
            property.set( property.get() + amount );
            return property;
        }

        public static Property<Integer> mult( Property<Integer> property, int amount )
        {
            property.set( property.get() * amount );
            return property;
        }

        public static Property<Integer> sub( Property<Integer> property, int amount )
        {
            property.set( property.get() - amount );
            return property;
        }

        public static Property<Integer> div( Property<Integer> property, int amount )
        {
            property.set( property.get() / amount );
            return property;
        }

        // Long operations

        public static Property<Long> add( Property<Long> property, long amount )
        {
            property.set( property.get() + amount );
            return property;
        }

        public static Property<Long> mult( Property<Long> property, long amount )
        {
            property.set( property.get() * amount );
            return property;
        }

        public static Property<Long> sub( Property<Long> property, long amount )
        {
            property.set( property.get() - amount );
            return property;
        }

        public static Property<Long> div( Property<Long> property, long amount )
        {
            property.set( property.get() / amount );
            return property;
        }

        // Double operations

        public static Property<Double> add( Property<Double> property, double amount )
        {
            property.set( property.get() + amount );
            return property;
        }

        public static Property<Double> mult( Property<Double> property, double amount )
        {
            property.set( property.get() * amount );
            return property;
        }

        public static Property<Double> sub( Property<Double> property, double amount )
        {
            property.set( property.get() - amount );
            return property;
        }

        public static Property<Double> div( Property<Double> property, double amount )
        {
            property.set( property.get() / amount );
            return property;
        }

        // Float operations

        public static Property<Float> add( Property<Float> property, float amount )
        {
            property.set( property.get() + amount );
            return property;
        }

        public static Property<Float> mult( Property<Float> property, float amount )
        {
            property.set( property.get() * amount );
            return property;
        }

        public static Property<Float> sub( Property<Float> property, float amount )
        {
            property.set( property.get() - amount );
            return property;
        }

        public static Property<Float> div( Property<Float> property, float amount )
        {
            property.set( property.get() / amount );
            return property;
        }

        // BigDecimal operations

        public static Property<BigDecimal> add( Property<BigDecimal> property, BigDecimal amount )
        {
            property.set( property.get().add( amount ) );
            return property;
        }

        public static Property<BigDecimal> mult( Property<BigDecimal> property, BigDecimal amount )
        {
            property.set( property.get().multiply( amount ) );
            return property;
        }

        public static Property<BigDecimal> sub( Property<BigDecimal> property, BigDecimal amount )
        {
            property.set( property.get().subtract( amount ) );
            return property;
        }

        public static Property<BigDecimal> div( Property<BigDecimal> property, BigDecimal amount )
        {
            property.set( property.get().divide( amount ) );
            return property;
        }
    }