diff --git a/pom.xml b/pom.xml
index 7144961..d9c3e41 100644
--- a/pom.xml
+++ b/pom.xml
@@ -61,7 +61,7 @@
default-cli
- jira.JiraApp
+ jira.client.JiraApp
app
app
app
diff --git a/src/main/java/jira/controller/ControllerResult.java b/src/main/java/jira/ControllerResult.java
similarity index 64%
rename from src/main/java/jira/controller/ControllerResult.java
rename to src/main/java/jira/ControllerResult.java
index 268b29b..473813c 100644
--- a/src/main/java/jira/controller/ControllerResult.java
+++ b/src/main/java/jira/ControllerResult.java
@@ -1,6 +1,8 @@
-package jira.controller;
+package jira;
-public class ControllerResult {
+import java.io.Serializable;
+
+public class ControllerResult implements Serializable {
public final String message;
public final boolean success;
diff --git a/src/main/java/jira/RPCMessage.java b/src/main/java/jira/RPCMessage.java
new file mode 100644
index 0000000..3194935
--- /dev/null
+++ b/src/main/java/jira/RPCMessage.java
@@ -0,0 +1,33 @@
+package jira;
+
+import java.io.Serializable;
+
+public class RPCMessage implements Serializable {
+ private final String token;
+ private final String className;
+ private final String methodName;
+ private final Object[] args;
+
+ public RPCMessage(String token, String className, String methodName, Object[] args) {
+ this.token = token;
+ this.className = className;
+ this.methodName = methodName;
+ this.args = args;
+ }
+
+ public String getToken() {
+ return token;
+ }
+
+ public String getClassName() {
+ return className;
+ }
+
+ public String getMethodName() {
+ return methodName;
+ }
+
+ public Object[] getArgs() {
+ return args;
+ }
+}
diff --git a/src/main/java/jira/model/Role.java b/src/main/java/jira/Role.java
similarity index 92%
rename from src/main/java/jira/model/Role.java
rename to src/main/java/jira/Role.java
index 4b8bee9..02364be 100644
--- a/src/main/java/jira/model/Role.java
+++ b/src/main/java/jira/Role.java
@@ -1,4 +1,4 @@
-package jira.model;
+package jira;
public enum Role {
ADMIN {
diff --git a/src/main/java/jira/JiraApp.java b/src/main/java/jira/client/JiraApp.java
similarity index 68%
rename from src/main/java/jira/JiraApp.java
rename to src/main/java/jira/client/JiraApp.java
index bfdd257..f49d6ac 100644
--- a/src/main/java/jira/JiraApp.java
+++ b/src/main/java/jira/client/JiraApp.java
@@ -1,24 +1,13 @@
-package jira;
+package jira.client;
import javafx.application.Application;
import javafx.fxml.FXMLLoader;
import javafx.scene.Scene;
import javafx.stage.Stage;
-import jira.model.Role;
-import jira.model.User;
-import jira.model.UserSave;
import java.io.IOException;
public class JiraApp extends Application {
- private static void setup() {
- new User("admin", "Password123", "admin@gmail.com", Role.ADMIN);
- }
-
- static {
- UserSave.init();
- }
-
@Override
public void start(Stage stage) throws IOException {
FXMLLoader fxmlLoader = new FXMLLoader(JiraApp.class.getResource("login.fxml"));
@@ -30,7 +19,6 @@ public void start(Stage stage) throws IOException {
}
public static void main(String[] args) {
- setup();
launch();
}
}
diff --git a/src/main/java/jira/client/view/AdminPanelPageController.java b/src/main/java/jira/client/view/AdminPanelPageController.java
new file mode 100644
index 0000000..ee6db97
--- /dev/null
+++ b/src/main/java/jira/client/view/AdminPanelPageController.java
@@ -0,0 +1,177 @@
+package jira.client.view;
+
+import javafx.beans.property.ReadOnlyStringWrapper;
+import javafx.collections.FXCollections;
+import javafx.collections.ObservableList;
+import javafx.event.ActionEvent;
+import javafx.fxml.FXML;
+import javafx.fxml.FXMLLoader;
+import javafx.scene.Node;
+import javafx.scene.Scene;
+import javafx.scene.control.*;
+import javafx.scene.layout.BorderPane;
+import javafx.stage.Stage;
+import javafx.util.Callback;
+import jira.client.JiraApp;
+
+import java.io.IOException;
+import java.util.ArrayList;
+
+public class AdminPanelPageController extends PageController {
+ private String currentUsername;
+
+ @FXML private BorderPane pane;
+ @FXML private Label adminUsernameLabel;
+ @FXML private TableView pendingTeamsTableView;
+ @FXML private TableView usersTableView;
+
+ protected void setCurrentUsername(String currentUsername) {
+ this.currentUsername = currentUsername;
+ }
+
+ public void setup() {
+ clearTable();
+ setAdminUsernameLabel();
+ populatePendingTeamsTableView();
+ populateUsersTableView();
+ }
+
+ private void setAdminUsernameLabel() {
+ adminUsernameLabel.setText(currentUsername);
+ }
+
+ private void clearTable() {
+ pendingTeamsTableView.getItems().clear();
+ pendingTeamsTableView.getColumns().clear();
+ usersTableView.getItems().clear();
+ usersTableView.getColumns().clear();
+ }
+
+ private void populateUsersTableView() {
+// ArrayList userNames = UserController.getController().getAllUsernames();
+ ArrayList userNames = (ArrayList) new RPCExecutor()
+ .execute("UserController", "getAllUsernames");
+ TableColumn username = new TableColumn<>("Username");
+ username.setCellValueFactory(param -> new ReadOnlyStringWrapper(param.getValue()));
+
+ usersTableView.getColumns().add(username);
+ ObservableList rows = FXCollections.observableArrayList(userNames);
+ usersTableView.setItems(rows);
+ }
+
+ private void populatePendingTeamsTableView() {
+// ArrayList pendingTeamNames = TeamController.getController().getPendingTeams();
+ ArrayList pendingTeamNames = (ArrayList) new RPCExecutor()
+ .execute("TeamController", "getPendingTeams");
+ pendingTeamsTableView.setEditable(true);
+
+ TableColumn pendingTeamName = new TableColumn<>("Team Name");
+ pendingTeamName.setCellValueFactory(param -> new ReadOnlyStringWrapper(param.getValue()));
+
+ pendingTeamsTableView.getColumns().add(pendingTeamName);
+ addAcceptButtonToTable();
+ addRejectButtonToTable();
+
+ ObservableList rows = FXCollections.observableArrayList(pendingTeamNames);
+ pendingTeamsTableView.setItems(rows);
+ }
+
+ private void addRejectButtonToTable() {
+ TableColumn columnButtonReject = new TableColumn<>("");
+ Callback, TableCell> cellFactoryReject =
+ param -> new TableCell<>() {
+
+ private final Button btn = new Button();
+
+ {
+ btn.setOnAction((ActionEvent event) -> {
+ String teamName = getTableView().getItems().get(getIndex());
+ doReject(teamName);
+ });
+ btn.setText("REJECT");
+ btn.setStyle("-fx-background-color: #ff0000");
+ }
+
+ @Override
+ public void updateItem(Void item, boolean empty) {
+ super.updateItem(item, empty);
+ if (empty)
+ setGraphic(null);
+ else
+ setGraphic(btn);
+ }
+ };
+
+ columnButtonReject.setCellFactory(cellFactoryReject);
+ pendingTeamsTableView.getColumns().add(columnButtonReject);
+ }
+
+ private void addAcceptButtonToTable() {
+ TableColumn columnButtonAccept = new TableColumn<>("");
+ Callback, TableCell> cellFactoryAccept =
+ param -> new TableCell<>() {
+
+ private final Button btn = new Button();
+
+ {
+ btn.setOnAction((ActionEvent event) -> {
+ String teamName = getTableView().getItems().get(getIndex());
+ doAccept(teamName);
+ });
+ btn.setText("ACCEPT");
+ btn.setStyle("-fx-background-color: #00ff00");
+ }
+
+ @Override
+ public void updateItem(Void item, boolean empty) {
+ super.updateItem(item, empty);
+ if (empty)
+ setGraphic(null);
+ else
+ setGraphic(btn);
+ }
+ };
+
+ columnButtonAccept.setCellFactory(cellFactoryAccept);
+ pendingTeamsTableView.getColumns().add(columnButtonAccept);
+ }
+
+ private void doReject(String teamName) {
+// TeamController.getController().rejectPendingTeam(currentUsername, teamName);
+ new RPCExecutor().execute("TeamController", "rejectPendingTeam", currentUsername, teamName);
+ setup();
+ }
+
+ private void doAccept(String teamName) {
+// TeamController.getController().acceptPendingTeam(currentUsername, teamName);
+ new RPCExecutor().execute("TeamController", "acceptPendingTeam", currentUsername, teamName);
+ setup();
+ }
+
+ @FXML
+ private void openJiraStatistics(ActionEvent event) {
+ System.out.println("CALLED STATS");
+ }
+
+ @FXML
+ private void back(ActionEvent event) {
+// UserController.getController().logout(currentUsername);
+ new RPCExecutor().execute("UserController", "logout", currentUsername);
+ currentUsername = null;
+ gotoLoginPage(event);
+ }
+
+ private void gotoLoginPage(ActionEvent event) {
+ try {
+ FXMLLoader loader = new FXMLLoader(JiraApp.class.getResource("login.fxml"));
+ Scene scene = new Scene(loader.load());
+ Stage stage = (Stage) ((Node) event.getSource()).getScene().getWindow();
+
+ stage.setScene(scene);
+ stage.show();
+ }
+ catch (IOException e) {
+ e.printStackTrace();
+ }
+ }
+}
diff --git a/src/main/java/jira/client/view/ChangePasswordPopupController.java b/src/main/java/jira/client/view/ChangePasswordPopupController.java
new file mode 100644
index 0000000..2f119af
--- /dev/null
+++ b/src/main/java/jira/client/view/ChangePasswordPopupController.java
@@ -0,0 +1,67 @@
+package jira.client.view;
+
+import javafx.event.ActionEvent;
+import javafx.fxml.FXML;
+import javafx.scene.Node;
+import javafx.scene.control.PasswordField;
+import javafx.scene.control.TextArea;
+import javafx.scene.image.ImageView;
+import javafx.scene.input.KeyEvent;
+import javafx.stage.Stage;
+import jira.ControllerResult;
+
+public class ChangePasswordPopupController extends PageController {
+ private String currentUsername;
+ private ProfilePageController profilePageController;
+
+ @FXML private PasswordField previousPasswordField;
+ @FXML private PasswordField newPasswordField;
+ @FXML private PasswordField confirmNewPasswordField;
+ @FXML private TextArea errorArea;
+ @FXML private ImageView passCheckView;
+
+ protected void setCurrentUsername(String currentUsername) {
+ this.currentUsername = currentUsername;
+ }
+
+ protected void setProfilePageController(ProfilePageController profilePageController) {
+ this.profilePageController = profilePageController;
+ }
+
+ @FXML
+ private void submitNewPassword(ActionEvent event) {
+ String previousPassword = getTextFromField(previousPasswordField);
+ String newPassword = getTextFromField(newPasswordField);
+// ControllerResult result = UserController.getController().changeUserPassword(
+// currentUsername, previousPassword, newPassword
+// );
+ ControllerResult result = (ControllerResult) new RPCExecutor()
+ .execute("UserController", "changeUserPassword", currentUsername,
+ previousPassword, newPassword);
+ showResult(errorArea, result);
+
+ if (result.success)
+ close(event);
+ }
+
+ @FXML
+ private void updatePassCheckView(KeyEvent event) {
+ String newPassword = getTextFromField(newPasswordField);
+ String confirmNewPassword = getTextFromField(confirmNewPasswordField);
+
+ if (newPassword.isEmpty())
+ clearIcon(passCheckView);
+ else {
+ if (newPassword.equals(confirmNewPassword))
+ setIcon(passCheckView, "password-check-mark.png");
+ else
+ setIcon(passCheckView, "password-cross-mark.png");
+ }
+ }
+
+ private void close(ActionEvent event) {
+ profilePageController.changePasswordPopupReturn(event);
+ Stage stage = (Stage) ((Node) event.getSource()).getScene().getWindow();
+ stage.close();
+ }
+}
diff --git a/src/main/java/jira/client/view/ChangeUsernamePopupController.java b/src/main/java/jira/client/view/ChangeUsernamePopupController.java
new file mode 100644
index 0000000..b22dea0
--- /dev/null
+++ b/src/main/java/jira/client/view/ChangeUsernamePopupController.java
@@ -0,0 +1,45 @@
+package jira.client.view;
+
+import javafx.event.ActionEvent;
+import javafx.fxml.FXML;
+import javafx.scene.Node;
+import javafx.scene.control.TextArea;
+import javafx.scene.control.TextField;
+import javafx.stage.Stage;
+import jira.ControllerResult;
+
+public class ChangeUsernamePopupController extends PageController {
+ private String currentUsername;
+ private ProfilePageController profilePageController;
+
+ @FXML private TextField usernameField;
+ @FXML private TextArea errorArea;
+
+ protected void setCurrentUsername(String currentUsername) {
+ this.currentUsername = currentUsername;
+ }
+
+ protected void setProfilePageController(ProfilePageController profilePageController) {
+ this.profilePageController = profilePageController;
+ }
+
+ @FXML
+ private void submitNewUsername(ActionEvent event) {
+ String newUsername = getTextFromField(usernameField);
+// ControllerResult result = UserController.getController().changeUsername(newUsername, currentUsername);
+ ControllerResult result = (ControllerResult) new RPCExecutor()
+ .execute("UserController", "changeUsername", newUsername, currentUsername);
+ showResult(errorArea, result);
+
+ if (result.success)
+ close(event);
+ }
+
+ private void close(ActionEvent event) {
+ profilePageController.setCurrentUsername(getTextFromField(usernameField));
+ profilePageController.setup();
+ profilePageController.changeUsernamePopupReturn();
+ Stage stage = (Stage) ((Node) event.getSource()).getScene().getWindow();
+ stage.close();
+ }
+}
diff --git a/src/main/java/jira/client/view/LoginPageController.java b/src/main/java/jira/client/view/LoginPageController.java
new file mode 100644
index 0000000..4d37842
--- /dev/null
+++ b/src/main/java/jira/client/view/LoginPageController.java
@@ -0,0 +1,107 @@
+package jira.client.view;
+
+import javafx.scene.Node;
+import jira.client.JiraApp;
+import jira.ControllerResult;
+import javafx.fxml.FXML;
+import javafx.fxml.FXMLLoader;
+import javafx.scene.Scene;
+import javafx.scene.control.Label;
+import javafx.scene.control.PasswordField;
+import javafx.scene.control.TextField;
+import javafx.event.ActionEvent;
+import javafx.scene.layout.BorderPane;
+import javafx.stage.Stage;
+import jira.Role;
+
+import java.io.IOException;
+
+public class LoginPageController extends PageController {
+ @FXML private BorderPane pane;
+ @FXML private Label errorField;
+ @FXML private TextField usernameField;
+ @FXML private PasswordField passwordField;
+
+ @FXML
+ private void login(ActionEvent event) {
+ String username = getTextFromField(usernameField);
+ String password = getTextFromField(passwordField);
+
+// ControllerResult result = UserController.getController().login(username, password);
+ ControllerResult result = (ControllerResult) new RPCExecutor()
+ .execute("UserController", "login", username, password);
+
+ showResult(errorField, result);
+// String role = UserController.getController().getUserRole(username).message;
+ String role = ((ControllerResult) new RPCExecutor()
+ .execute("UserController", "getUserRole", username)).message;
+
+ if (result.success) {
+ if (role.equals(Role.ADMIN.toString()))
+ gotoAdminMenu(event, username);
+ else
+ gotoMainMenu(event, username, role);
+ }
+ }
+
+ @FXML
+ private void register(ActionEvent event) {
+ pane.setDisable(true);
+
+ FXMLLoader fxmlLoader = new FXMLLoader(JiraApp.class.getResource("registerAccountPopup.fxml"));
+ try {
+ Scene scene = new Scene(fxmlLoader.load());
+ Stage newStage = new Stage();
+ newStage.setScene(scene);
+
+ RegisterPopupController registerPopupController = fxmlLoader.getController();
+ registerPopupController.setLoginPageController(this);
+ newStage.setOnHidden(e -> {pane.setDisable(false);});
+
+ newStage.show();
+ }
+ catch (IOException e) {
+ e.printStackTrace();
+ }
+ }
+
+ private void gotoMainMenu(ActionEvent event, String username, String role) {
+ try {
+ FXMLLoader loader = new FXMLLoader(JiraApp.class.getResource("mainMenu.fxml"));
+ Scene scene = new Scene(loader.load());
+ Stage stage = (Stage) ((Node) event.getSource()).getScene().getWindow();
+
+ MainMenuPageController mainMenuPageController = loader.getController();
+ mainMenuPageController.setCurrentUsername(username);
+ mainMenuPageController.setRole(role);
+ mainMenuPageController.setup();
+
+ stage.setScene(scene);
+ stage.show();
+ }
+ catch (IOException e) {
+ e.printStackTrace();
+ }
+ }
+
+ private void gotoAdminMenu(ActionEvent event, String username) {
+ try {
+ FXMLLoader loader = new FXMLLoader(JiraApp.class.getResource("adminPannel.fxml"));
+ Scene scene = new Scene(loader.load());
+ Stage stage = (Stage) ((Node) event.getSource()).getScene().getWindow();
+
+ AdminPanelPageController adminPanelPageController = loader.getController();
+ adminPanelPageController.setCurrentUsername(username);
+ adminPanelPageController.setup();
+ stage.setScene(scene);
+ stage.show();
+ }
+ catch (IOException e) {
+ e.printStackTrace();
+ }
+ }
+
+ protected void registerReturn() {
+ pane.setDisable(false);
+ }
+}
diff --git a/src/main/java/jira/view/MainMenuPageController.java b/src/main/java/jira/client/view/MainMenuPageController.java
similarity index 60%
rename from src/main/java/jira/view/MainMenuPageController.java
rename to src/main/java/jira/client/view/MainMenuPageController.java
index 06308d0..945b853 100644
--- a/src/main/java/jira/view/MainMenuPageController.java
+++ b/src/main/java/jira/client/view/MainMenuPageController.java
@@ -1,12 +1,16 @@
-package jira.view;
+package jira.client.view;
import javafx.application.Platform;
+import javafx.beans.property.ReadOnlyStringWrapper;
+import javafx.collections.FXCollections;
+import javafx.collections.ObservableList;
import javafx.event.ActionEvent;
import javafx.fxml.FXML;
import javafx.fxml.FXMLLoader;
import javafx.scene.Node;
import javafx.scene.Scene;
import javafx.scene.control.Label;
+import javafx.scene.control.TableColumn;
import javafx.scene.control.TableView;
import javafx.scene.image.Image;
import javafx.scene.image.ImageView;
@@ -16,14 +20,12 @@
import javafx.scene.input.TransferMode;
import javafx.scene.layout.BorderPane;
import javafx.stage.Stage;
-import jira.JiraApp;
-import jira.controller.TeamController;
-import jira.controller.UserController;
-
+import jira.client.JiraApp;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.util.ArrayList;
+import java.util.Objects;
public class MainMenuPageController extends PageController {
private String currentUsername;
@@ -36,7 +38,7 @@ public class MainMenuPageController extends PageController {
@FXML private TableView currentUserTeams;
@FXML private Label leaderOrMemberLabel;
- protected void initialize() {
+ protected void setup() {
setCurrentUsernameLabel();
setLeaderOrMemberLabel();
setCurrentUserProfilePic();
@@ -46,12 +48,43 @@ protected void initialize() {
@FXML
private void gotoProfileMenu(ActionEvent event) {
- System.out.println("to profile");
+ try {
+ FXMLLoader loader = new FXMLLoader(JiraApp.class.getResource("profileMenu.fxml"));
+ Scene scene = new Scene(loader.load());
+ Stage stage = (Stage) ((Node) event.getSource()).getScene().getWindow();
+
+ ProfilePageController profilePageController = loader.getController();
+ profilePageController.setCurrentRole(role);
+ profilePageController.setCurrentUsername(currentUsername);
+ profilePageController.setCurrentUserProfilePic(profilePicView.getImage());
+ profilePageController.setup();
+
+ stage.setScene(scene);
+ stage.show();
+ }
+ catch (IOException e) {
+ e.printStackTrace();
+ }
}
@FXML
private void gotoTeamMenu(ActionEvent event) {
- System.out.println("to team");
+ try {
+ FXMLLoader loader = new FXMLLoader(JiraApp.class.getResource("teamMenu.fxml"));
+ Scene scene = new Scene(loader.load());
+ Stage stage = (Stage) ((Node) event.getSource()).getScene().getWindow();
+
+ TeamMenuPageController teamMenuPageController = loader.getController();
+ teamMenuPageController.setCurrentRole(role);
+ teamMenuPageController.setCurrentUsername(currentUsername);
+ teamMenuPageController.setup();
+
+ stage.setScene(scene);
+ stage.show();
+ }
+ catch (IOException e) {
+ e.printStackTrace();
+ }
}
@FXML
@@ -74,7 +107,12 @@ private void setCurrentUsernameLabel() {
}
private void setCurrentUserProfilePic() {
- profilePicView.setImage(UserController.getController().getProfilePic(currentUsername));
+// profilePicView.setImage(UserController.getController().getProfilePic(currentUsername));
+ Image image = (Image) new RPCExecutor()
+ .execute("UserController", "getProfilePic", currentUsername);
+ profilePicView.setImage(Objects.requireNonNullElseGet(
+ image, () -> new Image(String.valueOf(JiraApp.class.getResource("profile-pics/default-prof-pic.png"))))
+ );
}
private void setLeaderOrMemberLabel() {
@@ -82,9 +120,15 @@ private void setLeaderOrMemberLabel() {
}
private void setCurrentUserTeams() {
- ArrayList teamNames = TeamController.getController().showTeamsAffiliated(currentUsername);
- for (String teamName: teamNames)
- currentUserTeams.getItems().add(teamName);
+ TableColumn teamNamesColumn = new TableColumn<>("Team Name");
+ teamNamesColumn.setCellValueFactory(param -> new ReadOnlyStringWrapper(param.getValue()));
+
+ currentUserTeams.getColumns().add(teamNamesColumn);
+// ArrayList teamNames = TeamController.getController().showTeamsAffiliated(currentUsername);
+ ArrayList teamNames = (ArrayList) new RPCExecutor()
+ .execute("TeamController", "showTeamsAffiliated", currentUsername);
+ ObservableList rows = FXCollections.observableArrayList(teamNames);
+ currentUserTeams.setItems(rows);
}
protected void setCurrentUsername(String currentUsername) {
@@ -150,13 +194,15 @@ private void sendAndSetProfilePic(File fileToSend) throws IOException {
new FileInputStream(fileToSend.getAbsolutePath())
);
- UserController.getController().setProfilePic(currentUsername, newImage);
+// UserController.getController().setProfilePic(currentUsername, newImage);
+ new RPCExecutor().execute("UserController", "setProfilePic", currentUsername, newImage);
setCurrentUserProfilePic();
}
@FXML
private void back(ActionEvent event) {
- UserController.getController().logout(currentUsername);
+// UserController.getController().logout(currentUsername);
+ new RPCExecutor().execute("UserController", "logout", currentUsername);
currentUsername = null;
role = null;
cachedProfilePicImage = null;
diff --git a/src/main/java/jira/view/PageController.java b/src/main/java/jira/client/view/PageController.java
similarity index 78%
rename from src/main/java/jira/view/PageController.java
rename to src/main/java/jira/client/view/PageController.java
index ce2e4c9..47856d3 100644
--- a/src/main/java/jira/view/PageController.java
+++ b/src/main/java/jira/client/view/PageController.java
@@ -1,9 +1,10 @@
-package jira.view;
+package jira.client.view;
import javafx.fxml.FXML;
+import javafx.scene.control.TextArea;
import javafx.scene.shape.Circle;
-import jira.JiraApp;
-import jira.controller.ControllerResult;
+import jira.client.JiraApp;
+import jira.ControllerResult;
import javafx.scene.control.Label;
import javafx.scene.control.PasswordField;
import javafx.scene.image.Image;
@@ -28,6 +29,18 @@ private void setInfoLabel(Label label, String info) {
label.setTextFill(Paint.valueOf("#000000"));
}
+ @FXML
+ private void setInfoLabel(TextArea area, String info) {
+ area.setText(info);
+ area.setStyle("-fx-text-fill: #000000");
+ }
+
+ @FXML
+ private void setErrorLabel(TextArea area, String info) {
+ area.setText(info);
+ area.setStyle("-fx-text-fill: #E74C3C");
+ }
+
protected void showResult(Label label, ControllerResult result) {
if (result.success)
setInfoLabel(label, result.message);
@@ -35,6 +48,13 @@ protected void showResult(Label label, ControllerResult result) {
setErrorLabel(label, result.message);
}
+ protected void showResult(TextArea area, ControllerResult result) {
+ if (result.success)
+ setInfoLabel(area, result.message);
+ else
+ setErrorLabel(area, result.message);
+ }
+
protected String getTextFromField(TextField field) {
return field.getText().trim();
}
diff --git a/src/main/java/jira/client/view/ProfilePageController.java b/src/main/java/jira/client/view/ProfilePageController.java
new file mode 100644
index 0000000..c0c55b4
--- /dev/null
+++ b/src/main/java/jira/client/view/ProfilePageController.java
@@ -0,0 +1,222 @@
+package jira.client.view;
+
+import javafx.application.Platform;
+import javafx.event.ActionEvent;
+import javafx.fxml.FXML;
+import javafx.fxml.FXMLLoader;
+import javafx.scene.Node;
+import javafx.scene.Scene;
+import javafx.scene.control.Label;
+import javafx.scene.image.Image;
+import javafx.scene.image.ImageView;
+import javafx.scene.input.DragEvent;
+import javafx.scene.input.Dragboard;
+import javafx.scene.input.MouseEvent;
+import javafx.scene.input.TransferMode;
+import javafx.scene.layout.BorderPane;
+import javafx.stage.Stage;
+import jira.client.JiraApp;
+import java.io.File;
+import java.io.FileInputStream;
+import java.io.IOException;
+
+public class ProfilePageController extends PageController {
+ private String currentUsername;
+ private String currentRole;
+ private Image cachedProfilePicImage;
+
+ @FXML private BorderPane pane;
+ @FXML private Label usernameLabel;
+ @FXML private Label emailLabel;
+ @FXML private ImageView profilePicImageView;
+ @FXML private Label scoreLabel;
+
+ protected void setCurrentUsername(String currentUsername) {
+ this.currentUsername = currentUsername;
+ }
+
+ protected void setCurrentRole(String currentRole) {
+ this.currentRole = currentRole;
+ }
+
+ protected void setCurrentUserProfilePic(Image profilePic) {
+ profilePicImageView.setImage(profilePic);
+ }
+
+ protected void setup() {
+ setUsernameLabel();
+ setEmailLabel();
+ setScoreLabel();
+ }
+
+ private void setUsernameLabel() {
+ usernameLabel.setText(currentUsername);
+ }
+
+ private void setEmailLabel() {
+// emailLabel.setText(UserController.getController().getEmail(currentUsername));
+ emailLabel.setText((String) new RPCExecutor()
+ .execute("UserController", "getEmail", currentUsername)
+ );
+ }
+
+ private void setScoreLabel() {
+// scoreLabel.setText(Integer.toString(UserController.getController().getScore(currentUsername)));
+ scoreLabel.setText(Integer.toString((int) new RPCExecutor()
+ .execute("UserController", "getScore", currentUsername))
+ );
+ }
+
+ @FXML
+ private void changeUsername(ActionEvent event) {
+ pane.setDisable(true);
+
+ FXMLLoader fxmlLoader = new FXMLLoader(JiraApp.class.getResource("changeUsernamePopup.fxml"));
+ try {
+ Scene scene = new Scene(fxmlLoader.load());
+ Stage newStage = new Stage();
+ newStage.setScene(scene);
+
+ ChangeUsernamePopupController changeUsernamePopupController = fxmlLoader.getController();
+ changeUsernamePopupController.setCurrentUsername(currentUsername);
+ changeUsernamePopupController.setProfilePageController(this);
+ newStage.setOnHidden(e -> {pane.setDisable(false);});
+
+ newStage.show();
+ }
+ catch (IOException e) {
+ e.printStackTrace();
+ }
+ }
+
+ protected void changePasswordPopupReturn(ActionEvent event) {
+ pane.setDisable(false);
+ gotoLoginPage(event);
+ }
+
+ protected void changeUsernamePopupReturn() {
+ pane.setDisable(false);
+ }
+
+ @FXML
+ private void changePassword(ActionEvent event) {
+ pane.setDisable(true);
+
+ FXMLLoader fxmlLoader = new FXMLLoader(JiraApp.class.getResource("changePasswordPopup.fxml"));
+ try {
+ Scene scene = new Scene(fxmlLoader.load());
+ Stage newStage = new Stage();
+ newStage.setScene(scene);
+
+ ChangePasswordPopupController changePasswordPopupController = fxmlLoader.getController();
+ changePasswordPopupController.setCurrentUsername(currentUsername);
+ changePasswordPopupController.setProfilePageController(this);
+ newStage.setOnHidden(e -> {pane.setDisable(false);});
+
+ newStage.show();
+ }
+ catch (IOException e) {
+ e.printStackTrace();
+ }
+ }
+
+ @FXML
+ private void askToUploadPic(MouseEvent event) {
+ cachedProfilePicImage = profilePicImageView.getImage();
+ setGif(profilePicImageView, "ask-to-upload.gif");
+ }
+
+ @FXML
+ private void stopAskingForUploadPic(MouseEvent event) {
+ setProfPic(profilePicImageView, cachedProfilePicImage);
+ }
+
+ @FXML
+ private void askToUploadPicDnD(DragEvent event) {
+ cachedProfilePicImage = profilePicImageView.getImage();
+ setGif(profilePicImageView, "ask-to-upload.gif");
+
+ if (event.getDragboard().hasFiles())
+ event.acceptTransferModes(TransferMode.ANY);
+ }
+
+ @FXML
+ private void stopAskingForUploadPicDnD(DragEvent event) {
+ setProfPic(profilePicImageView, cachedProfilePicImage);
+ event.consume();
+ }
+
+ @FXML
+ private void uploadPicDnD(DragEvent event) {
+ final Dragboard db = event.getDragboard();
+
+ if (db.hasFiles()) {
+ File file = db.getFiles().get(0);
+ final boolean isAccepted = file.getName().toLowerCase().endsWith(".png")
+ || file.getName().toLowerCase().endsWith(".jpeg")
+ || file.getName().toLowerCase().endsWith(".jpg");
+
+ if (db.hasFiles() && isAccepted) {
+ Platform.runLater(() -> {
+ try {
+ sendAndSetProfilePic(file);
+ } catch (IOException e) {
+ e.printStackTrace();
+ }
+ });
+ }
+ }
+
+ stopAskingForUploadPicDnD(event);
+ }
+
+ private void sendAndSetProfilePic(File fileToSend) throws IOException {
+ Image newImage = new Image(
+ new FileInputStream(fileToSend.getAbsolutePath())
+ );
+
+// UserController.getController().setProfilePic(currentUsername, newImage);
+ new RPCExecutor().execute("UserController", "setProfilePic", currentUsername, newImage);
+ setCurrentUserProfilePic(newImage);
+ }
+
+ @FXML
+ private void back(ActionEvent event) {
+ gotoMainMenu(event);
+ currentUsername = null;
+ currentRole = null;
+ }
+
+ private void gotoMainMenu(ActionEvent event) {
+ try {
+ FXMLLoader loader = new FXMLLoader(JiraApp.class.getResource("mainMenu.fxml"));
+ Scene scene = new Scene(loader.load());
+ Stage stage = (Stage) ((Node) event.getSource()).getScene().getWindow();
+
+ MainMenuPageController mainMenuPageController = loader.getController();
+ mainMenuPageController.setCurrentUsername(currentUsername);
+ mainMenuPageController.setRole(currentRole);
+ mainMenuPageController.setup();
+
+ stage.setScene(scene);
+ stage.show();
+ }
+ catch (IOException e) {
+ e.printStackTrace();
+ }
+ }
+
+ protected void gotoLoginPage(ActionEvent event) {
+ try {
+ FXMLLoader loader = new FXMLLoader(JiraApp.class.getResource("login.fxml"));
+ Scene scene = new Scene(loader.load());
+ Stage stage = (Stage) pane.getScene().getWindow();
+
+ stage.setScene(scene);
+ stage.show();
+ }
+ catch (IOException e) {
+ e.printStackTrace();
+ }
+ }
+}
\ No newline at end of file
diff --git a/src/main/java/jira/client/view/RPCExecutor.java b/src/main/java/jira/client/view/RPCExecutor.java
new file mode 100644
index 0000000..67edfc2
--- /dev/null
+++ b/src/main/java/jira/client/view/RPCExecutor.java
@@ -0,0 +1,79 @@
+package jira.client.view;
+
+import jira.RPCMessage;
+
+import java.io.*;
+import java.net.Socket;
+
+public class RPCExecutor {
+ private static String token;
+ private static final String serverIp = "127.0.0.1";
+ private static final int serverPort = 5000;
+
+ private Socket socket;
+ private ObjectOutputStream objectOutputStream;
+ private ObjectInputStream objectInputStream;
+
+ public RPCExecutor() {
+ try {
+ setToken();
+ closeAll();
+ this.socket = new Socket(serverIp, serverPort);
+ this.objectOutputStream = new ObjectOutputStream(socket.getOutputStream());
+ this.objectInputStream = new ObjectInputStream(socket.getInputStream());
+ }
+ catch (IOException e) {
+ throw new RuntimeException("ERROR");
+ }
+ }
+
+ private void closeAll() {
+ try {
+ if (this.socket != null) {
+ this.socket.close();
+ this.objectInputStream.close();
+ this.objectOutputStream.close();
+ }
+ }
+ catch (IOException e) {
+ e.printStackTrace();
+ }
+ }
+
+ private void setToken() {
+ if (token != null)
+ return;
+
+ try {
+ this.socket = new Socket(serverIp, serverPort);
+ this.objectOutputStream = new ObjectOutputStream(socket.getOutputStream());
+ this.objectInputStream = new ObjectInputStream(socket.getInputStream());
+
+ RPCMessage rpcMessage = new RPCMessage("", "UserController", "genToken", null);
+ token = (String) exec(rpcMessage);
+ }
+ catch (IOException e) {
+ e.printStackTrace();
+ }
+ }
+
+ private Object exec(RPCMessage rpcMessage) {
+ try {
+ objectOutputStream.writeObject(rpcMessage);
+ objectOutputStream.flush();
+ Object output = objectInputStream.readObject();
+ closeAll();
+ return output;
+ }
+ catch (IOException | ClassNotFoundException e) {
+ e.printStackTrace();
+ }
+
+ return null;
+ }
+
+ public Object execute(String className, String methodName, Object... args) {
+ RPCMessage rpcMessage = new RPCMessage(token, className, methodName, args);
+ return exec(rpcMessage);
+ }
+}
diff --git a/src/main/java/jira/view/RegisterPopupController.java b/src/main/java/jira/client/view/RegisterPopupController.java
similarity index 86%
rename from src/main/java/jira/view/RegisterPopupController.java
rename to src/main/java/jira/client/view/RegisterPopupController.java
index fffb39f..fcedb0c 100644
--- a/src/main/java/jira/view/RegisterPopupController.java
+++ b/src/main/java/jira/client/view/RegisterPopupController.java
@@ -1,9 +1,7 @@
-package jira.view;
+package jira.client.view;
-import javafx.scene.Scene;
import javafx.scene.input.KeyEvent;
-import jira.controller.ControllerResult;
-import jira.controller.UserController;
+import jira.ControllerResult;
import javafx.event.ActionEvent;
import javafx.fxml.FXML;
import javafx.scene.Node;
@@ -16,7 +14,6 @@
import javafx.stage.WindowEvent;
public class RegisterPopupController extends PageController {
- private final UserController userController = UserController.getController();
private LoginPageController loginPageController;
@FXML private BorderPane pane;
@@ -38,7 +35,10 @@ private void register(ActionEvent event) {
String pass2 = getTextFromField(pass2Field);
String email = getTextFromField(emailField);
- ControllerResult result = userController.createUser(username, pass1, pass2, email);
+// ControllerResult result = userController.createUser(username, pass1, pass2, email);
+ ControllerResult result = (ControllerResult) new RPCExecutor()
+ .execute("UserController", "createUser", username
+ , pass1, pass2, email);
showResult(errors, result);
if (result.success)
diff --git a/src/main/java/jira/client/view/TeamMenuPageController.java b/src/main/java/jira/client/view/TeamMenuPageController.java
new file mode 100644
index 0000000..6b467d3
--- /dev/null
+++ b/src/main/java/jira/client/view/TeamMenuPageController.java
@@ -0,0 +1,217 @@
+package jira.client.view;
+
+import javafx.collections.FXCollections;
+import javafx.collections.ObservableList;
+import javafx.event.ActionEvent;
+import javafx.event.EventHandler;
+import javafx.fxml.FXML;
+import javafx.fxml.FXMLLoader;
+import javafx.scene.Node;
+import javafx.scene.Scene;
+import javafx.scene.control.*;
+import javafx.scene.control.cell.PropertyValueFactory;
+import javafx.scene.input.MouseButton;
+import javafx.scene.input.MouseEvent;
+import javafx.scene.layout.BorderPane;
+import javafx.stage.Stage;
+import javafx.util.Callback;
+import jira.Role;
+import jira.client.JiraApp;
+import jira.ControllerResult;
+
+import java.io.IOException;
+import java.util.ArrayList;
+
+public class TeamMenuPageController extends PageController {
+ private String currentUsername;
+ private String currentRole;
+
+ @FXML private BorderPane pane;
+ @FXML private TableView listOfTeams;
+ @FXML private Label leaderOrMemberLabel;
+ @FXML private TextField teamNameField;
+ @FXML private TextArea errorField;
+
+ protected void setCurrentUsername(String currentUsername) {
+ this.currentUsername = currentUsername;
+ }
+
+ protected void setCurrentRole(String currentRole) {
+ this.currentRole = currentRole;
+ }
+
+ private void setLeaderOrMemberLabel() {
+ leaderOrMemberLabel.setText(currentRole + " of:");
+ }
+
+ public void setup() {
+ setLeaderOrMemberLabel();
+ clearTeamListView();
+ prepareTeamListView();
+ }
+
+ private void clearTeamListView() {
+ listOfTeams.getItems().clear();
+ listOfTeams.getColumns().clear();
+ }
+
+ private void prepareTeamListView() {
+ TableColumn teamNameColumn = new TableColumn<>("Team Name");
+ teamNameColumn.setCellValueFactory(new PropertyValueFactory("teamName"));
+
+ TableColumn memberCountColumn = new TableColumn<>("Member Count");
+ memberCountColumn.setCellValueFactory(new PropertyValueFactory("memberCount"));
+
+ listOfTeams.setRowFactory(param -> {
+ TableRow row = new TableRow<>();
+ row.setOnMouseClicked(event -> {
+ if (!row.isEmpty() && event.getButton() == MouseButton.PRIMARY &&
+ event.getClickCount() == 2) {
+ TeamStats teamStats = row.getItem();
+ System.out.println(teamStats.getTeamName());
+ if(currentRole.equals(Role.MEMBER.toString())) {
+ openTeamViewPopup(teamStats);
+ }
+ else if (currentRole.equals(Role.LEADER.toString())) {
+// System.out.println("HERE");
+ openTeamViewPopupLeader(teamStats);
+ }
+ }
+ });
+ return row;
+ });
+
+ listOfTeams.getColumns().addAll(teamNameColumn, memberCountColumn);
+ ObservableList teamStats = getTeamListViewItems();
+ System.out.println(teamStats.size());
+ listOfTeams.setItems(teamStats);
+ }
+
+ private ObservableList getTeamListViewItems() {
+ final ObservableList teamStats = FXCollections.observableArrayList();
+// ArrayList teamNames = TeamController.getController().showTeamsAffiliated(currentUsername);
+ ArrayList teamNames = (ArrayList) new RPCExecutor()
+ .execute("TeamController", "showTeamsAffiliated", currentUsername);
+// ArrayList teamCounts = TeamController.getController().getAffiliatedTeamsMemberCount(currentUsername);
+ ArrayList teamCounts = (ArrayList) new RPCExecutor()
+ .execute("TeamController", "getAffiliatedTeamsMemberCount", currentUsername);
+ for (int i = 0; i < teamNames.size(); i++) {
+ teamStats.add(new TeamStats(teamNames.get(i), teamCounts.get(i)));
+ }
+
+ return teamStats;
+ }
+
+ private void openTeamViewPopup(TeamStats teamStats) {
+ pane.setDisable(true);
+
+ FXMLLoader fxmlLoader = new FXMLLoader(JiraApp.class.getResource("enterTeamMenu.fxml"));
+ try {
+ Scene scene = new Scene(fxmlLoader.load());
+ Stage newStage = new Stage();
+ newStage.setScene(scene);
+
+ TeamViewPopupController teamViewPopupController = fxmlLoader.getController();
+ teamViewPopupController.setTeamMenuPageController(this);
+ teamViewPopupController.setCurrentUsername(currentUsername);
+ teamViewPopupController.setSelectedTemName(teamStats.getTeamName());
+ newStage.setOnHidden(e -> {pane.setDisable(false);});
+
+ newStage.show();
+ }
+ catch (IOException e) {
+ e.printStackTrace();
+ }
+ }
+
+ private void openTeamViewPopupLeader(TeamStats teamStats) {
+ pane.setDisable(true);
+
+ FXMLLoader fxmlLoader = new FXMLLoader(JiraApp.class.getResource("enterTeamMenuLeader.fxml"));
+ try {
+ Scene scene = new Scene(fxmlLoader.load());
+ Stage newStage = new Stage();
+ newStage.setScene(scene);
+
+ TeamViewPopupControllerLeader teamViewPopupControllerLeader = fxmlLoader.getController();
+ teamViewPopupControllerLeader.setTeamMenuPageController(this);
+ teamViewPopupControllerLeader.setCurrentUsername(currentUsername);
+ teamViewPopupControllerLeader.setSelectedTemName(teamStats.getTeamName());
+ newStage.setOnHidden(e -> {pane.setDisable(false);});
+
+ newStage.show();
+ }
+ catch (IOException e) {
+ e.printStackTrace();
+ }
+ }
+
+ protected void teamViewReturn() {
+ pane.setDisable(false);
+ }
+
+ @FXML
+ private void createTeam(ActionEvent event) {
+ String teamName = getTextFromField(teamNameField);
+// ControllerResult result = TeamController.getController().creatTeam(currentUsername, teamName);
+ ControllerResult result = (ControllerResult) new RPCExecutor()
+ .execute("TeamController", "creatTeam", currentUsername, teamName);
+ showResult(errorField, result);
+ }
+
+ @FXML
+ private void back(ActionEvent event) {
+ gotoMainMenu(event);
+ currentUsername = null;
+ currentRole = null;
+ }
+
+ private void gotoMainMenu(ActionEvent event) {
+ try {
+ FXMLLoader loader = new FXMLLoader(JiraApp.class.getResource("mainMenu.fxml"));
+ Scene scene = new Scene(loader.load());
+ Stage stage = (Stage) ((Node) event.getSource()).getScene().getWindow();
+
+ MainMenuPageController mainMenuPageController = loader.getController();
+ mainMenuPageController.setCurrentUsername(currentUsername);
+ mainMenuPageController.setRole(currentRole);
+ mainMenuPageController.setup();
+
+ stage.setScene(scene);
+ stage.show();
+ }
+ catch (IOException e) {
+ e.printStackTrace();
+ }
+ }
+
+ protected void memberTeamViewPopupReturn() {
+ pane.setDisable(false);
+ }
+
+ public class TeamStats {
+ private String teamName;
+ private int memberCount;
+
+ public TeamStats(String teamName, int memberCount) {
+ this.teamName = teamName;
+ this.memberCount = memberCount;
+ }
+
+ public int getMemberCount() {
+ return memberCount;
+ }
+
+ public String getTeamName() {
+ return teamName;
+ }
+
+ public void setTeamName(String teamName) {
+ this.teamName = teamName;
+ }
+
+ public void setMemberCount(int memberCount) {
+ this.memberCount = memberCount;
+ }
+ }
+}
diff --git a/src/main/java/jira/view/TeamViewPopupController.java b/src/main/java/jira/client/view/TeamViewPopupController.java
similarity index 58%
rename from src/main/java/jira/view/TeamViewPopupController.java
rename to src/main/java/jira/client/view/TeamViewPopupController.java
index 5cfb726..1f95756 100644
--- a/src/main/java/jira/view/TeamViewPopupController.java
+++ b/src/main/java/jira/client/view/TeamViewPopupController.java
@@ -1,18 +1,18 @@
-package jira.view;
+package jira.client.view;
import javafx.collections.FXCollections;
import javafx.collections.ObservableList;
-import javafx.event.EventHandler;
+import javafx.event.ActionEvent;
import javafx.fxml.FXML;
+import javafx.scene.Node;
import javafx.scene.control.*;
import javafx.scene.control.cell.PropertyValueFactory;
+import javafx.scene.image.Image;
import javafx.scene.image.ImageView;
-import javafx.scene.input.MouseEvent;
import javafx.scene.paint.Paint;
-import javafx.util.Callback;
-import jira.controller.ControllerResult;
-import jira.controller.TeamController;
-import jira.controller.UserController;
+import javafx.stage.Stage;
+import jira.ControllerResult;
+import jira.Role;
import java.util.ArrayList;
@@ -25,7 +25,6 @@ public class TeamViewPopupController extends PageController {
@FXML private TableView teamMembersTableView;
@FXML private Label teamNameLabel;
@FXML private Label teamScoreLabel;
- @FXML private Label resultLabel;
protected void setTeamMenuPageController(TeamMenuPageController teamMenuPageController) {
this.teamMenuPageController = teamMenuPageController;
@@ -39,17 +38,27 @@ protected void setCurrentUsername(String currentUsername) {
this.currentUsername = currentUsername;
}
- protected void setCurrentRole(String role) {
- this.currentRole = role;
+ protected void setCurrentRole(String currentRole) {
+ this.currentRole = currentRole;
}
- public void initialize() {
+ protected void setTeamNameLabel(String selectedTemName) {
+ this.teamNameLabel.setText(selectedTemName);
+ }
+
+ protected void setTeamScoreLabel(int selectedTeamScore) {
+ this.teamScoreLabel.setText(Integer.toString(selectedTeamScore));
+ }
+
+ public void setup() {
prepareTeamMemberTableView();
}
private ObservableList getMemberTableViewItems() {
final ObservableList memberData = FXCollections.observableArrayList();
- ArrayList memberUsernames = TeamController.getController().getMemberData(selectedTemName);
+// ArrayList memberUsernames = TeamController.getController().getMemberData(selectedTemName);
+ ArrayList memberUsernames = (ArrayList) new RPCExecutor()
+ .execute("TeamController", "getMemberData", selectedTemName);
for (String memberUsername: memberUsernames)
memberData.add(new MemberData(memberUsername));
@@ -70,61 +79,49 @@ private void prepareTeamMemberTableView() {
TableColumn memberOnlineColumn = new TableColumn<>("Online");
memberOnlineColumn.setCellValueFactory(new PropertyValueFactory<>("online"));
- TableColumn buttonColumn = new TableColumn<>("Delete");
- buttonColumn.setCellValueFactory(new PropertyValueFactory<>("deleteButton"));
-
teamMembersTableView.setItems(getMemberTableViewItems());
teamMembersTableView.getColumns().addAll(
- profilePicColumn, memberNameColumn, scoreColumn, memberOnlineColumn, buttonColumn
+ profilePicColumn, memberNameColumn, scoreColumn, memberOnlineColumn
);
}
- private void deleteUser(String username) {
- ControllerResult result = TeamController.getController().deleteTeamMember(currentUsername, username, selectedTemName);
- showResult(resultLabel, result);
- }
-
-// private void openProfileViewPopup(MemberData memberData) {
-//
-// }
-//
-// private Callback, TableCell> getMemberListProfilePicCellFactory() {
-// return param -> {
-// TableCell cell = new TableCell<>();
-// cell.addEventFilter(MouseEvent.MOUSE_ENTERED, new CreateProfileDataPopupHandler());
-// return cell;
-// };
-// }
-//
-// class CreateProfileDataPopupHandler implements EventHandler {
-// @Override
-// public void handle(MouseEvent event) {
-// TableCell cell = (TableCell) event.getSource();
-// int index = cell.getIndex();
-// MemberData memberData = (MemberData) teamMembersTableView.getItems().get(index);
-// openProfileViewPopup(memberData);
-// }
+// private void deleteUser(String username) {
+//// ControllerResult result = TeamController.getController().deleteTeamMember(currentUsername, username, selectedTemName);
+// ControllerResult result = (ControllerResult) new RPCExecutor()
+// .execute("TeamController", "deleteTeamMember", currentUsername
+// , username, selectedTemName);
+// showResult(resultLabel, result);
// }
+ @FXML
+ private void close(ActionEvent event) {
+ teamMenuPageController.setCurrentUsername(currentUsername);
+ teamMenuPageController.setCurrentRole(currentRole);
+ teamMenuPageController.setup();
+ teamMenuPageController.memberTeamViewPopupReturn();
+ Stage stage = (Stage) ((Node) event.getSource()).getScene().getWindow();
+ stage.close();
+ }
+
class MemberData {
private final ImageView profilePic;
private final String memberName;
private final int score;
private final Label online;
- private final Button deleteButton;
public MemberData(String username) {
- UserController userController = UserController.getController();
-
this.memberName = username;
this.profilePic = new ImageView();
- setProfPic(profilePic, userController.getProfilePic(username));
+ setProfPic(profilePic, (Image) new RPCExecutor()
+ .execute("UserController", "getProfilePic", username)
+ );
- this.score = userController.getScore(username);
+ this.score = (int) new RPCExecutor()
+ .execute("UserController", "getScore", username);
this.online = new Label();
- if (userController.isOnline(username)) {
+ if ((Boolean) new RPCExecutor().execute("UserController", "isOnline", username)) {
this.online.setText("ONLINE");
this.online.setTextFill(Paint.valueOf("#E74C3C"));
}
@@ -132,22 +129,12 @@ public MemberData(String username) {
this.online.setText("OFFLINE");
this.online.setTextFill(Paint.valueOf("#3CE748"));
}
-
- this.deleteButton = new Button();
- this.deleteButton.setOnAction(event -> deleteUser(username));
-
- if (!currentRole.equals("Team Leader"))
- deleteButton.setDisable(true);
}
public String getMemberName() {
return memberName;
}
- public Button getDeleteButton() {
- return deleteButton;
- }
-
public int getScore() {
return score;
}
diff --git a/src/main/java/jira/client/view/TeamViewPopupControllerLeader.java b/src/main/java/jira/client/view/TeamViewPopupControllerLeader.java
new file mode 100644
index 0000000..71896a8
--- /dev/null
+++ b/src/main/java/jira/client/view/TeamViewPopupControllerLeader.java
@@ -0,0 +1,196 @@
+package jira.client.view;
+
+import javafx.collections.FXCollections;
+import javafx.collections.ObservableList;
+import javafx.event.ActionEvent;
+import javafx.fxml.FXML;
+import javafx.scene.Node;
+import javafx.scene.control.Label;
+import javafx.scene.control.TableColumn;
+import javafx.scene.control.TableView;
+import javafx.scene.control.TextField;
+import javafx.scene.control.cell.CheckBoxTableCell;
+import javafx.scene.control.cell.PropertyValueFactory;
+import javafx.scene.image.Image;
+import javafx.scene.image.ImageView;
+import javafx.scene.paint.Paint;
+import javafx.stage.Stage;
+import jira.ControllerResult;
+
+import java.util.ArrayList;
+import java.util.HashSet;
+
+public class TeamViewPopupControllerLeader extends PageController {
+ private String currentUsername;
+ private String currentRole;
+ private String selectedTemName;
+ private TeamMenuPageController teamMenuPageController;
+
+ @FXML private TableView teamMembersTableView;
+ @FXML private Label teamNameLabel;
+ @FXML private Label teamScoreLabel;
+ @FXML private Label resultLabel;
+ @FXML private TextField newMemberNameField;
+
+ protected void setTeamMenuPageController(TeamMenuPageController teamMenuPageController) {
+ this.teamMenuPageController = teamMenuPageController;
+ }
+
+ protected void setSelectedTemName(String selectedTemName) {
+ this.selectedTemName = selectedTemName;
+ }
+
+ protected void setCurrentUsername(String currentUsername) {
+ this.currentUsername = currentUsername;
+ }
+
+ protected void setCurrentRole(String currentRole) {
+ this.currentRole = currentRole;
+ }
+
+ protected void setTeamNameLabel(String selectedTemName) {
+ this.teamNameLabel.setText(selectedTemName);
+ }
+
+ protected void setTeamScoreLabel(int selectedTeamScore) {
+ this.teamScoreLabel.setText(Integer.toString(selectedTeamScore));
+ }
+
+ public void setup() {
+ prepareTeamMemberTableView();
+ }
+
+ private ObservableList getMemberTableViewItems() {
+ final ObservableList memberData = FXCollections.observableArrayList();
+// ArrayList memberUsernames = TeamController.getController().getMemberData(selectedTemName);
+ ArrayList memberUsernames = (ArrayList) new RPCExecutor()
+ .execute("TeamController", "getMemberData", selectedTemName);
+
+ for (String memberUsername: memberUsernames)
+ memberData.add(new MemberData(memberUsername));
+
+ return memberData;
+ }
+
+ private void prepareTeamMemberTableView() {
+ TableColumn deleteColumn = new TableColumn<>("");
+ deleteColumn.setCellValueFactory(new PropertyValueFactory<>("delete"));
+ deleteColumn.setCellFactory(param -> new CheckBoxTableCell<>());
+
+ TableColumn profilePicColumn = new TableColumn<>("Profile Picture");
+ profilePicColumn.setCellValueFactory(new PropertyValueFactory<>("profilePic"));
+
+ TableColumn memberNameColumn = new TableColumn<>("Member Name");
+ memberNameColumn.setCellValueFactory(new PropertyValueFactory<>("memberName"));
+
+ TableColumn scoreColumn = new TableColumn<>("Score");
+ scoreColumn.setCellValueFactory(new PropertyValueFactory<>("score"));
+
+ TableColumn memberOnlineColumn = new TableColumn<>("Online");
+ memberOnlineColumn.setCellValueFactory(new PropertyValueFactory<>("online"));
+
+ teamMembersTableView.setItems(getMemberTableViewItems());
+ teamMembersTableView.getColumns().addAll(
+ deleteColumn, profilePicColumn, memberNameColumn, scoreColumn, memberOnlineColumn
+ );
+ }
+
+ @FXML
+ private void deleteSelected(ActionEvent event) {
+ final HashSet chosenMembers = new HashSet<>();
+ for (MemberData memberData: teamMembersTableView.getItems())
+ if (memberData.getDelete())
+ chosenMembers.add(memberData);
+
+ for (MemberData chosenMember: chosenMembers)
+ new RPCExecutor().execute("TeamController", "deleteTeamMember",
+ chosenMember.getMemberName(), currentUsername, selectedTemName);
+ teamMembersTableView.getItems().removeAll(chosenMembers);
+
+ setup();
+ }
+
+ @FXML
+ private void addMember(ActionEvent event) {
+ String newMemberName = getTextFromField(newMemberNameField);
+ ControllerResult result = (ControllerResult) new RPCExecutor()
+ .execute("TeamController", "addMemberToTeam", currentUsername,
+ selectedTemName, newMemberName);
+ showResult(resultLabel, result);
+ if (result.success)
+ setup();
+ }
+
+ private void deleteUser(String username) {
+ ControllerResult result = (ControllerResult) new RPCExecutor()
+ .execute("TeamController", "deleteTeamMember", currentUsername
+ , username, selectedTemName);
+ showResult(resultLabel, result);
+ }
+
+ @FXML
+ private void close(ActionEvent event) {
+ teamMenuPageController.setCurrentUsername(currentUsername);
+ teamMenuPageController.setCurrentRole(currentRole);
+ teamMenuPageController.setup();
+ teamMenuPageController.memberTeamViewPopupReturn();
+ Stage stage = (Stage) ((Node) event.getSource()).getScene().getWindow();
+ stage.close();
+ }
+
+ class MemberData {
+ private final ImageView profilePic;
+ private final String memberName;
+ private final int score;
+ private final Label online;
+ private Boolean delete;
+
+ public MemberData(String username) {
+ this.memberName = username;
+
+ this.profilePic = new ImageView();
+ setProfPic(profilePic, (Image) new RPCExecutor()
+ .execute("UserController", "getProfilePic", username)
+ );
+
+ this.score = (int) new RPCExecutor()
+ .execute("UserController", "getScore", username);
+ this.online = new Label();
+
+ if ((Boolean) new RPCExecutor().execute("UserController", "isOnline", username)) {
+ this.online.setText("ONLINE");
+ this.online.setTextFill(Paint.valueOf("#E74C3C"));
+ }
+ else {
+ this.online.setText("OFFLINE");
+ this.online.setTextFill(Paint.valueOf("#3CE748"));
+ }
+
+ this.delete = false;
+ }
+
+ public String getMemberName() {
+ return memberName;
+ }
+
+ public int getScore() {
+ return score;
+ }
+
+ public Label getOnline() {
+ return online;
+ }
+
+ public ImageView getProfilePic() {
+ return profilePic;
+ }
+
+ public Boolean getDelete() {
+ return delete;
+ }
+
+ public void setDelete(Boolean delete) {
+ this.delete = delete;
+ }
+ }
+}
diff --git a/src/main/java/jira/server/JiraServer.java b/src/main/java/jira/server/JiraServer.java
new file mode 100644
index 0000000..9ee1665
--- /dev/null
+++ b/src/main/java/jira/server/JiraServer.java
@@ -0,0 +1,23 @@
+package jira.server;
+
+import jira.server.controller.RPCServer;
+import jira.Role;
+import jira.server.model.User;
+import jira.server.model.UserSave;
+
+public class JiraServer {
+ private static void setup() {
+ new User("admin", "Password123", "admin@gmail.com", Role.ADMIN);
+ new User("test", "Password123", "test@gmail.com", Role.MEMBER);
+ }
+
+ static {
+ UserSave.init();
+ }
+
+ public static void main(String[] args) {
+ setup();
+ RPCServer server = new RPCServer();
+ server.serveForever();
+ }
+}
diff --git a/src/main/java/jira/controller/BoardController.java b/src/main/java/jira/server/controller/BoardController.java
similarity index 99%
rename from src/main/java/jira/controller/BoardController.java
rename to src/main/java/jira/server/controller/BoardController.java
index fae32a8..14b7489 100644
--- a/src/main/java/jira/controller/BoardController.java
+++ b/src/main/java/jira/server/controller/BoardController.java
@@ -1,6 +1,8 @@
-package jira.controller;
+package jira.server.controller;
-import jira.model.*;
+import jira.ControllerResult;
+import jira.server.model.*;
+import jira.Role;
public class BoardController {
private static final BoardController controller = new BoardController();
diff --git a/src/main/java/jira/controller/Controller.java b/src/main/java/jira/server/controller/Controller.java
similarity index 83%
rename from src/main/java/jira/controller/Controller.java
rename to src/main/java/jira/server/controller/Controller.java
index fa3f570..86c9b9c 100644
--- a/src/main/java/jira/controller/Controller.java
+++ b/src/main/java/jira/server/controller/Controller.java
@@ -1,4 +1,4 @@
-package jira.controller;
+package jira.server.controller;
public class Controller {
private static Controller controller = new Controller();
diff --git a/src/main/java/jira/controller/Privileged.java b/src/main/java/jira/server/controller/Privileged.java
similarity index 86%
rename from src/main/java/jira/controller/Privileged.java
rename to src/main/java/jira/server/controller/Privileged.java
index ed06310..845f099 100644
--- a/src/main/java/jira/controller/Privileged.java
+++ b/src/main/java/jira/server/controller/Privileged.java
@@ -1,4 +1,4 @@
-package jira.controller;
+package jira.server.controller;
/**
* This is just a helper annotation.
diff --git a/src/main/java/jira/server/controller/RPCServer.java b/src/main/java/jira/server/controller/RPCServer.java
new file mode 100644
index 0000000..342d8ef
--- /dev/null
+++ b/src/main/java/jira/server/controller/RPCServer.java
@@ -0,0 +1,103 @@
+package jira.server.controller;
+
+import jira.server.model.User;
+
+import java.io.*;
+import java.lang.reflect.InvocationTargetException;
+import java.lang.reflect.Method;
+import java.net.ServerSocket;
+import java.net.Socket;
+import java.util.HashMap;
+import jira.RPCMessage;
+
+public class RPCServer {
+ private static final int PORT = 5000;
+ private static HashMap tokenMap;
+
+ private ServerSocket serverSocket;
+
+ public static void addToken(String token, User user) {
+ tokenMap.put(token, user);
+ }
+
+ public static User getUser(String token) {
+ return tokenMap.get(token);
+ }
+
+ public static void deleteToken(String token) {
+ tokenMap.remove(token);
+ }
+
+ public RPCServer () {
+ tokenMap = new HashMap<>();
+
+ try {
+ this.serverSocket = new ServerSocket(PORT);
+ }
+ catch (IOException e) {
+ e.printStackTrace();
+ }
+ }
+
+ public void serveForever() {
+ Runtime.getRuntime().addShutdownHook(new Thread(() -> System.out.println("Server shutting down")));
+
+ while (true) {
+ try {
+ Socket switchedSocket = serverSocket.accept();
+ new Thread(() -> handleClient(switchedSocket)).start();
+ }
+ catch (IOException e) {
+ e.printStackTrace();
+ break;
+ }
+ }
+ }
+
+ private void handleClient(Socket switchedSocket) {
+ try {
+ ObjectOutputStream objectOutputStream = new ObjectOutputStream(switchedSocket.getOutputStream());
+ ObjectInputStream objectInputStream = new ObjectInputStream(switchedSocket.getInputStream());
+
+ RPCMessage rpcMessage = (RPCMessage) objectInputStream.readObject();
+ Object rpcReturn = executeRpc(rpcMessage);
+
+ objectOutputStream.writeObject(rpcReturn);
+ objectOutputStream.flush();
+
+ switchedSocket.close();
+ objectInputStream.close();
+ objectOutputStream.close();
+ }
+ catch (IOException | ClassNotFoundException e) {
+ e.printStackTrace();
+ }
+ }
+
+ private Object executeRpc(RPCMessage rpcMessage) {
+ String className = rpcMessage.getClassName();
+ String methodName = rpcMessage.getMethodName();
+
+ try {
+ Class> controllerClass = Class.forName(this.getClass().getPackageName() + "." + className);
+ Object controllerObject = controllerClass.getMethod("getController").invoke(null);
+ Method[] methods = controllerObject.getClass().getMethods();
+// System.out.printf("%s.%s\n%n", className, methodName);
+ for (Method method: methods)
+ if (getTailName(method.getName()).equals(methodName))
+ return method.invoke(controllerObject, rpcMessage.getArgs());
+ return null;
+ }
+ catch (ClassNotFoundException | IllegalAccessException |
+ NoSuchMethodException | InvocationTargetException e) {
+ e.printStackTrace();
+ }
+
+ return null;
+ }
+
+ private String getTailName(String name) {
+ String[] nameSplit = name.split("\\.");
+ return nameSplit[nameSplit.length-1];
+ }
+}
diff --git a/src/main/java/jira/controller/TasksController.java b/src/main/java/jira/server/controller/TasksController.java
similarity index 96%
rename from src/main/java/jira/controller/TasksController.java
rename to src/main/java/jira/server/controller/TasksController.java
index 1057eeb..009b193 100644
--- a/src/main/java/jira/controller/TasksController.java
+++ b/src/main/java/jira/server/controller/TasksController.java
@@ -1,9 +1,10 @@
-package jira.controller;
+package jira.server.controller;
-import jira.model.Priority;
-import jira.model.Role;
-import jira.model.Task;
-import jira.model.User;
+import jira.ControllerResult;
+import jira.server.model.Priority;
+import jira.Role;
+import jira.server.model.Task;
+import jira.server.model.User;
import java.time.LocalDate;
import java.time.LocalDateTime;
diff --git a/src/main/java/jira/controller/TeamController.java b/src/main/java/jira/server/controller/TeamController.java
similarity index 96%
rename from src/main/java/jira/controller/TeamController.java
rename to src/main/java/jira/server/controller/TeamController.java
index 4988a7d..83ad27c 100644
--- a/src/main/java/jira/controller/TeamController.java
+++ b/src/main/java/jira/server/controller/TeamController.java
@@ -1,15 +1,16 @@
-package jira.controller;
+package jira.server.controller;
import java.time.LocalDate;
import java.time.LocalDateTime;
import java.time.format.DateTimeParseException;
import java.util.ArrayList;
-import jira.model.Board;
-import jira.model.Role;
-import jira.model.Task;
-import jira.model.Team;
-import jira.model.User;
+import jira.ControllerResult;
+import jira.server.model.Board;
+import jira.Role;
+import jira.server.model.Task;
+import jira.server.model.Team;
+import jira.server.model.User;
public class TeamController {
private static final TeamController controller = new TeamController();
@@ -161,6 +162,12 @@ public ControllerResult showTeams(String username){
return new ControllerResult(Team.showTeams(username), true);
}
+ /**
+ * Lists the name of teams that the user is either the leader
+ * or a member.
+ * @param username Username of the one to check
+ * @return List of team names
+ */
public ArrayList showTeamsAffiliated(String username) {
User user = User.getUserByUsername(username);
if (user != null) {
diff --git a/src/main/java/jira/controller/UserController.java b/src/main/java/jira/server/controller/UserController.java
similarity index 87%
rename from src/main/java/jira/controller/UserController.java
rename to src/main/java/jira/server/controller/UserController.java
index 3241d76..bf65c7b 100644
--- a/src/main/java/jira/controller/UserController.java
+++ b/src/main/java/jira/server/controller/UserController.java
@@ -1,15 +1,19 @@
-package jira.controller;
+package jira.server.controller;
import java.time.LocalDate;
+import java.util.ArrayList;
+import java.util.Random;
import javafx.scene.image.Image;
-import jira.model.Role;
-import jira.model.Task;
-import jira.model.Team;
-import jira.model.User;
-import jira.view.LoginAndRegisterMenu;
+import jira.ControllerResult;
+import jira.Role;
+import jira.server.model.Task;
+import jira.server.model.Team;
+import jira.server.model.User;
public class UserController {
+ private static final int TOKEN_LEN = 64;
+
private static UserController controller = new UserController();
public boolean checkLeaderPrivilege(String username) {
@@ -24,10 +28,7 @@ public static UserController getController() {
}
public boolean duplicateUsernames(String username){
- if(User.userExists(username)){
- return true;
- }
- return false;
+ return User.userExists(username);
}
public boolean duplicateEmails(String email){
@@ -140,6 +141,8 @@ else if (!User.isStrongPassword(newPassword))
public ControllerResult changeUsername(String username, String assignedUser){
User user = User.getUserByUsername(assignedUser);
+ assert user != null;
+
if (username.length() < 4)
return new ControllerResult("Your username must include at least 4 characters!", false);
else if (username.equals(assignedUser))
@@ -247,10 +250,6 @@ public void saveUsers(){
User.saveUser();
}
- public void updateAssignedUser(String username) {
- LoginAndRegisterMenu.assignedUser = username;
- }
-
public ControllerResult sendMessage(String username,String message, String teamName){
if(!User.userExists(username)){
return new ControllerResult("no user exists with username!",false);
@@ -269,29 +268,56 @@ public ControllerResult getUserRole(String username) {
}
public Image getProfilePic(String username) {
+ System.out.println(username);
User user = User.getUserByUsername(username);
- if (user != null)
- return user.getProfiePic();
- return null;
+ assert user != null;
+ return user.getProfiePic();
}
public void setProfilePic(String username, Image newImage) {
User user = User.getUserByUsername(username);
- if (user != null)
- user.setProfilePic(newImage);
+ assert user != null;
+ user.setProfilePic(newImage);
}
public int getScore(String username) {
User user = User.getUserByUsername(username);
- if (user != null)
- return user.getScore();
- throw new RuntimeException("WHAT?");
+ assert user != null;
+ return user.getScore();
}
public boolean isOnline(String username) {
User user = User.getUserByUsername(username);
- if (user != null)
- return user.loggedIn();
- throw new RuntimeException("WHAT?");
+ assert user != null;
+ return user.loggedIn();
+ }
+
+ public ArrayList getAllUsernames() {
+ return User.getAllUsernames();
+ }
+
+ public String getEmail(String currentUsername) {
+ User user = User.getUserByUsername(currentUsername);
+ assert user != null;
+ return user.getEmail();
+ }
+
+ public String genToken() {
+// User user = User.getUserByUsername(username);
+// if (user != null) {
+ int leftLimit = 97;
+ int rightLimit = 122;
+ Random random = new Random();
+
+ // RPCServer.addToken(token, user);
+
+ return random.ints(leftLimit, rightLimit + 1)
+ .limit(TOKEN_LEN)
+ .collect(StringBuilder::new, StringBuilder::appendCodePoint, StringBuilder::append)
+ .toString();
+// }
+// else {
+// return null;
+// }
}
}
diff --git a/src/main/java/jira/model/Board.java b/src/main/java/jira/server/model/Board.java
similarity index 99%
rename from src/main/java/jira/model/Board.java
rename to src/main/java/jira/server/model/Board.java
index 0fac811..d26e55f 100644
--- a/src/main/java/jira/model/Board.java
+++ b/src/main/java/jira/server/model/Board.java
@@ -1,4 +1,4 @@
-package jira.model;
+package jira.server.model;
import java.time.LocalDate;
import java.time.LocalDateTime;
diff --git a/src/main/java/jira/model/Notification.java b/src/main/java/jira/server/model/Notification.java
similarity index 95%
rename from src/main/java/jira/model/Notification.java
rename to src/main/java/jira/server/model/Notification.java
index 74f5ebf..f9c7005 100644
--- a/src/main/java/jira/model/Notification.java
+++ b/src/main/java/jira/server/model/Notification.java
@@ -1,4 +1,4 @@
-package jira.model;
+package jira.server.model;
import java.time.LocalDateTime;
diff --git a/src/main/java/jira/model/Priority.java b/src/main/java/jira/server/model/Priority.java
similarity index 93%
rename from src/main/java/jira/model/Priority.java
rename to src/main/java/jira/server/model/Priority.java
index b4aaffc..cc39913 100644
--- a/src/main/java/jira/model/Priority.java
+++ b/src/main/java/jira/server/model/Priority.java
@@ -1,4 +1,4 @@
-package jira.model;
+package jira.server.model;
public enum Priority {
LOWEST(0) {
diff --git a/src/main/java/jira/model/Task.java b/src/main/java/jira/server/model/Task.java
similarity index 99%
rename from src/main/java/jira/model/Task.java
rename to src/main/java/jira/server/model/Task.java
index b33e0e1..1cbf982 100644
--- a/src/main/java/jira/model/Task.java
+++ b/src/main/java/jira/server/model/Task.java
@@ -1,9 +1,10 @@
-package jira.model;
+package jira.server.model;
import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;
import java.util.ArrayList;
import java.util.HashMap;
+import jira.Role;
/**
* @author Arvin
diff --git a/src/main/java/jira/model/TaskState.java b/src/main/java/jira/server/model/TaskState.java
similarity index 91%
rename from src/main/java/jira/model/TaskState.java
rename to src/main/java/jira/server/model/TaskState.java
index 07c61b5..00e2690 100644
--- a/src/main/java/jira/model/TaskState.java
+++ b/src/main/java/jira/server/model/TaskState.java
@@ -1,4 +1,4 @@
-package jira.model;
+package jira.server.model;
public enum TaskState {
FAILED {
diff --git a/src/main/java/jira/model/Team.java b/src/main/java/jira/server/model/Team.java
similarity index 85%
rename from src/main/java/jira/model/Team.java
rename to src/main/java/jira/server/model/Team.java
index 054d138..bf94658 100644
--- a/src/main/java/jira/model/Team.java
+++ b/src/main/java/jira/server/model/Team.java
@@ -1,28 +1,35 @@
-package jira.model;
+package jira.server.model;
import java.util.ArrayList;
import java.util.Comparator;
import java.util.HashMap;
import java.util.regex.Pattern;
-
+import jira.Role;
public class Team {
- private static ArrayList teams = new ArrayList<>();
- private static ArrayList pendingTeams = new ArrayList<>();
+ private static final ArrayList teams = new ArrayList<>();
+ private static final ArrayList pendingTeams = new ArrayList<>();
private static int idCounter = 0;
private final int id;
private String name;
private User leader;
- private ArrayList members;
- private ArrayList chat;
+ private final ArrayList members;
+ private final ArrayList chat;
public Team(String name, User leader) {
this.id = assignId();
this.name = name;
this.leader = leader;
- this.members = new ArrayList();
- this.chat = new ArrayList();
+ this.members = new ArrayList<>();
+ this.chat = new ArrayList<>();
Board.initTeamBoard(name);
+ removeNewLeaderMemberTeams(leader);
+ }
+
+ private void removeNewLeaderMemberTeams(User user) {
+ for (Team team: teams)
+ if (team.isMember(user))
+ team.deleteMember(user);
}
private static int assignId() {
@@ -241,22 +248,22 @@ public String showTasks() {
if(Board.getTeamBoards(name).size()<1){
return "no task yet";
}
- String output = "";
+ StringBuilder output = new StringBuilder();
int i=1;
ArrayList allTasks;
for(Board board : Board.getTeamBoards(name)){
allTasks = board.getTasks();
for(Task task : allTasks){
- output += i+"."+task.getTitle()+": id "+task.getId()+",creation date : "+task.getCreationDate();
- output += ",deadline :"+task.getDeadline()+",assign to :";
+ output.append(i).append(".").append(task.getTitle()).append(": id ").append(task.getId()).append(",creation date : ").append(task.getCreationDate());
+ output.append(",deadline :").append(task.getDeadline()).append(",assign to :");
i++;
for(User user : task.getAssignedUsers().keySet()){
- output += user.getUsername()+" ";
+ output.append(user.getUsername()).append(" ");
}
- output += ",priority :"+task.getPriority().toString()+"\n";
+ output.append(",priority :").append(task.getPriority().toString()).append("\n");
}
}
- return output;
+ return output.toString();
}
public void addBoard(String boardName) {
@@ -294,13 +301,13 @@ public void changeTaskCategoryInBoard(String category, String taskTitle, String
public String showBoardTaskByCategory(String boardName, String category) {
Task task = Task.getTaskByTitle(name, category);
- String output = task.getTitle()+": id"+task.getId()+",creation date : ";
- output += task.getCreationDate()+",deadline :"+task.getDeadline()+",assign to :";
+ StringBuilder output = new StringBuilder(task.getTitle() + ": id" + task.getId() + ",creation date : ");
+ output.append(task.getCreationDate()).append(",deadline :").append(task.getDeadline()).append(",assign to :");
for(User user : task.getAssignedUsers().keySet()){
- output += user.getUsername()+" ";
+ output.append(user.getUsername()).append(" ");
}
- output += ",priority :"+task.getPriority().toString();
- return output;
+ output.append(",priority :").append(task.getPriority().toString());
+ return output.toString();
}
public String showBoard(String boardName) {
@@ -310,13 +317,13 @@ public String showBoard(String boardName) {
public String showTask(int id) {
Task task = Task.getTaskById(id);
- String output = task.getTitle()+": id"+task.getId()+",creation date : ";
- output += task.getCreationDate()+",deadline :"+task.getDeadline()+",assign to :";
+ StringBuilder output = new StringBuilder(task.getTitle() + ": id" + task.getId() + ",creation date : ");
+ output.append(task.getCreationDate()).append(",deadline :").append(task.getDeadline()).append(",assign to :");
for(User user : task.getAssignedUsers().keySet()){
- output += user.getUsername()+" ";
+ output.append(user.getUsername()).append(" ");
}
- output += ",priority :"+task.getPriority().toString();
- return output;
+ output.append(",priority :").append(task.getPriority().toString());
+ return output.toString();
}
public ArrayList getMember() {
@@ -354,6 +361,10 @@ public void deleteMember(String username) {
members.remove(User.getUserByUsername(username));
}
+ public void deleteMember(User user) {
+ members.remove(user);
+ }
+
public void promoteMember(String username) {
leader = User.getUserByUsername(username);
}
diff --git a/src/main/java/jira/model/User.java b/src/main/java/jira/server/model/User.java
similarity index 94%
rename from src/main/java/jira/model/User.java
rename to src/main/java/jira/server/model/User.java
index 70d587c..1d44bc3 100644
--- a/src/main/java/jira/model/User.java
+++ b/src/main/java/jira/server/model/User.java
@@ -1,9 +1,8 @@
-package jira.model;
+package jira.server.model;
import javafx.scene.image.Image;
-import jira.JiraApp;
-import jira.controller.UserController;
-import jira.view.PageController;
+import jira.Role;
+import jira.server.JiraServer;
import java.io.Serializable;
import java.time.LocalDateTime;
@@ -30,6 +29,14 @@ public class User implements Serializable {
private boolean loggedIn;
private Image profiePic;
+ public static ArrayList getAllUsernames() {
+ ArrayList usernames = new ArrayList<>();
+ for (User user: UserSave.getUsers())
+ if (user.getRole() != Role.ADMIN)
+ usernames.add(user.getUsername());
+ return usernames;
+ }
+
public User(String username, String password, String email, Role role) {
this.username = username;
this.password = password;
@@ -45,9 +52,9 @@ public User(String username, String password, String email, Role role) {
this.score = 0;
this.banned = false;
this.loggedIn = false;
- this.profiePic = new Image(
- String.valueOf(JiraApp.class.getResource(PATH_TO_PROFILE_PICS + "default-prof-pic.png"))
- );
+// this.profiePic = new Image(
+// String.valueOf(JiraServer.class.getResource(PATH_TO_PROFILE_PICS + "default-prof-pic.png"))
+// );
UserSave.addUser(this);
usedPassword.add(password);
}
@@ -98,7 +105,6 @@ public static boolean usernameHasSpecialChars(String username) {
public void changeUsername(String username){
this.username = username;
- UserController.getController().updateAssignedUser(username);
}
public static User getUserByUsername(String username) {
@@ -180,6 +186,10 @@ public String getUsername() {
return username;
}
+ public String getEmail() {
+ return email;
+ }
+
public ArrayList getTeams() { return teams; }
public void addToTeams(Team team) {
diff --git a/src/main/java/jira/model/UserSave.java b/src/main/java/jira/server/model/UserSave.java
similarity index 95%
rename from src/main/java/jira/model/UserSave.java
rename to src/main/java/jira/server/model/UserSave.java
index 3b6753c..11161e1 100644
--- a/src/main/java/jira/model/UserSave.java
+++ b/src/main/java/jira/server/model/UserSave.java
@@ -1,5 +1,5 @@
-package jira.model;
-import jira.controller.UserController;
+package jira.server.model;
+import jira.server.controller.UserController;
import java.io.*;
import java.util.ArrayList;
diff --git a/src/main/java/jira/view/AdminPanelPageController.java b/src/main/java/jira/view/AdminPanelPageController.java
deleted file mode 100644
index ed1f168..0000000
--- a/src/main/java/jira/view/AdminPanelPageController.java
+++ /dev/null
@@ -1,106 +0,0 @@
-package jira.view;
-
-import javafx.collections.FXCollections;
-import javafx.collections.ObservableList;
-import javafx.event.ActionEvent;
-import javafx.fxml.FXML;
-import javafx.scene.control.*;
-import javafx.scene.control.cell.PropertyValueFactory;
-import javafx.scene.layout.BorderPane;
-import jira.controller.TeamController;
-
-import java.util.ArrayList;
-
-public class AdminPanelPageController extends PageController {
- private String currentUsername;
-
- @FXML private BorderPane pane;
- @FXML private Label adminUsernameLabel;
- @FXML private TableView pendingTeamsTableView;
- @FXML private TableView usersTableView;
-
- protected void setCurrentUsername(String currentUsername) {
- this.currentUsername = currentUsername;
- }
-
- public void initialize() {
- clearTable();
- setAdminUsernameLabel();
- populatePendingTeamsTableView();
- }
-
- private void setAdminUsernameLabel() {
- adminUsernameLabel.setText(currentUsername);
- }
-
- private void clearTable() {
- pendingTeamsTableView.getItems().clear();
- pendingTeamsTableView.getColumns().clear();
- }
-
- private void populatePendingTeamsTableView() {
- ArrayList pendingTeamNames = TeamController.getController().getPendingTeams();
-
- pendingTeamsTableView.setEditable(true);
- TableColumn pendingTeamName = pendingTeamsTableView.getColumns().get(0);
- pendingTeamName.setCellFactory(new PropertyValueFactory("pendingTeamName"));
- TableColumn rejectButton = pendingTeamsTableView.getColumns().get(1);
- rejectButton.setCellFactory(new PropertyValueFactory("rejectTeamButton"));
- TableColumn acceptButton = pendingTeamsTableView.getColumns().get(2);
- acceptButton.setCellFactory(new PropertyValueFactory("acceptTeamButton"));
-
- ObservableList rows = FXCollections.observableArrayList();
- for (int i = 0; i < pendingTeamNames.size(); i++)
- rows.add(new PendingTeamRow(pendingTeamNames.get(i), i));
-
- pendingTeamsTableView.setItems(rows);
- }
-
- class PendingTeamRow {
- private final String pendingTeamName;
- private final Button rejectTeamButton;
- private final Button acceptTeamButton;
- private final int rowIndex;
-
- public PendingTeamRow(String pendingTeamName, int rowIndex) {
- this.rowIndex = rowIndex;
- this.pendingTeamName = pendingTeamName;
-
- this.rejectTeamButton = new Button();
- rejectTeamButton.setText("REJECT");
- rejectTeamButton.setStyle("-fx-background-color: #ff0000");
- rejectTeamButton.setOnAction(this::doReject);
-
- this.acceptTeamButton = new Button();
- acceptTeamButton.setText("ACCEPT");
- acceptTeamButton.setStyle("-fx-background-color: #00ff00");
- acceptTeamButton.setOnAction(this::doAccept);
- }
-
- private void doReject(ActionEvent event) {
- TeamController.getController().rejectPendingTeam(currentUsername, pendingTeamName);
- initialize();
- }
-
- private void doAccept(ActionEvent event) {
- TeamController.getController().acceptPendingTeam(currentUsername, pendingTeamName);
- initialize();
- }
-
- public String getPendingTeamName() {
- return pendingTeamName;
- }
-
- public Button getRejectTeamButton() {
- return rejectTeamButton;
- }
-
- public Button getAcceptTeamButton() {
- return acceptTeamButton;
- }
-
- public int getRowIndex() {
- return rowIndex;
- }
- }
-}
diff --git a/src/main/java/jira/view/BoardMenu.java b/src/main/java/jira/view/BoardMenu.java
deleted file mode 100644
index 5837141..0000000
--- a/src/main/java/jira/view/BoardMenu.java
+++ /dev/null
@@ -1,140 +0,0 @@
-package jira.view;
-
-import jira.controller.BoardController;
-import jira.controller.ControllerResult;
-
-import java.util.regex.Matcher;
-
-public class BoardMenu extends Menu {
- String Command;
- String selectedBoard;
-
- public BoardMenu(String name, Menu parent) {
- super(name, parent);
- }
-
- public void execute() {
- System.out.println("Board Menu");
- ControllerResult result;
- selectedBoard = null;
-
- while (true) {
- Matcher commandMatcher;
- result = null;
- Command = getInput();
- BoardController boardController = BoardController.getController();
- String assignedUser = LoginAndRegisterMenu.assignedUser;
- String assignedTeam = TeamMenu.assignedTeam;
-
- if (isValidCommand(Command, Commands.COMMAND_PATTERNS[23])) {
- commandMatcher = parse(Command, 23);
-
- String boardName = commandMatcher.group(1);
- result = boardController.createStageOneBoard(assignedUser, assignedTeam, boardName);
- }
- else if (isValidCommand(Command, Commands.COMMAND_PATTERNS[24])) {
- commandMatcher = parse(Command, 24);
-
- String boardName = commandMatcher.group(1);
- result = boardController.removeBoard(assignedUser, assignedTeam, boardName);
- }
- else if (isValidCommand(Command, Commands.COMMAND_PATTERNS[25])) {
- commandMatcher = parse(Command, 25);
-
- selectedBoard = commandMatcher.group(1);
- }
- else if (isValidCommand(Command, Commands.COMMAND_PATTERNS[26])) {
- selectedBoard = null;
- }
- else if (isValidCommand(Command, Commands.COMMAND_PATTERNS[27])) {
- commandMatcher = parse(Command, 27);
-
- String categoryName = commandMatcher.group(1);
- String boardName = commandMatcher.group(2);
- result = boardController.addCategoryToBoard(assignedUser, assignedTeam, boardName, categoryName);
- }
- else if (isValidCommand(Command, Commands.COMMAND_PATTERNS[28])) {
- commandMatcher = parse(Command, 28);
-
- String categoryName = commandMatcher.group(1);
- int column = Integer.parseInt(commandMatcher.group(2));
- String boardName = commandMatcher.group(3);
- result = boardController.moveOrCreateCategoryInColumn(assignedUser, assignedTeam, boardName, categoryName, column);
- }
- else if (isValidCommand(Command, Commands.COMMAND_PATTERNS[29])) {
- commandMatcher = parse(Command, 29);
-
- String boardName = commandMatcher.group(1);
- result = boardController.finalizeBoard(assignedUser, assignedTeam, boardName);
- }
- else if (isValidCommand(Command, Commands.COMMAND_PATTERNS[30])) {
- commandMatcher = parse(Command, 30);
-
- int taskId = Integer.parseInt(commandMatcher.group(1));
- String boardName = commandMatcher.group(2);
- result = boardController.addTaskToBoard(assignedUser, assignedTeam, boardName, taskId);
- }
- else if (isValidCommand(Command, Commands.COMMAND_PATTERNS[31])) {
- commandMatcher = parse(Command, 31);
-
- String teamMember = commandMatcher.group(1);
- int taskId = Integer.parseInt(commandMatcher.group(2));
- String boardName = commandMatcher.group(3);
- result = boardController.assignTaskToTeamMember(assignedUser, assignedTeam, boardName, taskId, teamMember);
- }
- else if (isValidCommand(Command, Commands.COMMAND_PATTERNS[32])) {
- commandMatcher = parse(Command, 32);
-
- String newCategory = commandMatcher.group(1);
- String taskTitle = commandMatcher.group(2);
- String boardName = commandMatcher.group(3);
- result = boardController.forceChangeTaskCategory(assignedUser, assignedTeam, boardName, taskTitle, newCategory);
- }
- else if (isValidCommand(Command, Commands.COMMAND_PATTERNS[33])) {
- commandMatcher = parse(Command, 33);
-
- String task = commandMatcher.group(1);
- String boardName = commandMatcher.group(2);
- result = boardController.doNextOnTask(assignedUser, assignedTeam, boardName, task);
- }
- else if (isValidCommand(Command, Commands.COMMAND_PATTERNS[34])) {
- //Show Task By Category -- ToDo
- }
- else if (isValidCommand(Command, Commands.COMMAND_PATTERNS[35])) {
- commandMatcher = parse(Command, 35);
-
- boolean showDone = commandMatcher.group(1).equals("done");
- String boardName = commandMatcher.group(2);
- result = boardController.showDoneOrFailedTasks(assignedTeam, boardName, showDone);
- }
- else if (isValidCommand(Command, Commands.COMMAND_PATTERNS[36])) {
- commandMatcher = parse(Command, 36);
-
- String taskTitle = commandMatcher.group(1);
- String assigneeName = commandMatcher.group(2);
- String deadline = commandMatcher.group(2);
- String category = commandMatcher.group(2);
- String boardName = commandMatcher.group(2);
- result = boardController.restartTask(assignedUser, assignedTeam, boardName, deadline, taskTitle, assigneeName, category);
- }
- else if (isValidCommand(Command, Commands.COMMAND_PATTERNS[37])) {
- commandMatcher = parse(Command, 37);
-
- String boardName = commandMatcher.group(1);
- result = boardController.showBoardToMember(assignedTeam, boardName);
-
- }
- else if (isValidCommand(Command, Commands.COMMAND_PATTERNS[59])) {
- ViewController.setNext(parent);
- break;
- }
- else {
- show(INVALID_COMMAND);
- }
-
- if (result != null)
- show(result.message);
- }
- }
-}
-
diff --git a/src/main/java/jira/view/CalendarMenu.java b/src/main/java/jira/view/CalendarMenu.java
deleted file mode 100644
index 067b912..0000000
--- a/src/main/java/jira/view/CalendarMenu.java
+++ /dev/null
@@ -1,35 +0,0 @@
-package jira.view;
-
-import jira.controller.ControllerResult;
-import jira.controller.UserController;
-
-public class CalendarMenu extends Menu {
- String Command;
-
- public CalendarMenu(String name, Menu parent) {
- super(name, parent);
- }
-
- public void execute() {
- System.out.println("Calendar Menu");
- while (true) {
- ControllerResult result = null;
- Command = getInput();
- UserController userController = UserController.getController();
- String assignedUser = LoginAndRegisterMenu.assignedUser;
- if (isValidCommand(Command, Commands.COMMAND_PATTERNS[38])) {
- result = userController.showCalendar(assignedUser);
- }
- else if (isValidCommand(Command, Commands.COMMAND_PATTERNS[59])) {
- ViewController.setNext(parent);
- break;
- }
- else
- show(INVALID_COMMAND);
-
- if (result != null)
- show(result.message);
- }
- }
-}
-
diff --git a/src/main/java/jira/view/Commands.java b/src/main/java/jira/view/Commands.java
deleted file mode 100644
index 221a305..0000000
--- a/src/main/java/jira/view/Commands.java
+++ /dev/null
@@ -1,88 +0,0 @@
-package jira.view;
-
-import java.util.regex.Pattern;
-
-public class Commands {
- public static Pattern[] COMMAND_PATTERNS = new Pattern[]{
-// first page(LoginAndRegisterMenu) commands: 0-1
- Pattern.compile("user create --username ([^\\s]+) --password1 ([^\\s]+) --password2 ([^\\s]+) --email Address ([^\\s]+)"), //Creating Users
- Pattern.compile("user login --username ([^\\s]+) --password ([^\\s]+)"), //Login
-// second page(profileMenu) commands: 2-9
- Pattern.compile("enter menu (.*)"), // To Enter A Menu
- Pattern.compile("profile --change --oldPassword ([^\\s]+) --newPassword ([^\\s]+)"), //Change Password
- Pattern.compile("profile --change --username ([^\\s]+)"), //Change Username
- Pattern.compile("profile --showTeams"), //Show Teams
- Pattern.compile("profile --showTeam ([^\\s]+)"), //Show Own Teams
- Pattern.compile("profile --show --myProfile"), //Show Profile
- Pattern.compile("profile --show logs"), // Show Logs
- Pattern.compile("profile --show notifications"), //Show Notifications
-// Task Page(TaskMenu) commands: 10-15
-// Team Leader Commands
- Pattern.compile("edit --task --id (\\d+) --title (.*)"), //change title
- Pattern.compile("edit --task --id (\\d+) --description (.*)"), //Change Description
- Pattern.compile("edit --task --id (\\d+) --priority ([^\\s]+)"), //Change Priority
- Pattern.compile("edit --task --id (\\d+) --Deadline ([^\\s]+)"), //Change Deadline
- Pattern.compile("edit --task --id (\\d+) --assignedUsers ([^\\s]+) --remove"), //Remove Assigned User
- Pattern.compile("edit --task --id (\\d+) --assignedUsers ([^\\s]+) --add"), //Add To Assigned Users
-// Team Menu(TeamMenu) commands: 16-22
- Pattern.compile("Enter team ([^\\s]+)"), //Enter Team Page
- Pattern.compile("Scoreboard --show"), //Show Scoreboard
- Pattern.compile("Roadmap --show"), //Show Roadmap
- Pattern.compile("Chatroom --show"), //Show Chatroom
- Pattern.compile("send --message \"(.*)\"") , //Send Message ?
- Pattern.compile("show tasks"), //Show Tasks
- Pattern.compile("show task --id (\\d+)"), //Show Task
-// Team :: Board Menu(BoardMenu) commands:
-// Leader commands 23-26
- Pattern.compile("board --new --name ([^\\s]+)"), //Create Stage 1 Board
- Pattern.compile("board --remove --name ([^\\s]+)"), //Remove Board From Team
- Pattern.compile("board --select --name ([^\\s]+)"), //Select Command
- Pattern.compile("board --deselect"),
-// Stage One Board Command 27-29
- Pattern.compile("board --new --category ([^\\s]+) --name ([^\\s]+)"), //create category
- Pattern.compile("board --category ([^\\s]+) --column (\\d+) --name ([^\\s]+)"), //Move / Create Category In Column
- Pattern.compile("board --done --name ([^\\s]+)"), //Finish Stage One
-// Stage Two Board Commands 30-34
- Pattern.compile("board --add (\\d+) --name ([^\\s]+)"), //Add Task To Board
- Pattern.compile("board --assign ([^\\s]+) --task (\\d+) --name ([^\\s]+)"), //Assign Task To Team Member
- Pattern.compile("board --force --category ([^\\s]+) --task ([^\\s]+) --name ([^\\s]+)"), //Change Task State
- Pattern.compile("board --category next --task ([^\\s]+) --name ([^\\s]+)"), //Move Task To Next State
- Pattern.compile("board --show --category ([^\\s]+) --board ([^\\s]+)"), //Show Task By Category
-// Task Progression 35-36
- Pattern.compile("board --show ([^\\s]+) --name --board ([^\\s]+)"), //Show Done/Failed Tasks
- Pattern.compile("board --open --task ([^\\s]+) (--assign ([^\\s]+))? --deadline ([^\\s]+) (--category ([^\\s]+))? --name ([^\\s]+)"), //Restart Task
-// Normal Board Member Commands (Team Member Commands) 37-37
- Pattern.compile("Board --show --name ([^\\s]+)"),
-// Calendar Menu 38-38
- Pattern.compile("calendar --show deadlines"),
-// Team Leader Tasks: 39-41
- Pattern.compile("show --teams"), //Show Teams
- Pattern.compile("show --team ([^\\s]+)"), //Team Select
- Pattern.compile("create --team ([^\\s]+)"), //Create Team
-// Team Leader Commands After Selecting Team 42-51
- Pattern.compile("sudo show --all --tasks"), //Show All Team Tasks
- Pattern.compile("create task --title ([^\\s]+) --startTime ([^\\s]+) --deadline ([^\\s]+)"), //Create Task For Team
- Pattern.compile("show --members"), //List Team Members
- Pattern.compile("Add member --username ([^\\s]+)"), //Add Member To Team
- Pattern.compile("delete member --username ([^\\s]+)"), //Remove Member From Team
- Pattern.compile("suspend member --username ([^\\s]+)"), //Suspend Team Member
- Pattern.compile("promote --username ([^\\s]+) --rate (\\d+)"), //Promote To Team Leader
- Pattern.compile("assign member --task (\\d+) --username ([^\\s]+)"), //Assign Member To Task
- Pattern.compile("show --scoreboard"), //Show Scoreboard
- Pattern.compile("send --notification ([^\\s]+) --username ([^\\s]+)"), //Send Notifications
-// Admin Commands 52-58
- Pattern.compile("show profile --username ([^\\s]+)"), //Query User Profile
- Pattern.compile("ban user --user ([^\\s]+)"), //Ban User
- Pattern.compile("change role --user ([^\\s]+) --role ([^\\s]+)"), //Change Role
- Pattern.compile("send --notificaion --all\n" +
- "send --notificaion --user \n" +
- "send --notificaion --team "), //Send Notification
- Pattern.compile("show --pendingTeams"), //Accept New Teams
- Pattern.compile("accept --teams (.+)"), //Accept New Teams
- Pattern.compile("reject --teams (.+)"), //Reject Team
-// BACK and EXIT 59-60
- Pattern.compile("back"),
- Pattern.compile("exit")
- };
-}
-
diff --git a/src/main/java/jira/view/LoginAndRegisterMenu.java b/src/main/java/jira/view/LoginAndRegisterMenu.java
deleted file mode 100644
index d62cd22..0000000
--- a/src/main/java/jira/view/LoginAndRegisterMenu.java
+++ /dev/null
@@ -1,56 +0,0 @@
-package jira.view;
-
-import jira.controller.ControllerResult;
-import jira.controller.UserController;
-
-import java.util.regex.Matcher;
-
-public class LoginAndRegisterMenu extends Menu {
- String Command;
- public static String assignedUser;
-
- public LoginAndRegisterMenu(String name, Menu parent) {super(name, parent);}
-
- public void execute() {
- System.out.println("Login and Register Menu");
- assignedUser = null;
- ControllerResult result;
- UserController userController = UserController.getController();
-
- while (true) {
- Matcher commandMatcher;
- Command = getInput();
- if (isValidCommand(Command, Commands.COMMAND_PATTERNS[0])) {
- commandMatcher = parse(Command, 0);
-
- String userName = commandMatcher.group(1);
- String passWord1 = commandMatcher.group(2);
- String passWord2 = commandMatcher.group(3);
- String email = commandMatcher.group(4);
- result = userController.createUser(userName, passWord1, passWord2, email);
-
- show(result.message);
- }
- else if (isValidCommand(Command, Commands.COMMAND_PATTERNS[1])){
- commandMatcher = parse(Command, 1);
-
- String userName = commandMatcher.group(1);
- String password = commandMatcher.group(2);
- result = userController.login(userName, password);
-
- show(result.message);
- if (result.success) {
- ViewController.setNext(new MainMenu(null, this));
- assignedUser = userName;
- break;
- }
- }
- else if (isValidCommand(Command, Commands.COMMAND_PATTERNS[60])){
- ViewController.setNext(null);
- break;
- }
- else
- show(INVALID_COMMAND);
- }
- }
-}
diff --git a/src/main/java/jira/view/LoginPageController.java b/src/main/java/jira/view/LoginPageController.java
deleted file mode 100644
index be49590..0000000
--- a/src/main/java/jira/view/LoginPageController.java
+++ /dev/null
@@ -1,125 +0,0 @@
-package jira.view;
-
-import javafx.scene.Node;
-import jira.JiraApp;
-import jira.controller.ControllerResult;
-import jira.controller.UserController;
-import javafx.fxml.FXML;
-import javafx.fxml.FXMLLoader;
-import javafx.scene.Scene;
-import javafx.scene.control.Label;
-import javafx.scene.control.PasswordField;
-import javafx.scene.control.TextField;
-import javafx.event.ActionEvent;
-import javafx.scene.layout.BorderPane;
-import javafx.stage.Stage;
-
-import java.io.IOException;
-
-public class LoginPageController extends PageController {
- private static final UserController userController = UserController.getController();
-
- @FXML private BorderPane pane;
- @FXML private Label errorField;
- @FXML private TextField usernameField;
- @FXML private PasswordField passwordField;
-
- @FXML
- private void login(ActionEvent event) {
- String username = getTextFromField(usernameField);
- String password = getTextFromField(passwordField);
- ControllerResult result = userController.login(username, password);
-
- showResult(errorField, result);
-
- if (result.success)
- gotoMainMenu(event, username);
- }
-
- @FXML
- private void register(ActionEvent event) {
- pane.setDisable(true);
-
- FXMLLoader fxmlLoader = new FXMLLoader(JiraApp.class.getResource("registerAccountPopup.fxml"));
- try {
- Scene scene = new Scene(fxmlLoader.load());
- Stage newStage = new Stage();
- newStage.setScene(scene);
-
- RegisterPopupController registerPopupController = fxmlLoader.getController();
- registerPopupController.setLoginPageController(this);
- newStage.setOnHidden(e -> {pane.setDisable(false);});
-
- newStage.show();
- }
- catch (IOException e) {
- e.printStackTrace();
- }
- }
-
- private void gotoMainMenu(ActionEvent event, String username) {
- try {
- FXMLLoader loader = new FXMLLoader(JiraApp.class.getResource("mainMenu.fxml"));
- Scene scene = new Scene(loader.load());
- Stage stage = (Stage) ((Node) event.getSource()).getScene().getWindow();
-
- MainMenuPageController mainMenuPageController = loader.getController();
- mainMenuPageController.setCurrentUsername(username);
- mainMenuPageController.setRole(userController.getUserRole(username).message);
- mainMenuPageController.initialize();
-
- stage.setScene(scene);
- stage.show();
- }
- catch (IOException e) {
- e.printStackTrace();
- }
- }
-
- protected void registerReturn() {
- pane.setDisable(false);
- }
-
-// public void execute() {
-// System.out.println("Login and Register Menu");
-// assignedUser = null;
-// ControllerResult result;
-// UserController userController = UserController.getController();
-//
-// while (true) {
-// Matcher commandMatcher;
-// Command = getInput();
-// if (isValidCommand(Command, Commands.COMMAND_PATTERNS[0])) {
-// commandMatcher = parse(Command, 0);
-//
-// String userName = commandMatcher.group(1);
-// String passWord1 = commandMatcher.group(2);
-// String passWord2 = commandMatcher.group(3);
-// String email = commandMatcher.group(4);
-// result = userController.createUser(userName, passWord1, passWord2, email);
-//
-// show(result.message);
-// }
-// else if (isValidCommand(Command, Commands.COMMAND_PATTERNS[1])){
-// commandMatcher = parse(Command, 1);
-//
-// String userName = commandMatcher.group(1);
-// String password = commandMatcher.group(2);
-// result = userController.login(userName, password);
-//
-// show(result.message);
-// if (result.success) {
-// ViewController.setNext(new MainMenu(null, this));
-// assignedUser = userName;
-// break;
-// }
-// }
-// else if (isValidCommand(Command, Commands.COMMAND_PATTERNS[60])){
-// ViewController.setNext(null);
-// break;
-// }
-// else
-// show(INVALID_COMMAND);
-// }
-// }
-}
diff --git a/src/main/java/jira/view/MainMenu.java b/src/main/java/jira/view/MainMenu.java
deleted file mode 100644
index 483f674..0000000
--- a/src/main/java/jira/view/MainMenu.java
+++ /dev/null
@@ -1,64 +0,0 @@
-package jira.view;
-
-import jira.controller.UserController;
-
-import java.util.regex.Matcher;
-
-public class MainMenu extends Menu {
-
- String Command;
-
- public MainMenu(String name, Menu parent) {
- super(name, parent);
- }
-
- public void execute() {
- welcome();
-
- loop: while (true) {
- Matcher commandMatcher;
- Command = getInput();
- show("select a menu");
-
- if (isValidCommand(Command, Commands.COMMAND_PATTERNS[2])) {
- commandMatcher = parse(Command, 2);
- String menuName = commandMatcher.group(1);
-
- switch (menuName){
- case "Profile Menu":
- ViewController.setNext(new ProfileMenu(null, this));
- break loop;
- case "Board Menu":
- ViewController.setNext(new BoardMenu(null, this));
- break loop;
- case "Team Menu":
- ViewController.setNext(new TeamMenu(null, this));
- break loop;
- case "Task Page":
- ViewController.setNext(new TaskPage(null, this));
- break loop;
- case "Calendar Menu":
- ViewController.setNext(new CalendarMenu(null, this));
- break loop;
- default:
- show("the menu doesn't exist");
- }
- }
- else if (isValidCommand(Command, Commands.COMMAND_PATTERNS[59])) {
- ViewController.setNext(parent);
- UserController.getController().logout(LoginAndRegisterMenu.assignedUser);
- break;
- }
- else
- show(INVALID_COMMAND);
- }
- }
-
- private void welcome() {
- show("1. Profile Menu");
- show("2. Board Menu");
- show("3. Team Menu");
- show("4. Task Page");
- show("5. Calendar Menu");
- }
-}
diff --git a/src/main/java/jira/view/Menu.java b/src/main/java/jira/view/Menu.java
deleted file mode 100644
index 35b0845..0000000
--- a/src/main/java/jira/view/Menu.java
+++ /dev/null
@@ -1,42 +0,0 @@
-package jira.view;
-
-import java.util.Scanner;
-import java.util.regex.Pattern;
-import java.util.regex.Matcher;
-
-public abstract class Menu {
- public static final String INVALID_COMMAND = "Invalid command";
- protected static Scanner scanner = new Scanner(System.in);
- protected Menu parent;
- protected String name;
-
- public Menu(String name, Menu parent) {
- this.name = name;
- this.parent = parent;
- }
-
- public void execute() {
- System.out.println("Child menu of " + parent.name + " executed");
- }
-
- public String getInput() {
- return scanner.nextLine().trim();
- }
-
- public void show(String message) {
- if (message != null)
- System.out.println(message);
- }
-
- public boolean isValidCommand(String command, Pattern pattern) {
- Matcher matcher = pattern.matcher(command);
- return matcher.find();
- }
-
- public Matcher parse(String command, int patternNum) {
- Matcher commandMatcher = Commands.COMMAND_PATTERNS[patternNum].matcher(command);
- if (commandMatcher.matches())
- return commandMatcher;
- return null;
- }
-}
diff --git a/src/main/java/jira/view/ProfileMenu.java b/src/main/java/jira/view/ProfileMenu.java
deleted file mode 100644
index 764a193..0000000
--- a/src/main/java/jira/view/ProfileMenu.java
+++ /dev/null
@@ -1,69 +0,0 @@
-package jira.view;
-
-import jira.controller.ControllerResult;
-import jira.controller.UserController;
-import jira.controller.TeamController;
-
-import java.util.regex.Matcher;
-
-public class ProfileMenu extends Menu {
- String Command;
-
- public ProfileMenu(String name, Menu parent) {
- super(name, parent);
- }
-
- public void execute() {
- System.out.println("Profile Menu");
- while (true) {
- Matcher commandMatcher;
- ControllerResult result = null;
- Command = getInput();
- UserController userController = UserController.getController();
- TeamController teamController = TeamController.getController();
- String assignedUser = LoginAndRegisterMenu.assignedUser;
-
- if (isValidCommand(Command, Commands.COMMAND_PATTERNS[3])) {
- commandMatcher = parse(Command, 3);
-
- String oldPassword = commandMatcher.group(1);
- String newPassword = commandMatcher.group(2);
- result = userController.changeUserPassword(assignedUser, oldPassword, newPassword);
- }
- else if (isValidCommand(Command, Commands.COMMAND_PATTERNS[4])) {
- commandMatcher = parse(Command, 4);
-
- String userName = commandMatcher.group(1);
- result = userController.changeUsername(userName, assignedUser);
- }
- else if (isValidCommand(Command, Commands.COMMAND_PATTERNS[5])) {
- result = userController.listTeams(assignedUser);
- }
- else if (isValidCommand(Command, Commands.COMMAND_PATTERNS[6])) {
- commandMatcher = parse(Command, 6);
-
- String teamName = commandMatcher.group(1);
- result = teamController.showTeamMembers(teamName);
- }
- else if (isValidCommand(Command, Commands.COMMAND_PATTERNS[7])) {
- result = userController.showProfile(assignedUser);
- }
- else if (isValidCommand(Command, Commands.COMMAND_PATTERNS[8])) {
- result = userController.showLogs(assignedUser);
- }
-// else if (isValidCommand(Command, Commands.COMMAND_PATTERNS[9])) {
-// userController.showNotifications();
-// // showNotifications method should be added to UserController.
-// }
- else if (isValidCommand(Command, Commands.COMMAND_PATTERNS[59])) {
- ViewController.setNext(parent);
- break;
- }
- else
- show(INVALID_COMMAND);
-
- if (result != null)
- show(result.message);
- }
- }
-}
\ No newline at end of file
diff --git a/src/main/java/jira/view/TaskPage.java b/src/main/java/jira/view/TaskPage.java
deleted file mode 100644
index add7b5d..0000000
--- a/src/main/java/jira/view/TaskPage.java
+++ /dev/null
@@ -1,78 +0,0 @@
-package jira.view;
-
-import jira.controller.ControllerResult;
-import jira.controller.TasksController;
-
-import java.util.regex.Matcher;
-
-public class TaskPage extends Menu {
- String Command;
-
- public TaskPage(String name, Menu parent) {
- super(name, parent);
- }
-
- public void execute() {
- System.out.println("Task Page");
- ControllerResult result;
-
- while (true) {
- Matcher commandMatcher;
- result = null;
- Command = getInput();
- TasksController tasksController = TasksController.getController();
- String assignedUser = LoginAndRegisterMenu.assignedUser;
- if (isValidCommand(Command, Commands.COMMAND_PATTERNS[10])) {
- commandMatcher = parse(Command, 10);
-
- int taskId = Integer.parseInt(commandMatcher.group(1));
- String newTitle = commandMatcher.group(2);
- result = tasksController.changeTaskTitle(assignedUser, taskId, newTitle);
- }
- else if (isValidCommand(Command, Commands.COMMAND_PATTERNS[11])) {
- commandMatcher = parse(Command, 11);
-
- int taskId = Integer.parseInt(commandMatcher.group(1));
- String newDescription = commandMatcher.group(2);
- result = tasksController.changeDescription(assignedUser, taskId, newDescription);
- }
- else if (isValidCommand(Command, Commands.COMMAND_PATTERNS[12])) {
- commandMatcher = parse(Command, 12);
-
- int taskId = Integer.parseInt(commandMatcher.group(1));
- String newPriority = commandMatcher.group(2);
- result = tasksController.changePriority(assignedUser, taskId, newPriority);
- }
- else if (isValidCommand(Command, Commands.COMMAND_PATTERNS[13])) {
- commandMatcher = parse(Command, 13);
-
- int taskId = Integer.parseInt(commandMatcher.group(1));
- String newDeadline = commandMatcher.group(2);
- result = tasksController.changeDeadline(assignedUser, taskId, newDeadline);
- }
- else if (isValidCommand(Command, Commands.COMMAND_PATTERNS[14])) {
- commandMatcher = parse(Command, 14);
-
- int taskId = Integer.parseInt(commandMatcher.group(1));
- String usernameToRemove = commandMatcher.group(2);
- result = tasksController.removeAssignedUser(assignedUser, taskId, usernameToRemove);
- }
- else if (isValidCommand(Command, Commands.COMMAND_PATTERNS[15])) {
- commandMatcher = parse(Command, 15);
-
- int taskId = Integer.parseInt(commandMatcher.group(1));
- String usernameToAdd = commandMatcher.group(2);
- result = tasksController.assignUser(assignedUser, taskId, usernameToAdd);
- }
- else if (isValidCommand(Command, Commands.COMMAND_PATTERNS[59])) {
- ViewController.setNext(parent);
- break;
- }
- else
- show(INVALID_COMMAND);
-
- if (result != null)
- show(result.message);
- }
- }
-}
diff --git a/src/main/java/jira/view/TeamMenu.java b/src/main/java/jira/view/TeamMenu.java
deleted file mode 100644
index f48f225..0000000
--- a/src/main/java/jira/view/TeamMenu.java
+++ /dev/null
@@ -1,169 +0,0 @@
-package jira.view;
-
-import jira.controller.UserController;
-import jira.controller.ControllerResult;
-import jira.controller.TasksController;
-import jira.controller.TeamController;
-
-import java.util.regex.Matcher;
-
-public class TeamMenu extends Menu {
- String Command;
-
- public TeamMenu(String name, Menu parent) {
- super(name, parent);
- }
-
- public static String assignedTeam;
-
- public void execute() {
- assignedTeam = null;
- System.out.println("Team Menu");
- welcome();
-
- while (true) {
- Matcher commandMatcher;
- ControllerResult result = null;
- Command = getInput();
- UserController userController = UserController.getController();
- TeamController teamController = TeamController.getController();
- TasksController tasksController = TasksController.getController();
-
- String assignedUser = LoginAndRegisterMenu.assignedUser;
- userController.listTeams(assignedUser);
-
- if (isValidCommand(Command, Commands.COMMAND_PATTERNS[16])) {
- commandMatcher = parse(Command, 16);
-
- if (teamController.teamIsSelectable(commandMatcher.group(1)))
- assignedTeam = commandMatcher.group(1);
- else
- result = new ControllerResult("Chosen team does not exist!", false);
- }
- else if (isValidCommand(Command, Commands.COMMAND_PATTERNS[17]) && assignedTeam != null) {
- result = teamController.showTeamScoreboard(assignedTeam);
- }
- else if (isValidCommand(Command, Commands.COMMAND_PATTERNS[18]) && assignedTeam != null) {
- result = teamController.showTeamRoadmap(assignedTeam);
- }
- else if (isValidCommand(Command, Commands.COMMAND_PATTERNS[19]) && assignedTeam != null) {
- result = teamController.showChatroom(assignedTeam);
- }
- else if (isValidCommand(Command, Commands.COMMAND_PATTERNS[20]) && assignedTeam != null) {
- commandMatcher = parse(Command, 20);
-
- String message = commandMatcher.group(1);
- result = userController.sendMessage(assignedUser, message, assignedTeam);
- }
- else if (isValidCommand(Command, Commands.COMMAND_PATTERNS[21]) && assignedTeam != null) {
- result = teamController.showTeamTasks(assignedTeam);
- }
- else if (isValidCommand(Command, Commands.COMMAND_PATTERNS[22]) && assignedTeam != null) {
- commandMatcher = parse(Command, 22);
-
- result = userController.showTask(assignedTeam, Integer.parseInt(commandMatcher.group(1)));
- }
- else if (isValidCommand(Command, Commands.COMMAND_PATTERNS[39])) {
- result = teamController.showTeams(assignedUser);
- }
- else if (isValidCommand(Command, Commands.COMMAND_PATTERNS[40])) {
- commandMatcher = parse(Command, 40);
- result = teamController.checkTeamToken(assignedUser, commandMatcher.group(1));
-
- if (result.success)
- assignedTeam = result.message;
- }
- else if (isValidCommand(Command, Commands.COMMAND_PATTERNS[41])) {
- commandMatcher = parse(Command, 41);
-
- String teamName = commandMatcher.group(1);
- result = teamController.creatTeam(assignedUser, teamName);
- }
- else if (isValidCommand(Command, Commands.COMMAND_PATTERNS[42]) && assignedTeam != null) {
- result = teamController.showTeamTasks(assignedTeam);
- }
- else if (isValidCommand(Command, Commands.COMMAND_PATTERNS[43]) && assignedTeam != null) {
- commandMatcher = parse(Command, 43);
-
- String taskTitle = commandMatcher.group(1);
- String startTime = commandMatcher.group(2);
- String deadline = commandMatcher.group(3);
- result = teamController.createTaskForTeam(assignedUser,assignedTeam,taskTitle, startTime, deadline);
- }
- else if (isValidCommand(Command, Commands.COMMAND_PATTERNS[44]) && assignedTeam != null) {
- result = teamController.showTeamMembers(assignedTeam);
- }
- else if (isValidCommand(Command, Commands.COMMAND_PATTERNS[45]) && assignedTeam != null) {
- commandMatcher = parse(Command, 45);
-
- String username = commandMatcher.group(1);
- result = teamController.addMemberToTeam(assignedUser, assignedTeam, username);
- }
- else if (isValidCommand(Command, Commands.COMMAND_PATTERNS[46]) && assignedTeam != null) {
- commandMatcher = parse(Command, 46);
-
- String username = commandMatcher.group(1);
- result = teamController.deleteTeamMember(username, assignedUser, assignedTeam);
- }
- else if (isValidCommand(Command, Commands.COMMAND_PATTERNS[47]) && assignedTeam != null) {
- commandMatcher = parse(Command, 47);
-
- String username = commandMatcher.group(1);
- result = teamController.suspendTeamMember(assignedUser,assignedTeam,username);
- }
- else if (isValidCommand(Command, Commands.COMMAND_PATTERNS[48]) && assignedTeam != null) {
- commandMatcher = parse(Command, 48);
-
- String username = commandMatcher.group(1);
- result = teamController.promoteTeamLeader(assignedTeam,assignedUser,username);
- }
- else if (isValidCommand(Command, Commands.COMMAND_PATTERNS[49])) {
- commandMatcher = parse(Command, 49);
-
- int taskId = Integer.parseInt(commandMatcher.group(1));
- String username = commandMatcher.group(2);
- result = tasksController.assignUser(assignedUser, taskId, username);
- }
- else if (isValidCommand(Command, Commands.COMMAND_PATTERNS[50]) && assignedTeam != null) {
- result = teamController.showTeamScoreboard(assignedTeam);
- }
- else if (isValidCommand(Command, Commands.COMMAND_PATTERNS[51])) {
- commandMatcher = parse(Command, 51);
-
- String notification = commandMatcher.group(1);
- String teamName = commandMatcher.group(2);
- result = teamController.sendNotifications(notification, assignedUser);
- }
- else if (isValidCommand(Command, Commands.COMMAND_PATTERNS[56])) {
- result = teamController.showPendingTeams(assignedUser);
- }
- else if (isValidCommand(Command, Commands.COMMAND_PATTERNS[57])) {
- commandMatcher = parse(Command, 57);
-
- String teams = commandMatcher.group(1);
- result = teamController.acceptPendingTeam(assignedUser, teams);
- }
- else if (isValidCommand(Command, Commands.COMMAND_PATTERNS[58])) {
- commandMatcher = parse(Command, 58);
-
- String teams = commandMatcher.group(1);
- result = teamController.rejectPendingTeam(assignedUser, teams);
- }
- else if (isValidCommand(Command, Commands.COMMAND_PATTERNS[59])) {
- ViewController.setNext(parent);
- break;
- }
- else
- show(INVALID_COMMAND);
-
- if (result != null)
- show(result.message);
- }
- }
-
- private void welcome() {
- show(TeamController.getController().showAllTeams().message);
- }
-}
-
-
diff --git a/src/main/java/jira/view/TeamMenuPageController.java b/src/main/java/jira/view/TeamMenuPageController.java
deleted file mode 100644
index 19fb134..0000000
--- a/src/main/java/jira/view/TeamMenuPageController.java
+++ /dev/null
@@ -1,155 +0,0 @@
-package jira.view;
-
-import javafx.collections.FXCollections;
-import javafx.collections.ObservableList;
-import javafx.event.EventHandler;
-import javafx.fxml.FXML;
-import javafx.fxml.FXMLLoader;
-import javafx.scene.Scene;
-import javafx.scene.control.Label;
-import javafx.scene.control.TableCell;
-import javafx.scene.control.TableColumn;
-import javafx.scene.control.TableView;
-import javafx.scene.control.cell.PropertyValueFactory;
-import javafx.scene.input.MouseEvent;
-import javafx.scene.layout.BorderPane;
-import javafx.stage.Stage;
-import javafx.util.Callback;
-import jira.JiraApp;
-import jira.controller.TeamController;
-
-import java.io.IOException;
-import java.util.ArrayList;
-
-public class TeamMenuPageController extends PageController {
- private String currentUsername;
- private String currentRole;
-
- @FXML private BorderPane pane;
- @FXML private TableView listOfTeams;
- @FXML private Label leaderOrMemberLabel;
-
- protected void setCurrentUsername(String currentUsername) {
- this.currentUsername = currentUsername;
- }
-
- protected void setCurrentRole(String currentRole) {
- this.currentRole = currentRole;
- }
-
- private void setLeaderOrMemberLabel() {
- leaderOrMemberLabel.setText(currentRole + " of:");
- }
-
- public void initialize() {
- setLeaderOrMemberLabel();
- clearTeamListView();
- prepareTeamListView();
- }
-
- private void clearTeamListView() {
- listOfTeams.getItems().clear();
- listOfTeams.getColumns().clear();
- }
-
- private void prepareTeamListView() {
- TableColumn teamNameColumn = new TableColumn<>("Team Name");
- teamNameColumn.setCellValueFactory(new PropertyValueFactory("teamName"));
- teamNameColumn.setCellFactory(getTeamListStringCellFactory());
-
- TableColumn memberCountColumn = new TableColumn<>("Member Count");
- memberCountColumn.setCellValueFactory(new PropertyValueFactory("memberCount"));
- memberCountColumn.setCellFactory(getTeamListIntegerCellFatory());
-
- listOfTeams.setItems(getTeamListViewItems());
- listOfTeams.getColumns().addAll(teamNameColumn, memberCountColumn);
- }
-
- private ObservableList getTeamListViewItems() {
- final ObservableList teamStats = FXCollections.observableArrayList();
-
- ArrayList teamNames = TeamController.getController().showTeamsAffiliated(currentUsername);
- ArrayList teamCounts = TeamController.getController().getAffiliatedTeamsMemberCount(currentUsername);
- for (int i = 0; i < teamNames.size(); i++) {
- teamStats.add(new TeamStats(teamNames.get(i), teamCounts.get(i)));
- }
-
- return teamStats;
- }
-
- private Callback, TableCell> getTeamListStringCellFactory() {
- return param -> {
- TableCell cell = new TableCell<>();
- cell.addEventFilter(MouseEvent.MOUSE_CLICKED, new GotoTeamHandler());
- return cell;
- };
- }
-
- private Callback, TableCell> getTeamListIntegerCellFatory() {
- return param -> {
- TableCell cell = new TableCell<>();
- cell.addEventFilter(MouseEvent.MOUSE_CLICKED, new GotoTeamHandler());
- return cell;
- };
- }
-
- private void openTeamViewPopup() {
- pane.setDisable(true);
-
- FXMLLoader fxmlLoader = new FXMLLoader(JiraApp.class.getResource("registerAccountPopup.fxml"));
- try {
- Scene scene = new Scene(fxmlLoader.load());
- Stage newStage = new Stage();
- newStage.setScene(scene);
-
- TeamViewPopupController teamViewPopupController = fxmlLoader.getController();
- teamViewPopupController.setTeamMenuPageController(this);
- newStage.setOnHidden(e -> {pane.setDisable(false);});
-
- newStage.show();
- }
- catch (IOException e) {
- e.printStackTrace();
- }
- }
-
- protected void teamViewReturn() {
- pane.setDisable(false);
- }
-
- class GotoTeamHandler implements EventHandler {
- @Override
- public void handle(MouseEvent event) {
- TableCell cell = (TableCell) event.getSource();
- int index = cell.getIndex();
- TeamStats teamStats = (TeamStats) listOfTeams.getItems().get(index);
- openTeamViewPopup();
- }
- }
-}
-
-class TeamStats {
- private String teamName;
- private int memberCount;
-
- public TeamStats(String teamName, int memberCount) {
- this.teamName = teamName;
- this.memberCount = memberCount;
- }
-
- public int getMemberCount() {
- return memberCount;
- }
-
- public String getTeamName() {
- return teamName;
- }
-
- public void setTeamName(String teamName) {
- this.teamName = teamName;
- }
-
- public void setMemberCount(int memberCount) {
- this.memberCount = memberCount;
- }
-}
diff --git a/src/main/java/jira/view/ViewController.java b/src/main/java/jira/view/ViewController.java
deleted file mode 100644
index 41286f4..0000000
--- a/src/main/java/jira/view/ViewController.java
+++ /dev/null
@@ -1,30 +0,0 @@
-package jira.view;
-
-import jira.controller.UserController;
-
-public class ViewController {
- private static Menu next;
-
- static {
- next = new LoginAndRegisterMenu("Jira", null);
- }
-
- public static void gotoNext() {
- next.execute();
- }
-
- public static void setNext(Menu nextMenu) {
- next = nextMenu;
- }
-
- public static void run() {
- while (true) {
- if (next != null)
- gotoNext();
- else{
- UserController.getController().saveUsers();
- break;
- }
- }
- }
-}
diff --git a/src/main/java/module-info.java b/src/main/java/module-info.java
index bd2d784..db8642f 100644
--- a/src/main/java/module-info.java
+++ b/src/main/java/module-info.java
@@ -3,9 +3,11 @@
requires javafx.fxml;
requires javafx.media;
- opens jira to javafx.fxml, javafx.graphics;
- opens jira.view to javafx.fxml, javafx.media;
- exports jira.view;
- exports jira.controller;
- exports jira.model;
+ opens jira.client.view to javafx.fxml, javafx.media;
+ exports jira.client.view;
+ exports jira.server.controller;
+ exports jira.server.model;
+ opens jira.client to javafx.fxml, javafx.graphics;
+ exports jira;
+ opens jira to javafx.fxml, javafx.media;
}
\ No newline at end of file
diff --git a/src/main/resources/jira/adminPannel.fxml b/src/main/resources/jira/client/adminPannel.fxml
similarity index 93%
rename from src/main/resources/jira/adminPannel.fxml
rename to src/main/resources/jira/client/adminPannel.fxml
index 5823753..80cadf2 100644
--- a/src/main/resources/jira/adminPannel.fxml
+++ b/src/main/resources/jira/client/adminPannel.fxml
@@ -8,7 +8,7 @@
-
+
diff --git a/src/main/resources/jira/client/changePasswordPopup.fxml b/src/main/resources/jira/client/changePasswordPopup.fxml
new file mode 100644
index 0000000..a4e0cf4
--- /dev/null
+++ b/src/main/resources/jira/client/changePasswordPopup.fxml
@@ -0,0 +1,33 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/main/resources/jira/client/changeUsernamePopup.fxml b/src/main/resources/jira/client/changeUsernamePopup.fxml
new file mode 100644
index 0000000..a4ec0e0
--- /dev/null
+++ b/src/main/resources/jira/client/changeUsernamePopup.fxml
@@ -0,0 +1,27 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/main/resources/jira/enterTeamMenu.fxml b/src/main/resources/jira/client/enterTeamMenu.fxml
similarity index 65%
rename from src/main/resources/jira/enterTeamMenu.fxml
rename to src/main/resources/jira/client/enterTeamMenu.fxml
index 03c157c..8b7bd80 100644
--- a/src/main/resources/jira/enterTeamMenu.fxml
+++ b/src/main/resources/jira/client/enterTeamMenu.fxml
@@ -1,16 +1,16 @@
+
-
+
-
+
-
+
+
-
-
-
-
-
-
-
diff --git a/src/main/resources/jira/client/enterTeamMenuLeader.fxml b/src/main/resources/jira/client/enterTeamMenuLeader.fxml
new file mode 100644
index 0000000..5937a8a
--- /dev/null
+++ b/src/main/resources/jira/client/enterTeamMenuLeader.fxml
@@ -0,0 +1,48 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/main/resources/jira/gifs/ask-to-upload.gif b/src/main/resources/jira/client/gifs/ask-to-upload.gif
similarity index 100%
rename from src/main/resources/jira/gifs/ask-to-upload.gif
rename to src/main/resources/jira/client/gifs/ask-to-upload.gif
diff --git a/src/main/resources/jira/icons/password-check-mark.png b/src/main/resources/jira/client/icons/password-check-mark.png
similarity index 100%
rename from src/main/resources/jira/icons/password-check-mark.png
rename to src/main/resources/jira/client/icons/password-check-mark.png
diff --git a/src/main/resources/jira/icons/password-cross-mark.png b/src/main/resources/jira/client/icons/password-cross-mark.png
similarity index 100%
rename from src/main/resources/jira/icons/password-cross-mark.png
rename to src/main/resources/jira/client/icons/password-cross-mark.png
diff --git a/src/main/resources/jira/login.fxml b/src/main/resources/jira/client/login.fxml
similarity index 93%
rename from src/main/resources/jira/login.fxml
rename to src/main/resources/jira/client/login.fxml
index c224c99..b64d17a 100644
--- a/src/main/resources/jira/login.fxml
+++ b/src/main/resources/jira/client/login.fxml
@@ -11,7 +11,7 @@
-
+
diff --git a/src/main/resources/jira/mainMenu.fxml b/src/main/resources/jira/client/mainMenu.fxml
similarity index 83%
rename from src/main/resources/jira/mainMenu.fxml
rename to src/main/resources/jira/client/mainMenu.fxml
index 6e663c8..f91b924 100644
--- a/src/main/resources/jira/mainMenu.fxml
+++ b/src/main/resources/jira/client/mainMenu.fxml
@@ -2,14 +2,13 @@
-
-
+
@@ -27,11 +26,7 @@
-
-
-
-
-
+
diff --git a/src/main/resources/jira/client/miniProfilePopup.fxml b/src/main/resources/jira/client/miniProfilePopup.fxml
new file mode 100644
index 0000000..37b515f
--- /dev/null
+++ b/src/main/resources/jira/client/miniProfilePopup.fxml
@@ -0,0 +1,48 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/main/resources/jira/photos/login.png b/src/main/resources/jira/client/photos/login.png
similarity index 100%
rename from src/main/resources/jira/photos/login.png
rename to src/main/resources/jira/client/photos/login.png
diff --git a/src/main/resources/jira/profile-pics/default-prof-pic.png b/src/main/resources/jira/client/profile-pics/default-prof-pic.png
similarity index 100%
rename from src/main/resources/jira/profile-pics/default-prof-pic.png
rename to src/main/resources/jira/client/profile-pics/default-prof-pic.png
diff --git a/src/main/resources/jira/client/profileMenu.fxml b/src/main/resources/jira/client/profileMenu.fxml
new file mode 100644
index 0000000..02f381a
--- /dev/null
+++ b/src/main/resources/jira/client/profileMenu.fxml
@@ -0,0 +1,56 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/main/resources/jira/registerAccountPopup.fxml b/src/main/resources/jira/client/registerAccountPopup.fxml
similarity index 92%
rename from src/main/resources/jira/registerAccountPopup.fxml
rename to src/main/resources/jira/client/registerAccountPopup.fxml
index c144ff6..ee451df 100644
--- a/src/main/resources/jira/registerAccountPopup.fxml
+++ b/src/main/resources/jira/client/registerAccountPopup.fxml
@@ -9,7 +9,7 @@
-
+
diff --git a/src/main/resources/jira/client/teamMenu.fxml b/src/main/resources/jira/client/teamMenu.fxml
new file mode 100644
index 0000000..2c34ee6
--- /dev/null
+++ b/src/main/resources/jira/client/teamMenu.fxml
@@ -0,0 +1,45 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/main/resources/jira/server/profile-pics/default-prof-pic.png b/src/main/resources/jira/server/profile-pics/default-prof-pic.png
new file mode 100644
index 0000000..30d781e
Binary files /dev/null and b/src/main/resources/jira/server/profile-pics/default-prof-pic.png differ
diff --git a/src/main/resources/jira/teamMenu.fxml b/src/main/resources/jira/teamMenu.fxml
deleted file mode 100644
index d244521..0000000
--- a/src/main/resources/jira/teamMenu.fxml
+++ /dev/null
@@ -1,17 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/src/test/java/controller/BoardControllerTest.java b/src/test/java/controller/BoardControllerTest.java
index ddc78f9..f5d7f60 100644
--- a/src/test/java/controller/BoardControllerTest.java
+++ b/src/test/java/controller/BoardControllerTest.java
@@ -1,11 +1,11 @@
package controller;
-import jira.controller.BoardController;
-import jira.controller.ControllerResult;
-import jira.model.Board;
-import jira.model.Task;
-import jira.model.Team;
-import jira.model.User;
+import jira.server.controller.BoardController;
+import jira.ControllerResult;
+import jira.server.model.Board;
+import jira.server.model.Task;
+import jira.server.model.Team;
+import jira.server.model.User;
import org.junit.jupiter.api.AfterAll;
import org.junit.jupiter.api.AfterEach;
import org.junit.jupiter.api.BeforeEach;
diff --git a/src/test/java/controller/Initializer.java b/src/test/java/controller/Initializer.java
index d099114..c94a050 100644
--- a/src/test/java/controller/Initializer.java
+++ b/src/test/java/controller/Initializer.java
@@ -1,7 +1,8 @@
package controller;
-import jira.model.*;
+import jira.server.model.*;
import java.time.LocalDateTime;
+import jira.Role;
public abstract class Initializer {
diff --git a/src/test/java/controller/TasksControllerTest.java b/src/test/java/controller/TasksControllerTest.java
index f1662d9..441d260 100644
--- a/src/test/java/controller/TasksControllerTest.java
+++ b/src/test/java/controller/TasksControllerTest.java
@@ -1,11 +1,11 @@
package controller;
-import jira.controller.ControllerResult;
-import jira.controller.TasksController;
-import jira.model.Board;
-import jira.model.Task;
-import jira.model.Team;
-import jira.model.User;
+import jira.ControllerResult;
+import jira.server.controller.TasksController;
+import jira.server.model.Board;
+import jira.server.model.Task;
+import jira.server.model.Team;
+import jira.server.model.User;
import org.junit.jupiter.api.AfterAll;
import org.junit.jupiter.api.AfterEach;
import org.junit.jupiter.api.BeforeEach;