package br.uff.ic.oceano.ostra.controller;
import br.uff.ic.oceano.controller.*;
import br.uff.ic.oceano.core.exception.ObjetoNaoEncontradoException;
import br.uff.ic.oceano.core.exception.ServiceException;
import br.uff.ic.oceano.core.factory.MetricManagerFactory;
import br.uff.ic.oceano.core.factory.ObjectFactory;
import br.uff.ic.oceano.core.model.Metric;
import br.uff.ic.oceano.core.model.SoftwareProject;
import br.uff.ic.oceano.core.tools.metrics.service.MetricService;
import br.uff.ic.oceano.core.service.SoftwareProjectService;
import br.uff.ic.oceano.core.tools.metrics.MetricManager;
import br.uff.ic.oceano.util.Logger;
import br.uff.ic.oceano.ostra.controle.Constantes;
import br.uff.ic.oceano.ostra.controle.DataMiningControl;
import br.uff.ic.oceano.ostra.discretizer.DayOfWeekDiscretizer;
import br.uff.ic.oceano.ostra.discretizer.Discretizer;
import br.uff.ic.oceano.ostra.discretizer.DiscretizerFactory;
import br.uff.ic.oceano.ostra.discretizer.HourOfDayDiscretizer;
import br.uff.ic.oceano.ostra.discretizer.NegativePositiveDiscretizer;
import br.uff.ic.oceano.ostra.discretizer.NumberOfFilesDiscretizer;
import br.uff.ic.oceano.ostra.discretizer.RoundOfDayDiscretizer;
import br.uff.ic.oceano.ostra.exception.DataMiningException;
import br.uff.ic.oceano.ostra.model.DataBaseSnapshot;
import br.uff.ic.oceano.ostra.model.DataMiningPattern;
import br.uff.ic.oceano.view.SelectableItem;
import br.uff.ic.oceano.ostra.model.DataMiningResult;
import br.uff.ic.oceano.ostra.service.behaviortable.BehaviorTableService;
import br.uff.ic.oceano.ostra.service.DataMiningResultService;
import br.uff.ic.oceano.ostra.service.DeltaMetricsRevisionDataBaseService;
import br.uff.ic.oceano.ostra.service.behaviortable.Behavior;
import br.uff.ic.oceano.ostra.tools.datamining.AprioriTool;
import br.uff.ic.oceano.ostra.tools.datamining.DataMiningTool;
import br.uff.ic.oceano.ostra.tools.datamining.util.DatabaseToArffService;
import br.uff.ic.oceano.view.SelectOneDataModel;
import java.io.IOException;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.HashSet;
import java.util.LinkedList;
import java.util.List;
import java.util.Set;
import javax.faces.context.FacesContext;
import javax.faces.model.ListDataModel;
import javax.servlet.http.HttpServletResponse;
/**
*
* @author daniel
*/
public class DataMiningBean extends BaseBean {
//Messages
private String ERROR_NO_PROJECT_SELECTED = "It's needed at least one project to mine.";
private String ERROR_LOADING_DATA_MINING_RESULT = "Ops, there was an error loading this result. Please try again.";
private String ERROR_LOADING_PROJECTS = "Ops, there was an error loading the projects. Please try again.";
private String SUCCESS_SAVING_DATA_MINING_RESULT = "the mined patters was sucessfully saved.";
//Pages
private String PAGE_LIST_DATAMINING = "def:/privado/ostra/datamining/listDataMining";
private String PAGE_NEW_DATA_BASE = "def:/privado/ostra/datamining/database/newDatabase";
private String PAGE_CONFIG_DATA_MINING = "def:/privado/ostra/datamining/configDataMining";
private String PAGE_DETAIL_DATA_MINING_RESULT = "def:/privado/ostra/datamining/detailDataMiningResult";
private String PAGE_BEHAVIOR_TABLE = "def:/privado/ostra/datamining/behaviorTable";
//Control
private DataMiningControl miningControl = ObjectFactory.getObjectWithDataBaseDependencies(DataMiningControl.class);
private ListDataModel tableSelectProjects;
private List<SoftwareProject> selectedProjects;
private ListDataModel tableSelectMetrics;
private ListDataModel tableDataMiningResults;
private DataBaseSnapshot dataBaseSnapshot;
private DataMiningResult currentDataMiningResult;
private List<Discretizer> discretizers;
private List<Metric> metricsToConsider;
private boolean calculateStandardDeviation = false;
private boolean ignoreRevisionsThatDontCompile = true;
private boolean showMinARMetric = false;
private String tableBehaviorMetric;
//config data mining
private SelectOneDataModel<String> comboAssociationRuleMetric;
//filter
private List<String> allPossibleAttributes;
private SelectOneDataModel<String> comboUnusedAttributes;
private List<String> precedentAttributes;
private List<String> consequentAttributes;
private List<DataMiningPattern> filteredMinedPatterns;
private boolean considerLimitSizes;
private SelectOneDataModel<Integer> comboPrecedentSize;
private SelectOneDataModel<Integer> comboConsequentSize;
//Services
private DataMiningTool apriori = ObjectFactory.getObjectWithDataBaseDependencies(AprioriTool.class);
private MetricService metricService = ObjectFactory.getObjectWithDataBaseDependencies(MetricService.class);
private SoftwareProjectService projectService = ObjectFactory.getObjectWithDataBaseDependencies(SoftwareProjectService.class);
private DeltaMetricsRevisionDataBaseService deltaMetricsRevisionDataBaseService = ObjectFactory.getObjectWithDataBaseDependencies(DeltaMetricsRevisionDataBaseService.class);
private DataMiningResultService dataMiningResultService = ObjectFactory.getObjectWithDataBaseDependencies(DataMiningResultService.class);
private BehaviorTableService behaviorTableService = ObjectFactory.getObjectWithDataBaseDependencies(BehaviorTableService.class);
public DataMiningBean() {
super("DataMiningBean");
sessao.setPerfilOstra();
}
public DataMiningBean(SessaoDoUsuario sessao) {
super("DataMiningBean",sessao);
sessao.setPerfilOstra();
}
public String pageListDataMining() {
return PAGE_LIST_DATAMINING;
}
public String pageNewDataBase() {
return PAGE_NEW_DATA_BASE;
}
public String deleteDataMiningResult() {
currentDataMiningResult = (DataMiningResult) tableDataMiningResults.getRowData();
try {
Logger.info("Deleting the dataMinig result.");
dataMiningResultService.delete(currentDataMiningResult);
info("Data sucessfully removed.");
} catch (ObjetoNaoEncontradoException ex) {
error("Was not possible to remove this data. Try to remove it again.");
}
currentDataMiningResult = null;
tableDataMiningResults = null;
return null;
}
public String downloadARFF() {
String arffContent = null;
if (currentDataMiningResult != null && currentDataMiningResult.getArff() != null) {
arffContent = currentDataMiningResult.getArff();
} else {
arffContent = getDataBaseAsArff();
}
FacesContext context = getContexto();
HttpServletResponse response = (HttpServletResponse) context.getExternalContext().getResponse();
response.setHeader("Content-disposition",
"attachment; filename= " + this.currentDataMiningResult.getDescription().replace(" ", "_") + ".arff");
response.setContentLength(arffContent.length());
try {
response.getOutputStream().write(arffContent.getBytes());
response.getOutputStream().flush();
response.getOutputStream().close();
context.responseComplete();
return null;
} catch (IOException e) {
error("There was a problem generating the arff file. Please try again.");
return null;
}
}
public String detailDataMiningResult() {
Long currentDataMiningResultsId = ((DataMiningResult) tableDataMiningResults.getRowData()).getId();
try {
// Logger.getLogger(DataMiningBean.class.getName()).log(Level.FINE, "Getting the data minig result to detail.");
Logger.info("Getting the data minig result to detail.");
currentDataMiningResult = dataMiningResultService.getToDetailById(currentDataMiningResultsId);
Logger.info("Initialyzing filters.");
initializeFilters();
updateFilteredPatternList();
// System.out.println("return to page.");
showBehaviorTable();
return PAGE_DETAIL_DATA_MINING_RESULT;
} catch (ObjetoNaoEncontradoException ex) {
error(ERROR_LOADING_DATA_MINING_RESULT);
return null;
}
}
public String downloadArffFile() {
error("Sorry but this functionality is not yet implemented. Wait a next version.");
return null;
}
public String getDataBaseAsArff() {
try {
return DatabaseToArffService.dataBaseToARFF(dataBaseSnapshot, discretizers);
} catch (ServiceException ex) {
return null;
}
}
public String configureDataMining() {
Logger.info("Initializing selected projects.");
initializeSelectedProjects();
if (selectedProjects.isEmpty()) {
error(ERROR_NO_PROJECT_SELECTED);
return null;
}
try {
Logger.info("Initializing discretizers.");
initializeDiscretizers();
initializeSelectedMetrics();
//build the dataBaseSnapshot that we will mine later.
Logger.info("Building database snapshot.");
dataBaseSnapshot = deltaMetricsRevisionDataBaseService.buildDeltaMetricsDataBase(selectedProjects, discretizers, calculateStandardDeviation, ignoreRevisionsThatDontCompile, metricsToConsider, false);
} catch (ServiceException ex) {
error(ex.getMessage());
return null;
}
Logger.info("Creating a DataMiningControl.");
miningControl = new DataMiningControl();
Logger.debug("Returning to page.");
return PAGE_CONFIG_DATA_MINING;
}
private void initializeSelectedMetrics() {
metricsToConsider = new LinkedList<Metric>();
for (SelectableItem si : ((List<SelectableItem>) tableSelectMetrics.getWrappedData())) {
// System.out.println("si = " + si);
if (si.isSelected()) {
// System.out.println(" metrica selecionada = " + si.getItem());
metricsToConsider.add((Metric) si.getItem());
}
}
}
private void initializeComboConsequentSize() {
Set<Integer> consequentSizes = new HashSet<Integer>();
int max = Integer.MIN_VALUE;
for (DataMiningPattern dataMiningPattern : currentDataMiningResult.getDataMiningPatterns()) {
consequentSizes.add(dataMiningPattern.getConsequentSize());
if (dataMiningPattern.getConsequentSize() > max) {
max = dataMiningPattern.getConsequentSize();
}
}
comboConsequentSize = SelectOneDataModel.criaComObjetoSelecionadoSemTextoInicial(consequentSizes, max);
}
private void initializeComboPrecedentSize() {
Set<Integer> precedentSizes = new HashSet<Integer>();
int max = Integer.MIN_VALUE;
for (DataMiningPattern dataMiningPattern : currentDataMiningResult.getDataMiningPatterns()) {
precedentSizes.add(dataMiningPattern.getPrecedentSize());
if (dataMiningPattern.getPrecedentSize() > max) {
max = dataMiningPattern.getPrecedentSize();
}
}
comboPrecedentSize = SelectOneDataModel.criaComObjetoSelecionadoSemTextoInicial(precedentSizes, max);
}
private void initializeSelectedProjects() {
selectedProjects = new ArrayList<SoftwareProject>();
for (SelectableItem selectableItem : (List<SelectableItem>) tableSelectProjects.getWrappedData()) {
if (selectableItem.isSelected()) {
final SoftwareProject selectedProject = (SoftwareProject) selectableItem.getItem();
selectedProjects.add(selectedProject);
}
}
}
private void initializeDiscretizers() throws ServiceException {
Set<String> setOfMetricNames = new HashSet<String>();
for (SoftwareProject project : selectedProjects) {
for (Metric metric : metricService.getMetricsByProject(project)) {
setOfMetricNames.add(metric.getName());
}
}
discretizers = new ArrayList<Discretizer>();
for (String metricName : setOfMetricNames) {
discretizers.add(DiscretizerFactory.getDiscretizer(Constantes.PREFIX_DELTA_METRIC_AVARAGE + metricName, NegativePositiveDiscretizer.class));
discretizers.add(DiscretizerFactory.getDiscretizer(Constantes.PREFIX_DELTA_METRIC_STANDARD_DEVIATON + metricName, NegativePositiveDiscretizer.class));
}
discretizers.add(DiscretizerFactory.getDiscretizer("rday", DayOfWeekDiscretizer.class));
discretizers.add(DiscretizerFactory.getDiscretizer("rhour", HourOfDayDiscretizer.class));
discretizers.add(DiscretizerFactory.getDiscretizer("rRound", RoundOfDayDiscretizer.class));
discretizers.add(DiscretizerFactory.getDiscretizer("#files", NumberOfFilesDiscretizer.class));
}
public String mineAssociationRules() {
if (comboAssociationRuleMetric.isTextoInicialSelecionado()) {
error("Please select a association rule metric.");
return null;
}
Logger.info("Starting to Mine database");
try {
Logger.info("Mining association rules with Apriori.");
currentDataMiningResult = apriori.mine(getDataBaseAsArff(), miningControl);
currentDataMiningResult.prepare();
Logger.info("Writing data mining result description.");
String description = "Projects: ";
for (SoftwareProject project : selectedProjects) {
description += project.getConfigurationItem().getName() + ",";
}
description = description.substring(0, description.length() - 1) + ".";
description += " RA Metric: " + currentDataMiningResult.getRuleMetricName();
currentDataMiningResult.setDescription(description);
Logger.info("Initializyng filters.");
initializeFilters();
showBehaviorTable();
info("The mineration was sucessfull. Mined patterns will be shown.");
return PAGE_DETAIL_DATA_MINING_RESULT;
} catch (DataMiningException ex) {
//System.out.println("ex = " + ex);
ex.printStackTrace();
error(ex.getMessage());
return null;
}
}
public String saveDataMiningResult() {
Logger.info("Saving data mining result.");
dataMiningResultService.save(currentDataMiningResult);
info(SUCCESS_SAVING_DATA_MINING_RESULT);
return PAGE_LIST_DATAMINING;
}
/**
* @return the miningControl
*/
public DataMiningControl getMiningControl() {
return miningControl;
}
/**
* @param miningControl the miningControl to set
*/
public void setMiningControl(DataMiningControl miningControl) {
this.miningControl = miningControl;
}
/**
* @return the tableSelectProjects
*/
public ListDataModel getTableSelectProjects() {
Logger.info("Loading project table");
if (tableSelectProjects == null) {
try {
List<SelectableItem> selectableProjects = new ArrayList<SelectableItem>();
for (SoftwareProject project : projectService.getProjectsByOceanoUser(sessao.getUsuarioCorrente())) {
selectableProjects.add(new SelectableItem(projectService.getProjectToDetailById(project.getId())));
}
tableSelectProjects = new ListDataModel(selectableProjects);
} catch (ServiceException ex) {
//should be impossible to happen, but...
error(ERROR_LOADING_PROJECTS);
return null;
}
}
return tableSelectProjects;
}
/**
* @param tableSelectProjects the tableSelectProjects to set
*/
public void setTableSelectProjects(ListDataModel tableSelectProjects) {
this.tableSelectProjects = tableSelectProjects;
}
/**
* @return the tableSelectMetrics
*/
public ListDataModel getTableSelectMetrics() {
if (tableSelectMetrics == null) {
initializeMetrics();
List<SelectableItem> items = new ArrayList<SelectableItem>();
for (Metric metric : metricService.getAll()) {
items.add(new SelectableItem(metric, metricsToConsider.contains(metric)));
}
tableSelectMetrics = new ListDataModel(items);
}
return tableSelectMetrics;
}
/**
* @param tableSelectMetrics the tableSelectMetrics to set
*/
public void setTableSelectMetrics(ListDataModel tableSelectMetrics) {
this.tableSelectMetrics = tableSelectMetrics;
}
/**
* @return the calculateStandardDeviation
*/
public boolean isCalculateStandardDeviation() {
return calculateStandardDeviation;
}
/**
* @param calculateStandardDeviation the calculateStandardDeviation to set
*/
public void setCalculateStandardDeviation(boolean calculateStandardDeviation) {
this.calculateStandardDeviation = calculateStandardDeviation;
}
/**
* @return the dataBaseSnapshot
*/
public DataBaseSnapshot getDataBaseSnapshot() {
return dataBaseSnapshot;
}
/**
* @param dataBaseSnapshot the dataBaseSnapshot to set
*/
public void setDataBaseSnapshot(DataBaseSnapshot dataBaseSnapshot) {
this.dataBaseSnapshot = dataBaseSnapshot;
}
/**
* @return the currentDataMiningResult
*/
public DataMiningResult getCurrentDataMiningResult() {
return currentDataMiningResult;
}
/**
* @param currentDataMiningResult the currentDataMiningResult to set
*/
public void setCurrentDataMiningResult(DataMiningResult currentDataMiningResult) {
this.currentDataMiningResult = currentDataMiningResult;
}
/**
* @return the tableDataMiningResults
*/
public ListDataModel getTableDataMiningResults() {
if (tableDataMiningResults == null) {
Logger.info("Loagind data mining results from database.");
tableDataMiningResults = new ListDataModel(dataMiningResultService.getAll());
}
return tableDataMiningResults;
}
/**
* @param tableDataMiningResults the tableDataMiningResults to set
*/
public void setTableDataMiningResults(ListDataModel tableDataMiningResults) {
this.tableDataMiningResults = tableDataMiningResults;
}
/**
* @return the unusedAttributes
*/
public SelectOneDataModel<String> getComboUnusedAttributes() {
if (comboUnusedAttributes == null) {
// allPossibleAttributes = new ArrayList<String>();
//
// List<Metric> metrics = metricService.getAll();
// for (Metric metric : metrics) {
// allPossibleAttributes.add(Constantes.PREFIX_DELTA_METRIC_AVARAGE + metric.getName());
// }
// for (Metric metric : metrics) {
// allPossibleAttributes.add(Constantes.PREFIX_DELTA_METRIC_STANDARD_DEVIATON + metric.getName());
// }
// allPossibleAttributes.add("rdate");
// allPossibleAttributes.add("#files");
// allPossibleAttributes.add("rcommiter");
allPossibleAttributes = this.currentDataMiningResult.getAttributes();
updateComboUnusedAttributes();
}
return comboUnusedAttributes;
}
private void updateComboUnusedAttributes() {
List<String> possibleAttributes = new ArrayList<String>();
for (String attribute : allPossibleAttributes) {
if (precedentAttributes.contains(attribute)) {
continue;
}
if (consequentAttributes.contains(attribute)) {
continue;
}
possibleAttributes.add(attribute);
}
comboUnusedAttributes = new SelectOneDataModel<String>(possibleAttributes);
}
/**
* @param unusedAttributes the unusedAttributes to set
*/
public void setComboUnusedAttributes(SelectOneDataModel<String> unusedAttributes) {
this.comboUnusedAttributes = unusedAttributes;
}
public String addPrecedentAttribute() {
final String selectedAttribute = comboUnusedAttributes.getSelecao();
if (selectedAttribute == null) {
error("Select an attribute first.");
return null;
}
precedentAttributes.add(selectedAttribute);
updateFilteredPatternList();
updateComboUnusedAttributes();
return null;
}
public String addConsequentAttribute() {
final String selectedAttribute = comboUnusedAttributes.getSelecao();
if (selectedAttribute == null) {
error("Select an attribute first.");
return null;
}
consequentAttributes.add(selectedAttribute);
updateFilteredPatternList();
updateComboUnusedAttributes();
return null;
}
/**
* @return the filteredMinedPatterns
*/
public List<DataMiningPattern> getFilteredMinedPatterns() {
if (filteredMinedPatterns == null) {
filteredMinedPatterns = currentDataMiningResult.getDataMiningPatterns();
}
return filteredMinedPatterns;
}
/**
* @param filteredMinedPatterns the filteredMinedPatterns to set
*/
public void setFilteredMinedPatterns(List<DataMiningPattern> filteredMinedPatterns) {
this.filteredMinedPatterns = filteredMinedPatterns;
}
public String updateFilteredPatternList() {
List<DataMiningPattern> newFilteredPatternList = new LinkedList<DataMiningPattern>();
for (DataMiningPattern dataMiningPattern : currentDataMiningResult.getDataMiningPatterns()) {
//attribute verification
final String precedent = dataMiningPattern.getPrecedent();
boolean validPattern = true;
for (String attribute : getPrecedentAttributes()) {
if (!precedent.contains(attribute)) {
validPattern = false;
}
}
final String consequent = dataMiningPattern.getConsequent();
for (String attribute : getConsequentAttributes()) {
if (!consequent.contains(attribute)) {
validPattern = false;
}
}
if(!isConsiderLimitSizes() ){
if (validPattern) {
newFilteredPatternList.add(dataMiningPattern);
}
continue;
}
//size verification
Integer maxPrecedentSize = comboPrecedentSize.getObjetoSelecionado();
if (maxPrecedentSize == null) {
maxPrecedentSize = Integer.MAX_VALUE;
}
Integer maxConsequentSize = comboConsequentSize.getObjetoSelecionado();
if (maxConsequentSize == null) {
maxConsequentSize = Integer.MAX_VALUE;
}
if (dataMiningPattern.getPrecedentSize() > maxPrecedentSize || dataMiningPattern.getConsequentSize() > maxConsequentSize) {
validPattern = false;
}
if (validPattern) {
newFilteredPatternList.add(dataMiningPattern);
}
}
filteredMinedPatterns = newFilteredPatternList;
return null;
}
public String cleanFilters() {
initializeFilters();
updateComboUnusedAttributes();
updateFilteredPatternList();
return null;
}
private void initializeFilters() {
precedentAttributes = new ArrayList<String>();
consequentAttributes = new ArrayList<String>();
initializeComboPrecedentSize();
initializeComboConsequentSize();
filteredMinedPatterns = null;
}
/**
* @return the precedentAttributes
*/
public List<String> getPrecedentAttributes() {
return precedentAttributes;
}
/**
* @param precedentAttributes the precedentAttributes to set
*/
public void setPrecedentAttributes(List<String> precedentAttributes) {
this.precedentAttributes = precedentAttributes;
}
/**
* @return the consequentAttributes
*/
public List<String> getConsequentAttributes() {
return consequentAttributes;
}
/**
* @param consequentAttributes the consequentAttributes to set
*/
public void setConsequentAttributes(List<String> consequentAttributes) {
this.consequentAttributes = consequentAttributes;
}
/**
* @return the comboPrecedentSize
*/
public SelectOneDataModel<Integer> getComboPrecedentSize() {
if (comboPrecedentSize == null) {
initializeComboPrecedentSize();
}
return comboPrecedentSize;
}
/**
* @param comboPrecedentSize the comboPrecedentSize to set
*/
public void setComboPrecedentSize(SelectOneDataModel<Integer> comboPrecedentSize) {
this.comboPrecedentSize = comboPrecedentSize;
}
/**
* @return the comboConsequentSize
*/
public SelectOneDataModel<Integer> getComboConsequentSize() {
if (comboConsequentSize == null) {
initializeComboConsequentSize();
}
return comboConsequentSize;
}
/**
* @param comboConsequentSize the comboConsequentSize to set
*/
public void setComboConsequentSize(SelectOneDataModel<Integer> comboConsequentSize) {
this.comboConsequentSize = comboConsequentSize;
}
public Integer getFilteredMinedPatternsSize() {
if (filteredMinedPatterns == null) {
return 0;
}
return filteredMinedPatterns.size();
}
/**
* @return the comboAssociationRuleMetric
*/
public SelectOneDataModel<String> getComboAssociationRuleMetric() {
if (comboAssociationRuleMetric == null) {
comboAssociationRuleMetric = SelectOneDataModel.criaComTextoInicialPersonalizado(Arrays.asList(DataMiningControl.getPossibleMetricTypes()), "Select an Association Rules metric");
}
return comboAssociationRuleMetric;
}
/**
* @param comboAssociationRuleMetric the comboAssociationRuleMetric to set
*/
public void setComboAssociationRuleMetric(SelectOneDataModel<String> comboAssociationRuleMetric) {
this.comboAssociationRuleMetric = comboAssociationRuleMetric;
}
public void updateMetricType() {
final String selectedMetricName = comboAssociationRuleMetric.getSelecao();
miningControl.setMetricType(selectedMetricName);
setShowMinARMetric(true);
}
/**
* @return the showMinARMetric
*/
public boolean isShowMinARMetric() {
return showMinARMetric;
}
/**
* @param showMinARMetric the showMinARMetric to set
*/
public void setShowMinARMetric(boolean showMinARMetric) {
this.showMinARMetric = showMinARMetric;
}
private void initializeMetrics() {
//TODO: change for page input
metricsToConsider = new ArrayList<Metric>();
for (MetricManager mm : MetricManagerFactory.getQmoodQualityAttributes()) {
metricsToConsider.add(mm.getMetric());
}
}
////////////////////////////////////////////////////////////////////////////
private Behavior[][] tableBehavior;
public String showBehaviorTable() {
if (currentDataMiningResult == null) {
currentDataMiningResult = (DataMiningResult) tableDataMiningResults.getRowData();
if (currentDataMiningResult.getId() != null) {
try {
currentDataMiningResult = dataMiningResultService.getToDetailById(currentDataMiningResult.getId());
} catch (ObjetoNaoEncontradoException ex) {
error("Please try again.");
return null;
}
}
}
tableBehavior = behaviorTableService.buildTable(currentDataMiningResult);
tableBehaviorMetric = currentDataMiningResult.getRuleMetricName();
return PAGE_BEHAVIOR_TABLE;
}
/**
* @return the tableBehavior
*/
public Behavior[][] getTableBehavior() {
return tableBehavior;
}
/**
* @param tableBehavior the tableBehavior to set
*/
public void setTableBehavior(Behavior[][] tableBehavior) {
this.tableBehavior = tableBehavior;
}
/**
* @return the tableBehaviorMetric
*/
public String getTableBehaviorMetric() {
return tableBehaviorMetric;
}
/**
* @param tableBehaviorMetric the tableBehaviorMetric to set
*/
public void setTableBehaviorMetric(String tableBehaviorMetric) {
this.tableBehaviorMetric = tableBehaviorMetric;
}
/**
* @return the ignoreRevisionsThatDontCompile
*/
public boolean isIgnoreRevisionsThatDontCompile() {
return ignoreRevisionsThatDontCompile;
}
/**
* @param ignoreRevisionsThatDontCompile the ignoreRevisionsThatDontCompile to set
*/
public void setIgnoreRevisionsThatDontCompile(boolean ignoreRevisionsThatDontCompile) {
this.ignoreRevisionsThatDontCompile = ignoreRevisionsThatDontCompile;
}
/**
* @return the considerLimitSizes
*/
public boolean isConsiderLimitSizes() {
return considerLimitSizes;
}
/**
* @param considerLimitSizes the considerLimitSizes to set
*/
public void setConsiderLimitSizes(boolean considerLimitSizes) {
this.considerLimitSizes = considerLimitSizes;
}
}