Improvements and new version in development #5
|
@ -4,6 +4,7 @@ import nl.andrewlalis.command.CommandExecutor;
|
||||||
import nl.andrewlalis.command.executables.*;
|
import nl.andrewlalis.command.executables.*;
|
||||||
import nl.andrewlalis.git_api.GithubManager;
|
import nl.andrewlalis.git_api.GithubManager;
|
||||||
import nl.andrewlalis.ui.view.InitializerApp;
|
import nl.andrewlalis.ui.view.InitializerApp;
|
||||||
|
import nl.andrewlalis.ui.view.ManagementView;
|
||||||
import nl.andrewlalis.ui.view.StartView;
|
import nl.andrewlalis.ui.view.StartView;
|
||||||
import nl.andrewlalis.util.CommandLine;
|
import nl.andrewlalis.util.CommandLine;
|
||||||
import nl.andrewlalis.util.Logging;
|
import nl.andrewlalis.util.Logging;
|
||||||
|
@ -18,6 +19,11 @@ public class Main {
|
||||||
|
|
||||||
private static final Logger logger = Logger.getGlobal();
|
private static final Logger logger = Logger.getGlobal();
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The main application's view, which should be able to be referenced in many places.
|
||||||
|
*/
|
||||||
|
private static ManagementView managementView;
|
||||||
|
|
||||||
public static void main(String[] args) {
|
public static void main(String[] args) {
|
||||||
|
|
||||||
// Parsed command line arguments.
|
// Parsed command line arguments.
|
||||||
|
@ -50,7 +56,7 @@ public class Main {
|
||||||
"Program initialized.");
|
"Program initialized.");
|
||||||
|
|
||||||
GithubManager manager = new GithubManager();
|
GithubManager manager = new GithubManager();
|
||||||
StartView startView = new StartView(manager, "InitializerTesting", userOptions.get("token"));
|
managementView = new ManagementView(manager);
|
||||||
|
|
||||||
// SessionFactory factory = DbUtil.getSessionFactory();
|
// SessionFactory factory = DbUtil.getSessionFactory();
|
||||||
// Session session = factory.openSession();
|
// Session session = factory.openSession();
|
||||||
|
@ -58,6 +64,15 @@ public class Main {
|
||||||
// System.out.println(session.save(new Student(1, "a", "a@e.com", "git", null)));
|
// System.out.println(session.save(new Student(1, "a", "a@e.com", "git", null)));
|
||||||
// session.getTransaction().commit();
|
// session.getTransaction().commit();
|
||||||
// session.close();
|
// session.close();
|
||||||
|
|
||||||
|
StartView startView = new StartView(manager, "InitializerTesting", userOptions.get("token"));
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @return The management view used for the application.
|
||||||
|
*/
|
||||||
|
public static ManagementView getManagementView() {
|
||||||
|
return managementView;
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -28,6 +28,13 @@ public class Student extends Person {
|
||||||
)
|
)
|
||||||
private List<Student> preferredPartners;
|
private List<Student> preferredPartners;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The team that this student is assigned to.
|
||||||
|
*/
|
||||||
|
@ManyToOne
|
||||||
|
@JoinColumn(name = "team_id")
|
||||||
|
private StudentTeam team;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Constructs an empty student object.
|
* Constructs an empty student object.
|
||||||
*/
|
*/
|
||||||
|
@ -73,4 +80,19 @@ public class Student extends Person {
|
||||||
t.addMember(this);
|
t.addMember(this);
|
||||||
return t;
|
return t;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Assigns this student to the given team, from the student's perspective.
|
||||||
|
* @param team The team to set as the assigned team.
|
||||||
|
*/
|
||||||
|
public void assignToTeam(StudentTeam team) {
|
||||||
|
this.team = team;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @return The team that this student is assigned to. May return null if the student is unassigned.
|
||||||
|
*/
|
||||||
|
public StudentTeam getAssignedTeam() {
|
||||||
|
return this.team;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -0,0 +1,26 @@
|
||||||
|
package nl.andrewlalis.model.database;
|
||||||
|
|
||||||
|
import nl.andrewlalis.model.Student;
|
||||||
|
import org.hibernate.Session;
|
||||||
|
import org.hibernate.SessionFactory;
|
||||||
|
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* This class will contain some static methods to help in the retrieval of commonly used information.
|
||||||
|
*/
|
||||||
|
public class DbHelper {
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Gets a list of students in the database.
|
||||||
|
* @return A list of students.
|
||||||
|
*/
|
||||||
|
public static List<Student> getStudents() {
|
||||||
|
SessionFactory sessionFactory = DbUtil.getSessionFactory();
|
||||||
|
Session session = sessionFactory.openSession();
|
||||||
|
List<Student> students = (List<Student>) session.createQuery("from Student").list();
|
||||||
|
session.close();
|
||||||
|
return students;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
|
@ -0,0 +1,15 @@
|
||||||
|
package nl.andrewlalis.ui.control.listeners.input_students_file_view;
|
||||||
|
|
||||||
|
import nl.andrewlalis.ui.control.listeners.ViewChangeListener;
|
||||||
|
import nl.andrewlalis.ui.view.AbstractView;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Listens for when the user clicks 'Done' after selecting a file to input.
|
||||||
|
*/
|
||||||
|
public class DoneListener extends ViewChangeListener {
|
||||||
|
|
||||||
|
public DoneListener(AbstractView previousView, AbstractView newView) {
|
||||||
|
super(previousView, newView);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
|
@ -1,8 +1,13 @@
|
||||||
package nl.andrewlalis.ui.control.listeners.input_students_file_view;
|
package nl.andrewlalis.ui.control.listeners.input_students_file_view;
|
||||||
|
|
||||||
|
import nl.andrewlalis.Main;
|
||||||
|
import nl.andrewlalis.model.Student;
|
||||||
import nl.andrewlalis.model.StudentTeam;
|
import nl.andrewlalis.model.StudentTeam;
|
||||||
|
import nl.andrewlalis.model.database.DbUtil;
|
||||||
import nl.andrewlalis.ui.view.InputStudentsFileView;
|
import nl.andrewlalis.ui.view.InputStudentsFileView;
|
||||||
import nl.andrewlalis.util.TeamGenerator;
|
import nl.andrewlalis.util.TeamGenerator;
|
||||||
|
import org.hibernate.Session;
|
||||||
|
import org.hibernate.Transaction;
|
||||||
|
|
||||||
import javax.swing.*;
|
import javax.swing.*;
|
||||||
import javax.swing.filechooser.FileFilter;
|
import javax.swing.filechooser.FileFilter;
|
||||||
|
@ -54,7 +59,20 @@ public class FileSelectListener implements ActionListener {
|
||||||
int teamSize = this.fileView.getStudentsPerTeam();
|
int teamSize = this.fileView.getStudentsPerTeam();
|
||||||
try {
|
try {
|
||||||
List<StudentTeam> teams = TeamGenerator.generateFromCSV(chooser.getSelectedFile().getAbsolutePath(), teamSize);
|
List<StudentTeam> teams = TeamGenerator.generateFromCSV(chooser.getSelectedFile().getAbsolutePath(), teamSize);
|
||||||
System.out.println(teams);
|
Session session = DbUtil.getSessionFactory().openSession();
|
||||||
|
Transaction tx = session.beginTransaction();
|
||||||
|
|
||||||
|
for (StudentTeam team : teams) {
|
||||||
|
for (Student s : team.getStudents()) {
|
||||||
|
session.save(s);
|
||||||
|
}
|
||||||
|
session.save(team);
|
||||||
|
}
|
||||||
|
|
||||||
|
tx.commit();
|
||||||
|
session.close();
|
||||||
|
|
||||||
|
Main.getManagementView().updateModels();
|
||||||
} catch (IOException e) {
|
} catch (IOException e) {
|
||||||
e.printStackTrace();
|
e.printStackTrace();
|
||||||
}
|
}
|
||||||
|
|
|
@ -23,6 +23,11 @@ public abstract class AbstractView extends JFrame {
|
||||||
*/
|
*/
|
||||||
private List<AbstractView> childViews;
|
private List<AbstractView> childViews;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* A list of views which lead to this one.
|
||||||
|
*/
|
||||||
|
private List<AbstractView> parentViews;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Initializes the view by packing the content pane as it is defined by any child, and setting some generic swing
|
* Initializes the view by packing the content pane as it is defined by any child, and setting some generic swing
|
||||||
* values.
|
* values.
|
||||||
|
@ -30,11 +35,13 @@ public abstract class AbstractView extends JFrame {
|
||||||
* @param startVisible Whether or not to start the view as visible.
|
* @param startVisible Whether or not to start the view as visible.
|
||||||
* @param defaultCloseOperation What to do when the user closes the window.
|
* @param defaultCloseOperation What to do when the user closes the window.
|
||||||
* @param preferredSize The preferred size of the view.
|
* @param preferredSize The preferred size of the view.
|
||||||
|
* @param githubManager The manager used for this view.
|
||||||
*/
|
*/
|
||||||
AbstractView(String title, boolean startVisible, int defaultCloseOperation, Dimension preferredSize, GithubManager githubManager) {
|
AbstractView(String title, boolean startVisible, int defaultCloseOperation, Dimension preferredSize, GithubManager githubManager) {
|
||||||
super(title);
|
super(title);
|
||||||
this.githubManager = githubManager;
|
this.githubManager = githubManager;
|
||||||
this.childViews = new ArrayList<>();
|
this.childViews = new ArrayList<>();
|
||||||
|
this.parentViews = new ArrayList<>();
|
||||||
this.setContentPane(this.buildContentPane());
|
this.setContentPane(this.buildContentPane());
|
||||||
this.setDefaultCloseOperation(defaultCloseOperation);
|
this.setDefaultCloseOperation(defaultCloseOperation);
|
||||||
if (preferredSize != null) {
|
if (preferredSize != null) {
|
||||||
|
@ -95,4 +102,33 @@ public abstract class AbstractView extends JFrame {
|
||||||
protected final void addChildView(AbstractView view) {
|
protected final void addChildView(AbstractView view) {
|
||||||
this.childViews.add(view);
|
this.childViews.add(view);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @return The list of children of this view.
|
||||||
|
*/
|
||||||
|
protected final List<AbstractView> getChildViews() {
|
||||||
|
return this.childViews;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Adds a view as linked to this one as a parent.
|
||||||
|
* @param view The parent view.
|
||||||
|
*/
|
||||||
|
protected final void addParentView(AbstractView view) {
|
||||||
|
this.parentViews.add(view);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @return The list of parents of this view.
|
||||||
|
*/
|
||||||
|
protected final List<AbstractView> getParentViews() {
|
||||||
|
return this.parentViews;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Removes all parents registered to this view.
|
||||||
|
*/
|
||||||
|
protected final void removeParents() {
|
||||||
|
this.parentViews.clear();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -44,6 +44,7 @@ public class CreateAssignmentsView extends AbstractView {
|
||||||
JButton nextButton = new JButton("Next");
|
JButton nextButton = new JButton("Next");
|
||||||
InputStudentsFileView inputStudentsFileView = new InputStudentsFileView(this.getGithubManager());
|
InputStudentsFileView inputStudentsFileView = new InputStudentsFileView(this.getGithubManager());
|
||||||
this.addChildView(inputStudentsFileView);
|
this.addChildView(inputStudentsFileView);
|
||||||
|
inputStudentsFileView.addParentView(this);
|
||||||
nextButton.addActionListener(new NextListener(this, inputStudentsFileView));
|
nextButton.addActionListener(new NextListener(this, inputStudentsFileView));
|
||||||
contentPane.add(nextButton, BorderLayout.SOUTH);
|
contentPane.add(nextButton, BorderLayout.SOUTH);
|
||||||
|
|
||||||
|
|
|
@ -1,6 +1,8 @@
|
||||||
package nl.andrewlalis.ui.view;
|
package nl.andrewlalis.ui.view;
|
||||||
|
|
||||||
|
import nl.andrewlalis.Main;
|
||||||
import nl.andrewlalis.git_api.GithubManager;
|
import nl.andrewlalis.git_api.GithubManager;
|
||||||
|
import nl.andrewlalis.ui.control.listeners.input_students_file_view.DoneListener;
|
||||||
import nl.andrewlalis.ui.control.listeners.input_students_file_view.FileSelectListener;
|
import nl.andrewlalis.ui.control.listeners.input_students_file_view.FileSelectListener;
|
||||||
|
|
||||||
import javax.swing.*;
|
import javax.swing.*;
|
||||||
|
@ -34,7 +36,7 @@ public class InputStudentsFileView extends AbstractView {
|
||||||
|
|
||||||
JPanel inputPanel = new JPanel();
|
JPanel inputPanel = new JPanel();
|
||||||
inputPanel.setLayout(new BoxLayout(inputPanel, BoxLayout.PAGE_AXIS));
|
inputPanel.setLayout(new BoxLayout(inputPanel, BoxLayout.PAGE_AXIS));
|
||||||
|
// Button to select a file.
|
||||||
JButton selectFileButton = new JButton("Select File");
|
JButton selectFileButton = new JButton("Select File");
|
||||||
this.studentsPerTeamField = new JTextField("2");
|
this.studentsPerTeamField = new JTextField("2");
|
||||||
inputPanel.add(this.generateTextFieldPanel("How many students per team?", this.studentsPerTeamField));
|
inputPanel.add(this.generateTextFieldPanel("How many students per team?", this.studentsPerTeamField));
|
||||||
|
@ -43,7 +45,10 @@ public class InputStudentsFileView extends AbstractView {
|
||||||
|
|
||||||
contentPane.add(inputPanel, BorderLayout.CENTER);
|
contentPane.add(inputPanel, BorderLayout.CENTER);
|
||||||
|
|
||||||
|
// Button to confirm and move to the next view.
|
||||||
JButton doneButton = new JButton("Done");
|
JButton doneButton = new JButton("Done");
|
||||||
|
Main.getManagementView().addParentView(this);
|
||||||
|
doneButton.addActionListener(new DoneListener(this, Main.getManagementView()));
|
||||||
contentPane.add(doneButton, BorderLayout.SOUTH);
|
contentPane.add(doneButton, BorderLayout.SOUTH);
|
||||||
|
|
||||||
return contentPane;
|
return contentPane;
|
||||||
|
|
|
@ -0,0 +1,114 @@
|
||||||
|
package nl.andrewlalis.ui.view;
|
||||||
|
|
||||||
|
import nl.andrewlalis.git_api.GithubManager;
|
||||||
|
import nl.andrewlalis.model.database.DbHelper;
|
||||||
|
import nl.andrewlalis.model.database.DbUtil;
|
||||||
|
import nl.andrewlalis.ui.view.table_models.StudentTableModel;
|
||||||
|
|
||||||
|
import javax.swing.*;
|
||||||
|
import java.awt.*;
|
||||||
|
import java.awt.event.WindowAdapter;
|
||||||
|
import java.awt.event.WindowEvent;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The view in which the user manages a course.
|
||||||
|
*/
|
||||||
|
public class ManagementView extends AbstractView {
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The model for the students table.
|
||||||
|
*/
|
||||||
|
private StudentTableModel studentsModel;
|
||||||
|
|
||||||
|
public ManagementView(GithubManager githubManager) {
|
||||||
|
super(
|
||||||
|
"Course Management",
|
||||||
|
false,
|
||||||
|
DISPOSE_ON_CLOSE,
|
||||||
|
null,
|
||||||
|
githubManager
|
||||||
|
);
|
||||||
|
this.setExtendedState(this.getExtendedState() | JFrame.MAXIMIZED_BOTH);
|
||||||
|
|
||||||
|
// Dispose of all parents when this window closes.
|
||||||
|
this.addWindowListener(new WindowAdapter() {
|
||||||
|
@Override
|
||||||
|
public void windowClosed(WindowEvent windowEvent) {
|
||||||
|
for (AbstractView parent : getParentViews()) {
|
||||||
|
parent.dispose();
|
||||||
|
}
|
||||||
|
DbUtil.tearDown();
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected JPanel buildContentPane() {
|
||||||
|
JPanel contentPane = new JPanel(new BorderLayout());
|
||||||
|
|
||||||
|
contentPane.add(this.buildCommandPanel(), BorderLayout.WEST);
|
||||||
|
contentPane.add(this.buildDetailPanel(), BorderLayout.EAST);
|
||||||
|
contentPane.add(this.buildOverviewPanel(), BorderLayout.CENTER);
|
||||||
|
|
||||||
|
return contentPane;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @return A JPanel for the command prompt interface.
|
||||||
|
*/
|
||||||
|
private JPanel buildCommandPanel() {
|
||||||
|
JPanel commandPanel = new JPanel(new BorderLayout());
|
||||||
|
|
||||||
|
commandPanel.add(new JLabel("Commands", SwingConstants.CENTER), BorderLayout.NORTH);
|
||||||
|
commandPanel.add(new JTextArea("Command prompt area goes here."), BorderLayout.CENTER);
|
||||||
|
|
||||||
|
// Construct the sub-panel for commands at the bottom of the panel.
|
||||||
|
JPanel inputPanel = new JPanel(new BorderLayout());
|
||||||
|
JTextField commandTextField = new JTextField();
|
||||||
|
inputPanel.add(commandTextField, BorderLayout.CENTER);
|
||||||
|
|
||||||
|
commandPanel.add(inputPanel, BorderLayout.SOUTH);
|
||||||
|
|
||||||
|
return commandPanel;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @return A JPanel for the entity details section.
|
||||||
|
*/
|
||||||
|
private JPanel buildDetailPanel() {
|
||||||
|
JPanel detailPanel = new JPanel(new BorderLayout());
|
||||||
|
|
||||||
|
detailPanel.add(new JLabel("Details", SwingConstants.CENTER), BorderLayout.NORTH);
|
||||||
|
|
||||||
|
return detailPanel;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @return Builds the overview panel, containing a listing of entities.
|
||||||
|
*/
|
||||||
|
private JPanel buildOverviewPanel() {
|
||||||
|
JPanel overviewPanel = new JPanel(new BorderLayout());
|
||||||
|
|
||||||
|
overviewPanel.add(new JLabel("Overview"), BorderLayout.NORTH);
|
||||||
|
|
||||||
|
// The real container for all the data views.
|
||||||
|
JTabbedPane tabbedPane = new JTabbedPane();
|
||||||
|
|
||||||
|
this.studentsModel = new StudentTableModel(DbHelper.getStudents());
|
||||||
|
JTable studentsTable = new JTable(this.studentsModel);
|
||||||
|
JScrollPane studentsScrollPane = new JScrollPane(studentsTable);
|
||||||
|
tabbedPane.addTab("Students", studentsScrollPane);
|
||||||
|
|
||||||
|
overviewPanel.add(tabbedPane, BorderLayout.CENTER);
|
||||||
|
|
||||||
|
return overviewPanel;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Updates all models in the management view in accordance with the database.
|
||||||
|
*/
|
||||||
|
public void updateModels() {
|
||||||
|
this.studentsModel.setStudentsList(DbHelper.getStudents());
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
|
@ -1,6 +1,8 @@
|
||||||
package nl.andrewlalis.ui.view;
|
package nl.andrewlalis.ui.view;
|
||||||
|
|
||||||
|
import nl.andrewlalis.Main;
|
||||||
import nl.andrewlalis.git_api.GithubManager;
|
import nl.andrewlalis.git_api.GithubManager;
|
||||||
|
import nl.andrewlalis.ui.control.listeners.ViewChangeListener;
|
||||||
import nl.andrewlalis.ui.control.listeners.start_view.CreateAssignmentsRepoListener;
|
import nl.andrewlalis.ui.control.listeners.start_view.CreateAssignmentsRepoListener;
|
||||||
|
|
||||||
import javax.swing.*;
|
import javax.swing.*;
|
||||||
|
@ -61,11 +63,18 @@ public class StartView extends AbstractView {
|
||||||
infoInputPanel.add(this.generateTextFieldPanel("Access token:", this.accessTokenField));
|
infoInputPanel.add(this.generateTextFieldPanel("Access token:", this.accessTokenField));
|
||||||
|
|
||||||
JPanel buttonsPanel = new JPanel();
|
JPanel buttonsPanel = new JPanel();
|
||||||
|
// Create the button for going to the Create assignments repository view.
|
||||||
JButton assignmentsViewButton = new JButton("Start New Course");
|
JButton assignmentsViewButton = new JButton("Start New Course");
|
||||||
CreateAssignmentsView assignmentsView = new CreateAssignmentsView(this.getGithubManager());
|
CreateAssignmentsView assignmentsView = new CreateAssignmentsView(this.getGithubManager());
|
||||||
this.addChildView(assignmentsView);
|
this.addChildView(assignmentsView);
|
||||||
|
assignmentsView.addParentView(this);
|
||||||
assignmentsViewButton.addActionListener(new CreateAssignmentsRepoListener(this, assignmentsView));
|
assignmentsViewButton.addActionListener(new CreateAssignmentsRepoListener(this, assignmentsView));
|
||||||
|
|
||||||
|
// Create the button for going straight to the management view.
|
||||||
JButton managementViewButton = new JButton("Manage Existing Course");
|
JButton managementViewButton = new JButton("Manage Existing Course");
|
||||||
|
this.addChildView(Main.getManagementView());
|
||||||
|
Main.getManagementView().addParentView(this);
|
||||||
|
managementViewButton.addActionListener(new ViewChangeListener(this, Main.getManagementView()));
|
||||||
|
|
||||||
buttonsPanel.add(assignmentsViewButton);
|
buttonsPanel.add(assignmentsViewButton);
|
||||||
buttonsPanel.add(managementViewButton);
|
buttonsPanel.add(managementViewButton);
|
||||||
|
|
|
@ -0,0 +1,74 @@
|
||||||
|
package nl.andrewlalis.ui.view.table_models;
|
||||||
|
|
||||||
|
import nl.andrewlalis.model.Student;
|
||||||
|
|
||||||
|
import javax.swing.table.AbstractTableModel;
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* This table model is used for the representation of a list of persons, with their basic information.
|
||||||
|
*/
|
||||||
|
public class StudentTableModel extends AbstractTableModel {
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The list of data that is used in the table.
|
||||||
|
*/
|
||||||
|
private List<Student> studentsList;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* A default list of column headers for this table.
|
||||||
|
*/
|
||||||
|
private String[] columns = {"Number", "Name", "Email", "Github", "Team"};
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Constructs a new model based on the given list of students.
|
||||||
|
* @param studentsList A list of students to display in the table model.
|
||||||
|
*/
|
||||||
|
public StudentTableModel(List<Student> studentsList) {
|
||||||
|
this.studentsList = studentsList;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Sets a new list of students as the data for this list model.
|
||||||
|
* @param newList The new list of students to use.
|
||||||
|
*/
|
||||||
|
public void setStudentsList(List<Student> newList) {
|
||||||
|
this.studentsList = newList;
|
||||||
|
this.fireTableDataChanged();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public int getRowCount() {
|
||||||
|
return studentsList.size();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public int getColumnCount() {
|
||||||
|
return this.columns.length;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String getColumnName(int i) {
|
||||||
|
return this.columns[i];
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Object getValueAt(int row, int col) {
|
||||||
|
Student student = studentsList.get(row);
|
||||||
|
|
||||||
|
switch(col) {
|
||||||
|
case 0:
|
||||||
|
return student.getNumber();
|
||||||
|
case 1:
|
||||||
|
return student.getName();
|
||||||
|
case 2:
|
||||||
|
return student.getEmailAddress();
|
||||||
|
case 3:
|
||||||
|
return student.getGithubUsername();
|
||||||
|
case 4:
|
||||||
|
return student.getAssignedTeam().getId();
|
||||||
|
default:
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
|
@ -98,7 +98,7 @@ public class TeamGenerator {
|
||||||
// Once we know this team is completely valid, we remove all the students in it from the list of singles.
|
// Once we know this team is completely valid, we remove all the students in it from the list of singles.
|
||||||
newTeam.setNumber(teamCount++);
|
newTeam.setNumber(teamCount++);
|
||||||
singleStudents.removeAll(Arrays.asList(newTeam.getStudents()));
|
singleStudents.removeAll(Arrays.asList(newTeam.getStudents()));
|
||||||
studentTeams.add(newTeam);
|
assignStudentsToTeam(newTeam);
|
||||||
logger.fine("Created team:\n" + newTeam);
|
logger.fine("Created team:\n" + newTeam);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -128,6 +128,7 @@ public class TeamGenerator {
|
||||||
t.addMember(s);
|
t.addMember(s);
|
||||||
}
|
}
|
||||||
studentTeams.add(t);
|
studentTeams.add(t);
|
||||||
|
assignStudentsToTeam(t);
|
||||||
logger.fine("Created team:\n" + t);
|
logger.fine("Created team:\n" + t);
|
||||||
}
|
}
|
||||||
return studentTeams;
|
return studentTeams;
|
||||||
|
@ -187,4 +188,15 @@ public class TeamGenerator {
|
||||||
return students;
|
return students;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Assigns all students in the given team to that team, such that all students then have a reference to the team
|
||||||
|
* they are in.
|
||||||
|
* @param team The team to assign students for.
|
||||||
|
*/
|
||||||
|
private static void assignStudentsToTeam(StudentTeam team) {
|
||||||
|
for (Student student : team.getStudents()) {
|
||||||
|
student.assignToTeam(team);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue