Clean initial
This commit is contained in:
commit
a2035a8486
21 changed files with 1193 additions and 0 deletions
28
.gitignore
vendored
Normal file
28
.gitignore
vendored
Normal file
|
@ -0,0 +1,28 @@
|
|||
# Ignore Gradle project-specific cache directory
|
||||
.gradle
|
||||
|
||||
# Ignore Gradle build output directory
|
||||
build
|
||||
|
||||
*.gradle
|
||||
|
||||
**/build/
|
||||
!src/**/build/
|
||||
|
||||
# Ignore Gradle GUI config
|
||||
gradle-app.setting
|
||||
|
||||
# Avoid ignoring Gradle wrapper jar file (.jar files are usually ignored)
|
||||
!gradle-wrapper.jar
|
||||
|
||||
# Avoid ignore Gradle wrappper properties
|
||||
!gradle-wrapper.properties
|
||||
|
||||
# Cache of project
|
||||
.gradletasknamecache
|
||||
|
||||
# Eclipse Gradle plugin generated files
|
||||
# Eclipse Core
|
||||
.project
|
||||
# JDT-specific (Eclipse Java Development Tools)
|
||||
.classpath.class
|
BIN
gradle/wrapper/gradle-wrapper.jar
vendored
Normal file
BIN
gradle/wrapper/gradle-wrapper.jar
vendored
Normal file
Binary file not shown.
5
gradle/wrapper/gradle-wrapper.properties
vendored
Normal file
5
gradle/wrapper/gradle-wrapper.properties
vendored
Normal file
|
@ -0,0 +1,5 @@
|
|||
distributionBase=GRADLE_USER_HOME
|
||||
distributionPath=wrapper/dists
|
||||
distributionUrl=https\://services.gradle.org/distributions/gradle-6.1.1-all.zip
|
||||
zipStoreBase=GRADLE_USER_HOME
|
||||
zipStorePath=wrapper/dists
|
188
gradlew
vendored
Executable file
188
gradlew
vendored
Executable file
|
@ -0,0 +1,188 @@
|
|||
#!/usr/bin/env sh
|
||||
|
||||
#
|
||||
# Copyright 2015 the original author or authors.
|
||||
#
|
||||
# Licensed under the Apache License, Version 2.0 (the "License");
|
||||
# you may not use this file except in compliance with the License.
|
||||
# You may obtain a copy of the License at
|
||||
#
|
||||
# http://www.apache.org/licenses/LICENSE-2.0
|
||||
#
|
||||
# Unless required by applicable law or agreed to in writing, software
|
||||
# distributed under the License is distributed on an "AS IS" BASIS,
|
||||
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
# See the License for the specific language governing permissions and
|
||||
# limitations under the License.
|
||||
#
|
||||
|
||||
##############################################################################
|
||||
##
|
||||
## Gradle start up script for UN*X
|
||||
##
|
||||
##############################################################################
|
||||
|
||||
# Attempt to set APP_HOME
|
||||
# Resolve links: $0 may be a link
|
||||
PRG="$0"
|
||||
# Need this for relative symlinks.
|
||||
while [ -h "$PRG" ] ; do
|
||||
ls=`ls -ld "$PRG"`
|
||||
link=`expr "$ls" : '.*-> \(.*\)$'`
|
||||
if expr "$link" : '/.*' > /dev/null; then
|
||||
PRG="$link"
|
||||
else
|
||||
PRG=`dirname "$PRG"`"/$link"
|
||||
fi
|
||||
done
|
||||
SAVED="`pwd`"
|
||||
cd "`dirname \"$PRG\"`/" >/dev/null
|
||||
APP_HOME="`pwd -P`"
|
||||
cd "$SAVED" >/dev/null
|
||||
|
||||
APP_NAME="Gradle"
|
||||
APP_BASE_NAME=`basename "$0"`
|
||||
|
||||
# Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script.
|
||||
DEFAULT_JVM_OPTS='"-Xmx64m" "-Xms64m"'
|
||||
|
||||
# Use the maximum available, or set MAX_FD != -1 to use that value.
|
||||
MAX_FD="maximum"
|
||||
|
||||
warn () {
|
||||
echo "$*"
|
||||
}
|
||||
|
||||
die () {
|
||||
echo
|
||||
echo "$*"
|
||||
echo
|
||||
exit 1
|
||||
}
|
||||
|
||||
# OS specific support (must be 'true' or 'false').
|
||||
cygwin=false
|
||||
msys=false
|
||||
darwin=false
|
||||
nonstop=false
|
||||
case "`uname`" in
|
||||
CYGWIN* )
|
||||
cygwin=true
|
||||
;;
|
||||
Darwin* )
|
||||
darwin=true
|
||||
;;
|
||||
MINGW* )
|
||||
msys=true
|
||||
;;
|
||||
NONSTOP* )
|
||||
nonstop=true
|
||||
;;
|
||||
esac
|
||||
|
||||
CLASSPATH=$APP_HOME/gradle/wrapper/gradle-wrapper.jar
|
||||
|
||||
# Determine the Java command to use to start the JVM.
|
||||
if [ -n "$JAVA_HOME" ] ; then
|
||||
if [ -x "$JAVA_HOME/jre/sh/java" ] ; then
|
||||
# IBM's JDK on AIX uses strange locations for the executables
|
||||
JAVACMD="$JAVA_HOME/jre/sh/java"
|
||||
else
|
||||
JAVACMD="$JAVA_HOME/bin/java"
|
||||
fi
|
||||
if [ ! -x "$JAVACMD" ] ; then
|
||||
die "ERROR: JAVA_HOME is set to an invalid directory: $JAVA_HOME
|
||||
|
||||
Please set the JAVA_HOME variable in your environment to match the
|
||||
location of your Java installation."
|
||||
fi
|
||||
else
|
||||
JAVACMD="java"
|
||||
which java >/dev/null 2>&1 || die "ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH.
|
||||
|
||||
Please set the JAVA_HOME variable in your environment to match the
|
||||
location of your Java installation."
|
||||
fi
|
||||
|
||||
# Increase the maximum file descriptors if we can.
|
||||
if [ "$cygwin" = "false" -a "$darwin" = "false" -a "$nonstop" = "false" ] ; then
|
||||
MAX_FD_LIMIT=`ulimit -H -n`
|
||||
if [ $? -eq 0 ] ; then
|
||||
if [ "$MAX_FD" = "maximum" -o "$MAX_FD" = "max" ] ; then
|
||||
MAX_FD="$MAX_FD_LIMIT"
|
||||
fi
|
||||
ulimit -n $MAX_FD
|
||||
if [ $? -ne 0 ] ; then
|
||||
warn "Could not set maximum file descriptor limit: $MAX_FD"
|
||||
fi
|
||||
else
|
||||
warn "Could not query maximum file descriptor limit: $MAX_FD_LIMIT"
|
||||
fi
|
||||
fi
|
||||
|
||||
# For Darwin, add options to specify how the application appears in the dock
|
||||
if $darwin; then
|
||||
GRADLE_OPTS="$GRADLE_OPTS \"-Xdock:name=$APP_NAME\" \"-Xdock:icon=$APP_HOME/media/gradle.icns\""
|
||||
fi
|
||||
|
||||
# For Cygwin, switch paths to Windows format before running java
|
||||
if $cygwin ; then
|
||||
APP_HOME=`cygpath --path --mixed "$APP_HOME"`
|
||||
CLASSPATH=`cygpath --path --mixed "$CLASSPATH"`
|
||||
JAVACMD=`cygpath --unix "$JAVACMD"`
|
||||
|
||||
# We build the pattern for arguments to be converted via cygpath
|
||||
ROOTDIRSRAW=`find -L / -maxdepth 1 -mindepth 1 -type d 2>/dev/null`
|
||||
SEP=""
|
||||
for dir in $ROOTDIRSRAW ; do
|
||||
ROOTDIRS="$ROOTDIRS$SEP$dir"
|
||||
SEP="|"
|
||||
done
|
||||
OURCYGPATTERN="(^($ROOTDIRS))"
|
||||
# Add a user-defined pattern to the cygpath arguments
|
||||
if [ "$GRADLE_CYGPATTERN" != "" ] ; then
|
||||
OURCYGPATTERN="$OURCYGPATTERN|($GRADLE_CYGPATTERN)"
|
||||
fi
|
||||
# Now convert the arguments - kludge to limit ourselves to /bin/sh
|
||||
i=0
|
||||
for arg in "$@" ; do
|
||||
CHECK=`echo "$arg"|egrep -c "$OURCYGPATTERN" -`
|
||||
CHECK2=`echo "$arg"|egrep -c "^-"` ### Determine if an option
|
||||
|
||||
if [ $CHECK -ne 0 ] && [ $CHECK2 -eq 0 ] ; then ### Added a condition
|
||||
eval `echo args$i`=`cygpath --path --ignore --mixed "$arg"`
|
||||
else
|
||||
eval `echo args$i`="\"$arg\""
|
||||
fi
|
||||
i=$((i+1))
|
||||
done
|
||||
case $i in
|
||||
(0) set -- ;;
|
||||
(1) set -- "$args0" ;;
|
||||
(2) set -- "$args0" "$args1" ;;
|
||||
(3) set -- "$args0" "$args1" "$args2" ;;
|
||||
(4) set -- "$args0" "$args1" "$args2" "$args3" ;;
|
||||
(5) set -- "$args0" "$args1" "$args2" "$args3" "$args4" ;;
|
||||
(6) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" ;;
|
||||
(7) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" ;;
|
||||
(8) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" ;;
|
||||
(9) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" "$args8" ;;
|
||||
esac
|
||||
fi
|
||||
|
||||
# Escape application args
|
||||
save () {
|
||||
for i do printf %s\\n "$i" | sed "s/'/'\\\\''/g;1s/^/'/;\$s/\$/' \\\\/" ; done
|
||||
echo " "
|
||||
}
|
||||
APP_ARGS=$(save "$@")
|
||||
|
||||
# Collect all arguments for the java command, following the shell quoting and substitution rules
|
||||
eval set -- $DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS "\"-Dorg.gradle.appname=$APP_BASE_NAME\"" -classpath "\"$CLASSPATH\"" org.gradle.wrapper.GradleWrapperMain "$APP_ARGS"
|
||||
|
||||
# by default we should be in the correct project dir, but when run from Finder on Mac, the cwd is wrong
|
||||
if [ "$(uname)" = "Darwin" ] && [ "$HOME" = "$PWD" ]; then
|
||||
cd "$(dirname "$0")"
|
||||
fi
|
||||
|
||||
exec "$JAVACMD" "$@"
|
100
gradlew.bat
vendored
Normal file
100
gradlew.bat
vendored
Normal file
|
@ -0,0 +1,100 @@
|
|||
@rem
|
||||
@rem Copyright 2015 the original author or authors.
|
||||
@rem
|
||||
@rem Licensed under the Apache License, Version 2.0 (the "License");
|
||||
@rem you may not use this file except in compliance with the License.
|
||||
@rem You may obtain a copy of the License at
|
||||
@rem
|
||||
@rem http://www.apache.org/licenses/LICENSE-2.0
|
||||
@rem
|
||||
@rem Unless required by applicable law or agreed to in writing, software
|
||||
@rem distributed under the License is distributed on an "AS IS" BASIS,
|
||||
@rem WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
@rem See the License for the specific language governing permissions and
|
||||
@rem limitations under the License.
|
||||
@rem
|
||||
|
||||
@if "%DEBUG%" == "" @echo off
|
||||
@rem ##########################################################################
|
||||
@rem
|
||||
@rem Gradle startup script for Windows
|
||||
@rem
|
||||
@rem ##########################################################################
|
||||
|
||||
@rem Set local scope for the variables with windows NT shell
|
||||
if "%OS%"=="Windows_NT" setlocal
|
||||
|
||||
set DIRNAME=%~dp0
|
||||
if "%DIRNAME%" == "" set DIRNAME=.
|
||||
set APP_BASE_NAME=%~n0
|
||||
set APP_HOME=%DIRNAME%
|
||||
|
||||
@rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script.
|
||||
set DEFAULT_JVM_OPTS="-Xmx64m" "-Xms64m"
|
||||
|
||||
@rem Find java.exe
|
||||
if defined JAVA_HOME goto findJavaFromJavaHome
|
||||
|
||||
set JAVA_EXE=java.exe
|
||||
%JAVA_EXE% -version >NUL 2>&1
|
||||
if "%ERRORLEVEL%" == "0" goto init
|
||||
|
||||
echo.
|
||||
echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH.
|
||||
echo.
|
||||
echo Please set the JAVA_HOME variable in your environment to match the
|
||||
echo location of your Java installation.
|
||||
|
||||
goto fail
|
||||
|
||||
:findJavaFromJavaHome
|
||||
set JAVA_HOME=%JAVA_HOME:"=%
|
||||
set JAVA_EXE=%JAVA_HOME%/bin/java.exe
|
||||
|
||||
if exist "%JAVA_EXE%" goto init
|
||||
|
||||
echo.
|
||||
echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME%
|
||||
echo.
|
||||
echo Please set the JAVA_HOME variable in your environment to match the
|
||||
echo location of your Java installation.
|
||||
|
||||
goto fail
|
||||
|
||||
:init
|
||||
@rem Get command-line arguments, handling Windows variants
|
||||
|
||||
if not "%OS%" == "Windows_NT" goto win9xME_args
|
||||
|
||||
:win9xME_args
|
||||
@rem Slurp the command line arguments.
|
||||
set CMD_LINE_ARGS=
|
||||
set _SKIP=2
|
||||
|
||||
:win9xME_args_slurp
|
||||
if "x%~1" == "x" goto execute
|
||||
|
||||
set CMD_LINE_ARGS=%*
|
||||
|
||||
:execute
|
||||
@rem Setup the command line
|
||||
|
||||
set CLASSPATH=%APP_HOME%\gradle\wrapper\gradle-wrapper.jar
|
||||
|
||||
@rem Execute Gradle
|
||||
"%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" org.gradle.wrapper.GradleWrapperMain %CMD_LINE_ARGS%
|
||||
|
||||
:end
|
||||
@rem End local scope for the variables with windows NT shell
|
||||
if "%ERRORLEVEL%"=="0" goto mainEnd
|
||||
|
||||
:fail
|
||||
rem Set variable GRADLE_EXIT_CONSOLE if you need the _script_ return code instead of
|
||||
rem the _cmd.exe /c_ return code!
|
||||
if not "" == "%GRADLE_EXIT_CONSOLE%" exit 1
|
||||
exit /b 1
|
||||
|
||||
:mainEnd
|
||||
if "%OS%"=="Windows_NT" endlocal
|
||||
|
||||
:omega
|
63
src/main/java/datamodel/CurrentUser.java
Executable file
63
src/main/java/datamodel/CurrentUser.java
Executable file
|
@ -0,0 +1,63 @@
|
|||
package datamodel;
|
||||
|
||||
/**
|
||||
* CurrentUser represents the current user that has logged on to
|
||||
* the movie booking system. It is a singleton class.
|
||||
*/
|
||||
public class CurrentUser {
|
||||
/**
|
||||
* The single instance of this class
|
||||
*/
|
||||
private static CurrentUser instance;
|
||||
|
||||
/**
|
||||
* The name of the current user.
|
||||
*/
|
||||
private String currentUserId;
|
||||
|
||||
/**
|
||||
* Create a CurrentUser object.
|
||||
*/
|
||||
private CurrentUser() {
|
||||
currentUserId = null;
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the single instance of this class.
|
||||
*
|
||||
* @return The single instance of the class.
|
||||
*/
|
||||
public static CurrentUser instance() {
|
||||
if (instance == null)
|
||||
instance = new CurrentUser();
|
||||
return instance;
|
||||
}
|
||||
|
||||
/**
|
||||
* Check if a user has logged in.
|
||||
*
|
||||
* @return true if a user has logged in, false otherwise.
|
||||
*/
|
||||
public boolean isLoggedIn() {
|
||||
return currentUserId != null;
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the user id of the current user. Should only be called if
|
||||
* a user has logged in.
|
||||
*
|
||||
* @return The user id of the current user.
|
||||
*/
|
||||
public String getCurrentUserId() {
|
||||
return currentUserId == null ? "<none>" : currentUserId;
|
||||
}
|
||||
|
||||
/**
|
||||
* A new user logs in.
|
||||
*
|
||||
* @param userId The user id of the new user.
|
||||
*/
|
||||
public void loginAs(String userId) {
|
||||
currentUserId = userId;
|
||||
}
|
||||
}
|
88
src/main/java/datamodel/Database.java
Executable file
88
src/main/java/datamodel/Database.java
Executable file
|
@ -0,0 +1,88 @@
|
|||
package datamodel;
|
||||
|
||||
import java.sql.*;
|
||||
/**
|
||||
* Database is a class that specifies the interface to the
|
||||
* movie database. Uses JDBC and the MySQL Connector/J driver.
|
||||
*/
|
||||
public class Database {
|
||||
/**
|
||||
* The database connection.
|
||||
*/
|
||||
private Connection conn;
|
||||
|
||||
/**
|
||||
* Create the database interface object. Connection to the database
|
||||
* is performed later.
|
||||
*/
|
||||
public Database() {
|
||||
conn = null;
|
||||
}
|
||||
|
||||
/* --- TODO: Change this method to fit your choice of DBMS --- */
|
||||
/**
|
||||
* Open a connection to the database, using the specified user name
|
||||
* and password.
|
||||
*
|
||||
* @param userName The user name.
|
||||
* @param password The user's password.
|
||||
* @return true if the connection succeeded, false if the supplied
|
||||
* user name and password were not recognized. Returns false also
|
||||
* if the JDBC driver isn't found.
|
||||
*/
|
||||
public boolean openConnection(String userName, String password) {
|
||||
try {
|
||||
// Connection strings for included DBMS clients:
|
||||
// [MySQL] jdbc:mysql://[host]/[database]
|
||||
// [PostgreSQL] jdbc:postgresql://[host]/[database]
|
||||
// [SQLite] jdbc:sqlite://[filepath]
|
||||
|
||||
// Use "jdbc:mysql://puccini.cs.lth.se/" + userName if you using our shared server
|
||||
// If outside, this statement will hang until timeout.
|
||||
conn = DriverManager.getConnection
|
||||
("jdbc:sqlite:movieBookings.db3", userName, password);
|
||||
}
|
||||
catch (SQLException e) {
|
||||
System.err.println(e);
|
||||
e.printStackTrace();
|
||||
return false;
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
/**
|
||||
* Close the connection to the database.
|
||||
*/
|
||||
public void closeConnection() {
|
||||
try {
|
||||
if (conn != null)
|
||||
conn.close();
|
||||
}
|
||||
catch (SQLException e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
conn = null;
|
||||
|
||||
System.err.println("Database connection closed.");
|
||||
}
|
||||
|
||||
/**
|
||||
* Check if the connection to the database has been established
|
||||
*
|
||||
* @return true if the connection has been established
|
||||
*/
|
||||
public boolean isConnected() {
|
||||
return conn != null;
|
||||
}
|
||||
|
||||
public Show getShowData(String mTitle, String mDate) {
|
||||
Integer mFreeSeats = 42;
|
||||
String mVenue = "Kino 2";
|
||||
|
||||
/* --- TODO: add code for database query --- */
|
||||
|
||||
return new Show(mTitle, mDate, mVenue, mFreeSeats);
|
||||
}
|
||||
|
||||
/* --- TODO: insert more own code here --- */
|
||||
}
|
38
src/main/java/datamodel/Reservation.java
Normal file
38
src/main/java/datamodel/Reservation.java
Normal file
|
@ -0,0 +1,38 @@
|
|||
package datamodel;
|
||||
|
||||
// Container for the booking data
|
||||
public class Reservation {
|
||||
private int bookingId;
|
||||
private String movieTitle;
|
||||
private String performanceDate;
|
||||
private String theatreName;
|
||||
|
||||
public Reservation() {
|
||||
this(-1, "N/A", "N/A", "N/A");
|
||||
}
|
||||
|
||||
// constructor
|
||||
public Reservation(int bookingId, String movieTitle, String performanceDate, String theatreName) {
|
||||
this.bookingId = bookingId;
|
||||
this.movieTitle = movieTitle;
|
||||
this.performanceDate = performanceDate;
|
||||
this.theatreName = theatreName;
|
||||
}
|
||||
|
||||
// getters
|
||||
public int getBookingId() {
|
||||
return bookingId;
|
||||
}
|
||||
|
||||
public String getMovieTitle() {
|
||||
return movieTitle;
|
||||
}
|
||||
|
||||
public String getPerformanceDate() {
|
||||
return performanceDate;
|
||||
}
|
||||
|
||||
public String getTheatreName() {
|
||||
return theatreName;
|
||||
}
|
||||
}
|
39
src/main/java/datamodel/Show.java
Executable file
39
src/main/java/datamodel/Show.java
Executable file
|
@ -0,0 +1,39 @@
|
|||
package datamodel;
|
||||
|
||||
// Container for the database data
|
||||
/* --- TODO: Modify as needed --- */
|
||||
|
||||
public class Show {
|
||||
// attributes associated with database columns
|
||||
private String title;
|
||||
private String date;
|
||||
private String venue;
|
||||
private Integer freeSeats;
|
||||
|
||||
// constructor for "no show"
|
||||
public Show() {
|
||||
init("","","",-1);
|
||||
}
|
||||
|
||||
// constructor defining all content
|
||||
public Show(String t, String d, String v, Integer fs) {
|
||||
init(t,d,v,fs);
|
||||
}
|
||||
|
||||
// constructor defining only the title
|
||||
public Show(String t) {
|
||||
init(t,"","",-1);
|
||||
}
|
||||
|
||||
// all constructors use this
|
||||
private void init(String t, String d, String v, Integer fs) {
|
||||
title = t; date = d; venue = v; freeSeats = fs;
|
||||
}
|
||||
|
||||
// getters
|
||||
public String getTitle() { return title; }
|
||||
public String getDate() { return date; }
|
||||
public String getVenue() { return venue; }
|
||||
public Integer getSeats() { return freeSeats; }
|
||||
|
||||
}
|
12
src/main/java/gui/App.java
Normal file
12
src/main/java/gui/App.java
Normal file
|
@ -0,0 +1,12 @@
|
|||
package gui;
|
||||
|
||||
import javafx.application.Application;
|
||||
|
||||
/**
|
||||
* The application entry-point, the location of the primary main function.
|
||||
*/
|
||||
public class App {
|
||||
public static void main(String[] args) {
|
||||
Application.launch(MainApplication.class, args);
|
||||
}
|
||||
}
|
146
src/main/java/gui/BookingTab.java
Executable file
146
src/main/java/gui/BookingTab.java
Executable file
|
@ -0,0 +1,146 @@
|
|||
package gui;
|
||||
|
||||
import javafx.collections.FXCollections;
|
||||
import javafx.fxml.FXML;
|
||||
import javafx.scene.control.Label;
|
||||
import javafx.scene.control.ListView;
|
||||
import javafx.scene.control.Button;
|
||||
import javafx.scene.text.Text;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
import datamodel.CurrentUser;
|
||||
import datamodel.Database;
|
||||
import datamodel.Show;
|
||||
|
||||
import java.util.ArrayList;
|
||||
|
||||
|
||||
public class BookingTab {
|
||||
// top context message
|
||||
@FXML private Text topContext;
|
||||
// bottom message
|
||||
@FXML private Text bookMsg;
|
||||
|
||||
// table references
|
||||
@FXML private ListView<String> moviesList;
|
||||
@FXML private ListView<String> datesList;
|
||||
|
||||
// show info references
|
||||
@FXML private Label showTitle;
|
||||
@FXML private Label showDate;
|
||||
@FXML private Label showVenue;
|
||||
@FXML private Label showFreeSeats;
|
||||
|
||||
// booking button
|
||||
@FXML private Button bookTicket;
|
||||
|
||||
private Database db;
|
||||
private Show crtShow = new Show();
|
||||
|
||||
public void initialize() {
|
||||
System.out.println("Initializing BookingTab");
|
||||
|
||||
// set up listeners for the movie list selection
|
||||
moviesList.getSelectionModel().selectedItemProperty().addListener(
|
||||
(obs, oldV, newV) -> {
|
||||
// need to update the date list according to the selected movie
|
||||
// update also the details on the right panel
|
||||
String movie = newV;
|
||||
fillDatesList(newV);
|
||||
fillShow(movie,null);
|
||||
});
|
||||
|
||||
// set up listeners for the date list selection
|
||||
datesList.getSelectionModel().selectedItemProperty().addListener(
|
||||
(obs, oldV, newV) -> {
|
||||
// need to update the details according to the selected date
|
||||
String movie = moviesList.getSelectionModel().getSelectedItem();
|
||||
String date = newV;
|
||||
fillShow(movie, date);
|
||||
});
|
||||
|
||||
// set up booking button listener
|
||||
// one can either use this method (setup a handler in initialize)
|
||||
// or directly give a handler name in the fxml, as in the LoginTab class
|
||||
bookTicket.setOnAction(
|
||||
(event) -> {
|
||||
String movie = moviesList.getSelectionModel().getSelectedItem();
|
||||
String date = datesList.getSelectionModel().getSelectedItem();
|
||||
/* --- TODO: should attempt to book a ticket via the database --- */
|
||||
/* --- do not forget to report booking number! --- */
|
||||
/* --- update the displayed details (free seats) --- */
|
||||
report("Booked one ticket to "+movie+" on "+date);
|
||||
});
|
||||
|
||||
report("Ready.");
|
||||
}
|
||||
|
||||
// helpers
|
||||
// updates user display
|
||||
private void fillStatus(String usr) {
|
||||
if(usr.isEmpty()) topContext.setText("You must log in as a known user!");
|
||||
else topContext.setText("Currently logged in as " + usr);
|
||||
}
|
||||
|
||||
private void report(String msg) {
|
||||
bookMsg.setText(msg);
|
||||
}
|
||||
|
||||
public void setDatabase(Database db) {
|
||||
this.db = db;
|
||||
}
|
||||
|
||||
private void fillNamesList() {
|
||||
List<String> allmovies = new ArrayList<String>();
|
||||
|
||||
// query the database via db
|
||||
/* --- TODO: replace with own code --- */
|
||||
allmovies.add("Pulp Fiction");
|
||||
allmovies.add("The Big Lebowski");
|
||||
allmovies.add("Whiplash");
|
||||
/* --- END TODO --- */
|
||||
|
||||
moviesList.setItems(FXCollections.observableList(allmovies));
|
||||
// remove any selection
|
||||
moviesList.getSelectionModel().clearSelection();
|
||||
}
|
||||
|
||||
private void fillDatesList(String m) {
|
||||
List<String> alldates = new ArrayList<String>();
|
||||
if(m!=null) {
|
||||
// query the database via db
|
||||
/* --- TODO: replace with own code --- */
|
||||
alldates.add("2016-02-01");
|
||||
alldates.add("2016-01-15");
|
||||
/* --- END TODO --- */
|
||||
}
|
||||
datesList.setItems(FXCollections.observableList(alldates));
|
||||
// remove any selection
|
||||
datesList.getSelectionModel().clearSelection();
|
||||
}
|
||||
|
||||
private void fillShow(String movie, String date) {
|
||||
if(movie==null) // no movie selected
|
||||
crtShow = new Show();
|
||||
else if(date==null) // no date selected yet
|
||||
crtShow = new Show(movie);
|
||||
else // query the database via db
|
||||
crtShow = db.getShowData(movie, date);
|
||||
|
||||
showTitle.setText(crtShow.getTitle());
|
||||
showDate.setText(crtShow.getDate());
|
||||
showVenue.setText(crtShow.getVenue());
|
||||
if(crtShow.getSeats() >= 0) showFreeSeats.setText(crtShow.getSeats().toString());
|
||||
else showFreeSeats.setText("-");
|
||||
}
|
||||
|
||||
// called in case the user logged in changed
|
||||
public void userChanged() {
|
||||
fillStatus(CurrentUser.instance().getCurrentUserId());
|
||||
fillNamesList();
|
||||
fillDatesList(null);
|
||||
fillShow(null,null);
|
||||
}
|
||||
|
||||
}
|
71
src/main/java/gui/LoginTab.java
Executable file
71
src/main/java/gui/LoginTab.java
Executable file
|
@ -0,0 +1,71 @@
|
|||
package gui;
|
||||
|
||||
import datamodel.CurrentUser;
|
||||
import datamodel.Database;
|
||||
import javafx.event.ActionEvent;
|
||||
import javafx.fxml.FXML;
|
||||
import javafx.scene.text.Text;
|
||||
import javafx.scene.control.TextField;
|
||||
|
||||
import javafx.scene.control.Alert;
|
||||
import javafx.scene.control.Alert.*;
|
||||
|
||||
// controller for both the top tabs and login tab!
|
||||
|
||||
public class LoginTab {
|
||||
@FXML private Text actiontarget;
|
||||
@FXML private TextField username;
|
||||
|
||||
private BookingTab bookingTabCtrl;
|
||||
private Database db;
|
||||
|
||||
@FXML protected void handleSubmitButtonAction(ActionEvent event) {
|
||||
|
||||
if(!db.isConnected()) {
|
||||
// inform the user that there is no check against the database
|
||||
Alert alert = new Alert(AlertType.ERROR);
|
||||
alert.setTitle("Login fail");
|
||||
alert.setHeaderText(null);
|
||||
alert.setContentText("No database connection! Cannot check user credentials.");
|
||||
alert.showAndWait();
|
||||
} else {
|
||||
String uname = username.getText();
|
||||
|
||||
/* --- TODO: add code to query the database credentials --- */
|
||||
// could be if(!db.login(uname)) alert...
|
||||
|
||||
// inform the user that there is no check against the database
|
||||
Alert alert = new Alert(AlertType.INFORMATION);
|
||||
alert.setTitle("Login fail");
|
||||
alert.setHeaderText(null);
|
||||
alert.setContentText("No user check implemented yet!");
|
||||
alert.showAndWait();
|
||||
/* --- END TODO --- */
|
||||
|
||||
// setting the user name
|
||||
CurrentUser.instance().loginAs(uname);
|
||||
|
||||
// inform the user about logging in
|
||||
actiontarget.setText("Sign in user "+uname);
|
||||
|
||||
// inform booking tab of user change
|
||||
bookingTabCtrl.userChanged();
|
||||
}
|
||||
}
|
||||
|
||||
public void initialize() {
|
||||
System.out.println("Initializing LoginTab.");
|
||||
}
|
||||
|
||||
// helpers
|
||||
// use this pattern to send data down to controllers at initialization
|
||||
public void setBookingTab(BookingTab bookingTabCtrl) {
|
||||
System.out.println("LoginTab sets bookingTab:"+bookingTabCtrl);
|
||||
this.bookingTabCtrl = bookingTabCtrl;
|
||||
}
|
||||
|
||||
public void setDatabase(Database db) {
|
||||
this.db = db;
|
||||
}
|
||||
|
||||
}
|
65
src/main/java/gui/MainApplication.java
Executable file
65
src/main/java/gui/MainApplication.java
Executable file
|
@ -0,0 +1,65 @@
|
|||
package gui;
|
||||
|
||||
import datamodel.Database;
|
||||
import javafx.application.Application;
|
||||
import javafx.fxml.FXMLLoader;
|
||||
import javafx.scene.Parent;
|
||||
import javafx.scene.Scene;
|
||||
import javafx.scene.control.Alert;
|
||||
import javafx.scene.control.Alert.AlertType;
|
||||
import javafx.stage.Stage;
|
||||
|
||||
|
||||
/**
|
||||
* The Main JavaFX Application class
|
||||
*
|
||||
* Use the main method in App to start it all.
|
||||
*/
|
||||
public class MainApplication extends Application {
|
||||
|
||||
private Database db = new Database();
|
||||
|
||||
@Override
|
||||
public void start(Stage primaryStage) {
|
||||
try {
|
||||
|
||||
// BorderPane root = new BorderPane();
|
||||
FXMLLoader loader = new FXMLLoader(getClass().getResource("/TopTab.fxml"));
|
||||
Parent root = loader.load();
|
||||
|
||||
Scene scene = new Scene(root,600,440);
|
||||
scene.getStylesheets().add(getClass().getResource("/application.css").toExternalForm());
|
||||
|
||||
// obtain main controller
|
||||
TopTabView wc = (TopTabView) loader.getController();
|
||||
// make the database object visible to the controller
|
||||
wc.setDatabase(db);
|
||||
|
||||
primaryStage.setTitle("Movie Booking System");
|
||||
primaryStage.setScene(scene);
|
||||
primaryStage.show();
|
||||
|
||||
// opening database connection
|
||||
/* --- TODO: change xxx to your user name, yyy to your password --- */
|
||||
if(!db.openConnection("xxx", "yyy")) {
|
||||
Alert alert = new Alert(AlertType.ERROR);
|
||||
alert.setTitle("Database error");
|
||||
alert.setHeaderText(null);
|
||||
alert.setContentText("Could not connect to the database! Check console for details.");
|
||||
alert.showAndWait();
|
||||
}
|
||||
} catch(Exception e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
}
|
||||
|
||||
public void stop() {
|
||||
// close the database here
|
||||
db.closeConnection();
|
||||
try {
|
||||
super.stop();
|
||||
} catch (Exception e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
}
|
||||
}
|
64
src/main/java/gui/ReservationsTab.java
Normal file
64
src/main/java/gui/ReservationsTab.java
Normal file
|
@ -0,0 +1,64 @@
|
|||
package gui;
|
||||
|
||||
import java.util.Arrays;
|
||||
import java.util.List;
|
||||
|
||||
import datamodel.Reservation;
|
||||
import datamodel.Database;
|
||||
import javafx.fxml.FXML;
|
||||
import javafx.scene.control.TableColumn;
|
||||
import javafx.scene.control.TableView;
|
||||
import javafx.scene.control.cell.PropertyValueFactory;
|
||||
|
||||
public class ReservationsTab {
|
||||
@FXML private TableView<Reservation> tableReservations = new TableView<>();
|
||||
|
||||
private Database db;
|
||||
|
||||
public void setDatabase(Database db) {
|
||||
this.db = db;
|
||||
}
|
||||
|
||||
@SuppressWarnings("unchecked")
|
||||
public void initialize() {
|
||||
System.out.println("Initializing BookingListTab");
|
||||
|
||||
// Create Column ID
|
||||
TableColumn<Reservation, Integer> bookingIdColumn = new TableColumn<>("ID");
|
||||
bookingIdColumn.setPrefWidth(75);
|
||||
bookingIdColumn.setCellValueFactory(new PropertyValueFactory<Reservation, Integer>("bookingId"));
|
||||
|
||||
// Create Column MovieTitle
|
||||
TableColumn<Reservation, String> movieTitleColumn = new TableColumn<>("Movie Title");
|
||||
movieTitleColumn.setPrefWidth(150);
|
||||
movieTitleColumn.setCellValueFactory(new PropertyValueFactory<Reservation, String>("movieTitle"));
|
||||
|
||||
// Create Column Date
|
||||
TableColumn<Reservation, String> performanceDateColumn = new TableColumn<>("Date");
|
||||
performanceDateColumn.setPrefWidth(120);
|
||||
performanceDateColumn.setCellValueFactory(new PropertyValueFactory<Reservation, String>("performanceDate"));
|
||||
|
||||
// Create Column Theatre Name
|
||||
TableColumn<Reservation, String> theatreNameColumn = new TableColumn<>("Theatre Name");
|
||||
theatreNameColumn.setPrefWidth(150);
|
||||
theatreNameColumn.setCellValueFactory(new PropertyValueFactory<Reservation, String>("theatreName"));
|
||||
|
||||
//Insert all columns
|
||||
tableReservations.getColumns()
|
||||
.addAll(bookingIdColumn,
|
||||
movieTitleColumn,
|
||||
performanceDateColumn,
|
||||
theatreNameColumn);
|
||||
}
|
||||
|
||||
/**
|
||||
* Refresh the table view, by getting and replacing the tables content.
|
||||
*/
|
||||
public void updateList() {
|
||||
/* --- TODO: replace with own code using the database object instead --- */
|
||||
System.out.println("Update booking list called.");
|
||||
|
||||
List<Reservation> bookings = Arrays.asList(new Reservation(1, "Star Wars", "2019-12-30", "Bio Söder"));
|
||||
tableReservations.getItems().setAll(bookings);
|
||||
}
|
||||
}
|
40
src/main/java/gui/TopTabView.java
Executable file
40
src/main/java/gui/TopTabView.java
Executable file
|
@ -0,0 +1,40 @@
|
|||
package gui;
|
||||
|
||||
import javafx.scene.Parent;
|
||||
import javafx.scene.control.Tab;
|
||||
import datamodel.Database;
|
||||
import javafx.fxml.FXML;
|
||||
|
||||
public class TopTabView {
|
||||
@FXML private Parent aLoginTab;
|
||||
@FXML private LoginTab aLoginTabController;
|
||||
|
||||
@FXML private Parent aBookingTab;
|
||||
@FXML private BookingTab aBookingTabController;
|
||||
|
||||
@FXML private Tab reservationTab;
|
||||
@FXML private ReservationsTab aReservationTabController;
|
||||
|
||||
|
||||
public void initialize() {
|
||||
System.out.println("Initializing TopTabView");
|
||||
|
||||
// send the booking controller reference to the login controller
|
||||
// in order to pass data between the two
|
||||
aLoginTabController.setBookingTab(aBookingTabController);
|
||||
|
||||
// When selection is changed, update the list
|
||||
reservationTab.setOnSelectionChanged(e -> {
|
||||
if(reservationTab.isSelected()) {
|
||||
// Initiate an update
|
||||
aReservationTabController.updateList();
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
public void setDatabase(Database db) {
|
||||
aLoginTabController.setDatabase(db);
|
||||
aBookingTabController.setDatabase(db);
|
||||
aReservationTabController.setDatabase(db);
|
||||
}
|
||||
}
|
77
src/main/resources/application.css
Executable file
77
src/main/resources/application.css
Executable file
|
@ -0,0 +1,77 @@
|
|||
/*
|
||||
* Copyright (c) 2012 Oracle and/or its affiliates.
|
||||
* All rights reserved. Use is subject to license terms.
|
||||
*
|
||||
* This file is available and licensed under the following license:
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
* modification, are permitted provided that the following conditions
|
||||
* are met:
|
||||
*
|
||||
* - Redistributions of source code must retain the above copyright
|
||||
* notice, this list of conditions and the following disclaimer.
|
||||
* - Redistributions in binary form must reproduce the above copyright
|
||||
* notice, this list of conditions and the following disclaimer in
|
||||
* the documentation and/or other materials provided with the distribution.
|
||||
* - Neither the name of Oracle nor the names of its
|
||||
* contributors may be used to endorse or promote products derived
|
||||
* from this software without specific prior written permission.
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
||||
* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
|
||||
* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
|
||||
* A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
|
||||
* OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
|
||||
* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
|
||||
* LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
|
||||
* DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
|
||||
* THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
||||
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
|
||||
* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
*/
|
||||
|
||||
root {
|
||||
display: block;
|
||||
}
|
||||
|
||||
.root {
|
||||
-fx-background-image: url("background.jpg");
|
||||
}
|
||||
|
||||
.label {
|
||||
-fx-font-size: 12px;
|
||||
-fx-font-weight: bold;
|
||||
-fx-text-fill: #333333;
|
||||
-fx-effect: dropshadow( gaussian , rgba(255,255,255,0.5) , 0,0,0,1 );
|
||||
}
|
||||
|
||||
#welcome-text {
|
||||
-fx-font-size: 32px;
|
||||
-fx-font-family: "Arial Black";
|
||||
-fx-fill: #818181;
|
||||
-fx-effect: innershadow( three-pass-box , rgba(0,0,0,0.7) , 6, 0.0 , 0 , 2 );
|
||||
}
|
||||
|
||||
#actiontarget {
|
||||
-fx-fill: FIREBRICK;
|
||||
-fx-font-weight: bold;
|
||||
-fx-effect: dropshadow( gaussian , rgba(255,255,255,0.5) , 0,0,0,1 );
|
||||
}
|
||||
|
||||
#topContext {
|
||||
-fx-fill: BLUE;
|
||||
-fx-font-weight: bold;
|
||||
-fx-effect: dropshadow( gaussian , rgba(255,255,255,0.5) , 0,0,0,1 );
|
||||
}
|
||||
|
||||
.button {
|
||||
-fx-text-fill: white;
|
||||
-fx-font-family: "Arial Narrow";
|
||||
-fx-font-weight: bold;
|
||||
-fx-background-color: linear-gradient(#61a2b1, #2A5058);
|
||||
-fx-effect: dropshadow( three-pass-box , rgba(0,0,0,0.6) , 5, 0.0 , 0 , 1 );
|
||||
}
|
||||
|
||||
.button:hover {
|
||||
-fx-background-color: linear-gradient(#2A5058, #61a2b1);
|
||||
}
|
BIN
src/main/resources/background.jpg
Executable file
BIN
src/main/resources/background.jpg
Executable file
Binary file not shown.
After Width: | Height: | Size: 51 KiB |
95
src/main/resources/bookingTab.fxml
Executable file
95
src/main/resources/bookingTab.fxml
Executable file
|
@ -0,0 +1,95 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
|
||||
<?import javafx.scene.control.Button?>
|
||||
<?import javafx.scene.control.Label?>
|
||||
<?import javafx.scene.control.ListView?>
|
||||
<?import javafx.scene.control.SplitPane?>
|
||||
<?import javafx.scene.layout.VBox?>
|
||||
<?import javafx.scene.layout.AnchorPane?>
|
||||
<?import javafx.scene.layout.ColumnConstraints?>
|
||||
<?import javafx.scene.layout.GridPane?>
|
||||
<?import javafx.scene.layout.RowConstraints?>
|
||||
<?import javafx.scene.layout.BorderPane ?>
|
||||
<?import javafx.scene.text.*?>
|
||||
|
||||
<VBox xmlns:fx="http://javafx.com/fxml"
|
||||
fx:controller="gui.BookingTab">
|
||||
<children>
|
||||
<SplitPane dividerPositions="0.4" prefHeight="400.0"
|
||||
prefWidth="600.0" styleClass="root" VBox.vgrow="ALWAYS" >
|
||||
<items>
|
||||
<GridPane hgap="10" vgap="10">
|
||||
<columnConstraints>
|
||||
<ColumnConstraints hgrow="ALWAYS"
|
||||
minWidth="10.0" prefWidth="120.0" />
|
||||
<ColumnConstraints hgrow="ALWAYS"
|
||||
minWidth="10.0" prefWidth="110.0" />
|
||||
</columnConstraints>
|
||||
<rowConstraints>
|
||||
<RowConstraints minHeight="10.0"
|
||||
prefHeight="30.0" vgrow="SOMETIMES" />
|
||||
<RowConstraints minHeight="50" prefHeight="300"
|
||||
vgrow="ALWAYS" />
|
||||
</rowConstraints>
|
||||
<children>
|
||||
<Label text="Movie" GridPane.rowIndex="0"
|
||||
GridPane.columnIndex="0" />
|
||||
<Label text="Date" GridPane.rowIndex="0"
|
||||
GridPane.columnIndex="1" />
|
||||
<ListView fx:id="moviesList" GridPane.rowIndex="1"
|
||||
GridPane.columnIndex="0" />
|
||||
<ListView fx:id="datesList" GridPane.rowIndex="1"
|
||||
GridPane.columnIndex="1" />
|
||||
</children>
|
||||
</GridPane>
|
||||
<AnchorPane minHeight="0.0" minWidth="0.0"
|
||||
prefWidth="360.0">
|
||||
<children>
|
||||
<Button fx:id="bookTicket" mnemonicParsing="false"
|
||||
text="Book Ticket" AnchorPane.bottomAnchor="60.0"
|
||||
AnchorPane.leftAnchor="50.0" AnchorPane.rightAnchor="50.0" />
|
||||
<Text fx:id="topContext" text="Not logged in!"
|
||||
AnchorPane.leftAnchor="5.0" AnchorPane.topAnchor="5.0" />
|
||||
<GridPane AnchorPane.leftAnchor="5.0"
|
||||
AnchorPane.rightAnchor="5.0" AnchorPane.topAnchor="30.0">
|
||||
<columnConstraints>
|
||||
<ColumnConstraints hgrow="SOMETIMES"
|
||||
minWidth="10.0" prefWidth="100.0" />
|
||||
<ColumnConstraints hgrow="SOMETIMES"
|
||||
minWidth="10.0" prefWidth="100.0" />
|
||||
</columnConstraints>
|
||||
<rowConstraints>
|
||||
<RowConstraints minHeight="10.0"
|
||||
prefHeight="30.0" vgrow="SOMETIMES" />
|
||||
<RowConstraints minHeight="10.0"
|
||||
prefHeight="30.0" vgrow="SOMETIMES" />
|
||||
<RowConstraints minHeight="10.0"
|
||||
prefHeight="30.0" vgrow="SOMETIMES" />
|
||||
<RowConstraints minHeight="10.0"
|
||||
prefHeight="30.0" vgrow="SOMETIMES" />
|
||||
</rowConstraints>
|
||||
<children>
|
||||
<Label text="Movie" />
|
||||
<Label text="Date" GridPane.rowIndex="1" />
|
||||
<Label text="Plays at" GridPane.rowIndex="2" />
|
||||
<Label text="Free seats" GridPane.rowIndex="3" />
|
||||
<Label fx:id="showTitle" text="Label"
|
||||
GridPane.columnIndex="1" />
|
||||
<Label fx:id="showDate" text="Label"
|
||||
GridPane.columnIndex="1" GridPane.rowIndex="1" />
|
||||
<Label fx:id="showVenue" text="Label"
|
||||
GridPane.columnIndex="1" GridPane.rowIndex="2" />
|
||||
<Label fx:id="showFreeSeats" text="Label"
|
||||
GridPane.columnIndex="1" GridPane.rowIndex="3" />
|
||||
</children>
|
||||
</GridPane>
|
||||
<Text fx:id="bookMsg" layoutX="83.0" layoutY="368.0"
|
||||
text="Label" textAlignment="CENTER"
|
||||
AnchorPane.bottomAnchor="10.0" AnchorPane.leftAnchor="10.0"
|
||||
AnchorPane.rightAnchor="10.0" />
|
||||
</children>
|
||||
</AnchorPane>
|
||||
</items>
|
||||
</SplitPane>
|
||||
</children>
|
||||
</VBox>
|
34
src/main/resources/loginTab.fxml
Executable file
34
src/main/resources/loginTab.fxml
Executable file
|
@ -0,0 +1,34 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
|
||||
<?import java.net.*?>
|
||||
<?import javafx.geometry.*?>
|
||||
<?import javafx.scene.control.*?>
|
||||
<?import javafx.scene.layout.*?>
|
||||
<?import javafx.scene.text.*?>
|
||||
|
||||
|
||||
<GridPane fx:controller="gui.LoginTab"
|
||||
xmlns:fx="http://javafx.com/fxml" alignment="center" hgap="10" vgap="10"
|
||||
styleClass="root">
|
||||
<padding><Insets top="25" right="25" bottom="25" left="25"/></padding>
|
||||
|
||||
<Text id="welcome-text" text="Welcome"
|
||||
GridPane.columnIndex="0" GridPane.rowIndex="0"
|
||||
GridPane.columnSpan="2"/>
|
||||
|
||||
<Label text="User Name:"
|
||||
GridPane.columnIndex="0" GridPane.rowIndex="1"/>
|
||||
|
||||
<TextField fx:id="username"
|
||||
GridPane.columnIndex="1" GridPane.rowIndex="1"/>
|
||||
|
||||
<HBox spacing="10" alignment="bottom_right"
|
||||
GridPane.columnIndex="1" GridPane.rowIndex="4">
|
||||
<Button text="Sign In"
|
||||
onAction="#handleSubmitButtonAction"/>
|
||||
</HBox>
|
||||
|
||||
<Text fx:id="actiontarget"
|
||||
GridPane.columnIndex="1" GridPane.rowIndex="6"/>
|
||||
|
||||
</GridPane>
|
17
src/main/resources/reservationsTab.fxml
Normal file
17
src/main/resources/reservationsTab.fxml
Normal file
|
@ -0,0 +1,17 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
|
||||
<?import javafx.scene.control.TableColumn?>
|
||||
<?import javafx.scene.control.TableView?>
|
||||
<?import javafx.scene.layout.BorderPane?>
|
||||
|
||||
<BorderPane xmlns:fx="http://javafx.com/fxml/1" xmlns="http://javafx.com/javafx/11.0.1" fx:controller="gui.ReservationsTab">
|
||||
<center>
|
||||
|
||||
</center>
|
||||
<center>
|
||||
<TableView fx:id="tableReservations" prefHeight="400.0" prefWidth="600.0" BorderPane.alignment="CENTER">
|
||||
<columns>
|
||||
</columns>
|
||||
</TableView>
|
||||
</center>
|
||||
</BorderPane>
|
23
src/main/resources/topTab.fxml
Executable file
23
src/main/resources/topTab.fxml
Executable file
|
@ -0,0 +1,23 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
|
||||
<?import javafx.scene.layout.*?>
|
||||
<?import javafx.scene.control.*?>
|
||||
|
||||
<BorderPane fx:controller="gui.TopTabView" xmlns:fx="http://javafx.com/fxml/1" styleClass="root">
|
||||
<center>
|
||||
<TabPane tabClosingPolicy="UNAVAILABLE">
|
||||
<tabs>
|
||||
<Tab text="Login">
|
||||
<fx:include fx:id="aLoginTab" source="loginTab.fxml"/>
|
||||
</Tab>
|
||||
<Tab text="Book">
|
||||
<fx:include fx:id="aBookingTab" source="bookingTab.fxml"/>
|
||||
</Tab>
|
||||
<Tab text="Reservations" fx:id="reservationTab">
|
||||
<fx:include fx:id="aReservationTab" source="reservationsTab.fxml"/>
|
||||
</Tab>
|
||||
</tabs>
|
||||
</TabPane>
|
||||
</center>
|
||||
</BorderPane>
|
||||
|
Loading…
Reference in a new issue