/*
 * $Id: ClusterUtils.java,v 1.2 2006/07/31 07:21:16 lawern Exp $
 *
 * Copyright (c) Siemens AG 2008 
 *           (c) Universität Paderborn 2008 
 * Licensed under EUPL 1.1. 
 *
 * $Log: ClusterUtils.java,v $
 * Revision 1.2  2006/07/31 07:21:16  lawern
 * Überarbeitung
 *
 * Revision 1.1  2005/06/23 00:58:31  aram
 * + Initiale Version
 *
 */

package vkc.util;

import java.util.HashMap;

import vkc.clusterer.Clustern;
import vkc.clusterer.ClusternAverage;
import vkc.clusterer.ClusternClink;
import vkc.clusterer.ClusternSlink;

import vkc.db.entities.VKCCategory;
import vkc.view.form.ClusterCategoryForm;

public class ClusterUtils {
    private ClusterUtils() {

    }
   
    /**
     * Clustert Dateien ab der übergeben Kategorie. Hier erfolgt die Logik des Clusterings, Methoden, etc.
     * @param category
     * @return DefaultMutableTreeNode (oder später ein Array davon )
     */
    public static final HashMap clusterCategory(VKCCategory category, Integer clusterAlgoMode, Integer clusterMode, boolean termIntersection) {
        //long eineEinheit= 1000; // Secunde
        Clustern vkcClusterer = null;
        long timeStart ;
        long timeEnd ;
        long timeRun ;
        timeStart = System.currentTimeMillis();
        
        // Hier wird Abhängi von Userauswahl diverse Clusterverfahren gewählt
        if (ClusterCategoryForm.CLUSTER_AVERAGE.equals(clusterAlgoMode)) {
            vkcClusterer = new ClusternAverage(category, Clustern.TFIDF_WEIGHT, clusterMode, termIntersection);
        } else if (ClusterCategoryForm.CLUSTER_CLINK.equals(clusterAlgoMode)) {
            vkcClusterer = new ClusternClink(category, Clustern.TFIDF_WEIGHT, clusterMode, termIntersection);
        } else if (ClusterCategoryForm.CLUSTER_SLINK.equals(clusterAlgoMode)) {
            vkcClusterer = new ClusternSlink(category, Clustern.TFIDF_WEIGHT, clusterMode, termIntersection);
        } else {
            vkcClusterer = new ClusternAverage(category, Clustern.TFIDF_WEIGHT, clusterMode, termIntersection);
        }
        
        
        //ClusternSlink vkcClusterer = new ClusternSlink();
        //ClusternSlink vkcClusterer = new ClusternSlink(category, Clustern.STANDARD_WEIGHT);
        //ClusternAverage vkcClusterer = new ClusternAverage(category, Clustern.STANDARD_WEIGHT);
        //ClusternClink vkcClusterer = new ClusternClink(category, Clustern.STANDARD_WEIGHT);
        
        //vkcClusterer.setCategory(category);
        HashMap cluster = vkcClusterer.getCluster();
        timeEnd = System.currentTimeMillis();
        timeRun = (timeEnd - timeStart);
        System.out.println("Das Clustern hat " + timeRun + " Millisecunden gedauert!!!" );
        
        return cluster;
    }
} 

/*
 * 
 * public final void setTDM (int rows, int columns) { tdmMatrix = new
 * SparseDoubleMatrix2D(rows, columns); for (int row = 0; row < rows; row++) {
 * for (int column = 0; column < columns; column++) {
 * tdmMatrix.setQuick(row, column, row); } } }
 */
/*
 * public static void Test() { DocumentSimilarity ds = new DocumentSimilarity();
 * ds.addBaseDocument("x:\\test1.txt"); ds.addBaseDocument("x:\\test2.txt");
 * Vector keys = ds.getBaseKeys(); for (int i = 0; i < keys.size(); i++)
 * System.out.println(((TermDescriptor) keys.elementAt(i)).term);
 * System.out.println(ds.compareFile("x:\\test2.txt")); } }
 */
//Bilde die TDM
//Berechne Similarity -> finde heraus was in VKC schon implementiert
// ist
// Bilde Cluster -> Implementiert in package clusterer
//						 	Eingabe: Dreiecksmatrix
//							Ausgabe: DefaultMutableTreeNode
