/**
* Copyright (C) 2001-2017 by RapidMiner and the contributors
*
* Complete list of developers available at our web site:
*
* http://rapidminer.com
*
* This program is free software: you can redistribute it and/or modify it under the terms of the
* GNU Affero General Public License as published by the Free Software Foundation, either version 3
* of the License, or (at your option) any later version.
*
* This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without
* even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Affero General Public License for more details.
*
* You should have received a copy of the GNU Affero General Public License along with this program.
* If not, see http://www.gnu.org/licenses/.
*/
package com.rapidminer.gui.new_plotter.configuration;
import com.rapidminer.datatable.DataTable;
import com.rapidminer.gui.new_plotter.ChartConfigurationException;
import com.rapidminer.gui.new_plotter.configuration.DataTableColumn.ValueType;
import com.rapidminer.gui.new_plotter.listener.ValueGroupingListener;
import com.rapidminer.gui.new_plotter.utility.ValueRange;
import com.rapidminer.tools.I18N;
import java.text.DateFormat;
import java.util.List;
/**
* Groups values by predefined criteria, e.g. binning of a numerical value source.
*
* @author Marius Helf, Nils Woehler
*
*/
public interface ValueGrouping {
public class ValueGroupingFactory {
private final static int binCount = 5;
public static ValueGrouping getValueGrouping(GroupingType type, DataTableColumn dataTableColumn,
boolean categorical, DateFormat dateFormat) throws ChartConfigurationException {
switch (type) {
case DISTINCT_VALUES:
return new DistinctValueGrouping(dataTableColumn, categorical, dateFormat);
case EQUAL_DATA_FRACTION:
return new EqualDataFractionGrouping(dataTableColumn, binCount, categorical, dateFormat);
case EQUIDISTANT_FIXED_BIN_COUNT:
return new EquidistantFixedBinCountBinning(binCount, Double.NaN, Double.NaN, dataTableColumn,
categorical, dateFormat);
case NONE:
return null;
default:
throw new RuntimeException("This cannot happen");
}
}
}
public enum GroupingType {
NONE(I18N.getGUILabel("plotter.grouping_type.NONE.label")), EQUIDISTANT_FIXED_BIN_COUNT(I18N
.getGUILabel("plotter.grouping_type.EQUIDISTANT_FIXED_BIN_COUNT.label")), DISTINCT_VALUES(I18N
.getGUILabel("plotter.grouping_type.DISTINCT_VALUES.label")), EQUAL_DATA_FRACTION(I18N
.getGUILabel("plotter.grouping_type.EQUAL_DATA_FRACTION.label"));
private final String name;
private GroupingType(String name) {
this.name = name;
}
/**
* @return The display name of the enum value.
*/
public String getName() {
return name;
}
}
public List<ValueRange> getGroupingModel(DataTable data, double upperBoud, double lowerBound);
public boolean isCategorical();
/**
* Returns the type of the grouping, like Distinct values or Equal data fraction grouping.
*/
public GroupingType getGroupingType();
public void addListener(ValueGroupingListener l);
public void removeListener(ValueGroupingListener l);
public ValueGrouping clone();
/**
* The type of the groups created by this ValueGrouping.
*/
public ValueType getDomainType();
/**
* Returns true iff this ValueGrouping guarantees that each ValueRange in each possible
* resulting grouping model defines upper and lower bounds.
*/
public boolean definesUpperLowerBounds();
public DateFormat getDateFormat();
public void setDateFormat(DateFormat dateFormat);
@Override
public boolean equals(Object obj);
}