diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..17c9dd6 --- /dev/null +++ b/.gitignore @@ -0,0 +1,61 @@ +# See https://www.dartlang.org/guides/libraries/private-files + +# IntelliJ related +*.iml +*.ipr +*.iws +.idea/ + + +*.html +*.css +*.rss +*.mvn + +*target + +# Flutter/Dart/Pub related +**/doc/api/ +**/ios/Flutter/.last_build_id +.dart_tool/ +.flutter-plugins +.flutter-plugins-dependencies +.packages +.pub-cache/ +.pub/ +/build/ + + +# Files and directories created by pub +.dart_tool/ +.packages +build/ + +# Android Studio will place build artifacts here +/android/app/debug +/android/app/profile +/android/app/release + +### Firebase ### +**/node_modules/* +**/.firebaserc + +### Firebase Patch ### +.runtimeconfig.json +.firebase/ + +# If you're building an application, you may want to check-in your pubspec.lock +pubspec.lock + +# Directory created by dartdoc +# If you don't generate documentation locally you can remove this line. +doc/api/ + +# Avoid committing generated Javascript files: +*.dart.js +*.info.json # Produced by the --dump-info flag. +*.js # When generated by dart2js. Don't specify *.js if your + # project includes source files written in JavaScript. +*.js_ +*.js.deps +*.js.map diff --git a/README.md b/README.md index 681d633..b2ad28c 100644 --- a/README.md +++ b/README.md @@ -1,2 +1,3 @@ -# Databases - +# Lab 5 + +JDBC Maven Hibernate JPA diff --git a/lombok.config b/lombok.config new file mode 100644 index 0000000..f630e32 --- /dev/null +++ b/lombok.config @@ -0,0 +1,4 @@ +config.stopBubbling = true +lombok.addLombokGeneratedAnnotation = true +lombok.anyConstructor.addConstructorProperties = true +lombok.addNullAnnotations = \ No newline at end of file diff --git a/pom.xml b/pom.xml new file mode 100644 index 0000000..dbbc1cc --- /dev/null +++ b/pom.xml @@ -0,0 +1,138 @@ + + + 4.0.0 + + com.mkruchok + DB5MK + 1.0-SNAPSHOT + + UTF-8 + UTF-8 + https://github.com/MKruchok/Databases/tree/lab_5 + + + + + + + org.apache.maven.plugins + maven-pmd-plugin + 3.13.0 + + + org.apache.maven.plugins + maven-checkstyle-plugin + 3.1.2 + + + com.puppycrawl.tools + checkstyle + 10.2 + + + + + + + + org.apache.maven.plugins + maven-site-plugin + 3.7.1 + + + org.apache.maven.plugins + maven-project-info-reports-plugin + 3.3.0 + + + org.apache.maven.plugins + maven-pmd-plugin + 3.13.0 + + + com.github.spotbugs + spotbugs-maven-plugin + 4.4.1 + + + maven-compiler-plugin + 3.5.1 + + 1.8 + 1.8 + + + + + + + org.projectlombok + lombok + 1.18.24 + + + mysql + mysql-connector-java + 8.0.29 + + + org.hibernate + hibernate-entitymanager + 5.6.8.Final + + + org.slf4j + slf4j-api + 1.7.36 + + + ch.qos.logback + logback-classic + 1.2.11 + + + com.puppycrawl.tools + checkstyle + 10.2 + + + com.github.spotbugs + spotbugs + 4.7.0 + + + + + + com.github.spotbugs + spotbugs-maven-plugin + 4.4.1 + + spotbugs-exclude.xml + + + + org.apache.maven.plugins + maven-checkstyle-plugin + 3.1.2 + + google_checks.xml + + + + + checkstyle + + + + + + org.apache.maven.plugins + maven-pmd-plugin + 3.13.0 + + + + diff --git a/spotbugs-exclude.xml b/spotbugs-exclude.xml new file mode 100644 index 0000000..6922061 --- /dev/null +++ b/spotbugs-exclude.xml @@ -0,0 +1,11 @@ + + + + + + + + + + + diff --git a/src/main/java/com/mkruchok/App.java b/src/main/java/com/mkruchok/App.java new file mode 100644 index 0000000..0db9d5e --- /dev/null +++ b/src/main/java/com/mkruchok/App.java @@ -0,0 +1,22 @@ +package com.mkruchok; + +import com.mkruchok.view.View; +import org.hibernate.Session; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +public final class App { + static final Logger LOGGER = LoggerFactory.getLogger(App.class); + + public static void main(final String[] args) { + System.err.close(); + System.setErr(System.out); + try (Session ignored = HibernateUtil.getSession()) { + LOGGER.info("Test session established. "); + new View().show(); + } catch (Exception ex) { + LOGGER.warn("Test session failed."); + LOGGER.error(ex.toString()); + } + } +} \ No newline at end of file diff --git a/src/main/java/com/mkruchok/HibernateUtil.java b/src/main/java/com/mkruchok/HibernateUtil.java new file mode 100644 index 0000000..a42fede --- /dev/null +++ b/src/main/java/com/mkruchok/HibernateUtil.java @@ -0,0 +1,30 @@ +package com.mkruchok; + +import org.hibernate.Session; +import org.hibernate.SessionFactory; +import org.hibernate.cfg.Configuration; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +public class HibernateUtil { + static final Logger LOGGER = LoggerFactory.getLogger(HibernateUtil.class); + private static final SessionFactory SESSION_FACTORY; + + static { + try { + SESSION_FACTORY = new Configuration().configure().buildSessionFactory(); + } catch (Exception ex) { + LOGGER.warn("SessionFactory init failed."); + LOGGER.error(ex.toString()); + throw new ExceptionInInitializerError(ex); + } + } + + public static SessionFactory getSessionFactory() { + return SESSION_FACTORY; + } + + public static Session getSession() { + return SESSION_FACTORY.openSession(); + } +} diff --git a/src/main/java/com/mkruchok/controller/AbstractController.java b/src/main/java/com/mkruchok/controller/AbstractController.java new file mode 100644 index 0000000..892f6ee --- /dev/null +++ b/src/main/java/com/mkruchok/controller/AbstractController.java @@ -0,0 +1,22 @@ +package com.mkruchok.controller; + +import java.sql.SQLException; +import java.util.List; + +public interface AbstractController { + + List findAll() throws SQLException; + + default E findById(Integer id) { + return null; + } + + default void create(E entity) { + } + + default void update(Integer id, E entity) { + } + + default void delete(Integer id) { + } +} diff --git a/src/main/java/com/mkruchok/controller/implementation/AbstractControllerImpl.java b/src/main/java/com/mkruchok/controller/implementation/AbstractControllerImpl.java new file mode 100644 index 0000000..b1a4901 --- /dev/null +++ b/src/main/java/com/mkruchok/controller/implementation/AbstractControllerImpl.java @@ -0,0 +1,36 @@ +package com.mkruchok.controller.implementation; + + +import com.mkruchok.controller.AbstractController; +import com.mkruchok.model.dao.implementation.AbstractDaoImpl; +import java.util.List; + +public abstract class AbstractControllerImpl implements AbstractController { + public abstract AbstractDaoImpl getDao(); + + @Override + public final List findAll() { + return (List) getDao().findAll(); + } + + @Override + public final E findById(final Integer id) { + return getDao().findById(id); + } + + @Override + public final void create(final E object) { + getDao().create(object); + } + + @Override + public final void update(final Integer id, E object) { + getDao().update(id, object); + } + + @Override + public final void delete(final Integer id) { + getDao().delete(id); + } + +} \ No newline at end of file diff --git a/src/main/java/com/mkruchok/controller/implementation/DeviceController.java b/src/main/java/com/mkruchok/controller/implementation/DeviceController.java new file mode 100644 index 0000000..dc8e027 --- /dev/null +++ b/src/main/java/com/mkruchok/controller/implementation/DeviceController.java @@ -0,0 +1,15 @@ +package com.mkruchok.controller.implementation; + +import com.mkruchok.model.dao.implementation.AbstractDaoImpl; +import com.mkruchok.model.dao.implementation.DeviceDao; +import com.mkruchok.model.entity.Device; + +public final class DeviceController extends AbstractControllerImpl { + + private final DeviceDao deviceDao = new DeviceDao(); + + @Override + public AbstractDaoImpl getDao() { + return deviceDao; + } +} diff --git a/src/main/java/com/mkruchok/controller/implementation/DevicesGroupController.java b/src/main/java/com/mkruchok/controller/implementation/DevicesGroupController.java new file mode 100644 index 0000000..4f1c80a --- /dev/null +++ b/src/main/java/com/mkruchok/controller/implementation/DevicesGroupController.java @@ -0,0 +1,15 @@ +package com.mkruchok.controller.implementation; + +import com.mkruchok.model.dao.implementation.AbstractDaoImpl; +import com.mkruchok.model.dao.implementation.DevicesGroupDao; +import com.mkruchok.model.entity.DevicesGroup; + + +public final class DevicesGroupController extends AbstractControllerImpl { + private final DevicesGroupDao devicesGroupDao = new DevicesGroupDao(); + + @Override + public AbstractDaoImpl getDao() { + return devicesGroupDao; + } +} diff --git a/src/main/java/com/mkruchok/controller/implementation/HubController.java b/src/main/java/com/mkruchok/controller/implementation/HubController.java new file mode 100644 index 0000000..08a0552 --- /dev/null +++ b/src/main/java/com/mkruchok/controller/implementation/HubController.java @@ -0,0 +1,15 @@ +package com.mkruchok.controller.implementation; + +import com.mkruchok.model.dao.implementation.AbstractDaoImpl; +import com.mkruchok.model.dao.implementation.HubDao; +import com.mkruchok.model.entity.Hub; + +public final class HubController extends AbstractControllerImpl { + + private final HubDao hubDao = new HubDao(); + + @Override + public AbstractDaoImpl getDao() { + return hubDao; + } +} diff --git a/src/main/java/com/mkruchok/controller/implementation/NotificationController.java b/src/main/java/com/mkruchok/controller/implementation/NotificationController.java new file mode 100644 index 0000000..69aa5af --- /dev/null +++ b/src/main/java/com/mkruchok/controller/implementation/NotificationController.java @@ -0,0 +1,16 @@ +package com.mkruchok.controller.implementation; + +import com.mkruchok.model.dao.implementation.AbstractDaoImpl; +import com.mkruchok.model.dao.implementation.NotificationDao; +import com.mkruchok.model.entity.Notification; + + +public final class NotificationController extends AbstractControllerImpl { + private final NotificationDao notificationDao = new NotificationDao(); + + @Override + public AbstractDaoImpl getDao() { + return notificationDao; + } + +} diff --git a/src/main/java/com/mkruchok/controller/implementation/PermissionController.java b/src/main/java/com/mkruchok/controller/implementation/PermissionController.java new file mode 100644 index 0000000..3a9783b --- /dev/null +++ b/src/main/java/com/mkruchok/controller/implementation/PermissionController.java @@ -0,0 +1,15 @@ +package com.mkruchok.controller.implementation; + +import com.mkruchok.model.dao.implementation.AbstractDaoImpl; +import com.mkruchok.model.dao.implementation.PermissionDao; +import com.mkruchok.model.entity.Permission; + + +public final class PermissionController extends AbstractControllerImpl { + private final PermissionDao permissionDao = new PermissionDao(); + + @Override + public AbstractDaoImpl getDao() { + return permissionDao; + } +} diff --git a/src/main/java/com/mkruchok/controller/implementation/RexController.java b/src/main/java/com/mkruchok/controller/implementation/RexController.java new file mode 100644 index 0000000..3ae3634 --- /dev/null +++ b/src/main/java/com/mkruchok/controller/implementation/RexController.java @@ -0,0 +1,14 @@ +package com.mkruchok.controller.implementation; + +import com.mkruchok.model.dao.implementation.AbstractDaoImpl; +import com.mkruchok.model.dao.implementation.RexDao; +import com.mkruchok.model.entity.Rex; + +public final class RexController extends AbstractControllerImpl { + private final RexDao rexDao = new RexDao(); + + @Override + public AbstractDaoImpl getDao() { + return rexDao; + } +} diff --git a/src/main/java/com/mkruchok/controller/implementation/UserController.java b/src/main/java/com/mkruchok/controller/implementation/UserController.java new file mode 100644 index 0000000..d55fa50 --- /dev/null +++ b/src/main/java/com/mkruchok/controller/implementation/UserController.java @@ -0,0 +1,14 @@ +package com.mkruchok.controller.implementation; + +import com.mkruchok.model.dao.implementation.AbstractDaoImpl; +import com.mkruchok.model.dao.implementation.UserDao; +import com.mkruchok.model.entity.User; + +public final class UserController extends AbstractControllerImpl { + public final UserDao userDao = new UserDao(); + + @Override + public AbstractDaoImpl getDao() { + return userDao; + } +} \ No newline at end of file diff --git a/src/main/java/com/mkruchok/controller/implementation/UsersGroupController.java b/src/main/java/com/mkruchok/controller/implementation/UsersGroupController.java new file mode 100644 index 0000000..2155c3e --- /dev/null +++ b/src/main/java/com/mkruchok/controller/implementation/UsersGroupController.java @@ -0,0 +1,15 @@ +package com.mkruchok.controller.implementation; + +import com.mkruchok.model.dao.implementation.AbstractDaoImpl; +import com.mkruchok.model.dao.implementation.UsersGroupDao; +import com.mkruchok.model.entity.UsersGroup; + + +public final class UsersGroupController extends AbstractControllerImpl { + private final UsersGroupDao usersGroupDao = new UsersGroupDao(); + + @Override + public AbstractDaoImpl getDao() { + return usersGroupDao; + } +} diff --git a/src/main/java/com/mkruchok/controller/implementation/package-info.java b/src/main/java/com/mkruchok/controller/implementation/package-info.java new file mode 100644 index 0000000..1dbf70e --- /dev/null +++ b/src/main/java/com/mkruchok/controller/implementation/package-info.java @@ -0,0 +1 @@ +package com.mkruchok.controller.implementation; \ No newline at end of file diff --git a/src/main/java/com/mkruchok/controller/package-info.java b/src/main/java/com/mkruchok/controller/package-info.java new file mode 100644 index 0000000..2db224e --- /dev/null +++ b/src/main/java/com/mkruchok/controller/package-info.java @@ -0,0 +1 @@ +package com.mkruchok.controller; \ No newline at end of file diff --git a/src/main/java/com/mkruchok/model/dao/AbstractDao.java b/src/main/java/com/mkruchok/model/dao/AbstractDao.java new file mode 100644 index 0000000..247aae7 --- /dev/null +++ b/src/main/java/com/mkruchok/model/dao/AbstractDao.java @@ -0,0 +1,23 @@ +package com.mkruchok.model.dao; + +import java.sql.SQLException; +import java.util.Collection; + +public interface AbstractDao { + + Collection findAll() throws SQLException; + + default void create(E entity) { + } + + default E findById(Integer id) { + return null; + } + + default void update(Integer id, E entity) { + } + + default void delete(Integer id) { + } + +} diff --git a/src/main/java/com/mkruchok/model/dao/implementation/AbstractDaoImpl.java b/src/main/java/com/mkruchok/model/dao/implementation/AbstractDaoImpl.java new file mode 100644 index 0000000..e4bfdcc --- /dev/null +++ b/src/main/java/com/mkruchok/model/dao/implementation/AbstractDaoImpl.java @@ -0,0 +1,90 @@ +package com.mkruchok.model.dao.implementation; + +import com.mkruchok.HibernateUtil; +import com.mkruchok.model.dao.AbstractDao; +import java.util.Collection; +import java.util.List; +import org.hibernate.Session; +import org.hibernate.SessionFactory; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + + +public abstract class AbstractDaoImpl implements AbstractDao { + + static final Logger LOGGER = LoggerFactory.getLogger(AbstractDaoImpl.class); + protected final SessionFactory sessionFactory = HibernateUtil.getSessionFactory(); + private final Class currentClass; + Session session = sessionFactory.getCurrentSession(); + + public AbstractDaoImpl(Class currentClass) { + this.currentClass = currentClass; + } + + @Override + @SuppressWarnings("unchecked") + public final Collection findAll() { + List entities; + session = sessionFactory.getCurrentSession(); + session.beginTransaction(); + entities = session.createQuery("from " + currentClass.getName()).getResultList(); + session.getTransaction().commit(); + if (session.isOpen()) { + session.close(); + } + entities.forEach(e -> LOGGER.debug(e.toString())); + return entities; + } + + + @Override + public final E findById(Integer id) { + E entity; + + session = sessionFactory.getCurrentSession(); + session.beginTransaction(); + entity = session.get(currentClass, id); + session.getTransaction().commit(); + if (session.isOpen()) { + session.close(); + } + return entity; + } + + @Override + public final void update(Integer id, E entity) { + session = sessionFactory.getCurrentSession(); + session.beginTransaction(); + session.update(entity); + session.getTransaction().commit(); + if (session.isOpen()) { + session.close(); + } + } + + @Override + public final void create(E entity) { + session = sessionFactory.getCurrentSession(); + session.beginTransaction(); + session.save(entity); + session.getTransaction().commit(); + if (session.isOpen()) { + session.close(); + } + } + + @Override + public final void delete(Integer id) { + session = sessionFactory.getCurrentSession(); + session.beginTransaction(); + E entity = session.get(currentClass, id); + if (entity != null) { + session.delete(entity); + } + session.getTransaction().commit(); + if (session.isOpen()) { + session.close(); + } + + } +} \ No newline at end of file diff --git a/src/main/java/com/mkruchok/model/dao/implementation/DeviceDao.java b/src/main/java/com/mkruchok/model/dao/implementation/DeviceDao.java new file mode 100644 index 0000000..1ad3942 --- /dev/null +++ b/src/main/java/com/mkruchok/model/dao/implementation/DeviceDao.java @@ -0,0 +1,9 @@ +package com.mkruchok.model.dao.implementation; + +import com.mkruchok.model.entity.Device; + +public final class DeviceDao extends AbstractDaoImpl { + public DeviceDao() { + super(Device.class); + } +} diff --git a/src/main/java/com/mkruchok/model/dao/implementation/DevicesGroupDao.java b/src/main/java/com/mkruchok/model/dao/implementation/DevicesGroupDao.java new file mode 100644 index 0000000..4ed8d6c --- /dev/null +++ b/src/main/java/com/mkruchok/model/dao/implementation/DevicesGroupDao.java @@ -0,0 +1,9 @@ +package com.mkruchok.model.dao.implementation; + +import com.mkruchok.model.entity.DevicesGroup; + +public final class DevicesGroupDao extends AbstractDaoImpl { + public DevicesGroupDao() { + super(DevicesGroup.class); + } +} diff --git a/src/main/java/com/mkruchok/model/dao/implementation/HubDao.java b/src/main/java/com/mkruchok/model/dao/implementation/HubDao.java new file mode 100644 index 0000000..16ee2ee --- /dev/null +++ b/src/main/java/com/mkruchok/model/dao/implementation/HubDao.java @@ -0,0 +1,9 @@ +package com.mkruchok.model.dao.implementation; + +import com.mkruchok.model.entity.Hub; + +public final class HubDao extends AbstractDaoImpl { + public HubDao() { + super(Hub.class); + } +} diff --git a/src/main/java/com/mkruchok/model/dao/implementation/NotificationDao.java b/src/main/java/com/mkruchok/model/dao/implementation/NotificationDao.java new file mode 100644 index 0000000..cf713ad --- /dev/null +++ b/src/main/java/com/mkruchok/model/dao/implementation/NotificationDao.java @@ -0,0 +1,9 @@ +package com.mkruchok.model.dao.implementation; + +import com.mkruchok.model.entity.Notification; + +public final class NotificationDao extends AbstractDaoImpl { + public NotificationDao() { + super(Notification.class); + } +} diff --git a/src/main/java/com/mkruchok/model/dao/implementation/PermissionDao.java b/src/main/java/com/mkruchok/model/dao/implementation/PermissionDao.java new file mode 100644 index 0000000..fd00992 --- /dev/null +++ b/src/main/java/com/mkruchok/model/dao/implementation/PermissionDao.java @@ -0,0 +1,10 @@ +package com.mkruchok.model.dao.implementation; + + +import com.mkruchok.model.entity.Permission; + +public final class PermissionDao extends AbstractDaoImpl { + public PermissionDao() { + super(Permission.class); + } +} diff --git a/src/main/java/com/mkruchok/model/dao/implementation/RexDao.java b/src/main/java/com/mkruchok/model/dao/implementation/RexDao.java new file mode 100644 index 0000000..b6ebcc2 --- /dev/null +++ b/src/main/java/com/mkruchok/model/dao/implementation/RexDao.java @@ -0,0 +1,9 @@ +package com.mkruchok.model.dao.implementation; + +import com.mkruchok.model.entity.Rex; + +public final class RexDao extends AbstractDaoImpl { + public RexDao() { + super(Rex.class); + } +} diff --git a/src/main/java/com/mkruchok/model/dao/implementation/UserDao.java b/src/main/java/com/mkruchok/model/dao/implementation/UserDao.java new file mode 100644 index 0000000..dfd2e2e --- /dev/null +++ b/src/main/java/com/mkruchok/model/dao/implementation/UserDao.java @@ -0,0 +1,9 @@ +package com.mkruchok.model.dao.implementation; + +import com.mkruchok.model.entity.User; + +public final class UserDao extends AbstractDaoImpl { + public UserDao() { + super(User.class); + } +} diff --git a/src/main/java/com/mkruchok/model/dao/implementation/UsersGroupDao.java b/src/main/java/com/mkruchok/model/dao/implementation/UsersGroupDao.java new file mode 100644 index 0000000..e64e186 --- /dev/null +++ b/src/main/java/com/mkruchok/model/dao/implementation/UsersGroupDao.java @@ -0,0 +1,9 @@ +package com.mkruchok.model.dao.implementation; + +import com.mkruchok.model.entity.UsersGroup; + +public final class UsersGroupDao extends AbstractDaoImpl { + public UsersGroupDao() { + super(UsersGroup.class); + } +} diff --git a/src/main/java/com/mkruchok/model/dao/implementation/package-info.java b/src/main/java/com/mkruchok/model/dao/implementation/package-info.java new file mode 100644 index 0000000..e1c00af --- /dev/null +++ b/src/main/java/com/mkruchok/model/dao/implementation/package-info.java @@ -0,0 +1 @@ +package com.mkruchok.model.dao.implementation; \ No newline at end of file diff --git a/src/main/java/com/mkruchok/model/dao/package-info.java b/src/main/java/com/mkruchok/model/dao/package-info.java new file mode 100644 index 0000000..951a6b6 --- /dev/null +++ b/src/main/java/com/mkruchok/model/dao/package-info.java @@ -0,0 +1 @@ +package com.mkruchok.model.dao; \ No newline at end of file diff --git a/src/main/java/com/mkruchok/model/entity/Device.java b/src/main/java/com/mkruchok/model/entity/Device.java new file mode 100644 index 0000000..abad536 --- /dev/null +++ b/src/main/java/com/mkruchok/model/entity/Device.java @@ -0,0 +1,96 @@ +package com.mkruchok.model.entity; + +import java.sql.Timestamp; +import java.util.Collection; +import javax.persistence.Column; +import javax.persistence.Entity; +import javax.persistence.FetchType; +import javax.persistence.GeneratedValue; +import javax.persistence.GenerationType; +import javax.persistence.Id; +import javax.persistence.JoinColumn; +import javax.persistence.ManyToOne; +import javax.persistence.OneToMany; +import javax.persistence.OrderColumn; +import javax.persistence.Table; +import lombok.AllArgsConstructor; +import lombok.EqualsAndHashCode; +import lombok.Getter; +import lombok.NoArgsConstructor; +import lombok.Setter; +import lombok.ToString; +import org.hibernate.annotations.CreationTimestamp; +import org.hibernate.annotations.LazyCollection; +import org.hibernate.annotations.LazyCollectionOption; + +@Table(name = "device") + +@AllArgsConstructor +@NoArgsConstructor +@ToString +@EqualsAndHashCode(of = "id") +@Getter +@Setter +@Entity +public class Device { + @Id + @GeneratedValue(strategy = GenerationType.IDENTITY) + @Column(name = "id") + private Integer id; + @Column(name = "model", + length = 45) + private String model; + @Column(name = "device_status", + length = 45) + private String deviceStatus; + @CreationTimestamp + @Column(name = "service_life_end_time") + private Timestamp serviceLifeEndTime; + @CreationTimestamp + @Column(name = "warranty_end_time") + private Timestamp warrantyEndTime; + @Column(name = "on_battery", + length = 1) + private Integer onBattery; + + + @ManyToOne + @JoinColumn(name = "hub_id", + referencedColumnName = "id") + private Hub hubId; + + @ManyToOne + @JoinColumn(name = "devices_group_id", + referencedColumnName = "id") + private DevicesGroup devicesGroupId; + + @OrderColumn + @LazyCollection(LazyCollectionOption.FALSE) + @OneToMany(mappedBy = "deviceId", + fetch = FetchType.LAZY) + @ToString.Exclude + private Collection notifications; + + @OrderColumn + @LazyCollection(LazyCollectionOption.FALSE) + @OneToMany(mappedBy = "deviceId", + fetch = FetchType.LAZY) + @ToString.Exclude + private Collection permissions; + + public Device(String model, + String deviceStatus, + Timestamp serviceLifeEndTime, + Timestamp warrantyEndTime, + Integer onBattery, + Hub hubId, + DevicesGroup devicesGroupId) { + this.model = model; + this.deviceStatus = deviceStatus; + this.serviceLifeEndTime = serviceLifeEndTime; + this.warrantyEndTime = warrantyEndTime; + this.onBattery = onBattery; + this.hubId = hubId; + this.devicesGroupId = devicesGroupId; + } +} diff --git a/src/main/java/com/mkruchok/model/entity/DevicesGroup.java b/src/main/java/com/mkruchok/model/entity/DevicesGroup.java new file mode 100644 index 0000000..a30c346 --- /dev/null +++ b/src/main/java/com/mkruchok/model/entity/DevicesGroup.java @@ -0,0 +1,44 @@ +package com.mkruchok.model.entity; + +import java.util.Collection; +import javax.persistence.Column; +import javax.persistence.Entity; +import javax.persistence.FetchType; +import javax.persistence.GeneratedValue; +import javax.persistence.GenerationType; +import javax.persistence.Id; +import javax.persistence.OneToMany; +import javax.persistence.OrderColumn; +import javax.persistence.Table; +import lombok.AllArgsConstructor; +import lombok.EqualsAndHashCode; +import lombok.Getter; +import lombok.NoArgsConstructor; +import lombok.Setter; +import lombok.ToString; + +@Table(name = "devices_group") + +@AllArgsConstructor +@ToString +@EqualsAndHashCode(of = "id") +@Getter +@Setter +@Entity +@NoArgsConstructor +public class DevicesGroup { + @Id + @GeneratedValue(strategy = GenerationType.IDENTITY) + @Column(name = "id") + private Integer id; + @Column(name = "group_name", + length = 45) + private String name; + @OrderColumn + @OneToMany(mappedBy = "devicesGroupId", + fetch = FetchType.LAZY) + @ToString.Exclude + private Collection devices; + + +} diff --git a/src/main/java/com/mkruchok/model/entity/Hub.java b/src/main/java/com/mkruchok/model/entity/Hub.java new file mode 100644 index 0000000..0d9cd52 --- /dev/null +++ b/src/main/java/com/mkruchok/model/entity/Hub.java @@ -0,0 +1,124 @@ +package com.mkruchok.model.entity; + +import java.sql.Timestamp; +import java.util.Collection; +import javax.persistence.Column; +import javax.persistence.Entity; +import javax.persistence.FetchType; +import javax.persistence.GeneratedValue; +import javax.persistence.GenerationType; +import javax.persistence.Id; +import javax.persistence.JoinColumn; +import javax.persistence.JoinTable; +import javax.persistence.ManyToMany; +import javax.persistence.OneToMany; +import javax.persistence.OrderColumn; +import javax.persistence.Table; +import lombok.AllArgsConstructor; +import lombok.EqualsAndHashCode; +import lombok.Getter; +import lombok.NoArgsConstructor; +import lombok.Setter; +import lombok.ToString; +import org.hibernate.annotations.CreationTimestamp; +import org.hibernate.annotations.LazyCollection; +import org.hibernate.annotations.LazyCollectionOption; + +@Table(name = "hub") + +@Getter +@ToString +@EqualsAndHashCode(of = "id") +@AllArgsConstructor +@NoArgsConstructor +@Setter +@Entity +public class Hub { + @OrderColumn + @LazyCollection(LazyCollectionOption.FALSE) + @ManyToMany + @JoinTable(name = "user_has_hub", + joinColumns = @JoinColumn(name = "hub_id"), + inverseJoinColumns = @JoinColumn(name = "user_id")) + @ToString.Exclude + Collection hubHasUsers; + @Id + @GeneratedValue(strategy = GenerationType.IDENTITY) + @Column(name = "id") + private Integer id; + @Column(name = "model", + length = 45) + private String model; + @Column(name = "hub_status", + length = 45) + private String status; + @CreationTimestamp + @Column(name = "service_life_end_time", + length = 45) + private Timestamp serviceLifeEndTime; + @CreationTimestamp + @Column(name = "warranty_end_time", + length = 45) + private Timestamp warrantyEndTime; + @Column(name = "users_max", + length = 45) + private Integer usersMax; + @Column(name = "rooms_max", + length = 45) + private Integer roomsMax; + @Column(name = "devices_max", + length = 45) + private Integer devicesMax; + @Column(name = "sirens_max", + length = 45) + private Integer sirensMax; + @Column(name = "on_battery", + length = 1) + private Integer onBattery; + @OrderColumn + @OneToMany(mappedBy = "hubGroupId", + fetch = FetchType.LAZY) + @ToString.Exclude + private Collection userGroups; + @OrderColumn + @OneToMany(mappedBy = "hubRexId", + fetch = FetchType.LAZY) + @ToString.Exclude + private Collection rexes; + @OrderColumn + @OneToMany(mappedBy = "hubNotificationId", + fetch = FetchType.LAZY) + @ToString.Exclude + private Collection notifications; + @OrderColumn + @LazyCollection(LazyCollectionOption.FALSE) + @OneToMany(mappedBy = "hubId") + @ToString.Exclude + private Collection devices; + @OrderColumn + @LazyCollection(LazyCollectionOption.FALSE) + @OneToMany(mappedBy = "hubId") + @ToString.Exclude + private Collection permissions; + + public Hub(String model, + String status, + Timestamp serviceLifeEndTime, + Timestamp warrantyEndTime, + Integer usersMax, + Integer roomsMax, + Integer devicesMax, + Integer sirensMax, + Integer onBattery) { + this.model = model; + this.status = status; + this.serviceLifeEndTime = serviceLifeEndTime; + this.warrantyEndTime = warrantyEndTime; + this.usersMax = usersMax; + this.roomsMax = roomsMax; + this.devicesMax = devicesMax; + this.sirensMax = sirensMax; + this.onBattery = onBattery; + } + +} diff --git a/src/main/java/com/mkruchok/model/entity/Notification.java b/src/main/java/com/mkruchok/model/entity/Notification.java new file mode 100644 index 0000000..84b4227 --- /dev/null +++ b/src/main/java/com/mkruchok/model/entity/Notification.java @@ -0,0 +1,54 @@ +package com.mkruchok.model.entity; + +import java.sql.Timestamp; +import javax.persistence.Column; +import javax.persistence.Entity; +import javax.persistence.GeneratedValue; +import javax.persistence.GenerationType; +import javax.persistence.Id; +import javax.persistence.JoinColumn; +import javax.persistence.ManyToOne; +import javax.persistence.Table; +import lombok.AllArgsConstructor; +import lombok.EqualsAndHashCode; +import lombok.Getter; +import lombok.NoArgsConstructor; +import lombok.Setter; +import lombok.ToString; +import org.hibernate.annotations.CreationTimestamp; + + +@Table(name = "notification") + +@AllArgsConstructor +@NoArgsConstructor +@EqualsAndHashCode(of = "id") +@Getter +@Setter +@ToString +@Entity +public class Notification { + @Id + @Column(name = "id") + @GeneratedValue(strategy = GenerationType.IDENTITY) + private Integer id; + @CreationTimestamp + @Column(name = "timestamp") + private Timestamp timestamp; + @Column(name = "notification_type", + length = 45) + private String type; + + + @ManyToOne + @JoinColumn(name = "device_id", + referencedColumnName = "id") + private Device deviceId; + + @ManyToOne + @JoinColumn(name = "hub_id", + referencedColumnName = "id") + private Hub hubNotificationId; + + +} diff --git a/src/main/java/com/mkruchok/model/entity/Permission.java b/src/main/java/com/mkruchok/model/entity/Permission.java new file mode 100644 index 0000000..6832b71 --- /dev/null +++ b/src/main/java/com/mkruchok/model/entity/Permission.java @@ -0,0 +1,53 @@ +package com.mkruchok.model.entity; + +import javax.persistence.Column; +import javax.persistence.Entity; +import javax.persistence.GeneratedValue; +import javax.persistence.GenerationType; +import javax.persistence.Id; +import javax.persistence.JoinColumn; +import javax.persistence.ManyToOne; +import javax.persistence.Table; +import lombok.AllArgsConstructor; +import lombok.EqualsAndHashCode; +import lombok.Getter; +import lombok.NoArgsConstructor; +import lombok.Setter; +import lombok.ToString; + + +@Table(name = "permission") + +@AllArgsConstructor +@NoArgsConstructor +@Getter +@EqualsAndHashCode(of = "id") +@Setter +@ToString +@Entity +public class Permission { + @Id + @Column(name = "id") + @GeneratedValue(strategy = GenerationType.IDENTITY) + private Integer id; + @Column(name = "permission_name", + length = 45) + private String name; + @ManyToOne + @JoinColumn(name = "hub_id", + referencedColumnName = "id") + private Hub hubId; + @ManyToOne + @JoinColumn(name = "user_id", + referencedColumnName = "id") + private User userId; + @ManyToOne + @JoinColumn(name = "group_id", + referencedColumnName = "id") + private UsersGroup groupId; + @ManyToOne + @JoinColumn(name = "device_id", + referencedColumnName = "id") + private Device deviceId; + +} diff --git a/src/main/java/com/mkruchok/model/entity/Rex.java b/src/main/java/com/mkruchok/model/entity/Rex.java new file mode 100644 index 0000000..3e213c9 --- /dev/null +++ b/src/main/java/com/mkruchok/model/entity/Rex.java @@ -0,0 +1,47 @@ +package com.mkruchok.model.entity; + +import javax.persistence.Column; +import javax.persistence.Entity; +import javax.persistence.GeneratedValue; +import javax.persistence.GenerationType; +import javax.persistence.Id; +import javax.persistence.JoinColumn; +import javax.persistence.ManyToOne; +import javax.persistence.Table; +import lombok.AllArgsConstructor; +import lombok.EqualsAndHashCode; +import lombok.Getter; +import lombok.NoArgsConstructor; +import lombok.Setter; +import lombok.ToString; + + +@Table(name = "rex") + +@AllArgsConstructor +@NoArgsConstructor +@ToString +@EqualsAndHashCode(of = "id") +@Getter +@Setter +@Entity +public class Rex { + @Id + @GeneratedValue(strategy = GenerationType.IDENTITY) + @Column(name = "id") + private Integer id; + @Column(name = "rex_name", + length = 45) + private String name; + @Column(name = "rex_range", + length = 45) + private String range; + + + @ManyToOne + @JoinColumn(name = "hub_id", + referencedColumnName = "id") + private Hub hubRexId; + + +} diff --git a/src/main/java/com/mkruchok/model/entity/User.java b/src/main/java/com/mkruchok/model/entity/User.java new file mode 100644 index 0000000..5f66a8c --- /dev/null +++ b/src/main/java/com/mkruchok/model/entity/User.java @@ -0,0 +1,73 @@ +package com.mkruchok.model.entity; + + +import java.sql.Timestamp; +import java.util.Collection; +import javax.persistence.Column; +import javax.persistence.Entity; +import javax.persistence.GeneratedValue; +import javax.persistence.GenerationType; +import javax.persistence.Id; +import javax.persistence.JoinColumn; +import javax.persistence.JoinTable; +import javax.persistence.ManyToMany; +import javax.persistence.ManyToOne; +import javax.persistence.OneToMany; +import javax.persistence.OrderColumn; +import javax.persistence.Table; +import lombok.AllArgsConstructor; +import lombok.EqualsAndHashCode; +import lombok.Getter; +import lombok.NoArgsConstructor; +import lombok.Setter; +import lombok.ToString; +import org.hibernate.annotations.CreationTimestamp; +import org.hibernate.annotations.LazyCollection; +import org.hibernate.annotations.LazyCollectionOption; + + +@Table(name = "user") +@NoArgsConstructor +@AllArgsConstructor +@ToString +@EqualsAndHashCode(of = "id") +@Getter +@Setter +@Entity +public class User { + @Id + @Column(name = "id") + @GeneratedValue(strategy = GenerationType.IDENTITY) + private Integer id; + @Column(name = "email", + length = 45) + private String email; + @Column(name = "user_password", + length = 45) + private String password; + @CreationTimestamp + @Column(name = "date_created") + private Timestamp dateCreated; + @Column(name = "user_name", + length = 45) + private String name; + @ManyToOne + @JoinColumn(name = "users_group_id", + referencedColumnName = "id") + private UsersGroup groupId; + @OrderColumn + @ManyToMany + @LazyCollection(LazyCollectionOption.FALSE) + @JoinTable(name = "user_has_hub", + joinColumns = @JoinColumn(name = "user_id"), + inverseJoinColumns = @JoinColumn(name = "hub_id")) + @ToString.Exclude + private Collection userHasHubs; + @OrderColumn + @LazyCollection(LazyCollectionOption.FALSE) + @OneToMany(mappedBy = "userId") + @ToString.Exclude + private Collection permissions; + + +} diff --git a/src/main/java/com/mkruchok/model/entity/UsersGroup.java b/src/main/java/com/mkruchok/model/entity/UsersGroup.java new file mode 100644 index 0000000..7927587 --- /dev/null +++ b/src/main/java/com/mkruchok/model/entity/UsersGroup.java @@ -0,0 +1,65 @@ +package com.mkruchok.model.entity; + +import java.util.Collection; +import javax.persistence.Column; +import javax.persistence.Entity; +import javax.persistence.FetchType; +import javax.persistence.GeneratedValue; +import javax.persistence.GenerationType; +import javax.persistence.Id; +import javax.persistence.JoinColumn; +import javax.persistence.ManyToOne; +import javax.persistence.OneToMany; +import javax.persistence.OrderColumn; +import javax.persistence.Table; +import lombok.AllArgsConstructor; +import lombok.EqualsAndHashCode; +import lombok.Getter; +import lombok.NoArgsConstructor; +import lombok.Setter; +import lombok.ToString; +import org.hibernate.annotations.LazyCollection; +import org.hibernate.annotations.LazyCollectionOption; + +@Table(name = "users_group") + +@AllArgsConstructor +@ToString +@EqualsAndHashCode(of = "id") +@Getter +@Setter +@Entity +@NoArgsConstructor +public class UsersGroup { + @Id + @GeneratedValue(strategy = GenerationType.IDENTITY) + @Column(name = "id") + private Integer id; + @Column(name = "group_name", + length = 45) + private String name; + @Column(name = "group_description", + length = 150) + private String groupDescription; + @ManyToOne + @JoinColumn(name = "hub_id", + referencedColumnName = "id") + private Hub hubGroupId; + @OrderColumn + @OneToMany(mappedBy = "groupId", + fetch = FetchType.LAZY) + @ToString.Exclude + private Collection users; + @OrderColumn + @LazyCollection(LazyCollectionOption.FALSE) + @OneToMany(mappedBy = "groupId") + @ToString.Exclude + private Collection permissions; + + + public UsersGroup(String name, String description, Hub hubId) { + this.name = name; + this.groupDescription = description; + this.hubGroupId = hubId; + } +} diff --git a/src/main/java/com/mkruchok/model/entity/package-info.java b/src/main/java/com/mkruchok/model/entity/package-info.java new file mode 100644 index 0000000..cd73ddd --- /dev/null +++ b/src/main/java/com/mkruchok/model/entity/package-info.java @@ -0,0 +1 @@ +package com.mkruchok.model.entity; \ No newline at end of file diff --git a/src/main/java/com/mkruchok/model/package-info.java b/src/main/java/com/mkruchok/model/package-info.java new file mode 100644 index 0000000..8f40d85 --- /dev/null +++ b/src/main/java/com/mkruchok/model/package-info.java @@ -0,0 +1 @@ +package com.mkruchok.model; \ No newline at end of file diff --git a/src/main/java/com/mkruchok/package-info.java b/src/main/java/com/mkruchok/package-info.java new file mode 100644 index 0000000..4f8c4fa --- /dev/null +++ b/src/main/java/com/mkruchok/package-info.java @@ -0,0 +1 @@ +package com.mkruchok; \ No newline at end of file diff --git a/src/main/java/com/mkruchok/persistant/package-info.java b/src/main/java/com/mkruchok/persistant/package-info.java new file mode 100644 index 0000000..866ce58 --- /dev/null +++ b/src/main/java/com/mkruchok/persistant/package-info.java @@ -0,0 +1 @@ +package com.mkruchok.persistant; diff --git a/src/main/java/com/mkruchok/view/Menu.java b/src/main/java/com/mkruchok/view/Menu.java new file mode 100644 index 0000000..8d5c0f7 --- /dev/null +++ b/src/main/java/com/mkruchok/view/Menu.java @@ -0,0 +1,28 @@ +package com.mkruchok.view; + +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +public final class Menu { + static final Logger LOGGER = LoggerFactory.getLogger(Menu.class); + + public void displayMenu() { + LOGGER.debug("\n _________________________________________________\n" + + "| |\n" + + "| Enter entity and CRUD number : |\n" + + "| |\n" + + "| Table: CRUD: |\n" + + "|_________________________________________________|\n" + + "| 1 | user | 1 | GET TABLE |\n" + + "| 2 | hub | 2 | GET ROW BY ID |\n" + + "| 3 | device | 3 | CREATE ROW |\n" + + "| 4 | notification | 4 | UPDATE ROW |\n" + + "| 5 | userGroup | 5 | DELETE ROW |\n" + + "| 6 | devicesGroup | 5 | DELETE ROW |\n" + + "| 7 | permission | | |\n" + + "| 8 | rex | | |\n" + + "|___|__________________|___|______________________|\n" + "Enter numbers:" + + ); + } +} diff --git a/src/main/java/com/mkruchok/view/Printable.java b/src/main/java/com/mkruchok/view/Printable.java new file mode 100644 index 0000000..f6da866 --- /dev/null +++ b/src/main/java/com/mkruchok/view/Printable.java @@ -0,0 +1,8 @@ +package com.mkruchok.view; + +import java.sql.SQLException; + +@FunctionalInterface +public interface Printable { + void print() throws SQLException; +} diff --git a/src/main/java/com/mkruchok/view/View.java b/src/main/java/com/mkruchok/view/View.java new file mode 100644 index 0000000..7546d1d --- /dev/null +++ b/src/main/java/com/mkruchok/view/View.java @@ -0,0 +1,568 @@ +package com.mkruchok.view; + +import com.mkruchok.controller.implementation.DeviceController; +import com.mkruchok.controller.implementation.DevicesGroupController; +import com.mkruchok.controller.implementation.HubController; +import com.mkruchok.controller.implementation.NotificationController; +import com.mkruchok.controller.implementation.PermissionController; +import com.mkruchok.controller.implementation.RexController; +import com.mkruchok.controller.implementation.UserController; +import com.mkruchok.controller.implementation.UsersGroupController; +import com.mkruchok.model.entity.Device; +import com.mkruchok.model.entity.DevicesGroup; +import com.mkruchok.model.entity.Hub; +import com.mkruchok.model.entity.Notification; +import com.mkruchok.model.entity.Permission; +import com.mkruchok.model.entity.Rex; +import com.mkruchok.model.entity.User; +import com.mkruchok.model.entity.UsersGroup; +import java.sql.Timestamp; +import java.util.ArrayList; +import java.util.Collection; +import java.util.LinkedHashMap; +import java.util.Map; +import java.util.Scanner; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + + +public final class View { + static final Logger LOGGER = LoggerFactory.getLogger(View.class); + private static final Scanner SCANNER = new Scanner(System.in, "UTF-8"); + private final Map menu = new LinkedHashMap<>(); + private final HubController hubController = new HubController(); + private final DeviceController deviceController = new DeviceController(); + private final NotificationController notificationController = new NotificationController(); + private final UsersGroupController usersGroupController = new UsersGroupController(); + private final DevicesGroupController devicesGroupController = new DevicesGroupController(); + private final PermissionController permissionController = new PermissionController(); + private final UserController userController = new UserController(); + private final RexController rexController = new RexController(); + Menu showMenu = new Menu(); + + + public View() { + menu.put("11", this::getAllUsers); + menu.put("12", this::getUserById); + menu.put("13", this::createUser); + menu.put("14", this::updateUser); + menu.put("15", this::deleteUser); + + menu.put("21", this::getAllHubs); + menu.put("22", this::getHubById); + menu.put("23", this::createHub); + menu.put("24", this::updateHub); + menu.put("25", this::deleteHub); + + menu.put("31", this::getAllDevices); + menu.put("32", this::getDeviceByName); + menu.put("33", this::createDevice); + menu.put("34", this::updateDevice); + menu.put("35", this::deleteDevice); + + menu.put("41", this::getAllNotifications); + menu.put("42", this::getNotificationById); + menu.put("43", this::createNotification); + menu.put("44", this::updateNotification); + menu.put("45", this::deleteNotification); + + menu.put("51", this::getAllUsersGroups); + menu.put("52", this::getUsersGroupById); + menu.put("53", this::createUsersGroup); + menu.put("54", this::updateUsersGroup); + menu.put("55", this::deleteUsersGroup); + + menu.put("61", this::getAllDevicesGroups); + menu.put("62", this::getDevicesGroupById); + menu.put("63", this::createDevicesGroup); + menu.put("64", this::updateDevicesGroup); + menu.put("65", this::deleteDevicesGroup); + + menu.put("71", this::getAllPermissions); + menu.put("72", this::getPermissionById); + menu.put("73", this::createPermission); + menu.put("74", this::updatePermission); + menu.put("75", this::deletePermission); + + menu.put("81", this::getAllRexes); + menu.put("82", this::getRexById); + menu.put("83", this::createRex); + menu.put("84", this::updateRex); + menu.put("85", this::deleteRex); + } + + public void show() { + String input; + showMenu.displayMenu(); + do { + try { + input = SCANNER.next(); + menu.get(input).print(); + } catch (Exception e) { + LOGGER.debug(String.valueOf(e)); + } + } while (SCANNER.hasNext()); + } + + private void getAllUsers() { + userController.findAll(); + showMenu.displayMenu(); + } + + private void getUserById() { + LOGGER.debug("\nEnter iD: "); + final Integer id = SCANNER.nextInt(); + LOGGER.debug(userController.findById(id).toString()); + showMenu.displayMenu(); + } + + private User getUserInputs() throws NullPointerException { + LOGGER.debug("Enter email: "); + final String email = SCANNER.next(); + LOGGER.debug("Enter password: "); + final String password = SCANNER.next(); + LOGGER.debug("Enter name: "); + final String name = SCANNER.next(); + final Timestamp dateCreated = new Timestamp(System.currentTimeMillis()); + final UsersGroup groupEntity; + final Collection userHubs = new ArrayList<>(); + final Collection userPermissions = new ArrayList<>(); + LOGGER.debug("Enter group id: "); + final int groupId = SCANNER.nextInt(); + LOGGER.debug("Enter hub id to add or skip (0): "); + final int hubId = SCANNER.nextInt(); + if (hubId != 0) { + userHubs.add(hubController.findById(hubId)); + } + LOGGER.debug("Enter permission id to add or skip(0): "); + final int permissionId = SCANNER.nextInt(); + if (permissionId != 0) { + userPermissions.add(permissionController.findById(permissionId)); + } + groupEntity = groupId == 0 ? null : usersGroupController.findById(groupId); + + return new User(null, + email, + password, + dateCreated, + name, + groupEntity, + userHubs, + userPermissions); + } + + private void createUser() { + final User user = getUserInputs(); + userController.create(user); + LOGGER.debug("\nUser was added to the table.\n"); + showMenu.displayMenu(); + } + + private void updateUser() { + LOGGER.debug("\nEnter id to update: "); + final Integer id = SCANNER.nextInt(); + final User user = getUserInputs(); + user.setId(id); + userController.update(user.getId(), user); + LOGGER.debug("Updated user, id = " + id); + showMenu.displayMenu(); + } + + private void deleteUser() { + LOGGER.debug("\nEnter ID to delete user: "); + final int id = SCANNER.nextInt(); + userController.delete(id); + LOGGER.debug("Deleted user, id = " + id); + showMenu.displayMenu(); + } + + + private void getAllHubs() { + hubController.findAll(); + showMenu.displayMenu(); + } + + private void getHubById() { + LOGGER.debug("\nEnter Id: "); + final Integer id = SCANNER.nextInt(); + LOGGER.debug(hubController.findById(id).toString()); + showMenu.displayMenu(); + } + + private Hub getHubInputs() { + LOGGER.debug("\nEnter model: "); + final String model = SCANNER.next(); + LOGGER.debug("Enter status: "); + final String status = SCANNER.next(); + SCANNER.nextLine(); + LOGGER.debug("Enter service_life_end_time: "); + final Timestamp serviceLifeEndTime = Timestamp.valueOf(SCANNER.nextLine()); + LOGGER.debug("Enter warranty_end_time: "); + final Timestamp warrantyEndTime = Timestamp.valueOf(SCANNER.nextLine()); + LOGGER.debug("Enter users_max: "); + final Integer usersMax = SCANNER.nextInt(); + LOGGER.debug("Enter rooms_max: "); + final Integer roomsMax = SCANNER.nextInt(); + LOGGER.debug("Enter devices_max: "); + final Integer devicesMax = SCANNER.nextInt(); + LOGGER.debug("Enter sirens_max: "); + final Integer sirensMax = SCANNER.nextInt(); + LOGGER.debug("Enter on_battery: "); + final Integer onBattery = SCANNER.nextInt(); + return new Hub(model, + status, + serviceLifeEndTime, + warrantyEndTime, + usersMax, + roomsMax, + devicesMax, + sirensMax, + onBattery); + } + + private void createHub() { + final Hub hub = getHubInputs(); + hubController.create(hub); + LOGGER.debug("Hub was added to the table."); + showMenu.displayMenu(); + } + + private void updateHub() { + LOGGER.debug("\nEnter id to update:"); + final Integer id = SCANNER.nextInt(); + final Hub hub = getHubInputs(); + hub.setId(id); + hubController.update(hub.getId(), hub); + LOGGER.debug("Updated hub, id = " + id); + showMenu.displayMenu(); + } + + private void deleteHub() { + LOGGER.debug("\nEnter id to delete hub: "); + final Integer id = SCANNER.nextInt(); + hubController.delete(id); + LOGGER.debug("Deleted hub, id = " + id); + showMenu.displayMenu(); + } + + + private void getAllDevices() { + deviceController.findAll(); + showMenu.displayMenu(); + } + + private void getDeviceByName() { + LOGGER.debug("\nEnter Id: "); + final Integer id = SCANNER.nextInt(); + LOGGER.debug(deviceController.findById(id).toString()); + showMenu.displayMenu(); + } + + private Device getDeviceInputs() { + LOGGER.debug("\nEnter model: "); + final String model = SCANNER.next(); + LOGGER.debug("Enter status: "); + final String status = SCANNER.next(); + SCANNER.nextLine(); + LOGGER.debug("Enter warranty_end_time: "); + final Timestamp warrantyEndTime = Timestamp.valueOf(SCANNER.nextLine()); + LOGGER.debug("Enter service_life_end_time: "); + final Timestamp serviceLifeEndTime = Timestamp.valueOf(SCANNER.nextLine()); + LOGGER.debug("Enter on_battery: "); + final Integer onBattery = SCANNER.nextInt(); + LOGGER.debug("Enter hub_id: "); + int hubIdNull = SCANNER.nextInt(); + Hub hubEntity = hubIdNull == 0 ? null : hubController.findById(hubIdNull); + LOGGER.debug("Enter devices_group_id: "); + int groupIdNull = SCANNER.nextInt(); + DevicesGroup deviceEntity = + groupIdNull == 0 ? null : devicesGroupController.findById(groupIdNull); + return new Device(model, + status, + serviceLifeEndTime, + warrantyEndTime, + onBattery, + hubEntity, + deviceEntity); + } + + private void createDevice() { + final Device device = getDeviceInputs(); + deviceController.create(device); + LOGGER.debug("Device was added to the table."); + showMenu.displayMenu(); + } + + private void updateDevice() { + LOGGER.debug("\nEnter id to update : "); + final Integer id = SCANNER.nextInt(); + final Device device = getDeviceInputs(); + device.setId(id); + deviceController.update(device.getId(), device); + LOGGER.debug("Updated device, id = " + id); + showMenu.displayMenu(); + } + + private void deleteDevice() { + LOGGER.debug("\nEnter id to delete device: "); + final Integer id = SCANNER.nextInt(); + deviceController.delete(id); + LOGGER.debug("Deleted device, id = " + id); + showMenu.displayMenu(); + } + + + private void getAllNotifications() { + notificationController.findAll(); + showMenu.displayMenu(); + } + + private void getNotificationById() { + LOGGER.debug("\nEnter Id: "); + final Integer id = SCANNER.nextInt(); + LOGGER.debug(notificationController.findById(id).toString()); + showMenu.displayMenu(); + } + + private Notification getNotificationInputs() { + LOGGER.debug("Enter timestamp: "); + SCANNER.nextLine(); + final Timestamp timestamp = Timestamp.valueOf(SCANNER.nextLine()); + LOGGER.debug("Enter type: "); + final String type = SCANNER.next(); + LOGGER.debug("\nEnter device_id: "); + Integer deviceIdNull = SCANNER.nextInt(); + deviceIdNull = deviceIdNull == 0 ? null : deviceIdNull; + final Device deviceEntity = deviceController.findById(deviceIdNull); + LOGGER.debug("\nEnter hub_id: "); + Integer hubIdNull = SCANNER.nextInt(); + hubIdNull = hubIdNull == 0 ? null : hubIdNull; + final Hub hubEntity = hubController.findById(hubIdNull); + return new Notification(null, timestamp, type, deviceEntity, hubEntity); + } + + private void createNotification() { + Notification notification = getNotificationInputs(); + notificationController.create(notification); + LOGGER.debug("Notification was added to the table."); + showMenu.displayMenu(); + } + + private void updateNotification() { + LOGGER.debug("\nEnter id to update:"); + Integer id = SCANNER.nextInt(); + Notification notification = getNotificationInputs(); + notification.setId(id); + notificationController.update(notification.getId(), notification); + LOGGER.debug("Updated notification, id = " + id); + showMenu.displayMenu(); + } + + private void deleteNotification() { + LOGGER.debug("\nEnter id to delete notification: "); + Integer id = SCANNER.nextInt(); + notificationController.delete(id); + LOGGER.debug("Deleted notification, id = " + id); + showMenu.displayMenu(); + } + + + private void getAllUsersGroups() { + usersGroupController.findAll(); + showMenu.displayMenu(); + } + + private void getUsersGroupById() { + LOGGER.debug("\nEnter ID: "); + Integer id = SCANNER.nextInt(); + LOGGER.debug(usersGroupController.findById(id).toString()); + showMenu.displayMenu(); + } + + private UsersGroup getUsersGroupInputs() { + LOGGER.debug("\nEnter name: "); + String name = SCANNER.next(); + LOGGER.debug("\nEnter description: "); + String description = SCANNER.next(); + LOGGER.debug("Enter hub_id: "); + Integer hubId = SCANNER.nextInt(); + Hub hubEntity = hubController.findById(hubId); + return new UsersGroup(name, description, hubEntity); + } + + private void createUsersGroup() { + UsersGroup group = getUsersGroupInputs(); + usersGroupController.create(group); + LOGGER.debug("Group was added to the table."); + showMenu.displayMenu(); + } + + private void updateUsersGroup() { + LOGGER.debug("\nEnter id to update:"); + Integer id = SCANNER.nextInt(); + UsersGroup group = getUsersGroupInputs(); + group.setId(id); + usersGroupController.update(group.getId(), group); + LOGGER.debug("Updated group, id = " + id); + showMenu.displayMenu(); + } + + private void deleteUsersGroup() { + LOGGER.debug("\nEnter ID to delete group: "); + int id = SCANNER.nextInt(); + usersGroupController.delete(id); + LOGGER.debug("Deleted group, id = " + id); + showMenu.displayMenu(); + } + + + private void getAllDevicesGroups() { + devicesGroupController.findAll(); + showMenu.displayMenu(); + } + + private void getDevicesGroupById() { + LOGGER.debug("\nEnter ID: "); + Integer id = SCANNER.nextInt(); + LOGGER.debug(devicesGroupController.findById(id).toString()); + showMenu.displayMenu(); + } + + private DevicesGroup getDevicesGroupInputs() { + LOGGER.debug("\nEnter name: "); + String name = SCANNER.next(); + return new DevicesGroup(null, name, null); + } + + private void createDevicesGroup() { + DevicesGroup group = getDevicesGroupInputs(); + devicesGroupController.create(group); + LOGGER.debug("Group was added to the table."); + showMenu.displayMenu(); + } + + private void updateDevicesGroup() { + LOGGER.debug("\nEnter id to update:"); + Integer id = SCANNER.nextInt(); + DevicesGroup group = getDevicesGroupInputs(); + group.setId(id); + devicesGroupController.update(group.getId(), group); + LOGGER.debug("Updated group, id = " + id); + showMenu.displayMenu(); + } + + private void deleteDevicesGroup() { + LOGGER.debug("\nEnter ID to delete group: "); + int id = SCANNER.nextInt(); + usersGroupController.delete(id); + LOGGER.debug("Deleted group, id = " + id); + showMenu.displayMenu(); + } + + + private void getAllPermissions() { + permissionController.findAll(); + showMenu.displayMenu(); + } + + private void getPermissionById() { + LOGGER.debug("\nEnter ID: "); + Integer id = SCANNER.nextInt(); + LOGGER.debug(permissionController.findById(id).toString()); + showMenu.displayMenu(); + } + + private Permission getPermissionInputs() { + LOGGER.debug("Enter permission_name: "); + SCANNER.nextLine(); + final String name = SCANNER.nextLine(); + LOGGER.debug("Enter hub_id: "); + int hubIdNull = SCANNER.nextInt(); + final Hub hubId = hubIdNull == 0 ? null : hubController.findById(hubIdNull); + LOGGER.debug("Enter user_id: "); + int userIdNull = SCANNER.nextInt(); + final User userId = userIdNull == 0 ? null : userController.findById(userIdNull); + LOGGER.debug("Enter group_id: "); + int groupIdNull = SCANNER.nextInt(); + final UsersGroup groupId = groupIdNull == 0 ? null : usersGroupController.findById(groupIdNull); + LOGGER.debug("Enter device_id: "); + int deviceIdNull = SCANNER.nextInt(); + Device deviceId = deviceIdNull == 0 ? null : deviceController.findById(deviceIdNull); + return new Permission(null, name, hubId, userId, groupId, deviceId); + } + + private void createPermission() { + Permission permission = getPermissionInputs(); + permissionController.create(permission); + LOGGER.debug("Permission was added to the table."); + showMenu.displayMenu(); + } + + private void updatePermission() { + LOGGER.debug("\nEnter id to update: "); + Integer id = SCANNER.nextInt(); + Permission permission = getPermissionInputs(); + permission.setId(id); + permissionController.update(permission.getId(), permission); + LOGGER.debug("Updated permission, id = " + id); + showMenu.displayMenu(); + } + + private void deletePermission() { + LOGGER.debug("\nEnter ID to delete permission: "); + int id = SCANNER.nextInt(); + permissionController.delete(id); + LOGGER.debug("Deleted permission, id = " + id); + showMenu.displayMenu(); + } + + + private void getAllRexes() { + rexController.findAll(); + showMenu.displayMenu(); + } + + private void getRexById() { + LOGGER.debug("\nEnter ID: "); + Integer id = SCANNER.nextInt(); + LOGGER.debug(rexController.findById(id).toString()); + showMenu.displayMenu(); + } + + private Rex getRexInputs() { + LOGGER.debug("\nEnter name: "); + String name = SCANNER.next(); + LOGGER.debug("\nEnter range: "); + String range = SCANNER.next(); + LOGGER.debug("Enter hub_id: "); + Integer hubId = SCANNER.nextInt(); + Hub hubEntity = hubController.findById(hubId); + return new Rex(null, name, range, hubEntity); + } + + private void createRex() { + + Rex rex = getRexInputs(); + rexController.create(rex); + LOGGER.debug("Rex was added to the table."); + showMenu.displayMenu(); + } + + private void updateRex() { + LOGGER.debug("\nEnter id to update: "); + Integer id = SCANNER.nextInt(); + Rex rex = getRexInputs(); + rex.setId(id); + rexController.update(rex.getId(), rex); + LOGGER.debug("Updated rex, id = " + id); + showMenu.displayMenu(); + } + + private void deleteRex() { + LOGGER.debug("\nEnter id to delete rex: "); + int id = SCANNER.nextInt(); + rexController.delete(id); + LOGGER.debug("Deleted rex, id = " + id); + showMenu.displayMenu(); + } +} diff --git a/src/main/java/com/mkruchok/view/package-info.java b/src/main/java/com/mkruchok/view/package-info.java new file mode 100644 index 0000000..45044f2 --- /dev/null +++ b/src/main/java/com/mkruchok/view/package-info.java @@ -0,0 +1 @@ +package com.mkruchok.view; \ No newline at end of file diff --git a/src/main/resources/hibernate.cfg.xml b/src/main/resources/hibernate.cfg.xml new file mode 100644 index 0000000..f53a139 --- /dev/null +++ b/src/main/resources/hibernate.cfg.xml @@ -0,0 +1,21 @@ + + + + + jdbc:mysql://localhost:3306/ajax_curr + com.mysql.cj.jdbc.Driver + root + admin + thread + + + + + + + + + + \ No newline at end of file