package pl.edu.icm.yadda.analysis.classification.features;

import java.util.Collection;
import java.util.Set;

/**
 * Feature vector builder (GoF factory pattern). The builder calculates
 * feature vectors for objects using a list of single feature calculators.
 *
 * @author Dominika Tkaczyk (dtkaczyk@icm.edu.pl)
 *
 * @param <S> Type of objects for whom features' values can be calculated.
 * @param <T> Type of additional context objects that can be used
 * for calculation.
 */
public interface FeatureVectorBuilder<S, T> {

    /**
     * Sets feature calculators used for building feature vectors.
     *
     * @param featureCalculators A collection of feature calculators.
     */
    void setFeatureCalculators(Collection<FeatureCalculator<S, T>> featureCalculators);

    /**
     * Returns calculated feature vector.
     *
     * @param object An object, whose feature vector is to be calculated.
     * @param context Context object
     * @return Calculated feature vector.
     */
    FeatureVector getFeatureVector(S object, T context);

    /**
     * Returns the names of features that are part of calculated feature vector.
     *
     * @return The set of feature names.
     */
    Set<String> getFeatureNames();

}

@@ -323,17 +323,17 @@
 @param %3C
-S
+X
 %3E Type o
@@ -398,17 +398,17 @@
 @param %3C
-T
+Y
 %3E Type o
@@ -515,20 +515,20 @@
 Builder%3C
-S, T
+X, Y
 %3E %7B%0A%0A   
@@ -748,12 +748,12 @@
 tor%3C
-S, T
+X, Y
 %3E%3E f
@@ -1026,17 +1026,17 @@
 eVector(
-S
+X
  object,
@@ -1036,17 +1036,17 @@
 object, 
-T
+Y
  context

Change generic types' names to be less ambiguous (leave S,T for label class and feature vector class respectively)