Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -61,7 +61,7 @@
<!-- Default configuration for running with: mvn clean javafx:run -->
<id>default-cli</id>
<configuration>
<mainClass>jira.JiraApp</mainClass>
<mainClass>jira.client.JiraApp</mainClass>
<launcher>app</launcher>
<jlinkZipName>app</jlinkZipName>
<jlinkImageName>app</jlinkImageName>
Expand Down
Original file line number Diff line number Diff line change
@@ -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;

Expand Down
33 changes: 33 additions & 0 deletions src/main/java/jira/RPCMessage.java
Original file line number Diff line number Diff line change
@@ -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;
}
}
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
package jira.model;
package jira;

public enum Role {
ADMIN {
Expand Down
Original file line number Diff line number Diff line change
@@ -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"));
Expand All @@ -30,7 +19,6 @@ public void start(Stage stage) throws IOException {
}

public static void main(String[] args) {
setup();
launch();
}
}
177 changes: 177 additions & 0 deletions src/main/java/jira/client/view/AdminPanelPageController.java
Original file line number Diff line number Diff line change
@@ -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<String> pendingTeamsTableView;
@FXML private TableView<String> 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<String> userNames = UserController.getController().getAllUsernames();
ArrayList<String> userNames = (ArrayList<String>) new RPCExecutor()
.execute("UserController", "getAllUsernames");
TableColumn<String, String> username = new TableColumn<>("Username");
username.setCellValueFactory(param -> new ReadOnlyStringWrapper(param.getValue()));

usersTableView.getColumns().add(username);
ObservableList<String> rows = FXCollections.observableArrayList(userNames);
usersTableView.setItems(rows);
}

private void populatePendingTeamsTableView() {
// ArrayList<String> pendingTeamNames = TeamController.getController().getPendingTeams();
ArrayList<String> pendingTeamNames = (ArrayList<String>) new RPCExecutor()
.execute("TeamController", "getPendingTeams");
pendingTeamsTableView.setEditable(true);

TableColumn<String, String> pendingTeamName = new TableColumn<>("Team Name");
pendingTeamName.setCellValueFactory(param -> new ReadOnlyStringWrapper(param.getValue()));

pendingTeamsTableView.getColumns().add(pendingTeamName);
addAcceptButtonToTable();
addRejectButtonToTable();

ObservableList<String> rows = FXCollections.observableArrayList(pendingTeamNames);
pendingTeamsTableView.setItems(rows);
}

private void addRejectButtonToTable() {
TableColumn<String, Void> columnButtonReject = new TableColumn<>("");
Callback<TableColumn<String, Void>, TableCell<String, Void>> 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<String, Void> columnButtonAccept = new TableColumn<>("");
Callback<TableColumn<String, Void>, TableCell<String, Void>> 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();
}
}
}
67 changes: 67 additions & 0 deletions src/main/java/jira/client/view/ChangePasswordPopupController.java
Original file line number Diff line number Diff line change
@@ -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();
}
}
45 changes: 45 additions & 0 deletions src/main/java/jira/client/view/ChangeUsernamePopupController.java
Original file line number Diff line number Diff line change
@@ -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();
}
}
Loading