Search in sources :

Example 11 with RMetric

use of com.cpjd.roblu.models.metrics.RMetric in project Roblu by wdavies973.

the class Lookup method generateSheet.

@Override
public void generateSheet(XSSFSheet sheet, REvent event, RForm form, RTeam[] teams, ArrayList<RCheckout> checkouts) {
    Row one = createRow(sheet);
    one.createCell(0).setCellValue("Match Number");
    Row two = createRow(sheet);
    two.createCell(0).setCellValue(1);
    int maxListLength = checkouts.size();
    // Team's row
    two.createCell(4).setCellFormula("VLOOKUP($A$2,MatchList!$A$2:$G$" + maxListLength + ",2,FALSE)");
    two.createCell(5).setCellFormula("VLOOKUP($A$2,MatchList!$A$2:$G$" + maxListLength + ",3,FALSE)");
    two.createCell(6).setCellFormula("VLOOKUP($A$2,MatchList!$A$2:$G$" + maxListLength + ",4,FALSE)");
    two.createCell(7).setCellFormula("VLOOKUP($A$2,MatchList!$A$2:$G$" + maxListLength + ",5,FALSE)");
    two.createCell(8).setCellFormula("VLOOKUP($A$2,MatchList!$A$2:$G$" + maxListLength + ",6,FALSE)");
    two.createCell(9).setCellFormula("VLOOKUP($A$2,MatchList!$A$2:$G$" + maxListLength + ",7,FALSE)");
    int maxWidth = form.getMatch().size() + 2;
    String columnLetter = CellReference.convertNumToColString(maxWidth);
    // Load metrics
    int index = 0;
    for (RMetric metric : form.getMatch()) {
        Row row = createRow(sheet);
        createCell(row, 3, metric.getTitle());
        row.createCell(4).setCellFormula("VLOOKUP(E$2,'MatchData'!$A$2:$" + columnLetter + "$" + maxListLength + "," + (index + 3) + ",FALSE)");
        row.createCell(5).setCellFormula("VLOOKUP(F$2,'MatchData'!$A$2:$" + columnLetter + "$" + maxListLength + "," + (index + 3) + ",FALSE)");
        row.createCell(6).setCellFormula("VLOOKUP(G$2,'MatchData'!$A$2:$" + columnLetter + "$" + maxListLength + "," + (index + 3) + ",FALSE)");
        row.createCell(7).setCellFormula("VLOOKUP(H$2,'MatchData'!$A$2:$" + columnLetter + "$" + maxListLength + "," + (index + 3) + ",FALSE)");
        row.createCell(8).setCellFormula("VLOOKUP(I$2,'MatchData'!$A$2:$" + columnLetter + "$" + maxListLength + "," + (index + 3) + ",FALSE)");
        row.createCell(9).setCellFormula("VLOOKUP(J$2,'MatchData'!$A$2:$" + columnLetter + "$" + maxListLength + "," + (index + 3) + ",FALSE)");
        index++;
    }
}
Also used : Row(org.apache.poi.ss.usermodel.Row) RMetric(com.cpjd.roblu.models.metrics.RMetric)

Example 12 with RMetric

use of com.cpjd.roblu.models.metrics.RMetric in project Roblu by wdavies973.

the class PitData method generateSheet.

@Override
public void generateSheet(XSSFSheet sheet, REvent event, RForm form, RTeam[] teams, ArrayList<RCheckout> checkouts) {
    /*
         * Create some styles
         */
    XSSFCellStyle[] styles = { setCellStyle(BorderStyle.THIN, IndexedColors.CORAL, IndexedColors.BLACK, false), setCellStyle(BorderStyle.THIN, IndexedColors.LIGHT_GREEN, IndexedColors.BLACK, false), setCellStyle(BorderStyle.THIN, IndexedColors.GREY_50_PERCENT, IndexedColors.BLACK, false), setCellStyle(BorderStyle.THIN, IndexedColors.CORNFLOWER_BLUE, IndexedColors.BLACK, false) };
    /*
         * Create row 1 (predictions metric names)
         */
    Row metricNames = createRow(sheet, 60);
    setCellStyle(BorderStyle.THIN, IndexedColors.BLACK, IndexedColors.WHITE, true);
    createCell(metricNames, 0, "Team#");
    int styleCounter = 0;
    for (int i = 0; i < form.getMatch().size(); i++) {
        // decide the which style to use
        if (styleCounter == 4)
            styleCounter = 0;
        setStyle(styles[styleCounter]);
        styleCounter++;
        createCell(metricNames, i + 1, form.getMatch().get(i).getTitle() + getPossibleValuesForMetric(form.getMatch().get(i)));
    }
    /*
         * Add divider
         */
    setCellStyle(BorderStyle.THIN, IndexedColors.BLACK, IndexedColors.WHITE, true);
    createCell(metricNames, form.getMatch().size() + 1, "<--PREDICTIONS\nPIT-->");
    /*
         * Add pit metric names
         */
    styleCounter = 0;
    for (int i = 0; i < form.getPit().size(); i++) {
        // decide the which style to use
        if (styleCounter == 4)
            styleCounter = 0;
        setStyle(styles[styleCounter]);
        styleCounter++;
        createCell(metricNames, i + form.getMatch().size() + 2, form.getPit().get(i).getTitle() + getPossibleValuesForMetric(form.getPit().get(i)));
    }
    /*
         * Start adding scouting data
         */
    for (RTeam team : teams) {
        Row row = createRow(sheet);
        // Team number column
        setCellStyle(BorderStyle.THIN, IndexedColors.BLACK, IndexedColors.WHITE, true);
        getStyle().setAlignment(HorizontalAlignment.RIGHT);
        createCell(row, 0, String.valueOf(team.getNumber()));
        // Loop through the form metrics array
        for (int i = 0; i < form.getMatch().size(); i++) {
            // Set style
            setStyle(styles[i % styles.length]);
            // If the team contains the match and the metric is modified, add it to the excel sheet
            // We found the match, let's quickly find the metric
            RMetric teamMetric = null;
            for (RMetric metric : team.getTabs().get(1).getMetrics()) {
                if (metric.getID() == form.getMatch().get(i).getID()) {
                    teamMetric = metric;
                    break;
                }
            }
            if (shouldWriteMetric(team, teamMetric)) {
                if (teamMetric instanceof RStopwatch)
                    createCell(row, 1 + i, ((RStopwatch) teamMetric).getLapsString());
                else
                    createCell(row, 1 + i, teamMetric.toString());
            } else
                createCell(row, 1 + i, "");
        }
        // Add divider column
        setCellStyle(BorderStyle.THIN, IndexedColors.BLACK, IndexedColors.WHITE, true);
        getStyle().setAlignment(HorizontalAlignment.RIGHT);
        createCell(row, 1 + form.getMatch().size(), "");
        // Loop through the pit metrics array
        for (int i = 0; i < form.getPit().size(); i++) {
            // Set style
            setStyle(styles[i % styles.length]);
            RMetric teamMetric = null;
            for (RMetric metric : team.getTabs().get(0).getMetrics()) {
                if (metric.getID() == form.getPit().get(i).getID()) {
                    teamMetric = metric;
                    break;
                }
            }
            // always add the team name and number fields, even if they aren't modified
            if (teamMetric.getID() == 0) {
                createCell(row, 2 + form.getMatch().size() + i, team.getName());
                continue;
            }
            if (teamMetric.getID() == 1) {
                createCell(row, 2 + form.getMatch().size() + i, String.valueOf(team.getNumber()));
                continue;
            }
            if (shouldWriteMetric(team, teamMetric)) {
                if (teamMetric instanceof RStopwatch)
                    createCell(row, 2 + i + form.getMatch().size(), ((RStopwatch) teamMetric).getLapsString());
                else
                    createCell(row, 2 + i + form.getMatch().size(), teamMetric.toString());
            } else
                createCell(row, 2 + i + form.getMatch().size(), "");
        }
    }
}
Also used : RStopwatch(com.cpjd.roblu.models.metrics.RStopwatch) XSSFCellStyle(org.apache.poi.xssf.usermodel.XSSFCellStyle) RTeam(com.cpjd.roblu.models.RTeam) Row(org.apache.poi.ss.usermodel.Row) RMetric(com.cpjd.roblu.models.metrics.RMetric)

Example 13 with RMetric

use of com.cpjd.roblu.models.metrics.RMetric in project Roblu by wdavies973.

the class PredefinedFormSelector method processForm.

/**
 * Converst the form into an RForm reference
 * @param name the file name
 * @return an RForm instance
 */
private RForm processForm(int index, String name) {
    RForm form = new RForm(null, null);
    ArrayList<RMetric> metrics = new ArrayList<>();
    try {
        AssetManager am = getAssets();
        InputStream is = am.open("predefinedForms" + File.separator + name);
        BufferedReader br = new BufferedReader(new InputStreamReader(is));
        String line;
        int ID = 0;
        while ((line = br.readLine()) != null) {
            if (line.startsWith("Title")) {
                items[index] = line.split(":")[1];
                continue;
            } else if (line.startsWith("Description")) {
                sub_items[index] = line.split(":")[1];
                continue;
            }
            switch(line) {
                case "PIT":
                    continue;
                case "MATCH":
                    form.setPit(new ArrayList<>(metrics));
                    metrics.clear();
                    continue;
                case "DEFAULTS":
                    metrics.add(new RTextfield(0, "Team name", false, true, ""));
                    metrics.add(new RTextfield(1, "Team number", true, true, ""));
                    ID = 2;
                    break;
            }
            /*
                 * Process file
                 */
            String regex = "(?<!\\\\)" + Pattern.quote(",");
            String[] tokens = line.split(regex);
            for (int i = 0; i < tokens.length; i++) {
                tokens[i] = tokens[i].replaceAll("\\\\,", ",");
            }
            switch(tokens[0]) {
                case "counter":
                    metrics.add(new RCounter(ID, tokens[1], Integer.parseInt(tokens[2]), Integer.parseInt(tokens[3])));
                    ID++;
                    break;
                case "divider":
                    metrics.add(new RDivider(ID, tokens[1]));
                    ID++;
                    break;
                case "chooser":
                    metrics.add(new RChooser(ID, tokens[1], tokens[2].split(":"), Integer.parseInt(tokens[3])));
                    ID++;
                    break;
                case "slider":
                    metrics.add(new RSlider(ID, tokens[1], Integer.parseInt(tokens[2]), Integer.parseInt(tokens[3]), Integer.parseInt(tokens[4])));
                    ID++;
                    break;
                case "checkbox":
                    LinkedHashMap<String, Boolean> temp = new LinkedHashMap<>();
                    for (String s : tokens[2].split(":")) temp.put(s, false);
                    metrics.add(new RCheckbox(ID, tokens[1], temp));
                    ID++;
                    break;
                case "textfield":
                    metrics.add(new RTextfield(ID, tokens[1], ""));
                    ID++;
                    break;
                case "stopwatch":
                    metrics.add(new RStopwatch(ID, tokens[1], Double.parseDouble(tokens[2])));
                    ID++;
                    break;
                case "boolean":
                    metrics.add(new RBoolean(ID, tokens[1], Boolean.parseBoolean(tokens[2])));
                    ID++;
                    break;
                case "gallery":
                    metrics.add(new RGallery(ID, tokens[1]));
                    ID++;
                    break;
            }
        }
        form.setMatch(metrics);
        Log.d("RBS", "Form created successfully with " + form.getPit().size() + " pit metrics and " + form.getMatch().size() + " match metrics");
        return form;
    } catch (IOException e) {
        Log.d("RBS", "Failed to process form: " + e.getMessage());
        return null;
    }
}
Also used : RDivider(com.cpjd.roblu.models.metrics.RDivider) RBoolean(com.cpjd.roblu.models.metrics.RBoolean) RGallery(com.cpjd.roblu.models.metrics.RGallery) RTextfield(com.cpjd.roblu.models.metrics.RTextfield) ArrayList(java.util.ArrayList) RMetric(com.cpjd.roblu.models.metrics.RMetric) LinkedHashMap(java.util.LinkedHashMap) RForm(com.cpjd.roblu.models.RForm) RCheckbox(com.cpjd.roblu.models.metrics.RCheckbox) RSlider(com.cpjd.roblu.models.metrics.RSlider) RBoolean(com.cpjd.roblu.models.metrics.RBoolean) AssetManager(android.content.res.AssetManager) RChooser(com.cpjd.roblu.models.metrics.RChooser) InputStreamReader(java.io.InputStreamReader) InputStream(java.io.InputStream) IOException(java.io.IOException) RStopwatch(com.cpjd.roblu.models.metrics.RStopwatch) BufferedReader(java.io.BufferedReader) RCounter(com.cpjd.roblu.models.metrics.RCounter)

Example 14 with RMetric

use of com.cpjd.roblu.models.metrics.RMetric in project Roblu by wdavies973.

the class MetricSortFragment method metricSelected.

/**
 * This method is called when the user taps on a metric
 *
 * @param v the View that the user tapped on (used for inferring the RMetric object)
 */
@Override
public void metricSelected(View v) {
    final int position = rv.getChildLayoutPosition(v);
    if (metrics.get(position) instanceof RFieldData) {
        final Dialog d = new Dialog(getActivity());
        d.setTitle("Select sub metric");
        d.setContentView(R.layout.submetric_import);
        final Spinner spinner = d.findViewById(R.id.type);
        // Attempt to load a team to get a list of values
        int id = 0;
        IO io = new IO(getActivity());
        RTeam team;
        do {
            team = io.loadTeam(eventID, id);
            id++;
        } while (team == null && id < 100);
        RFieldData fieldData = null;
        try {
            mainLoop: for (RTab tab : team.getTabs()) {
                if (tab.getTitle().equalsIgnoreCase("PIT") || tab.getTitle().equalsIgnoreCase("PREDICTIONS"))
                    continue;
                for (RMetric metric2 : tab.getMetrics()) {
                    if (metric2 instanceof RFieldData && metrics.get(position).getID() == metric2.getID() && ((RFieldData) metric2).getData() != null && ((RFieldData) metric2).getData().size() >= 1) {
                        fieldData = (RFieldData) metric2;
                        break mainLoop;
                    }
                }
            }
        } catch (Exception e) {
        // }
        }
        if (fieldData == null)
            return;
        final String[] values = Utils.depackFieldData(fieldData);
        if (values == null) {
            Toast.makeText(getActivity(), "Error occurred while loading metrics.", Toast.LENGTH_LONG).show();
            return;
        }
        ArrayAdapter<String> adp = new ArrayAdapter<>(getActivity(), android.R.layout.simple_list_item_1, values);
        adp.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
        spinner.setAdapter(adp);
        Button button = d.findViewById(R.id.button7);
        button.setText(R.string.select);
        button.setOnClickListener(new View.OnClickListener() {

            @Override
            public void onClick(View v) {
                Intent result = new Intent();
                result.putExtra("sortToken", TeamMetricProcessor.PROCESS_METHOD.MATCHES + ":" + metrics.get(position).getID() + ":" + values[spinner.getSelectedItemPosition()]);
                getActivity().setResult(Constants.CUSTOM_SORT_CONFIRMED, result);
                getActivity().finish();
                d.dismiss();
            }
        });
        if (d.getWindow() != null)
            d.getWindow().getAttributes().windowAnimations = new IO(getActivity()).loadSettings().getRui().getAnimation();
        d.show();
        return;
    } else // User selected the "In Match" option, now we have to display a list of all the matches within the event
    if (processMethod == TeamMetricProcessor.PROCESS_METHOD.OTHER && metrics.get(position).getID() == TeamMetricProcessor.PROCESS_METHOD.OTHER_METHOD.IN_MATCH) {
        final Dialog d = new Dialog(getActivity());
        d.setTitle("Select match");
        d.setContentView(R.layout.event_import_dialog);
        final Spinner spinner = d.findViewById(R.id.type);
        TextView t = d.findViewById(R.id.spinner_tip);
        t.setText(R.string.match);
        final String[] values = Utils.getMatchTitlesWithinEvent(getContext(), eventID);
        if (values == null) {
            Toast.makeText(getActivity(), "Error occurred while loading matches. Do any matches exist?", Toast.LENGTH_LONG).show();
            return;
        }
        ArrayAdapter<String> adp = new ArrayAdapter<>(getActivity(), android.R.layout.simple_list_item_1, values);
        adp.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
        spinner.setAdapter(adp);
        Button button = d.findViewById(R.id.button7);
        button.setText(R.string.select);
        button.setOnClickListener(new View.OnClickListener() {

            @Override
            public void onClick(View v) {
                Intent result = new Intent();
                result.putExtra("sortToken", TeamMetricProcessor.PROCESS_METHOD.OTHER + ":" + TeamMetricProcessor.PROCESS_METHOD.OTHER_METHOD.IN_MATCH + ":" + values[spinner.getSelectedItemPosition()]);
                getActivity().setResult(Constants.CUSTOM_SORT_CONFIRMED, result);
                getActivity().finish();
                d.dismiss();
            }
        });
        if (d.getWindow() != null)
            d.getWindow().getAttributes().windowAnimations = new IO(getActivity()).loadSettings().getRui().getAnimation();
        d.show();
        return;
    }
    String sortToken = processMethod + ":" + metrics.get(position).getID();
    Intent result = new Intent();
    result.putExtra("sortToken", sortToken);
    if (getActivity() != null) {
        getActivity().setResult(Constants.CUSTOM_SORT_CONFIRMED, result);
        getActivity().finish();
    }
}
Also used : RTeam(com.cpjd.roblu.models.RTeam) RTab(com.cpjd.roblu.models.RTab) Spinner(android.widget.Spinner) IO(com.cpjd.roblu.io.IO) RFieldData(com.cpjd.roblu.models.metrics.RFieldData) Intent(android.content.Intent) RMetric(com.cpjd.roblu.models.metrics.RMetric) View(android.view.View) RecyclerView(android.support.v7.widget.RecyclerView) TextView(android.widget.TextView) Button(android.widget.Button) Dialog(android.app.Dialog) TextView(android.widget.TextView) ArrayAdapter(android.widget.ArrayAdapter)

Example 15 with RMetric

use of com.cpjd.roblu.models.metrics.RMetric 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);
    }
}
Also used : RBoolean(com.cpjd.roblu.models.metrics.RBoolean) RChooser(com.cpjd.roblu.models.metrics.RChooser) RGallery(com.cpjd.roblu.models.metrics.RGallery) RTextfield(com.cpjd.roblu.models.metrics.RTextfield) RFieldData(com.cpjd.roblu.models.metrics.RFieldData) RMetric(com.cpjd.roblu.models.metrics.RMetric) RCalculation(com.cpjd.roblu.models.metrics.RCalculation) RStopwatch(com.cpjd.roblu.models.metrics.RStopwatch) RCheckbox(com.cpjd.roblu.models.metrics.RCheckbox) RSlider(com.cpjd.roblu.models.metrics.RSlider) RCounter(com.cpjd.roblu.models.metrics.RCounter)

Aggregations

RMetric (com.cpjd.roblu.models.metrics.RMetric)26 RTab (com.cpjd.roblu.models.RTab)12 RTeam (com.cpjd.roblu.models.RTeam)10 RStopwatch (com.cpjd.roblu.models.metrics.RStopwatch)10 RTextfield (com.cpjd.roblu.models.metrics.RTextfield)10 ArrayList (java.util.ArrayList)10 RCounter (com.cpjd.roblu.models.metrics.RCounter)9 RGallery (com.cpjd.roblu.models.metrics.RGallery)9 IO (com.cpjd.roblu.io.IO)8 RCheckbox (com.cpjd.roblu.models.metrics.RCheckbox)8 RChooser (com.cpjd.roblu.models.metrics.RChooser)8 RSlider (com.cpjd.roblu.models.metrics.RSlider)8 RForm (com.cpjd.roblu.models.RForm)7 RBoolean (com.cpjd.roblu.models.metrics.RBoolean)7 RFieldData (com.cpjd.roblu.models.metrics.RFieldData)7 RCalculation (com.cpjd.roblu.models.metrics.RCalculation)6 RCheckout (com.cpjd.roblu.models.RCheckout)5 LinkedHashMap (java.util.LinkedHashMap)5 Bundle (android.os.Bundle)4 View (android.view.View)4