/*
 * $Id: ByStdTDocumentsClassifier.java,v 1.3 2004/12/21 10:29:17 koppy Exp $
 *
 * Copyright (c) Siemens AG 2008 
 *           (c) Universität Paderborn 2008 
 * Licensed under EUPL 1.1. 
 * 
 * Created on 09.10.2004
 *
 * $Log: ByStdTDocumentsClassifier.java,v $
 * Revision 1.3  2004/12/21 10:29:17  koppy
 * so einiges
 *
 * Revision 1.2  2004/10/13 13:49:37  koppy
 * getStdtDocument nach PatentUtils ausgelagert
 *
 * Revision 1.1  2004/10/09 16:03:01  koppy
 * Initiale Version
 *
 */
package vkc.ws.axis.service.patent;

import java.util.ArrayList;
import java.util.Collection;
import java.util.Iterator;

import vkc.analyse.Analyser;
import vkc.db.entities.VKCCategory;
import vkc.db.entities.VKCDocument;
import vkc.db.entities.VKCUser;
import vkc.exception.DBException;
import vkc.search.ClassifyResultEntry;
import vkc.search.Search;
import vkc.search.SearchResultEntry;

/**
 * This class represents
 * @author Andreas Koop
 */
public class ByStdTDocumentsClassifier extends PatentClassifier{
    

    /**
     * MEthode dient dazu, den Unterklassen die Möglichkeit zu geben
     * anhand des gegebenen Patentdokumentes, ein Dokument zurück zu geben,
     * das als Basis für die Klassifikation dient.
     * 
     * @param patentDoc
     * @return
     */
    protected VKCDocument getDocumentToBeClassified( VKCDocument patentDoc ) throws DBException{
        
        return PatentUtils.getStdTDocument(patentDoc);
    }
    
    
    /**
     * Diese Methode implementiert die StdT-Ähnlichkeitsklassifizierung.
	 * Bei der StdT Klassifizierung werden die im Stand der Technik (separates Dokument zur der Patentanmeldung)
	 * vorkommenden Begriffe genutzt, um den Grad der Übereinstimmung mit allen anderen StdT-Dokumenten der
	 * schon erteilten Patentschriften zu bestimmen.
     * @see vkc.ws.axis.service.patent.PatentClassifier#classify(vkc.analyse.Analyser, int, vkc.db.entities.VKCUser, vkc.db.entities.VKCCategory)
     */
    protected Collection classify(Analyser analyser, VKCDocument doc,int keywordCount,
            VKCUser user, VKCCategory patentCat) throws DBException {
        
        Collection resultEntries = Search.whatsRelated(
                doc, null, null, "TXT", user, PatentUtils.getIssuedCategory(patentCat).getCategoryId());
        
        if(resultEntries == null || resultEntries.isEmpty())
            return new ArrayList();
        
        Collection classifyResultEntries = new ArrayList(); 
        for(Iterator it = resultEntries.iterator();it.hasNext();){
            SearchResultEntry res = (SearchResultEntry)it.next();
            classifyResultEntries.add( 
                    new ClassifyResultEntry(res.getCategoryId(), "---",
                            res.getKeywords(), res.getDescription(), res.getScore()));
        }
        
        return PatentUtils.normResultsToParentCategory(classifyResultEntries);
    }
    
    /** 
     * (non-Javadoc)
     * @see vkc.ws.axis.service.patent.PatentClassifier#getResultFilename(java.lang.String)
     */
    protected String getResultFilename(String originalPatentFilename) {
        return originalPatentFilename.substring(0, 
                originalPatentFilename.lastIndexOf("."))+ "_Classification3.txt";
    }
    
    /** 
     * (non-Javadoc)
     * @see vkc.ws.axis.service.patent.PatentClassifier#getResultTitle(java.lang.String)
     */
    protected String getResultTitle(String originalPatentFilename) {
        return ByStdTDocumentsClassifier.getName();
    }
    
    public static final String getName(){
        return "Klassifikationsergebnis 3 (ByStdT)";
    }
}
