// Path: src/main/java/acromusashi/stream/ml/clustering/kmeans/entity/KmeansDataSet.java
// public class KmeansDataSet implements Serializable
// {
//     /** シリアル */
//     private static final long serialVersionUID = 338231277453149972L;
// 
//     /** 各クラスタの中心座標の行列を格納した配列 */
//     private double[][]        centroids;
// 
//     /** 各クラスタに分類された要素数 */
//     private long[]            clusteredNum;
// 
//     /**
//      * パラメータを指定せずにインスタンスを生成する。
//      */
//     public KmeansDataSet()
//     {}
// 
//     /**
//      * @return the centroids
//      */
//     public double[][] getCentroids()
//     {
//         return this.centroids;
//     }
// 
//     /**
//      * @param centroids the centroids to set
//      */
//     public void setCentroids(double[][] centroids)
//     {
//         this.centroids = centroids;
//     }
// 
//     /**
//      * @return the clusteredNum
//      */
//     public long[] getClusteredNum()
//     {
//         return this.clusteredNum;
//     }
// 
//     /**
//      * @param clusteredNum the clusteredNum to set
//      */
//     public void setClusteredNum(long[] clusteredNum)
//     {
//         this.clusteredNum = clusteredNum;
//     }
// 
//     /**
//      * {@inheritDoc}
//      */
//     @Override
//     public String toString()
//     {
//         String result = ToStringBuilder.reflectionToString(this, ToStringStyle.SHORT_PREFIX_STYLE);
//         return result;
//     }
// }


import java.io.IOException;
import java.util.Arrays;
import java.util.concurrent.TimeUnit;
import org.infinispan.client.hotrod.RemoteCache;
import org.infinispan.client.hotrod.RemoteCacheManager;
import org.infinispan.client.hotrod.configuration.Configuration;
import org.infinispan.client.hotrod.configuration.ConfigurationBuilder;
import org.infinispan.commons.marshall.Marshaller;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import acromusashi.stream.ml.clustering.kmeans.entity.KmeansDataSet;
import com.google.common.base.Joiner;
/**
* Copyright (c) Acroquest Technology Co, Ltd. All Rights Reserved.
* Please read the associated COPYRIGHTS file for more details.
*
* THE SOFTWARE IS PROVIDED BY Acroquest Technolog Co., Ltd.,
* WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING
* BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
* IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDER BE LIABLE FOR ANY
* CLAIM, DAMAGES SUFFERED BY LICENSEE AS A RESULT OF USING, MODIFYING
* OR DISTRIBUTING THIS SOFTWARE OR ITS DERIVATIVES.
*/
package acromusashi.stream.ml.clustering.kmeans.state;





/**
 * KMeans分散用Infinispan向けStateクラス<br>
 * 設定された「parallelismHint」の数だけ存在する。
 * 
 * @author kimura
 */
public class InfinispanKmeansState extends KmeansState
{
    /** キャッシュ上のデータ生存期間のデフォルト値 */
    private static final int                               DEFAULT_LIFESPAN = 600;

    /** logger */
    private static final Logger                            logger           = LoggerFactory.getLogger(InfinispanKmeansState.class);

    /** キャッシュ上のデータ生存期間(単位：秒) */
    protected int                                          lifespan         = DEFAULT_LIFESPAN;

    /** 投入先のサーバ情報 */
    protected String                                       targetServer;

    /** 投入先キャッシュ名称 */
    protected String                                       cacheName;

    /** 状態を保存するベースキー */
    protected String                                       baseKey;

    /** Remoteキャッシュマネージャ */
    protected transient RemoteCacheManager                 clientManager;

    /** 状態保存用キャッシュ */
// Path: src/main/java/acromusashi/stream/ml/clustering/kmeans/entity/KmeansDataSet.java
// public class KmeansDataSet implements Serializable
// {
//     /** シリアル */
//     private static final long serialVersionUID = 338231277453149972L;
// 
//     /** 各クラスタの中心座標の行列を格納した配列 */
//     private double[][]        centroids;
// 
//     /** 各クラスタに分類された要素数 */
//     private long[]            clusteredNum;
// 
//     /**
//      * パラメータを指定せずにインスタンスを生成する。
//      */
//     public KmeansDataSet()
//     {}
// 
//     /**
//      * @return the centroids
//      */
//     public double[][] getCentroids()
//     {
//         return this.centroids;
//     }
// 
//     /**
//      * @param centroids the centroids to set
//      */
//     public void setCentroids(double[][] centroids)
//     {
//         this.centroids = centroids;
//     }
// 
//     /**
//      * @return the clusteredNum
//      */
//     public long[] getClusteredNum()
//     {
//         return this.clusteredNum;
//     }
// 
//     /**
//      * @param clusteredNum the clusteredNum to set
//      */
//     public void setClusteredNum(long[] clusteredNum)
//     {
//         this.clusteredNum = clusteredNum;
//     }
// 
//     /**
//      * {@inheritDoc}
//      */
//     @Override
//     public String toString()
//     {
//         String result = ToStringBuilder.reflectionToString(this, ToStringStyle.SHORT_PREFIX_STYLE);
//         return result;
//     }
// }


// Path: src/main/java/acromusashi/stream/ml/clustering/kmeans/state/InfinispanKmeansState.java
import java.io.IOException;
import java.util.Arrays;
import java.util.concurrent.TimeUnit;
import org.infinispan.client.hotrod.RemoteCache;
import org.infinispan.client.hotrod.RemoteCacheManager;
import org.infinispan.client.hotrod.configuration.Configuration;
import org.infinispan.client.hotrod.configuration.ConfigurationBuilder;
import org.infinispan.commons.marshall.Marshaller;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import acromusashi.stream.ml.clustering.kmeans.entity.KmeansDataSet;
import com.google.common.base.Joiner;

/**
* Copyright (c) Acroquest Technology Co, Ltd. All Rights Reserved.
* Please read the associated COPYRIGHTS file for more details.
*
* THE SOFTWARE IS PROVIDED BY Acroquest Technolog Co., Ltd.,
* WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING
* BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
* IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDER BE LIABLE FOR ANY
* CLAIM, DAMAGES SUFFERED BY LICENSEE AS A RESULT OF USING, MODIFYING
* OR DISTRIBUTING THIS SOFTWARE OR ITS DERIVATIVES.
*/
package acromusashi.stream.ml.clustering.kmeans.state;





/**
 * KMeans分散用Infinispan向けStateクラス<br>
 * 設定された「parallelismHint」の数だけ存在する。
 * 
 * @author kimura
 */
public class InfinispanKmeansState extends KmeansState
{
    /** キャッシュ上のデータ生存期間のデフォルト値 */
    private static final int                               DEFAULT_LIFESPAN = 600;

    /** logger */
    private static final Logger                            logger           = LoggerFactory.getLogger(InfinispanKmeansState.class);

    /** キャッシュ上のデータ生存期間(単位：秒) */
    protected int                                          lifespan         = DEFAULT_LIFESPAN;

    /** 投入先のサーバ情報 */
    protected String                                       targetServer;

    /** 投入先キャッシュ名称 */
    protected String                                       cacheName;

    /** 状態を保存するベースキー */
    protected String                                       baseKey;

    /** Remoteキャッシュマネージャ */
    protected transient RemoteCacheManager                 clientManager;

    /** 状態保存用キャッシュ */
    protected transient RemoteCache<String, KmeansDataSet> stateCache;