package courseDirectory;

import java.util.List;
import java.util.ArrayList;

public class GrinnellCSCourse2 extends GrinnellCSCourse1
{
    // this completes the details of GrinnellCSCourse2, so that
    // this class is fully implemented.

    GrinnellCSCourse2 () {
        // by default in Java, all fields sent to 0 or null
        knowledgeUnitList = new ArrayList <String> ();
        knowUnitPrereqList = new ArrayList <String> ();
        paradigmList  = new ArrayList <String> ();
        supportLangList  = new ArrayList <String> ();
    }

    GrinnellCSCourse2 (String subj, int num, String name, int cred, 
                       String instr, String location)
    {
        // to initialize GrinnellCourses
        // cannot use super, 
        //      since GrinnellCSCourse2 has no multi-parameter constructor
        subject = subj;
        number = num;
        title = name;
        credits = cred;
        instructor = instr;
        room = location;
        prerequisiteList = new ArrayList <String> ();
        
        // then initialize new fields
        knowledgeUnitList = new ArrayList <String> ();
        knowUnitPrereqList = new ArrayList <String> ();
        paradigmList  = new ArrayList <String> ();
        supportLangList  = new ArrayList <String> ();
    }

    // Modifers
    /* Add knowledge unit
     */
    public void addCS2013KnowledgeUnit  (String unit) {
        knowledgeUnitList.add (unit);
    }

    /* Add prerequisite
     */
    public void addCS2013Prerequisite  (String prereq) {
        knowUnitPrereqList.add (prereq);
    }

    /* add problem-solving paradigm */
    public void addParadigm (String parad) {
        paradigmList.add(parad);
    }

    /* add supporting language */
    public void addLang (String lang) {
        supportLangList.add (lang);
    }

    // method for testing
    public static void main (String[] args) {

        // create two courses, using the two constructors
        GrinnellCSCourse myCourse = new GrinnellCSCourse2 ("CSC", 207,
				      "Algorithms and Object-oriented Design",
                                       4, "Walker", "Science 3813");
        GrinnellCSCourse yourCourse = new GrinnellCSCourse2 ();

        // print results of initialization
        /* first use toString, then use extractors */
        System.out.println ("Initialization");
        System.out.println ("My course is ");
        System.out.println (myCourse.toString());
        System.out.println ("Your course is ");
        System.out.print(yourCourse.getSubject() + " ");
        System.out.println (yourCourse.getNumber() + ":  " + yourCourse.getTitle());
        System.out.println ("     your credits:  " + yourCourse.getCredits());

        // set other fields of yourCourse
        myCourse.addPrereq ("CSC 151");
        myCourse.addPrereq ("CSC 161");
        myCourse.addParadigm ("Object-Oriented");
        myCourse.addLang ("Java");
        myCourse.addCS2013KnowledgeUnit ("SDF/Fundamental Data Structures");
        myCourse.addCS2013KnowledgeUnit ("AL/Basic Analysis");
        myCourse.addCS2013Prerequisite ("PL/Object-Oriented Programming");
        yourCourse.setNumTitle (131, "Calculus I");
        yourCourse.setCredits (4);
        yourCourse.setInstructor ("Walker");
        yourCourse.setRoom ("Science 3821");
        yourCourse.addPrereq ("precalculus");

        // print results of modifications
        System.out.println ("\nAfter modification");
        System.out.println ("My course is \n" + myCourse);
        System.out.println ("Your course is \n" + yourCourse);
    }

}
