Search in sources :

Example 11 with RCheckout

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

the class MyMatches method onCreate.

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    // setup ui stuff
    setContentView(R.layout.mymatches);
    Toolbar toolbar = findViewById(R.id.toolbar);
    setSupportActionBar(toolbar);
    if (getSupportActionBar() != null)
        getSupportActionBar().setDisplayHomeAsUpEnabled(true);
    // access the eventID, if no eventID is passed in to this class, the app will crash
    eventID = getIntent().getIntExtra("eventID", 0);
    // load the number from settings
    int number = new IO(getApplicationContext()).loadSettings().getTeamNumber();
    if (number == 0) {
        // the user hasn't changed their number yet, and since no team is #0, we have to stop the activity
        Toast.makeText(getApplicationContext(), "No team number found. Set it in settings.", Toast.LENGTH_LONG).show();
        setResult(Constants.CANCELLED);
        finish();
        return;
    }
    /*
         * we have a reference to the team's number but not the team'd ID (we need the team's ID to load).
         *
         * so the problem here is that there is a potential for the user to have created multiple teams with
         * their own team number (not likely, but possible). Currently, this code will just load the first
         * team that matches our number that it comes across, but you could modify this code to do a "smart select"
         * that looks of data contained within each team (num of matches, size, last edit, etc.). for now, the first
         * team we come across should be fine and work 99% of the time
         */
    RTeam[] local = new IO(getApplicationContext()).loadTeams(eventID);
    RTeam myTeam = null;
    for (RTeam team : local) {
        // search through locally stored teams until we find one that matches our number
        if (team.getNumber() == number) {
            myTeam = team;
            break;
        }
    }
    if (myTeam == null) {
        // team will be null if it was not contained in the event, if no team, force close this activity
        Toast.makeText(getApplicationContext(), "Your team is missing from event, please add it", Toast.LENGTH_LONG).show();
        setResult(Constants.CANCELLED);
        finish();
        return;
    }
    if (myTeam.getTabs() == null || myTeam.getTabs().size() <= 2) {
        // we found a team, but it doesn't contain any matches, so we can't load "my matches", force close
        Toast.makeText(getApplicationContext(), "Team does not contain any match data, please add some.", Toast.LENGTH_LONG).show();
        setResult(Constants.CANCELLED);
        finish();
        return;
    }
    // for more on verification, visit the RTeam class, basically, to be safe, we want to sync the form and the team before we play around with any of them
    myTeam.verify(new IO(getApplicationContext()).loadForm(eventID));
    // next, we need to split apart the RTab array within our team, we want one RCheckout model per match
    // we'll use this array for storing info, one RChecklist per match
    ArrayList<RCheckout> toSave = new ArrayList<>();
    for (int i = 0; i < myTeam.getTabs().size(); i++) {
        // we don't care about pit or predictions tabs, so skip them since they are always at index 0 & 1
        if (i < 2)
            continue;
        // create a new team with only one tab, wrap it in a checkout, and add it to our array
        RTeam team = new RTeam(myTeam.getName(), myTeam.getNumber(), myTeam.getID());
        team.addTab(myTeam.getTabs().get(i));
        toSave.add(new RCheckout(team));
    }
    // next, we need to look through our local teams list again and search for other teams in the same match as us, then we can add them to the either the teammates or opponents array
    for (RCheckout checkout : toSave) {
        ArrayList<RTeam> teammates = new ArrayList<>();
        ArrayList<RTeam> opponents = new ArrayList<>();
        for (RTeam team : local) {
            for (RTab tab : team.getTabs()) {
                if (tab.getTitle().equalsIgnoreCase(checkout.getTeam().getTabs().get(0).getTitle())) {
                    if (checkout.getTeam().getTabs().get(0).isRedAlliance() == tab.isRedAlliance())
                        teammates.add(team);
                    else
                        opponents.add(team);
                }
            }
        }
        checkout.getTeam().getTabs().get(0).setTeammates(teammates);
        checkout.getTeam().getTabs().get(0).setOpponents(opponents);
    }
    // we've got everything we need, let's load it into the UI
    rv = findViewById(R.id.recycler);
    // manages the layout loading
    LinearLayoutManager linearLayoutManager = new LinearLayoutManager(getApplicationContext());
    linearLayoutManager.setOrientation(LinearLayoutManager.VERTICAL);
    rv.setLayoutManager(linearLayoutManager);
    adapter = new CheckoutsViewAdapter(getApplicationContext(), new IO(getApplicationContext()).loadSettings());
    adapter.setCheckouts(toSave);
    adapter.setListener(this);
    rv.setAdapter(adapter);
    // prevents a weird rendering issues
    ((SimpleItemAnimator) rv.getItemAnimator()).setSupportsChangeAnimations(false);
    // don't forget to sync our activity ui with the RUI settings
    new UIHandler(this, toolbar).update();
}
Also used : SimpleItemAnimator(android.support.v7.widget.SimpleItemAnimator) RTeam(com.cpjd.roblu.models.RTeam) UIHandler(com.cpjd.roblu.ui.UIHandler) RTab(com.cpjd.roblu.models.RTab) IO(com.cpjd.roblu.io.IO) ArrayList(java.util.ArrayList) LinearLayoutManager(android.support.v7.widget.LinearLayoutManager) RCheckout(com.cpjd.roblu.models.RCheckout) Toolbar(android.support.v7.widget.Toolbar)

Example 12 with RCheckout

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

the class SyncHelper method generateCheckoutsFromEvent.

public ArrayList<RCheckout> generateCheckoutsFromEvent(RTeam[] teams, long time) {
    /*
         * Verify everything
         */
    for (RTeam team : teams) {
        team.verify(form);
        io.saveTeam(activeEvent.getID(), team);
        // Remove all these, since the scouter won't use them
        team.setImage(null);
        team.setTbaInfo(null);
        team.setWebsite(null);
    }
    /*
         * Start packaging
         * Important note: We have to clone each team so that they don't have to be re-loaded
         */
    ArrayList<RCheckout> checkouts = new ArrayList<>();
    int id = 0;
    // Package PIT & Predictions checkouts first
    for (RTeam team : teams) {
        RTeam temp = team.clone();
        temp.removeAllTabsButPIT();
        RCheckout newCheckout = new RCheckout(temp);
        newCheckout.setID(id);
        newCheckout.setStatus(HandoffStatus.AVAILABLE);
        if (mode == MODES.BLUETOOTH && newCheckout.getTeam().getLastEdit() >= time)
            checkouts.add(newCheckout);
        else if (mode != MODES.BLUETOOTH)
            checkouts.add(newCheckout);
        id++;
    }
    /*
         * Next, add an assignment for every match, for every team
         */
    for (RTeam team : teams) {
        if (team.getTabs() == null || team.getTabs().size() == 0)
            continue;
        for (int i = 2; i < team.getTabs().size(); i++) {
            RTeam temp = team.clone();
            temp.setPage(0);
            temp.removeAllTabsBut(i);
            RCheckout check = new RCheckout(temp);
            check.setID(id);
            check.setStatus(HandoffStatus.AVAILABLE);
            if (mode == MODES.BLUETOOTH && check.getTeam().getLastEdit() >= time)
                checkouts.add(check);
            else if (mode != MODES.BLUETOOTH)
                checkouts.add(check);
            id++;
        }
    }
    Log.d("RBS", "Created: " + checkouts.size() + " checkouts");
    return checkouts;
}
Also used : RTeam(com.cpjd.roblu.models.RTeam) ArrayList(java.util.ArrayList) RCheckout(com.cpjd.roblu.models.RCheckout)

Example 13 with RCheckout

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

the class SyncHelper method unpackCheckouts.

/**
 * Deserialize and merges a list of checkouts into the active event
 * @param checkouts the array of checkouts to process
 */
public void unpackCheckouts(CloudCheckout[] checkouts, RSyncSettings cloudSettings) {
    if (checkouts == null || checkouts.length == 0) {
        throw new NullPointerException("No checkouts to unpack.");
    }
    if (activeEvent == null) {
        throw new NullPointerException("No active event found. Unable to unpack checkouts.");
    }
    for (CloudCheckout serial : checkouts) {
        try {
            // Deserialize
            RCheckout checkout = mapper.readValue(serial.getContent(), RCheckout.class);
            // Merge the checkout
            mergeCheckout(checkout);
            // Send a notification if there's less than 6 checkouts
            if (checkouts.length < 6)
                Notify.notifyMerged(context, activeEvent.getID(), checkout);
            if (mode == MODES.NETWORK) {
                // Update the sync IDs
                cloudSettings.getCheckoutSyncIDs().put(checkout.getID(), serial.getSyncID());
            } else // Flag for uploading
            if (mode == MODES.BLUETOOTH) {
                io.savePendingCheckout(checkout);
            }
        } catch (Exception e) {
            Log.d("RBS", "Failed to unpack checkout: " + serial);
        }
    }
    // Send a multi-notification instead of spamming the user if they received 6 or more checkouts at once
    if (checkouts.length >= 6) {
        Notify.notifyNoAction(context, "Merged scouting data", "Merged " + checkouts.length + " checkouts.");
    }
    // Request general UI refresh
    Utils.requestUIRefresh(context);
}
Also used : RCheckout(com.cpjd.roblu.models.RCheckout) CloudCheckout(com.cpjd.models.CloudCheckout)

Example 14 with RCheckout

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

the class ExportCSVTask method run.

@Override
public void run() {
    if (Build.VERSION.SDK_INT < 21) {
        listener.errorOccurred("Your device does not support CSV exporting.");
        return;
    }
    /*
         * Check to see if the event is null, if it is, we must cancel this task
         */
    if (event == null) {
        listener.errorOccurred("Event could not be loaded.");
        return;
    }
    /*
         * Load teams
         */
    teams = new IO(contextWeakReference.get()).loadTeams(event.getID());
    form = new IO(contextWeakReference.get()).loadForm(event.getID());
    /*
         * Check to see if the teams or forms are null, if they are, cancel the task
         */
    if (teams == null || teams.length == 0 || form == null) {
        listener.errorOccurred("This event doesn't contain any teams");
        return;
    }
    /*
         * Verify all the teams
         */
    for (RTeam team : teams) {
        if (team != null) {
            // also sneak in a line here to tell each team to sort by numerical if a sort request is made
            team.setFilter(TeamsView.SORT_TYPE.NUMERICAL);
            team.verify(form);
            new IO(contextWeakReference.get()).saveTeam(event.getID(), team);
        }
    }
    /*
         * Sort the teams by number
         */
    Collections.sort(Arrays.asList(teams));
    /*
         * Build checkouts array, nice way to store data
         */
    final ArrayList<RCheckout> checkouts = new ArrayList<>();
    for (RTeam team : teams) {
        RTeam temp = team.clone();
        temp.removeAllTabsButPIT();
        RCheckout newCheckout = new RCheckout(temp);
        checkouts.add(newCheckout);
    }
    /*
         * Next, add an assignment for every match, for every team
         */
    for (RTeam team : teams) {
        if (team.getTabs() == null || team.getTabs().size() == 0)
            continue;
        for (int i = 2; i < team.getTabs().size(); i++) {
            RTeam temp = team.clone();
            temp.setPage(0);
            temp.removeAllTabsBut(i);
            RCheckout check = new RCheckout(temp);
            checkouts.add(check);
        }
    }
    Collections.sort(checkouts);
    // Create an IO reference
    final IO io = new IO(contextWeakReference.get());
    /*
         * Start executing all the different CSVSheets generate commands
         */
    for (final CSVSheet s : CSVSheets) {
        new Thread() {

            public void run() {
                if (s.isEnabled()) {
                    try {
                        s.setIo(io);
                        s.setVerboseness(verboseness);
                        s.setWorkbook(workbook);
                        Log.d("RBS", "ExportCSVTask: Generating sheet: " + s.getSheetName());
                        // sets the default, this may get overrided at any point in time by the user
                        s.setCellStyle(BorderStyle.THIN, IndexedColors.WHITE, IndexedColors.BLACK, false);
                        s.generateSheet(sheets.get(s.getSheetName()), event, form, teams, checkouts);
                        for (int i = 0; i < sheets.get(s.getSheetName()).getRow(0).getLastCellNum(); i++) sheets.get(s.getSheetName()).setColumnWidth(i, s.getColumnWidth());
                    } catch (Exception e) {
                        listener.errorOccurred("Failed to execute " + s.getSheetName() + " sheet generation.");
                        Log.d("RBS", "Failed to execute " + s.getSheetName() + " sheet generation. Err: " + e.getMessage());
                    }
                    threadCompleted(s.getSheetName());
                }
            }
        }.start();
    }
}
Also used : RTeam(com.cpjd.roblu.models.RTeam) IO(com.cpjd.roblu.io.IO) ArrayList(java.util.ArrayList) RCheckout(com.cpjd.roblu.models.RCheckout) CSVSheet(com.cpjd.roblu.csv.csvSheets.CSVSheet) IOException(java.io.IOException)

Example 15 with RCheckout

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

the class FieldData method generateSheet.

@Override
public void generateSheet(XSSFSheet sheet, REvent event, RForm form, RTeam[] teams, ArrayList<RCheckout> checkouts) {
    Row one = createRow(sheet);
    createCell(one, 0, "Team#");
    createCell(one, 1, "Match#");
    // Find a random RFieldData reference
    RFieldData fieldData = null;
    try {
        mainLoop: for (RTab tab : teams[0].getTabs()) {
            if (tab.getTitle().equalsIgnoreCase("PIT") || tab.getTitle().equalsIgnoreCase("PREDICTIONS"))
                continue;
            for (RMetric metric2 : tab.getMetrics()) {
                if (metric2 instanceof RFieldData) {
                    fieldData = (RFieldData) metric2;
                    break mainLoop;
                }
            }
        }
    } catch (Exception e) {
    // }
    }
    // Copy the metrics over
    int index = 2;
    for (Object key : fieldData.getData().keySet()) {
        createCell(one, index, key.toString());
        index++;
    }
    // Start copying data
    for (RCheckout checkout : checkouts) {
        if (!checkout.getTeam().getTabs().get(0).getTitle().startsWith("Quals"))
            continue;
        Row row = createRow(sheet);
        createCell(row, 0, String.valueOf(checkout.getTeam().getNumber()));
        createCell(row, 1, checkout.getTeam().getTabs().get(0).getTitle());
        index = 0;
        mainLoop: for (RTab tab : checkout.getTeam().getTabs()) {
            for (RMetric metric2 : tab.getMetrics()) {
                if (metric2 instanceof RFieldData) {
                    try {
                        for (Object key : ((RFieldData) metric2).getData().keySet()) {
                            createCell(row, index + 2, ((RFieldData) metric2).getData().get(key).get(tab.isRedAlliance() ? 0 : 1).toString());
                            index++;
                        }
                        break mainLoop;
                    } catch (Exception e) {
                    }
                }
            }
        }
    }
}
Also used : RTab(com.cpjd.roblu.models.RTab) RFieldData(com.cpjd.roblu.models.metrics.RFieldData) RCheckout(com.cpjd.roblu.models.RCheckout) Row(org.apache.poi.ss.usermodel.Row) RMetric(com.cpjd.roblu.models.metrics.RMetric)

Aggregations

RCheckout (com.cpjd.roblu.models.RCheckout)17 IO (com.cpjd.roblu.io.IO)8 RTeam (com.cpjd.roblu.models.RTeam)8 RTab (com.cpjd.roblu.models.RTab)6 RMetric (com.cpjd.roblu.models.metrics.RMetric)5 ArrayList (java.util.ArrayList)5 StrictMode (android.os.StrictMode)3 Request (com.cpjd.http.Request)3 CloudCheckout (com.cpjd.models.CloudCheckout)3 CloudCheckoutRequest (com.cpjd.requests.CloudCheckoutRequest)3 REvent (com.cpjd.roblu.models.REvent)3 RForm (com.cpjd.roblu.models.RForm)3 RSettings (com.cpjd.roblu.models.RSettings)3 RSyncSettings (com.cpjd.roblu.models.RSyncSettings)3 RFieldData (com.cpjd.roblu.models.metrics.RFieldData)3 SyncHelper (com.cpjd.roblu.sync.SyncHelper)3 Row (org.apache.poi.ss.usermodel.Row)3 ObjectMapper (org.codehaus.jackson.map.ObjectMapper)3 TextView (android.widget.TextView)2 CloudTeam (com.cpjd.models.CloudTeam)2