/*
 * StandardAllocatingAlgorithm
 * RSS/1b標準の分配アルゴリズム
 * このアルゴリズムは，下記の機能を実装している
 *
 * (1) 過去に扱ったことのあるサイトを，経験者に対して優先的に配分する
 * (2) 基本的に均等分配とする
 * (3) URLの抽出は，RoutingAlgorithmクラスに依存する
 */
package org.logical_paradox.rss.router.algorithm;

import java.util.ArrayList;

public class StandardAllocatingAlgorithm extends AllocatingAlgorithm {
	private int beforeCnt = 0;

	/*
	 * コンストラクタたち
	 */
	public StandardAllocatingAlgorithm() {
		super();
	}
	public StandardAllocatingAlgorithm( RoutingAlgorithm ra ) {
		setRoutingAlgorithm( ra );
	}

	/*
	 * 分配先を取得する
	 */
	public String allocate( String url ) throws AllocationException {
		if( hasRoutingAlgorithm() == false ) {
			throw new AllocationException( "経路決定アルゴリズムが設定されていません" );
		}

		// 2003-08-25 テストのため，とりあえず順番に返すようにする
		String[] nodes = null;
		synchronized( childNode ) {
			nodes = (String[])new ArrayList( childNode.keySet() ).toArray( new String[0] );
		}

		if( beforeCnt >= nodes.length ) {
			beforeCnt = 0;
		}

		String nodeId = nodes[ beforeCnt++ ];

		return nodeId;
	}
}

// end of StandardAllocatingAlgorithm.java
