private void validate() throws ScheduleException
    {
        // For each team...
        for ( NFLTeam team : NFLTeam.values() )
        {
            // ...make sure it has its schedule loaded.
            NFLMatchup[] schedule = matchups.get(team);
            if ( null == schedule )
            {
                scheduleNotLoaded(team);
            }

            // For each week in its schedule...
            int bye = -1;;
            for ( int week = 0; week < MAX_WEEK; week++ )
            {
                NFLMatchup matchup = schedule[week];

                // ... if it is null it could be a bye week.  Keep
                // track to make sure it has exactly one bye week.
                if ( null == matchup )
                {
                    if ( -1 != bye )
                    {
                        LOG.warn("Multiple bye weeks for team (likely incomplete schedule): {}",
                                 team);
                        scheduleNotLoaded(team);
                    }
                    byes.put(team, week);
                    bye = week;
                    continue;
                }

                // The same matchup should be loaded under the opposing team.
                NFLTeam opponent = matchup.getOpponent(team);
                if ( !matchup.equals(getMatchup(opponent,
                                                matchup.getWeek())) )
                {
                    String msg = String.format("Opposing schedules do not match (%s/%s, week %d",
                                               team,
                                               opponent,
                                               week);
                    LOG.warn(msg);
                    throw new InvalidScheduleException(msg);
                }
            }

            // After we've iterated over the matchups for the team, we
            // can also ensure that at least one bye week was loaded.
            if ( null == byes.get(team) )
            {
                String msg = "Invalid schedule (no bye week) for team: " + team;
                LOG.warn(msg);
                throw new InvalidScheduleException(msg);
            }
        }
    }