Package com.wordpress.salaboy.acc

Source Code of com.wordpress.salaboy.acc.HospitalDistanceCalculator$ContextData

/*
* To change this template, choose Tools | Templates
* and open the template in the editor.
*/

package com.wordpress.salaboy.acc;

import com.wordpress.salaboy.model.Emergency;
import com.wordpress.salaboy.model.Hospital;
import java.io.IOException;
import java.io.ObjectInput;
import java.io.ObjectOutput;
import java.io.Serializable;
import org.drools.runtime.rule.AccumulateFunction;

/**
*
* @author esteban
*/
public class HospitalDistanceCalculator implements AccumulateFunction, Serializable {

    private int[] xs = new int[]{1, 7, 13, 19, 25, 31, 37};
    private int[] ys = new int[]{1, 7, 13, 19, 25};
   
    public static class ContextData implements Serializable{
        public Hospital selectedHospital;
        public double minDistance;
    }
   
    @Override
    public void writeExternal(ObjectOutput out) throws IOException {
    }

    @Override
    public void readExternal(ObjectInput in) throws IOException, ClassNotFoundException {
    }

    @Override
    public Serializable createContext() {
        return new ContextData();
    }

    @Override
    public void init(Serializable context) throws Exception {
        ContextData contextData = (ContextData)context;
        contextData.selectedHospital = null;
        contextData.minDistance = 0;
    }

    @Override
    public void accumulate(Serializable context, Object value) {
        ContextData contextData = (ContextData)context;
       
        HospitalDistanceCalculationData data = (HospitalDistanceCalculationData)value;
        Hospital currentHospital = data.getHospital();
        Emergency emergency = data.getEmergency();
       
        float difX = currentHospital.getX() - xs[emergency.getLocation().getLocationX()];
        float difY = currentHospital.getY() - ys[emergency.getLocation().getLocationY()];
       
        double difTotal = Math.sqrt(Math.pow(((double)difX),2d) + Math.pow(((double)difY),2d));
       
        if(contextData.selectedHospital == null || difTotal < contextData.minDistance){
            contextData.minDistance = difTotal;
            contextData.selectedHospital = currentHospital;
        }
       
    }

    @Override
    public void reverse(Serializable context, Object value) throws Exception {
    }

    @Override
    public Object getResult(Serializable context) throws Exception {
        return ((ContextData)context).selectedHospital;
    }

    @Override
    public boolean supportsReverse() {
        return false;
    }

}
TOP

Related Classes of com.wordpress.salaboy.acc.HospitalDistanceCalculator$ContextData

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.