{
  "title": "Software Design and Data Structures",
  "desc": "A programming-intensive exploration of software design concepts and implementation techniques. It builds on the student's existing knowledge of fundamental object-oriented programming.",
  "theme": "haiku",
  "build_dir": "Books",
  "sphinx_debug": false,
  "code_dir": "SourceCode/",
  "code_lang": {
    "Java": {
      "ext": [
        "java"
      ],
      "label": "Java",
      "lang": "java"
    },
    "C++": {
      "ext": [
        "cpp",
        "h"
      ],
      "label": "C++",
      "lang": "C++"
    }
  },
  "tabbed_codeinc": false,
  "lang": "en",
  "build_JSAV": false,
  "build_cmap": false,
  "suppress_todo": false,
  "dispModComp": true,
  "tag": "Java;CS1;CS2",
  "zeropt_assignments": false,
  "narration_enabled": true,
  "include_tree_view": false,
  "chapter_name": "Week",
  "start_chap_num": 0,
  "html_theme_options": {
    "show_source": false,
    "show_search": false,
    "show_relations": false,
    "show_copyright": false,
    "render_sidebar": false
  },
  "html_css_files": [
    "_static/haiku-supp.css"
  ],
  "glob_exer_options": {
    "JXOP-debug": "true"
  },
  "chapters": {
    "General Course Information": {
      "SWDesignAndDataStructs/AdminPlaceholder": {
        "long_name": "Admin Placeholder",
        "sections": {
          "Placeholder": {}
        }
      }
    },
    "Introduction": {
      "SWDesignAndDataStructs/AdminWelcome": {
        "long_name": "Welcome to CS2114",
        "sections": {
          "Objectives": {},
          "Welcome to CS2114": {},
          "Course Logistics": {},
          "Getting Help": {},
          "Support Projects": {},
          "Web-CAT and Lab Sections": {},
          "Checkpoint": {
            "WelcomeCheckpointSumm": {
              "long_name": "Checkpoint 1",
              "required": true,
              "points": 6,
              "type": "ka",
              "av_address": "Exercises/SWDesignAndDataStructs/WelcomeCheckpointSumm.html",
              "mod_name": "AdminWelcome",
              "threshold": 6
            }
          }
        }
      },
      "SWDesignAndDataStructs/AdminIDESetup": {
        "long_name": "Setting Up Your Programming Environment",
        "sections": {
          "Downloading and Installing Eclipse": {},
          "Configuring Eclipse": {},
          "Adding CS2 Support Projects": {},
          "Creating a Project and Setting Default JDK": {},
          "Troubleshooting Setting JDK to 1.8": {}
        }
      },
      "SWDesignAndDataStructs/ContentFundamentals": {
        "long_name": "Java Fundamentals",
        "sections": {
          "Objectives": {},
          "Interactive: Java Basics": {},
          "Java Methods": {},
          "Checkpoint 1": {
            "FundamentalsCheckpoint1Summ": {
              "long_name": "Checkpoint 1",
              "required": true,
              "points": 6,
              "type": "ka",
              "av_address": "Exercises/SWDesignAndDataStructs/FundamentalsCheckpoint1Summ.html",
              "mod_name": "ContentFundamentals",
              "threshold": 3
            }
          },
          "Interactive: Java Variables": {},
          "Checkpoint 2": {
            "VariablesSumm": {
              "long_name": "Checkpoint 2",
              "required": true,
              "points": 6,
              "type": "ka",
              "av_address": "Exercises/SWDesignAndDataStructs/VariablesSumm.html",
              "mod_name": "ContentFundamentals",
              "threshold": 3
            }
          },
          "Interactive: Java Control Flow": {},
          "Checkpoint 3": {
            "ControlFlowSumm": {
              "long_name": "Checkpoint 3",
              "required": true,
              "points": 4,
              "type": "ka",
              "av_address": "Exercises/SWDesignAndDataStructs/ControlFlowSumm.html",
              "mod_name": "ContentFundamentals",
              "threshold": 2
            }
          },
          "Interactive: Java Scope and Equality": {},
          "Checkpoint 4": {
            "ScopeSumm": {
              "long_name": "Checkpoint 4",
              "required": true,
              "points": 6,
              "type": "ka",
              "av_address": "Exercises/SWDesignAndDataStructs/ScopeSumm.html",
              "mod_name": "ContentFundamentals",
              "threshold": 3
            }
          },
          "Java Objects and Enum": {}
        }
      },
      "SWDesignAndDataStructs/ContentJUNITReview": {
        "long_name": "Java Unit Testing",
        "sections": {
          "Objectives": {},
          "Interactive: Introduction to Hokie Class": {},
          "Checkpoint 1": {
            "JunitCheckpoint1Summ": {
              "long_name": "Checkpoint 1",
              "required": true,
              "points": 6,
              "type": "ka",
              "av_address": "Exercises/SWDesignAndDataStructs/JunitCheckpoint1Summ.html",
              "mod_name": "ContentJUNITReview",
              "threshold": 3
            }
          },
          "Intro to Hokie Class JUnit Testing": {},
          "Interactive: Hokie Class JUnit Testing": {},
          "Checkpoint 2": {
            "JunitCheckpoint2Summ": {
              "long_name": "Checkpoint 2",
              "required": true,
              "points": 6,
              "type": "ka",
              "av_address": "Exercises/SWDesignAndDataStructs/JunitCheckpoint2Summ.html",
              "mod_name": "ContentJUNITReview",
              "threshold": 3
            }
          },
          "Review of Writing JUnit Tests with student.TestCase": {
            "JunitCheckpoint3Summ": {
              "long_name": "Checkpoint 3",
              "required": true,
              "points": 6,
              "type": "ka",
              "av_address": "Exercises/SWDesignAndDataStructs/JunitCheckpoint3Summ.html",
              "mod_name": "ContentJUNITReview",
              "threshold": 3
            },
            "JunitCheckpoint4Summ": {
              "long_name": "Checkpoint 4",
              "required": true,
              "points": 2,
              "type": "ka",
              "av_address": "Exercises/SWDesignAndDataStructs/JunitCheckpoint4Summ.html",
              "mod_name": "ContentJUNITReview",
              "threshold": 1
            },
            "JunitCheckpoint5Summ": {
              "long_name": "Checkpoint 5",
              "required": true,
              "points": 2,
              "type": "ka",
              "av_address": "Exercises/SWDesignAndDataStructs/JunitCheckpoint5Summ.html",
              "mod_name": "ContentJUNITReview",
              "threshold": 1
            }
          },
          "Additional references for writing JUnit Tests:": {},
          "Checkpoint 6": {
            "JunitCheckpoint6Summ": {
              "long_name": "Checkpoint 6",
              "required": true,
              "points": 8,
              "type": "ka",
              "av_address": "Exercises/SWDesignAndDataStructs/JunitCheckpoint6Summ.html",
              "mod_name": "ContentJUNITReview",
              "threshold": 4
            }
          }
        }
      },
      "SWDesignAndDataStructs/ContentStyle": {
        "long_name": "Style and Documentation: Introduction",
        "sections": {
          "Overview & Objectives": {},
          "Suggested Reading:": {},
          "Introduction to Style and Documentation": {},
          "The challenge": {},
          "Style Guides": {},
          "Naming: What's in a name": {},
          "Naming conventions": {},
          "Basics naming rules": {},
          "Source Files and Directories": {},
          "Packages": {},
          "Class": {},
          "Interface": {},
          "Methods": {},
          "Variables": {},
          "Constants": {},
          "Naming Dos and Donts": {},
          "Naming Summary": {},
          "Code Review": {},
          "Checkpoint 1": {
            "StyleCheckpoint1Summ": {
              "long_name": "Checkpoint 1",
              "required": true,
              "points": 4,
              "type": "ka",
              "av_address": "Exercises/SWDesignAndDataStructs/StyleCheckpoint1Summ.html",
              "mod_name": "ContentStyle",
              "threshold": 2
            }
          },
          "Formatting": {},
          "Indentation": {},
          "Formatting for this course / Setting up Eclipse Formatting": {},
          "Line length": {},
          "Braces": {},
          "Spacing after commas and other operators": {},
          "Blank Lines": {},
          "Line breaks and continuation indentation": {},
          "Software Documentation overview": {},
          "JavaDoc Comments": {},
          "Describing a class": {},
          "Documenting public fields/instance variables and static variables": {},
          "Documenting a method": {},
          "Javadoc Tags": {},
          "Other comments": {},
          "Use of constants and referenced values vs hard coding": {},
          "Referenced value": {},
          "Access Modifiers and Visibility of classes, fields, and methods": {},
          "Review Checklist": {},
          "Interactive: Style & Documentation Final Review": {},
          "Checkpoint 2": {
            "StyleCheckpoint2Summ": {
              "long_name": "Checkpoint 2",
              "required": true,
              "points": 4,
              "type": "ka",
              "av_address": "Exercises/SWDesignAndDataStructs/StyleCheckpoint2Summ.html",
              "mod_name": "ContentStyle",
              "threshold": 2
            }
          },
          "Related Resources": {}
        }
      },
      "SWDesignAndDataStructs/RefPythonToJava": {
        "long_name": "Python to Java Tutorial",
        "sections": {
          "Code blocks": {},
          "Semi-colons": {},
          "Variable types": {},
          "Instance variables": {},
          "Method return types": {},
          "Constructors": {},
          "Access control modifiers": {},
          "Scope": {},
          "Conditional and loop syntax": {},
          "Function and method syntax": {},
          "Printing (for debugging)": {},
          "Comments:": {},
          "Booleans:": {},
          "Logical operators:": {},
          "Object comparison:": {}
        }
      },
      "SWDesignAndDataStructs/AdminAcadIntegrity": {
        "long_name": "Placeholder",
        "sections": {
          "Placeholder": {}
        }
      },
      "SWDesignAndDataStructs/ProgrammingPracticeMod1": {
        "long_name": "Programming Practice 2",
        "sections": {
          "Placeholder": {}
        }
      }
    },
    "Java Review": {
      "SWDesignAndDataStructs/ContentExceptions": {
        "long_name": "Exceptions",
        "sections": {
          "Objectives": {},
          "Interactive: Exception Handling": {},
          "Reflecting on Checked and Runtime(Unchecked) Exceptions": {},
          "Checkpoint 1": {
            "ExceptionsCheckpoint1Summ": {
              "long_name": "Checkpoint 1",
              "required": true,
              "points": 4,
              "type": "ka",
              "av_address": "Exercises/SWDesignAndDataStructs/ExceptionsCheckpoint1Summ.html",
              "mod_name": "ContentExceptions",
              "threshold": 2
            }
          },
          "Interactive: Exception Handling with try, catch, and finally": {},
          "Handling the Exception Later on with throws": {},
          "Exception Handling Examples - Basic to Complex": {},
          "Implementing and Testing Exceptions": {},
          "Checkpoint 2": {
            "ExceptionsCheckpoint2Summ": {
              "long_name": "Checkpoint 2",
              "required": true,
              "points": 8,
              "type": "ka",
              "av_address": "Exercises/SWDesignAndDataStructs/ExceptionsCheckpoint2Summ.html",
              "mod_name": "ContentExceptions",
              "threshold": 4
            }
          }
        }
      },
      "SWDesignAndDataStructs/ContentPolymorphism": {
        "long_name": "Polymorphism",
        "sections": {
          "Objectives": {},
          "Interactive: Introduction to Object Oriented Programming": {},
          "Checkpoint 1": {
            "OOP1Checkpoint1Summ": {
              "long_name": "Checkpoint 1",
              "required": true,
              "points": 6,
              "type": "ka",
              "av_address": "Exercises/SWDesignAndDataStructs/OOP1Checkpoint1Summ.html",
              "mod_name": "ContentPolymorphism",
              "threshold": 3
            }
          },
          "Interactive: Java UML Diagrams": {},
          "Interactive: Java Inheritance: this, super": {},
          "Checkpoint 2": {
            "OOP1Checkpoint2Summ": {
              "long_name": "Checkpoint 2",
              "required": true,
              "points": 4,
              "type": "ka",
              "av_address": "Exercises/SWDesignAndDataStructs/OOP1Checkpoint2Summ.html",
              "mod_name": "ContentPolymorphism",
              "threshold": 2
            }
          },
          "Programming Practice: Object Oriented Programming": {
            "learning_tool": "code-workout",
            "resource_type": "external_assignment",
            "resource_name": "Programming Practice: Object Oriented Programming",
            "long_name": "Programming Practice: Object Oriented Programming",
            "enable_scrolling": "True",
            "frame_width": "1200",
            "frame_height": "900",
            "partial_credit": "True",
            "points": 10,
            "workout_id": "1906",
            "type": "extr",
            "mod_name": "ContentPolymorphism",
            "threshold": 2
          },
          "Interactive: Java Inheritance: equals(), toString()": {},
          "Checkpoint 3": {
            "OOP2Checkpoint3Summ": {
              "long_name": "Checkpoint 3",
              "required": true,
              "points": 6,
              "type": "ka",
              "av_address": "Exercises/SWDesignAndDataStructs/OOP2Checkpoint3Summ.html",
              "mod_name": "ContentPolymorphism",
              "threshold": 3
            }
          },
          "Interactive: Polymorphism Measurable Interface": {},
          "Checkpoint 4": {
            "OOP2Checkpoint4Summ": {
              "long_name": "Checkpoint 4",
              "required": true,
              "points": 4,
              "type": "ka",
              "av_address": "Exercises/SWDesignAndDataStructs/OOP2Checkpoint4Summ.html",
              "mod_name": "ContentPolymorphism",
              "threshold": 2
            }
          },
          "Programming Practice: Polymorphism 1": {
            "learning_tool": "code-workout",
            "resource_type": "external_assignment",
            "resource_name": "Programming Practice: Polymorphism 1",
            "long_name": "Programming Practice: Polymorphism 1",
            "enable_scrolling": "True",
            "frame_width": "1200",
            "frame_height": "900",
            "partial_credit": "True",
            "points": 10,
            "workout_id": "1907",
            "type": "extr",
            "mod_name": "ContentPolymorphism",
            "threshold": 2
          },
          "Interactive: Polymorphism Computer Superclass": {},
          "Checkpoint 5": {
            "OOP2Checkpoint5Summ": {
              "long_name": "Checkpoint 5",
              "required": true,
              "points": 4,
              "type": "ka",
              "av_address": "Exercises/SWDesignAndDataStructs/OOP2Checkpoint5Summ.html",
              "mod_name": "ContentPolymorphism",
              "threshold": 2
            }
          },
          "Interactive: Polymorphism Integer Example": {},
          "Programming Practice: Polymorphism 2": {
            "learning_tool": "code-workout",
            "resource_type": "external_assignment",
            "resource_name": "Programming Practice: Polymorphism 2",
            "long_name": "Programming Practice: Polymorphism 2",
            "enable_scrolling": "True",
            "frame_width": "1200",
            "frame_height": "900",
            "partial_credit": "True",
            "points": 20,
            "workout_id": "1908",
            "type": "extr",
            "mod_name": "ContentPolymorphism",
            "threshold": 4
          }
        }
      },
      "SWDesignAndDataStructs/ContentJavaArrays": {
        "long_name": "Java Arrays",
        "sections": {
          "Objectives": {},
          "Interactive: Java Array Basics": {},
          "Checkpoint 1": {
            "ArrayCheckpoint1Summ": {
              "long_name": "Checkpoint 1",
              "required": true,
              "points": 6,
              "type": "ka",
              "av_address": "Exercises/SWDesignAndDataStructs/ArrayCheckpoint1Summ.html",
              "mod_name": "ContentJavaArrays",
              "threshold": 3
            }
          },
          "Programming Practice: Java Arrays 1": {
            "learning_tool": "code-workout",
            "resource_type": "external_assignment",
            "resource_name": "Programming Practice: Java Arrays 1",
            "long_name": "Programming Practice: Java Arrays 1",
            "enable_scrolling": "True",
            "frame_width": "1200",
            "frame_height": "900",
            "partial_credit": "True",
            "points": 15,
            "workout_id": "2477",
            "type": "extr",
            "mod_name": "ContentJavaArrays",
            "threshold": 3
          },
          "Interactive: Java Array Search": {},
          "Checkpoint 2": {
            "ArrayCheckpoint2Summ": {
              "long_name": "Checkpoint 2",
              "required": true,
              "points": 10,
              "type": "ka",
              "av_address": "Exercises/SWDesignAndDataStructs/ArrayCheckpoint2Summ.html",
              "mod_name": "ContentJavaArrays",
              "threshold": 5
            }
          },
          "Interactive: Java Array Removing, Inserting, & Tips": {},
          "Checkpoint 3": {
            "ArrayCheckpoint3Summ": {
              "long_name": "Checkpoint 3",
              "required": true,
              "points": 6,
              "type": "ka",
              "av_address": "Exercises/SWDesignAndDataStructs/ArrayCheckpoint3Summ.html",
              "mod_name": "ContentJavaArrays",
              "threshold": 3
            }
          },
          "Programming Practice: Java Arrays 2": {
            "learning_tool": "code-workout",
            "resource_type": "external_assignment",
            "resource_name": "Programming Practice: Java Arrays 2",
            "long_name": "Programming Practice: Java Arrays 2",
            "enable_scrolling": "True",
            "frame_width": "1200",
            "frame_height": "900",
            "partial_credit": "True",
            "points": 5,
            "workout_id": "2478",
            "type": "extr",
            "mod_name": "ContentJavaArrays",
            "threshold": 1
          }
        }
      },
      "SWDesignAndDataStructs/ContentGenerics1": {
        "long_name": "Generics Intro",
        "sections": {
          "Objectives": {},
          "Interactive: Generics Intro Video": {},
          "Checkpoint 1": {
            "Generics1Checkpoint1Summ": {
              "long_name": "Checkpoint 1",
              "required": true,
              "points": 8,
              "type": "ka",
              "av_address": "Exercises/SWDesignAndDataStructs/Generics1Checkpoint1Summ.html",
              "mod_name": "ContentGenerics1",
              "threshold": 4
            }
          }
        }
      },
      "SWDesignAndDataStructs/Lab2Polymorphism": {
        "long_name": "Lab 2 Polymorphism",
        "sections": {
          "Placeholder": {}
        }
      },
      "SWDesignAndDataStructs/Lab2PolymorphismPost": {
        "long_name": "Lab 2 Polymorphism PostLab",
        "sections": {
          "Placeholder": {}
        }
      },
      "SWDesignAndDataStructs/ContentCoursePerceptions": {
        "long_name": "MUSIC Survey 1",
        "sections": {
          "Placeholder": {}
        }
      },
      "SWDesignAndDataStructs/KnowledgePracticeMod2": {
        "long_name": "Knowledge Practice 2",
        "sections": {
          "Placeholder": {}
        }
      },
      "SWDesignAndDataStructs/ProgrammingPracticeMod2": {
        "long_name": "Programming Practice 2",
        "sections": {
          "Placeholder": {}
        }
      }
    },
    "Bags": {
      "SWDesignAndDataStructs/ContentBags1": {
        "long_name": "Bags",
        "sections": {
          "Objectives": {},
          "Introduction to Bags": {},
          "Documentation of Bag Interface methods": {},
          "Interactive: Documentation of Bag Interface Methods": {},
          "Interactive: Using Bags": {},
          "Checkpoint 1": {
            "BagsCheckpoint1Summ": {
              "long_name": "Checkpoint 1",
              "required": true,
              "points": 6,
              "type": "ka",
              "av_address": "Exercises/SWDesignAndDataStructs/BagsCheckpoint1Summ.html",
              "mod_name": "ContentBags1",
              "threshold": 3
            }
          },
          "Array Implementation of Bags": {},
          "Checkpoint 2": {
            "BagsCheckpoint2Summ": {
              "long_name": "Checkpoint 2",
              "required": true,
              "points": 4,
              "type": "ka",
              "av_address": "Exercises/SWDesignAndDataStructs/BagsCheckpoint2Summ.html",
              "mod_name": "ContentBags1",
              "threshold": 2
            }
          },
          "Demo More bag method implementation": {},
          "Checkpoint 3": {
            "BagsCheckpoint3Summ": {
              "long_name": "Checkpoint 3",
              "required": true,
              "points": 4,
              "type": "ka",
              "av_address": "Exercises/SWDesignAndDataStructs/BagsCheckpoint3Summ.html",
              "mod_name": "ContentBags1",
              "threshold": 2
            }
          },
          "Methods that Remove and Design Improvement Lesson and Demo": {},
          "Checkpoint 4": {
            "BagsCheckpoint4Summ": {
              "long_name": "Checkpoint 4",
              "required": true,
              "points": 4,
              "type": "ka",
              "av_address": "Exercises/SWDesignAndDataStructs/BagsCheckpoint4Summ.html",
              "mod_name": "ContentBags1",
              "threshold": 2
            }
          },
          "Interactive: Array resizing description and coding Demo": {},
          "Tradeoffs of using an array implementation for a bag": {},
          "Programming Practice: The Bag Interface": {
            "learning_tool": "code-workout",
            "resource_type": "external_assignment",
            "resource_name": "Programming Practice: The Bag Interface",
            "long_name": "Programming Practice: The Bag Interface",
            "enable_scrolling": "True",
            "frame_width": "1200",
            "frame_height": "900",
            "partial_credit": "True",
            "points": 5,
            "workout_id": "1909",
            "type": "extr",
            "mod_name": "ContentBags1",
            "threshold": 1
          }
        }
      },
      "SWDesignAndDataStructs/Lab3MovieDatabase": {
        "long_name": "Lab 3 Movie Database",
        "sections": {
          "Placeholder": {}
        }
      },
      "SWDesignAndDataStructs/Lab3MovieDatabasePost": {
        "long_name": "Lab 3 Movie Database Post Lab",
        "sections": {
          "Placeholder": {}
        }
      },
      "SWDesignAndDataStructs/Project1": {
        "long_name": "Project 1",
        "sections": {
          "Placeholder": {}
        }
      },
      "SWDesignAndDataStructs/KnowledgePracticeMod3": {
        "long_name": "Knowledge Practice 3",
        "sections": {
          "Placeholder": {}
        }
      },
      "SWDesignAndDataStructs/ProgrammingPracticeMod3": {
        "long_name": "Programming Practice 3",
        "sections": {
          "Placeholder": {}
        }
      }
    },
    "Linked Chains, Bags Continued": {
      "SWDesignAndDataStructs/Quiz1Info": {
        "long_name": "Assessment 1 Info",
        "sections": {
          "Placeholder": {}
        }
      },
      "SWDesignAndDataStructs/ContentLinkedChains": {
        "long_name": "Linked Chains (Pointers)",
        "sections": {
          "Objectives": {},
          "Reference Variables": {
            "PointerEX1PRO": {
              "long_name": "PointerEX1PRO",
              "required": true,
              "points": 2,
              "type": "ka",
              "av_address": "Exercises/Pointers/PointerEX1PRO.html",
              "mod_name": "ContentLinkedChains",
              "threshold": 1
            },
            "PointerEX2PRO": {
              "long_name": "PointerEX2PRO",
              "required": true,
              "points": 2,
              "type": "ka",
              "av_address": "Exercises/Pointers/PointerEX2PRO.html",
              "mod_name": "ContentLinkedChains",
              "threshold": 1
            }
          },
          "Interactive: Intro to Linked Chains of Nodes": {},
          "Checkpoint 1": {
            "LinkedChainCheckpoint1Summ": {
              "long_name": "Checkpoint 1",
              "required": true,
              "points": 4,
              "type": "ka",
              "av_address": "Exercises/SWDesignAndDataStructs/LinkedChainCheckpoint1Summ.html",
              "mod_name": "ContentLinkedChains",
              "threshold": 2
            }
          },
          "Programming Practice: Linked Chains 1": {
            "learning_tool": "code-workout",
            "resource_type": "external_assignment",
            "resource_name": "Programming Practice: Linked Chains 1",
            "long_name": "Programming Practice: Linked Chains 1",
            "enable_scrolling": "True",
            "frame_width": "1200",
            "frame_height": "900",
            "partial_credit": "True",
            "points": 15,
            "workout_id": "2479",
            "type": "extr",
            "mod_name": "ContentLinkedChains",
            "threshold": 3
          },
          "Interactive: Demo in Visualizer": {},
          "Checkpoint 2": {
            "LinkedChainCheckpoint2Summ": {
              "long_name": "Checkpoint 2",
              "required": true,
              "points": 4,
              "type": "ka",
              "av_address": "Exercises/SWDesignAndDataStructs/LinkedChainCheckpoint2Summ.html",
              "mod_name": "ContentLinkedChains",
              "threshold": 2
            }
          },
          "Programming Practice: Linked Chains 2": {
            "learning_tool": "code-workout",
            "resource_type": "external_assignment",
            "resource_name": "Programming Practice: Linked Chains 2",
            "long_name": "Programming Practice: Linked Chains 2",
            "enable_scrolling": "True",
            "frame_width": "1200",
            "frame_height": "900",
            "partial_credit": "True",
            "points": 20,
            "workout_id": "2480",
            "type": "extr",
            "mod_name": "ContentLinkedChains",
            "threshold": 4
          },
          "Contains() method Animation": {},
          "Checkpoint 3": {
            "PointerEX3PRO": {
              "long_name": "PointerEX3PRO",
              "required": true,
              "points": 2,
              "type": "ka",
              "av_address": "Exercises/Pointers/PointerEX3PRO.html",
              "mod_name": "ContentLinkedChains",
              "threshold": 1
            }
          },
          "Pointers Concepts Summary": {
            "CMpointersSumm": {
              "long_name": "Concept map pointers exercises",
              "required": true,
              "points": 2,
              "type": "ka",
              "av_address": "Exercises/CMP/CMpointersSumm.html",
              "mod_name": "ContentLinkedChains",
              "threshold": 1
            }
          }
        }
      },
      "SWDesignAndDataStructs/ContentLinkedBags": {
        "long_name": "Linked Bags",
        "sections": {
          "Objectives": {},
          "Interactive: Introduction to Linked Bags": {},
          "Interactive: LinkedBag add() and toArray()": {},
          "Checkpoint 1": {
            "LinkedBagCheckpoint1Summ": {
              "long_name": "Checkpoint 1",
              "required": true,
              "points": 8,
              "type": "ka",
              "av_address": "Exercises/SWDesignAndDataStructs/LinkedBagCheckpoint1Summ.html",
              "mod_name": "ContentLinkedBags",
              "threshold": 4
            }
          },
          "Interactive: ExLinkedBagJUnit Demonstration": {},
          "Interactive: LinkedBag getFrequencyOf() and contains()": {},
          "Checkpoint 2": {
            "LinkedBagCheckpoint2Summ": {
              "long_name": "Checkpoint 2",
              "required": true,
              "points": 4,
              "type": "ka",
              "av_address": "Exercises/SWDesignAndDataStructs/LinkedBagCheckpoint2Summ.html",
              "mod_name": "ContentLinkedBags",
              "threshold": 2
            }
          },
          "Interactive: LinkedBag Removing an item": {},
          "Checkpoint 3": {
            "LinkedBagCheckpoint3Summ": {
              "long_name": "Checkpoint 3",
              "required": true,
              "points": 4,
              "type": "ka",
              "av_address": "Exercises/SWDesignAndDataStructs/LinkedBagCheckpoint3Summ.html",
              "mod_name": "ContentLinkedBags",
              "threshold": 2
            }
          },
          "Wrapping up Bags": {},
          "Programming Practice: LinkedBags": {
            "learning_tool": "code-workout",
            "resource_type": "external_assignment",
            "resource_name": "Programming Practice: LinkedBags",
            "long_name": "Programming Practice: LinkedBags",
            "enable_scrolling": "True",
            "frame_width": "1200",
            "frame_height": "900",
            "partial_credit": "True",
            "points": 10,
            "workout_id": "1911",
            "type": "extr",
            "mod_name": "ContentLinkedBags",
            "threshold": 2
          }
        }
      },
      "SWDesignAndDataStructs/Lab4GroceryBags": {
        "long_name": "Lab 4 Grocery Bags",
        "sections": {
          "Placeholder": {}
        }
      },
      "SWDesignAndDataStructs/Project2": {
        "long_name": "Project 2",
        "sections": {
          "Placeholder": {}
        }
      },
      "SWDesignAndDataStructs/Lab4GroceryBagsPost": {
        "long_name": "Lab 4 Grocery Bags Post Lab",
        "sections": {
          "Placeholder": {}
        }
      },
      "SWDesignAndDataStructs/KnowledgePracticeMod4": {
        "long_name": "Knowledge Practice 4",
        "sections": {
          "Placeholder": {}
        }
      }
    },
    "Efficiency, Stacks": {
      "SWDesignAndDataStructs/ContentEfficiency": {
        "long_name": "Efficiency",
        "sections": {
          "Objectives": {},
          "Interactive: Intro to Algorithmic Efficiency": {},
          "Checkpoint 1": {
            "EfficiencyCheckpoint1Summ": {
              "long_name": "Checkpoint 1",
              "required": true,
              "points": 6,
              "type": "ka",
              "av_address": "Exercises/SWDesignAndDataStructs/EfficiencyCheckpoint1Summ.html",
              "mod_name": "ContentEfficiency",
              "threshold": 3
            }
          },
          "Interactive: Efficiency of Summation Algorithms": {},
          "Checkpoint 2": {
            "EfficiencyCheckpoint2Summ": {
              "long_name": "Checkpoint 2",
              "required": true,
              "points": 6,
              "type": "ka",
              "av_address": "Exercises/SWDesignAndDataStructs/EfficiencyCheckpoint2Summ.html",
              "mod_name": "ContentEfficiency",
              "threshold": 3
            }
          },
          "Interactive: Efficiency of Bag Methods": {}
        }
      },
      "SWDesignAndDataStructs/ContentStacks": {
        "long_name": "Stacks",
        "sections": {
          "Objectives": {},
          "Interactive: Introduction to Stacks": {},
          "Checkpoint 1": {
            "StacksCheckpoint1Summ": {
              "long_name": "Checkpoint 1",
              "required": true,
              "points": 4,
              "type": "ka",
              "av_address": "Exercises/SWDesignAndDataStructs/StacksCheckpoint1Summ.html",
              "mod_name": "ContentStacks",
              "threshold": 2
            }
          },
          "Interactive: Stack Memory Example": {},
          "Checkpoint 2": {
            "StacksCheckpoint2Summ": {
              "long_name": "Checkpoint 2",
              "required": true,
              "points": 6,
              "type": "ka",
              "av_address": "Exercises/SWDesignAndDataStructs/StacksCheckpoint2Summ.html",
              "mod_name": "ContentStacks",
              "threshold": 3
            }
          },
          "Stacks Array-Based Design": {},
          "Checkpoint 3": {
            "StacksCheckpoint3Summ": {
              "long_name": "Checkpoint 3",
              "required": true,
              "points": 8,
              "type": "ka",
              "av_address": "Exercises/SWDesignAndDataStructs/StacksCheckpoint3Summ.html",
              "mod_name": "ContentStacks",
              "threshold": 4
            }
          },
          "Stacks Array Implementation": {},
          "Stacks Linked Chain Implementation": {},
          "Checkpoint 4": {
            "StacksCheckpoint4Summ": {
              "long_name": "Checkpoint 4",
              "required": true,
              "points": 2,
              "type": "ka",
              "av_address": "Exercises/SWDesignAndDataStructs/StacksCheckpoint4Summ.html",
              "mod_name": "ContentStacks",
              "threshold": 1
            }
          },
          "Programming Practice: LinkedStacks": {
            "learning_tool": "code-workout",
            "resource_type": "external_assignment",
            "resource_name": "Programming Practice: LinkedStacks",
            "long_name": "Programming Practice: LinkedStacks",
            "enable_scrolling": "True",
            "frame_width": "1200",
            "frame_height": "900",
            "partial_credit": "True",
            "points": 10,
            "workout_id": "1912",
            "type": "extr",
            "mod_name": "ContentStacks",
            "threshold": 2
          }
        }
      },
      "SWDesignAndDataStructs/Lab5IceCreamCone": {
        "long_name": "Lab 5 Ice Creme Cone",
        "sections": {
          "Placeholder": {}
        }
      },
      "SWDesignAndDataStructs/Lab5IceCreamConePost": {
        "long_name": "Lab 5 Ice Creme Cone Post Lab",
        "sections": {
          "Placeholder": {}
        }
      },
      "SWDesignAndDataStructs/KnowledgePracticeMod5": {
        "long_name": "Knowledge Practice 5",
        "sections": {
          "Placeholder": {}
        }
      },
      "SWDesignAndDataStructs/ProgrammingPracticeMod5": {
        "long_name": "Programming Practice 5",
        "sections": {
          "Placeholder": {}
        }
      }
    },
    "Ethics and Design": {
      "SWDesignAndDataStructs/ContentEthics": {
        "long_name": "Ethics",
        "sections": {
          "Objectives": {},
          "Interactive: Introduction to Ethics Video": {},
          "Checkpoint 1": {
            "EthicsCheckpoint1Summ": {
              "long_name": "Checkpoint 1",
              "required": true,
              "points": 4,
              "type": "ka",
              "av_address": "Exercises/SWDesignAndDataStructs/EthicsCheckpoint1Summ.html",
              "mod_name": "ContentEthics",
              "threshold": 2
            }
          },
          "Interactive: The ACM Code of Ethics": {},
          "Checkpoint 2": {
            "EthicsCheckpoint2ASumm": {
              "long_name": "Checkpoint 2A",
              "required": true,
              "points": 2,
              "type": "ka",
              "av_address": "Exercises/SWDesignAndDataStructs/EthicsCheckpoint2ASumm.html",
              "mod_name": "ContentEthics",
              "threshold": 1
            },
            "EthicsCheckpoint2BSumm": {
              "long_name": "Checkpoint 2B",
              "required": true,
              "points": 6,
              "type": "ka",
              "av_address": "Exercises/SWDesignAndDataStructs/EthicsCheckpoint2BSumm.html",
              "mod_name": "ContentEthics",
              "threshold": 3
            }
          },
          "Interactive: The Eight Key Questions (8KQ)": {},
          "Checkpoint 3": {
            "EthicsCheckpoint3Summ": {
              "long_name": "Checkpoint 3",
              "required": true,
              "points": 6,
              "type": "ka",
              "av_address": "Exercises/SWDesignAndDataStructs/EthicsCheckpoint3Summ.html",
              "mod_name": "ContentEthics",
              "threshold": 3
            }
          },
          "Explore the Moral Machine": {}
        }
      },
      "SWDesignAndDataStructs/ContentDesignMVC": {
        "long_name": "Software Design and MVC",
        "sections": {
          "Objectives": {},
          "Interactive: Introduction to Software Design": {},
          "Functional and non-functional requirements": {},
          "Checkpoint 1": {
            "DesignCheckpoint1Summ": {
              "long_name": "Checkpoint 1",
              "required": true,
              "points": 6,
              "type": "ka",
              "av_address": "Exercises/SWDesignAndDataStructs/DesignCheckpoint1Summ.html",
              "mod_name": "ContentDesignMVC",
              "threshold": 3
            }
          },
          "Identifying classes, fields, and methods": {},
          "Design Activity: Case Study e-Commerce solution (online storefront) for ABC Ltd": {},
          "Identifying relationships, hierarchies, and opportunities for reuse": {},
          "Design Activity: Determine Relationships between Classes": {},
          "Checkpoint 2": {
            "DesignCheckpoint2Summ": {
              "long_name": "Checkpoint 2",
              "required": true,
              "points": 10,
              "type": "ka",
              "av_address": "Exercises/SWDesignAndDataStructs/DesignCheckpoint2Summ.html",
              "mod_name": "ContentDesignMVC",
              "threshold": 5
            }
          },
          "Intro to Design Patterns and MVC": {},
          "Interactive: MVC and Observer Video": {},
          "MVC Example AddressBook": {},
          "Design Review: Case Study - e-Commerce solution (online storefront) for ABC Ltd.": {},
          "Design Review: Case Study - Vending Machine": {}
        }
      },
      "SWDesignAndDataStructs/Lab6ArrayStack": {
        "long_name": "Lab 6 Array Stack",
        "sections": {
          "Placeholder": {}
        }
      },
      "SWDesignAndDataStructs/Lab6ArrayStackPost": {
        "long_name": "Lab 6 Array Stack Post Lab",
        "sections": {
          "Placeholder": {}
        }
      },
      "SWDesignAndDataStructs/EthicsAssignment": {
        "long_name": "Ethics Assignment",
        "sections": {
          "Placeholder": {}
        }
      },
      "SWDesignAndDataStructs/DesignAssignment": {
        "long_name": "Design Assignment",
        "sections": {
          "Placeholder": {}
        }
      },
      "SWDesignAndDataStructs/KnowledgePracticeMod6": {
        "long_name": "Knowledge Practice 6",
        "sections": {
          "Placeholder": {}
        }
      },
      "SWDesignAndDataStructs/ProgrammingPracticeMod6": {
        "long_name": "Programming Practice 6",
        "sections": {
          "Placeholder": {}
        }
      }
    },
    "Recursion": {
      "SWDesignAndDataStructs/Project3": {
        "long_name": "Project 3",
        "sections": {
          "Placeholder": {}
        }
      },
      "SWDesignAndDataStructs/Quiz2Info": {
        "long_name": "Assessment 2 Info",
        "sections": {
          "Placeholder": {}
        }
      },
      "SWDesignAndDataStructs/ContentRecursion": {
        "long_name": "Recursion",
        "sections": {
          "Objectives": {},
          "Introduction to Recursion": {},
          "Checkpoint 1": {
            "RecursionCheckpoint1Summ": {
              "long_name": "Checkpoint 1",
              "required": true,
              "points": 10,
              "type": "ka",
              "av_address": "Exercises/SWDesignAndDataStructs/RecursionCheckpoint1Summ.html",
              "mod_name": "ContentRecursion",
              "threshold": 5
            }
          },
          "Interactive: More Recursion : Factorial Examples": {},
          "Programming Practice: Recursion 1": {
            "learning_tool": "code-workout",
            "resource_type": "external_assignment",
            "resource_name": "Programming Practice: Recursion 1",
            "long_name": "Programming Practice: Recursion 1",
            "enable_scrolling": "True",
            "frame_width": "1200",
            "frame_height": "900",
            "partial_credit": "True",
            "points": 40,
            "workout_id": "1916",
            "type": "extr",
            "mod_name": "ContentRecursion",
            "threshold": 8
          },
          "Interactive: Recursion on Arrays: Display an Array": {},
          "Checkpoint 2": {
            "RecursionCheckpoint2Summ": {
              "long_name": "Checkpoint 2",
              "required": true,
              "points": 10,
              "type": "ka",
              "av_address": "Exercises/SWDesignAndDataStructs/RecursionCheckpoint2Summ.html",
              "mod_name": "ContentRecursion",
              "threshold": 5
            }
          },
          "Interactive: Recursion on Arrays: Display the Middle of an Array": {},
          "Checkpoint 3": {
            "RecursionCheckpoint3Summ": {
              "long_name": "Checkpoint 3",
              "required": true,
              "points": 4,
              "type": "ka",
              "av_address": "Exercises/SWDesignAndDataStructs/RecursionCheckpoint3Summ.html",
              "mod_name": "ContentRecursion",
              "threshold": 2
            }
          },
          "Programming Practice: Recursion 2": {
            "learning_tool": "code-workout",
            "resource_type": "external_assignment",
            "resource_name": "Programming Practice: Recursion 2",
            "long_name": "Programming Practice: Recursion 2",
            "enable_scrolling": "True",
            "frame_width": "1200",
            "frame_height": "900",
            "partial_credit": "True",
            "points": 15,
            "workout_id": "1917",
            "type": "extr",
            "mod_name": "ContentRecursion",
            "threshold": 3
          },
          "Interactive: Recursion on Linked Chains": {},
          "Interactive: Tower of Hanoi": {},
          "Checkpoint 4": {
            "RecursionCheckpoint4Summ": {
              "long_name": "Checkpoint 4",
              "required": true,
              "points": 4,
              "type": "ka",
              "av_address": "Exercises/SWDesignAndDataStructs/RecursionCheckpoint4Summ.html",
              "mod_name": "ContentRecursion",
              "threshold": 2
            }
          },
          "Interactive: Recursion Wrap Up": {},
          "Programming Practice: Recursion 3": {
            "learning_tool": "code-workout",
            "resource_type": "external_assignment",
            "resource_name": "Programming Practice: Recursion 3",
            "long_name": "Programming Practice: Recursion 3",
            "enable_scrolling": "True",
            "frame_width": "1200",
            "frame_height": "900",
            "partial_credit": "True",
            "points": 5,
            "workout_id": "1918",
            "type": "extr",
            "mod_name": "ContentRecursion",
            "threshold": 1
          },
          "Forward Flow Tracing Exercises": {
            "RecTraceSummFwdFlow": {
              "long_name": "Recursion Tracing Exercises Set 1",
              "required": true,
              "points": 2,
              "type": "ka",
              "av_address": "Exercises/RecurTutor/RecTraceSummFwdFlow.html",
              "mod_name": "ContentRecursion",
              "threshold": 1
            }
          },
          "Backward Flow Tracing Exercises": {
            "RecTraceSummbckwrdFlow": {
              "long_name": "Recursion Tracing Exercises Set 2",
              "required": true,
              "points": 2,
              "type": "ka",
              "av_address": "Exercises/RecurTutor/RecTraceSummbckwrdFlow.html",
              "mod_name": "ContentRecursion",
              "threshold": 1
            }
          },
          "Find Error Tracing Exercises": {
            "RecTraceSummFuncErr": {
              "long_name": "Recursion Tracing Exercises Set 3",
              "required": true,
              "points": 2,
              "type": "ka",
              "av_address": "Exercises/RecurTutor/RecTraceSummFuncErr.html",
              "mod_name": "ContentRecursion",
              "threshold": 1
            }
          },
          "Two Recursive Calls Tracing Exercises": {
            "RecTraceSummTwoRC": {
              "long_name": "Recursion Tracing Exercises Set 4",
              "required": true,
              "points": 2,
              "type": "ka",
              "av_address": "Exercises/RecurTutor/RecTraceSummTwoRC.html",
              "mod_name": "ContentRecursion",
              "threshold": 1
            }
          },
          "How Many Times Tracing Exercises": {
            "RecTraceSummHowmany": {
              "long_name": "Recursion Tracing Exercises Set 5",
              "required": true,
              "points": 2,
              "type": "ka",
              "av_address": "Exercises/RecurTutor/RecTraceSummHowmany.html",
              "mod_name": "ContentRecursion",
              "threshold": 1
            }
          },
          "Harder Tracing Exercises": {
            "RecTraceSummHard": {
              "long_name": "Recursion Tracing Exercises Set 6",
              "required": true,
              "points": 2,
              "type": "ka",
              "av_address": "Exercises/RecurTutor/RecTraceSummHard.html",
              "mod_name": "ContentRecursion",
              "threshold": 1
            }
          }
        }
      },
      "SWDesignAndDataStructs/ContentMidSemester": {
        "long_name": "Midterm Checkpoint",
        "sections": {
          "Placeholder": {}
        }
      },
      "SWDesignAndDataStructs/KnowledgePracticeMod7": {
        "long_name": "Knowledge Practice 7",
        "sections": {
          "Placeholder": {}
        }
      },
      "SWDesignAndDataStructs/Quiz2": {
        "long_name": "Assessment 2 Info",
        "sections": {
          "Placeholder": {}
        }
      }
    },
    "Queues": {
      "SWDesignAndDataStructs/ContentQueues": {
        "long_name": "Queues",
        "sections": {
          "Objectives": {},
          "Interactive: Introduction to Queues": {},
          "Checkpoint 1": {
            "QueueCheckpoint1Summ": {
              "long_name": "Checkpoint 1",
              "required": true,
              "points": 4,
              "type": "ka",
              "av_address": "Exercises/SWDesignAndDataStructs/QueueCheckpoint1Summ.html",
              "mod_name": "ContentQueues",
              "threshold": 2
            }
          },
          "Programming Practice: Queues 1": {
            "learning_tool": "code-workout",
            "resource_type": "external_assignment",
            "resource_name": "Programming Practice: Queues 1",
            "long_name": "Programming Practice: Queues 1",
            "enable_scrolling": "True",
            "frame_width": "1200",
            "frame_height": "900",
            "partial_credit": "True",
            "points": 15,
            "workout_id": "1920",
            "type": "extr",
            "mod_name": "ContentQueues",
            "threshold": 3
          },
          "Interactive: Linked Queues Intro and Enqueue": {},
          "Checkpoint 2": {
            "QueueCheckpoint2Summ": {
              "long_name": "Checkpoint 2",
              "required": true,
              "points": 6,
              "type": "ka",
              "av_address": "Exercises/SWDesignAndDataStructs/QueueCheckpoint2Summ.html",
              "mod_name": "ContentQueues",
              "threshold": 3
            }
          },
          "Interactive: Linked Queues Removing and More (Dequeue and Other Methods)": {},
          "Checkpoint 3": {
            "QueueCheckpoint3Summ": {
              "long_name": "Checkpoint 3",
              "required": true,
              "points": 6,
              "type": "ka",
              "av_address": "Exercises/SWDesignAndDataStructs/QueueCheckpoint3Summ.html",
              "mod_name": "ContentQueues",
              "threshold": 3
            }
          },
          "Interactive: Introduction to Deque": {},
          "Checkpoint 4": {
            "QueueCheckpoint4Summ": {
              "long_name": "Checkpoint 4",
              "required": true,
              "points": 8,
              "type": "ka",
              "av_address": "Exercises/SWDesignAndDataStructs/QueueCheckpoint4Summ.html",
              "mod_name": "ContentQueues",
              "threshold": 4
            }
          },
          "Interactive: Deque Removing and Wrap Up": {},
          "Checkpoint 5": {
            "QueueCheckpoint5Summ": {
              "long_name": "Checkpoint 5",
              "required": true,
              "points": 6,
              "type": "ka",
              "av_address": "Exercises/SWDesignAndDataStructs/QueueCheckpoint5Summ.html",
              "mod_name": "ContentQueues",
              "threshold": 3
            }
          },
          "Interactive: ArrayQueue: Array Implementation of Queues": {},
          "Checkpoint 6": {
            "QueueCheckpoint6Summ": {
              "long_name": "Checkpoint 6",
              "required": true,
              "points": 4,
              "type": "ka",
              "av_address": "Exercises/SWDesignAndDataStructs/QueueCheckpoint6Summ.html",
              "mod_name": "ContentQueues",
              "threshold": 2
            }
          },
          "Interactive: ArrayQueue: One Unused Location": {},
          "Checkpoint 7": {
            "QueueCheckpoint7Summ": {
              "long_name": "Checkpoint 7",
              "required": true,
              "points": 4,
              "type": "ka",
              "av_address": "Exercises/SWDesignAndDataStructs/QueueCheckpoint7Summ.html",
              "mod_name": "ContentQueues",
              "threshold": 2
            }
          },
          "Interactive: ArrayQueue: Ensure Capacity": {},
          "Checkpoint 8": {
            "QueueCheckpoint8Summ": {
              "long_name": "Checkpoint 8",
              "required": true,
              "points": 4,
              "type": "ka",
              "av_address": "Exercises/SWDesignAndDataStructs/QueueCheckpoint8Summ.html",
              "mod_name": "ContentQueues",
              "threshold": 2
            }
          },
          "Interactive: ArrayQueue WrapUp": {},
          "Programming Practice: Queues 2": {
            "learning_tool": "code-workout",
            "resource_type": "external_assignment",
            "resource_name": "Programming Practice: Queues 2",
            "long_name": "Programming Practice: Queues 2",
            "enable_scrolling": "True",
            "frame_width": "1200",
            "frame_height": "900",
            "partial_credit": "True",
            "points": 10,
            "workout_id": "1921",
            "type": "extr",
            "mod_name": "ContentQueues",
            "threshold": 2
          }
        }
      },
      "SWDesignAndDataStructs/Lab8Carrano": {
        "long_name": "Lab 8 Carrano",
        "sections": {
          "Placeholder": {}
        }
      },
      "SWDesignAndDataStructs/Lab8CarranoPost": {
        "long_name": "Lab 8 Carrano Post Lab",
        "sections": {
          "Placeholder": {}
        }
      },
      "SWDesignAndDataStructs/KnowledgePracticeMod8": {
        "long_name": "Knowledge Practice 8",
        "sections": {
          "Placeholder": {}
        }
      },
      "SWDesignAndDataStructs/ProgrammingPracticeMod8": {
        "long_name": "Programming Practice 8",
        "sections": {
          "Placeholder": {}
        }
      }
    },
    "Lists and Generics": {
      "SWDesignAndDataStructs/ContentLists": {
        "long_name": "Lists",
        "sections": {
          "Overview & Objectives": {},
          "Introduction to Lists": {},
          "Checkpoint 1": {
            "ListsCheckpoint1Summ": {
              "long_name": "Checkpoint 1",
              "required": true,
              "points": 4,
              "type": "ka",
              "av_address": "Exercises/SWDesignAndDataStructs/ListsCheckpoint1Summ.html",
              "mod_name": "ContentLists",
              "threshold": 2
            }
          },
          "Interactive: LinkedList Add() Implementation": {},
          "Checkpoint 2": {
            "ListsCheckpoint2Summ": {
              "long_name": "Checkpoint 2",
              "required": true,
              "points": 4,
              "type": "ka",
              "av_address": "Exercises/SWDesignAndDataStructs/ListsCheckpoint2Summ.html",
              "mod_name": "ContentLists",
              "threshold": 2
            }
          },
          "Interactive: Tracing Add() with Debugger": {},
          "Interactive: LinkedList Remove()": {},
          "Checkpoint 3": {
            "ListsCheckpoint3Summ": {
              "long_name": "Checkpoint 3",
              "required": true,
              "points": 4,
              "type": "ka",
              "av_address": "Exercises/SWDesignAndDataStructs/ListsCheckpoint3Summ.html",
              "mod_name": "ContentLists",
              "threshold": 2
            }
          },
          "Programming Practice: Lists 1": {
            "learning_tool": "code-workout",
            "resource_type": "external_assignment",
            "resource_name": "Programming Practice: Lists 1",
            "long_name": "Programming Practice: Lists 1",
            "enable_scrolling": "True",
            "frame_width": "1200",
            "frame_height": "900",
            "partial_credit": "True",
            "points": 15,
            "workout_id": "1922",
            "type": "extr",
            "mod_name": "ContentLists",
            "threshold": 3
          },
          "Interactive: LinkedList Details and Options": {},
          "Checkpoint 4": {
            "ListsCheckpoint4Summ": {
              "long_name": "Checkpoint 4",
              "required": true,
              "points": 4,
              "type": "ka",
              "av_address": "Exercises/SWDesignAndDataStructs/ListsCheckpoint4Summ.html",
              "mod_name": "ContentLists",
              "threshold": 2
            }
          },
          "Interactive: An Array Implementation of a List": {},
          "Checkpoint 5": {
            "ListsCheckpoint5Summ": {
              "long_name": "Checkpoint 5",
              "required": true,
              "points": 4,
              "type": "ka",
              "av_address": "Exercises/SWDesignAndDataStructs/ListsCheckpoint5Summ.html",
              "mod_name": "ContentLists",
              "threshold": 2
            }
          },
          "Interactive: Efficiency of List Implementations": {},
          "Checkpoint 6": {
            "ListsCheckpoint6Summ": {
              "long_name": "Checkpoint 6",
              "required": true,
              "points": 4,
              "type": "ka",
              "av_address": "Exercises/SWDesignAndDataStructs/ListsCheckpoint6Summ.html",
              "mod_name": "ContentLists",
              "threshold": 2
            }
          },
          "Programming Practice: Lists 2": {
            "learning_tool": "code-workout",
            "resource_type": "external_assignment",
            "resource_name": "Programming Practice: Lists 2",
            "long_name": "Programming Practice: Lists 2",
            "enable_scrolling": "True",
            "frame_width": "1200",
            "frame_height": "900",
            "partial_credit": "True",
            "points": 20,
            "workout_id": "1923",
            "type": "extr",
            "mod_name": "ContentLists",
            "threshold": 4
          }
        }
      },
      "SWDesignAndDataStructs/ContentGenerics2": {
        "long_name": "More on Generics",
        "sections": {
          "Objectives": {},
          "Interactive: More on Generics": {},
          "Interactive: Reflecting on Generics": {},
          "Sample Declarations of Generic Methods Explained": {},
          "Checkpoint 1": {
            "Generics2Checkpoint1Summ": {
              "long_name": "Checkpoint 1",
              "required": true,
              "points": 6,
              "type": "ka",
              "av_address": "Exercises/SWDesignAndDataStructs/Generics2Checkpoint1Summ.html",
              "mod_name": "ContentGenerics2",
              "threshold": 3
            }
          },
          "Interactive: Bounded Wildcard Examples": {},
          "Programming Practice: Generics 1": {
            "learning_tool": "code-workout",
            "resource_type": "external_assignment",
            "resource_name": "Programming Practice: Generics 1",
            "long_name": "Programming Practice: Generics 1",
            "enable_scrolling": "True",
            "frame_width": "1200",
            "frame_height": "900",
            "partial_credit": "True",
            "points": 10,
            "workout_id": "1919",
            "type": "extr",
            "mod_name": "ContentGenerics2",
            "threshold": 2
          }
        }
      },
      "SWDesignAndDataStructs/Lab9SingleLink": {
        "long_name": "Lab 9 Single Link",
        "sections": {
          "Placeholder": {}
        }
      },
      "SWDesignAndDataStructs/Project4": {
        "long_name": "Project 4",
        "sections": {
          "Placeholder": {}
        }
      },
      "SWDesignAndDataStructs/Project4Discussion": {
        "long_name": "Project 4 Ethics Discussion",
        "sections": {
          "Placeholder": {}
        }
      },
      "SWDesignAndDataStructs/KnowledgePracticeMod9": {
        "long_name": "Knowledge Practice 9",
        "sections": {
          "Placeholder": {}
        }
      },
      "SWDesignAndDataStructs/ProgrammingPracticeMod9": {
        "long_name": "Programming Practice 9",
        "sections": {
          "Placeholder": {}
        }
      }
    },
    "Comparing, Sorting and Iterators": {
      "SWDesignAndDataStructs/Quiz3Info": {
        "long_name": "Assessment 3 Info",
        "sections": {
          "Placeholder": {}
        }
      },
      "SWDesignAndDataStructs/ContentComparingAndSorting": {
        "long_name": "Comparing and Sorting",
        "sections": {
          "Objectives": {},
          "Introduction to Ordering, Comparing, and Sorting": {},
          "Checkpoint 1": {
            "CompSortCheckpoint1Summ": {
              "long_name": "Checkpoint 1",
              "required": true,
              "points": 4,
              "type": "ka",
              "av_address": "Exercises/SWDesignAndDataStructs/CompSortCheckpoint1Summ.html",
              "mod_name": "ContentComparingAndSorting",
              "threshold": 2
            }
          },
          "Interactive: Introduction to Sorting": {},
          "Checkpoint 2": {
            "CompSortCheckpoint2Summ": {
              "long_name": "Checkpoint 2",
              "required": true,
              "points": 4,
              "type": "ka",
              "av_address": "Exercises/SWDesignAndDataStructs/CompSortCheckpoint2Summ.html",
              "mod_name": "ContentComparingAndSorting",
              "threshold": 2
            }
          },
          "Interactive: Selection Sort": {},
          "Checkpoint 3": {
            "CompSortCheckpoint3Summ": {
              "long_name": "Checkpoint 3",
              "required": true,
              "points": 4,
              "type": "ka",
              "av_address": "Exercises/SWDesignAndDataStructs/CompSortCheckpoint3Summ.html",
              "mod_name": "ContentComparingAndSorting",
              "threshold": 2
            },
            "SelsortPRO": {
              "long_name": "Selection Sort Proficiency Exercise",
              "required": true,
              "points": 6.0,
              "type": "ka",
              "av_address": "Exercises/Sorting/SelsortPRO.html",
              "mod_name": "ContentComparingAndSorting",
              "threshold": 3
            }
          },
          "Insertion Sort with an Array": {},
          "Checkpoint 4": {
            "CompSortCheckpoint4Summ": {
              "long_name": "Checkpoint 4",
              "required": true,
              "points": 4,
              "type": "ka",
              "av_address": "Exercises/SWDesignAndDataStructs/CompSortCheckpoint4Summ.html",
              "mod_name": "ContentComparingAndSorting",
              "threshold": 2
            },
            "InssortPRO": {
              "long_name": "Insertion Sort Proficiency Exercise",
              "required": true,
              "points": 6.0,
              "type": "ka",
              "av_address": "Exercises/Sorting/InssortPRO.html",
              "mod_name": "ContentComparingAndSorting",
              "threshold": 3
            }
          },
          "Insertion Sort with a Linked Chain": {},
          "Checkpoint 5": {
            "CompSortCheckpoint5Summ": {
              "long_name": "Checkpoint 5",
              "required": true,
              "points": 4,
              "type": "ka",
              "av_address": "Exercises/SWDesignAndDataStructs/CompSortCheckpoint5Summ.html",
              "mod_name": "ContentComparingAndSorting",
              "threshold": 2
            }
          },
          "Programming Practice: Insertion Sort": {
            "learning_tool": "code-workout",
            "resource_type": "external_assignment",
            "resource_name": "Programming Practice: Insertion Sort",
            "long_name": "Programming Practice: Insertion Sort",
            "enable_scrolling": "True",
            "frame_width": "1200",
            "frame_height": "900",
            "partial_credit": "True",
            "points": 15,
            "workout_id": "1925",
            "type": "extr",
            "mod_name": "ContentComparingAndSorting",
            "threshold": 3
          },
          "Introduction to Comparators": {},
          "Programming Practice: Comparators": {
            "learning_tool": "code-workout",
            "resource_type": "external_assignment",
            "resource_name": "Programming Practice: Comparators",
            "long_name": "Programming Practice: Comparators",
            "enable_scrolling": "True",
            "frame_width": "1200",
            "frame_height": "900",
            "partial_credit": "True",
            "points": 10,
            "workout_id": "1926",
            "type": "extr",
            "mod_name": "ContentComparingAndSorting",
            "threshold": 2
          }
        }
      },
      "SWDesignAndDataStructs/ContentIterators": {
        "long_name": "Iterators",
        "sections": {
          "Objectives": {},
          "Introduction to Iterators": {},
          "Checkpoint 1": {
            "IteratorsCheckpoint1Summ": {
              "long_name": "Checkpoint 1",
              "required": true,
              "points": 10,
              "type": "ka",
              "av_address": "Exercises/SWDesignAndDataStructs/IteratorsCheckpoint1Summ.html",
              "mod_name": "ContentIterators",
              "threshold": 5
            }
          },
          "Programming Using the Iterable Interface": {},
          "Checkpoint 2": {
            "IteratorsCheckpoint2Summ": {
              "long_name": "Checkpoint 2",
              "required": true,
              "points": 4,
              "type": "ka",
              "av_address": "Exercises/SWDesignAndDataStructs/IteratorsCheckpoint2Summ.html",
              "mod_name": "ContentIterators",
              "threshold": 2
            }
          },
          "Programming Using Iterators": {},
          "Checkpoint 3": {
            "IteratorsCheckpoint3Summ": {
              "long_name": "Checkpoint 3",
              "required": true,
              "points": 10,
              "type": "ka",
              "av_address": "Exercises/SWDesignAndDataStructs/IteratorsCheckpoint3Summ.html",
              "mod_name": "ContentIterators",
              "threshold": 5
            }
          },
          "Iterator Design Decisions": {},
          "Inner Iterator for ex11.3-Iterator": {},
          "Programming Practice: Iterators": {
            "learning_tool": "code-workout",
            "resource_type": "external_assignment",
            "resource_name": "Programming Practice: Iterators",
            "long_name": "Programming Practice: Iterators",
            "enable_scrolling": "True",
            "frame_width": "1200",
            "frame_height": "900",
            "partial_credit": "True",
            "points": 10,
            "workout_id": "1924",
            "type": "extr",
            "mod_name": "ContentIterators",
            "threshold": 2
          },
          "Scanners Implement Iterator<String>": {}
        }
      },
      "SWDesignAndDataStructs/Lab10DoubleLink": {
        "long_name": "Lab 10 Double Link",
        "sections": {
          "Placeholder": {}
        }
      },
      "SWDesignAndDataStructs/Lab10DoubleLinkPost": {
        "long_name": "Lab 10 Double Link Post Lab",
        "sections": {
          "Placeholder": {}
        }
      },
      "SWDesignAndDataStructs/Quiz3": {
        "long_name": "Assessment 3 Info",
        "sections": {
          "Placeholder": {}
        }
      },
      "SWDesignAndDataStructs/KnowledgePracticeMod10": {
        "long_name": "Knowledge Practice 10",
        "sections": {
          "Placeholder": {}
        }
      }
    },
    "Sorted Lists": {
      "SWDesignAndDataStructs/Project4Milestone": {
        "long_name": "Project 4 Milestone",
        "sections": {
          "Placeholder": {}
        }
      },
      "SWDesignAndDataStructs/ContentSortedLists": {
        "long_name": "Sorted Lists",
        "sections": {
          "Objectives": {},
          "Thinking about Order vs Sorted Order": {},
          "List ADTs": {},
          "Sorted ListInterface": {},
          "Checkpoint 1": {
            "SortedListsCheckpoint1Summ": {
              "long_name": "Checkpoint 1",
              "required": true,
              "points": 4,
              "type": "ka",
              "av_address": "Exercises/SWDesignAndDataStructs/SortedListsCheckpoint1Summ.html",
              "mod_name": "ContentSortedLists",
              "threshold": 2
            }
          },
          "Sorted List ADT Implementation Approaches": {},
          "Implementing a Sorted List ADT from Scratch": {},
          "Implementing a Sorted List ADT Using Composition": {},
          "Implementing a Sorted List ADT Using Inheritance": {},
          "Checkpoint 2": {
            "SortedListsCheckpoint2Summ": {
              "long_name": "Checkpoint 2",
              "required": true,
              "points": 8,
              "type": "ka",
              "av_address": "Exercises/SWDesignAndDataStructs/SortedListsCheckpoint2Summ.html",
              "mod_name": "ContentSortedLists",
              "threshold": 4
            }
          }
        }
      },
      "SWDesignAndDataStructs/Project5": {
        "long_name": "Project 5",
        "sections": {
          "Placeholder": {}
        }
      },
      "SWDesignAndDataStructs/Project5GroupForming": {
        "long_name": "Project 5 Group Forming",
        "sections": {
          "Placeholder": {}
        }
      },
      "SWDesignAndDataStructs/KnowledgePracticeMod11": {
        "long_name": "Knowledge Practice 11",
        "sections": {
          "Placeholder": {}
        }
      }
    },
    "Project ": {
      "SWDesignAndDataStructs/Project5DesignSubmission": {
        "long_name": "Project 5 Design Submission",
        "sections": {
          "Placeholder": {}
        }
      },
      "SWDesignAndDataStructs/Project5Milestone": {
        "long_name": "Project 5 Milestone",
        "sections": {
          "Placeholder": {}
        }
      }
    },
    "Cloning and Trees ": {
      "SWDesignAndDataStructs/ContentCloning": {
        "long_name": "Cloning",
        "sections": {
          "Objectives": {},
          "Interactive: Cloning Concepts Video": {},
          "Checkpoint 1": {
            "CloningCheckpoint1Summ": {
              "long_name": "Checkpoint 1",
              "required": true,
              "points": 4,
              "type": "ka",
              "av_address": "Exercises/SWDesignAndDataStructs/CloningCheckpoint1Summ.html",
              "mod_name": "ContentCloning",
              "threshold": 2
            }
          },
          "Interactive: Programming Cloning": {}
        }
      },
      "SWDesignAndDataStructs/ContentTrees": {
        "long_name": "Trees",
        "sections": {
          "Objectives": {},
          "Interactive: Introduction to Trees": {},
          "Checkpoint 1": {
            "TreesCheckpoint1Summ": {
              "long_name": "Checkpoint 1",
              "required": true,
              "points": 4,
              "type": "ka",
              "av_address": "Exercises/SWDesignAndDataStructs/TreesCheckpoint1Summ.html",
              "mod_name": "ContentTrees",
              "threshold": 2
            }
          },
          "Interactive: Binary Trees": {},
          "Checkpoint 2": {
            "TreesCheckpoint2Summ": {
              "long_name": "Checkpoint 2",
              "required": true,
              "points": 6,
              "type": "ka",
              "av_address": "Exercises/SWDesignAndDataStructs/TreesCheckpoint2Summ.html",
              "mod_name": "ContentTrees",
              "threshold": 3
            }
          },
          "Interactive: Binary Tree Traversals": {},
          "Checkpoint 3": {
            "TreesCheckpoint3Summ": {
              "long_name": "Checkpoint 3",
              "required": true,
              "points": 6,
              "type": "ka",
              "av_address": "Exercises/SWDesignAndDataStructs/TreesCheckpoint3Summ.html",
              "mod_name": "ContentTrees",
              "threshold": 3
            }
          },
          "Interactive: Programming Binary Trees": {}
        }
      },
      "SWDesignAndDataStructs/Lab13BinaryTrees": {
        "long_name": "Lab 13 Binary Trees",
        "sections": {
          "Placeholder": {}
        }
      },
      "SWDesignAndDataStructs/Project5Discussion": {
        "long_name": "Project 5 Discussion",
        "sections": {
          "Placeholder": {}
        }
      },
      "SWDesignAndDataStructs/KnowledgePracticeMod13": {
        "long_name": "Knowledge Practice 14",
        "sections": {
          "Placeholder": {}
        }
      }
    },
    "Binary Search ": {
      "SWDesignAndDataStructs/Quiz4Info": {
        "long_name": "Assessment 4 Info",
        "sections": {
          "Placeholder": {}
        }
      },
      "SWDesignAndDataStructs/Project5GroupFeedback": {
        "long_name": "Project 5 Group Feedback",
        "sections": {
          "Placeholder": {}
        }
      },
      "SWDesignAndDataStructs/ContentBinarySearch": {
        "long_name": "Binary Search",
        "sections": {
          "Objectives": {},
          "Introduction to Searching": {},
          "Checkpoint 1": {
            "BinarySearchCheckpoint1Summ": {
              "long_name": "Checkpoint 1",
              "required": true,
              "points": 4,
              "type": "ka",
              "av_address": "Exercises/SWDesignAndDataStructs/BinarySearchCheckpoint1Summ.html",
              "mod_name": "ContentBinarySearch",
              "threshold": 2
            }
          },
          "Programming Searching": {},
          "Programming Practice: Binary Search": {
            "learning_tool": "code-workout",
            "resource_type": "external_assignment",
            "resource_name": "Programming Practice: Binary Search",
            "long_name": "Programming Practice: Binary Search",
            "enable_scrolling": "True",
            "frame_width": "1200",
            "frame_height": "900",
            "partial_credit": "True",
            "points": 10,
            "workout_id": "1927",
            "type": "extr",
            "mod_name": "ContentBinarySearch",
            "threshold": 2
          }
        }
      },
      "SWDesignAndDataStructs/ContentBinarySearchTrees": {
        "long_name": "Binary Search Trees",
        "sections": {
          "Objectives": {},
          "Interactive: Introduction to Binary Search Trees": {},
          "Checkpoint 1": {
            "BSTCheckpoint1Summ": {
              "long_name": "Checkpoint 1",
              "required": true,
              "points": 14,
              "type": "ka",
              "av_address": "Exercises/SWDesignAndDataStructs/BSTCheckpoint1Summ.html",
              "mod_name": "ContentBinarySearchTrees",
              "threshold": 7
            }
          },
          "Interactive: Programming Binary Search Trees": {},
          "Checkpoint 2": {
            "BSTCheckpoint2Summ": {
              "long_name": "Checkpoint 2",
              "required": true,
              "points": 10,
              "type": "ka",
              "av_address": "Exercises/SWDesignAndDataStructs/BSTCheckpoint2Summ.html",
              "mod_name": "ContentBinarySearchTrees",
              "threshold": 5
            }
          },
          "Interactive: Adding Binary Search Trees": {},
          "Checkpoint 3": {
            "BSTCheckpoint3Summ": {
              "long_name": "Checkpoint 3",
              "required": true,
              "points": 4,
              "type": "ka",
              "av_address": "Exercises/SWDesignAndDataStructs/BSTCheckpoint3Summ.html",
              "mod_name": "ContentBinarySearchTrees",
              "threshold": 2
            }
          },
          "Interactive: Removing From Binary Search Trees": {},
          "Checkpoint 4": {
            "BSTCheckpoint4Summ": {
              "long_name": "Checkpoint 4",
              "required": true,
              "points": 4,
              "type": "ka",
              "av_address": "Exercises/SWDesignAndDataStructs/BSTCheckpoint4Summ.html",
              "mod_name": "ContentBinarySearchTrees",
              "threshold": 2
            }
          }
        }
      },
      "SWDesignAndDataStructs/Lab14BST": {
        "long_name": "Lab 14 BST",
        "sections": {
          "Placeholder": {}
        }
      },
      "SWDesignAndDataStructs/KnowledgePracticeMod14": {
        "long_name": "Knowledge Practice 14",
        "sections": {
          "Placeholder": {}
        }
      }
    },
    "Review": {
      "SWDesignAndDataStructs/FinalExamInfo": {
        "long_name": "Final Exam",
        "sections": {
          "Placeholder": {}
        }
      },
      "SWDesignAndDataStructs/ContentCoursePerceptions2": {
        "long_name": "MUSIC Survey 2",
        "sections": {
          "Placeholder": {}
        }
      }
    },
    "Reference": {
      "Tutorials/2114_eclipse_examples_setup": {
        "long_name": "Importing and Using Downloaded Examples in Eclipse",
        "sections": {
          "Downloading and importing zip files": {},
          "Downloading and importing standalone Java files": {},
          "Resolving errors from importing a project file": {}
        }
      },
      "Tutorials/2114_junit_tutorial": {
        "long_name": "Writing JUnit Tests with student.TestCase",
        "sections": {
          "Use JUnit": {},
          "Run a JUnit Test": {},
          "Naming Conventions": {},
          "Instance Variables": {},
          "setUp Method": {},
          "tearDown Method (Optional)": {},
          "Code coverage": {},
          "Testing Exceptions": {},
          "General Unit Testing Tips": {},
          "Testing methods by passing null params": {},
          "I/O Testing Tips": {}
        }
      },
      "Tutorials/2114_java_io_tutorial": {
        "long_name": "Java I/O tutorial",
        "sections": {
          "Files and Stream-based Input and Output": {},
          "Basic Input and Output Concepts": {},
          "Opening a Stream for Output": {},
          "Writing to an Output Stream": {},
          "Closing a Stream": {},
          "A Complete Output Example": {},
          "Output with System.out": {},
          "Opening a Stream for Input": {},
          "Reading from an Input Stream": {},
          "A Complete Input Example": {},
          "A Complete Input/Output Example": {},
          "Testing I/O-based Operations": {},
          "Dealing with Exceptions": {}
        }
      },
      "Tutorials/2114_java_commenting": {
        "long_name": "Commenting guidelines",
        "sections": {
          "JavaDoc Comments": {},
          "Describing a Class": {},
          "Documenting a Method": {},
          "Generating Your Documentation": {},
          "Other Comments in Your Code": {},
          "Internal Comments Are the Documentation Technique of Last Resort": {},
          "Redundant Comments Are Worse Than No Comments": {}
        }
      },
      "Tutorials/2114_random_numbers": {
        "long_name": "Tips on Random Numbers",
        "sections": {
          "Generating Random Numbers": {},
          "Testing Random Behaviors": {}
        }
      }
    }
  }
}