diff --git a/.idea/dataSources.xml b/.idea/dataSources.xml index 19894b9..9ccce18 100644 --- a/.idea/dataSources.xml +++ b/.idea/dataSources.xml @@ -4,6 +4,7 @@ postgresql true + true org.postgresql.Driver jdbc:postgresql://pg:5432/studs $ProjectFileDir$ diff --git a/build.gradle b/build.gradle index e90c9c8..4d44648 100644 --- a/build.gradle +++ b/build.gradle @@ -22,10 +22,11 @@ tasks.withType(JavaCompile) { } dependencies { - compileOnly('javax.persistence:javax.persistence-api:2.2') - compileOnly('javax.faces:javax.faces-api:2.3') - compileOnly('javax.enterprise:cdi-api:2.0.SP1') - compileOnly('org.primefaces:primefaces:11.0.0') + compileOnly 'javax.persistence:javax.persistence-api:2.2' + compileOnly 'javax.enterprise:cdi-api:2.0.SP1' + compileOnly 'javax.faces:javax.faces-api:2.3-pfd' + compileOnly 'org.postgresql:postgresql:42.5.4' + compileOnly 'org.hibernate:hibernate-core:6.1.7.Final' testImplementation("org.junit.jupiter:junit-jupiter-api:${junitVersion}") testRuntimeOnly("org.junit.jupiter:junit-jupiter-engine:${junitVersion}") diff --git a/src/main/java/ru/erius/weblab3/data/HitInfo.java b/src/main/java/ru/erius/weblab3/data/HitInfo.java index 55f9119..40fe9ef 100644 --- a/src/main/java/ru/erius/weblab3/data/HitInfo.java +++ b/src/main/java/ru/erius/weblab3/data/HitInfo.java @@ -1,12 +1,27 @@ package ru.erius.weblab3.data; +import javax.persistence.*; import java.io.Serializable; +@Entity(name = "hit_info") +@Table(name = "hit_info", schema = "s316304") +@NamedQueries({ + @NamedQuery(name = "load", query = "select h from hit_info h"), + @NamedQuery(name = "clear", query = "delete from hit_info") +}) public class HitInfo implements Serializable { + @Id + @GeneratedValue(strategy = GenerationType.IDENTITY) + @Column(name = "id") + private long id; + @Column(name = "x") private float x; + @Column(name = "y") private float y; + @Column(name = "r") private float r = 1; + @Column(name = "hit") private boolean hit; public HitInfo() { @@ -57,4 +72,12 @@ public class HitInfo implements Serializable { public void setHit(boolean hit) { this.hit = hit; } + + public void setId(Long id) { + this.id = id; + } + + public Long getId() { + return id; + } } diff --git a/src/main/java/ru/erius/weblab3/data/HitInfoBean.java b/src/main/java/ru/erius/weblab3/data/HitInfoBean.java index aa286b1..a84f725 100644 --- a/src/main/java/ru/erius/weblab3/data/HitInfoBean.java +++ b/src/main/java/ru/erius/weblab3/data/HitInfoBean.java @@ -2,6 +2,7 @@ package ru.erius.weblab3.data; import javax.enterprise.context.ApplicationScoped; import javax.enterprise.inject.Model; +import javax.persistence.*; import java.io.Serializable; import java.util.ArrayList; import java.util.List; @@ -9,24 +10,63 @@ import java.util.List; @Model @ApplicationScoped public class HitInfoBean implements Serializable { + private final EntityManagerFactory entityManagerFactory = Persistence.createEntityManagerFactory("hit-info-unit"); private List hitInfos = new ArrayList<>(); private HitInfo latest = new HitInfo(); private HitInfo plotLatest = new HitInfo(); - public void plotAdd() { - plotLatest.hitCheck(); - HitInfo toAdd = new HitInfo(plotLatest.getX(), plotLatest.getY(), plotLatest.getR(), plotLatest.isHit()); - hitInfos.add(toAdd); + public HitInfoBean() { + load(); } - public void add() { + public void plotAdd() { + plotLatest.hitCheck(); + HitInfo hitInfo = new HitInfo(plotLatest.getX(), plotLatest.getY(), plotLatest.getR(), plotLatest.isHit()); + add(hitInfo); + } + + public void btnAdd() { latest.hitCheck(); - HitInfo toAdd = new HitInfo(latest.getX(), latest.getY(), latest.getR(), latest.isHit()); - hitInfos.add(toAdd); + HitInfo hitInfo = new HitInfo(latest.getX(), latest.getY(), latest.getR(), latest.isHit()); + add(hitInfo); + } + + private void add(HitInfo hitInfo) { + hitInfos.add(hitInfo); + EntityManager entityManager = entityManagerFactory.createEntityManager(); + try { + entityManager.getTransaction().begin(); + entityManager.persist(hitInfo); + entityManager.getTransaction().commit(); + } finally { + entityManager.close(); + } + } + + private void load() { + EntityManager entityManager = entityManagerFactory.createEntityManager(); + try { + entityManager.getTransaction().begin(); + + TypedQuery loadAllQuery = entityManager.createNamedQuery("load", HitInfo.class); + hitInfos = loadAllQuery.getResultList(); + entityManager.getTransaction().commit(); + } finally { + entityManager.close(); + } } public void clear() { hitInfos.clear(); + EntityManager entityManager = entityManagerFactory.createEntityManager(); + try { + entityManager.getTransaction().begin(); + Query clearAllQuery = entityManager.createNamedQuery("clear"); + clearAllQuery.executeUpdate(); + entityManager.getTransaction().commit(); + } finally { + entityManager.close(); + } latest = new HitInfo(); } diff --git a/src/main/resources/META-INF/persistence.xml b/src/main/resources/META-INF/persistence.xml index a97e615..f5a237a 100644 --- a/src/main/resources/META-INF/persistence.xml +++ b/src/main/resources/META-INF/persistence.xml @@ -3,7 +3,9 @@ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="https://jakarta.ee/xml/ns/persistence https://jakarta.ee/xml/ns/persistence/persistence_3_0.xsd" version="3.0"> - - + + org.hibernate.jpa.HibernatePersistenceProvider + java:/PostgresDS + ru.erius.weblab3.data.HitInfo diff --git a/src/main/resources/hibernate.cfg.xml b/src/main/resources/hibernate.cfg.xml index 39b0987..87b5b4d 100644 --- a/src/main/resources/hibernate.cfg.xml +++ b/src/main/resources/hibernate.cfg.xml @@ -4,12 +4,10 @@ "http://www.hibernate.org/dtd/hibernate-configuration-3.0.dtd"> - - - - - - - + org.postgresql.Driver + java:/PostgresDS + org.hibernate.dialect.PostgreSQLDialect + update + \ No newline at end of file diff --git a/src/main/webapp/WEB-INF/faces-config.xml b/src/main/webapp/WEB-INF/faces-config.xml index 299e28c..ed785be 100644 --- a/src/main/webapp/WEB-INF/faces-config.xml +++ b/src/main/webapp/WEB-INF/faces-config.xml @@ -3,5 +3,17 @@ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-facesconfig_2_2.xsd"> - + + /check_hit.xhtml + + index + /index.xhtml + + + + check_hit + /check_hit.xhtml + + + \ No newline at end of file diff --git a/src/main/webapp/check_hit.xhtml b/src/main/webapp/check_hit.xhtml index 6d529fe..f84076e 100644 --- a/src/main/webapp/check_hit.xhtml +++ b/src/main/webapp/check_hit.xhtml @@ -43,7 +43,7 @@
- +