/*
 * 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 com.addthis.hydra.data.filter.value;

import com.addthis.bundle.util.ValueUtil;
import com.addthis.bundle.value.Numeric;
import com.addthis.bundle.value.ValueFactory;
import com.addthis.bundle.value.ValueObject;
import com.addthis.codec.annotations.FieldConfig;

/**
 * This {@link AbstractValueFilter ValueFilter} <span class="hydra-summary">returns the modulo of the input</span>.
 * <p/>
 * <p>Example:</p>
 * <pre>
 *     {from:"SHARD", filter:[{hash {}}, {mod:%[shards:512]%}, {pad.left:"000"}]}
 * </pre>
 *
 * @user-reference
 */
public class ValueFilterMod extends AbstractValueFilter {

    /**
     * The modulus of the operation.
     */
    @FieldConfig(codable = true)
    private int mod = 1;

    /**
     * If true, then return the absolute value of the operation. Default is false.
     */
    @FieldConfig(codable = true)
    private boolean abs = true;

    @Override
    public ValueObject filterValue(ValueObject value) {
        try {
            Numeric lv = ValueUtil.asNumber(value);
            if (lv != null) {
                long v = lv.asLong().getLong();
                if (abs) {
                    v = Math.abs(v);
                }
                return ValueFactory.create(v % mod);
            }
        } catch (RuntimeException ex) {
            throw ex;
        } catch (Exception ex) {
            ex.printStackTrace();
        }
        return value;
    }

}

@@ -1506,26 +1506,8 @@
 ) %7B%0A
-        try %7B%0A    
     
@@ -1554,28 +1554,24 @@
 e);%0A        
-    
 if (lv != nu
@@ -1588,20 +1588,16 @@
         
-  
-  
 long v =
@@ -1616,28 +1616,24 @@
 .getLong();%0A
-    
             
@@ -1659,20 +1659,16 @@
         
-    
 v = Math
@@ -1684,34 +1684,26 @@
             
-  
-  %7D%0A    
+%7D%0A
             
@@ -1743,151 +1743,8 @@
 d);%0A
-            %7D%0A        %7D catch (RuntimeException ex) %7B%0A            throw ex;%0A        %7D catch (Exception ex) %7B%0A            ex.printStackTrace();%0A
     
@@ -1777,11 +1777,10 @@
 ;%0A    %7D%0A
-%0A
 %7D%0A

remove useless exception scaffolding