Index: .gitignore
===================================================================
--- .gitignore	(revision f1d066c061cda95871358a60f749ea06909f629d)
+++ .gitignore	(revision f1d066c061cda95871358a60f749ea06909f629d)
@@ -0,0 +1,4 @@
+/build/
+/target/
+.*
+!/.gitignore
Index: eprms-model/.gitignore
===================================================================
--- eprms-model/.gitignore	(revision f1d066c061cda95871358a60f749ea06909f629d)
+++ eprms-model/.gitignore	(revision f1d066c061cda95871358a60f749ea06909f629d)
@@ -0,0 +1,4 @@
+/build/
+/target/
+.*
+!/.gitignore
Index: eprms-model/pom.xml
===================================================================
--- eprms-model/pom.xml	(revision f1d066c061cda95871358a60f749ea06909f629d)
+++ eprms-model/pom.xml	(revision f1d066c061cda95871358a60f749ea06909f629d)
@@ -0,0 +1,46 @@
+<project xmlns="http://maven.apache.org/POM/4.0.0"
+	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+	xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
+	<modelVersion>4.0.0</modelVersion>
+
+	<groupId>info.ajanovski.eprms</groupId>
+	<artifactId>model</artifactId>
+	<version>0.0.1-SNAPSHOT</version>
+
+	<name>EPRMS - Educational Project and Resource Management System - Model</name>
+
+	<packaging>jar</packaging>
+
+	<developers>
+		<developer>
+			<id>vangel.ajanovski</id>
+			<name>Vangel V. Ajanovski</name>
+			<url>https://ajanovski.info</url>
+			<timezone>Europe/Skopje</timezone>
+			<roles>
+				<role>Project Lead</role>
+				<role>Main Developer</role>
+			</roles>
+		</developer>
+	</developers>
+
+	<properties>
+		<maven.compiler.source>15</maven.compiler.source>
+		<maven.compiler.target>15</maven.compiler.target>
+		<java.version>15</java.version>
+
+		<postgresql-version>42.2.19</postgresql-version>
+		<cas-client-version>3.6.2</cas-client-version>
+
+		<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
+		<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
+	</properties>
+
+	<dependencies>
+		<dependency>
+			<groupId>javax.persistence</groupId>
+			<artifactId>javax.persistence-api</artifactId>
+			<version>2.2</version>
+		</dependency>
+	</dependencies>
+</project>
Index: eprms-model/src/main/java/info/ajanovski/eprms/model/entities/Activity.java
===================================================================
--- eprms-model/src/main/java/info/ajanovski/eprms/model/entities/Activity.java	(revision f1d066c061cda95871358a60f749ea06909f629d)
+++ eprms-model/src/main/java/info/ajanovski/eprms/model/entities/Activity.java	(revision f1d066c061cda95871358a60f749ea06909f629d)
@@ -0,0 +1,100 @@
+/*******************************************************************************
+ * Copyright (C) 2021 Vangel V. Ajanovski
+ *     
+ * This file is part of the EPRMS - Educational Project and Resource Management 
+ * System (hereinafter: EPRMS).
+ *     
+ * EPRMS is free software: you can redistribute it and/or modify it under the 
+ * terms of the GNU General Public License as published by the Free Software 
+ * Foundation, either version 3 of the License, or (at your option) any later 
+ * version.
+ *     
+ * EPRMS is distributed in the hope that it will be useful, but WITHOUT ANY 
+ * WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS 
+ * FOR A PARTICULAR PURPOSE.  See the GNU General Public License for more 
+ * details.
+ *     
+ * You should have received a copy of the GNU General Public License along 
+ * with EPRMS.  If not, see <https://www.gnu.org/licenses/>.
+ * 
+ ******************************************************************************/
+
+package info.ajanovski.eprms.model.entities;
+
+import java.util.*;
+import javax.persistence.*;
+
+/*
+*/
+@Entity
+@Table (schema="epm_main", name="activity")
+public class Activity implements java.io.Serializable {
+	private long activityId;
+	private String title;
+	private String description;
+	private Activity parentActivity;
+	private ActivityType activityType;
+	private Project project;
+
+
+	@Id
+	@GeneratedValue(strategy = GenerationType.IDENTITY)
+
+	@Column(name = "activity_id", unique = true, nullable = false)
+	public long getActivityId() {
+		return this.activityId;
+	}
+
+	public void setActivityId(long activityId) {
+		this.activityId=activityId;
+	}
+
+	@Column(name = "title")
+	public String getTitle() {
+		return this.title;
+	}
+
+	public void setTitle(String title) {
+		this.title=title;
+	}
+
+	@Column(name = "description")
+	public String getDescription() {
+		return this.description;
+	}
+
+	public void setDescription(String description) {
+		this.description=description;
+	}
+
+	@ManyToOne(fetch = FetchType.LAZY)
+	@JoinColumn(name = "parent_activity_id", nullable = false, foreignKey = @ForeignKey(name = "fk_activity_activity"))
+	public Activity getParentActivity() {
+		return this.parentActivity;
+	}
+
+	public void setParentActivity(Activity parentActivity) {
+		this.parentActivity=parentActivity;
+	}
+
+	@ManyToOne(fetch = FetchType.LAZY)
+	@JoinColumn(name = "activity_type_id", nullable = false, foreignKey = @ForeignKey(name = "fk_activity_activity_type"))
+	public ActivityType getActivityType() {
+		return this.activityType;
+	}
+
+	public void setActivityType(ActivityType activityType) {
+		this.activityType=activityType;
+	}
+
+	@ManyToOne(fetch = FetchType.LAZY)
+	@JoinColumn(name = "project_id", nullable = false, foreignKey = @ForeignKey(name = "fk_activity_Project"))
+	public Project getProject() {
+		return this.project;
+	}
+
+	public void setProject(Project project) {
+		this.project=project;
+	}
+
+}
Index: eprms-model/src/main/java/info/ajanovski/eprms/model/entities/ActivityType.java
===================================================================
--- eprms-model/src/main/java/info/ajanovski/eprms/model/entities/ActivityType.java	(revision f1d066c061cda95871358a60f749ea06909f629d)
+++ eprms-model/src/main/java/info/ajanovski/eprms/model/entities/ActivityType.java	(revision f1d066c061cda95871358a60f749ea06909f629d)
@@ -0,0 +1,67 @@
+/*******************************************************************************
+ * Copyright (C) 2021 Vangel V. Ajanovski
+ *     
+ * This file is part of the EPRMS - Educational Project and Resource Management 
+ * System (hereinafter: EPRMS).
+ *     
+ * EPRMS is free software: you can redistribute it and/or modify it under the 
+ * terms of the GNU General Public License as published by the Free Software 
+ * Foundation, either version 3 of the License, or (at your option) any later 
+ * version.
+ *     
+ * EPRMS is distributed in the hope that it will be useful, but WITHOUT ANY 
+ * WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS 
+ * FOR A PARTICULAR PURPOSE.  See the GNU General Public License for more 
+ * details.
+ *     
+ * You should have received a copy of the GNU General Public License along 
+ * with EPRMS.  If not, see <https://www.gnu.org/licenses/>.
+ * 
+ ******************************************************************************/
+
+package info.ajanovski.eprms.model.entities;
+
+import java.util.*;
+import javax.persistence.*;
+
+/*
+*/
+@Entity
+@Table (schema="epm_main", name="activity_type")
+public class ActivityType implements java.io.Serializable {
+	private long activityTypeId;
+	private String title;
+	private String description;
+
+
+	@Id
+	@GeneratedValue(strategy = GenerationType.IDENTITY)
+
+	@Column(name = "activity_type_id", unique = true, nullable = false)
+	public long getActivityTypeId() {
+		return this.activityTypeId;
+	}
+
+	public void setActivityTypeId(long activityTypeId) {
+		this.activityTypeId=activityTypeId;
+	}
+
+	@Column(name = "title")
+	public String getTitle() {
+		return this.title;
+	}
+
+	public void setTitle(String title) {
+		this.title=title;
+	}
+
+	@Column(name = "description")
+	public String getDescription() {
+		return this.description;
+	}
+
+	public void setDescription(String description) {
+		this.description=description;
+	}
+
+}
Index: eprms-model/src/main/java/info/ajanovski/eprms/model/entities/Course.java
===================================================================
--- eprms-model/src/main/java/info/ajanovski/eprms/model/entities/Course.java	(revision f1d066c061cda95871358a60f749ea06909f629d)
+++ eprms-model/src/main/java/info/ajanovski/eprms/model/entities/Course.java	(revision f1d066c061cda95871358a60f749ea06909f629d)
@@ -0,0 +1,57 @@
+/*******************************************************************************
+ * Copyright (C) 2021 Vangel V. Ajanovski
+ *     
+ * This file is part of the EPRMS - Educational Project and Resource Management 
+ * System (hereinafter: EPRMS).
+ *     
+ * EPRMS is free software: you can redistribute it and/or modify it under the 
+ * terms of the GNU General Public License as published by the Free Software 
+ * Foundation, either version 3 of the License, or (at your option) any later 
+ * version.
+ *     
+ * EPRMS is distributed in the hope that it will be useful, but WITHOUT ANY 
+ * WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS 
+ * FOR A PARTICULAR PURPOSE.  See the GNU General Public License for more 
+ * details.
+ *     
+ * You should have received a copy of the GNU General Public License along 
+ * with EPRMS.  If not, see <https://www.gnu.org/licenses/>.
+ * 
+ ******************************************************************************/
+
+package info.ajanovski.eprms.model.entities;
+
+import java.util.*;
+import javax.persistence.*;
+
+/*
+*/
+@Entity
+@Table (schema="epm_main", name="course")
+public class Course implements java.io.Serializable {
+	private long courseId;
+	private String title;
+
+
+	@Id
+	@GeneratedValue(strategy = GenerationType.IDENTITY)
+
+	@Column(name = "course_id", unique = true, nullable = false)
+	public long getCourseId() {
+		return this.courseId;
+	}
+
+	public void setCourseId(long courseId) {
+		this.courseId=courseId;
+	}
+
+	@Column(name = "title", unique = true, nullable = false)
+	public String getTitle() {
+		return this.title;
+	}
+
+	public void setTitle(String title) {
+		this.title=title;
+	}
+
+}
Index: eprms-model/src/main/java/info/ajanovski/eprms/model/entities/CourseProject.java
===================================================================
--- eprms-model/src/main/java/info/ajanovski/eprms/model/entities/CourseProject.java	(revision f1d066c061cda95871358a60f749ea06909f629d)
+++ eprms-model/src/main/java/info/ajanovski/eprms/model/entities/CourseProject.java	(revision f1d066c061cda95871358a60f749ea06909f629d)
@@ -0,0 +1,69 @@
+/*******************************************************************************
+ * Copyright (C) 2021 Vangel V. Ajanovski
+ *     
+ * This file is part of the EPRMS - Educational Project and Resource Management 
+ * System (hereinafter: EPRMS).
+ *     
+ * EPRMS is free software: you can redistribute it and/or modify it under the 
+ * terms of the GNU General Public License as published by the Free Software 
+ * Foundation, either version 3 of the License, or (at your option) any later 
+ * version.
+ *     
+ * EPRMS is distributed in the hope that it will be useful, but WITHOUT ANY 
+ * WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS 
+ * FOR A PARTICULAR PURPOSE.  See the GNU General Public License for more 
+ * details.
+ *     
+ * You should have received a copy of the GNU General Public License along 
+ * with EPRMS.  If not, see <https://www.gnu.org/licenses/>.
+ * 
+ ******************************************************************************/
+
+package info.ajanovski.eprms.model.entities;
+
+import java.util.*;
+import javax.persistence.*;
+
+/*
+*/
+@Entity
+@Table (schema="epm_main", name="course_project")
+public class CourseProject implements java.io.Serializable {
+	private long courseProjectId;
+	private Course course;
+	private Project project;
+
+
+	@Id
+	@GeneratedValue(strategy = GenerationType.IDENTITY)
+
+	@Column(name = "course_project_id", unique = true, nullable = false)
+	public long getCourseProjectId() {
+		return this.courseProjectId;
+	}
+
+	public void setCourseProjectId(long courseProjectId) {
+		this.courseProjectId=courseProjectId;
+	}
+
+	@ManyToOne(fetch = FetchType.LAZY)
+	@JoinColumn(name = "course_id", nullable = false, foreignKey = @ForeignKey(name = "fk_course_project_course"))
+	public Course getCourse() {
+		return this.course;
+	}
+
+	public void setCourse(Course course) {
+		this.course=course;
+	}
+
+	@ManyToOne(fetch = FetchType.LAZY)
+	@JoinColumn(name = "project_id", nullable = false, foreignKey = @ForeignKey(name = "fk_course_project_Project"))
+	public Project getProject() {
+		return this.project;
+	}
+
+	public void setProject(Project project) {
+		this.project=project;
+	}
+
+}
Index: eprms-model/src/main/java/info/ajanovski/eprms/model/entities/Database.java
===================================================================
--- eprms-model/src/main/java/info/ajanovski/eprms/model/entities/Database.java	(revision f1d066c061cda95871358a60f749ea06909f629d)
+++ eprms-model/src/main/java/info/ajanovski/eprms/model/entities/Database.java	(revision f1d066c061cda95871358a60f749ea06909f629d)
@@ -0,0 +1,157 @@
+/*******************************************************************************
+ * Copyright (C) 2021 Vangel V. Ajanovski
+ *     
+ * This file is part of the EPRMS - Educational Project and Resource Management 
+ * System (hereinafter: EPRMS).
+ *     
+ * EPRMS is free software: you can redistribute it and/or modify it under the 
+ * terms of the GNU General Public License as published by the Free Software 
+ * Foundation, either version 3 of the License, or (at your option) any later 
+ * version.
+ *     
+ * EPRMS is distributed in the hope that it will be useful, but WITHOUT ANY 
+ * WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS 
+ * FOR A PARTICULAR PURPOSE.  See the GNU General Public License for more 
+ * details.
+ *     
+ * You should have received a copy of the GNU General Public License along 
+ * with EPRMS.  If not, see <https://www.gnu.org/licenses/>.
+ * 
+ ******************************************************************************/
+
+package info.ajanovski.eprms.model.entities;
+
+import java.util.*;
+import javax.persistence.*;
+
+/*
+*/
+@Entity
+@Table(schema = "", name = "database")
+public class Database implements java.io.Serializable {
+	private long databaseId;
+	private String type;
+	private String server;
+	private String name;
+	private String owner;
+	private String password;
+	private String tunnelUser;
+	private String tunnelPassword;
+	private String port;
+	private String tunnelServer;
+	private Project project;
+	private Date dateCreated;
+
+	@Id
+	@GeneratedValue(strategy = GenerationType.IDENTITY)
+
+	@Column(name = "database_id", unique = true, nullable = false)
+	public long getDatabaseId() {
+		return this.databaseId;
+	}
+
+	public void setDatabaseId(long databaseId) {
+		this.databaseId = databaseId;
+	}
+
+	@Column(name = "type")
+	public String getType() {
+		return this.type;
+	}
+
+	public void setType(String type) {
+		this.type = type;
+	}
+
+	@Column(name = "server")
+	public String getServer() {
+		return this.server;
+	}
+
+	public void setServer(String server) {
+		this.server = server;
+	}
+
+	@Column(name = "name")
+	public String getName() {
+		return this.name;
+	}
+
+	public void setName(String name) {
+		this.name = name;
+	}
+
+	@Column(name = "owner")
+	public String getOwner() {
+		return this.owner;
+	}
+
+	public void setOwner(String owner) {
+		this.owner = owner;
+	}
+
+	@Column(name = "password")
+	public String getPassword() {
+		return this.password;
+	}
+
+	public void setPassword(String password) {
+		this.password = password;
+	}
+
+	@Column(name = "tunnel_user")
+	public String getTunnelUser() {
+		return this.tunnelUser;
+	}
+
+	public void setTunnelUser(String tunnelUser) {
+		this.tunnelUser = tunnelUser;
+	}
+
+	@Column(name = "tunnel_password")
+	public String getTunnelPassword() {
+		return this.tunnelPassword;
+	}
+
+	public void setTunnelPassword(String tunnelPassword) {
+		this.tunnelPassword = tunnelPassword;
+	}
+
+	@Column(name = "port")
+	public String getPort() {
+		return this.port;
+	}
+
+	public void setPort(String port) {
+		this.port = port;
+	}
+
+	@Column(name = "tunnel_server")
+	public String getTunnelServer() {
+		return this.tunnelServer;
+	}
+
+	public void setTunnelServer(String tunnelServer) {
+		this.tunnelServer = tunnelServer;
+	}
+
+	@Column(name = "date_created")
+	public Date getDateCreated() {
+		return this.dateCreated;
+	}
+
+	public void setDateCreated(Date created) {
+		this.dateCreated = created;
+	}
+
+	@ManyToOne(fetch = FetchType.LAZY)
+	@JoinColumn(name = "project_id", nullable = false, foreignKey = @ForeignKey(name = "fk_database_Project"))
+	public Project getProject() {
+		return this.project;
+	}
+
+	public void setProject(Project project) {
+		this.project = project;
+	}
+
+}
Index: eprms-model/src/main/java/info/ajanovski/eprms/model/entities/Person.java
===================================================================
--- eprms-model/src/main/java/info/ajanovski/eprms/model/entities/Person.java	(revision f1d066c061cda95871358a60f749ea06909f629d)
+++ eprms-model/src/main/java/info/ajanovski/eprms/model/entities/Person.java	(revision f1d066c061cda95871358a60f749ea06909f629d)
@@ -0,0 +1,96 @@
+/*******************************************************************************
+ * Copyright (C) 2021 Vangel V. Ajanovski
+ *     
+ * This file is part of the EPRMS - Educational Project and Resource Management 
+ * System (hereinafter: EPRMS).
+ *     
+ * EPRMS is free software: you can redistribute it and/or modify it under the 
+ * terms of the GNU General Public License as published by the Free Software 
+ * Foundation, either version 3 of the License, or (at your option) any later 
+ * version.
+ *     
+ * EPRMS is distributed in the hope that it will be useful, but WITHOUT ANY 
+ * WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS 
+ * FOR A PARTICULAR PURPOSE.  See the GNU General Public License for more 
+ * details.
+ *     
+ * You should have received a copy of the GNU General Public License along 
+ * with EPRMS.  If not, see <https://www.gnu.org/licenses/>.
+ * 
+ ******************************************************************************/
+
+package info.ajanovski.eprms.model.entities;
+
+import java.util.*;
+import javax.persistence.*;
+
+/*
+*/
+@Entity
+@Table(schema = "epm_main", name = "person")
+public class Person implements java.io.Serializable {
+	private long personId;
+	private String firstName;
+	private String lastName;
+	private String email;
+	private String userName;
+	private String authString;
+
+	@Id
+	@GeneratedValue(strategy = GenerationType.IDENTITY)
+
+	@Column(name = "person_id", unique = true, nullable = false)
+	public long getPersonId() {
+		return this.personId;
+	}
+
+	public void setPersonId(long personId) {
+		this.personId = personId;
+	}
+
+	@Column(name = "first_name")
+	public String getFirstName() {
+		return this.firstName;
+	}
+
+	public void setFirstName(String firstName) {
+		this.firstName = firstName;
+	}
+
+	@Column(name = "last_name")
+	public String getLastName() {
+		return this.lastName;
+	}
+
+	public void setLastName(String lastName) {
+		this.lastName = lastName;
+	}
+
+	@Column(name = "email")
+	public String getEmail() {
+		return this.email;
+	}
+
+	public void setEmail(String email) {
+		this.email = email;
+	}
+
+	@Column(name = "user_name")
+	public String getUserName() {
+		return this.userName;
+	}
+
+	public void setUserName(String userName) {
+		this.userName = userName;
+	}
+
+	@Column(name = "auth_string")
+	public String getAuthString() {
+		return this.authString;
+	}
+
+	public void setAuthString(String authString) {
+		this.authString = authString;
+	}
+
+}
Index: eprms-model/src/main/java/info/ajanovski/eprms/model/entities/PersonRole.java
===================================================================
--- eprms-model/src/main/java/info/ajanovski/eprms/model/entities/PersonRole.java	(revision f1d066c061cda95871358a60f749ea06909f629d)
+++ eprms-model/src/main/java/info/ajanovski/eprms/model/entities/PersonRole.java	(revision f1d066c061cda95871358a60f749ea06909f629d)
@@ -0,0 +1,69 @@
+/*******************************************************************************
+ * Copyright (C) 2021 Vangel V. Ajanovski
+ *     
+ * This file is part of the EPRMS - Educational Project and Resource Management 
+ * System (hereinafter: EPRMS).
+ *     
+ * EPRMS is free software: you can redistribute it and/or modify it under the 
+ * terms of the GNU General Public License as published by the Free Software 
+ * Foundation, either version 3 of the License, or (at your option) any later 
+ * version.
+ *     
+ * EPRMS is distributed in the hope that it will be useful, but WITHOUT ANY 
+ * WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS 
+ * FOR A PARTICULAR PURPOSE.  See the GNU General Public License for more 
+ * details.
+ *     
+ * You should have received a copy of the GNU General Public License along 
+ * with EPRMS.  If not, see <https://www.gnu.org/licenses/>.
+ * 
+ ******************************************************************************/
+
+package info.ajanovski.eprms.model.entities;
+
+import java.util.*;
+import javax.persistence.*;
+
+/*
+*/
+@Entity
+@Table (schema="epm_util", name="person_role")
+public class PersonRole implements java.io.Serializable {
+	private long personRoleId;
+	private Person person;
+	private Role role;
+
+
+	@Id
+	@GeneratedValue(strategy = GenerationType.IDENTITY)
+
+	@Column(name = "person_role_id", unique = true, nullable = false)
+	public long getPersonRoleId() {
+		return this.personRoleId;
+	}
+
+	public void setPersonRoleId(long personRoleId) {
+		this.personRoleId=personRoleId;
+	}
+
+	@ManyToOne(fetch = FetchType.LAZY)
+	@JoinColumn(name = "person_id", nullable = false, foreignKey = @ForeignKey(name = "fk_person_role_person"))
+	public Person getPerson() {
+		return this.person;
+	}
+
+	public void setPerson(Person person) {
+		this.person=person;
+	}
+
+	@ManyToOne(fetch = FetchType.LAZY)
+	@JoinColumn(name = "role_id", nullable = false, foreignKey = @ForeignKey(name = "fk_person_role_role"))
+	public Role getRole() {
+		return this.role;
+	}
+
+	public void setRole(Role role) {
+		this.role=role;
+	}
+
+}
Index: eprms-model/src/main/java/info/ajanovski/eprms/model/entities/Project.java
===================================================================
--- eprms-model/src/main/java/info/ajanovski/eprms/model/entities/Project.java	(revision f1d066c061cda95871358a60f749ea06909f629d)
+++ eprms-model/src/main/java/info/ajanovski/eprms/model/entities/Project.java	(revision f1d066c061cda95871358a60f749ea06909f629d)
@@ -0,0 +1,107 @@
+/*******************************************************************************
+ * Copyright (C) 2021 Vangel V. Ajanovski
+ *     
+ * This file is part of the EPRMS - Educational Project and Resource Management 
+ * System (hereinafter: EPRMS).
+ *     
+ * EPRMS is free software: you can redistribute it and/or modify it under the 
+ * terms of the GNU General Public License as published by the Free Software 
+ * Foundation, either version 3 of the License, or (at your option) any later 
+ * version.
+ *     
+ * EPRMS is distributed in the hope that it will be useful, but WITHOUT ANY 
+ * WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS 
+ * FOR A PARTICULAR PURPOSE.  See the GNU General Public License for more 
+ * details.
+ *     
+ * You should have received a copy of the GNU General Public License along 
+ * with EPRMS.  If not, see <https://www.gnu.org/licenses/>.
+ * 
+ ******************************************************************************/
+
+package info.ajanovski.eprms.model.entities;
+
+import java.util.*;
+import javax.persistence.*;
+
+/*
+*/
+@Entity
+@Table (schema="epm_main", name="Project")
+public class Project implements java.io.Serializable {
+	private long projectId;
+	private String title;
+	private String description;
+	private List<Responsibility> responsibilities = new ArrayList<Responsibility>();
+	private List<Repository> repositories = new ArrayList<Repository>();
+	private List<Database> databases = new ArrayList<Database>();
+	private List<Activity> activities = new ArrayList<Activity>();
+
+
+	@Id
+	@GeneratedValue(strategy = GenerationType.IDENTITY)
+
+	@Column(name = "project_id", unique = true, nullable = false)
+	public long getProjectId() {
+		return this.projectId;
+	}
+
+	public void setProjectId(long projectId) {
+		this.projectId=projectId;
+	}
+
+	@Column(name = "title", unique = true, nullable = false)
+	public String getTitle() {
+		return this.title;
+	}
+
+	public void setTitle(String title) {
+		this.title=title;
+	}
+
+	@Column(name = "description")
+	public String getDescription() {
+		return this.description;
+	}
+
+	public void setDescription(String description) {
+		this.description=description;
+	}
+
+	@OneToMany(fetch = FetchType.LAZY, mappedBy = "project")
+	public List<Responsibility> getResponsibilities() {
+		return this.responsibilities;
+	}
+
+	public void setResponsibilities(List<Responsibility> responsibilities) {
+		this.responsibilities=responsibilities;
+	}
+
+	@OneToMany(fetch = FetchType.LAZY, mappedBy = "project")
+	public List<Repository> getRepositories() {
+		return this.repositories;
+	}
+
+	public void setRepositories(List<Repository> repositories) {
+		this.repositories=repositories;
+	}
+
+	@OneToMany(fetch = FetchType.LAZY, mappedBy = "project")
+	public List<Database> getDatabases() {
+		return this.databases;
+	}
+
+	public void setDatabases(List<Database> databases) {
+		this.databases=databases;
+	}
+
+	@OneToMany(fetch = FetchType.LAZY, mappedBy = "project")
+	public List<Activity> getActivities() {
+		return this.activities;
+	}
+
+	public void setActivities(List<Activity> activities) {
+		this.activities=activities;
+	}
+
+}
Index: eprms-model/src/main/java/info/ajanovski/eprms/model/entities/Repository.java
===================================================================
--- eprms-model/src/main/java/info/ajanovski/eprms/model/entities/Repository.java	(revision f1d066c061cda95871358a60f749ea06909f629d)
+++ eprms-model/src/main/java/info/ajanovski/eprms/model/entities/Repository.java	(revision f1d066c061cda95871358a60f749ea06909f629d)
@@ -0,0 +1,119 @@
+/*******************************************************************************
+ * Copyright (C) 2021 Vangel V. Ajanovski
+ *     
+ * This file is part of the EPRMS - Educational Project and Resource Management 
+ * System (hereinafter: EPRMS).
+ *     
+ * EPRMS is free software: you can redistribute it and/or modify it under the 
+ * terms of the GNU General Public License as published by the Free Software 
+ * Foundation, either version 3 of the License, or (at your option) any later 
+ * version.
+ *     
+ * EPRMS is distributed in the hope that it will be useful, but WITHOUT ANY 
+ * WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS 
+ * FOR A PARTICULAR PURPOSE.  See the GNU General Public License for more 
+ * details.
+ *     
+ * You should have received a copy of the GNU General Public License along 
+ * with EPRMS.  If not, see <https://www.gnu.org/licenses/>.
+ * 
+ ******************************************************************************/
+
+package info.ajanovski.eprms.model.entities;
+
+import java.util.*;
+import javax.persistence.*;
+
+/*
+*/
+@Entity
+@Table(schema = "epm_main", name = "repository")
+public class Repository implements java.io.Serializable {
+	private long repositoryId;
+	private String title;
+	private String url;
+	private Date dateCreated;
+	private String type;
+	private Person person;
+	private Team team;
+	private Project project;
+
+	@Id
+	@GeneratedValue(strategy = GenerationType.IDENTITY)
+
+	@Column(name = "repository_id", unique = true, nullable = false)
+	public long getRepositoryId() {
+		return this.repositoryId;
+	}
+
+	public void setRepositoryId(long repositoryId) {
+		this.repositoryId = repositoryId;
+	}
+
+	@Column(name = "title")
+	public String getTitle() {
+		return this.title;
+	}
+
+	public void setTitle(String title) {
+		this.title = title;
+	}
+
+	@Column(name = "url")
+	public String getUrl() {
+		return this.url;
+	}
+
+	public void setUrl(String url) {
+		this.url = url;
+	}
+
+	@Column(name = "type")
+	public String getType() {
+		return this.type;
+	}
+
+	public void setType(String type) {
+		this.type = type;
+	}
+
+	@Column(name = "date_created")
+	public Date getDateCreated() {
+		return this.dateCreated;
+	}
+
+	public void setDateCreated(Date created) {
+		this.dateCreated = created;
+	}
+
+	@ManyToOne(fetch = FetchType.LAZY)
+	@JoinColumn(name = "person_id", nullable = true, foreignKey = @ForeignKey(name = "fk_repository_person"))
+	public Person getPerson() {
+		return this.person;
+	}
+
+	public void setPerson(Person person) {
+		this.person = person;
+	}
+
+	@ManyToOne(fetch = FetchType.LAZY)
+	@JoinColumn(name = "team_id", nullable = true, foreignKey = @ForeignKey(name = "fk_repository_team"))
+	public Team getTeam() {
+		return this.team;
+	}
+
+	public void setTeam(Team team) {
+		this.team = team;
+	}
+
+	@ManyToOne(fetch = FetchType.LAZY)
+	@JoinColumn(name = "project_id", nullable = true, foreignKey = @ForeignKey(name = "fk_repository_Project"))
+	public Project getProject() {
+		return this.project;
+	}
+
+	public void setProject(Project project) {
+		this.project = project;
+	}
+
+}
Index: eprms-model/src/main/java/info/ajanovski/eprms/model/entities/Responsibility.java
===================================================================
--- eprms-model/src/main/java/info/ajanovski/eprms/model/entities/Responsibility.java	(revision f1d066c061cda95871358a60f749ea06909f629d)
+++ eprms-model/src/main/java/info/ajanovski/eprms/model/entities/Responsibility.java	(revision f1d066c061cda95871358a60f749ea06909f629d)
@@ -0,0 +1,69 @@
+/*******************************************************************************
+ * Copyright (C) 2021 Vangel V. Ajanovski
+ *     
+ * This file is part of the EPRMS - Educational Project and Resource Management 
+ * System (hereinafter: EPRMS).
+ *     
+ * EPRMS is free software: you can redistribute it and/or modify it under the 
+ * terms of the GNU General Public License as published by the Free Software 
+ * Foundation, either version 3 of the License, or (at your option) any later 
+ * version.
+ *     
+ * EPRMS is distributed in the hope that it will be useful, but WITHOUT ANY 
+ * WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS 
+ * FOR A PARTICULAR PURPOSE.  See the GNU General Public License for more 
+ * details.
+ *     
+ * You should have received a copy of the GNU General Public License along 
+ * with EPRMS.  If not, see <https://www.gnu.org/licenses/>.
+ * 
+ ******************************************************************************/
+
+package info.ajanovski.eprms.model.entities;
+
+import java.util.*;
+import javax.persistence.*;
+
+/*
+*/
+@Entity
+@Table (schema="epm_main", name="responsibility")
+public class Responsibility implements java.io.Serializable {
+	private long responsibilityId;
+	private Project project;
+	private Team team;
+
+
+	@Id
+	@GeneratedValue(strategy = GenerationType.IDENTITY)
+
+	@Column(name = "responsibility_id", unique = true, nullable = false)
+	public long getResponsibilityId() {
+		return this.responsibilityId;
+	}
+
+	public void setResponsibilityId(long responsibilityId) {
+		this.responsibilityId=responsibilityId;
+	}
+
+	@ManyToOne(fetch = FetchType.LAZY)
+	@JoinColumn(name = "project_id", nullable = false, foreignKey = @ForeignKey(name = "fk_responsibility_Project"))
+	public Project getProject() {
+		return this.project;
+	}
+
+	public void setProject(Project project) {
+		this.project=project;
+	}
+
+	@ManyToOne(fetch = FetchType.LAZY)
+	@JoinColumn(name = "team_id", nullable = false, foreignKey = @ForeignKey(name = "fk_responsibility_team"))
+	public Team getTeam() {
+		return this.team;
+	}
+
+	public void setTeam(Team team) {
+		this.team=team;
+	}
+
+}
Index: eprms-model/src/main/java/info/ajanovski/eprms/model/entities/Role.java
===================================================================
--- eprms-model/src/main/java/info/ajanovski/eprms/model/entities/Role.java	(revision f1d066c061cda95871358a60f749ea06909f629d)
+++ eprms-model/src/main/java/info/ajanovski/eprms/model/entities/Role.java	(revision f1d066c061cda95871358a60f749ea06909f629d)
@@ -0,0 +1,57 @@
+/*******************************************************************************
+ * Copyright (C) 2021 Vangel V. Ajanovski
+ *     
+ * This file is part of the EPRMS - Educational Project and Resource Management 
+ * System (hereinafter: EPRMS).
+ *     
+ * EPRMS is free software: you can redistribute it and/or modify it under the 
+ * terms of the GNU General Public License as published by the Free Software 
+ * Foundation, either version 3 of the License, or (at your option) any later 
+ * version.
+ *     
+ * EPRMS is distributed in the hope that it will be useful, but WITHOUT ANY 
+ * WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS 
+ * FOR A PARTICULAR PURPOSE.  See the GNU General Public License for more 
+ * details.
+ *     
+ * You should have received a copy of the GNU General Public License along 
+ * with EPRMS.  If not, see <https://www.gnu.org/licenses/>.
+ * 
+ ******************************************************************************/
+
+package info.ajanovski.eprms.model.entities;
+
+import java.util.*;
+import javax.persistence.*;
+
+/*
+*/
+@Entity
+@Table (schema="epm_util", name="role")
+public class Role implements java.io.Serializable {
+	private long roleId;
+	private String name;
+
+
+	@Id
+	@GeneratedValue(strategy = GenerationType.IDENTITY)
+
+	@Column(name = "role_id", unique = true, nullable = false)
+	public long getRoleId() {
+		return this.roleId;
+	}
+
+	public void setRoleId(long roleId) {
+		this.roleId=roleId;
+	}
+
+	@Column(name = "name")
+	public String getName() {
+		return this.name;
+	}
+
+	public void setName(String name) {
+		this.name=name;
+	}
+
+}
Index: eprms-model/src/main/java/info/ajanovski/eprms/model/entities/Team.java
===================================================================
--- eprms-model/src/main/java/info/ajanovski/eprms/model/entities/Team.java	(revision f1d066c061cda95871358a60f749ea06909f629d)
+++ eprms-model/src/main/java/info/ajanovski/eprms/model/entities/Team.java	(revision f1d066c061cda95871358a60f749ea06909f629d)
@@ -0,0 +1,67 @@
+/*******************************************************************************
+ * Copyright (C) 2021 Vangel V. Ajanovski
+ *     
+ * This file is part of the EPRMS - Educational Project and Resource Management 
+ * System (hereinafter: EPRMS).
+ *     
+ * EPRMS is free software: you can redistribute it and/or modify it under the 
+ * terms of the GNU General Public License as published by the Free Software 
+ * Foundation, either version 3 of the License, or (at your option) any later 
+ * version.
+ *     
+ * EPRMS is distributed in the hope that it will be useful, but WITHOUT ANY 
+ * WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS 
+ * FOR A PARTICULAR PURPOSE.  See the GNU General Public License for more 
+ * details.
+ *     
+ * You should have received a copy of the GNU General Public License along 
+ * with EPRMS.  If not, see <https://www.gnu.org/licenses/>.
+ * 
+ ******************************************************************************/
+
+package info.ajanovski.eprms.model.entities;
+
+import java.util.*;
+import javax.persistence.*;
+
+/*
+*/
+@Entity
+@Table (schema="epm_main", name="team")
+public class Team implements java.io.Serializable {
+	private long teamId;
+	private String name;
+	private List<TeamMember> teamMembers = new ArrayList<TeamMember>();
+
+
+	@Id
+	@GeneratedValue(strategy = GenerationType.IDENTITY)
+
+	@Column(name = "team_id", unique = true, nullable = false)
+	public long getTeamId() {
+		return this.teamId;
+	}
+
+	public void setTeamId(long teamId) {
+		this.teamId=teamId;
+	}
+
+	@Column(name = "name")
+	public String getName() {
+		return this.name;
+	}
+
+	public void setName(String name) {
+		this.name=name;
+	}
+
+	@OneToMany(fetch = FetchType.LAZY, mappedBy = "team")
+	public List<TeamMember> getTeamMembers() {
+		return this.teamMembers;
+	}
+
+	public void setTeamMembers(List<TeamMember> teamMembers) {
+		this.teamMembers=teamMembers;
+	}
+
+}
Index: eprms-model/src/main/java/info/ajanovski/eprms/model/entities/TeamMember.java
===================================================================
--- eprms-model/src/main/java/info/ajanovski/eprms/model/entities/TeamMember.java	(revision f1d066c061cda95871358a60f749ea06909f629d)
+++ eprms-model/src/main/java/info/ajanovski/eprms/model/entities/TeamMember.java	(revision f1d066c061cda95871358a60f749ea06909f629d)
@@ -0,0 +1,89 @@
+/*******************************************************************************
+ * Copyright (C) 2021 Vangel V. Ajanovski
+ *     
+ * This file is part of the EPRMS - Educational Project and Resource Management 
+ * System (hereinafter: EPRMS).
+ *     
+ * EPRMS is free software: you can redistribute it and/or modify it under the 
+ * terms of the GNU General Public License as published by the Free Software 
+ * Foundation, either version 3 of the License, or (at your option) any later 
+ * version.
+ *     
+ * EPRMS is distributed in the hope that it will be useful, but WITHOUT ANY 
+ * WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS 
+ * FOR A PARTICULAR PURPOSE.  See the GNU General Public License for more 
+ * details.
+ *     
+ * You should have received a copy of the GNU General Public License along 
+ * with EPRMS.  If not, see <https://www.gnu.org/licenses/>.
+ * 
+ ******************************************************************************/
+
+package info.ajanovski.eprms.model.entities;
+
+import java.util.*;
+import javax.persistence.*;
+
+/*
+*/
+@Entity
+@Table (schema="epm_main", name="team_member")
+public class TeamMember implements java.io.Serializable {
+	private long teamMemberId;
+	private Long positionNumber;
+	private String role;
+	private Person person;
+	private Team team;
+
+
+	@Id
+	@GeneratedValue(strategy = GenerationType.IDENTITY)
+
+	@Column(name = "team_member_id", unique = true, nullable = false)
+	public long getTeamMemberId() {
+		return this.teamMemberId;
+	}
+
+	public void setTeamMemberId(long teamMemberId) {
+		this.teamMemberId=teamMemberId;
+	}
+
+	@Column(name = "position_number")
+	public Long getPositionNumber() {
+		return this.positionNumber;
+	}
+
+	public void setPositionNumber(Long positionNumber) {
+		this.positionNumber=positionNumber;
+	}
+
+	@Column(name = "role")
+	public String getRole() {
+		return this.role;
+	}
+
+	public void setRole(String role) {
+		this.role=role;
+	}
+
+	@ManyToOne(fetch = FetchType.LAZY)
+	@JoinColumn(name = "person_id", nullable = false, foreignKey = @ForeignKey(name = "fk_team_member_person"))
+	public Person getPerson() {
+		return this.person;
+	}
+
+	public void setPerson(Person person) {
+		this.person=person;
+	}
+
+	@ManyToOne(fetch = FetchType.LAZY)
+	@JoinColumn(name = "team_id", nullable = false, foreignKey = @ForeignKey(name = "fk_team_member_team"))
+	public Team getTeam() {
+		return this.team;
+	}
+
+	public void setTeam(Team team) {
+		this.team=team;
+	}
+
+}
Index: eprms-model/src/main/java/info/ajanovski/eprms/model/entities/WorkEvaluation.java
===================================================================
--- eprms-model/src/main/java/info/ajanovski/eprms/model/entities/WorkEvaluation.java	(revision f1d066c061cda95871358a60f749ea06909f629d)
+++ eprms-model/src/main/java/info/ajanovski/eprms/model/entities/WorkEvaluation.java	(revision f1d066c061cda95871358a60f749ea06909f629d)
@@ -0,0 +1,98 @@
+/*******************************************************************************
+ * Copyright (C) 2021 Vangel V. Ajanovski
+ *     
+ * This file is part of the EPRMS - Educational Project and Resource Management 
+ * System (hereinafter: EPRMS).
+ *     
+ * EPRMS is free software: you can redistribute it and/or modify it under the 
+ * terms of the GNU General Public License as published by the Free Software 
+ * Foundation, either version 3 of the License, or (at your option) any later 
+ * version.
+ *     
+ * EPRMS is distributed in the hope that it will be useful, but WITHOUT ANY 
+ * WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS 
+ * FOR A PARTICULAR PURPOSE.  See the GNU General Public License for more 
+ * details.
+ *     
+ * You should have received a copy of the GNU General Public License along 
+ * with EPRMS.  If not, see <https://www.gnu.org/licenses/>.
+ * 
+ ******************************************************************************/
+
+package info.ajanovski.eprms.model.entities;
+
+import java.util.*;
+import javax.persistence.*;
+
+/*
+*/
+@Entity
+@Table (schema="epm_main", name="work_evaluation")
+public class WorkEvaluation implements java.io.Serializable {
+	private long workEvaluationId;
+	private String title;
+	private String description;
+	private Float percentEvaluated;
+	private Float points;
+	private WorkReport workReport;
+
+
+	@Id
+	@GeneratedValue(strategy = GenerationType.IDENTITY)
+
+	@Column(name = "work_evaluation_id", unique = true, nullable = false)
+	public long getWorkEvaluationId() {
+		return this.workEvaluationId;
+	}
+
+	public void setWorkEvaluationId(long workEvaluationId) {
+		this.workEvaluationId=workEvaluationId;
+	}
+
+	@Column(name = "title")
+	public String getTitle() {
+		return this.title;
+	}
+
+	public void setTitle(String title) {
+		this.title=title;
+	}
+
+	@Column(name = "description")
+	public String getDescription() {
+		return this.description;
+	}
+
+	public void setDescription(String description) {
+		this.description=description;
+	}
+
+	@Column(name = "percent_evaluated")
+	public Float getPercentEvaluated() {
+		return this.percentEvaluated;
+	}
+
+	public void setPercentEvaluated(Float percentEvaluated) {
+		this.percentEvaluated=percentEvaluated;
+	}
+
+	@Column(name = "points")
+	public Float getPoints() {
+		return this.points;
+	}
+
+	public void setPoints(Float points) {
+		this.points=points;
+	}
+
+	@ManyToOne(fetch = FetchType.LAZY)
+	@JoinColumn(name = "work_report_id", nullable = false, foreignKey = @ForeignKey(name = "fk_work_evaluation_work_report"))
+	public WorkReport getWorkReport() {
+		return this.workReport;
+	}
+
+	public void setWorkReport(WorkReport workReport) {
+		this.workReport=workReport;
+	}
+
+}
Index: eprms-model/src/main/java/info/ajanovski/eprms/model/entities/WorkReport.java
===================================================================
--- eprms-model/src/main/java/info/ajanovski/eprms/model/entities/WorkReport.java	(revision f1d066c061cda95871358a60f749ea06909f629d)
+++ eprms-model/src/main/java/info/ajanovski/eprms/model/entities/WorkReport.java	(revision f1d066c061cda95871358a60f749ea06909f629d)
@@ -0,0 +1,121 @@
+/*******************************************************************************
+ * Copyright (C) 2021 Vangel V. Ajanovski
+ *     
+ * This file is part of the EPRMS - Educational Project and Resource Management 
+ * System (hereinafter: EPRMS).
+ *     
+ * EPRMS is free software: you can redistribute it and/or modify it under the 
+ * terms of the GNU General Public License as published by the Free Software 
+ * Foundation, either version 3 of the License, or (at your option) any later 
+ * version.
+ *     
+ * EPRMS is distributed in the hope that it will be useful, but WITHOUT ANY 
+ * WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS 
+ * FOR A PARTICULAR PURPOSE.  See the GNU General Public License for more 
+ * details.
+ *     
+ * You should have received a copy of the GNU General Public License along 
+ * with EPRMS.  If not, see <https://www.gnu.org/licenses/>.
+ * 
+ ******************************************************************************/
+
+package info.ajanovski.eprms.model.entities;
+
+import java.util.*;
+import javax.persistence.*;
+
+/*
+*/
+@Entity
+@Table (schema="epm_main", name="work_report")
+public class WorkReport implements java.io.Serializable {
+	private long workReportId;
+	private String title;
+	private String description;
+	private Float percentReported;
+	private Activity activity;
+	private Person person;
+	private WorkReport continuationOfWorkReport;
+	private Team team;
+
+
+	@Id
+	@GeneratedValue(strategy = GenerationType.IDENTITY)
+
+	@Column(name = "work_report_id", unique = true, nullable = false)
+	public long getWorkReportId() {
+		return this.workReportId;
+	}
+
+	public void setWorkReportId(long workReportId) {
+		this.workReportId=workReportId;
+	}
+
+	@Column(name = "title")
+	public String getTitle() {
+		return this.title;
+	}
+
+	public void setTitle(String title) {
+		this.title=title;
+	}
+
+	@Column(name = "description")
+	public String getDescription() {
+		return this.description;
+	}
+
+	public void setDescription(String description) {
+		this.description=description;
+	}
+
+	@Column(name = "percent_reported")
+	public Float getPercentReported() {
+		return this.percentReported;
+	}
+
+	public void setPercentReported(Float percentReported) {
+		this.percentReported=percentReported;
+	}
+
+	@ManyToOne(fetch = FetchType.LAZY)
+	@JoinColumn(name = "activity_id", nullable = false, foreignKey = @ForeignKey(name = "fk_work_report_activity"))
+	public Activity getActivity() {
+		return this.activity;
+	}
+
+	public void setActivity(Activity activity) {
+		this.activity=activity;
+	}
+
+	@ManyToOne(fetch = FetchType.LAZY)
+	@JoinColumn(name = "person_id", nullable = true, foreignKey = @ForeignKey(name = "fk_work_report_person"))
+	public Person getPerson() {
+		return this.person;
+	}
+
+	public void setPerson(Person person) {
+		this.person=person;
+	}
+
+	@ManyToOne(fetch = FetchType.LAZY)
+	@JoinColumn(name = "continuation_of_work_report_id", nullable = true, foreignKey = @ForeignKey(name = "fk_work_report_work_report"))
+	public WorkReport getContinuationOfWorkReport() {
+		return this.continuationOfWorkReport;
+	}
+
+	public void setContinuationOfWorkReport(WorkReport continuationOfWorkReport) {
+		this.continuationOfWorkReport=continuationOfWorkReport;
+	}
+
+	@ManyToOne(fetch = FetchType.LAZY)
+	@JoinColumn(name = "team_id", nullable = true, foreignKey = @ForeignKey(name = "fk_work_report_team"))
+	public Team getTeam() {
+		return this.team;
+	}
+
+	public void setTeam(Team team) {
+		this.team=team;
+	}
+
+}
Index: eprms-model/src/main/java/info/ajanovski/eprms/model/util/ModelConstants.java
===================================================================
--- eprms-model/src/main/java/info/ajanovski/eprms/model/util/ModelConstants.java	(revision f1d066c061cda95871358a60f749ea06909f629d)
+++ eprms-model/src/main/java/info/ajanovski/eprms/model/util/ModelConstants.java	(revision f1d066c061cda95871358a60f749ea06909f629d)
@@ -0,0 +1,34 @@
+/*******************************************************************************
+ * Copyright (C) 2021 Vangel V. Ajanovski
+ *     
+ * This file is part of the EPRMS - Educational Project and Resource 
+ * Management System (hereinafter: EPRMS).
+ *     
+ * EPRMS is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *     
+ * EPRMS is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *     
+ * You should have received a copy of the GNU General Public License
+ * along with EPRMS.  If not, see <https://www.gnu.org/licenses/>.
+ ******************************************************************************/
+
+package info.ajanovski.eprms.model.util;
+
+public class ModelConstants {
+
+	public static final String BooleanTRUEasCHAR = "T";
+	public static final String BooleanFALSEasCHAR = "F";
+
+	public static final String EmailUnknown = "EMAIL@UNKNOWN";
+
+	public static final String RoleAdministrator = "ADMINISTRATOR";
+	public static final String RoleInstructor = "INSTRUCTOR";
+	public static final String RoleStudent = "STUDENT";
+
+}
Index: eprms-tap/pom.xml
===================================================================
--- eprms-tap/pom.xml	(revision 2090f001e6d9b81b1c77254e67b140aee64480e4)
+++ eprms-tap/pom.xml	(revision f1d066c061cda95871358a60f749ea06909f629d)
@@ -33,5 +33,8 @@
 
 	<properties>
+		<maven.compiler.source>15</maven.compiler.source>
+		<maven.compiler.target>15</maven.compiler.target>
 		<java.version>15</java.version>
+
 		<tapestry-version>5.7.1</tapestry-version>
 		<tapestry-testify-version>1.0.4</tapestry-testify-version>
@@ -49,4 +52,5 @@
 		<postgresql-version>42.2.19</postgresql-version>
 		<cas-client-version>3.6.2</cas-client-version>
+
 		<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
 		<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
@@ -61,4 +65,10 @@
 
 	<dependencies>
+		<dependency>
+			<groupId>info.ajanovski.eprms</groupId>
+			<artifactId>model</artifactId>
+			<version>0.0.1-SNAPSHOT</version>
+		</dependency>
+
 		<!-- Spring -->
 		<dependency>
Index: eprms-tap/src/main/java/info/ajanovski/eprms/tap/AppConfiguration.java
===================================================================
--- eprms-tap/src/main/java/info/ajanovski/eprms/tap/AppConfiguration.java	(revision 2090f001e6d9b81b1c77254e67b140aee64480e4)
+++ eprms-tap/src/main/java/info/ajanovski/eprms/tap/AppConfiguration.java	(revision f1d066c061cda95871358a60f749ea06909f629d)
@@ -38,8 +38,12 @@
 import org.springframework.boot.web.servlet.ServletContextInitializer;
 import org.springframework.boot.web.servlet.server.ConfigurableServletWebServerFactory;
+import org.springframework.context.MessageSource;
 import org.springframework.context.annotation.Bean;
 import org.springframework.context.annotation.ComponentScan;
 import org.springframework.context.annotation.Configuration;
+import org.springframework.context.support.ReloadableResourceBundleMessageSource;
 import org.springframework.http.HttpStatus;
+import org.springframework.web.servlet.LocaleResolver;
+import org.springframework.web.servlet.i18n.CookieLocaleResolver;
 
 import info.ajanovski.eprms.tap.util.AppConfig;
@@ -114,3 +118,19 @@
 		return factory;
 	}
+
+	@Bean(name = "messageSource")
+	public MessageSource getMessageResource() {
+		ReloadableResourceBundleMessageSource messageResource = new ReloadableResourceBundleMessageSource();
+		messageResource.setBasename("classpath:app");
+		messageResource.setDefaultEncoding("UTF-8");
+		return messageResource;
+	}
+
+	@Bean(name = "localeResolver")
+	public LocaleResolver getLocaleResolver() {
+		CookieLocaleResolver resolver = new CookieLocaleResolver();
+		resolver.setCookieDomain("localeCookie");
+		resolver.setCookieMaxAge(60 * 60);
+		return resolver;
+	}
 }
Index: eprms-tap/src/main/java/info/ajanovski/eprms/tap/components/Layout.java
===================================================================
--- eprms-tap/src/main/java/info/ajanovski/eprms/tap/components/Layout.java	(revision 2090f001e6d9b81b1c77254e67b140aee64480e4)
+++ eprms-tap/src/main/java/info/ajanovski/eprms/tap/components/Layout.java	(revision f1d066c061cda95871358a60f749ea06909f629d)
@@ -36,5 +36,5 @@
 import org.slf4j.Logger;
 
-import info.ajanovski.eprms.tap.entities.Person;
+import info.ajanovski.eprms.model.entities.Person;
 import info.ajanovski.eprms.tap.services.GenericService;
 import info.ajanovski.eprms.tap.services.PersonManager;
Index: eprms-tap/src/main/java/info/ajanovski/eprms/tap/components/TeamMembersGrid.java
===================================================================
--- eprms-tap/src/main/java/info/ajanovski/eprms/tap/components/TeamMembersGrid.java	(revision 2090f001e6d9b81b1c77254e67b140aee64480e4)
+++ eprms-tap/src/main/java/info/ajanovski/eprms/tap/components/TeamMembersGrid.java	(revision f1d066c061cda95871358a60f749ea06909f629d)
@@ -34,6 +34,6 @@
 import org.apache.tapestry5.ioc.annotations.Inject;
 
-import info.ajanovski.eprms.tap.entities.Team;
-import info.ajanovski.eprms.tap.entities.TeamMember;
+import info.ajanovski.eprms.model.entities.Team;
+import info.ajanovski.eprms.model.entities.TeamMember;
 import info.ajanovski.eprms.tap.services.GenericService;
 import info.ajanovski.eprms.tap.util.UserInfo;
Index: eprms-tap/src/main/java/info/ajanovski/eprms/tap/data/GenericDao.java
===================================================================
--- eprms-tap/src/main/java/info/ajanovski/eprms/tap/data/GenericDao.java	(revision f1d066c061cda95871358a60f749ea06909f629d)
+++ eprms-tap/src/main/java/info/ajanovski/eprms/tap/data/GenericDao.java	(revision f1d066c061cda95871358a60f749ea06909f629d)
@@ -0,0 +1,44 @@
+/*******************************************************************************
+ * Copyright (C) 2021 Vangel V. Ajanovski
+ *     
+ * This file is part of the EPRMS - Educational Project and Resource Management 
+ * System (hereinafter: EPRMS).
+ *     
+ * EPRMS is free software: you can redistribute it and/or modify it under the 
+ * terms of the GNU General Public License as published by the Free Software 
+ * Foundation, either version 3 of the License, or (at your option) any later 
+ * version.
+ *     
+ * EPRMS is distributed in the hope that it will be useful, but WITHOUT ANY 
+ * WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS 
+ * FOR A PARTICULAR PURPOSE.  See the GNU General Public License for more 
+ * details.
+ *     
+ * You should have received a copy of the GNU General Public License along 
+ * with EPRMS.  If not, see <https://www.gnu.org/licenses/>.
+ * 
+ ******************************************************************************/
+
+package info.ajanovski.eprms.tap.data;
+
+import java.util.List;
+
+public interface GenericDao {
+	public Object getByPK(Class<?> classToLoad, long id);
+
+	public void deleteByPK(Class<?> classToLoad, long id);
+
+	public void delete(Object object);
+
+	public List<Object> getQueryResult(String guery);
+
+	public void saveOrUpdate(Object object);
+
+	public Object save(Object object);
+
+	public List<?> getAll(Class<?> classToLoad);
+
+	public Object getByCode(Class<?> classToLoad, String code);
+
+	public List<?> getByTitleSubstring(Class<?> classToSearch, String searchSubString);
+}
Index: eprms-tap/src/main/java/info/ajanovski/eprms/tap/data/GenericDaoImpl.java
===================================================================
--- eprms-tap/src/main/java/info/ajanovski/eprms/tap/data/GenericDaoImpl.java	(revision f1d066c061cda95871358a60f749ea06909f629d)
+++ eprms-tap/src/main/java/info/ajanovski/eprms/tap/data/GenericDaoImpl.java	(revision f1d066c061cda95871358a60f749ea06909f629d)
@@ -0,0 +1,118 @@
+/*******************************************************************************
+ * Copyright (C) 2021 Vangel V. Ajanovski
+ *     
+ * This file is part of the EPRMS - Educational Project and Resource 
+ * Management System (hereinafter: EPRMS).
+ *     
+ * EPRMS is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *     
+ * EPRMS is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *     
+ * You should have received a copy of the GNU General Public License
+ * along with EPRMS.  If not, see <https://www.gnu.org/licenses/>.
+ * 
+ ******************************************************************************/
+
+package info.ajanovski.eprms.tap.data;
+
+import java.util.ArrayList;
+import java.util.Iterator;
+import java.util.List;
+
+import org.apache.tapestry5.ioc.annotations.Inject;
+import org.hibernate.Query;
+import org.hibernate.Session;
+import org.hibernate.criterion.MatchMode;
+import org.hibernate.criterion.Restrictions;
+import org.hibernate.exception.DataException;
+import org.slf4j.Logger;
+
+public class GenericDaoImpl implements GenericDao {
+
+	@Inject
+	private Session session;
+
+	@Inject
+	private Logger logger;
+
+	@Override
+	public Object getByPK(Class<?> classToLoad, long id) {
+		return session.get(classToLoad, id);
+	}
+
+	@Override
+	public void deleteByPK(Class<?> classToLoad, long id) {
+		session.delete(getByPK(classToLoad, id));
+	}
+
+	@Override
+	public void delete(Object object) {
+		session.delete(object);
+	}
+
+	@Override
+	public List<Object> getQueryResult(String guery) {
+		try {
+			Query q = session.createQuery(guery);
+			List<Object> l = new ArrayList<Object>();
+
+			for (Iterator<?> it = q.iterate(); it.hasNext();) {
+				Object[] row = (Object[]) it.next();
+				for (int i = 0; i < row.length; i++) {
+					l.add(row[i]);
+				}
+				l.add(" | ");
+			}
+
+			return l;
+
+		} catch (DataException e) {
+			// Critical errors : database unreachable, etc.
+			logger.error(
+					"Exception - DataAccessException occurs : " + e.getMessage() + " on complete getQueryResult().");
+			return null;
+		}
+	}
+
+	@Override
+	public void saveOrUpdate(Object object) {
+		session.saveOrUpdate(object);
+	}
+
+	@Override
+	public Object save(Object object) {
+		// Object a = session.merge(object);
+		return session.save(object);
+	}
+
+	@Override
+	public List<?> getAll(Class<?> classToLoad) {
+		return session.createCriteria(classToLoad).list();
+	}
+
+	@Override
+	public Object getByCode(Class<?> classToLoad, String code) {
+		List<?> l = session.createCriteria(classToLoad).add(Restrictions.eq("code", code)).list();
+		if (l.size() > 0) {
+			return l.get(0);
+		} else {
+			return null;
+		}
+	}
+
+	@Override
+	public List<?> getByTitleSubstring(Class<?> classToSearch, String searchSubString) {
+		if (searchSubString != null) {
+			return (List<?>) session.createCriteria(classToSearch)
+					.add(Restrictions.ilike("title", searchSubString, MatchMode.ANYWHERE)).list();
+		} else {
+			return null;
+		}
+	}
+}
Index: eprms-tap/src/main/java/info/ajanovski/eprms/tap/data/PersonDao.java
===================================================================
--- eprms-tap/src/main/java/info/ajanovski/eprms/tap/data/PersonDao.java	(revision f1d066c061cda95871358a60f749ea06909f629d)
+++ eprms-tap/src/main/java/info/ajanovski/eprms/tap/data/PersonDao.java	(revision f1d066c061cda95871358a60f749ea06909f629d)
@@ -0,0 +1,42 @@
+/*******************************************************************************
+ * Copyright (C) 2021 Vangel V. Ajanovski
+ *     
+ * This file is part of the EPRMS - Educational Project and Resource 
+ * Management System (hereinafter: EPRMS).
+ *     
+ * EPRMS is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *     
+ * EPRMS is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *     
+ * You should have received a copy of the GNU General Public License
+ * along with EPRMS.  If not, see <https://www.gnu.org/licenses/>.
+ * 
+ ******************************************************************************/
+
+package info.ajanovski.eprms.tap.data;
+
+import java.util.List;
+
+import info.ajanovski.eprms.model.entities.Person;
+import info.ajanovski.eprms.model.entities.PersonRole;
+
+public interface PersonDao {
+	public List<Person> getAllPersons();
+
+	public Person getPersonByUsername(String username);
+
+	public String getPersonFullName(Person person);
+
+	public String getPersonFullNameWithId(Person person);
+
+	public List<Person> getPersonByFilter(String filter);
+
+	public List<PersonRole> getPersonRolesForPerson(long personId);
+
+}
Index: eprms-tap/src/main/java/info/ajanovski/eprms/tap/data/PersonDaoImpl.java
===================================================================
--- eprms-tap/src/main/java/info/ajanovski/eprms/tap/data/PersonDaoImpl.java	(revision f1d066c061cda95871358a60f749ea06909f629d)
+++ eprms-tap/src/main/java/info/ajanovski/eprms/tap/data/PersonDaoImpl.java	(revision f1d066c061cda95871358a60f749ea06909f629d)
@@ -0,0 +1,87 @@
+/*******************************************************************************
+ * Copyright (C) 2021 Vangel V. Ajanovski
+ *     
+ * This file is part of the EPRMS - Educational Project and Resource 
+ * Management System (hereinafter: EPRMS).
+ *     
+ * EPRMS is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *     
+ * EPRMS is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *     
+ * You should have received a copy of the GNU General Public License
+ * along with EPRMS.  If not, see <https://www.gnu.org/licenses/>.
+ * 
+ ******************************************************************************/
+
+package info.ajanovski.eprms.tap.data;
+
+import java.util.List;
+
+import org.apache.tapestry5.ioc.annotations.Inject;
+import org.hibernate.Query;
+import org.hibernate.Session;
+import org.hibernate.criterion.Order;
+import org.hibernate.criterion.Restrictions;
+import org.hibernate.exception.DataException;
+import org.slf4j.Logger;
+
+import info.ajanovski.eprms.model.entities.Person;
+import info.ajanovski.eprms.model.entities.PersonRole;
+import info.ajanovski.eprms.tap.util.UsefulMethods;
+
+public class PersonDaoImpl implements PersonDao {
+	@Inject
+	private Logger logger;
+
+	@Inject
+	private Session session;
+
+	@Override
+	public List<Person> getAllPersons() {
+		try {
+			return UsefulMethods.castList(Person.class,
+					session.createCriteria(Person.class).addOrder(Order.asc("lastName")).list());
+		} catch (DataException e) {
+			logger.error("Exception - DataAccessException occurs : {} on complete getAllPersons().", e.getMessage());
+			return null;
+		}
+	}
+
+	@Override
+	public Person getPersonByUsername(String username) {
+		return (Person) session.createCriteria(Person.class).add(Restrictions.eq("userName", username))
+				.setReadOnly(true).setCacheable(true).uniqueResult();
+	}
+
+	@Override
+	public List<Person> getPersonByFilter(String filter) {
+		String f = "%" + filter.toLowerCase() + "%";
+		Query q = session
+				.createQuery("select p from Person p  where (lower(concat(userName,firstName,lastName)) like :filter)");
+		q.setParameter("filter", f);
+		return UsefulMethods.castList(Person.class, q.list());
+	}
+
+	@Override
+	public List<PersonRole> getPersonRolesForPerson(long personId) {
+		return (List<PersonRole>) session.createCriteria(PersonRole.class, "pr")
+				.add(Restrictions.eq("pr.person.personId", personId)).list();
+	}
+
+	@Override
+	public String getPersonFullName(Person person) {
+		return person.getLastName() + " " + person.getFirstName();
+	}
+
+	@Override
+	public String getPersonFullNameWithId(Person person) {
+		return person.getLastName() + " " + person.getFirstName() + " [" + person.getUserName() + "]";
+	}
+
+}
Index: eprms-tap/src/main/java/info/ajanovski/eprms/tap/data/ProjectDao.java
===================================================================
--- eprms-tap/src/main/java/info/ajanovski/eprms/tap/data/ProjectDao.java	(revision f1d066c061cda95871358a60f749ea06909f629d)
+++ eprms-tap/src/main/java/info/ajanovski/eprms/tap/data/ProjectDao.java	(revision f1d066c061cda95871358a60f749ea06909f629d)
@@ -0,0 +1,26 @@
+/*******************************************************************************
+ * Copyright (C) 2021 Vangel V. Ajanovski
+ *     
+ * This file is part of the EPRMS - Educational Project and Resource 
+ * Management System (hereinafter: EPRMS).
+ *     
+ * EPRMS is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *     
+ * EPRMS is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *     
+ * You should have received a copy of the GNU General Public License
+ * along with EPRMS.  If not, see <https://www.gnu.org/licenses/>.
+ * 
+ ******************************************************************************/
+
+package info.ajanovski.eprms.tap.data;
+
+public interface ProjectDao {
+
+}
Index: eprms-tap/src/main/java/info/ajanovski/eprms/tap/data/ProjectDaoImpl.java
===================================================================
--- eprms-tap/src/main/java/info/ajanovski/eprms/tap/data/ProjectDaoImpl.java	(revision f1d066c061cda95871358a60f749ea06909f629d)
+++ eprms-tap/src/main/java/info/ajanovski/eprms/tap/data/ProjectDaoImpl.java	(revision f1d066c061cda95871358a60f749ea06909f629d)
@@ -0,0 +1,26 @@
+/*******************************************************************************
+ * Copyright (C) 2021 Vangel V. Ajanovski
+ *     
+ * This file is part of the EPRMS - Educational Project and Resource 
+ * Management System (hereinafter: EPRMS).
+ *     
+ * EPRMS is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *     
+ * EPRMS is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *     
+ * You should have received a copy of the GNU General Public License
+ * along with EPRMS.  If not, see <https://www.gnu.org/licenses/>.
+ * 
+ ******************************************************************************/
+
+package info.ajanovski.eprms.tap.data;
+
+public class ProjectDaoImpl implements ProjectDao {
+
+}
Index: eprms-tap/src/main/java/info/ajanovski/eprms/tap/data/ResourceDao.java
===================================================================
--- eprms-tap/src/main/java/info/ajanovski/eprms/tap/data/ResourceDao.java	(revision f1d066c061cda95871358a60f749ea06909f629d)
+++ eprms-tap/src/main/java/info/ajanovski/eprms/tap/data/ResourceDao.java	(revision f1d066c061cda95871358a60f749ea06909f629d)
@@ -0,0 +1,39 @@
+/*******************************************************************************
+ * Copyright (C) 2021 Vangel V. Ajanovski
+ *     
+ * This file is part of the EPRMS - Educational Project and Resource 
+ * Management System (hereinafter: EPRMS).
+ *     
+ * EPRMS is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *     
+ * EPRMS is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *     
+ * You should have received a copy of the GNU General Public License
+ * along with EPRMS.  If not, see <https://www.gnu.org/licenses/>.
+ * 
+ ******************************************************************************/
+
+package info.ajanovski.eprms.tap.data;
+
+import java.util.List;
+
+import info.ajanovski.eprms.model.entities.Database;
+import info.ajanovski.eprms.model.entities.Repository;
+
+public interface ResourceDao {
+
+	public List<Repository> getRepositoriesByPerson(long personId);
+
+	public List<Repository> getRepositoriesByTeam(long personId);
+
+	public List<Repository> getRepositoriesByProject(long personId);
+
+	public List<Database> getDatabasesByProject(long personId);
+
+}
Index: eprms-tap/src/main/java/info/ajanovski/eprms/tap/data/ResourceDaoImpl.java
===================================================================
--- eprms-tap/src/main/java/info/ajanovski/eprms/tap/data/ResourceDaoImpl.java	(revision f1d066c061cda95871358a60f749ea06909f629d)
+++ eprms-tap/src/main/java/info/ajanovski/eprms/tap/data/ResourceDaoImpl.java	(revision f1d066c061cda95871358a60f749ea06909f629d)
@@ -0,0 +1,88 @@
+/*******************************************************************************
+ * Copyright (C) 2021 Vangel V. Ajanovski
+ *     
+ * This file is part of the EPRMS - Educational Project and Resource 
+ * Management System (hereinafter: EPRMS).
+ *     
+ * EPRMS is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *     
+ * EPRMS is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *     
+ * You should have received a copy of the GNU General Public License
+ * along with EPRMS.  If not, see <https://www.gnu.org/licenses/>.
+ * 
+ ******************************************************************************/
+
+package info.ajanovski.eprms.tap.data;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import org.apache.tapestry5.ioc.annotations.Inject;
+import org.hibernate.Session;
+
+import info.ajanovski.eprms.model.entities.Database;
+import info.ajanovski.eprms.model.entities.Repository;
+
+public class ResourceDaoImpl implements ResourceDao {
+
+	@Inject
+	private Session session;
+
+	@Override
+	public List<Repository> getRepositoriesByPerson(long personId) {
+		try {
+			return session.createQuery("from Repository r where r.person.personId=:personId")
+					.setLong("personId", personId).list();
+		} catch (Exception e) {
+			return new ArrayList<Repository>();
+		}
+	}
+
+	@Override
+	public List<Repository> getRepositoriesByTeam(long personId) {
+		try {
+			return session.createQuery("""
+					select r from Repository r join r.team t, TeamMember tm join tm.person p
+					where tm.team.teamId=t.teamId and r.person.personId=:personId
+					""").setLong("personId", personId).list();
+		} catch (Exception e) {
+			return new ArrayList<Repository>();
+		}
+	}
+
+	@Override
+	public List<Repository> getRepositoriesByProject(long personId) {
+		try {
+			return session.createQuery("""
+					select r from Repository r join r.project pr,
+					Responsibility res join res.team t, TeamMember tm join tm.person p
+					where pr.projectId=res.project.projectId and tm.team.teamId=t.teamId and
+					tm.person.personId=:personId
+					""").setLong("personId", personId).list();
+		} catch (Exception e) {
+			return new ArrayList<Repository>();
+		}
+	}
+
+	@Override
+	public List<Database> getDatabasesByProject(long personId) {
+		try {
+			return session.createQuery("""
+					select d from Database d join d.project pr,
+					Responsibility res join res.team t, TeamMember tm join tm.person p
+					where pr.projectId=res.project.projectId and tm.team.teamId=t.teamId and
+					tm.person.personId=:personId
+					""").setLong("personId", personId).list();
+		} catch (Exception e) {
+			return new ArrayList<Database>();
+		}
+
+	}
+}
Index: rms-tap/src/main/java/info/ajanovski/eprms/tap/entities/Activity.java
===================================================================
--- eprms-tap/src/main/java/info/ajanovski/eprms/tap/entities/Activity.java	(revision 2090f001e6d9b81b1c77254e67b140aee64480e4)
+++ 	(revision )
@@ -1,100 +1,0 @@
-/*******************************************************************************
- * Copyright (C) 2021 Vangel V. Ajanovski
- *     
- * This file is part of the EPRMS - Educational Project and Resource Management 
- * System (hereinafter: EPRMS).
- *     
- * EPRMS is free software: you can redistribute it and/or modify it under the 
- * terms of the GNU General Public License as published by the Free Software 
- * Foundation, either version 3 of the License, or (at your option) any later 
- * version.
- *     
- * EPRMS is distributed in the hope that it will be useful, but WITHOUT ANY 
- * WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS 
- * FOR A PARTICULAR PURPOSE.  See the GNU General Public License for more 
- * details.
- *     
- * You should have received a copy of the GNU General Public License along 
- * with EPRMS.  If not, see <https://www.gnu.org/licenses/>.
- * 
- ******************************************************************************/
-
-package info.ajanovski.eprms.tap.entities;
-
-import java.util.*;
-import javax.persistence.*;
-
-/*
-*/
-@Entity
-@Table (schema="epm_main", name="activity")
-public class Activity implements java.io.Serializable {
-	private long activityId;
-	private String title;
-	private String description;
-	private Activity parentActivity;
-	private ActivityType activityType;
-	private Project project;
-
-
-	@Id
-	@GeneratedValue(strategy = GenerationType.IDENTITY)
-
-	@Column(name = "activity_id", unique = true, nullable = false)
-	public long getActivityId() {
-		return this.activityId;
-	}
-
-	public void setActivityId(long activityId) {
-		this.activityId=activityId;
-	}
-
-	@Column(name = "title")
-	public String getTitle() {
-		return this.title;
-	}
-
-	public void setTitle(String title) {
-		this.title=title;
-	}
-
-	@Column(name = "description")
-	public String getDescription() {
-		return this.description;
-	}
-
-	public void setDescription(String description) {
-		this.description=description;
-	}
-
-	@ManyToOne(fetch = FetchType.LAZY)
-	@JoinColumn(name = "parent_activity_id", nullable = false, foreignKey = @ForeignKey(name = "fk_activity_activity"))
-	public Activity getParentActivity() {
-		return this.parentActivity;
-	}
-
-	public void setParentActivity(Activity parentActivity) {
-		this.parentActivity=parentActivity;
-	}
-
-	@ManyToOne(fetch = FetchType.LAZY)
-	@JoinColumn(name = "activity_type_id", nullable = false, foreignKey = @ForeignKey(name = "fk_activity_activity_type"))
-	public ActivityType getActivityType() {
-		return this.activityType;
-	}
-
-	public void setActivityType(ActivityType activityType) {
-		this.activityType=activityType;
-	}
-
-	@ManyToOne(fetch = FetchType.LAZY)
-	@JoinColumn(name = "project_id", nullable = false, foreignKey = @ForeignKey(name = "fk_activity_Project"))
-	public Project getProject() {
-		return this.project;
-	}
-
-	public void setProject(Project project) {
-		this.project=project;
-	}
-
-}
Index: rms-tap/src/main/java/info/ajanovski/eprms/tap/entities/ActivityType.java
===================================================================
--- eprms-tap/src/main/java/info/ajanovski/eprms/tap/entities/ActivityType.java	(revision 2090f001e6d9b81b1c77254e67b140aee64480e4)
+++ 	(revision )
@@ -1,67 +1,0 @@
-/*******************************************************************************
- * Copyright (C) 2021 Vangel V. Ajanovski
- *     
- * This file is part of the EPRMS - Educational Project and Resource Management 
- * System (hereinafter: EPRMS).
- *     
- * EPRMS is free software: you can redistribute it and/or modify it under the 
- * terms of the GNU General Public License as published by the Free Software 
- * Foundation, either version 3 of the License, or (at your option) any later 
- * version.
- *     
- * EPRMS is distributed in the hope that it will be useful, but WITHOUT ANY 
- * WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS 
- * FOR A PARTICULAR PURPOSE.  See the GNU General Public License for more 
- * details.
- *     
- * You should have received a copy of the GNU General Public License along 
- * with EPRMS.  If not, see <https://www.gnu.org/licenses/>.
- * 
- ******************************************************************************/
-
-package info.ajanovski.eprms.tap.entities;
-
-import java.util.*;
-import javax.persistence.*;
-
-/*
-*/
-@Entity
-@Table (schema="epm_main", name="activity_type")
-public class ActivityType implements java.io.Serializable {
-	private long activityTypeId;
-	private String title;
-	private String description;
-
-
-	@Id
-	@GeneratedValue(strategy = GenerationType.IDENTITY)
-
-	@Column(name = "activity_type_id", unique = true, nullable = false)
-	public long getActivityTypeId() {
-		return this.activityTypeId;
-	}
-
-	public void setActivityTypeId(long activityTypeId) {
-		this.activityTypeId=activityTypeId;
-	}
-
-	@Column(name = "title")
-	public String getTitle() {
-		return this.title;
-	}
-
-	public void setTitle(String title) {
-		this.title=title;
-	}
-
-	@Column(name = "description")
-	public String getDescription() {
-		return this.description;
-	}
-
-	public void setDescription(String description) {
-		this.description=description;
-	}
-
-}
Index: rms-tap/src/main/java/info/ajanovski/eprms/tap/entities/Course.java
===================================================================
--- eprms-tap/src/main/java/info/ajanovski/eprms/tap/entities/Course.java	(revision 2090f001e6d9b81b1c77254e67b140aee64480e4)
+++ 	(revision )
@@ -1,57 +1,0 @@
-/*******************************************************************************
- * Copyright (C) 2021 Vangel V. Ajanovski
- *     
- * This file is part of the EPRMS - Educational Project and Resource Management 
- * System (hereinafter: EPRMS).
- *     
- * EPRMS is free software: you can redistribute it and/or modify it under the 
- * terms of the GNU General Public License as published by the Free Software 
- * Foundation, either version 3 of the License, or (at your option) any later 
- * version.
- *     
- * EPRMS is distributed in the hope that it will be useful, but WITHOUT ANY 
- * WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS 
- * FOR A PARTICULAR PURPOSE.  See the GNU General Public License for more 
- * details.
- *     
- * You should have received a copy of the GNU General Public License along 
- * with EPRMS.  If not, see <https://www.gnu.org/licenses/>.
- * 
- ******************************************************************************/
-
-package info.ajanovski.eprms.tap.entities;
-
-import java.util.*;
-import javax.persistence.*;
-
-/*
-*/
-@Entity
-@Table (schema="epm_main", name="course")
-public class Course implements java.io.Serializable {
-	private long courseId;
-	private String title;
-
-
-	@Id
-	@GeneratedValue(strategy = GenerationType.IDENTITY)
-
-	@Column(name = "course_id", unique = true, nullable = false)
-	public long getCourseId() {
-		return this.courseId;
-	}
-
-	public void setCourseId(long courseId) {
-		this.courseId=courseId;
-	}
-
-	@Column(name = "title", unique = true, nullable = false)
-	public String getTitle() {
-		return this.title;
-	}
-
-	public void setTitle(String title) {
-		this.title=title;
-	}
-
-}
Index: rms-tap/src/main/java/info/ajanovski/eprms/tap/entities/CourseProject.java
===================================================================
--- eprms-tap/src/main/java/info/ajanovski/eprms/tap/entities/CourseProject.java	(revision 2090f001e6d9b81b1c77254e67b140aee64480e4)
+++ 	(revision )
@@ -1,69 +1,0 @@
-/*******************************************************************************
- * Copyright (C) 2021 Vangel V. Ajanovski
- *     
- * This file is part of the EPRMS - Educational Project and Resource Management 
- * System (hereinafter: EPRMS).
- *     
- * EPRMS is free software: you can redistribute it and/or modify it under the 
- * terms of the GNU General Public License as published by the Free Software 
- * Foundation, either version 3 of the License, or (at your option) any later 
- * version.
- *     
- * EPRMS is distributed in the hope that it will be useful, but WITHOUT ANY 
- * WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS 
- * FOR A PARTICULAR PURPOSE.  See the GNU General Public License for more 
- * details.
- *     
- * You should have received a copy of the GNU General Public License along 
- * with EPRMS.  If not, see <https://www.gnu.org/licenses/>.
- * 
- ******************************************************************************/
-
-package info.ajanovski.eprms.tap.entities;
-
-import java.util.*;
-import javax.persistence.*;
-
-/*
-*/
-@Entity
-@Table (schema="epm_main", name="course_project")
-public class CourseProject implements java.io.Serializable {
-	private long courseProjectId;
-	private Course course;
-	private Project project;
-
-
-	@Id
-	@GeneratedValue(strategy = GenerationType.IDENTITY)
-
-	@Column(name = "course_project_id", unique = true, nullable = false)
-	public long getCourseProjectId() {
-		return this.courseProjectId;
-	}
-
-	public void setCourseProjectId(long courseProjectId) {
-		this.courseProjectId=courseProjectId;
-	}
-
-	@ManyToOne(fetch = FetchType.LAZY)
-	@JoinColumn(name = "course_id", nullable = false, foreignKey = @ForeignKey(name = "fk_course_project_course"))
-	public Course getCourse() {
-		return this.course;
-	}
-
-	public void setCourse(Course course) {
-		this.course=course;
-	}
-
-	@ManyToOne(fetch = FetchType.LAZY)
-	@JoinColumn(name = "project_id", nullable = false, foreignKey = @ForeignKey(name = "fk_course_project_Project"))
-	public Project getProject() {
-		return this.project;
-	}
-
-	public void setProject(Project project) {
-		this.project=project;
-	}
-
-}
Index: rms-tap/src/main/java/info/ajanovski/eprms/tap/entities/Database.java
===================================================================
--- eprms-tap/src/main/java/info/ajanovski/eprms/tap/entities/Database.java	(revision 2090f001e6d9b81b1c77254e67b140aee64480e4)
+++ 	(revision )
@@ -1,157 +1,0 @@
-/*******************************************************************************
- * Copyright (C) 2021 Vangel V. Ajanovski
- *     
- * This file is part of the EPRMS - Educational Project and Resource Management 
- * System (hereinafter: EPRMS).
- *     
- * EPRMS is free software: you can redistribute it and/or modify it under the 
- * terms of the GNU General Public License as published by the Free Software 
- * Foundation, either version 3 of the License, or (at your option) any later 
- * version.
- *     
- * EPRMS is distributed in the hope that it will be useful, but WITHOUT ANY 
- * WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS 
- * FOR A PARTICULAR PURPOSE.  See the GNU General Public License for more 
- * details.
- *     
- * You should have received a copy of the GNU General Public License along 
- * with EPRMS.  If not, see <https://www.gnu.org/licenses/>.
- * 
- ******************************************************************************/
-
-package info.ajanovski.eprms.tap.entities;
-
-import java.util.*;
-import javax.persistence.*;
-
-/*
-*/
-@Entity
-@Table(schema = "", name = "database")
-public class Database implements java.io.Serializable {
-	private long databaseId;
-	private String type;
-	private String server;
-	private String name;
-	private String owner;
-	private String password;
-	private String tunnelUser;
-	private String tunnelPassword;
-	private String port;
-	private String tunnelServer;
-	private Project project;
-	private Date dateCreated;
-
-	@Id
-	@GeneratedValue(strategy = GenerationType.IDENTITY)
-
-	@Column(name = "database_id", unique = true, nullable = false)
-	public long getDatabaseId() {
-		return this.databaseId;
-	}
-
-	public void setDatabaseId(long databaseId) {
-		this.databaseId = databaseId;
-	}
-
-	@Column(name = "type")
-	public String getType() {
-		return this.type;
-	}
-
-	public void setType(String type) {
-		this.type = type;
-	}
-
-	@Column(name = "server")
-	public String getServer() {
-		return this.server;
-	}
-
-	public void setServer(String server) {
-		this.server = server;
-	}
-
-	@Column(name = "name")
-	public String getName() {
-		return this.name;
-	}
-
-	public void setName(String name) {
-		this.name = name;
-	}
-
-	@Column(name = "owner")
-	public String getOwner() {
-		return this.owner;
-	}
-
-	public void setOwner(String owner) {
-		this.owner = owner;
-	}
-
-	@Column(name = "password")
-	public String getPassword() {
-		return this.password;
-	}
-
-	public void setPassword(String password) {
-		this.password = password;
-	}
-
-	@Column(name = "tunnel_user")
-	public String getTunnelUser() {
-		return this.tunnelUser;
-	}
-
-	public void setTunnelUser(String tunnelUser) {
-		this.tunnelUser = tunnelUser;
-	}
-
-	@Column(name = "tunnel_password")
-	public String getTunnelPassword() {
-		return this.tunnelPassword;
-	}
-
-	public void setTunnelPassword(String tunnelPassword) {
-		this.tunnelPassword = tunnelPassword;
-	}
-
-	@Column(name = "port")
-	public String getPort() {
-		return this.port;
-	}
-
-	public void setPort(String port) {
-		this.port = port;
-	}
-
-	@Column(name = "tunnel_server")
-	public String getTunnelServer() {
-		return this.tunnelServer;
-	}
-
-	public void setTunnelServer(String tunnelServer) {
-		this.tunnelServer = tunnelServer;
-	}
-
-	@Column(name = "date_created")
-	public Date getDateCreated() {
-		return this.dateCreated;
-	}
-
-	public void setDateCreated(Date created) {
-		this.dateCreated = created;
-	}
-
-	@ManyToOne(fetch = FetchType.LAZY)
-	@JoinColumn(name = "project_id", nullable = false, foreignKey = @ForeignKey(name = "fk_database_Project"))
-	public Project getProject() {
-		return this.project;
-	}
-
-	public void setProject(Project project) {
-		this.project = project;
-	}
-
-}
Index: rms-tap/src/main/java/info/ajanovski/eprms/tap/entities/Person.java
===================================================================
--- eprms-tap/src/main/java/info/ajanovski/eprms/tap/entities/Person.java	(revision 2090f001e6d9b81b1c77254e67b140aee64480e4)
+++ 	(revision )
@@ -1,96 +1,0 @@
-/*******************************************************************************
- * Copyright (C) 2021 Vangel V. Ajanovski
- *     
- * This file is part of the EPRMS - Educational Project and Resource Management 
- * System (hereinafter: EPRMS).
- *     
- * EPRMS is free software: you can redistribute it and/or modify it under the 
- * terms of the GNU General Public License as published by the Free Software 
- * Foundation, either version 3 of the License, or (at your option) any later 
- * version.
- *     
- * EPRMS is distributed in the hope that it will be useful, but WITHOUT ANY 
- * WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS 
- * FOR A PARTICULAR PURPOSE.  See the GNU General Public License for more 
- * details.
- *     
- * You should have received a copy of the GNU General Public License along 
- * with EPRMS.  If not, see <https://www.gnu.org/licenses/>.
- * 
- ******************************************************************************/
-
-package info.ajanovski.eprms.tap.entities;
-
-import java.util.*;
-import javax.persistence.*;
-
-/*
-*/
-@Entity
-@Table(schema = "epm_main", name = "person")
-public class Person implements java.io.Serializable {
-	private long personId;
-	private String firstName;
-	private String lastName;
-	private String email;
-	private String userName;
-	private String authString;
-
-	@Id
-	@GeneratedValue(strategy = GenerationType.IDENTITY)
-
-	@Column(name = "person_id", unique = true, nullable = false)
-	public long getPersonId() {
-		return this.personId;
-	}
-
-	public void setPersonId(long personId) {
-		this.personId = personId;
-	}
-
-	@Column(name = "first_name")
-	public String getFirstName() {
-		return this.firstName;
-	}
-
-	public void setFirstName(String firstName) {
-		this.firstName = firstName;
-	}
-
-	@Column(name = "last_name")
-	public String getLastName() {
-		return this.lastName;
-	}
-
-	public void setLastName(String lastName) {
-		this.lastName = lastName;
-	}
-
-	@Column(name = "email")
-	public String getEmail() {
-		return this.email;
-	}
-
-	public void setEmail(String email) {
-		this.email = email;
-	}
-
-	@Column(name = "user_name")
-	public String getUserName() {
-		return this.userName;
-	}
-
-	public void setUserName(String userName) {
-		this.userName = userName;
-	}
-
-	@Column(name = "auth_string")
-	public String getAuthString() {
-		return this.authString;
-	}
-
-	public void setAuthString(String authString) {
-		this.authString = authString;
-	}
-
-}
Index: rms-tap/src/main/java/info/ajanovski/eprms/tap/entities/PersonRole.java
===================================================================
--- eprms-tap/src/main/java/info/ajanovski/eprms/tap/entities/PersonRole.java	(revision 2090f001e6d9b81b1c77254e67b140aee64480e4)
+++ 	(revision )
@@ -1,69 +1,0 @@
-/*******************************************************************************
- * Copyright (C) 2021 Vangel V. Ajanovski
- *     
- * This file is part of the EPRMS - Educational Project and Resource Management 
- * System (hereinafter: EPRMS).
- *     
- * EPRMS is free software: you can redistribute it and/or modify it under the 
- * terms of the GNU General Public License as published by the Free Software 
- * Foundation, either version 3 of the License, or (at your option) any later 
- * version.
- *     
- * EPRMS is distributed in the hope that it will be useful, but WITHOUT ANY 
- * WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS 
- * FOR A PARTICULAR PURPOSE.  See the GNU General Public License for more 
- * details.
- *     
- * You should have received a copy of the GNU General Public License along 
- * with EPRMS.  If not, see <https://www.gnu.org/licenses/>.
- * 
- ******************************************************************************/
-
-package info.ajanovski.eprms.tap.entities;
-
-import java.util.*;
-import javax.persistence.*;
-
-/*
-*/
-@Entity
-@Table (schema="epm_util", name="person_role")
-public class PersonRole implements java.io.Serializable {
-	private long personRoleId;
-	private Person person;
-	private Role role;
-
-
-	@Id
-	@GeneratedValue(strategy = GenerationType.IDENTITY)
-
-	@Column(name = "person_role_id", unique = true, nullable = false)
-	public long getPersonRoleId() {
-		return this.personRoleId;
-	}
-
-	public void setPersonRoleId(long personRoleId) {
-		this.personRoleId=personRoleId;
-	}
-
-	@ManyToOne(fetch = FetchType.LAZY)
-	@JoinColumn(name = "person_id", nullable = false, foreignKey = @ForeignKey(name = "fk_person_role_person"))
-	public Person getPerson() {
-		return this.person;
-	}
-
-	public void setPerson(Person person) {
-		this.person=person;
-	}
-
-	@ManyToOne(fetch = FetchType.LAZY)
-	@JoinColumn(name = "role_id", nullable = false, foreignKey = @ForeignKey(name = "fk_person_role_role"))
-	public Role getRole() {
-		return this.role;
-	}
-
-	public void setRole(Role role) {
-		this.role=role;
-	}
-
-}
Index: rms-tap/src/main/java/info/ajanovski/eprms/tap/entities/Project.java
===================================================================
--- eprms-tap/src/main/java/info/ajanovski/eprms/tap/entities/Project.java	(revision 2090f001e6d9b81b1c77254e67b140aee64480e4)
+++ 	(revision )
@@ -1,107 +1,0 @@
-/*******************************************************************************
- * Copyright (C) 2021 Vangel V. Ajanovski
- *     
- * This file is part of the EPRMS - Educational Project and Resource Management 
- * System (hereinafter: EPRMS).
- *     
- * EPRMS is free software: you can redistribute it and/or modify it under the 
- * terms of the GNU General Public License as published by the Free Software 
- * Foundation, either version 3 of the License, or (at your option) any later 
- * version.
- *     
- * EPRMS is distributed in the hope that it will be useful, but WITHOUT ANY 
- * WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS 
- * FOR A PARTICULAR PURPOSE.  See the GNU General Public License for more 
- * details.
- *     
- * You should have received a copy of the GNU General Public License along 
- * with EPRMS.  If not, see <https://www.gnu.org/licenses/>.
- * 
- ******************************************************************************/
-
-package info.ajanovski.eprms.tap.entities;
-
-import java.util.*;
-import javax.persistence.*;
-
-/*
-*/
-@Entity
-@Table (schema="epm_main", name="Project")
-public class Project implements java.io.Serializable {
-	private long projectId;
-	private String title;
-	private String description;
-	private List<Responsibility> responsibilities = new ArrayList<Responsibility>();
-	private List<Repository> repositories = new ArrayList<Repository>();
-	private List<Database> databases = new ArrayList<Database>();
-	private List<Activity> activities = new ArrayList<Activity>();
-
-
-	@Id
-	@GeneratedValue(strategy = GenerationType.IDENTITY)
-
-	@Column(name = "project_id", unique = true, nullable = false)
-	public long getProjectId() {
-		return this.projectId;
-	}
-
-	public void setProjectId(long projectId) {
-		this.projectId=projectId;
-	}
-
-	@Column(name = "title", unique = true, nullable = false)
-	public String getTitle() {
-		return this.title;
-	}
-
-	public void setTitle(String title) {
-		this.title=title;
-	}
-
-	@Column(name = "description")
-	public String getDescription() {
-		return this.description;
-	}
-
-	public void setDescription(String description) {
-		this.description=description;
-	}
-
-	@OneToMany(fetch = FetchType.LAZY, mappedBy = "project")
-	public List<Responsibility> getResponsibilities() {
-		return this.responsibilities;
-	}
-
-	public void setResponsibilities(List<Responsibility> responsibilities) {
-		this.responsibilities=responsibilities;
-	}
-
-	@OneToMany(fetch = FetchType.LAZY, mappedBy = "project")
-	public List<Repository> getRepositories() {
-		return this.repositories;
-	}
-
-	public void setRepositories(List<Repository> repositories) {
-		this.repositories=repositories;
-	}
-
-	@OneToMany(fetch = FetchType.LAZY, mappedBy = "project")
-	public List<Database> getDatabases() {
-		return this.databases;
-	}
-
-	public void setDatabases(List<Database> databases) {
-		this.databases=databases;
-	}
-
-	@OneToMany(fetch = FetchType.LAZY, mappedBy = "project")
-	public List<Activity> getActivities() {
-		return this.activities;
-	}
-
-	public void setActivities(List<Activity> activities) {
-		this.activities=activities;
-	}
-
-}
Index: rms-tap/src/main/java/info/ajanovski/eprms/tap/entities/Repository.java
===================================================================
--- eprms-tap/src/main/java/info/ajanovski/eprms/tap/entities/Repository.java	(revision 2090f001e6d9b81b1c77254e67b140aee64480e4)
+++ 	(revision )
@@ -1,119 +1,0 @@
-/*******************************************************************************
- * Copyright (C) 2021 Vangel V. Ajanovski
- *     
- * This file is part of the EPRMS - Educational Project and Resource Management 
- * System (hereinafter: EPRMS).
- *     
- * EPRMS is free software: you can redistribute it and/or modify it under the 
- * terms of the GNU General Public License as published by the Free Software 
- * Foundation, either version 3 of the License, or (at your option) any later 
- * version.
- *     
- * EPRMS is distributed in the hope that it will be useful, but WITHOUT ANY 
- * WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS 
- * FOR A PARTICULAR PURPOSE.  See the GNU General Public License for more 
- * details.
- *     
- * You should have received a copy of the GNU General Public License along 
- * with EPRMS.  If not, see <https://www.gnu.org/licenses/>.
- * 
- ******************************************************************************/
-
-package info.ajanovski.eprms.tap.entities;
-
-import java.util.*;
-import javax.persistence.*;
-
-/*
-*/
-@Entity
-@Table(schema = "epm_main", name = "repository")
-public class Repository implements java.io.Serializable {
-	private long repositoryId;
-	private String title;
-	private String url;
-	private Date dateCreated;
-	private String type;
-	private Person person;
-	private Team team;
-	private Project project;
-
-	@Id
-	@GeneratedValue(strategy = GenerationType.IDENTITY)
-
-	@Column(name = "repository_id", unique = true, nullable = false)
-	public long getRepositoryId() {
-		return this.repositoryId;
-	}
-
-	public void setRepositoryId(long repositoryId) {
-		this.repositoryId = repositoryId;
-	}
-
-	@Column(name = "title")
-	public String getTitle() {
-		return this.title;
-	}
-
-	public void setTitle(String title) {
-		this.title = title;
-	}
-
-	@Column(name = "url")
-	public String getUrl() {
-		return this.url;
-	}
-
-	public void setUrl(String url) {
-		this.url = url;
-	}
-
-	@Column(name = "type")
-	public String getType() {
-		return this.type;
-	}
-
-	public void setType(String type) {
-		this.type = type;
-	}
-
-	@Column(name = "date_created")
-	public Date getDateCreated() {
-		return this.dateCreated;
-	}
-
-	public void setDateCreated(Date created) {
-		this.dateCreated = created;
-	}
-
-	@ManyToOne(fetch = FetchType.LAZY)
-	@JoinColumn(name = "person_id", nullable = true, foreignKey = @ForeignKey(name = "fk_repository_person"))
-	public Person getPerson() {
-		return this.person;
-	}
-
-	public void setPerson(Person person) {
-		this.person = person;
-	}
-
-	@ManyToOne(fetch = FetchType.LAZY)
-	@JoinColumn(name = "team_id", nullable = true, foreignKey = @ForeignKey(name = "fk_repository_team"))
-	public Team getTeam() {
-		return this.team;
-	}
-
-	public void setTeam(Team team) {
-		this.team = team;
-	}
-
-	@ManyToOne(fetch = FetchType.LAZY)
-	@JoinColumn(name = "project_id", nullable = true, foreignKey = @ForeignKey(name = "fk_repository_Project"))
-	public Project getProject() {
-		return this.project;
-	}
-
-	public void setProject(Project project) {
-		this.project = project;
-	}
-
-}
Index: rms-tap/src/main/java/info/ajanovski/eprms/tap/entities/Responsibility.java
===================================================================
--- eprms-tap/src/main/java/info/ajanovski/eprms/tap/entities/Responsibility.java	(revision 2090f001e6d9b81b1c77254e67b140aee64480e4)
+++ 	(revision )
@@ -1,69 +1,0 @@
-/*******************************************************************************
- * Copyright (C) 2021 Vangel V. Ajanovski
- *     
- * This file is part of the EPRMS - Educational Project and Resource Management 
- * System (hereinafter: EPRMS).
- *     
- * EPRMS is free software: you can redistribute it and/or modify it under the 
- * terms of the GNU General Public License as published by the Free Software 
- * Foundation, either version 3 of the License, or (at your option) any later 
- * version.
- *     
- * EPRMS is distributed in the hope that it will be useful, but WITHOUT ANY 
- * WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS 
- * FOR A PARTICULAR PURPOSE.  See the GNU General Public License for more 
- * details.
- *     
- * You should have received a copy of the GNU General Public License along 
- * with EPRMS.  If not, see <https://www.gnu.org/licenses/>.
- * 
- ******************************************************************************/
-
-package info.ajanovski.eprms.tap.entities;
-
-import java.util.*;
-import javax.persistence.*;
-
-/*
-*/
-@Entity
-@Table (schema="epm_main", name="responsibility")
-public class Responsibility implements java.io.Serializable {
-	private long responsibilityId;
-	private Project project;
-	private Team team;
-
-
-	@Id
-	@GeneratedValue(strategy = GenerationType.IDENTITY)
-
-	@Column(name = "responsibility_id", unique = true, nullable = false)
-	public long getResponsibilityId() {
-		return this.responsibilityId;
-	}
-
-	public void setResponsibilityId(long responsibilityId) {
-		this.responsibilityId=responsibilityId;
-	}
-
-	@ManyToOne(fetch = FetchType.LAZY)
-	@JoinColumn(name = "project_id", nullable = false, foreignKey = @ForeignKey(name = "fk_responsibility_Project"))
-	public Project getProject() {
-		return this.project;
-	}
-
-	public void setProject(Project project) {
-		this.project=project;
-	}
-
-	@ManyToOne(fetch = FetchType.LAZY)
-	@JoinColumn(name = "team_id", nullable = false, foreignKey = @ForeignKey(name = "fk_responsibility_team"))
-	public Team getTeam() {
-		return this.team;
-	}
-
-	public void setTeam(Team team) {
-		this.team=team;
-	}
-
-}
Index: rms-tap/src/main/java/info/ajanovski/eprms/tap/entities/Role.java
===================================================================
--- eprms-tap/src/main/java/info/ajanovski/eprms/tap/entities/Role.java	(revision 2090f001e6d9b81b1c77254e67b140aee64480e4)
+++ 	(revision )
@@ -1,57 +1,0 @@
-/*******************************************************************************
- * Copyright (C) 2021 Vangel V. Ajanovski
- *     
- * This file is part of the EPRMS - Educational Project and Resource Management 
- * System (hereinafter: EPRMS).
- *     
- * EPRMS is free software: you can redistribute it and/or modify it under the 
- * terms of the GNU General Public License as published by the Free Software 
- * Foundation, either version 3 of the License, or (at your option) any later 
- * version.
- *     
- * EPRMS is distributed in the hope that it will be useful, but WITHOUT ANY 
- * WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS 
- * FOR A PARTICULAR PURPOSE.  See the GNU General Public License for more 
- * details.
- *     
- * You should have received a copy of the GNU General Public License along 
- * with EPRMS.  If not, see <https://www.gnu.org/licenses/>.
- * 
- ******************************************************************************/
-
-package info.ajanovski.eprms.tap.entities;
-
-import java.util.*;
-import javax.persistence.*;
-
-/*
-*/
-@Entity
-@Table (schema="epm_util", name="role")
-public class Role implements java.io.Serializable {
-	private long roleId;
-	private String name;
-
-
-	@Id
-	@GeneratedValue(strategy = GenerationType.IDENTITY)
-
-	@Column(name = "role_id", unique = true, nullable = false)
-	public long getRoleId() {
-		return this.roleId;
-	}
-
-	public void setRoleId(long roleId) {
-		this.roleId=roleId;
-	}
-
-	@Column(name = "name")
-	public String getName() {
-		return this.name;
-	}
-
-	public void setName(String name) {
-		this.name=name;
-	}
-
-}
Index: rms-tap/src/main/java/info/ajanovski/eprms/tap/entities/Team.java
===================================================================
--- eprms-tap/src/main/java/info/ajanovski/eprms/tap/entities/Team.java	(revision 2090f001e6d9b81b1c77254e67b140aee64480e4)
+++ 	(revision )
@@ -1,67 +1,0 @@
-/*******************************************************************************
- * Copyright (C) 2021 Vangel V. Ajanovski
- *     
- * This file is part of the EPRMS - Educational Project and Resource Management 
- * System (hereinafter: EPRMS).
- *     
- * EPRMS is free software: you can redistribute it and/or modify it under the 
- * terms of the GNU General Public License as published by the Free Software 
- * Foundation, either version 3 of the License, or (at your option) any later 
- * version.
- *     
- * EPRMS is distributed in the hope that it will be useful, but WITHOUT ANY 
- * WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS 
- * FOR A PARTICULAR PURPOSE.  See the GNU General Public License for more 
- * details.
- *     
- * You should have received a copy of the GNU General Public License along 
- * with EPRMS.  If not, see <https://www.gnu.org/licenses/>.
- * 
- ******************************************************************************/
-
-package info.ajanovski.eprms.tap.entities;
-
-import java.util.*;
-import javax.persistence.*;
-
-/*
-*/
-@Entity
-@Table (schema="epm_main", name="team")
-public class Team implements java.io.Serializable {
-	private long teamId;
-	private String name;
-	private List<TeamMember> teamMembers = new ArrayList<TeamMember>();
-
-
-	@Id
-	@GeneratedValue(strategy = GenerationType.IDENTITY)
-
-	@Column(name = "team_id", unique = true, nullable = false)
-	public long getTeamId() {
-		return this.teamId;
-	}
-
-	public void setTeamId(long teamId) {
-		this.teamId=teamId;
-	}
-
-	@Column(name = "name")
-	public String getName() {
-		return this.name;
-	}
-
-	public void setName(String name) {
-		this.name=name;
-	}
-
-	@OneToMany(fetch = FetchType.LAZY, mappedBy = "team")
-	public List<TeamMember> getTeamMembers() {
-		return this.teamMembers;
-	}
-
-	public void setTeamMembers(List<TeamMember> teamMembers) {
-		this.teamMembers=teamMembers;
-	}
-
-}
Index: rms-tap/src/main/java/info/ajanovski/eprms/tap/entities/TeamMember.java
===================================================================
--- eprms-tap/src/main/java/info/ajanovski/eprms/tap/entities/TeamMember.java	(revision 2090f001e6d9b81b1c77254e67b140aee64480e4)
+++ 	(revision )
@@ -1,89 +1,0 @@
-/*******************************************************************************
- * Copyright (C) 2021 Vangel V. Ajanovski
- *     
- * This file is part of the EPRMS - Educational Project and Resource Management 
- * System (hereinafter: EPRMS).
- *     
- * EPRMS is free software: you can redistribute it and/or modify it under the 
- * terms of the GNU General Public License as published by the Free Software 
- * Foundation, either version 3 of the License, or (at your option) any later 
- * version.
- *     
- * EPRMS is distributed in the hope that it will be useful, but WITHOUT ANY 
- * WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS 
- * FOR A PARTICULAR PURPOSE.  See the GNU General Public License for more 
- * details.
- *     
- * You should have received a copy of the GNU General Public License along 
- * with EPRMS.  If not, see <https://www.gnu.org/licenses/>.
- * 
- ******************************************************************************/
-
-package info.ajanovski.eprms.tap.entities;
-
-import java.util.*;
-import javax.persistence.*;
-
-/*
-*/
-@Entity
-@Table (schema="epm_main", name="team_member")
-public class TeamMember implements java.io.Serializable {
-	private long teamMemberId;
-	private Long positionNumber;
-	private String role;
-	private Person person;
-	private Team team;
-
-
-	@Id
-	@GeneratedValue(strategy = GenerationType.IDENTITY)
-
-	@Column(name = "team_member_id", unique = true, nullable = false)
-	public long getTeamMemberId() {
-		return this.teamMemberId;
-	}
-
-	public void setTeamMemberId(long teamMemberId) {
-		this.teamMemberId=teamMemberId;
-	}
-
-	@Column(name = "position_number")
-	public Long getPositionNumber() {
-		return this.positionNumber;
-	}
-
-	public void setPositionNumber(Long positionNumber) {
-		this.positionNumber=positionNumber;
-	}
-
-	@Column(name = "role")
-	public String getRole() {
-		return this.role;
-	}
-
-	public void setRole(String role) {
-		this.role=role;
-	}
-
-	@ManyToOne(fetch = FetchType.LAZY)
-	@JoinColumn(name = "person_id", nullable = false, foreignKey = @ForeignKey(name = "fk_team_member_person"))
-	public Person getPerson() {
-		return this.person;
-	}
-
-	public void setPerson(Person person) {
-		this.person=person;
-	}
-
-	@ManyToOne(fetch = FetchType.LAZY)
-	@JoinColumn(name = "team_id", nullable = false, foreignKey = @ForeignKey(name = "fk_team_member_team"))
-	public Team getTeam() {
-		return this.team;
-	}
-
-	public void setTeam(Team team) {
-		this.team=team;
-	}
-
-}
Index: rms-tap/src/main/java/info/ajanovski/eprms/tap/entities/WorkEvaluation.java
===================================================================
--- eprms-tap/src/main/java/info/ajanovski/eprms/tap/entities/WorkEvaluation.java	(revision 2090f001e6d9b81b1c77254e67b140aee64480e4)
+++ 	(revision )
@@ -1,98 +1,0 @@
-/*******************************************************************************
- * Copyright (C) 2021 Vangel V. Ajanovski
- *     
- * This file is part of the EPRMS - Educational Project and Resource Management 
- * System (hereinafter: EPRMS).
- *     
- * EPRMS is free software: you can redistribute it and/or modify it under the 
- * terms of the GNU General Public License as published by the Free Software 
- * Foundation, either version 3 of the License, or (at your option) any later 
- * version.
- *     
- * EPRMS is distributed in the hope that it will be useful, but WITHOUT ANY 
- * WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS 
- * FOR A PARTICULAR PURPOSE.  See the GNU General Public License for more 
- * details.
- *     
- * You should have received a copy of the GNU General Public License along 
- * with EPRMS.  If not, see <https://www.gnu.org/licenses/>.
- * 
- ******************************************************************************/
-
-package info.ajanovski.eprms.tap.entities;
-
-import java.util.*;
-import javax.persistence.*;
-
-/*
-*/
-@Entity
-@Table (schema="epm_main", name="work_evaluation")
-public class WorkEvaluation implements java.io.Serializable {
-	private long workEvaluationId;
-	private String title;
-	private String description;
-	private Float percentEvaluated;
-	private Float points;
-	private WorkReport workReport;
-
-
-	@Id
-	@GeneratedValue(strategy = GenerationType.IDENTITY)
-
-	@Column(name = "work_evaluation_id", unique = true, nullable = false)
-	public long getWorkEvaluationId() {
-		return this.workEvaluationId;
-	}
-
-	public void setWorkEvaluationId(long workEvaluationId) {
-		this.workEvaluationId=workEvaluationId;
-	}
-
-	@Column(name = "title")
-	public String getTitle() {
-		return this.title;
-	}
-
-	public void setTitle(String title) {
-		this.title=title;
-	}
-
-	@Column(name = "description")
-	public String getDescription() {
-		return this.description;
-	}
-
-	public void setDescription(String description) {
-		this.description=description;
-	}
-
-	@Column(name = "percent_evaluated")
-	public Float getPercentEvaluated() {
-		return this.percentEvaluated;
-	}
-
-	public void setPercentEvaluated(Float percentEvaluated) {
-		this.percentEvaluated=percentEvaluated;
-	}
-
-	@Column(name = "points")
-	public Float getPoints() {
-		return this.points;
-	}
-
-	public void setPoints(Float points) {
-		this.points=points;
-	}
-
-	@ManyToOne(fetch = FetchType.LAZY)
-	@JoinColumn(name = "work_report_id", nullable = false, foreignKey = @ForeignKey(name = "fk_work_evaluation_work_report"))
-	public WorkReport getWorkReport() {
-		return this.workReport;
-	}
-
-	public void setWorkReport(WorkReport workReport) {
-		this.workReport=workReport;
-	}
-
-}
Index: rms-tap/src/main/java/info/ajanovski/eprms/tap/entities/WorkReport.java
===================================================================
--- eprms-tap/src/main/java/info/ajanovski/eprms/tap/entities/WorkReport.java	(revision 2090f001e6d9b81b1c77254e67b140aee64480e4)
+++ 	(revision )
@@ -1,121 +1,0 @@
-/*******************************************************************************
- * Copyright (C) 2021 Vangel V. Ajanovski
- *     
- * This file is part of the EPRMS - Educational Project and Resource Management 
- * System (hereinafter: EPRMS).
- *     
- * EPRMS is free software: you can redistribute it and/or modify it under the 
- * terms of the GNU General Public License as published by the Free Software 
- * Foundation, either version 3 of the License, or (at your option) any later 
- * version.
- *     
- * EPRMS is distributed in the hope that it will be useful, but WITHOUT ANY 
- * WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS 
- * FOR A PARTICULAR PURPOSE.  See the GNU General Public License for more 
- * details.
- *     
- * You should have received a copy of the GNU General Public License along 
- * with EPRMS.  If not, see <https://www.gnu.org/licenses/>.
- * 
- ******************************************************************************/
-
-package info.ajanovski.eprms.tap.entities;
-
-import java.util.*;
-import javax.persistence.*;
-
-/*
-*/
-@Entity
-@Table (schema="epm_main", name="work_report")
-public class WorkReport implements java.io.Serializable {
-	private long workReportId;
-	private String title;
-	private String description;
-	private Float percentReported;
-	private Activity activity;
-	private Person person;
-	private WorkReport continuationOfWorkReport;
-	private Team team;
-
-
-	@Id
-	@GeneratedValue(strategy = GenerationType.IDENTITY)
-
-	@Column(name = "work_report_id", unique = true, nullable = false)
-	public long getWorkReportId() {
-		return this.workReportId;
-	}
-
-	public void setWorkReportId(long workReportId) {
-		this.workReportId=workReportId;
-	}
-
-	@Column(name = "title")
-	public String getTitle() {
-		return this.title;
-	}
-
-	public void setTitle(String title) {
-		this.title=title;
-	}
-
-	@Column(name = "description")
-	public String getDescription() {
-		return this.description;
-	}
-
-	public void setDescription(String description) {
-		this.description=description;
-	}
-
-	@Column(name = "percent_reported")
-	public Float getPercentReported() {
-		return this.percentReported;
-	}
-
-	public void setPercentReported(Float percentReported) {
-		this.percentReported=percentReported;
-	}
-
-	@ManyToOne(fetch = FetchType.LAZY)
-	@JoinColumn(name = "activity_id", nullable = false, foreignKey = @ForeignKey(name = "fk_work_report_activity"))
-	public Activity getActivity() {
-		return this.activity;
-	}
-
-	public void setActivity(Activity activity) {
-		this.activity=activity;
-	}
-
-	@ManyToOne(fetch = FetchType.LAZY)
-	@JoinColumn(name = "person_id", nullable = true, foreignKey = @ForeignKey(name = "fk_work_report_person"))
-	public Person getPerson() {
-		return this.person;
-	}
-
-	public void setPerson(Person person) {
-		this.person=person;
-	}
-
-	@ManyToOne(fetch = FetchType.LAZY)
-	@JoinColumn(name = "continuation_of_work_report_id", nullable = true, foreignKey = @ForeignKey(name = "fk_work_report_work_report"))
-	public WorkReport getContinuationOfWorkReport() {
-		return this.continuationOfWorkReport;
-	}
-
-	public void setContinuationOfWorkReport(WorkReport continuationOfWorkReport) {
-		this.continuationOfWorkReport=continuationOfWorkReport;
-	}
-
-	@ManyToOne(fetch = FetchType.LAZY)
-	@JoinColumn(name = "team_id", nullable = true, foreignKey = @ForeignKey(name = "fk_work_report_team"))
-	public Team getTeam() {
-		return this.team;
-	}
-
-	public void setTeam(Team team) {
-		this.team=team;
-	}
-
-}
Index: eprms-tap/src/main/java/info/ajanovski/eprms/tap/pages/MyDatabases.java
===================================================================
--- eprms-tap/src/main/java/info/ajanovski/eprms/tap/pages/MyDatabases.java	(revision 2090f001e6d9b81b1c77254e67b140aee64480e4)
+++ eprms-tap/src/main/java/info/ajanovski/eprms/tap/pages/MyDatabases.java	(revision f1d066c061cda95871358a60f749ea06909f629d)
@@ -27,8 +27,8 @@
 import org.apache.tapestry5.ioc.annotations.Inject;
 
+import info.ajanovski.eprms.model.entities.Database;
 import info.ajanovski.eprms.tap.annotations.AdministratorPage;
 import info.ajanovski.eprms.tap.annotations.InstructorPage;
 import info.ajanovski.eprms.tap.annotations.StudentPage;
-import info.ajanovski.eprms.tap.entities.Database;
 import info.ajanovski.eprms.tap.services.GenericService;
 import info.ajanovski.eprms.tap.services.ResourceManager;
Index: eprms-tap/src/main/java/info/ajanovski/eprms/tap/pages/MyRepositories.java
===================================================================
--- eprms-tap/src/main/java/info/ajanovski/eprms/tap/pages/MyRepositories.java	(revision 2090f001e6d9b81b1c77254e67b140aee64480e4)
+++ eprms-tap/src/main/java/info/ajanovski/eprms/tap/pages/MyRepositories.java	(revision f1d066c061cda95871358a60f749ea06909f629d)
@@ -27,8 +27,8 @@
 import org.apache.tapestry5.ioc.annotations.Inject;
 
+import info.ajanovski.eprms.model.entities.Repository;
 import info.ajanovski.eprms.tap.annotations.AdministratorPage;
 import info.ajanovski.eprms.tap.annotations.InstructorPage;
 import info.ajanovski.eprms.tap.annotations.StudentPage;
-import info.ajanovski.eprms.tap.entities.Repository;
 import info.ajanovski.eprms.tap.services.GenericService;
 import info.ajanovski.eprms.tap.services.ResourceManager;
Index: eprms-tap/src/main/java/info/ajanovski/eprms/tap/pages/MyRepositoryAuth.java
===================================================================
--- eprms-tap/src/main/java/info/ajanovski/eprms/tap/pages/MyRepositoryAuth.java	(revision 2090f001e6d9b81b1c77254e67b140aee64480e4)
+++ eprms-tap/src/main/java/info/ajanovski/eprms/tap/pages/MyRepositoryAuth.java	(revision f1d066c061cda95871358a60f749ea06909f629d)
@@ -34,8 +34,8 @@
 import org.apache.tapestry5.ioc.annotations.Inject;
 
+import info.ajanovski.eprms.model.entities.Person;
 import info.ajanovski.eprms.tap.annotations.AdministratorPage;
 import info.ajanovski.eprms.tap.annotations.InstructorPage;
 import info.ajanovski.eprms.tap.annotations.StudentPage;
-import info.ajanovski.eprms.tap.entities.Person;
 import info.ajanovski.eprms.tap.services.GenericService;
 import info.ajanovski.eprms.tap.util.UserInfo;
Index: eprms-tap/src/main/java/info/ajanovski/eprms/tap/pages/admin/ManageDatabases.java
===================================================================
--- eprms-tap/src/main/java/info/ajanovski/eprms/tap/pages/admin/ManageDatabases.java	(revision 2090f001e6d9b81b1c77254e67b140aee64480e4)
+++ eprms-tap/src/main/java/info/ajanovski/eprms/tap/pages/admin/ManageDatabases.java	(revision f1d066c061cda95871358a60f749ea06909f629d)
@@ -9,7 +9,7 @@
 import org.apache.tapestry5.ioc.annotations.Inject;
 
+import info.ajanovski.eprms.model.entities.Database;
 import info.ajanovski.eprms.tap.annotations.AdministratorPage;
 import info.ajanovski.eprms.tap.annotations.InstructorPage;
-import info.ajanovski.eprms.tap.entities.Database;
 import info.ajanovski.eprms.tap.services.GenericService;
 
Index: eprms-tap/src/main/java/info/ajanovski/eprms/tap/pages/admin/ManageRepositories.java
===================================================================
--- eprms-tap/src/main/java/info/ajanovski/eprms/tap/pages/admin/ManageRepositories.java	(revision 2090f001e6d9b81b1c77254e67b140aee64480e4)
+++ eprms-tap/src/main/java/info/ajanovski/eprms/tap/pages/admin/ManageRepositories.java	(revision f1d066c061cda95871358a60f749ea06909f629d)
@@ -8,7 +8,7 @@
 import org.apache.tapestry5.ioc.annotations.Inject;
 
+import info.ajanovski.eprms.model.entities.Repository;
 import info.ajanovski.eprms.tap.annotations.AdministratorPage;
 import info.ajanovski.eprms.tap.annotations.InstructorPage;
-import info.ajanovski.eprms.tap.entities.Repository;
 import info.ajanovski.eprms.tap.services.GenericService;
 
Index: eprms-tap/src/main/java/info/ajanovski/eprms/tap/pages/admin/Projects.java
===================================================================
--- eprms-tap/src/main/java/info/ajanovski/eprms/tap/pages/admin/Projects.java	(revision 2090f001e6d9b81b1c77254e67b140aee64480e4)
+++ eprms-tap/src/main/java/info/ajanovski/eprms/tap/pages/admin/Projects.java	(revision f1d066c061cda95871358a60f749ea06909f629d)
@@ -32,13 +32,13 @@
 import org.apache.tapestry5.services.SelectModelFactory;
 
+import info.ajanovski.eprms.model.entities.Database;
+import info.ajanovski.eprms.model.entities.Person;
+import info.ajanovski.eprms.model.entities.Project;
+import info.ajanovski.eprms.model.entities.Repository;
+import info.ajanovski.eprms.model.entities.Responsibility;
+import info.ajanovski.eprms.model.entities.Team;
+import info.ajanovski.eprms.model.entities.TeamMember;
 import info.ajanovski.eprms.tap.annotations.AdministratorPage;
 import info.ajanovski.eprms.tap.annotations.InstructorPage;
-import info.ajanovski.eprms.tap.entities.Database;
-import info.ajanovski.eprms.tap.entities.Person;
-import info.ajanovski.eprms.tap.entities.Project;
-import info.ajanovski.eprms.tap.entities.Repository;
-import info.ajanovski.eprms.tap.entities.Responsibility;
-import info.ajanovski.eprms.tap.entities.Team;
-import info.ajanovski.eprms.tap.entities.TeamMember;
 import info.ajanovski.eprms.tap.services.GenericService;
 import info.ajanovski.eprms.tap.util.UserInfo;
Index: eprms-tap/src/main/java/info/ajanovski/eprms/tap/pages/admin/Teams.java
===================================================================
--- eprms-tap/src/main/java/info/ajanovski/eprms/tap/pages/admin/Teams.java	(revision 2090f001e6d9b81b1c77254e67b140aee64480e4)
+++ eprms-tap/src/main/java/info/ajanovski/eprms/tap/pages/admin/Teams.java	(revision f1d066c061cda95871358a60f749ea06909f629d)
@@ -27,7 +27,7 @@
 import org.apache.tapestry5.ioc.annotations.Inject;
 
+import info.ajanovski.eprms.model.entities.Team;
 import info.ajanovski.eprms.tap.annotations.AdministratorPage;
 import info.ajanovski.eprms.tap.annotations.InstructorPage;
-import info.ajanovski.eprms.tap.entities.Team;
 import info.ajanovski.eprms.tap.services.GenericService;
 import info.ajanovski.eprms.tap.util.UserInfo;
Index: eprms-tap/src/main/java/info/ajanovski/eprms/tap/services/AccessController.java
===================================================================
--- eprms-tap/src/main/java/info/ajanovski/eprms/tap/services/AccessController.java	(revision 2090f001e6d9b81b1c77254e67b140aee64480e4)
+++ eprms-tap/src/main/java/info/ajanovski/eprms/tap/services/AccessController.java	(revision f1d066c061cda95871358a60f749ea06909f629d)
@@ -40,5 +40,5 @@
 import info.ajanovski.eprms.tap.annotations.StudentPage;
 import info.ajanovski.eprms.tap.pages.Index;
-import info.ajanovski.eprms.tap.util.ModelConstants;
+import info.ajanovski.eprms.tap.util.AppConstants;
 import info.ajanovski.eprms.tap.util.UserInfo;
 
@@ -66,5 +66,5 @@
 		logger.debug("check access for {}", pageName);
 		if (pageName.equals("") || pageName.equals("/")) {
-			pageName = ModelConstants.PageIndex;
+			pageName = AppConstants.PageIndex;
 		}
 
Index: eprms-tap/src/main/java/info/ajanovski/eprms/tap/services/AppModule.java
===================================================================
--- eprms-tap/src/main/java/info/ajanovski/eprms/tap/services/AppModule.java	(revision 2090f001e6d9b81b1c77254e67b140aee64480e4)
+++ eprms-tap/src/main/java/info/ajanovski/eprms/tap/services/AppModule.java	(revision f1d066c061cda95871358a60f749ea06909f629d)
@@ -25,6 +25,8 @@
 
 import org.apache.tapestry5.SymbolConstants;
+import org.apache.tapestry5.commons.Configuration;
 import org.apache.tapestry5.commons.MappedConfiguration;
 import org.apache.tapestry5.commons.OrderedConfiguration;
+import org.apache.tapestry5.hibernate.HibernateEntityPackageManager;
 import org.apache.tapestry5.http.services.Request;
 import org.apache.tapestry5.http.services.RequestFilter;
@@ -43,7 +45,7 @@
 import org.slf4j.Logger;
 
-import info.ajanovski.eprms.tap.services.data.GenericDao;
-import info.ajanovski.eprms.tap.services.data.PersonDao;
-import info.ajanovski.eprms.tap.services.data.ResourceDao;
+import info.ajanovski.eprms.tap.data.GenericDao;
+import info.ajanovski.eprms.tap.data.PersonDao;
+import info.ajanovski.eprms.tap.data.ResourceDao;
 import info.ajanovski.eprms.tap.util.AppConfig;
 
@@ -69,4 +71,6 @@
 		configuration.add(SymbolConstants.HMAC_PASSPHRASE,
 				AppConfig.getString("tapestry.hmac-passphrase") + UUID.randomUUID());
+		configuration.add(SymbolConstants.ENABLE_HTML5_SUPPORT, true);
+		configuration.add(SymbolConstants.COMPRESS_WHITESPACE, false);
 	}
 
@@ -75,4 +79,9 @@
 	public static void setupEnvironment(MappedConfiguration<String, Object> configuration) {
 		configuration.add(SymbolConstants.JAVASCRIPT_INFRASTRUCTURE_PROVIDER, "jquery");
+	}
+
+	@Contribute(HibernateEntityPackageManager.class)
+	public static void addHibernateEntityPackageManager(Configuration<String> configuration) {
+		configuration.add("info.ajanovski.eprms.model.entities");
 	}
 
@@ -85,5 +94,5 @@
 				} finally {
 					long elapsed = System.currentTimeMillis() - startTime;
-					log.info("Request time: {} ms", elapsed);
+					log.debug("Request time: {} ms", elapsed);
 				}
 			}
@@ -102,7 +111,6 @@
 
 	public static final void contributeComponentRequestHandler(
-			OrderedConfiguration<ComponentRequestFilter> configuration,
-			ComponentRequestFilter accessController, ApplicationStateManager asm,
-			ComponentSource componentSource) {
+			OrderedConfiguration<ComponentRequestFilter> configuration, ComponentRequestFilter accessController,
+			ApplicationStateManager asm, ComponentSource componentSource) {
 		configuration.add("AccessController", accessController, "before:*");
 	}
Index: eprms-tap/src/main/java/info/ajanovski/eprms/tap/services/GenericServiceImpl.java
===================================================================
--- eprms-tap/src/main/java/info/ajanovski/eprms/tap/services/GenericServiceImpl.java	(revision 2090f001e6d9b81b1c77254e67b140aee64480e4)
+++ eprms-tap/src/main/java/info/ajanovski/eprms/tap/services/GenericServiceImpl.java	(revision f1d066c061cda95871358a60f749ea06909f629d)
@@ -25,5 +25,5 @@
 import org.apache.tapestry5.ioc.annotations.Inject;
 
-import info.ajanovski.eprms.tap.services.data.GenericDao;
+import info.ajanovski.eprms.tap.data.GenericDao;
 
 public class GenericServiceImpl implements GenericService {
Index: eprms-tap/src/main/java/info/ajanovski/eprms/tap/services/PersonManager.java
===================================================================
--- eprms-tap/src/main/java/info/ajanovski/eprms/tap/services/PersonManager.java	(revision 2090f001e6d9b81b1c77254e67b140aee64480e4)
+++ eprms-tap/src/main/java/info/ajanovski/eprms/tap/services/PersonManager.java	(revision f1d066c061cda95871358a60f749ea06909f629d)
@@ -23,6 +23,6 @@
 import java.util.List;
 
-import info.ajanovski.eprms.tap.entities.Person;
-import info.ajanovski.eprms.tap.entities.PersonRole;
+import info.ajanovski.eprms.model.entities.Person;
+import info.ajanovski.eprms.model.entities.PersonRole;
 
 public interface PersonManager {
Index: eprms-tap/src/main/java/info/ajanovski/eprms/tap/services/PersonManagerImpl.java
===================================================================
--- eprms-tap/src/main/java/info/ajanovski/eprms/tap/services/PersonManagerImpl.java	(revision 2090f001e6d9b81b1c77254e67b140aee64480e4)
+++ eprms-tap/src/main/java/info/ajanovski/eprms/tap/services/PersonManagerImpl.java	(revision f1d066c061cda95871358a60f749ea06909f629d)
@@ -25,7 +25,7 @@
 import org.apache.tapestry5.ioc.annotations.Inject;
 
-import info.ajanovski.eprms.tap.entities.Person;
-import info.ajanovski.eprms.tap.entities.PersonRole;
-import info.ajanovski.eprms.tap.services.data.PersonDao;
+import info.ajanovski.eprms.model.entities.Person;
+import info.ajanovski.eprms.model.entities.PersonRole;
+import info.ajanovski.eprms.tap.data.PersonDao;
 
 public class PersonManagerImpl implements PersonManager {
Index: eprms-tap/src/main/java/info/ajanovski/eprms/tap/services/ResourceManager.java
===================================================================
--- eprms-tap/src/main/java/info/ajanovski/eprms/tap/services/ResourceManager.java	(revision 2090f001e6d9b81b1c77254e67b140aee64480e4)
+++ eprms-tap/src/main/java/info/ajanovski/eprms/tap/services/ResourceManager.java	(revision f1d066c061cda95871358a60f749ea06909f629d)
@@ -23,6 +23,6 @@
 import java.util.List;
 
-import info.ajanovski.eprms.tap.entities.Database;
-import info.ajanovski.eprms.tap.entities.Repository;
+import info.ajanovski.eprms.model.entities.Database;
+import info.ajanovski.eprms.model.entities.Repository;
 
 public interface ResourceManager {
Index: eprms-tap/src/main/java/info/ajanovski/eprms/tap/services/ResourceManagerImpl.java
===================================================================
--- eprms-tap/src/main/java/info/ajanovski/eprms/tap/services/ResourceManagerImpl.java	(revision 2090f001e6d9b81b1c77254e67b140aee64480e4)
+++ eprms-tap/src/main/java/info/ajanovski/eprms/tap/services/ResourceManagerImpl.java	(revision f1d066c061cda95871358a60f749ea06909f629d)
@@ -26,7 +26,7 @@
 import org.apache.tapestry5.ioc.annotations.Inject;
 
-import info.ajanovski.eprms.tap.entities.Database;
-import info.ajanovski.eprms.tap.entities.Repository;
-import info.ajanovski.eprms.tap.services.data.ResourceDao;
+import info.ajanovski.eprms.model.entities.Database;
+import info.ajanovski.eprms.model.entities.Repository;
+import info.ajanovski.eprms.tap.data.ResourceDao;
 
 public class ResourceManagerImpl implements ResourceManager {
Index: rms-tap/src/main/java/info/ajanovski/eprms/tap/services/data/GenericDao.java
===================================================================
--- eprms-tap/src/main/java/info/ajanovski/eprms/tap/services/data/GenericDao.java	(revision 2090f001e6d9b81b1c77254e67b140aee64480e4)
+++ 	(revision )
@@ -1,44 +1,0 @@
-/*******************************************************************************
- * Copyright (C) 2021 Vangel V. Ajanovski
- *     
- * This file is part of the EPRMS - Educational Project and Resource Management 
- * System (hereinafter: EPRMS).
- *     
- * EPRMS is free software: you can redistribute it and/or modify it under the 
- * terms of the GNU General Public License as published by the Free Software 
- * Foundation, either version 3 of the License, or (at your option) any later 
- * version.
- *     
- * EPRMS is distributed in the hope that it will be useful, but WITHOUT ANY 
- * WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS 
- * FOR A PARTICULAR PURPOSE.  See the GNU General Public License for more 
- * details.
- *     
- * You should have received a copy of the GNU General Public License along 
- * with EPRMS.  If not, see <https://www.gnu.org/licenses/>.
- * 
- ******************************************************************************/
-
-package info.ajanovski.eprms.tap.services.data;
-
-import java.util.List;
-
-public interface GenericDao {
-	public Object getByPK(Class<?> classToLoad, long id);
-
-	public void deleteByPK(Class<?> classToLoad, long id);
-
-	public void delete(Object object);
-
-	public List<Object> getQueryResult(String guery);
-
-	public void saveOrUpdate(Object object);
-
-	public Object save(Object object);
-
-	public List<?> getAll(Class<?> classToLoad);
-
-	public Object getByCode(Class<?> classToLoad, String code);
-
-	public List<?> getByTitleSubstring(Class<?> classToSearch, String searchSubString);
-}
Index: rms-tap/src/main/java/info/ajanovski/eprms/tap/services/data/GenericDaoImpl.java
===================================================================
--- eprms-tap/src/main/java/info/ajanovski/eprms/tap/services/data/GenericDaoImpl.java	(revision 2090f001e6d9b81b1c77254e67b140aee64480e4)
+++ 	(revision )
@@ -1,118 +1,0 @@
-/*******************************************************************************
- * Copyright (C) 2021 Vangel V. Ajanovski
- *     
- * This file is part of the EPRMS - Educational Project and Resource 
- * Management System (hereinafter: EPRMS).
- *     
- * EPRMS is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *     
- * EPRMS is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *     
- * You should have received a copy of the GNU General Public License
- * along with EPRMS.  If not, see <https://www.gnu.org/licenses/>.
- * 
- ******************************************************************************/
-
-package info.ajanovski.eprms.tap.services.data;
-
-import java.util.ArrayList;
-import java.util.Iterator;
-import java.util.List;
-
-import org.apache.tapestry5.ioc.annotations.Inject;
-import org.hibernate.Query;
-import org.hibernate.Session;
-import org.hibernate.criterion.MatchMode;
-import org.hibernate.criterion.Restrictions;
-import org.hibernate.exception.DataException;
-import org.slf4j.Logger;
-
-public class GenericDaoImpl implements GenericDao {
-
-	@Inject
-	private Session session;
-
-	@Inject
-	private Logger logger;
-
-	@Override
-	public Object getByPK(Class<?> classToLoad, long id) {
-		return session.get(classToLoad, id);
-	}
-
-	@Override
-	public void deleteByPK(Class<?> classToLoad, long id) {
-		session.delete(getByPK(classToLoad, id));
-	}
-
-	@Override
-	public void delete(Object object) {
-		session.delete(object);
-	}
-
-	@Override
-	public List<Object> getQueryResult(String guery) {
-		try {
-			Query q = session.createQuery(guery);
-			List<Object> l = new ArrayList<Object>();
-
-			for (Iterator<?> it = q.iterate(); it.hasNext();) {
-				Object[] row = (Object[]) it.next();
-				for (int i = 0; i < row.length; i++) {
-					l.add(row[i]);
-				}
-				l.add(" | ");
-			}
-
-			return l;
-
-		} catch (DataException e) {
-			// Critical errors : database unreachable, etc.
-			logger.error(
-					"Exception - DataAccessException occurs : " + e.getMessage() + " on complete getQueryResult().");
-			return null;
-		}
-	}
-
-	@Override
-	public void saveOrUpdate(Object object) {
-		session.saveOrUpdate(object);
-	}
-
-	@Override
-	public Object save(Object object) {
-		// Object a = session.merge(object);
-		return session.save(object);
-	}
-
-	@Override
-	public List<?> getAll(Class<?> classToLoad) {
-		return session.createCriteria(classToLoad).list();
-	}
-
-	@Override
-	public Object getByCode(Class<?> classToLoad, String code) {
-		List<?> l = session.createCriteria(classToLoad).add(Restrictions.eq("code", code)).list();
-		if (l.size() > 0) {
-			return l.get(0);
-		} else {
-			return null;
-		}
-	}
-
-	@Override
-	public List<?> getByTitleSubstring(Class<?> classToSearch, String searchSubString) {
-		if (searchSubString != null) {
-			return (List<?>) session.createCriteria(classToSearch)
-					.add(Restrictions.ilike("title", searchSubString, MatchMode.ANYWHERE)).list();
-		} else {
-			return null;
-		}
-	}
-}
Index: rms-tap/src/main/java/info/ajanovski/eprms/tap/services/data/PersonDao.java
===================================================================
--- eprms-tap/src/main/java/info/ajanovski/eprms/tap/services/data/PersonDao.java	(revision 2090f001e6d9b81b1c77254e67b140aee64480e4)
+++ 	(revision )
@@ -1,42 +1,0 @@
-/*******************************************************************************
- * Copyright (C) 2021 Vangel V. Ajanovski
- *     
- * This file is part of the EPRMS - Educational Project and Resource 
- * Management System (hereinafter: EPRMS).
- *     
- * EPRMS is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *     
- * EPRMS is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *     
- * You should have received a copy of the GNU General Public License
- * along with EPRMS.  If not, see <https://www.gnu.org/licenses/>.
- * 
- ******************************************************************************/
-
-package info.ajanovski.eprms.tap.services.data;
-
-import java.util.List;
-
-import info.ajanovski.eprms.tap.entities.Person;
-import info.ajanovski.eprms.tap.entities.PersonRole;
-
-public interface PersonDao {
-	public List<Person> getAllPersons();
-
-	public Person getPersonByUsername(String username);
-
-	public String getPersonFullName(Person person);
-
-	public String getPersonFullNameWithId(Person person);
-
-	public List<Person> getPersonByFilter(String filter);
-
-	public List<PersonRole> getPersonRolesForPerson(long personId);
-
-}
Index: rms-tap/src/main/java/info/ajanovski/eprms/tap/services/data/PersonDaoImpl.java
===================================================================
--- eprms-tap/src/main/java/info/ajanovski/eprms/tap/services/data/PersonDaoImpl.java	(revision 2090f001e6d9b81b1c77254e67b140aee64480e4)
+++ 	(revision )
@@ -1,87 +1,0 @@
-/*******************************************************************************
- * Copyright (C) 2021 Vangel V. Ajanovski
- *     
- * This file is part of the EPRMS - Educational Project and Resource 
- * Management System (hereinafter: EPRMS).
- *     
- * EPRMS is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *     
- * EPRMS is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *     
- * You should have received a copy of the GNU General Public License
- * along with EPRMS.  If not, see <https://www.gnu.org/licenses/>.
- * 
- ******************************************************************************/
-
-package info.ajanovski.eprms.tap.services.data;
-
-import java.util.List;
-
-import org.apache.tapestry5.ioc.annotations.Inject;
-import org.hibernate.Query;
-import org.hibernate.Session;
-import org.hibernate.criterion.Order;
-import org.hibernate.criterion.Restrictions;
-import org.hibernate.exception.DataException;
-import org.slf4j.Logger;
-
-import info.ajanovski.eprms.tap.entities.Person;
-import info.ajanovski.eprms.tap.entities.PersonRole;
-import info.ajanovski.eprms.tap.util.UsefulMethods;
-
-public class PersonDaoImpl implements PersonDao {
-	@Inject
-	private Logger logger;
-
-	@Inject
-	private Session session;
-
-	@Override
-	public List<Person> getAllPersons() {
-		try {
-			return UsefulMethods.castList(Person.class,
-					session.createCriteria(Person.class).addOrder(Order.asc("lastName")).list());
-		} catch (DataException e) {
-			logger.error("Exception - DataAccessException occurs : {} on complete getAllPersons().", e.getMessage());
-			return null;
-		}
-	}
-
-	@Override
-	public Person getPersonByUsername(String username) {
-		return (Person) session.createCriteria(Person.class).add(Restrictions.eq("userName", username))
-				.setReadOnly(true).setCacheable(true).uniqueResult();
-	}
-
-	@Override
-	public List<Person> getPersonByFilter(String filter) {
-		String f = "%" + filter.toLowerCase() + "%";
-		Query q = session
-				.createQuery("select p from Person p  where (lower(concat(userName,firstName,lastName)) like :filter)");
-		q.setParameter("filter", f);
-		return UsefulMethods.castList(Person.class, q.list());
-	}
-
-	@Override
-	public List<PersonRole> getPersonRolesForPerson(long personId) {
-		return (List<PersonRole>) session.createCriteria(PersonRole.class, "pr")
-				.add(Restrictions.eq("pr.person.personId", personId)).list();
-	}
-
-	@Override
-	public String getPersonFullName(Person person) {
-		return person.getLastName() + " " + person.getFirstName();
-	}
-
-	@Override
-	public String getPersonFullNameWithId(Person person) {
-		return person.getLastName() + " " + person.getFirstName() + " [" + person.getUserName() + "]";
-	}
-
-}
Index: rms-tap/src/main/java/info/ajanovski/eprms/tap/services/data/ProjectDao.java
===================================================================
--- eprms-tap/src/main/java/info/ajanovski/eprms/tap/services/data/ProjectDao.java	(revision 2090f001e6d9b81b1c77254e67b140aee64480e4)
+++ 	(revision )
@@ -1,26 +1,0 @@
-/*******************************************************************************
- * Copyright (C) 2021 Vangel V. Ajanovski
- *     
- * This file is part of the EPRMS - Educational Project and Resource 
- * Management System (hereinafter: EPRMS).
- *     
- * EPRMS is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *     
- * EPRMS is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *     
- * You should have received a copy of the GNU General Public License
- * along with EPRMS.  If not, see <https://www.gnu.org/licenses/>.
- * 
- ******************************************************************************/
-
-package info.ajanovski.eprms.tap.services.data;
-
-public interface ProjectDao {
-
-}
Index: rms-tap/src/main/java/info/ajanovski/eprms/tap/services/data/ProjectDaoImpl.java
===================================================================
--- eprms-tap/src/main/java/info/ajanovski/eprms/tap/services/data/ProjectDaoImpl.java	(revision 2090f001e6d9b81b1c77254e67b140aee64480e4)
+++ 	(revision )
@@ -1,26 +1,0 @@
-/*******************************************************************************
- * Copyright (C) 2021 Vangel V. Ajanovski
- *     
- * This file is part of the EPRMS - Educational Project and Resource 
- * Management System (hereinafter: EPRMS).
- *     
- * EPRMS is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *     
- * EPRMS is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *     
- * You should have received a copy of the GNU General Public License
- * along with EPRMS.  If not, see <https://www.gnu.org/licenses/>.
- * 
- ******************************************************************************/
-
-package info.ajanovski.eprms.tap.services.data;
-
-public class ProjectDaoImpl implements ProjectDao {
-
-}
Index: rms-tap/src/main/java/info/ajanovski/eprms/tap/services/data/ResourceDao.java
===================================================================
--- eprms-tap/src/main/java/info/ajanovski/eprms/tap/services/data/ResourceDao.java	(revision 2090f001e6d9b81b1c77254e67b140aee64480e4)
+++ 	(revision )
@@ -1,39 +1,0 @@
-/*******************************************************************************
- * Copyright (C) 2021 Vangel V. Ajanovski
- *     
- * This file is part of the EPRMS - Educational Project and Resource 
- * Management System (hereinafter: EPRMS).
- *     
- * EPRMS is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *     
- * EPRMS is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *     
- * You should have received a copy of the GNU General Public License
- * along with EPRMS.  If not, see <https://www.gnu.org/licenses/>.
- * 
- ******************************************************************************/
-
-package info.ajanovski.eprms.tap.services.data;
-
-import java.util.List;
-
-import info.ajanovski.eprms.tap.entities.Database;
-import info.ajanovski.eprms.tap.entities.Repository;
-
-public interface ResourceDao {
-
-	public List<Repository> getRepositoriesByPerson(long personId);
-
-	public List<Repository> getRepositoriesByTeam(long personId);
-
-	public List<Repository> getRepositoriesByProject(long personId);
-
-	public List<Database> getDatabasesByProject(long personId);
-
-}
Index: rms-tap/src/main/java/info/ajanovski/eprms/tap/services/data/ResourceDaoImpl.java
===================================================================
--- eprms-tap/src/main/java/info/ajanovski/eprms/tap/services/data/ResourceDaoImpl.java	(revision 2090f001e6d9b81b1c77254e67b140aee64480e4)
+++ 	(revision )
@@ -1,88 +1,0 @@
-/*******************************************************************************
- * Copyright (C) 2021 Vangel V. Ajanovski
- *     
- * This file is part of the EPRMS - Educational Project and Resource 
- * Management System (hereinafter: EPRMS).
- *     
- * EPRMS is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *     
- * EPRMS is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *     
- * You should have received a copy of the GNU General Public License
- * along with EPRMS.  If not, see <https://www.gnu.org/licenses/>.
- * 
- ******************************************************************************/
-
-package info.ajanovski.eprms.tap.services.data;
-
-import java.util.ArrayList;
-import java.util.List;
-
-import org.apache.tapestry5.ioc.annotations.Inject;
-import org.hibernate.Session;
-
-import info.ajanovski.eprms.tap.entities.Database;
-import info.ajanovski.eprms.tap.entities.Repository;
-
-public class ResourceDaoImpl implements ResourceDao {
-
-	@Inject
-	private Session session;
-
-	@Override
-	public List<Repository> getRepositoriesByPerson(long personId) {
-		try {
-			return session.createQuery("from Repository r where r.person.personId=:personId")
-					.setLong("personId", personId).list();
-		} catch (Exception e) {
-			return new ArrayList<Repository>();
-		}
-	}
-
-	@Override
-	public List<Repository> getRepositoriesByTeam(long personId) {
-		try {
-			return session.createQuery("""
-					select r from Repository r join r.team t, TeamMember tm join tm.person p
-					where tm.team.teamId=t.teamId and r.person.personId=:personId
-					""").setLong("personId", personId).list();
-		} catch (Exception e) {
-			return new ArrayList<Repository>();
-		}
-	}
-
-	@Override
-	public List<Repository> getRepositoriesByProject(long personId) {
-		try {
-			return session.createQuery("""
-					select r from Repository r join r.project pr,
-					Responsibility res join res.team t, TeamMember tm join tm.person p
-					where pr.projectId=res.project.projectId and tm.team.teamId=t.teamId and
-					tm.person.personId=:personId
-					""").setLong("personId", personId).list();
-		} catch (Exception e) {
-			return new ArrayList<Repository>();
-		}
-	}
-
-	@Override
-	public List<Database> getDatabasesByProject(long personId) {
-		try {
-			return session.createQuery("""
-					select d from Database d join d.project pr,
-					Responsibility res join res.team t, TeamMember tm join tm.person p
-					where pr.projectId=res.project.projectId and tm.team.teamId=t.teamId and
-					tm.person.personId=:personId
-					""").setLong("personId", personId).list();
-		} catch (Exception e) {
-			return new ArrayList<Database>();
-		}
-
-	}
-}
Index: eprms-tap/src/main/java/info/ajanovski/eprms/tap/util/AppConstants.java
===================================================================
--- eprms-tap/src/main/java/info/ajanovski/eprms/tap/util/AppConstants.java	(revision f1d066c061cda95871358a60f749ea06909f629d)
+++ eprms-tap/src/main/java/info/ajanovski/eprms/tap/util/AppConstants.java	(revision f1d066c061cda95871358a60f749ea06909f629d)
@@ -0,0 +1,30 @@
+/*******************************************************************************
+ * Copyright (C) 2021 Vangel V. Ajanovski
+ *     
+ * This file is part of the EPRMS - Educational Project and Resource 
+ * Management System (hereinafter: EPRMS).
+ *     
+ * EPRMS is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *     
+ * EPRMS is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *     
+ * You should have received a copy of the GNU General Public License
+ * along with EPRMS.  If not, see <https://www.gnu.org/licenses/>.
+ ******************************************************************************/
+
+package info.ajanovski.eprms.tap.util;
+
+public class AppConstants {
+
+	/**
+	 * Pages
+	 */
+	public final static String PageIndex = "Index";
+
+}
Index: rms-tap/src/main/java/info/ajanovski/eprms/tap/util/ModelConstants.java
===================================================================
--- eprms-tap/src/main/java/info/ajanovski/eprms/tap/util/ModelConstants.java	(revision 2090f001e6d9b81b1c77254e67b140aee64480e4)
+++ 	(revision )
@@ -1,39 +1,0 @@
-/*******************************************************************************
- * Copyright (C) 2021 Vangel V. Ajanovski
- *     
- * This file is part of the EPRMS - Educational Project and Resource 
- * Management System (hereinafter: EPRMS).
- *     
- * EPRMS is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *     
- * EPRMS is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *     
- * You should have received a copy of the GNU General Public License
- * along with EPRMS.  If not, see <https://www.gnu.org/licenses/>.
- ******************************************************************************/
-
-package info.ajanovski.eprms.tap.util;
-
-public class ModelConstants {
-
-	/**
-	 * Pages
-	 */
-	public final static String PageIndex = "Index";
-
-	public static final String BooleanTRUEasCHAR = "T";
-	public static final String BooleanFALSEasCHAR = "F";
-
-	public static final String EmailUnknown = "EMAIL@UNKNOWN";
-
-	public static final String RoleAdministrator = "ADMINISTRATOR";
-	public static final String RoleInstructor = "INSTRUCTOR";
-	public static final String RoleStudent = "STUDENT";
-
-}
Index: eprms-tap/src/main/java/info/ajanovski/eprms/tap/util/UserInfo.java
===================================================================
--- eprms-tap/src/main/java/info/ajanovski/eprms/tap/util/UserInfo.java	(revision 2090f001e6d9b81b1c77254e67b140aee64480e4)
+++ eprms-tap/src/main/java/info/ajanovski/eprms/tap/util/UserInfo.java	(revision f1d066c061cda95871358a60f749ea06909f629d)
@@ -28,6 +28,7 @@
 import org.slf4j.Logger;
 
-import info.ajanovski.eprms.tap.entities.Person;
-import info.ajanovski.eprms.tap.entities.PersonRole;
+import info.ajanovski.eprms.model.entities.Person;
+import info.ajanovski.eprms.model.entities.PersonRole;
+import info.ajanovski.eprms.model.util.ModelConstants;
 import info.ajanovski.eprms.tap.services.PersonManager;
 
Index: eprms-tap/src/main/resources/info/ajanovski/eprms/tap/components/Layout.tml
===================================================================
--- eprms-tap/src/main/resources/info/ajanovski/eprms/tap/components/Layout.tml	(revision 2090f001e6d9b81b1c77254e67b140aee64480e4)
+++ eprms-tap/src/main/resources/info/ajanovski/eprms/tap/components/Layout.tml	(revision f1d066c061cda95871358a60f749ea06909f629d)
@@ -4,5 +4,7 @@
 <head>
 <meta charset="utf-8" />
+
 <title>${title}</title>
+
 <meta name="viewport"
 	content="width=device-width, initial-scale=1, shrink-to-fit=no" />
@@ -14,4 +16,5 @@
 <meta http-equiv="X-UA-Compatible" content="IE=edge" />
 </head>
+
 <body style="padding-top: 4.5em;">
 	<nav class="navbar navbar-dark navbar-expand-lg bg-dark fixed-top"
@@ -23,4 +26,5 @@
 			<span class="navbar-toggler-icon"></span>
 		</button>
+
 		<div class="collapse navbar-collapse" id="mainMenu">
 			<ul class="navbar-nav mr-auto">
@@ -41,4 +45,5 @@
 				</t:if>
 			</ul>
+			
 			<ul class="navbar-nav navbar-right">
 				<li class="nav-item"><a class="nav-link" href=""
@@ -61,4 +66,5 @@
 		</div>
 	</nav>
+
 	<div class="container-fluid">
 		<div class="row">
@@ -67,5 +73,9 @@
 			</div>
 		</div>
+
+		<!-- content -->
 		<t:body />
+		<!-- /content -->
+
 		<hr />
 		<footer>
Index: eprms-tap/src/main/resources/info/ajanovski/eprms/tap/pages/MyRepositoryAuth.tml
===================================================================
--- eprms-tap/src/main/resources/info/ajanovski/eprms/tap/pages/MyRepositoryAuth.tml	(revision 2090f001e6d9b81b1c77254e67b140aee64480e4)
+++ eprms-tap/src/main/resources/info/ajanovski/eprms/tap/pages/MyRepositoryAuth.tml	(revision f1d066c061cda95871358a60f749ea06909f629d)
@@ -6,5 +6,5 @@
 <p>Please enter your new password for repository authentication.</p>
 
-<t:form t:id="AuthForm">
+<form t:type="form" t:id="AuthForm">
 
 	<div class="form-group">
@@ -20,5 +20,4 @@
 	<t:submit t:value="OK" />
 
-</t:form>
-
+</form>
 </html>
