net.sourceforge.jabm.spring.PRNGSeedFactoryBean.java Source code

Java tutorial

Introduction

Here is the source code for net.sourceforge.jabm.spring.PRNGSeedFactoryBean.java

Source

/*
 * JABM - Java Agent-Based Modeling Toolkit
 * Copyright (C) 2013 Steve Phelps
 *
 * This program is free software; you can redistribute it and/or
 * modify it under the terms of the GNU General Public License as
 * published by the Free Software Foundation; either version 3 of
 * the License, or (at your option) any later version.
 *
 * This program is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
 * See the GNU General Public License for more details.
 */
package net.sourceforge.jabm.spring;

import java.net.InetAddress;
import java.net.UnknownHostException;
import java.util.Random;

import org.apache.log4j.Logger;
import org.springframework.beans.factory.FactoryBean;

/**
 * <p>
 * A <a href="http://www.springsource.com/developer/spring">Spring</a>
 * factory bean which returns a seed based on the current time and the IP 
 * address of the host.  
 * </p>
 * 
 * @author Steve Phelps
 * 
 */
public class PRNGSeedFactoryBean implements FactoryBean<Integer> {

    protected Random metaPrng = new Random();

    static Logger logger = Logger.getLogger(PRNGSeedFactoryBean.class);

    @Override
    public Integer getObject() {
        try {
            int time = new java.util.Date().hashCode();
            int ipAddress = InetAddress.getLocalHost().hashCode();
            int rand = metaPrng.nextInt();
            int seed = (ipAddress & 0xffff) | ((time & 0x00ff) << 32) | (rand & 0x0f000000);
            logger.info("seed = " + seed);
            return seed;
        } catch (UnknownHostException e) {
            throw new RuntimeException(e);
        }
    }

    @Override
    public Class<?> getObjectType() {
        return Integer.class;
    }

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

}