# ----------------------------------------------------------------
# This module defines metadata to be used by the batchSVN.py script.
#
# Copy this module as /class/csse/<courseName>/scripts/batchSVNData.py and 
# edit it to define the course metadata for <courseName>.  The sample data
# in the original file can be used by invoking the batchSVN.py script using
# "testing" as the course name argument, e.g.: ./batchSVN.py testing
# ----------------------------------------------------------------

import os
import sys

# ----------------------------------------------------------------
# Hacks the system path so the import of batchSVNTypes works for testing 
# individual course meta-data on the the server.
serverPathToBatchSVN = "/class/csse/resources/Grading"
# Change the following line to point to your local checkout of the CSSE
# resources trunk if you want to test this file on your local machine:
localMachinePathToBatchSVN = "/Users/cclifton/Documents/Rose/Administrative/resources/Grading"
sys.path.append(serverPathToBatchSVN)
sys.path.append(localMachinePathToBatchSVN)
from batchSVNTypes import *
# ----------------------------------------------------------------

# ----------------------------------------------------------------
# Local variables
# ----------------------------------------------------------------
repoNamePrefix = 'csse120-201230-'
# replace the following with a description of the course, like 'CSSE 120'
# courseDescription = '\a*** WARNING: USING TEST DATA, NOT COURSE DATA ***'
courseDescription = 'csse 120'

# ----------------------------------------------------------------
# Defines repositories sets for this course.  Used by main script.
# ----------------------------------------------------------------
reposSets = []
# first set in the list is the default

Section1Students = [ # 201230
    "armstrrd",
    "bishopcf",
    "brosiekn",
    "doddjw",
    "essexsj",
    "galeymm",
    "kelleyjl",
    "khannat",
    "mendezda",
    "schultba",
    "shaffegs",
    "shiy",
    "surmanr",
    "tracyma",
    "wagnercj",
    "wangy1",
    "wangy2",
    "whiteaj1",
    "zdrojezb",
]

Section2Students = [  # 201230 robotics
    "anj",
    "byrdjm",
    "caif",
    "donneljm",
    "foulketp",
    "frostmm",
    "hey1",
    "holemabj",
    "housmasd",
    "maginodb",
    "mayhewbp",
    "rhinech",
    "shieldre",
    "spurgena",
    "zajacrc",
]

reposSets.append(RepositorySet("Mutchler Students", repoNamePrefix, Section1Students + Section2Students))
reposSets.append(RepositorySet("Mutchler Section 1 Students", repoNamePrefix, Section1Students))
reposSets.append(RepositorySet("Mutchler Section 2 Students", repoNamePrefix, Section2Students))
reposSets.append(RepositorySet("Test", repoNamePrefix, ["mutchler"]))

# ----------------------------------------------------------------
# Defines project names and unit tests for this course. 
# Used by main script.
# ----------------------------------------------------------------
projects = []

projectNames = [
    "Session01_IntroductionToPython",
    "Session02_InputComputeOutput",
    "Session03_LoopsAndUsingObjects",
    "Session04_FunctionsMethodsAndParameters",
    "Session05_ConditionalsAndAccumulators",
    "Session06_Accumulators",
    "Session07_Sequences",
    "Test1",
    "Test2",
]

for projectName in projectNames:
    projects.append(Project(projectName))

# ----------------------------------------------------------------
# Defines any additional main menu commands for this course.
# Used by main script.
# ----------------------------------------------------------------
menuItems = []
# ----------------------------------------------------------------
# Sample code to add a zip command to the menu:
# def zipForDownload(data):
#     if os.access(data.activeProject.name,os.F_OK):
#         os.system('zip -r %s.zip %s' % (data.activeProject.name,
#                                         data.activeProject.name))
#         if not os.access(data.activeProject.name + '.zip',os.F_OK):
#             print '\a\n*** Unable to create zip file ***\n'
#     return False
# menuItems.append(MenuItem('Zip local project subdirectory for download',
#                           zipForDownload))
# ----------------------------------------------------------------

# ----------------------------------------------------------------
# A couple of extra menu items that are useful in a pinch, but aren't yet 
# sufficiently abstracted for general use.
# def copyInExtras(data):
#     forEachRepo("cp ${scriptDir}/*.java ${shortName}/src/btwp/", data)
#     return False
# menuItems.append(MenuItem('Copy in Exam2 test files',copyInExtras))
# 
# def runTestsExtraMem(data):
#     forEachRepo("cd ${shortName} && java -Xmx2000m -cp '${scriptDir}/junit-4.5.jar:bin' org.junit.runner.JUnitCore ${testClasses}", data)
#     return False
# menuItems.append(MenuItem('Run JUnit tests with extra memory',runTestsExtraMem))
# ----------------------------------------------------------------

# ----------------------------------------------------------------
# Some test code, executed if this file is imported directly into
# a python shell.  Shouldn't need to change this when specifying
# course-specific data above.
# ----------------------------------------------------------------
if __name__ == '__main__':
    print "reposSets ==", reposSets
    print "Repositories from reposSets[0]:"
    for r in reposSets[0].repos():
        print "   ", r
    print "repository names: ", [r.name for r in reposSets]
    print
    print projects
    print "Test classes:"
    for p in projects:
        print "   %s: %s" % (p.name, p.testClasses)
    print "Additional Menu Items' Text:"
    for mi in menuItems:
        print "  ", mi.text