use of com.cpjd.roblu.models.metrics.RCounter in project Roblu by wdavies973.
the class TeamMetricProcessor method process.
/**
* Processes an RTeam object and sets its filterTag and relevance variables.
* -filterTag is a string representing a certain metric as defined by param method and param ID
* -relevance is used for sorting (relevance is assigned differently for the type of RMetric, but for example,
* counters with the highest value with cause that team to be sorted at the top)
*
* @param team the team to process
* @param method an int from PROCESS_METHOD that defines how an team should be processed
* @param ID the id of the metric to process, this value will be ignored if method is PIT, PREDICTIONS, or MATCHES
*/
public void process(RTeam team, int method, int ID) {
team.setCustomRelevance(0);
/*
* Helper variables
*/
StringBuilder rawData = new StringBuilder();
int occurrences = 0;
double relevance = 0;
double average = 0.0, min = 0.0, max = 0.0;
/*
* If the request method is PIT or PREDICTIONS, use the following code to
* sort the team. Note, each team will only have one value that needs to be
* analyzed, so statistics are essentially invalid
*/
if (method == PROCESS_METHOD.PIT || method == PROCESS_METHOD.PREDICTIONS) {
for (RMetric metric : team.getTabs().get(method).getMetrics()) {
if (metric.getID() != ID)
continue;
if (metric instanceof RBoolean) {
rawData.append("Boolean: ").append(metric.getTitle()).append(" is ").append(friendlyBoolean((RBoolean) metric));
if (metric.isModified() && ((RBoolean) metric).isValue())
relevance++;
} else if (metric instanceof RCounter) {
rawData.append("Counter: ").append(metric.getTitle()).append(" is ").append(friendlyCounter((RCounter) metric));
relevance += ((RCounter) metric).getValue();
} else if (metric instanceof RSlider) {
rawData.append("Slider: ").append(metric.getTitle()).append(" is ").append(friendlySlider((RSlider) metric));
relevance += ((RSlider) metric).getValue();
} else if (metric instanceof RStopwatch) {
rawData.append("Stopwatch: ").append(metric.getTitle()).append(" is ").append(friendlyStopwatch((RStopwatch) metric));
relevance += ((RStopwatch) metric).getTime();
} else if (metric instanceof RTextfield) {
rawData.append("Textfield: ").append(metric.getTitle()).append(" has ").append(((RTextfield) metric).getText().length()).append(" characters");
relevance += ((RTextfield) metric).getText().length();
} else if (metric instanceof RGallery) {
rawData.append("Gallery: ").append(metric.getTitle()).append(" contains ").append(((RGallery) metric).getImages().size()).append(" images");
relevance += ((RGallery) metric).getImages().size();
} else if (metric instanceof RCheckbox) {
rawData.append("Checkbox: ").append(metric.getTitle()).append(" values: ").append(friendlyCheckbox((RCheckbox) metric));
relevance += getCheckedAmount((RCheckbox) metric);
} else if (metric instanceof RChooser) {
rawData.append("Chooser: ").append(metric.getTitle()).append(" has value ").append(((RChooser) metric).getValues()[((RChooser) metric).getSelectedIndex()]);
}
rawData.append(" in ").append(friendlyMode(method));
team.setFilterTag("\n" + rawData.toString());
team.setCustomRelevance(relevance);
break;
}
} else /*
* If the request method is MATCHES, then the following code has to be used
* to look at each particular RTab object within the team object
*/
if (method == PROCESS_METHOD.MATCHES) {
if (team.getTabs() == null || team.getTabs().size() == 0) {
team.setFilterTag("\nThis team does not contain any matches that can be sorted.");
return;
}
/*
* This nested for loop will go through every team tab and every metric within each team tab.
* This loop should only process the RAW DATA for each metric, the overview stuff will be added at the end.
* Use StringBuilder rawData to store raw data
*/
rawData.append("\nRaw data: ");
for (int i = 2; i < team.getTabs().size(); i++) {
for (RMetric metric : team.getTabs().get(i).getMetrics()) {
// Make sure that the metric that is being processed is equal to the inputted value
if (metric.getID() != ID)
continue;
// RBoolean type
if (metric instanceof RBoolean) {
RBoolean rBoolean = (RBoolean) metric;
// if the value is modified and true, add some relevance info
if (rBoolean.isModified() && rBoolean.isValue()) {
occurrences++;
relevance++;
}
// add raw data
rawData.append(friendlyBoolean((RBoolean) metric)).append(ending(i, team.getTabs()));
} else // RCounter type
if (metric instanceof RCounter) {
double value = ((RCounter) metric).getValue();
if (i == 2)
min = value;
// Overview stats will only consider modified items
if (metric.isModified()) {
/*
* Progressively calculate the min, max, and average values
*/
if (value < min)
min = value;
if (value > max)
max = value;
average += value / (double) numModified(team.getTabs(), ID);
relevance = average;
}
// add raw data
rawData.append(friendlyCounter((RCounter) metric)).append(ending(i, team.getTabs()));
} else if (metric instanceof RCalculation) {
try {
double value = Double.parseDouble(((RCalculation) metric).getValue(team.getTabs().get(i).getMetrics()));
if (i == 2)
min = value;
// Overview stats will only consider modified items
if (metric.isModified()) {
/*
* Progressively calculate the min, max, and average values
*/
if (value < min)
min = value;
if (value > max)
max = value;
average += value / (double) numModified(team.getTabs(), ID);
relevance = average;
}
// add raw data
rawData.append(friendlyCounter((RCounter) metric)).append(ending(i, team.getTabs()));
} catch (Exception e) {
// eat it
}
} else // RSlider type
if (metric instanceof RSlider) {
int value = ((RSlider) metric).getValue();
if (i == 2)
min = value;
// Overview stats will only consider modified sliders
if (metric.isModified()) {
if (value < min)
min = value;
if (value > max)
max = value;
average += (double) value / (double) numModified(team.getTabs(), ID);
relevance = average;
}
// add raw data
rawData.append(friendlySlider((RSlider) metric)).append(ending(i, team.getTabs()));
} else // RStopwatch type
if (metric instanceof RStopwatch) {
double value = ((RStopwatch) metric).getTime();
if (i == 2)
min = value;
// Overview stats will only consider modified stopwatches
if (metric.isModified()) {
/*
* Progressively calculate the min, max, and average values
*/
if (value < min)
min = value;
if (value > max)
max = value;
average += value / (double) numModified(team.getTabs(), ID);
relevance = average;
}
// add raw data
rawData.append(friendlyStopwatch((RStopwatch) metric)).append(ending(i, team.getTabs()));
} else // RTextfield type
if (metric instanceof RTextfield) {
int value = ((RTextfield) metric).getText().length();
// Overview stats will only consider modified textfields
if (metric.isModified()) {
/*
* Progressively calculate the min, max, and average values
*/
if (value < min)
min = value;
if (value > max)
max = value;
average += (double) value / (double) numModified(team.getTabs(), ID);
relevance = average;
}
// add raw data
rawData.append(value).append(" chars").append(ending(i, team.getTabs()));
} else // RGallery type
if (metric instanceof RGallery) {
int value = ((RGallery) metric).getImages().size();
// Overview stats will only consider modified textfields
if (metric.isModified()) {
/*
* Progressively calculate the min, max, and average values
*/
if (value < min)
min = value;
if (value > max)
max = value;
average += (double) value / (double) numModified(team.getTabs(), ID);
relevance = average;
}
// add raw data
rawData.append(value).append(" images ").append(ending(i, team.getTabs()));
} else // RCheckbox type
if (metric instanceof RCheckbox) {
// add raw data
rawData.append(friendlyCheckbox((RCheckbox) metric)).append(ending(i, team.getTabs()));
relevance += getCheckedAmount((RCheckbox) metric);
} else // RChooser type
if (metric instanceof RChooser) {
if (metric.isModified())
relevance++;
// add raw data
rawData.append(((RChooser) metric).getValues()[((RChooser) metric).getSelectedIndex()]).append(ending(i, team.getTabs()));
} else // Field data
if (metric instanceof RFieldData) {
// Find the sub metric
if (((RFieldData) metric).getData() != null && ((RFieldData) metric).getData().get(inMatchTitle) != null)
rawData.append(((RFieldData) metric).getData().get(inMatchTitle).get(team.getTabs().get(i).isRedAlliance() ? 0 : 1).toString()).append(ending(i, team.getTabs()));
// Overview stats will only consider modified textfields
if (metric.isModified()) {
/*
* Progressively calculate the min, max, and average values
*/
try {
double value = Double.parseDouble(((RFieldData) metric).getData().get(inMatchTitle).get(team.getTabs().get(i).isRedAlliance() ? 0 : 1).toString());
if (i == 2)
min = value;
if (value < min)
min = value;
if (value > max)
max = value;
average += value / (double) numModified(team.getTabs(), ID);
relevance = average;
} catch (Exception e) {
// eat it
}
}
}
/*
* Now, add the overview statistics to the team if the metric has overview statistics
* available
*/
max = Utils.round(max, 2);
min = Utils.round(min, 2);
average = Utils.round(average, 2);
StringBuilder overview = new StringBuilder();
if (metric instanceof RBoolean)
overview.append("Boolean: ").append(metric.getTitle()).append(" is true in ").append(occurrences).append(" / ").append(team.getTabs().size() - 2).append(" matches");
else if (metric instanceof RCounter)
overview.append("Counter: ").append(metric.getTitle()).append(" Average: ").append(Utils.round(average, 2)).append(" Min: ").append(min).append(" Max: ").append(max);
else if (metric instanceof RCalculation)
overview.append("Calculation: ").append(metric.getTitle()).append(" Average: ").append(Utils.round(average, 2)).append(" Min: ").append(min).append(" Max: ").append(max);
else if (metric instanceof RSlider)
overview.append("Slider: ").append(metric.getTitle()).append(" Average: ").append(Utils.round(average, 2)).append(" Min: ").append(min).append(" Max: ").append(max);
else if (metric instanceof RStopwatch)
overview.append("Stopwatch: ").append(metric.getTitle()).append(" Average: ").append(Utils.round(average, 2)).append(" Min: ").append(min).append(" Max: ").append(max);
else if (metric instanceof RTextfield)
overview.append("Textfield: ").append(metric.getTitle()).append(" Average chars: ").append(Utils.round(average, 2)).append(" Min: ").append(min).append(" Max: ").append(max);
else if (metric instanceof RGallery)
overview.append("Gallery: ").append(metric.getTitle()).append(" Average images: ").append(Utils.round(average, 2)).append(" Min: ").append(min).append(" Max: ").append(max);
else if (metric instanceof RChooser)
overview.append("Chooser: ").append(metric.getTitle());
else if (metric instanceof RCheckbox)
overview.append("Checkbox: ").append(metric.getTitle());
else if (metric instanceof RFieldData) {
overview.append("Field data: ").append(inMatchTitle);
try {
// this will fail if the value isn't a number
if (average != 0 || min != 0 || max != 0)
overview.append("\nAverage: ").append(Utils.round(average, 2)).append(" Min: ").append(min).append(" Max: ").append(max);
} catch (Exception e) {
// eat it
}
}
/*
* Now append the raw data as processed above
*/
team.setFilterTag("\n" + overview.append(rawData).toString());
team.setCustomRelevance(relevance);
// exit the loop, the metric has been fully processed
break;
}
}
} else /*
* The user requested MATCH_WINS
*/
if (method == PROCESS_METHOD.OTHER && ID == PROCESS_METHOD.OTHER_METHOD.MATCH_WINS) {
for (int i = 2; i < team.getTabs().size(); i++) {
if (team.getTabs().get(i).isWon()) {
occurrences++;
relevance++;
rawData.append("W");
} else
rawData.append("L");
rawData.append(ending(i, team.getTabs()));
}
/*
* Setup overview rawData and add raw data
*/
team.setCustomRelevance(relevance);
team.setFilterTag("\n" + String.valueOf(occurrences) + " match wins\n" + rawData.toString());
} else /*
* The user requested IN_MATCH
*/
if (method == PROCESS_METHOD.OTHER && ID == PROCESS_METHOD.OTHER_METHOD.IN_MATCH) {
team.setFilter(TeamsView.SORT_TYPE.NUMERICAL);
for (int i = 2; i < team.getTabs().size(); i++) {
if (team.getTabs().get(i).getTitle().equalsIgnoreCase(inMatchTitle)) {
team.setFilterTag("\n" + rawData.append("In ").append(inMatchTitle).toString());
team.setCustomRelevance(1);
}
}
} else /*
* The user request a reset
*/
if (method == PROCESS_METHOD.OTHER && ID == PROCESS_METHOD.OTHER_METHOD.RESET) {
team.setFilterTag("");
team.setCustomRelevance(0);
}
}
use of com.cpjd.roblu.models.metrics.RCounter in project Roblu by wdavies973.
the class CheckoutEncoder method encodeCheckout.
/**
* This method will encode a checkout with as little overhead as possible (as opposed to JSON
* serialization). This method is used for QR serialization to minimize the data transfer, since
* compression isn't supported well by QR. This could be expanded for the whole project, but isn't really versatile enough yet.
* @return The encoded string
*/
public String encodeCheckout(String nameTag, RCheckout checkout) {
StringBuilder builder = new StringBuilder();
// Checkout components
builder.append(checkout.getID()).append("\n");
builder.append(nameTag).append("\n");
// Team meta
builder.append(checkout.getTeam().getID()).append("\n");
builder.append(checkout.getTeam().getLastEdit()).append("\n");
// Tabs!
for (RTab tab : checkout.getTeam().getTabs()) {
builder.append("TAB").append(tab.getTitle()).append("\n");
builder.append(tab.isWon()).append("\n");
// Edits
builder.append("EDITS");
if (tab.getEdits() != null) {
for (Object o : tab.getEdits().keySet()) {
builder.append(",");
if (o.toString().equals(""))
builder.append("Unknown");
else
builder.append(o.toString());
// EDITS,will:120391823,john,12039123
builder.append(",").append(tab.getEdits().get(o.toString()));
}
}
builder.append("\n");
// -RDivider and RCalculation don't need to be encoded since they don't contain any user information
for (RMetric metric : tab.getMetrics()) {
builder.append(getMetricType(metric)).append(DELIMITER).append(metric.getID()).append(DELIMITER).append(metric.getTitle()).append(DELIMITER).append(metric.isModified()).append(DELIMITER);
if (metric instanceof RBoolean)
builder.append(((RBoolean) metric).isValue());
else if (metric instanceof RCheckbox) {
if (((RCheckbox) metric).getValues() != null) {
for (Object o : ((RCheckbox) metric).getValues().keySet()) {
// :(title,value):(title,value):
builder.append("(").append(o.toString()).append(",").append(((RCheckbox) metric).getValues().get(o.toString())).append(")").append(DELIMITER);
}
}
} else if (metric instanceof RChooser) {
builder.append(((RChooser) metric).getSelectedIndex()).append(DELIMITER);
if (((RChooser) metric).getValues() != null) {
for (String s : ((RChooser) metric).getValues()) {
// :1:option:option:option:
builder.append(s).append(DELIMITER);
}
}
} else if (metric instanceof RCounter)
builder.append(((RCounter) metric).isVerboseInput()).append(DELIMITER).append(((RCounter) metric).getValue()).append(DELIMITER).append(((RCounter) metric).getIncrement());
else if (metric instanceof RSlider)
builder.append(((RSlider) metric).getValue()).append(DELIMITER).append(((RSlider) metric).getMin()).append(DELIMITER).append(((RSlider) metric).getMax());
else if (metric instanceof RStopwatch) {
builder.append(((RStopwatch) metric).getTime()).append(DELIMITER);
if (((RStopwatch) metric).getTimes() != null) {
for (Double t : ((RStopwatch) metric).getTimes()) {
// :curr:1:2:3:
builder.append(t).append(DELIMITER);
}
}
} else if (metric instanceof RTextfield)
builder.append(((RTextfield) metric).getText());
builder.append("\n");
}
}
return builder.toString();
}
Aggregations