initiall commit
This commit is contained in:
commit
768f1bafb5
29
README.md
Normal file
29
README.md
Normal file
|
@ -0,0 +1,29 @@
|
||||||
|
## Лабораторная работа #3
|
||||||
|
|
||||||
|
![img.png](img.png)
|
||||||
|
Вариант 665
|
||||||
|
|
||||||
|
Разработать приложение на базе JavaServer Faces Framework, которое осуществляет проверку попадания точки в заданную область на координатной плоскости.
|
||||||
|
|
||||||
|
Приложение должно включать в себя 2 facelets-шаблона - стартовую страницу и основную страницу приложения, а также набор управляемых бинов (managed beans), реализующих логику на стороне сервера.
|
||||||
|
|
||||||
|
Стартовая страница должна содержать следующие элементы:
|
||||||
|
|
||||||
|
"Шапку", содержащую ФИО студента, номер группы и номер варианта.
|
||||||
|
Интерактивные часы, показывающие текущие дату и время, обновляющиеся раз в 11 секунд.
|
||||||
|
Ссылку, позволяющую перейти на основную страницу приложения.
|
||||||
|
|
||||||
|
Основная страница приложения должна содержать следующие элементы:
|
||||||
|
|
||||||
|
Набор компонентов для задания координат точки и радиуса области в соответствии с вариантом задания. Может потребоваться использование дополнительных библиотек компонентов - ICEfaces (префикс "ace") и PrimeFaces (префикс "p"). Если компонент допускает ввод заведомо некорректных данных (таких, например, как буквы в координатах точки или отрицательный радиус), то приложение должно осуществлять их валидацию.
|
||||||
|
Динамически обновляемую картинку, изображающую область на координатной плоскости в соответствии с номером варианта и точки, координаты которых были заданы пользователем. Клик по картинке должен инициировать сценарий, осуществляющий определение координат новой точки и отправку их на сервер для проверки её попадания в область. Цвет точек должен зависить от факта попадания / непопадания в область. Смена радиуса также должна инициировать перерисовку картинки.
|
||||||
|
Таблицу со списком результатов предыдущих проверок.
|
||||||
|
Ссылку, позволяющую вернуться на стартовую страницу.
|
||||||
|
|
||||||
|
Дополнительные требования к приложению:
|
||||||
|
|
||||||
|
Все результаты проверки должны сохраняться в базе данных под управлением СУБД PostgreSQL.
|
||||||
|
Для доступа к БД необходимо использовать протокол JDBC без каких-либо дополнительных библиотек.
|
||||||
|
Для управления списком результатов должен использоваться Application-scoped Managed Bean.
|
||||||
|
Конфигурация управляемых бинов должна быть задана с помощью аннотаций.
|
||||||
|
Правила навигации между страницами приложения должны быть заданы в отдельном конфигурационном файле.
|
9
migrations/V1_01__initial_schema.sql
Normal file
9
migrations/V1_01__initial_schema.sql
Normal file
|
@ -0,0 +1,9 @@
|
||||||
|
CREATE TABLE IF NOT EXISTS points (
|
||||||
|
id SERIAL PRIMARY KEY,
|
||||||
|
x DOUBLE PRECISION NOT NULL,
|
||||||
|
y DOUBLE PRECISION NOT NULL,
|
||||||
|
r DOUBLE PRECISION NOT NULL,
|
||||||
|
hit BOOLEAN NOT NULL,
|
||||||
|
timestamp BIGINT NOT NULL,
|
||||||
|
execution_time BIGINT NOT NULL
|
||||||
|
);
|
1
migrations/V1_01__rollback.sql
Normal file
1
migrations/V1_01__rollback.sql
Normal file
|
@ -0,0 +1 @@
|
||||||
|
DROP TABLE IF EXISTS points;
|
67
pom.xml
Normal file
67
pom.xml
Normal file
|
@ -0,0 +1,67 @@
|
||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<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 http://maven.apache.org/xsd/maven-4.0.0.xsd">
|
||||||
|
<modelVersion>4.0.0</modelVersion>
|
||||||
|
|
||||||
|
<groupId>ru.akarpov</groupId>
|
||||||
|
<artifactId>web-3</artifactId>
|
||||||
|
<version>1.0-SNAPSHOT</version>
|
||||||
|
<packaging>war</packaging>
|
||||||
|
|
||||||
|
<properties>
|
||||||
|
<maven.compiler.source>17</maven.compiler.source>
|
||||||
|
<maven.compiler.target>17</maven.compiler.target>
|
||||||
|
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
|
||||||
|
<jsf.version>3.0.0</jsf.version>
|
||||||
|
<primefaces.version>12.0.0</primefaces.version>
|
||||||
|
</properties>
|
||||||
|
|
||||||
|
<dependencies>
|
||||||
|
<!-- JSF API and Implementation -->
|
||||||
|
<dependency>
|
||||||
|
<groupId>jakarta.faces</groupId>
|
||||||
|
<artifactId>jakarta.faces-api</artifactId>
|
||||||
|
<version>${jsf.version}</version>
|
||||||
|
<scope>provided</scope>
|
||||||
|
</dependency>
|
||||||
|
<dependency>
|
||||||
|
<groupId>org.glassfish</groupId>
|
||||||
|
<artifactId>jakarta.faces</artifactId>
|
||||||
|
<version>${jsf.version}</version>
|
||||||
|
</dependency>
|
||||||
|
|
||||||
|
<!-- PrimeFaces -->
|
||||||
|
<dependency>
|
||||||
|
<groupId>org.primefaces</groupId>
|
||||||
|
<artifactId>primefaces</artifactId>
|
||||||
|
<version>${primefaces.version}</version>
|
||||||
|
<classifier>jakarta</classifier>
|
||||||
|
</dependency>
|
||||||
|
|
||||||
|
<!-- PostgreSQL JDBC Driver -->
|
||||||
|
<dependency>
|
||||||
|
<groupId>org.postgresql</groupId>
|
||||||
|
<artifactId>postgresql</artifactId>
|
||||||
|
<version>42.6.0</version>
|
||||||
|
</dependency>
|
||||||
|
|
||||||
|
<!-- Jakarta EE Web API -->
|
||||||
|
<dependency>
|
||||||
|
<groupId>jakarta.platform</groupId>
|
||||||
|
<artifactId>jakarta.jakartaee-web-api</artifactId>
|
||||||
|
<version>9.1.0</version>
|
||||||
|
<scope>provided</scope>
|
||||||
|
</dependency>
|
||||||
|
</dependencies>
|
||||||
|
|
||||||
|
<build>
|
||||||
|
<plugins>
|
||||||
|
<plugin>
|
||||||
|
<groupId>org.apache.maven.plugins</groupId>
|
||||||
|
<artifactId>maven-war-plugin</artifactId>
|
||||||
|
<version>3.3.2</version>
|
||||||
|
</plugin>
|
||||||
|
</plugins>
|
||||||
|
</build>
|
||||||
|
</project>
|
104
src/main/java/ru/akarpov/web3/beans/BinaryClockBean.java
Normal file
104
src/main/java/ru/akarpov/web3/beans/BinaryClockBean.java
Normal file
|
@ -0,0 +1,104 @@
|
||||||
|
package ru.akarpov.web3.beans;
|
||||||
|
|
||||||
|
import jakarta.enterprise.context.ApplicationScoped;
|
||||||
|
import jakarta.inject.Named;
|
||||||
|
import java.time.LocalDateTime;
|
||||||
|
import java.time.format.DateTimeFormatter;
|
||||||
|
|
||||||
|
@Named
|
||||||
|
@ApplicationScoped
|
||||||
|
public class BinaryClockBean {
|
||||||
|
private static final DateTimeFormatter dateFormatter =
|
||||||
|
DateTimeFormatter.ofPattern("EEEE, MMMM d, yyyy");
|
||||||
|
|
||||||
|
public String getCurrentDate() {
|
||||||
|
return LocalDateTime.now().format(dateFormatter);
|
||||||
|
}
|
||||||
|
|
||||||
|
public String[] getHourBinary() {
|
||||||
|
return getBinary(getHours(), 5);
|
||||||
|
}
|
||||||
|
|
||||||
|
public String[] getMinuteBinary() {
|
||||||
|
return getBinary(getMinutes(), 6);
|
||||||
|
}
|
||||||
|
|
||||||
|
public String[] getSecondBinary() {
|
||||||
|
return getBinary(getSeconds(), 6);
|
||||||
|
}
|
||||||
|
|
||||||
|
public int[] getHourBitValues() {
|
||||||
|
return getBitValues(5);
|
||||||
|
}
|
||||||
|
|
||||||
|
public int[] getMinuteBitValues() {
|
||||||
|
return getBitValues(6);
|
||||||
|
}
|
||||||
|
|
||||||
|
public int[] getSecondBitValues() {
|
||||||
|
return getBitValues(6);
|
||||||
|
}
|
||||||
|
|
||||||
|
public int getHours() {
|
||||||
|
return LocalDateTime.now().getHour();
|
||||||
|
}
|
||||||
|
|
||||||
|
public int getMinutes() {
|
||||||
|
return LocalDateTime.now().getMinute();
|
||||||
|
}
|
||||||
|
|
||||||
|
public int getSeconds() {
|
||||||
|
return LocalDateTime.now().getSecond();
|
||||||
|
}
|
||||||
|
|
||||||
|
// Methods for Day, Month, Year in binary
|
||||||
|
public String[] getDayBinary() {
|
||||||
|
return getBinary(getDay(), 5);
|
||||||
|
}
|
||||||
|
|
||||||
|
public String[] getMonthBinary() {
|
||||||
|
return getBinary(getMonth(), 4);
|
||||||
|
}
|
||||||
|
|
||||||
|
public String[] getYearBinary() {
|
||||||
|
return getBinary(getYear() % 100, 7);
|
||||||
|
}
|
||||||
|
|
||||||
|
public int[] getDayBitValues() {
|
||||||
|
return getBitValues(5);
|
||||||
|
}
|
||||||
|
|
||||||
|
public int[] getMonthBitValues() {
|
||||||
|
return getBitValues(4);
|
||||||
|
}
|
||||||
|
|
||||||
|
public int[] getYearBitValues() {
|
||||||
|
return getBitValues(7);
|
||||||
|
}
|
||||||
|
|
||||||
|
public int getDay() {
|
||||||
|
return LocalDateTime.now().getDayOfMonth();
|
||||||
|
}
|
||||||
|
|
||||||
|
public int getMonth() {
|
||||||
|
return LocalDateTime.now().getMonthValue();
|
||||||
|
}
|
||||||
|
|
||||||
|
public int getYear() {
|
||||||
|
return LocalDateTime.now().getYear();
|
||||||
|
}
|
||||||
|
|
||||||
|
private String[] getBinary(int value, int length) {
|
||||||
|
String binary = String.format("%" + length + "s",
|
||||||
|
Integer.toBinaryString(value)).replace(' ', '0');
|
||||||
|
return binary.split("");
|
||||||
|
}
|
||||||
|
|
||||||
|
private int[] getBitValues(int length) {
|
||||||
|
int[] bitValues = new int[length];
|
||||||
|
for (int i = 0; i < length; i++) {
|
||||||
|
bitValues[i] = (int) Math.pow(2, length - i - 1);
|
||||||
|
}
|
||||||
|
return bitValues;
|
||||||
|
}
|
||||||
|
}
|
69
src/main/java/ru/akarpov/web3/beans/PointBean.java
Normal file
69
src/main/java/ru/akarpov/web3/beans/PointBean.java
Normal file
|
@ -0,0 +1,69 @@
|
||||||
|
package ru.akarpov.web3.beans;
|
||||||
|
|
||||||
|
import jakarta.enterprise.context.ApplicationScoped;
|
||||||
|
import jakarta.annotation.PostConstruct;
|
||||||
|
import jakarta.inject.Named;
|
||||||
|
import ru.akarpov.web3.data.DatabaseHandler;
|
||||||
|
import ru.akarpov.web3.model.Point;
|
||||||
|
import ru.akarpov.web3.util.AreaChecker;
|
||||||
|
|
||||||
|
import java.io.Serializable;
|
||||||
|
import java.time.LocalDateTime;
|
||||||
|
import java.util.ArrayList;
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
@Named
|
||||||
|
@ApplicationScoped
|
||||||
|
public class PointBean implements Serializable {
|
||||||
|
private double x;
|
||||||
|
private double y;
|
||||||
|
private double r = 2.0;
|
||||||
|
private List<Point> points;
|
||||||
|
private final DatabaseHandler dbHandler = new DatabaseHandler();
|
||||||
|
|
||||||
|
@PostConstruct
|
||||||
|
public void init() {
|
||||||
|
points = dbHandler.loadPoints();
|
||||||
|
if (points == null) {
|
||||||
|
points = new ArrayList<>();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public void addPoint() {
|
||||||
|
long startTime = System.nanoTime();
|
||||||
|
boolean hit = AreaChecker.checkHit(x, y, r);
|
||||||
|
long executionTime = (System.nanoTime() - startTime) / 1000000; // Convert to milliseconds
|
||||||
|
|
||||||
|
Point point = new Point(x, y, r, hit, LocalDateTime.now(), executionTime);
|
||||||
|
points.add(point);
|
||||||
|
dbHandler.savePoint(point);
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setX(double x) {
|
||||||
|
this.x = x;
|
||||||
|
}
|
||||||
|
|
||||||
|
public double getX() {
|
||||||
|
return x;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setY(double y) {
|
||||||
|
this.y = y;
|
||||||
|
}
|
||||||
|
|
||||||
|
public double getY() {
|
||||||
|
return y;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setR(double r) {
|
||||||
|
this.r = r;
|
||||||
|
}
|
||||||
|
|
||||||
|
public double getR() {
|
||||||
|
return r;
|
||||||
|
}
|
||||||
|
|
||||||
|
public List<Point> getPoints() {
|
||||||
|
return points;
|
||||||
|
}
|
||||||
|
}
|
87
src/main/java/ru/akarpov/web3/data/DatabaseHandler.java
Normal file
87
src/main/java/ru/akarpov/web3/data/DatabaseHandler.java
Normal file
|
@ -0,0 +1,87 @@
|
||||||
|
package ru.akarpov.web3.data;
|
||||||
|
|
||||||
|
import ru.akarpov.web3.model.Point;
|
||||||
|
|
||||||
|
import java.sql.*;
|
||||||
|
import java.time.LocalDateTime;
|
||||||
|
import java.util.ArrayList;
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
public class DatabaseHandler {
|
||||||
|
private static final String URL = "jdbc:postgresql://localhost:5432/web-3";
|
||||||
|
private static final String USER = "postgres";
|
||||||
|
private static final String PASSWORD = "postgres";
|
||||||
|
|
||||||
|
public DatabaseHandler() {
|
||||||
|
initTable();
|
||||||
|
}
|
||||||
|
|
||||||
|
private void initTable() {
|
||||||
|
String sql = """
|
||||||
|
CREATE TABLE IF NOT EXISTS points (
|
||||||
|
id SERIAL PRIMARY KEY,
|
||||||
|
x DOUBLE PRECISION NOT NULL,
|
||||||
|
y DOUBLE PRECISION NOT NULL,
|
||||||
|
r DOUBLE PRECISION NOT NULL,
|
||||||
|
hit BOOLEAN NOT NULL,
|
||||||
|
timestamp TIMESTAMP NOT NULL,
|
||||||
|
execution_time BIGINT NOT NULL
|
||||||
|
)""";
|
||||||
|
|
||||||
|
try (Connection conn = getConnection();
|
||||||
|
Statement stmt = conn.createStatement()) {
|
||||||
|
stmt.execute(sql);
|
||||||
|
} catch (SQLException e) {
|
||||||
|
throw new RuntimeException("Could not initialize table", e);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public void savePoint(Point point) {
|
||||||
|
String sql = "INSERT INTO points (x, y, r, hit, timestamp, execution_time) VALUES (?, ?, ?, ?, ?, ?)";
|
||||||
|
|
||||||
|
try (Connection conn = getConnection();
|
||||||
|
PreparedStatement pstmt = conn.prepareStatement(sql)) {
|
||||||
|
|
||||||
|
pstmt.setDouble(1, point.getX());
|
||||||
|
pstmt.setDouble(2, point.getY());
|
||||||
|
pstmt.setDouble(3, point.getR());
|
||||||
|
pstmt.setBoolean(4, point.isHit());
|
||||||
|
pstmt.setObject(5, point.getTimestamp());
|
||||||
|
pstmt.setLong(6, point.getExecutionTime());
|
||||||
|
|
||||||
|
pstmt.executeUpdate();
|
||||||
|
} catch (SQLException e) {
|
||||||
|
throw new RuntimeException("Could not save point", e);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public List<Point> loadPoints() {
|
||||||
|
List<Point> points = new ArrayList<>();
|
||||||
|
String sql = "SELECT * FROM points ORDER BY timestamp DESC";
|
||||||
|
|
||||||
|
try (Connection conn = getConnection();
|
||||||
|
Statement stmt = conn.createStatement();
|
||||||
|
ResultSet rs = stmt.executeQuery(sql)) {
|
||||||
|
|
||||||
|
while (rs.next()) {
|
||||||
|
Point point = new Point(
|
||||||
|
rs.getDouble("x"),
|
||||||
|
rs.getDouble("y"),
|
||||||
|
rs.getDouble("r"),
|
||||||
|
rs.getBoolean("hit"),
|
||||||
|
rs.getObject("timestamp", LocalDateTime.class),
|
||||||
|
rs.getLong("execution_time")
|
||||||
|
);
|
||||||
|
points.add(point);
|
||||||
|
}
|
||||||
|
} catch (SQLException e) {
|
||||||
|
throw new RuntimeException("Could not load points", e);
|
||||||
|
}
|
||||||
|
|
||||||
|
return points;
|
||||||
|
}
|
||||||
|
|
||||||
|
private Connection getConnection() throws SQLException {
|
||||||
|
return DriverManager.getConnection(URL, USER, PASSWORD);
|
||||||
|
}
|
||||||
|
}
|
50
src/main/java/ru/akarpov/web3/model/Point.java
Normal file
50
src/main/java/ru/akarpov/web3/model/Point.java
Normal file
|
@ -0,0 +1,50 @@
|
||||||
|
package ru.akarpov.web3.model;
|
||||||
|
|
||||||
|
import java.io.Serializable;
|
||||||
|
import java.time.LocalDateTime;
|
||||||
|
import java.time.format.DateTimeFormatter;
|
||||||
|
|
||||||
|
public class Point implements Serializable {
|
||||||
|
private double x;
|
||||||
|
private double y;
|
||||||
|
private double r;
|
||||||
|
private boolean hit;
|
||||||
|
private LocalDateTime timestamp;
|
||||||
|
private long executionTime;
|
||||||
|
private static final DateTimeFormatter formatter =
|
||||||
|
DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
|
||||||
|
|
||||||
|
public Point() {}
|
||||||
|
|
||||||
|
public Point(double x, double y, double r, boolean hit, LocalDateTime timestamp, long executionTime) {
|
||||||
|
this.x = x;
|
||||||
|
this.y = y;
|
||||||
|
this.r = r;
|
||||||
|
this.hit = hit;
|
||||||
|
this.timestamp = timestamp;
|
||||||
|
this.executionTime = executionTime;
|
||||||
|
}
|
||||||
|
|
||||||
|
public double getX() { return x; }
|
||||||
|
public void setX(double x) { this.x = x; }
|
||||||
|
|
||||||
|
public double getY() { return y; }
|
||||||
|
public void setY(double y) { this.y = y; }
|
||||||
|
|
||||||
|
public double getR() { return r; }
|
||||||
|
public void setR(double r) { this.r = r; }
|
||||||
|
|
||||||
|
public boolean isHit() { return hit; }
|
||||||
|
public void setHit(boolean hit) { this.hit = hit; }
|
||||||
|
|
||||||
|
public LocalDateTime getTimestamp() { return timestamp; }
|
||||||
|
public void setTimestamp(LocalDateTime timestamp) { this.timestamp = timestamp; }
|
||||||
|
|
||||||
|
// For display purposes
|
||||||
|
public String getFormattedTimestamp() {
|
||||||
|
return timestamp != null ? timestamp.format(formatter) : "";
|
||||||
|
}
|
||||||
|
|
||||||
|
public long getExecutionTime() { return executionTime; }
|
||||||
|
public void setExecutionTime(long executionTime) { this.executionTime = executionTime; }
|
||||||
|
}
|
20
src/main/java/ru/akarpov/web3/util/AreaChecker.java
Normal file
20
src/main/java/ru/akarpov/web3/util/AreaChecker.java
Normal file
|
@ -0,0 +1,20 @@
|
||||||
|
package ru.akarpov.web3.util;
|
||||||
|
|
||||||
|
public class AreaChecker {
|
||||||
|
public static boolean checkHit(double x, double y, double r) {
|
||||||
|
// Triangle in -x, -y quadrant
|
||||||
|
if (x <= 0 && y <= 0) {
|
||||||
|
return x >= -r/2 && y >= -r && y >= -2*x - r;
|
||||||
|
}
|
||||||
|
// Square in -x, +y quadrant
|
||||||
|
if (x <= 0 && y >= 0) {
|
||||||
|
return x >= -r/2 && y <= r;
|
||||||
|
}
|
||||||
|
// Quarter circle in +x, -y quadrant
|
||||||
|
if (x >= 0 && y <= 0) {
|
||||||
|
return x*x + y*y <= r*r;
|
||||||
|
}
|
||||||
|
// Nothing in +x, +y quadrant
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
3
src/main/resources/db.properties
Normal file
3
src/main/resources/db.properties
Normal file
|
@ -0,0 +1,3 @@
|
||||||
|
db.url=jdbc:postgresql://localhost:5432/web-3
|
||||||
|
db.user=postgres
|
||||||
|
db.password=postgres
|
26
src/main/webapp/WEB-INF/faces-config.xml
Normal file
26
src/main/webapp/WEB-INF/faces-config.xml
Normal file
|
@ -0,0 +1,26 @@
|
||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<faces-config
|
||||||
|
xmlns="https://jakarta.ee/xml/ns/jakartaee"
|
||||||
|
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
|
||||||
|
xsi:schemaLocation="https://jakarta.ee/xml/ns/jakartaee https://jakarta.ee/xml/ns/jakartaee/web-facesconfig_3_0.xsd"
|
||||||
|
version="3.0">
|
||||||
|
|
||||||
|
<navigation-rule>
|
||||||
|
<from-view-id>/index.xhtml</from-view-id>
|
||||||
|
<navigation-case>
|
||||||
|
<from-outcome>main</from-outcome>
|
||||||
|
<to-view-id>/main.xhtml</to-view-id>
|
||||||
|
<redirect/>
|
||||||
|
</navigation-case>
|
||||||
|
</navigation-rule>
|
||||||
|
|
||||||
|
<navigation-rule>
|
||||||
|
<from-view-id>/main.xhtml</from-view-id>
|
||||||
|
<navigation-case>
|
||||||
|
<from-outcome>index</from-outcome>
|
||||||
|
<to-view-id>/index.xhtml</to-view-id>
|
||||||
|
<redirect/>
|
||||||
|
</navigation-case>
|
||||||
|
</navigation-rule>
|
||||||
|
|
||||||
|
</faces-config>
|
30
src/main/webapp/WEB-INF/web.xml
Normal file
30
src/main/webapp/WEB-INF/web.xml
Normal file
|
@ -0,0 +1,30 @@
|
||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<web-app xmlns="https://jakarta.ee/xml/ns/jakartaee"
|
||||||
|
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
|
||||||
|
xsi:schemaLocation="https://jakarta.ee/xml/ns/jakartaee https://jakarta.ee/xml/ns/jakartaee/web-app_5_0.xsd"
|
||||||
|
version="5.0">
|
||||||
|
<servlet>
|
||||||
|
<servlet-name>Faces Servlet</servlet-name>
|
||||||
|
<servlet-class>jakarta.faces.webapp.FacesServlet</servlet-class>
|
||||||
|
<load-on-startup>1</load-on-startup>
|
||||||
|
</servlet>
|
||||||
|
|
||||||
|
<servlet-mapping>
|
||||||
|
<servlet-name>Faces Servlet</servlet-name>
|
||||||
|
<url-pattern>*.xhtml</url-pattern>
|
||||||
|
</servlet-mapping>
|
||||||
|
|
||||||
|
<welcome-file-list>
|
||||||
|
<welcome-file>index.xhtml</welcome-file>
|
||||||
|
</welcome-file-list>
|
||||||
|
|
||||||
|
<error-page>
|
||||||
|
<error-code>404</error-code>
|
||||||
|
<location>/index.xhtml</location>
|
||||||
|
</error-page>
|
||||||
|
|
||||||
|
<context-param>
|
||||||
|
<param-name>jakarta.faces.STATE_SAVING_METHOD</param-name>
|
||||||
|
<param-value>client</param-value>
|
||||||
|
</context-param>
|
||||||
|
</web-app>
|
124
src/main/webapp/index.xhtml
Normal file
124
src/main/webapp/index.xhtml
Normal file
|
@ -0,0 +1,124 @@
|
||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<!DOCTYPE html>
|
||||||
|
<html xmlns="http://www.w3.org/1999/xhtml"
|
||||||
|
xmlns:h="http://xmlns.jcp.org/jsf/html"
|
||||||
|
xmlns:p="http://primefaces.org/ui"
|
||||||
|
xmlns:ui="http://xmlns.jcp.org/jsf/facelets"
|
||||||
|
xmlns:f="http://xmlns.jcp.org/jsf/core">
|
||||||
|
<h:head>
|
||||||
|
<title>Start Page</title>
|
||||||
|
<h:outputStylesheet name="css/styles.css"/>
|
||||||
|
</h:head>
|
||||||
|
<h:body>
|
||||||
|
<div class="header">
|
||||||
|
<h1>Web лаба 3</h1>
|
||||||
|
<p>сделал: Карпов Александр Дмитриевич</p>
|
||||||
|
<p>Группа: P3213</p>
|
||||||
|
<p>Вариант: 665</p>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="content">
|
||||||
|
<h:form id="clockForm">
|
||||||
|
<div class="clock-section">
|
||||||
|
<div class="date-display">
|
||||||
|
#{binaryClockBean.currentDate}
|
||||||
|
</div>
|
||||||
|
<div class="clock-container">
|
||||||
|
<!-- Time Columns -->
|
||||||
|
<!-- Hour Column -->
|
||||||
|
<div class="clock-column">
|
||||||
|
<div class="clock-label">Hours</div>
|
||||||
|
<div class="clock-bits">
|
||||||
|
<ui:repeat value="#{binaryClockBean.hourBinary}" var="bit" varStatus="status">
|
||||||
|
<div class="bit-row">
|
||||||
|
<div class="bit-value">#{binaryClockBean.hourBitValues[status.index]}</div>
|
||||||
|
<div class="clock-bit #{bit eq '1' ? 'active' : ''}"/>
|
||||||
|
</div>
|
||||||
|
</ui:repeat>
|
||||||
|
</div>
|
||||||
|
<div class="decimal-value">#{binaryClockBean.hours}</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<!-- Minute Column -->
|
||||||
|
<div class="clock-column">
|
||||||
|
<div class="clock-label">Minutes</div>
|
||||||
|
<div class="clock-bits">
|
||||||
|
<ui:repeat value="#{binaryClockBean.minuteBinary}" var="bit" varStatus="status">
|
||||||
|
<div class="bit-row">
|
||||||
|
<div class="bit-value">#{binaryClockBean.minuteBitValues[status.index]}</div>
|
||||||
|
<div class="clock-bit #{bit eq '1' ? 'active' : ''}"/>
|
||||||
|
</div>
|
||||||
|
</ui:repeat>
|
||||||
|
</div>
|
||||||
|
<div class="decimal-value">#{binaryClockBean.minutes}</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<!-- Second Column -->
|
||||||
|
<div class="clock-column">
|
||||||
|
<div class="clock-label">Seconds</div>
|
||||||
|
<div class="clock-bits">
|
||||||
|
<ui:repeat value="#{binaryClockBean.secondBinary}" var="bit" varStatus="status">
|
||||||
|
<div class="bit-row">
|
||||||
|
<div class="bit-value">#{binaryClockBean.secondBitValues[status.index]}</div>
|
||||||
|
<div class="clock-bit #{bit eq '1' ? 'active' : ''}"/>
|
||||||
|
</div>
|
||||||
|
</ui:repeat>
|
||||||
|
</div>
|
||||||
|
<div class="decimal-value">#{binaryClockBean.seconds}</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<!-- Date Columns -->
|
||||||
|
<!-- Day Column -->
|
||||||
|
<div class="clock-column">
|
||||||
|
<div class="clock-label">Day</div>
|
||||||
|
<div class="clock-bits">
|
||||||
|
<ui:repeat value="#{binaryClockBean.dayBinary}" var="bit" varStatus="status">
|
||||||
|
<div class="bit-row">
|
||||||
|
<div class="bit-value">#{binaryClockBean.dayBitValues[status.index]}</div>
|
||||||
|
<div class="clock-bit #{bit eq '1' ? 'active' : ''}"/>
|
||||||
|
</div>
|
||||||
|
</ui:repeat>
|
||||||
|
</div>
|
||||||
|
<div class="decimal-value">#{binaryClockBean.day}</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<!-- Month Column -->
|
||||||
|
<div class="clock-column">
|
||||||
|
<div class="clock-label">Month</div>
|
||||||
|
<div class="clock-bits">
|
||||||
|
<ui:repeat value="#{binaryClockBean.monthBinary}" var="bit" varStatus="status">
|
||||||
|
<div class="bit-row">
|
||||||
|
<div class="bit-value">#{binaryClockBean.monthBitValues[status.index]}</div>
|
||||||
|
<div class="clock-bit #{bit eq '1' ? 'active' : ''}"/>
|
||||||
|
</div>
|
||||||
|
</ui:repeat>
|
||||||
|
</div>
|
||||||
|
<div class="decimal-value">#{binaryClockBean.month}</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<!-- Year Column -->
|
||||||
|
<div class="clock-column">
|
||||||
|
<div class="clock-label">Year</div>
|
||||||
|
<div class="clock-bits">
|
||||||
|
<ui:repeat value="#{binaryClockBean.yearBinary}" var="bit" varStatus="status">
|
||||||
|
<div class="bit-row">
|
||||||
|
<div class="bit-value">#{binaryClockBean.yearBitValues[status.index]}</div>
|
||||||
|
<div class="clock-bit #{bit eq '1' ? 'active' : ''}"/>
|
||||||
|
</div>
|
||||||
|
</ui:repeat>
|
||||||
|
</div>
|
||||||
|
<div class="decimal-value">#{binaryClockBean.year % 100}</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<p:poll interval="11" update="clockForm"/>
|
||||||
|
</h:form>
|
||||||
|
|
||||||
|
<div class="navigation">
|
||||||
|
<h:form>
|
||||||
|
<h:commandButton value="На главную" action="main?faces-redirect=true" styleClass="nav-button"/>
|
||||||
|
</h:form>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</h:body>
|
||||||
|
</html>
|
103
src/main/webapp/main.xhtml
Normal file
103
src/main/webapp/main.xhtml
Normal file
|
@ -0,0 +1,103 @@
|
||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<!DOCTYPE html>
|
||||||
|
<html xmlns="http://www.w3.org/1999/xhtml"
|
||||||
|
xmlns:h="http://xmlns.jcp.org/jsf/html"
|
||||||
|
xmlns:f="http://xmlns.jcp.org/jsf/core"
|
||||||
|
xmlns:p="http://primefaces.org/ui"
|
||||||
|
xmlns:ui="http://xmlns.jcp.org/jsf/facelets">
|
||||||
|
|
||||||
|
<ui:composition template="/templates/base.xhtml">
|
||||||
|
<ui:define name="content">
|
||||||
|
<h:form id="mainForm">
|
||||||
|
<p:remoteCommand name="plotPoint"
|
||||||
|
action="#{pointBean.addPoint}"
|
||||||
|
update="mainForm"
|
||||||
|
oncomplete="handleAjaxComplete()"/>
|
||||||
|
|
||||||
|
<div class="main-container">
|
||||||
|
<div class="input-section">
|
||||||
|
<div class="graph-and-inputs">
|
||||||
|
<div class="graph-container">
|
||||||
|
<canvas id="graph" width="400" height="400"></canvas>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="controls-container">
|
||||||
|
<div class="input-group">
|
||||||
|
<label>X:</label>
|
||||||
|
<div class="x-buttons">
|
||||||
|
<ui:repeat value="#{[-3,-2,-1,0,1,2,3,4,5]}" var="xValue">
|
||||||
|
<p:commandButton value="#{xValue}"
|
||||||
|
action="#{pointBean.addPoint}"
|
||||||
|
update="mainForm"
|
||||||
|
oncomplete="handleAjaxComplete()"
|
||||||
|
styleClass="x-button">
|
||||||
|
<f:setPropertyActionListener value="#{xValue}"
|
||||||
|
target="#{pointBean.x}"/>
|
||||||
|
</p:commandButton>
|
||||||
|
</ui:repeat>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="input-group">
|
||||||
|
<label>Y:</label>
|
||||||
|
<p:inputText id="yInput" value="#{pointBean.y}" required="true"
|
||||||
|
validatorMessage="Y must be between -5 and 3">
|
||||||
|
<f:validateDoubleRange minimum="-5" maximum="3"/>
|
||||||
|
</p:inputText>
|
||||||
|
<p:message for="yInput"/>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="input-group">
|
||||||
|
<label>R:</label>
|
||||||
|
<p:inputText id="rInput" value="#{pointBean.r}" required="true"
|
||||||
|
validatorMessage="R must be between 1 and 4">
|
||||||
|
<f:validateDoubleRange minimum="1" maximum="4"/>
|
||||||
|
<p:ajax event="change" oncomplete="handleAjaxComplete()"/>
|
||||||
|
</p:inputText>
|
||||||
|
<p:message for="rInput"/>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<h:inputHidden id="xHidden" value="#{pointBean.x}"/>
|
||||||
|
<h:inputHidden id="yHidden" value="#{pointBean.y}"/>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="results-container">
|
||||||
|
<p:dataTable id="resultsTable" value="#{pointBean.points}" var="point"
|
||||||
|
styleClass="results-table">
|
||||||
|
<p:column headerText="X">
|
||||||
|
<h:outputText value="#{point.x}"/>
|
||||||
|
</p:column>
|
||||||
|
<p:column headerText="Y">
|
||||||
|
<h:outputText value="#{point.y}"/>
|
||||||
|
</p:column>
|
||||||
|
<p:column headerText="R">
|
||||||
|
<h:outputText value="#{point.r}"/>
|
||||||
|
</p:column>
|
||||||
|
<p:column headerText="Hit">
|
||||||
|
<h:outputText value="#{point.hit ? 'Yes' : 'No'}"/>
|
||||||
|
</p:column>
|
||||||
|
<p:column headerText="Time">
|
||||||
|
<h:outputText value="#{point.formattedTimestamp}"/>
|
||||||
|
</p:column>
|
||||||
|
<p:column headerText="Execution Time (ms)">
|
||||||
|
<h:outputText value="#{point.executionTime}"/>
|
||||||
|
</p:column>
|
||||||
|
</p:dataTable>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</h:form>
|
||||||
|
|
||||||
|
<div class="navigation">
|
||||||
|
<h:form>
|
||||||
|
<h:commandButton value="Назад" action="index?faces-redirect=true" styleClass="nav-button"/>
|
||||||
|
</h:form>
|
||||||
|
</div>
|
||||||
|
</ui:define>
|
||||||
|
|
||||||
|
<ui:define name="scripts">
|
||||||
|
<h:outputScript name="js/canvas.js"/>
|
||||||
|
</ui:define>
|
||||||
|
</ui:composition>
|
||||||
|
</html>
|
181
src/main/webapp/resources/css/styles.css
Normal file
181
src/main/webapp/resources/css/styles.css
Normal file
|
@ -0,0 +1,181 @@
|
||||||
|
/* General Styles */
|
||||||
|
body {
|
||||||
|
font-family: Arial, sans-serif;
|
||||||
|
margin: 0;
|
||||||
|
padding: 0;
|
||||||
|
background-color: #f0f0f0;
|
||||||
|
}
|
||||||
|
|
||||||
|
.header {
|
||||||
|
background-color: #333;
|
||||||
|
color: white;
|
||||||
|
padding: 20px;
|
||||||
|
text-align: center;
|
||||||
|
}
|
||||||
|
|
||||||
|
.content {
|
||||||
|
max-width: 1200px;
|
||||||
|
margin: 20px auto;
|
||||||
|
padding: 20px;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Clock Styles */
|
||||||
|
.clock-section {
|
||||||
|
background: #1a1a1a;
|
||||||
|
padding: 2rem;
|
||||||
|
border-radius: 1rem;
|
||||||
|
margin-bottom: 2rem;
|
||||||
|
}
|
||||||
|
|
||||||
|
.date-display {
|
||||||
|
text-align: center;
|
||||||
|
color: #30ff30;
|
||||||
|
font-size: 1.5rem;
|
||||||
|
margin-bottom: 1.5rem;
|
||||||
|
}
|
||||||
|
|
||||||
|
.clock-container {
|
||||||
|
display: flex;
|
||||||
|
justify-content: center;
|
||||||
|
gap: 3rem;
|
||||||
|
padding: 1rem;
|
||||||
|
}
|
||||||
|
|
||||||
|
.clock-column {
|
||||||
|
display: flex;
|
||||||
|
flex-direction: column;
|
||||||
|
align-items: center;
|
||||||
|
gap: 0.5rem;
|
||||||
|
}
|
||||||
|
|
||||||
|
.clock-label {
|
||||||
|
color: #30ff30;
|
||||||
|
font-size: 1.2rem;
|
||||||
|
margin-bottom: 0.5rem;
|
||||||
|
}
|
||||||
|
|
||||||
|
.bit-values {
|
||||||
|
color: #888;
|
||||||
|
font-family: monospace;
|
||||||
|
font-size: 0.8rem;
|
||||||
|
letter-spacing: 0.3rem;
|
||||||
|
}
|
||||||
|
|
||||||
|
.clock-bit {
|
||||||
|
width: 2rem;
|
||||||
|
height: 2rem;
|
||||||
|
border: 2px solid #30ff30;
|
||||||
|
border-radius: 50%;
|
||||||
|
margin: 0.25rem;
|
||||||
|
transition: all 0.3s ease;
|
||||||
|
}
|
||||||
|
|
||||||
|
.clock-bit.active {
|
||||||
|
background: #30ff30;
|
||||||
|
box-shadow: 0 0 10px #30ff30;
|
||||||
|
}
|
||||||
|
|
||||||
|
.decimal-value {
|
||||||
|
color: #30ff30;
|
||||||
|
font-size: 1.2rem;
|
||||||
|
margin-top: 0.5rem;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Main Page Styles */
|
||||||
|
.main-container {
|
||||||
|
background: white;
|
||||||
|
padding: 2rem;
|
||||||
|
border-radius: 8px;
|
||||||
|
box-shadow: 0 2px 4px rgba(0,0,0,0.1);
|
||||||
|
}
|
||||||
|
|
||||||
|
.input-section {
|
||||||
|
display: flex;
|
||||||
|
flex-direction: column;
|
||||||
|
gap: 2rem;
|
||||||
|
}
|
||||||
|
|
||||||
|
.graph-and-inputs {
|
||||||
|
display: flex;
|
||||||
|
gap: 2rem;
|
||||||
|
align-items: flex-start;
|
||||||
|
}
|
||||||
|
|
||||||
|
.graph-container {
|
||||||
|
flex: 0 0 400px;
|
||||||
|
background: #f8f8f8;
|
||||||
|
padding: 1rem;
|
||||||
|
border-radius: 8px;
|
||||||
|
box-shadow: 0 1px 3px rgba(0,0,0,0.1);
|
||||||
|
}
|
||||||
|
|
||||||
|
.controls-container {
|
||||||
|
flex: 1;
|
||||||
|
display: flex;
|
||||||
|
flex-direction: column;
|
||||||
|
gap: 1.5rem;
|
||||||
|
}
|
||||||
|
|
||||||
|
.input-group {
|
||||||
|
display: flex;
|
||||||
|
flex-direction: column;
|
||||||
|
gap: 0.5rem;
|
||||||
|
}
|
||||||
|
|
||||||
|
.input-group label {
|
||||||
|
font-weight: bold;
|
||||||
|
color: #333;
|
||||||
|
}
|
||||||
|
|
||||||
|
.x-buttons {
|
||||||
|
display: grid;
|
||||||
|
grid-template-columns: repeat(3, 1fr);
|
||||||
|
gap: 0.5rem;
|
||||||
|
max-width: 300px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.x-button {
|
||||||
|
width: 100% !important;
|
||||||
|
margin: 0 !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
.coordinate-input {
|
||||||
|
padding: 0.5rem;
|
||||||
|
border: 1px solid #ddd;
|
||||||
|
border-radius: 4px;
|
||||||
|
width: 200px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.submit-button {
|
||||||
|
width: 200px;
|
||||||
|
margin-top: 1rem !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
.results-container {
|
||||||
|
margin-top: 2rem;
|
||||||
|
}
|
||||||
|
|
||||||
|
.results-table {
|
||||||
|
width: 100%;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Navigation */
|
||||||
|
.navigation {
|
||||||
|
margin-top: 2rem;
|
||||||
|
text-align: center;
|
||||||
|
}
|
||||||
|
|
||||||
|
.nav-button {
|
||||||
|
padding: 10px 20px;
|
||||||
|
background-color: #4CAF50;
|
||||||
|
color: white;
|
||||||
|
border: none;
|
||||||
|
border-radius: 4px;
|
||||||
|
cursor: pointer;
|
||||||
|
font-size: 1rem;
|
||||||
|
text-decoration: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
.nav-button:hover {
|
||||||
|
background-color: #45a049;
|
||||||
|
}
|
178
src/main/webapp/resources/js/canvas.js
Normal file
178
src/main/webapp/resources/js/canvas.js
Normal file
|
@ -0,0 +1,178 @@
|
||||||
|
// Define handleAjaxComplete in the global scope first
|
||||||
|
window.handleAjaxComplete = function() {
|
||||||
|
if (typeof canvasManager !== 'undefined') {
|
||||||
|
canvasManager.initCanvas();
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
// Canvas manager object
|
||||||
|
const canvasManager = {
|
||||||
|
canvas: null,
|
||||||
|
ctx: null,
|
||||||
|
CANVAS_WIDTH: 400,
|
||||||
|
CANVAS_HEIGHT: 400,
|
||||||
|
|
||||||
|
getElement: function(id) {
|
||||||
|
return document.getElementById('mainForm:' + id);
|
||||||
|
},
|
||||||
|
|
||||||
|
initCanvas: function() {
|
||||||
|
this.canvas = document.getElementById('graph');
|
||||||
|
if (this.canvas) {
|
||||||
|
this.ctx = this.canvas.getContext('2d');
|
||||||
|
this.canvas.addEventListener('click', this.handleCanvasClick.bind(this));
|
||||||
|
this.updateGraph();
|
||||||
|
}
|
||||||
|
},
|
||||||
|
|
||||||
|
handleCanvasClick: function(event) {
|
||||||
|
if (!this.canvas || !this.ctx) return;
|
||||||
|
|
||||||
|
const rInput = this.getElement('rInput');
|
||||||
|
if (!rInput) return;
|
||||||
|
|
||||||
|
const r = parseFloat(rInput.value);
|
||||||
|
if (!r || r < 1 || r > 4) {
|
||||||
|
alert('Please set a valid R value (1-4) first');
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
const rect = this.canvas.getBoundingClientRect();
|
||||||
|
const x = event.clientX - rect.left;
|
||||||
|
const y = event.clientY - rect.top;
|
||||||
|
|
||||||
|
const center = this.CANVAS_WIDTH / 2;
|
||||||
|
const scale = this.CANVAS_WIDTH / 3 / r;
|
||||||
|
|
||||||
|
const graphX = ((x - center) / scale).toFixed(2);
|
||||||
|
const graphY = ((center - y) / scale).toFixed(2);
|
||||||
|
|
||||||
|
this.getElement('xHidden').value = graphX;
|
||||||
|
this.getElement('yHidden').value = graphY;
|
||||||
|
|
||||||
|
plotPoint();
|
||||||
|
},
|
||||||
|
|
||||||
|
updateGraph: function() {
|
||||||
|
if (!this.canvas || !this.ctx) return;
|
||||||
|
|
||||||
|
const rInput = this.getElement('rInput');
|
||||||
|
if (!rInput) return;
|
||||||
|
|
||||||
|
const r = parseFloat(rInput.value);
|
||||||
|
if (!r || r < 1 || r > 4) return;
|
||||||
|
|
||||||
|
this.ctx.clearRect(0, 0, this.CANVAS_WIDTH, this.CANVAS_HEIGHT);
|
||||||
|
this.drawGrid(r);
|
||||||
|
this.drawAreas(r);
|
||||||
|
this.drawPoints();
|
||||||
|
},
|
||||||
|
|
||||||
|
drawGrid: function(r) {
|
||||||
|
const center = this.CANVAS_WIDTH / 2;
|
||||||
|
const scale = this.CANVAS_WIDTH / 3 / r;
|
||||||
|
|
||||||
|
this.ctx.beginPath();
|
||||||
|
this.ctx.moveTo(0, center);
|
||||||
|
this.ctx.lineTo(this.CANVAS_WIDTH, center);
|
||||||
|
this.ctx.moveTo(center, 0);
|
||||||
|
this.ctx.lineTo(center, this.CANVAS_HEIGHT);
|
||||||
|
this.ctx.strokeStyle = 'black';
|
||||||
|
this.ctx.stroke();
|
||||||
|
|
||||||
|
this.ctx.font = '12px Arial';
|
||||||
|
this.ctx.textAlign = 'center';
|
||||||
|
this.ctx.textBaseline = 'middle';
|
||||||
|
|
||||||
|
[-r, -r/2, r/2, r].forEach(value => {
|
||||||
|
const x = center + value * scale;
|
||||||
|
const y = center - value * scale;
|
||||||
|
|
||||||
|
this.ctx.beginPath();
|
||||||
|
this.ctx.moveTo(x, center - 5);
|
||||||
|
this.ctx.lineTo(x, center + 5);
|
||||||
|
this.ctx.moveTo(center - 5, y);
|
||||||
|
this.ctx.lineTo(center + 5, y);
|
||||||
|
this.ctx.stroke();
|
||||||
|
|
||||||
|
this.ctx.fillText(value.toString(), x, center + 20);
|
||||||
|
this.ctx.fillText(value.toString(), center - 20, y);
|
||||||
|
});
|
||||||
|
},
|
||||||
|
|
||||||
|
drawAreas: function(r) {
|
||||||
|
const center = this.CANVAS_WIDTH / 2;
|
||||||
|
const scale = this.CANVAS_WIDTH / 3 / r;
|
||||||
|
|
||||||
|
this.ctx.fillStyle = 'rgba(100, 149, 237, 0.5)';
|
||||||
|
|
||||||
|
// Triangle in -x, -y quadrant
|
||||||
|
this.ctx.beginPath();
|
||||||
|
this.ctx.moveTo(center, center);
|
||||||
|
this.ctx.lineTo(center - r/2 * scale, center);
|
||||||
|
this.ctx.lineTo(center, center + r * scale);
|
||||||
|
this.ctx.closePath();
|
||||||
|
this.ctx.fill();
|
||||||
|
|
||||||
|
// Square in -x, +y quadrant
|
||||||
|
this.ctx.fillRect(center - r/2 * scale, center - r * scale, r/2 * scale, r * scale);
|
||||||
|
|
||||||
|
// Quarter circle in +x, -y quadrant
|
||||||
|
this.ctx.beginPath();
|
||||||
|
this.ctx.moveTo(center, center);
|
||||||
|
this.ctx.arc(center, center, r * scale, 0, Math.PI/2, false);
|
||||||
|
this.ctx.closePath();
|
||||||
|
this.ctx.fill();
|
||||||
|
},
|
||||||
|
|
||||||
|
drawPoints: function() {
|
||||||
|
const rInput = this.getElement('rInput');
|
||||||
|
if (!rInput) return;
|
||||||
|
|
||||||
|
const r = parseFloat(rInput.value);
|
||||||
|
if (!r) return;
|
||||||
|
|
||||||
|
const center = this.CANVAS_WIDTH / 2;
|
||||||
|
const scale = this.CANVAS_WIDTH / 3 / r;
|
||||||
|
|
||||||
|
// Updated selector to match PrimeFaces table
|
||||||
|
const table = document.querySelector('[id$="resultsTable"]');
|
||||||
|
if (!table) return;
|
||||||
|
|
||||||
|
const rows = table.querySelectorAll('tbody tr');
|
||||||
|
|
||||||
|
rows.forEach(row => {
|
||||||
|
const cells = row.cells;
|
||||||
|
// Skip if we don't have enough cells
|
||||||
|
if (!cells || cells.length < 4) return;
|
||||||
|
|
||||||
|
try {
|
||||||
|
const x = parseFloat(cells[0].textContent.trim());
|
||||||
|
const y = parseFloat(cells[1].textContent.trim());
|
||||||
|
const hit = cells[3].textContent.trim() === 'Yes';
|
||||||
|
|
||||||
|
// Skip if we couldn't parse the coordinates
|
||||||
|
if (isNaN(x) || isNaN(y)) return;
|
||||||
|
|
||||||
|
// Convert graph coordinates to canvas coordinates
|
||||||
|
const canvasX = center + x * scale;
|
||||||
|
const canvasY = center - y * scale;
|
||||||
|
|
||||||
|
// Draw the point
|
||||||
|
this.ctx.beginPath();
|
||||||
|
this.ctx.arc(canvasX, canvasY, 4, 0, 2 * Math.PI);
|
||||||
|
this.ctx.fillStyle = hit ? 'green' : 'red';
|
||||||
|
this.ctx.fill();
|
||||||
|
this.ctx.strokeStyle = 'black';
|
||||||
|
this.ctx.stroke();
|
||||||
|
} catch (e) {
|
||||||
|
console.error('Error drawing point:', e);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
// Initialize when DOM is loaded
|
||||||
|
document.addEventListener('DOMContentLoaded', function() {
|
||||||
|
canvasManager.initCanvas();
|
||||||
|
});
|
25
src/main/webapp/templates/base.xhtml
Normal file
25
src/main/webapp/templates/base.xhtml
Normal file
|
@ -0,0 +1,25 @@
|
||||||
|
<!DOCTYPE html>
|
||||||
|
<html xmlns="http://www.w3.org/1999/xhtml"
|
||||||
|
xmlns:h="http://xmlns.jcp.org/jsf/html"
|
||||||
|
xmlns:ui="http://xmlns.jcp.org/jsf/facelets"
|
||||||
|
xmlns:f="http://xmlns.jcp.org/jsf/core"
|
||||||
|
xmlns:p="http://primefaces.org/ui">
|
||||||
|
<h:head>
|
||||||
|
<title>
|
||||||
|
<ui:insert name="title">Web лаба 3</ui:insert>
|
||||||
|
</title>
|
||||||
|
<h:outputStylesheet name="css/styles.css"/>
|
||||||
|
</h:head>
|
||||||
|
<h:body>
|
||||||
|
<div class="header">
|
||||||
|
<h1>Web лаба 3</h1>
|
||||||
|
<p>сделал: Карпов Александр Дмитриевич</p>
|
||||||
|
<p>Группа: P3213</p>
|
||||||
|
<p>Вариант: 665</p>
|
||||||
|
</div>
|
||||||
|
<div class="content">
|
||||||
|
<ui:insert name="content">а где</ui:insert>
|
||||||
|
</div>
|
||||||
|
<ui:insert name="scripts"/>
|
||||||
|
</h:body>
|
||||||
|
</html>
|
3
target/classes/db.properties
Normal file
3
target/classes/db.properties
Normal file
|
@ -0,0 +1,3 @@
|
||||||
|
db.url=jdbc:postgresql://localhost:5432/web-3
|
||||||
|
db.user=postgres
|
||||||
|
db.password=postgres
|
BIN
target/classes/ru/akarpov/web3/beans/BinaryClockBean.class
Normal file
BIN
target/classes/ru/akarpov/web3/beans/BinaryClockBean.class
Normal file
Binary file not shown.
BIN
target/classes/ru/akarpov/web3/beans/PointBean.class
Normal file
BIN
target/classes/ru/akarpov/web3/beans/PointBean.class
Normal file
Binary file not shown.
BIN
target/classes/ru/akarpov/web3/data/DatabaseHandler.class
Normal file
BIN
target/classes/ru/akarpov/web3/data/DatabaseHandler.class
Normal file
Binary file not shown.
BIN
target/classes/ru/akarpov/web3/model/Point.class
Normal file
BIN
target/classes/ru/akarpov/web3/model/Point.class
Normal file
Binary file not shown.
BIN
target/classes/ru/akarpov/web3/util/AreaChecker.class
Normal file
BIN
target/classes/ru/akarpov/web3/util/AreaChecker.class
Normal file
Binary file not shown.
3
target/maven-archiver/pom.properties
Normal file
3
target/maven-archiver/pom.properties
Normal file
|
@ -0,0 +1,3 @@
|
||||||
|
artifactId=web-3
|
||||||
|
groupId=ru.akarpov
|
||||||
|
version=1.0-SNAPSHOT
|
|
@ -0,0 +1,5 @@
|
||||||
|
ru/akarpov/web3/model/Point.class
|
||||||
|
ru/akarpov/web3/beans/PointBean.class
|
||||||
|
ru/akarpov/web3/util/AreaChecker.class
|
||||||
|
ru/akarpov/web3/data/DatabaseHandler.class
|
||||||
|
ru/akarpov/web3/beans/BinaryClockBean.class
|
|
@ -0,0 +1,5 @@
|
||||||
|
/home/sanspie/Projects/web-3/src/main/java/ru/akarpov/web3/beans/BinaryClockBean.java
|
||||||
|
/home/sanspie/Projects/web-3/src/main/java/ru/akarpov/web3/beans/PointBean.java
|
||||||
|
/home/sanspie/Projects/web-3/src/main/java/ru/akarpov/web3/data/DatabaseHandler.java
|
||||||
|
/home/sanspie/Projects/web-3/src/main/java/ru/akarpov/web3/model/Point.java
|
||||||
|
/home/sanspie/Projects/web-3/src/main/java/ru/akarpov/web3/util/AreaChecker.java
|
BIN
target/web-3-1.0-SNAPSHOT.war
Normal file
BIN
target/web-3-1.0-SNAPSHOT.war
Normal file
Binary file not shown.
3
target/web-3-1.0-SNAPSHOT/WEB-INF/classes/db.properties
Normal file
3
target/web-3-1.0-SNAPSHOT/WEB-INF/classes/db.properties
Normal file
|
@ -0,0 +1,3 @@
|
||||||
|
db.url=jdbc:postgresql://localhost:5432/web-3
|
||||||
|
db.user=postgres
|
||||||
|
db.password=postgres
|
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
26
target/web-3-1.0-SNAPSHOT/WEB-INF/faces-config.xml
Normal file
26
target/web-3-1.0-SNAPSHOT/WEB-INF/faces-config.xml
Normal file
|
@ -0,0 +1,26 @@
|
||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<faces-config
|
||||||
|
xmlns="https://jakarta.ee/xml/ns/jakartaee"
|
||||||
|
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
|
||||||
|
xsi:schemaLocation="https://jakarta.ee/xml/ns/jakartaee https://jakarta.ee/xml/ns/jakartaee/web-facesconfig_3_0.xsd"
|
||||||
|
version="3.0">
|
||||||
|
|
||||||
|
<navigation-rule>
|
||||||
|
<from-view-id>/index.xhtml</from-view-id>
|
||||||
|
<navigation-case>
|
||||||
|
<from-outcome>main</from-outcome>
|
||||||
|
<to-view-id>/main.xhtml</to-view-id>
|
||||||
|
<redirect/>
|
||||||
|
</navigation-case>
|
||||||
|
</navigation-rule>
|
||||||
|
|
||||||
|
<navigation-rule>
|
||||||
|
<from-view-id>/main.xhtml</from-view-id>
|
||||||
|
<navigation-case>
|
||||||
|
<from-outcome>index</from-outcome>
|
||||||
|
<to-view-id>/index.xhtml</to-view-id>
|
||||||
|
<redirect/>
|
||||||
|
</navigation-case>
|
||||||
|
</navigation-rule>
|
||||||
|
|
||||||
|
</faces-config>
|
BIN
target/web-3-1.0-SNAPSHOT/WEB-INF/lib/checker-qual-3.31.0.jar
Normal file
BIN
target/web-3-1.0-SNAPSHOT/WEB-INF/lib/checker-qual-3.31.0.jar
Normal file
Binary file not shown.
Binary file not shown.
BIN
target/web-3-1.0-SNAPSHOT/WEB-INF/lib/jakarta.faces-3.0.0.jar
Normal file
BIN
target/web-3-1.0-SNAPSHOT/WEB-INF/lib/jakarta.faces-3.0.0.jar
Normal file
Binary file not shown.
BIN
target/web-3-1.0-SNAPSHOT/WEB-INF/lib/postgresql-42.6.0.jar
Normal file
BIN
target/web-3-1.0-SNAPSHOT/WEB-INF/lib/postgresql-42.6.0.jar
Normal file
Binary file not shown.
Binary file not shown.
30
target/web-3-1.0-SNAPSHOT/WEB-INF/web.xml
Normal file
30
target/web-3-1.0-SNAPSHOT/WEB-INF/web.xml
Normal file
|
@ -0,0 +1,30 @@
|
||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<web-app xmlns="https://jakarta.ee/xml/ns/jakartaee"
|
||||||
|
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
|
||||||
|
xsi:schemaLocation="https://jakarta.ee/xml/ns/jakartaee https://jakarta.ee/xml/ns/jakartaee/web-app_5_0.xsd"
|
||||||
|
version="5.0">
|
||||||
|
<servlet>
|
||||||
|
<servlet-name>Faces Servlet</servlet-name>
|
||||||
|
<servlet-class>jakarta.faces.webapp.FacesServlet</servlet-class>
|
||||||
|
<load-on-startup>1</load-on-startup>
|
||||||
|
</servlet>
|
||||||
|
|
||||||
|
<servlet-mapping>
|
||||||
|
<servlet-name>Faces Servlet</servlet-name>
|
||||||
|
<url-pattern>*.xhtml</url-pattern>
|
||||||
|
</servlet-mapping>
|
||||||
|
|
||||||
|
<welcome-file-list>
|
||||||
|
<welcome-file>index.xhtml</welcome-file>
|
||||||
|
</welcome-file-list>
|
||||||
|
|
||||||
|
<error-page>
|
||||||
|
<error-code>404</error-code>
|
||||||
|
<location>/index.xhtml</location>
|
||||||
|
</error-page>
|
||||||
|
|
||||||
|
<context-param>
|
||||||
|
<param-name>jakarta.faces.STATE_SAVING_METHOD</param-name>
|
||||||
|
<param-value>client</param-value>
|
||||||
|
</context-param>
|
||||||
|
</web-app>
|
124
target/web-3-1.0-SNAPSHOT/index.xhtml
Normal file
124
target/web-3-1.0-SNAPSHOT/index.xhtml
Normal file
|
@ -0,0 +1,124 @@
|
||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<!DOCTYPE html>
|
||||||
|
<html xmlns="http://www.w3.org/1999/xhtml"
|
||||||
|
xmlns:h="http://xmlns.jcp.org/jsf/html"
|
||||||
|
xmlns:p="http://primefaces.org/ui"
|
||||||
|
xmlns:ui="http://xmlns.jcp.org/jsf/facelets"
|
||||||
|
xmlns:f="http://xmlns.jcp.org/jsf/core">
|
||||||
|
<h:head>
|
||||||
|
<title>Start Page</title>
|
||||||
|
<h:outputStylesheet name="css/styles.css"/>
|
||||||
|
</h:head>
|
||||||
|
<h:body>
|
||||||
|
<div class="header">
|
||||||
|
<h1>Web лаба 3</h1>
|
||||||
|
<p>сделал: Карпов Александр Дмитриевич</p>
|
||||||
|
<p>Группа: P3213</p>
|
||||||
|
<p>Вариант: 665</p>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="content">
|
||||||
|
<h:form id="clockForm">
|
||||||
|
<div class="clock-section">
|
||||||
|
<div class="date-display">
|
||||||
|
#{binaryClockBean.currentDate}
|
||||||
|
</div>
|
||||||
|
<div class="clock-container">
|
||||||
|
<!-- Time Columns -->
|
||||||
|
<!-- Hour Column -->
|
||||||
|
<div class="clock-column">
|
||||||
|
<div class="clock-label">Hours</div>
|
||||||
|
<div class="clock-bits">
|
||||||
|
<ui:repeat value="#{binaryClockBean.hourBinary}" var="bit" varStatus="status">
|
||||||
|
<div class="bit-row">
|
||||||
|
<div class="bit-value">#{binaryClockBean.hourBitValues[status.index]}</div>
|
||||||
|
<div class="clock-bit #{bit eq '1' ? 'active' : ''}"/>
|
||||||
|
</div>
|
||||||
|
</ui:repeat>
|
||||||
|
</div>
|
||||||
|
<div class="decimal-value">#{binaryClockBean.hours}</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<!-- Minute Column -->
|
||||||
|
<div class="clock-column">
|
||||||
|
<div class="clock-label">Minutes</div>
|
||||||
|
<div class="clock-bits">
|
||||||
|
<ui:repeat value="#{binaryClockBean.minuteBinary}" var="bit" varStatus="status">
|
||||||
|
<div class="bit-row">
|
||||||
|
<div class="bit-value">#{binaryClockBean.minuteBitValues[status.index]}</div>
|
||||||
|
<div class="clock-bit #{bit eq '1' ? 'active' : ''}"/>
|
||||||
|
</div>
|
||||||
|
</ui:repeat>
|
||||||
|
</div>
|
||||||
|
<div class="decimal-value">#{binaryClockBean.minutes}</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<!-- Second Column -->
|
||||||
|
<div class="clock-column">
|
||||||
|
<div class="clock-label">Seconds</div>
|
||||||
|
<div class="clock-bits">
|
||||||
|
<ui:repeat value="#{binaryClockBean.secondBinary}" var="bit" varStatus="status">
|
||||||
|
<div class="bit-row">
|
||||||
|
<div class="bit-value">#{binaryClockBean.secondBitValues[status.index]}</div>
|
||||||
|
<div class="clock-bit #{bit eq '1' ? 'active' : ''}"/>
|
||||||
|
</div>
|
||||||
|
</ui:repeat>
|
||||||
|
</div>
|
||||||
|
<div class="decimal-value">#{binaryClockBean.seconds}</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<!-- Date Columns -->
|
||||||
|
<!-- Day Column -->
|
||||||
|
<div class="clock-column">
|
||||||
|
<div class="clock-label">Day</div>
|
||||||
|
<div class="clock-bits">
|
||||||
|
<ui:repeat value="#{binaryClockBean.dayBinary}" var="bit" varStatus="status">
|
||||||
|
<div class="bit-row">
|
||||||
|
<div class="bit-value">#{binaryClockBean.dayBitValues[status.index]}</div>
|
||||||
|
<div class="clock-bit #{bit eq '1' ? 'active' : ''}"/>
|
||||||
|
</div>
|
||||||
|
</ui:repeat>
|
||||||
|
</div>
|
||||||
|
<div class="decimal-value">#{binaryClockBean.day}</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<!-- Month Column -->
|
||||||
|
<div class="clock-column">
|
||||||
|
<div class="clock-label">Month</div>
|
||||||
|
<div class="clock-bits">
|
||||||
|
<ui:repeat value="#{binaryClockBean.monthBinary}" var="bit" varStatus="status">
|
||||||
|
<div class="bit-row">
|
||||||
|
<div class="bit-value">#{binaryClockBean.monthBitValues[status.index]}</div>
|
||||||
|
<div class="clock-bit #{bit eq '1' ? 'active' : ''}"/>
|
||||||
|
</div>
|
||||||
|
</ui:repeat>
|
||||||
|
</div>
|
||||||
|
<div class="decimal-value">#{binaryClockBean.month}</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<!-- Year Column -->
|
||||||
|
<div class="clock-column">
|
||||||
|
<div class="clock-label">Year</div>
|
||||||
|
<div class="clock-bits">
|
||||||
|
<ui:repeat value="#{binaryClockBean.yearBinary}" var="bit" varStatus="status">
|
||||||
|
<div class="bit-row">
|
||||||
|
<div class="bit-value">#{binaryClockBean.yearBitValues[status.index]}</div>
|
||||||
|
<div class="clock-bit #{bit eq '1' ? 'active' : ''}"/>
|
||||||
|
</div>
|
||||||
|
</ui:repeat>
|
||||||
|
</div>
|
||||||
|
<div class="decimal-value">#{binaryClockBean.year % 100}</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<p:poll interval="11" update="clockForm"/>
|
||||||
|
</h:form>
|
||||||
|
|
||||||
|
<div class="navigation">
|
||||||
|
<h:form>
|
||||||
|
<h:commandButton value="На главную" action="main?faces-redirect=true" styleClass="nav-button"/>
|
||||||
|
</h:form>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</h:body>
|
||||||
|
</html>
|
103
target/web-3-1.0-SNAPSHOT/main.xhtml
Normal file
103
target/web-3-1.0-SNAPSHOT/main.xhtml
Normal file
|
@ -0,0 +1,103 @@
|
||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<!DOCTYPE html>
|
||||||
|
<html xmlns="http://www.w3.org/1999/xhtml"
|
||||||
|
xmlns:h="http://xmlns.jcp.org/jsf/html"
|
||||||
|
xmlns:f="http://xmlns.jcp.org/jsf/core"
|
||||||
|
xmlns:p="http://primefaces.org/ui"
|
||||||
|
xmlns:ui="http://xmlns.jcp.org/jsf/facelets">
|
||||||
|
|
||||||
|
<ui:composition template="/templates/base.xhtml">
|
||||||
|
<ui:define name="content">
|
||||||
|
<h:form id="mainForm">
|
||||||
|
<p:remoteCommand name="plotPoint"
|
||||||
|
action="#{pointBean.addPoint}"
|
||||||
|
update="mainForm"
|
||||||
|
oncomplete="handleAjaxComplete()"/>
|
||||||
|
|
||||||
|
<div class="main-container">
|
||||||
|
<div class="input-section">
|
||||||
|
<div class="graph-and-inputs">
|
||||||
|
<div class="graph-container">
|
||||||
|
<canvas id="graph" width="400" height="400"></canvas>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="controls-container">
|
||||||
|
<div class="input-group">
|
||||||
|
<label>X:</label>
|
||||||
|
<div class="x-buttons">
|
||||||
|
<ui:repeat value="#{[-3,-2,-1,0,1,2,3,4,5]}" var="xValue">
|
||||||
|
<p:commandButton value="#{xValue}"
|
||||||
|
action="#{pointBean.addPoint}"
|
||||||
|
update="mainForm"
|
||||||
|
oncomplete="handleAjaxComplete()"
|
||||||
|
styleClass="x-button">
|
||||||
|
<f:setPropertyActionListener value="#{xValue}"
|
||||||
|
target="#{pointBean.x}"/>
|
||||||
|
</p:commandButton>
|
||||||
|
</ui:repeat>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="input-group">
|
||||||
|
<label>Y:</label>
|
||||||
|
<p:inputText id="yInput" value="#{pointBean.y}" required="true"
|
||||||
|
validatorMessage="Y must be between -5 and 3">
|
||||||
|
<f:validateDoubleRange minimum="-5" maximum="3"/>
|
||||||
|
</p:inputText>
|
||||||
|
<p:message for="yInput"/>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="input-group">
|
||||||
|
<label>R:</label>
|
||||||
|
<p:inputText id="rInput" value="#{pointBean.r}" required="true"
|
||||||
|
validatorMessage="R must be between 1 and 4">
|
||||||
|
<f:validateDoubleRange minimum="1" maximum="4"/>
|
||||||
|
<p:ajax event="change" oncomplete="handleAjaxComplete()"/>
|
||||||
|
</p:inputText>
|
||||||
|
<p:message for="rInput"/>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<h:inputHidden id="xHidden" value="#{pointBean.x}"/>
|
||||||
|
<h:inputHidden id="yHidden" value="#{pointBean.y}"/>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="results-container">
|
||||||
|
<p:dataTable id="resultsTable" value="#{pointBean.points}" var="point"
|
||||||
|
styleClass="results-table">
|
||||||
|
<p:column headerText="X">
|
||||||
|
<h:outputText value="#{point.x}"/>
|
||||||
|
</p:column>
|
||||||
|
<p:column headerText="Y">
|
||||||
|
<h:outputText value="#{point.y}"/>
|
||||||
|
</p:column>
|
||||||
|
<p:column headerText="R">
|
||||||
|
<h:outputText value="#{point.r}"/>
|
||||||
|
</p:column>
|
||||||
|
<p:column headerText="Hit">
|
||||||
|
<h:outputText value="#{point.hit ? 'Yes' : 'No'}"/>
|
||||||
|
</p:column>
|
||||||
|
<p:column headerText="Time">
|
||||||
|
<h:outputText value="#{point.formattedTimestamp}"/>
|
||||||
|
</p:column>
|
||||||
|
<p:column headerText="Execution Time (ms)">
|
||||||
|
<h:outputText value="#{point.executionTime}"/>
|
||||||
|
</p:column>
|
||||||
|
</p:dataTable>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</h:form>
|
||||||
|
|
||||||
|
<div class="navigation">
|
||||||
|
<h:form>
|
||||||
|
<h:commandButton value="Назад" action="index?faces-redirect=true" styleClass="nav-button"/>
|
||||||
|
</h:form>
|
||||||
|
</div>
|
||||||
|
</ui:define>
|
||||||
|
|
||||||
|
<ui:define name="scripts">
|
||||||
|
<h:outputScript name="js/canvas.js"/>
|
||||||
|
</ui:define>
|
||||||
|
</ui:composition>
|
||||||
|
</html>
|
181
target/web-3-1.0-SNAPSHOT/resources/css/styles.css
Normal file
181
target/web-3-1.0-SNAPSHOT/resources/css/styles.css
Normal file
|
@ -0,0 +1,181 @@
|
||||||
|
/* General Styles */
|
||||||
|
body {
|
||||||
|
font-family: Arial, sans-serif;
|
||||||
|
margin: 0;
|
||||||
|
padding: 0;
|
||||||
|
background-color: #f0f0f0;
|
||||||
|
}
|
||||||
|
|
||||||
|
.header {
|
||||||
|
background-color: #333;
|
||||||
|
color: white;
|
||||||
|
padding: 20px;
|
||||||
|
text-align: center;
|
||||||
|
}
|
||||||
|
|
||||||
|
.content {
|
||||||
|
max-width: 1200px;
|
||||||
|
margin: 20px auto;
|
||||||
|
padding: 20px;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Clock Styles */
|
||||||
|
.clock-section {
|
||||||
|
background: #1a1a1a;
|
||||||
|
padding: 2rem;
|
||||||
|
border-radius: 1rem;
|
||||||
|
margin-bottom: 2rem;
|
||||||
|
}
|
||||||
|
|
||||||
|
.date-display {
|
||||||
|
text-align: center;
|
||||||
|
color: #30ff30;
|
||||||
|
font-size: 1.5rem;
|
||||||
|
margin-bottom: 1.5rem;
|
||||||
|
}
|
||||||
|
|
||||||
|
.clock-container {
|
||||||
|
display: flex;
|
||||||
|
justify-content: center;
|
||||||
|
gap: 3rem;
|
||||||
|
padding: 1rem;
|
||||||
|
}
|
||||||
|
|
||||||
|
.clock-column {
|
||||||
|
display: flex;
|
||||||
|
flex-direction: column;
|
||||||
|
align-items: center;
|
||||||
|
gap: 0.5rem;
|
||||||
|
}
|
||||||
|
|
||||||
|
.clock-label {
|
||||||
|
color: #30ff30;
|
||||||
|
font-size: 1.2rem;
|
||||||
|
margin-bottom: 0.5rem;
|
||||||
|
}
|
||||||
|
|
||||||
|
.bit-values {
|
||||||
|
color: #888;
|
||||||
|
font-family: monospace;
|
||||||
|
font-size: 0.8rem;
|
||||||
|
letter-spacing: 0.3rem;
|
||||||
|
}
|
||||||
|
|
||||||
|
.clock-bit {
|
||||||
|
width: 2rem;
|
||||||
|
height: 2rem;
|
||||||
|
border: 2px solid #30ff30;
|
||||||
|
border-radius: 50%;
|
||||||
|
margin: 0.25rem;
|
||||||
|
transition: all 0.3s ease;
|
||||||
|
}
|
||||||
|
|
||||||
|
.clock-bit.active {
|
||||||
|
background: #30ff30;
|
||||||
|
box-shadow: 0 0 10px #30ff30;
|
||||||
|
}
|
||||||
|
|
||||||
|
.decimal-value {
|
||||||
|
color: #30ff30;
|
||||||
|
font-size: 1.2rem;
|
||||||
|
margin-top: 0.5rem;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Main Page Styles */
|
||||||
|
.main-container {
|
||||||
|
background: white;
|
||||||
|
padding: 2rem;
|
||||||
|
border-radius: 8px;
|
||||||
|
box-shadow: 0 2px 4px rgba(0,0,0,0.1);
|
||||||
|
}
|
||||||
|
|
||||||
|
.input-section {
|
||||||
|
display: flex;
|
||||||
|
flex-direction: column;
|
||||||
|
gap: 2rem;
|
||||||
|
}
|
||||||
|
|
||||||
|
.graph-and-inputs {
|
||||||
|
display: flex;
|
||||||
|
gap: 2rem;
|
||||||
|
align-items: flex-start;
|
||||||
|
}
|
||||||
|
|
||||||
|
.graph-container {
|
||||||
|
flex: 0 0 400px;
|
||||||
|
background: #f8f8f8;
|
||||||
|
padding: 1rem;
|
||||||
|
border-radius: 8px;
|
||||||
|
box-shadow: 0 1px 3px rgba(0,0,0,0.1);
|
||||||
|
}
|
||||||
|
|
||||||
|
.controls-container {
|
||||||
|
flex: 1;
|
||||||
|
display: flex;
|
||||||
|
flex-direction: column;
|
||||||
|
gap: 1.5rem;
|
||||||
|
}
|
||||||
|
|
||||||
|
.input-group {
|
||||||
|
display: flex;
|
||||||
|
flex-direction: column;
|
||||||
|
gap: 0.5rem;
|
||||||
|
}
|
||||||
|
|
||||||
|
.input-group label {
|
||||||
|
font-weight: bold;
|
||||||
|
color: #333;
|
||||||
|
}
|
||||||
|
|
||||||
|
.x-buttons {
|
||||||
|
display: grid;
|
||||||
|
grid-template-columns: repeat(3, 1fr);
|
||||||
|
gap: 0.5rem;
|
||||||
|
max-width: 300px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.x-button {
|
||||||
|
width: 100% !important;
|
||||||
|
margin: 0 !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
.coordinate-input {
|
||||||
|
padding: 0.5rem;
|
||||||
|
border: 1px solid #ddd;
|
||||||
|
border-radius: 4px;
|
||||||
|
width: 200px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.submit-button {
|
||||||
|
width: 200px;
|
||||||
|
margin-top: 1rem !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
.results-container {
|
||||||
|
margin-top: 2rem;
|
||||||
|
}
|
||||||
|
|
||||||
|
.results-table {
|
||||||
|
width: 100%;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Navigation */
|
||||||
|
.navigation {
|
||||||
|
margin-top: 2rem;
|
||||||
|
text-align: center;
|
||||||
|
}
|
||||||
|
|
||||||
|
.nav-button {
|
||||||
|
padding: 10px 20px;
|
||||||
|
background-color: #4CAF50;
|
||||||
|
color: white;
|
||||||
|
border: none;
|
||||||
|
border-radius: 4px;
|
||||||
|
cursor: pointer;
|
||||||
|
font-size: 1rem;
|
||||||
|
text-decoration: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
.nav-button:hover {
|
||||||
|
background-color: #45a049;
|
||||||
|
}
|
178
target/web-3-1.0-SNAPSHOT/resources/js/canvas.js
Normal file
178
target/web-3-1.0-SNAPSHOT/resources/js/canvas.js
Normal file
|
@ -0,0 +1,178 @@
|
||||||
|
// Define handleAjaxComplete in the global scope first
|
||||||
|
window.handleAjaxComplete = function() {
|
||||||
|
if (typeof canvasManager !== 'undefined') {
|
||||||
|
canvasManager.initCanvas();
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
// Canvas manager object
|
||||||
|
const canvasManager = {
|
||||||
|
canvas: null,
|
||||||
|
ctx: null,
|
||||||
|
CANVAS_WIDTH: 400,
|
||||||
|
CANVAS_HEIGHT: 400,
|
||||||
|
|
||||||
|
getElement: function(id) {
|
||||||
|
return document.getElementById('mainForm:' + id);
|
||||||
|
},
|
||||||
|
|
||||||
|
initCanvas: function() {
|
||||||
|
this.canvas = document.getElementById('graph');
|
||||||
|
if (this.canvas) {
|
||||||
|
this.ctx = this.canvas.getContext('2d');
|
||||||
|
this.canvas.addEventListener('click', this.handleCanvasClick.bind(this));
|
||||||
|
this.updateGraph();
|
||||||
|
}
|
||||||
|
},
|
||||||
|
|
||||||
|
handleCanvasClick: function(event) {
|
||||||
|
if (!this.canvas || !this.ctx) return;
|
||||||
|
|
||||||
|
const rInput = this.getElement('rInput');
|
||||||
|
if (!rInput) return;
|
||||||
|
|
||||||
|
const r = parseFloat(rInput.value);
|
||||||
|
if (!r || r < 1 || r > 4) {
|
||||||
|
alert('Please set a valid R value (1-4) first');
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
const rect = this.canvas.getBoundingClientRect();
|
||||||
|
const x = event.clientX - rect.left;
|
||||||
|
const y = event.clientY - rect.top;
|
||||||
|
|
||||||
|
const center = this.CANVAS_WIDTH / 2;
|
||||||
|
const scale = this.CANVAS_WIDTH / 3 / r;
|
||||||
|
|
||||||
|
const graphX = ((x - center) / scale).toFixed(2);
|
||||||
|
const graphY = ((center - y) / scale).toFixed(2);
|
||||||
|
|
||||||
|
this.getElement('xHidden').value = graphX;
|
||||||
|
this.getElement('yHidden').value = graphY;
|
||||||
|
|
||||||
|
plotPoint();
|
||||||
|
},
|
||||||
|
|
||||||
|
updateGraph: function() {
|
||||||
|
if (!this.canvas || !this.ctx) return;
|
||||||
|
|
||||||
|
const rInput = this.getElement('rInput');
|
||||||
|
if (!rInput) return;
|
||||||
|
|
||||||
|
const r = parseFloat(rInput.value);
|
||||||
|
if (!r || r < 1 || r > 4) return;
|
||||||
|
|
||||||
|
this.ctx.clearRect(0, 0, this.CANVAS_WIDTH, this.CANVAS_HEIGHT);
|
||||||
|
this.drawGrid(r);
|
||||||
|
this.drawAreas(r);
|
||||||
|
this.drawPoints();
|
||||||
|
},
|
||||||
|
|
||||||
|
drawGrid: function(r) {
|
||||||
|
const center = this.CANVAS_WIDTH / 2;
|
||||||
|
const scale = this.CANVAS_WIDTH / 3 / r;
|
||||||
|
|
||||||
|
this.ctx.beginPath();
|
||||||
|
this.ctx.moveTo(0, center);
|
||||||
|
this.ctx.lineTo(this.CANVAS_WIDTH, center);
|
||||||
|
this.ctx.moveTo(center, 0);
|
||||||
|
this.ctx.lineTo(center, this.CANVAS_HEIGHT);
|
||||||
|
this.ctx.strokeStyle = 'black';
|
||||||
|
this.ctx.stroke();
|
||||||
|
|
||||||
|
this.ctx.font = '12px Arial';
|
||||||
|
this.ctx.textAlign = 'center';
|
||||||
|
this.ctx.textBaseline = 'middle';
|
||||||
|
|
||||||
|
[-r, -r/2, r/2, r].forEach(value => {
|
||||||
|
const x = center + value * scale;
|
||||||
|
const y = center - value * scale;
|
||||||
|
|
||||||
|
this.ctx.beginPath();
|
||||||
|
this.ctx.moveTo(x, center - 5);
|
||||||
|
this.ctx.lineTo(x, center + 5);
|
||||||
|
this.ctx.moveTo(center - 5, y);
|
||||||
|
this.ctx.lineTo(center + 5, y);
|
||||||
|
this.ctx.stroke();
|
||||||
|
|
||||||
|
this.ctx.fillText(value.toString(), x, center + 20);
|
||||||
|
this.ctx.fillText(value.toString(), center - 20, y);
|
||||||
|
});
|
||||||
|
},
|
||||||
|
|
||||||
|
drawAreas: function(r) {
|
||||||
|
const center = this.CANVAS_WIDTH / 2;
|
||||||
|
const scale = this.CANVAS_WIDTH / 3 / r;
|
||||||
|
|
||||||
|
this.ctx.fillStyle = 'rgba(100, 149, 237, 0.5)';
|
||||||
|
|
||||||
|
// Triangle in -x, -y quadrant
|
||||||
|
this.ctx.beginPath();
|
||||||
|
this.ctx.moveTo(center, center);
|
||||||
|
this.ctx.lineTo(center - r/2 * scale, center);
|
||||||
|
this.ctx.lineTo(center, center + r * scale);
|
||||||
|
this.ctx.closePath();
|
||||||
|
this.ctx.fill();
|
||||||
|
|
||||||
|
// Square in -x, +y quadrant
|
||||||
|
this.ctx.fillRect(center - r/2 * scale, center - r * scale, r/2 * scale, r * scale);
|
||||||
|
|
||||||
|
// Quarter circle in +x, -y quadrant
|
||||||
|
this.ctx.beginPath();
|
||||||
|
this.ctx.moveTo(center, center);
|
||||||
|
this.ctx.arc(center, center, r * scale, 0, Math.PI/2, false);
|
||||||
|
this.ctx.closePath();
|
||||||
|
this.ctx.fill();
|
||||||
|
},
|
||||||
|
|
||||||
|
drawPoints: function() {
|
||||||
|
const rInput = this.getElement('rInput');
|
||||||
|
if (!rInput) return;
|
||||||
|
|
||||||
|
const r = parseFloat(rInput.value);
|
||||||
|
if (!r) return;
|
||||||
|
|
||||||
|
const center = this.CANVAS_WIDTH / 2;
|
||||||
|
const scale = this.CANVAS_WIDTH / 3 / r;
|
||||||
|
|
||||||
|
// Updated selector to match PrimeFaces table
|
||||||
|
const table = document.querySelector('[id$="resultsTable"]');
|
||||||
|
if (!table) return;
|
||||||
|
|
||||||
|
const rows = table.querySelectorAll('tbody tr');
|
||||||
|
|
||||||
|
rows.forEach(row => {
|
||||||
|
const cells = row.cells;
|
||||||
|
// Skip if we don't have enough cells
|
||||||
|
if (!cells || cells.length < 4) return;
|
||||||
|
|
||||||
|
try {
|
||||||
|
const x = parseFloat(cells[0].textContent.trim());
|
||||||
|
const y = parseFloat(cells[1].textContent.trim());
|
||||||
|
const hit = cells[3].textContent.trim() === 'Yes';
|
||||||
|
|
||||||
|
// Skip if we couldn't parse the coordinates
|
||||||
|
if (isNaN(x) || isNaN(y)) return;
|
||||||
|
|
||||||
|
// Convert graph coordinates to canvas coordinates
|
||||||
|
const canvasX = center + x * scale;
|
||||||
|
const canvasY = center - y * scale;
|
||||||
|
|
||||||
|
// Draw the point
|
||||||
|
this.ctx.beginPath();
|
||||||
|
this.ctx.arc(canvasX, canvasY, 4, 0, 2 * Math.PI);
|
||||||
|
this.ctx.fillStyle = hit ? 'green' : 'red';
|
||||||
|
this.ctx.fill();
|
||||||
|
this.ctx.strokeStyle = 'black';
|
||||||
|
this.ctx.stroke();
|
||||||
|
} catch (e) {
|
||||||
|
console.error('Error drawing point:', e);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
// Initialize when DOM is loaded
|
||||||
|
document.addEventListener('DOMContentLoaded', function() {
|
||||||
|
canvasManager.initCanvas();
|
||||||
|
});
|
25
target/web-3-1.0-SNAPSHOT/templates/base.xhtml
Normal file
25
target/web-3-1.0-SNAPSHOT/templates/base.xhtml
Normal file
|
@ -0,0 +1,25 @@
|
||||||
|
<!DOCTYPE html>
|
||||||
|
<html xmlns="http://www.w3.org/1999/xhtml"
|
||||||
|
xmlns:h="http://xmlns.jcp.org/jsf/html"
|
||||||
|
xmlns:ui="http://xmlns.jcp.org/jsf/facelets"
|
||||||
|
xmlns:f="http://xmlns.jcp.org/jsf/core"
|
||||||
|
xmlns:p="http://primefaces.org/ui">
|
||||||
|
<h:head>
|
||||||
|
<title>
|
||||||
|
<ui:insert name="title">Web лаба 3</ui:insert>
|
||||||
|
</title>
|
||||||
|
<h:outputStylesheet name="css/styles.css"/>
|
||||||
|
</h:head>
|
||||||
|
<h:body>
|
||||||
|
<div class="header">
|
||||||
|
<h1>Web лаба 3</h1>
|
||||||
|
<p>сделал: Карпов Александр Дмитриевич</p>
|
||||||
|
<p>Группа: P3213</p>
|
||||||
|
<p>Вариант: 665</p>
|
||||||
|
</div>
|
||||||
|
<div class="content">
|
||||||
|
<ui:insert name="content">а где</ui:insert>
|
||||||
|
</div>
|
||||||
|
<ui:insert name="scripts"/>
|
||||||
|
</h:body>
|
||||||
|
</html>
|
33
web-3.iml
Normal file
33
web-3.iml
Normal file
|
@ -0,0 +1,33 @@
|
||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<module version="4">
|
||||||
|
<component name="FacetManager">
|
||||||
|
<facet type="web" name="Web3">
|
||||||
|
<configuration>
|
||||||
|
<descriptors>
|
||||||
|
<deploymentDescriptor name="web.xml" url="file://$MODULE_DIR$/wildfly/standalone/tmp/vfs/temp/temp86c4d937f34064fc/content-bce011618352438/WEB-INF/web.xml" />
|
||||||
|
</descriptors>
|
||||||
|
<webroots>
|
||||||
|
<root url="file://$MODULE_DIR$/wildfly/standalone/tmp/vfs/temp/temp86c4d937f34064fc/content-bce011618352438" relative="/" />
|
||||||
|
</webroots>
|
||||||
|
<sourceRoots>
|
||||||
|
<root url="file://$MODULE_DIR$/src/main/java" />
|
||||||
|
<root url="file://$MODULE_DIR$/src/main/resources" />
|
||||||
|
</sourceRoots>
|
||||||
|
</configuration>
|
||||||
|
</facet>
|
||||||
|
<facet type="web" name="Web2">
|
||||||
|
<configuration>
|
||||||
|
<descriptors>
|
||||||
|
<deploymentDescriptor name="web.xml" url="file://$MODULE_DIR$/wildfly/standalone/tmp/vfs/temp/temp3b6a013d5a54d32d/content-e17e51188c963cbb/WEB-INF/web.xml" />
|
||||||
|
</descriptors>
|
||||||
|
<webroots>
|
||||||
|
<root url="file://$MODULE_DIR$/wildfly/standalone/tmp/vfs/temp/temp3b6a013d5a54d32d/content-e17e51188c963cbb" relative="/" />
|
||||||
|
</webroots>
|
||||||
|
<sourceRoots>
|
||||||
|
<root url="file://$MODULE_DIR$/src/main/java" />
|
||||||
|
<root url="file://$MODULE_DIR$/src/main/resources" />
|
||||||
|
</sourceRoots>
|
||||||
|
</configuration>
|
||||||
|
</facet>
|
||||||
|
</component>
|
||||||
|
</module>
|
4
wildfly/.galleon/hashes/appclient/configuration/hashes
Normal file
4
wildfly/.galleon/hashes/appclient/configuration/hashes
Normal file
|
@ -0,0 +1,4 @@
|
||||||
|
appclient.xml
|
||||||
|
532495c876209d571f74d5a3300d22536f9746a1
|
||||||
|
logging.properties
|
||||||
|
f23d8fbead4340131038bf8f07af607f9b73134b
|
8
wildfly/.galleon/hashes/bin/client/hashes
Normal file
8
wildfly/.galleon/hashes/bin/client/hashes
Normal file
|
@ -0,0 +1,8 @@
|
||||||
|
README-CLI-JCONSOLE.txt
|
||||||
|
4170faae58c767cc5b7f82c1aff27184eef5a4a0
|
||||||
|
README-EJB-JMS.txt
|
||||||
|
a996dcda2c002b59d2728c263d5f105a8c79c2bd
|
||||||
|
jboss-cli-client.jar
|
||||||
|
acd8deaa6b74f761fb74ff0dffe53a0183b9f46f
|
||||||
|
jboss-client.jar
|
||||||
|
411c2afa8448065abf23c104160edf00ad01bb58
|
106
wildfly/.galleon/hashes/bin/hashes
Normal file
106
wildfly/.galleon/hashes/bin/hashes
Normal file
|
@ -0,0 +1,106 @@
|
||||||
|
.jbossclirc
|
||||||
|
dcd83889155492eb6078e137231699a4f02cc552
|
||||||
|
add-user.bat
|
||||||
|
5ecac88c71bb96f0bb623a81b3daf72c7854ab7a
|
||||||
|
add-user.properties
|
||||||
|
e14860abc742b3b256685cd0121733a3aaeaed5b
|
||||||
|
add-user.ps1
|
||||||
|
3f0f984395185e1ee1684e18daaf71b0288a75cc
|
||||||
|
add-user.sh
|
||||||
|
7f2d9924da3e1fc95265afcc1e8af48a257be423
|
||||||
|
appclient.bat
|
||||||
|
a014071131d24038fc312a47c1fe1f3d2b6bf20a
|
||||||
|
appclient.conf
|
||||||
|
f6448abb8fa09fdf93ee2e9cdd34820c3443fccc
|
||||||
|
appclient.conf.bat
|
||||||
|
848ea40a23dc00c5e924a245946994b33a4e47fd
|
||||||
|
appclient.conf.ps1
|
||||||
|
84b82401b63782760bee661ed65903e43b678402
|
||||||
|
appclient.ps1
|
||||||
|
7f09b3d6124071f3f36bfed8d8d79468cec84717
|
||||||
|
appclient.sh
|
||||||
|
412b60d883aaf53eda49c43ed9366a9512693021
|
||||||
|
common.bat
|
||||||
|
ead9b9128bf85c1412d21a4da96ee38baaf3bf9b
|
||||||
|
common.ps1
|
||||||
|
c592c86ff9bc310cb255a4626ea75e52606127e2
|
||||||
|
common.sh
|
||||||
|
ef48be67bf154d62ad36834715e297ec7bfb3a1a
|
||||||
|
domain.bat
|
||||||
|
651ad7f14cfea8236c0ddf31349a48de0cc70bfb
|
||||||
|
domain.conf
|
||||||
|
9d16c52d5426b19746f33234e2361a3260f683e7
|
||||||
|
domain.conf.bat
|
||||||
|
a4acf634a062c87fb3ef2866380a7310c562295b
|
||||||
|
domain.conf.ps1
|
||||||
|
2e0b4a55fa57fa9942ce0f912c1a4485da13b50b
|
||||||
|
domain.ps1
|
||||||
|
624b8d9d0c78516cbc7747620012a0f296f725f9
|
||||||
|
domain.sh
|
||||||
|
b59e40c7d89ae7152669f43f9e31be919c94c883
|
||||||
|
elytron-tool.bat
|
||||||
|
2a279a07892f2f177924cb431d2d3fd5a7a0b186
|
||||||
|
elytron-tool.ps1
|
||||||
|
d6e55c48a41ffe8b9cffd3f675e7f6b9bb61e34e
|
||||||
|
elytron-tool.sh
|
||||||
|
2bf4b2bcbb69498d93e766a0cda78ace217e2e18
|
||||||
|
installation-manager.bat
|
||||||
|
1a94bb4b1e80254f81db27d25bf0f37d23aca111
|
||||||
|
installation-manager.properties
|
||||||
|
a9443c682329c0b30089dcc0bdaade5abb6f968c
|
||||||
|
installation-manager.ps1
|
||||||
|
ed7c3535cf9b08f8b06b6efd2666afb1e3dd7f44
|
||||||
|
installation-manager.sh
|
||||||
|
d4015d7070719287b9392d3513b43c82313e8dde
|
||||||
|
jboss-cli-logging.properties
|
||||||
|
d2f5e1ee67a12ab2856137af249e19c57d9e7e00
|
||||||
|
jboss-cli.bat
|
||||||
|
55d0e127970fad2139c681d7e50e532bc2901f48
|
||||||
|
jboss-cli.ps1
|
||||||
|
e5baf2bc003162f0cb4c61e7c65619b03589814e
|
||||||
|
jboss-cli.sh
|
||||||
|
2dbf86ae0132fd1b0958640fef9789e4474b2e0e
|
||||||
|
jboss-cli.xml
|
||||||
|
e06123048694c6624fc7827ec458dd4447e474f6
|
||||||
|
jconsole.bat
|
||||||
|
c3077b2e130c8690f806663aa0d4e93fb0dbe773
|
||||||
|
jconsole.ps1
|
||||||
|
7f022379decba2efa2b02faf03cf66b2e5e94eb4
|
||||||
|
jconsole.sh
|
||||||
|
d237aca74d0c04026387fc7c0c7896a7bb6d21ed
|
||||||
|
jdr.bat
|
||||||
|
5fc483ce9df1f50ee71d953276381265a77ad508
|
||||||
|
jdr.ps1
|
||||||
|
1d953c5f1a1f8f589928c96a417d45da76883deb
|
||||||
|
jdr.sh
|
||||||
|
916490961d30ce4c34ce78782409ed267bfeefbe
|
||||||
|
launcher.jar
|
||||||
|
8984f477b583f9a8a171bfb1d29f98fc9968287f
|
||||||
|
product.conf
|
||||||
|
ba237d5eb52965bcbf1d6fa558f1566c0157b22b
|
||||||
|
standalone.bat
|
||||||
|
594ba0bcffee68f04f2189ce41258ffdfb616754
|
||||||
|
standalone.conf
|
||||||
|
9ea4032accd5bfe61aebe8c7e401ab31a1fbf40e
|
||||||
|
standalone.conf.bat
|
||||||
|
85710239019fdb1da6a50b77584261107800519e
|
||||||
|
standalone.conf.ps1
|
||||||
|
68e6a7206195e28475302ed2eed238e0c0ab958c
|
||||||
|
standalone.ps1
|
||||||
|
6e1f68fef7203212d8df61c2da557471dcd80514
|
||||||
|
standalone.sh
|
||||||
|
c5a306e784dc0e13d73780e0925d9e2df71bec38
|
||||||
|
wildfly-elytron-tool.jar
|
||||||
|
badaa021e8f2fac88632bcde8c68eea72e4f0b35
|
||||||
|
wsconsume.bat
|
||||||
|
0df6b935bd43dc5767d13b9cbbb37c6014dccb66
|
||||||
|
wsconsume.ps1
|
||||||
|
d1553e0c54fe247ae3bdd72f3799bb343c898fe4
|
||||||
|
wsconsume.sh
|
||||||
|
4a8a87300ea670f7c25c4bd3fd69923bd5c9ebf2
|
||||||
|
wsprovide.bat
|
||||||
|
2c548ce81210f684f3dc0f6646bacd7e9156c556
|
||||||
|
wsprovide.ps1
|
||||||
|
94798618662f981d21e285067fc5c0f5e46cb708
|
||||||
|
wsprovide.sh
|
||||||
|
c6dda8ca7a6c9d49a522f9b15b5bde6b8b2cc5d3
|
2
wildfly/.galleon/hashes/docs/contrib/scripts/hashes
Normal file
2
wildfly/.galleon/hashes/docs/contrib/scripts/hashes
Normal file
|
@ -0,0 +1,2 @@
|
||||||
|
README.md
|
||||||
|
a503e1f53e876dff2dabbb5e0dfccd4c9b07192f
|
|
@ -0,0 +1,6 @@
|
||||||
|
wildfly-init-debian.sh
|
||||||
|
fa501ea0a2a20b75eb537c3ba0f56c8be6dbd6a3
|
||||||
|
wildfly-init-redhat.sh
|
||||||
|
62b0e3f39cf470646f4ac06a2e9e903f95bb5054
|
||||||
|
wildfly.conf
|
||||||
|
c9137d05357cfb2c33feb3b01ae666d254057623
|
|
@ -0,0 +1,2 @@
|
||||||
|
wildfly-service.exe
|
||||||
|
b62a0082e9780327ff7681b9c05da2d706476e42
|
|
@ -0,0 +1,6 @@
|
||||||
|
service.bat
|
||||||
|
d849c6b71473cb85d5079cfc5eb2bc6735ed5650
|
||||||
|
wildfly-mgr.exe
|
||||||
|
39cd9893df296428257366dce25110f0eff4c07b
|
||||||
|
wildfly-service.exe
|
||||||
|
6e4a3a72fb9bd66b6f6755ea3c1fa922a3073453
|
|
@ -0,0 +1,8 @@
|
||||||
|
README
|
||||||
|
ea7d8cf2c8a88751a1681275d4d7e3191140647d
|
||||||
|
launch.sh
|
||||||
|
296ca556f9627ca313528d8e53a400d42241b5e5
|
||||||
|
wildfly.conf
|
||||||
|
41f6c8dcfe4fad4aa43f8aed8f1eb78c58ffb71f
|
||||||
|
wildfly.service
|
||||||
|
152a4416c489fca0f8b6a4b474fc8f7efd484665
|
30
wildfly/.galleon/hashes/docs/examples/configs/hashes
Normal file
30
wildfly/.galleon/hashes/docs/examples/configs/hashes
Normal file
|
@ -0,0 +1,30 @@
|
||||||
|
domain-ec2.xml
|
||||||
|
e96f4a06598c812dae96ae3564aa0b9d9fb7d0fe
|
||||||
|
standalone-activemq-colocated.xml
|
||||||
|
5f1570cf40a906228aac7b72ae6516a13b8cb356
|
||||||
|
standalone-azure-full-ha.xml
|
||||||
|
016f30a17a8d718917bbd334a2e2020eb2ca280c
|
||||||
|
standalone-azure-ha.xml
|
||||||
|
d53551afe579e2b698d1f00bee968c41838b358c
|
||||||
|
standalone-core-microprofile.xml
|
||||||
|
5fbd781fee684f74f9d06e9504e087ee117df40d
|
||||||
|
standalone-core.xml
|
||||||
|
6e354b6db6b11e5458606da11c85dfe425d48bc7
|
||||||
|
standalone-ec2-full-ha.xml
|
||||||
|
68e8eacbcc8fee7ab4a5df643a66980d77e899ee
|
||||||
|
standalone-ec2-ha.xml
|
||||||
|
b60e10d467d12b629aaefb323b9da3dab2ea04fe
|
||||||
|
standalone-genericjms.xml
|
||||||
|
87b88458623939078129c148d74328cfef6e0cd3
|
||||||
|
standalone-gossip-full-ha.xml
|
||||||
|
9d1f0893b328d55a882c277e8be607cd12ff2a83
|
||||||
|
standalone-gossip-ha.xml
|
||||||
|
fea615fa07d0914d884af32be1eadb05f5eef35a
|
||||||
|
standalone-jts.xml
|
||||||
|
17587b6dece2646dacce5b36fa023b5a2eac324f
|
||||||
|
standalone-minimalistic.xml
|
||||||
|
5c218b78a243c0ccd02b0bbce90a946a0981bf8a
|
||||||
|
standalone-rts.xml
|
||||||
|
34dc75ebc42e844df9f23be9775d614b1a763b25
|
||||||
|
standalone-xts.xml
|
||||||
|
f2861b8fdd8d5654dfdcddc5c6c678deb5e8476a
|
2
wildfly/.galleon/hashes/docs/examples/hashes
Normal file
2
wildfly/.galleon/hashes/docs/examples/hashes
Normal file
|
@ -0,0 +1,2 @@
|
||||||
|
enable-microprofile.cli
|
||||||
|
2dd0552bcfc0007fd139808b3fc99fc741f17de1
|
56
wildfly/.galleon/hashes/docs/licenses/hashes
Normal file
56
wildfly/.galleon/hashes/docs/licenses/hashes
Normal file
|
@ -0,0 +1,56 @@
|
||||||
|
MIT_CONTRIBUTORS.txt
|
||||||
|
c40dbd2dbcd064fd5e2e6e48e2c986ed9db9f1f1
|
||||||
|
apache license 2.0.txt
|
||||||
|
2b8b815229aa8a61e483fb4ba0588b8b6c491890
|
||||||
|
bsd 2-clause simplified license.html
|
||||||
|
257a88e5266e7383d43e66a62b25d14f8e9d5731
|
||||||
|
bsd 3-clause new or revised license.html
|
||||||
|
ea037166f736172dfcb91ab34e211b325c787823
|
||||||
|
common public license 1.0.txt
|
||||||
|
7cdb9c36e1d419e07f88628cd016c0481796b89e
|
||||||
|
creative commons attribution 2.5.html
|
||||||
|
a3f15d06f44729420d7ab2d87ca9bee7cf2820fe
|
||||||
|
eclipse distribution license, version 1.0.txt
|
||||||
|
d520e5d0b7b10f2d36f17ba00b7ea38704f3eed7
|
||||||
|
eclipse public license 1.0.txt
|
||||||
|
77a188d578cd71a45134542ea192f93064d1ebf1
|
||||||
|
eclipse public license 2.0.txt
|
||||||
|
b086d72d0fe9af38418dab524fe76eea3cb1eec3
|
||||||
|
fsf all permissive license.html
|
||||||
|
fcf4e258a3d90869c3a2e7fc55154559318b8eb4
|
||||||
|
gnu general public license v2.0 only, with classpath exception.txt
|
||||||
|
cef61f92dbf47fb27b16d36a4146ec7df7dced6d
|
||||||
|
gnu lesser general public license v2.1 only.txt
|
||||||
|
01a6b4bf79aca9b556822601186afab86e8c4fbf
|
||||||
|
gnu lesser general public license v2.1 or later.txt
|
||||||
|
46dee26f31cce329fa13eacb74f8ac5e52723380
|
||||||
|
gnu lesser general public license v3.0 only.txt
|
||||||
|
e7d563f52bf5295e6dba1d67ac23e9f6a160fab9
|
||||||
|
gnu lesser general public license v3.0 or later.txt
|
||||||
|
e7d563f52bf5295e6dba1d67ac23e9f6a160fab9
|
||||||
|
gnu library general public license v2 only.txt
|
||||||
|
44f7289042b71631acac29b2f143330d2da2479e
|
||||||
|
indiana university extreme lab software license 1.1.1.html
|
||||||
|
451bc145d38a999eab098ca1e10ef74a5db08654
|
||||||
|
licenses.css
|
||||||
|
b4bdad965c7c9487b8390ea9d910df591b62a680
|
||||||
|
licenses.html
|
||||||
|
8fe1f76aa075e6092e83ce75aa916cf0c26edfe1
|
||||||
|
licenses.xml
|
||||||
|
e0d5b4737ca5ebab305d095575f1c2c0363feaeb
|
||||||
|
licenses.xsl
|
||||||
|
bdf6fbb28dce0e2eed2a2bf1a3e4e030f03536b2
|
||||||
|
mit license.txt
|
||||||
|
19eff4fc59155a9343582148816eeb9ffb244279
|
||||||
|
mit-0.html
|
||||||
|
50ac12745b7d3674089f3dc1cf326ee0365ef249
|
||||||
|
mozilla public license 2.0.html
|
||||||
|
c541f06ec7085d6074c6599f38b11ae4a2a31050
|
||||||
|
wildfly-ee-feature-pack-licenses.html
|
||||||
|
6c2d8d05967257aec7bbd2071b84dca54dc1cc28
|
||||||
|
wildfly-ee-feature-pack-licenses.xml
|
||||||
|
099f289f65f4c8c6e4bcdbfda679159a3c82d5b8
|
||||||
|
wildfly-feature-pack-licenses.html
|
||||||
|
97c018e62d71ee84ade52b82ce6ec367d3fb11e8
|
||||||
|
wildfly-feature-pack-licenses.xml
|
||||||
|
44445407a62b9ec9c0b5e50ba32a2396eaa5d67f
|
1072
wildfly/.galleon/hashes/docs/schema/hashes
Normal file
1072
wildfly/.galleon/hashes/docs/schema/hashes
Normal file
File diff suppressed because it is too large
Load Diff
20
wildfly/.galleon/hashes/domain/configuration/hashes
Normal file
20
wildfly/.galleon/hashes/domain/configuration/hashes
Normal file
|
@ -0,0 +1,20 @@
|
||||||
|
application-roles.properties
|
||||||
|
2339b5b3b5544b9a54b2a17a077a43277f4becac
|
||||||
|
application-users.properties
|
||||||
|
0cdb9ca548eca6503a3cb0e4c7ce80f5336a1c82
|
||||||
|
default-server-logging.properties
|
||||||
|
f79da20ce3f13ecf153f75c77bf9d9cb7870509d
|
||||||
|
domain.xml
|
||||||
|
daaecccdabe0ae4bd03815b2bbae7f922803efb9
|
||||||
|
host-primary.xml
|
||||||
|
925039b4ddb39e39840e77ae069ca505c93392d4
|
||||||
|
host-secondary.xml
|
||||||
|
a1e167d1161fa1dac7793729144d850514726e9f
|
||||||
|
host.xml
|
||||||
|
730c4b5bac2ef744b0127ac57df7e526c5e1ab17
|
||||||
|
logging.properties
|
||||||
|
1138aa7e1af0a0a93f0dc8754773b19dcbc7a68e
|
||||||
|
mgmt-groups.properties
|
||||||
|
8a5ca3eeb904c2b6f2bc60f12e7cefed4b5d09b0
|
||||||
|
mgmt-users.properties
|
||||||
|
b79a69eb57c60d16a626e20256c7531e2e22fe21
|
8
wildfly/.galleon/hashes/hashes
Normal file
8
wildfly/.galleon/hashes/hashes
Normal file
|
@ -0,0 +1,8 @@
|
||||||
|
LICENSE.txt
|
||||||
|
58853eb8199b5afe72a73a25fd8cf8c94285174b
|
||||||
|
README.txt
|
||||||
|
4e02800d2609dc82e957cfcf5eae12eeb1120349
|
||||||
|
copyright.txt
|
||||||
|
165a59628b050f2faa2477a2a62a92aa024ca1e3
|
||||||
|
jboss-modules.jar
|
||||||
|
ad33a0ca75c8189ebbfd8eedbb489a1453b96dea
|
|
@ -0,0 +1,6 @@
|
||||||
|
asm-9.7.jar
|
||||||
|
073d7b3086e14beb604ced229c302feff6449723
|
||||||
|
asm-util-9.7.jar
|
||||||
|
c0655519f24d92af2202cb681cd7c1569df6ead6
|
||||||
|
module.xml
|
||||||
|
2fdd92766986752fe05bf9e499a5b89fbfed4b5a
|
|
@ -0,0 +1,4 @@
|
||||||
|
hppc-0.8.1.jar
|
||||||
|
ffc7ba8f289428b9508ab484b8001dea944ae603
|
||||||
|
module.xml
|
||||||
|
7ff9b09d68ddb811bca586f99c7e4895fc11cc99
|
|
@ -0,0 +1,4 @@
|
||||||
|
classmate-1.5.1.jar
|
||||||
|
3fe0bed568c62df5e89f4f174c101eab25345b6c
|
||||||
|
module.xml
|
||||||
|
2c2407d2d12a8b2cd853b25ca0592659cf961c23
|
|
@ -0,0 +1,4 @@
|
||||||
|
jackson-annotations-2.17.0.jar
|
||||||
|
880a742337010da4c851f843d8cac150e22dff9f
|
||||||
|
module.xml
|
||||||
|
e4a8dbea35ecf4bdb108eefc4f7a5fefc2bd8ad0
|
|
@ -0,0 +1,4 @@
|
||||||
|
jackson-core-2.17.0.jar
|
||||||
|
a6e5058ef9720623c517252d17162f845306ff3a
|
||||||
|
module.xml
|
||||||
|
68cdc0d521772e10b6bd0ed00f8e9d5d1a8fa58c
|
|
@ -0,0 +1,4 @@
|
||||||
|
jackson-databind-2.17.0.jar
|
||||||
|
7173e9e1d4bc6d7ca03bc4eeedcd548b8b580b34
|
||||||
|
module.xml
|
||||||
|
afae2e2a7304f640bd4c77db1e7013cb48e6fbce
|
|
@ -0,0 +1,4 @@
|
||||||
|
jackson-dataformat-yaml-2.17.0.jar
|
||||||
|
57a963c6258c49febc11390082d8503f71bb15a9
|
||||||
|
module.xml
|
||||||
|
43440d6ca1b0a4d926a413a73f59c4adae389922
|
|
@ -0,0 +1,4 @@
|
||||||
|
jackson-datatype-jdk8-2.17.0.jar
|
||||||
|
95519a116d909faec29da76cf6b944b4a84c2c26
|
||||||
|
module.xml
|
||||||
|
4f672ef5b562b6de8be01280e228d87f3cdab036
|
|
@ -0,0 +1,4 @@
|
||||||
|
jackson-datatype-jsr310-2.17.0.jar
|
||||||
|
3fab507bba9d477e52ed2302dc3ddbd23cbae339
|
||||||
|
module.xml
|
||||||
|
f3e236cbeb6c19474f74c1798dd38dbc66b7a4a6
|
|
@ -0,0 +1,8 @@
|
||||||
|
jackson-jakarta-rs-base-2.17.0.jar
|
||||||
|
191c316a3951956fb982b7965cea7e142d9fb87e
|
||||||
|
jackson-jakarta-rs-json-provider-2.17.0.jar
|
||||||
|
2f86fc40907f018a45c4d5dd2a5ba43b526fa0cb
|
||||||
|
jackson-module-jakarta-xmlbind-annotations-2.17.0.jar
|
||||||
|
0e652f73b9c3d897b51336d9e17c2267bb716917
|
||||||
|
module.xml
|
||||||
|
68d13970e8c3a97f5e048798554507fd12b72081
|
|
@ -0,0 +1,2 @@
|
||||||
|
module.xml
|
||||||
|
09257ddbe3ca160f3ccae184177749efb82a72ce
|
|
@ -0,0 +1,4 @@
|
||||||
|
caffeine-3.1.8.jar
|
||||||
|
24795585df8afaf70a2cd534786904ea5889c047
|
||||||
|
module.xml
|
||||||
|
b5d5c01752d3997d117ec900faa1f167a9b1c285
|
|
@ -0,0 +1,4 @@
|
||||||
|
btf-1.2.jar
|
||||||
|
9e66651022eb86301b348d57e6f59459effc343b
|
||||||
|
module.xml
|
||||||
|
25ed39b0eb6131b1b16f5ad02344a2c4a6bce80c
|
|
@ -0,0 +1,4 @@
|
||||||
|
jackson-coreutils-1.8.jar
|
||||||
|
491a6e1130a180c153df9f2b7aabd7a700282c67
|
||||||
|
module.xml
|
||||||
|
edd282e5b4a283be2818d75ca8d9f12147a5f241
|
|
@ -0,0 +1,4 @@
|
||||||
|
json-patch-1.9.jar
|
||||||
|
0a4c3c97a0f5965dec15795acf40d3fbc897af4b
|
||||||
|
module.xml
|
||||||
|
d617d8be6e99f49dbf75754fb3b4568b38237e6b
|
|
@ -0,0 +1,4 @@
|
||||||
|
module.xml
|
||||||
|
55470daae6c253ebf9e114335255bd209e7a4c1e
|
||||||
|
msg-simple-1.1.jar
|
||||||
|
f261263e13dd4cfa93cc6b83f1f58f619097a2c4
|
|
@ -0,0 +1,4 @@
|
||||||
|
module.xml
|
||||||
|
d614911cd191a7d479ffa4ac976e043eb963a02e
|
||||||
|
zstd-jni-1.5.6-5.jar
|
||||||
|
6b0abf5f2e68df5ffac02cba09fc2d84f7ebd631
|
|
@ -0,0 +1,4 @@
|
||||||
|
gson-2.8.9.jar
|
||||||
|
8a432c1d6825781e21a02db2e2c33c5fde2833b9
|
||||||
|
module.xml
|
||||||
|
e9fece80c079e4436e45267429813501f4852b2d
|
|
@ -0,0 +1,4 @@
|
||||||
|
failureaccess-1.0.2.jar
|
||||||
|
c4a06a64e650562f30b7bf9aaec1bfed43aca12b
|
||||||
|
module.xml
|
||||||
|
7d7ad1fd8299119798c90c5915e4993f56711804
|
|
@ -0,0 +1,4 @@
|
||||||
|
guava-33.0.0-jre.jar
|
||||||
|
161ba27964a62f241533807a46b8711b13c1d94b
|
||||||
|
module.xml
|
||||||
|
5b9a85ab34e0fe19c3a3b31f4954ae40db2b600f
|
|
@ -0,0 +1,10 @@
|
||||||
|
module.xml
|
||||||
|
eca834efdc39015b90e7129b01d7b1fa6ba5d064
|
||||||
|
perfmark-api-0.23.0.jar
|
||||||
|
0b813b7539fae6550541da8caafd6add86d4e22f
|
||||||
|
proto-google-common-protos-2.0.1.jar
|
||||||
|
20827628ea2b9f69ae22987b2aedb0050e9c470d
|
||||||
|
protobuf-java-3.25.5.jar
|
||||||
|
5ae5c9ec39930ae9b5a61b32b93288818ec05ec1
|
||||||
|
protobuf-java-util-3.25.5.jar
|
||||||
|
38cc5ce479603e36466feda2a9f1dfdb2210ef00
|
|
@ -0,0 +1,4 @@
|
||||||
|
JavaEWAH-1.2.3.jar
|
||||||
|
13a27c856e0c8808cee9a64032c58eee11c3adc9
|
||||||
|
module.xml
|
||||||
|
cbc42f2e507993437ba185fdd71dd24fc070c32d
|
|
@ -0,0 +1,4 @@
|
||||||
|
h2-2.2.224.jar
|
||||||
|
7bdade27d8cd197d9b5ce9dc251f41d2edc5f7ad
|
||||||
|
module.xml
|
||||||
|
8f9bda63c7655da79d2d54a359bcadc474b66143
|
|
@ -0,0 +1,4 @@
|
||||||
|
asyncutil-0.1.0.jar
|
||||||
|
440941c382166029a299602e6c9ff5abde1b5143
|
||||||
|
module.xml
|
||||||
|
4a7d1e02072bbab6c935aa93fc915c26b7c5feae
|
|
@ -0,0 +1,4 @@
|
||||||
|
azure-storage-8.6.6.jar
|
||||||
|
49d84b103a4700134ce56d73b4195f18fd226729
|
||||||
|
module.xml
|
||||||
|
0c37ed43810e653e80519241466019e2ee2d8f82
|
|
@ -0,0 +1,4 @@
|
||||||
|
module.xml
|
||||||
|
0d381cde567d8896a94fe44993a10758ed433b49
|
||||||
|
nimbus-jose-jwt-9.37.3.jar
|
||||||
|
700f71ffefd60c16bd8ce711a956967ea9071cec
|
|
@ -0,0 +1,4 @@
|
||||||
|
module.xml
|
||||||
|
29f238d58ebc8744f45165df41858bf9c0ca4782
|
||||||
|
protoparser-4.0.3.jar
|
||||||
|
e61ee0b108059d97f43143eb2ee7a1be8059a30e
|
|
@ -0,0 +1,2 @@
|
||||||
|
module.xml
|
||||||
|
863fd9eefeafd585ab00c7c1d91a8b16c82f7ab9
|
|
@ -0,0 +1,4 @@
|
||||||
|
FastInfoset-2.1.1.jar
|
||||||
|
650c84348bbcf4461bd24d38e67f7a7ce687de24
|
||||||
|
module.xml
|
||||||
|
a18a415193ecb4584702dba76cff75e83b457330
|
|
@ -0,0 +1,6 @@
|
||||||
|
module.xml
|
||||||
|
4036fdadd18b5ac952d374077e9e8c43ae7deba9
|
||||||
|
saaj-impl-3.0.0.jar
|
||||||
|
592e76b886471149217e4090b02e3d36fd702777
|
||||||
|
stax-ex-2.1.0.jar
|
||||||
|
33160568d70c01da407f8ba982bacf283d00ad4a
|
|
@ -0,0 +1,4 @@
|
||||||
|
module.xml
|
||||||
|
c62ca7298e8392d9d3e0405e6ee250e523cb3ac3
|
||||||
|
pem-keystore-2.4.0.jar
|
||||||
|
a4ba3c7b740b9dada642e1b219d537bafd8c237c
|
|
@ -0,0 +1,4 @@
|
||||||
|
java-getopt-1.0.13.jar
|
||||||
|
bb29ac2c2ab8b92945f01706de4b56c97989c6a9
|
||||||
|
module.xml
|
||||||
|
5b1ec5d7710dff2dbc3beceda959bcc47ddbec8e
|
|
@ -0,0 +1,2 @@
|
||||||
|
module.xml
|
||||||
|
7f680a09778318f400ff51232088d954c87c4c6f
|
|
@ -0,0 +1,4 @@
|
||||||
|
jakarta.json-1.1.6.jar
|
||||||
|
a39aba0ef0a70c3f54a44a2c539a4f11c9bb07e8
|
||||||
|
module.xml
|
||||||
|
2abfebbc96fe44e75ccc1d75cb3e3ecd7ba206a2
|
|
@ -0,0 +1,8 @@
|
||||||
|
agroal-api-2.0.jar
|
||||||
|
9fd418b07a6563b68034688ca7dce74f5b83d233
|
||||||
|
agroal-narayana-2.0.jar
|
||||||
|
38261488606baf55ea34b71ce14918ea7a5dac88
|
||||||
|
agroal-pool-2.0.jar
|
||||||
|
a299e789a67d04dca63afe03a1778db184c32962
|
||||||
|
module.xml
|
||||||
|
9b810fce6660bd1ab7c730f86721e23229dac58e
|
|
@ -0,0 +1,4 @@
|
||||||
|
grpc-api-1.58.0.jar
|
||||||
|
1f761949cdfd418a5f662e0d22d2c95f60099c0b
|
||||||
|
module.xml
|
||||||
|
39c980c6ee79ec175bea6c3786f38e55854f50fd
|
|
@ -0,0 +1,8 @@
|
||||||
|
micrometer-commons-1.12.4.jar
|
||||||
|
a57f10c78956b38087f97beae66cf14cb8b08d34
|
||||||
|
micrometer-core-1.12.4.jar
|
||||||
|
d5b91e2847de7c1213889c532789743eb2f96337
|
||||||
|
micrometer-registry-otlp-1.12.4.jar
|
||||||
|
9aa2c330c53bb34994474ea7e4af2ea4bde00071
|
||||||
|
module.xml
|
||||||
|
a70e6656b7cf14699801149b23974bfe91e16861
|
|
@ -0,0 +1,4 @@
|
||||||
|
module.xml
|
||||||
|
564bd5c25de23bf6aae2a283bba4d0ac1646fa00
|
||||||
|
netty-buffer-4.1.115.Final.jar
|
||||||
|
d5daf1030e5c36d198caf7562da2441a97ec0df6
|
|
@ -0,0 +1,4 @@
|
||||||
|
module.xml
|
||||||
|
8cc3fd3ecb95b3a5e2d667b2f868ca59a6b5a768
|
||||||
|
netty-codec-dns-4.1.115.Final.jar
|
||||||
|
d39b9866939cbbb8ae3a1af5c1df5ddf93656d47
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue
Block a user