Improved comment and added button for generation.
This commit is contained in:
		
							parent
							
								
									ac18001da8
								
							
						
					
					
						commit
						a629b70d8b
					
				| 
						 | 
					@ -1,17 +1,13 @@
 | 
				
			||||||
package nl.andrewlalis.teaching_assistant_assistant;
 | 
					package nl.andrewlalis.teaching_assistant_assistant;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
import nl.andrewlalis.teaching_assistant_assistant.model.Course;
 | 
					 | 
				
			||||||
import nl.andrewlalis.teaching_assistant_assistant.model.repositories.CourseRepository;
 | 
					import nl.andrewlalis.teaching_assistant_assistant.model.repositories.CourseRepository;
 | 
				
			||||||
import nl.andrewlalis.teaching_assistant_assistant.model.repositories.PersonRepository;
 | 
					import nl.andrewlalis.teaching_assistant_assistant.model.repositories.PersonRepository;
 | 
				
			||||||
import nl.andrewlalis.teaching_assistant_assistant.model.repositories.TeamRepository;
 | 
					import nl.andrewlalis.teaching_assistant_assistant.model.repositories.TeamRepository;
 | 
				
			||||||
import nl.andrewlalis.teaching_assistant_assistant.util.sample_data.CourseGenerator;
 | 
					 | 
				
			||||||
import org.springframework.beans.factory.annotation.Autowired;
 | 
					import org.springframework.beans.factory.annotation.Autowired;
 | 
				
			||||||
import org.springframework.boot.CommandLineRunner;
 | 
					import org.springframework.boot.CommandLineRunner;
 | 
				
			||||||
import org.springframework.boot.SpringApplication;
 | 
					import org.springframework.boot.SpringApplication;
 | 
				
			||||||
import org.springframework.boot.autoconfigure.SpringBootApplication;
 | 
					import org.springframework.boot.autoconfigure.SpringBootApplication;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
import java.util.List;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
@SpringBootApplication
 | 
					@SpringBootApplication
 | 
				
			||||||
public class TeachingAssistantAssistantApplication implements CommandLineRunner {
 | 
					public class TeachingAssistantAssistantApplication implements CommandLineRunner {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					@ -32,13 +28,5 @@ public class TeachingAssistantAssistantApplication implements CommandLineRunner
 | 
				
			||||||
	public void run(String... args) throws Exception {
 | 
						public void run(String... args) throws Exception {
 | 
				
			||||||
		System.out.println("Running startup...");
 | 
							System.out.println("Running startup...");
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		// Generate some example courses.
 | 
					 | 
				
			||||||
		CourseGenerator courseGenerator = new CourseGenerator(0, 3, 2, 10, 3);
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
		List<Course> courses = courseGenerator.generateList(100);
 | 
					 | 
				
			||||||
		this.courseRepository.saveAll(courses);
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
		System.out.println("Course count: " + courseRepository.count());
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -20,20 +20,30 @@ public class Courses {
 | 
				
			||||||
        this.courseRepository = courseRepository;
 | 
					        this.courseRepository = courseRepository;
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    /**
 | 
				
			||||||
 | 
					     * Handles requests to get the list of courses.
 | 
				
			||||||
 | 
					     * @param model The view model to populate with data for the template.
 | 
				
			||||||
 | 
					     * @return The name of the template that will be used with the given model to build the view.
 | 
				
			||||||
 | 
					     */
 | 
				
			||||||
    @GetMapping("/courses")
 | 
					    @GetMapping("/courses")
 | 
				
			||||||
    public String get(Model model) {
 | 
					    public String get(Model model) {
 | 
				
			||||||
        model.addAttribute("courses", courseRepository.findAll());
 | 
					        model.addAttribute("courses", courseRepository.findAll());
 | 
				
			||||||
        return "courses";
 | 
					        return "courses";
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    /**
 | 
				
			||||||
 | 
					     * Handles POST requests to this collection of courses. This facilitates the creation of new courses.
 | 
				
			||||||
 | 
					     * @param course The course which has been submitted by a user.
 | 
				
			||||||
 | 
					     * @return The entity view for the course which has just been created.
 | 
				
			||||||
 | 
					     */
 | 
				
			||||||
    @PostMapping(
 | 
					    @PostMapping(
 | 
				
			||||||
            value = "/courses",
 | 
					            value = "/courses",
 | 
				
			||||||
            consumes = "application/json"
 | 
					            consumes = "application/x-www-form-urlencoded"
 | 
				
			||||||
    )
 | 
					    )
 | 
				
			||||||
    public String post(@ModelAttribute Course course) {
 | 
					    public String post(@ModelAttribute Course course) {
 | 
				
			||||||
        System.out.println("Object submitted: " + course);
 | 
					        System.out.println("Object submitted: " + course);
 | 
				
			||||||
        this.courseRepository.save(course);
 | 
					        this.courseRepository.save(course);
 | 
				
			||||||
        return "/courses/created";
 | 
					        return "courses/entity";
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -0,0 +1,24 @@
 | 
				
			||||||
 | 
					package nl.andrewlalis.teaching_assistant_assistant.controllers.courses;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					import nl.andrewlalis.teaching_assistant_assistant.model.Course;
 | 
				
			||||||
 | 
					import nl.andrewlalis.teaching_assistant_assistant.model.repositories.CourseRepository;
 | 
				
			||||||
 | 
					import org.springframework.stereotype.Controller;
 | 
				
			||||||
 | 
					import org.springframework.ui.Model;
 | 
				
			||||||
 | 
					import org.springframework.web.bind.annotation.GetMapping;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					@Controller
 | 
				
			||||||
 | 
					public class Create {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    private CourseRepository courseRepository;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    protected Create(CourseRepository courseRepository) {
 | 
				
			||||||
 | 
					        this.courseRepository = courseRepository;
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    @GetMapping("/courses/create")
 | 
				
			||||||
 | 
					    public String get(Model model) {
 | 
				
			||||||
 | 
					        Course course = new Course("no name", "no code");
 | 
				
			||||||
 | 
					        model.addAttribute("course", course);
 | 
				
			||||||
 | 
					        return "courses/create";
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
| 
						 | 
					@ -9,6 +9,9 @@ import org.springframework.web.bind.annotation.PathVariable;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
import java.util.Optional;
 | 
					import java.util.Optional;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/**
 | 
				
			||||||
 | 
					 * Controller for the course entity, that is, one individual course.
 | 
				
			||||||
 | 
					 */
 | 
				
			||||||
@Controller
 | 
					@Controller
 | 
				
			||||||
public class Entity {
 | 
					public class Entity {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					@ -18,9 +21,16 @@ public class Entity {
 | 
				
			||||||
        this.courseRepository = courseRepository;
 | 
					        this.courseRepository = courseRepository;
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    @GetMapping("/courses/{id}")
 | 
					    /**
 | 
				
			||||||
    public String get(@PathVariable Long id, Model model) {
 | 
					     * Handles get requests to a course with a given code.
 | 
				
			||||||
        Optional<Course> courseOptional = this.courseRepository.findById(id);
 | 
					     * @param code The unique course code used to identify a course entity.
 | 
				
			||||||
 | 
					     * @param model The view model that will be populated with data.
 | 
				
			||||||
 | 
					     * @return The template which will be used in conjunction with the model to build a view.
 | 
				
			||||||
 | 
					     */
 | 
				
			||||||
 | 
					    @GetMapping("/courses/{code}")
 | 
				
			||||||
 | 
					    public String get(@PathVariable String code, Model model) {
 | 
				
			||||||
 | 
					        Optional<Course> courseOptional = this.courseRepository.findByCode(code);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        if (courseOptional.isPresent()) {
 | 
					        if (courseOptional.isPresent()) {
 | 
				
			||||||
            Course course = courseOptional.get();
 | 
					            Course course = courseOptional.get();
 | 
				
			||||||
            model.addAttribute("course", course);
 | 
					            model.addAttribute("course", course);
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -0,0 +1,32 @@
 | 
				
			||||||
 | 
					package nl.andrewlalis.teaching_assistant_assistant.controllers.courses;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					import nl.andrewlalis.teaching_assistant_assistant.model.Course;
 | 
				
			||||||
 | 
					import nl.andrewlalis.teaching_assistant_assistant.model.repositories.CourseRepository;
 | 
				
			||||||
 | 
					import nl.andrewlalis.teaching_assistant_assistant.util.sample_data.CourseGenerator;
 | 
				
			||||||
 | 
					import org.springframework.stereotype.Controller;
 | 
				
			||||||
 | 
					import org.springframework.ui.Model;
 | 
				
			||||||
 | 
					import org.springframework.web.bind.annotation.GetMapping;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					import java.util.List;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					@Controller
 | 
				
			||||||
 | 
					public class Generate {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    private CourseRepository courseRepository;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    protected Generate(CourseRepository courseRepository) {
 | 
				
			||||||
 | 
					         this.courseRepository = courseRepository;
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    @GetMapping("/courses/generate")
 | 
				
			||||||
 | 
					    public String get(Model model) {
 | 
				
			||||||
 | 
					        CourseGenerator courseGenerator = new CourseGenerator(0, 3, 2, 10, 3);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        List<Course> courses = courseGenerator.generateList(5);
 | 
				
			||||||
 | 
					        this.courseRepository.saveAll(courses);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        model.addAttribute("courses", courseRepository.findAll());
 | 
				
			||||||
 | 
					        return "courses";
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
| 
						 | 
					@ -4,9 +4,18 @@ import nl.andrewlalis.teaching_assistant_assistant.model.Course;
 | 
				
			||||||
import org.springframework.data.repository.CrudRepository;
 | 
					import org.springframework.data.repository.CrudRepository;
 | 
				
			||||||
import org.springframework.stereotype.Repository;
 | 
					import org.springframework.stereotype.Repository;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					import java.util.Optional;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
/**
 | 
					/**
 | 
				
			||||||
 * The repository used to interact with various Course objects.
 | 
					 * The repository used to interact with various Course objects.
 | 
				
			||||||
 */
 | 
					 */
 | 
				
			||||||
@Repository
 | 
					@Repository
 | 
				
			||||||
public interface CourseRepository extends CrudRepository<Course, Long> {
 | 
					public interface CourseRepository extends CrudRepository<Course, Long> {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    /**
 | 
				
			||||||
 | 
					     * Finds a course by its unique code.
 | 
				
			||||||
 | 
					     * @param code A unique code which identifies a course.
 | 
				
			||||||
 | 
					     * @return An optional object that may contain the course identified by the given code.
 | 
				
			||||||
 | 
					     */
 | 
				
			||||||
 | 
					    Optional<Course> findByCode(String code);
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -14,7 +14,7 @@
 | 
				
			||||||
        </tr>
 | 
					        </tr>
 | 
				
			||||||
        <tr th:each="course: ${courses}">
 | 
					        <tr th:each="course: ${courses}">
 | 
				
			||||||
            <td>
 | 
					            <td>
 | 
				
			||||||
                <a th:href="@{/courses/{id}(id=${course.getId()})}"  th:text="${course.getName()}"></a>
 | 
					                <a th:href="@{/courses/{code}(code=${course.getCode()})}"  th:text="${course.getName()}"></a>
 | 
				
			||||||
            </td>
 | 
					            </td>
 | 
				
			||||||
            <td th:text="${course.getCode()}"></td>
 | 
					            <td th:text="${course.getCode()}"></td>
 | 
				
			||||||
            <td th:text="${course.getCreatedOn()}"></td>
 | 
					            <td th:text="${course.getCreatedOn()}"></td>
 | 
				
			||||||
| 
						 | 
					@ -24,7 +24,7 @@
 | 
				
			||||||
 | 
					
 | 
				
			||||||
<div id="sidebar">
 | 
					<div id="sidebar">
 | 
				
			||||||
    <div class="sidebar_block">
 | 
					    <div class="sidebar_block">
 | 
				
			||||||
        Create new course
 | 
					        <a href="/courses/create">Create new course</a>
 | 
				
			||||||
    </div>
 | 
					    </div>
 | 
				
			||||||
    <div class="sidebar_block">
 | 
					    <div class="sidebar_block">
 | 
				
			||||||
        Do something else
 | 
					        Do something else
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -1,10 +1,28 @@
 | 
				
			||||||
<!DOCTYPE html>
 | 
					<!DOCTYPE html>
 | 
				
			||||||
<html lang="en">
 | 
					<html xmlns:th="http://www.thymeleaf.org" th:replace="~{layouts/basic_page :: layout (~{::title}, ~{::#content}, ~{::#sidebar})}">
 | 
				
			||||||
<head>
 | 
					<head>
 | 
				
			||||||
    <meta charset="UTF-8">
 | 
					    <title>Create a Course</title>
 | 
				
			||||||
    <title>Title</title>
 | 
					 | 
				
			||||||
</head>
 | 
					</head>
 | 
				
			||||||
<body>
 | 
					<body>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					<div id="content">
 | 
				
			||||||
 | 
					    <p>
 | 
				
			||||||
 | 
					        Create your course here
 | 
				
			||||||
 | 
					    </p>
 | 
				
			||||||
 | 
					    <form action="#" th:action="@{/courses}" th:object="${course}" method="post">
 | 
				
			||||||
 | 
					        <label for="course_name_input">Name:</label>
 | 
				
			||||||
 | 
					        <input id="course_name_input" type="text" th:field="*{name}"/>
 | 
				
			||||||
 | 
					        <label for="course_code_input">Code:</label>
 | 
				
			||||||
 | 
					        <input id="course_code_input" type="text" th:field="*{code}"/>
 | 
				
			||||||
 | 
					        <button type="submit">Submit</button>
 | 
				
			||||||
 | 
					    </form>
 | 
				
			||||||
 | 
					</div>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					<div id="sidebar">
 | 
				
			||||||
 | 
					    <div class="sidebar_block">
 | 
				
			||||||
 | 
					        block
 | 
				
			||||||
 | 
					    </div>
 | 
				
			||||||
 | 
					</div>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
</body>
 | 
					</body>
 | 
				
			||||||
</html>
 | 
					</html>
 | 
				
			||||||
| 
						 | 
					@ -15,8 +15,8 @@
 | 
				
			||||||
    <div class="sidebar_block">
 | 
					    <div class="sidebar_block">
 | 
				
			||||||
        This is an example sidebar block.
 | 
					        This is an example sidebar block.
 | 
				
			||||||
    </div>
 | 
					    </div>
 | 
				
			||||||
    <div class="sidebar_block">
 | 
					    <div id="generate_courses_block" class="sidebar_block">
 | 
				
			||||||
        Click here to generate courses.
 | 
					        <a href="/courses/generate">Click here to generate courses.</a>
 | 
				
			||||||
    </div>
 | 
					    </div>
 | 
				
			||||||
</div>
 | 
					</div>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
		Loading…
	
		Reference in New Issue