feat: initial project commit
commit to push first working snapshot to codeberg
This commit is contained in:
commit
09b1054588
25 changed files with 1405 additions and 0 deletions
2
cmd/jws/FyneApp.toml
Normal file
2
cmd/jws/FyneApp.toml
Normal file
|
|
@ -0,0 +1,2 @@
|
|||
[Details]
|
||||
Build = 4
|
||||
BIN
cmd/jws/Icon.png
Normal file
BIN
cmd/jws/Icon.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 2.3 KiB |
113
cmd/jws/main.go
Normal file
113
cmd/jws/main.go
Normal file
|
|
@ -0,0 +1,113 @@
|
|||
// cmd/jws/main.go
|
||||
package main
|
||||
|
||||
import (
|
||||
"embed"
|
||||
"encoding/json"
|
||||
"fmt"
|
||||
"jws/internal/dependency"
|
||||
"jws/internal/gui"
|
||||
"jws/internal/project"
|
||||
"os"
|
||||
|
||||
"fyne.io/fyne/v2"
|
||||
"fyne.io/fyne/v2/app"
|
||||
"fyne.io/fyne/v2/dialog"
|
||||
"fyne.io/fyne/v2/theme"
|
||||
)
|
||||
|
||||
//go:embed all:projects
|
||||
var projectsFS embed.FS
|
||||
|
||||
var (
|
||||
dependencies []dependency.Dependency
|
||||
projects []project.Project
|
||||
mainWindow fyne.Window
|
||||
)
|
||||
|
||||
func main() {
|
||||
a := app.New()
|
||||
mainWindow = a.NewWindow("JakartaEE & Spring Boot Starter")
|
||||
mainWindow.Resize(fyne.NewSize(600, 600))
|
||||
mainWindow.SetFixedSize(true)
|
||||
|
||||
// Initialize dependencies
|
||||
dependencies = []dependency.Dependency{
|
||||
{Name: "Visual Studio Code", Installed: false, Icon: theme.DocumentIcon()},
|
||||
{Name: "Docker", Installed: false, Icon: theme.MediaPlayIcon()},
|
||||
}
|
||||
|
||||
// Standard projects
|
||||
standartProjects := []project.Project{
|
||||
{
|
||||
Name: "JakartaEE Todo-App mit Servlet",
|
||||
Description: "Eine Todo-Anwendung mit Jakarta Servlet und\nPostgreSQL-Datenbank.",
|
||||
FolderName: "jakarta-servlet-todo",
|
||||
},
|
||||
{
|
||||
Name: "JakartaEE Todo-App mit JSP",
|
||||
Description: "Eine Todo-Anwendung mit Jakarta Server Pages und PostgreSQL-Datenbank.",
|
||||
FolderName: "jakarta-jsp-todo",
|
||||
},
|
||||
{
|
||||
Name: "JakartaEE Todo-App als REST-API",
|
||||
Description: "Eine Todo-Anwendung als REST-API mit JakartaEE und PostgreSQL-Datenbank.",
|
||||
FolderName: "jakarta-rest-todo",
|
||||
},
|
||||
{
|
||||
Name: "Spring Boot Todo-App als Microservice",
|
||||
Description: "Eine Todo-Anwendung als Microservice mit Spring Boot und PostgreSQL-Datenbank.",
|
||||
FolderName: "spring-boot-todo",
|
||||
},
|
||||
}
|
||||
|
||||
// Load additional projects from projects.json
|
||||
pluginProjects, err := loadProjects("projects.json")
|
||||
if err != nil {
|
||||
dialog.ShowError(fmt.Errorf("error loading projects: %v", err), mainWindow)
|
||||
return
|
||||
}
|
||||
|
||||
projects = append(standartProjects, pluginProjects...)
|
||||
|
||||
// Initialize GUI package
|
||||
gui.Init(mainWindow, dependencies, projects, projectsFS)
|
||||
|
||||
// Check dependencies
|
||||
dependency.CheckDependencies(dependencies)
|
||||
allInstalled := true
|
||||
for _, dep := range dependencies {
|
||||
if !dep.Installed {
|
||||
allInstalled = false
|
||||
break
|
||||
}
|
||||
}
|
||||
|
||||
// Show appropriate screen
|
||||
if allInstalled {
|
||||
gui.ShowProjectScreen()
|
||||
} else {
|
||||
gui.ShowDependencyScreen()
|
||||
}
|
||||
|
||||
mainWindow.ShowAndRun()
|
||||
}
|
||||
|
||||
func loadProjects(filePath string) ([]project.Project, error) {
|
||||
file, err := os.Open(filePath)
|
||||
if err != nil {
|
||||
if os.IsNotExist(err) {
|
||||
return []project.Project{}, nil
|
||||
}
|
||||
return nil, fmt.Errorf("error opening JSON-file: %v", err)
|
||||
}
|
||||
defer file.Close()
|
||||
|
||||
var projects []project.Project
|
||||
decoder := json.NewDecoder(file)
|
||||
if err := decoder.Decode(&projects); err != nil {
|
||||
return nil, fmt.Errorf("error decoding JSON-file: %v", err)
|
||||
}
|
||||
|
||||
return projects, nil
|
||||
}
|
||||
0
cmd/jws/projects/jakarta-jsp-todo/pom.xml
Normal file
0
cmd/jws/projects/jakarta-jsp-todo/pom.xml
Normal file
0
cmd/jws/projects/jakarta-rest-todo/pom.xml
Normal file
0
cmd/jws/projects/jakarta-rest-todo/pom.xml
Normal file
|
|
@ -0,0 +1,18 @@
|
|||
FROM mcr.microsoft.com/devcontainers/java:1-21-bullseye
|
||||
|
||||
ARG INSTALL_MAVEN="false"
|
||||
ARG MAVEN_VERSION=""
|
||||
|
||||
ARG INSTALL_GRADLE="false"
|
||||
ARG GRADLE_VERSION=""
|
||||
|
||||
RUN apt-get update && apt-get upgrade -y && \
|
||||
apt-get install -y \
|
||||
git
|
||||
|
||||
RUN if [ "${INSTALL_MAVEN}" = "true" ]; then su vscode -c "umask 0002 && . /usr/local/sdkman/bin/sdkman-init.sh && sdk install maven \"${MAVEN_VERSION}\""; fi \
|
||||
&& if [ "${INSTALL_GRADLE}" = "true" ]; then su vscode -c "umask 0002 && . /usr/local/sdkman/bin/sdkman-init.sh && sdk install gradle \"${GRADLE_VERSION}\""; fi
|
||||
|
||||
RUN mkdir -p /workspaces/${localWorkspaceFolderBasename} && chown -R vscode:vscode /workspaces/${localWorkspaceFolderBasename}
|
||||
|
||||
ENTRYPOINT ["/bin/bash"]
|
||||
|
|
@ -0,0 +1,9 @@
|
|||
{
|
||||
"name": "Jakarta EE Todo App & PostgreSQL",
|
||||
"dockerComposeFile": "docker-compose.yml",
|
||||
"service": "app",
|
||||
"workspaceFolder": "/workspaces",
|
||||
"extensions": ["vscjava.vscode-java-pack", "redhat.vscode-xml"],
|
||||
"forwardPorts": [9080],
|
||||
"remoteUser": "vscode"
|
||||
}
|
||||
|
|
@ -0,0 +1,32 @@
|
|||
version: "3.8"
|
||||
|
||||
volumes:
|
||||
postgres-data:
|
||||
|
||||
services:
|
||||
app:
|
||||
container_name: javadev
|
||||
build:
|
||||
context: .
|
||||
dockerfile: Dockerfile
|
||||
environment:
|
||||
POSTGRES_PASSWORD: postgres
|
||||
POSTGRES_USER: postgres
|
||||
POSTGRES_DB: postgres
|
||||
POSTGRES_HOSTNAME: postgresdb
|
||||
volumes:
|
||||
- ..:/workspace
|
||||
command: sleep infinity
|
||||
network_mode: service:db
|
||||
stdin_open: true
|
||||
|
||||
db:
|
||||
container_name: postgresdb
|
||||
image: postgres:latest
|
||||
restart: unless-stopped
|
||||
volumes:
|
||||
- postgres-data:/var/lib/postgresql/data
|
||||
environment:
|
||||
POSTGRES_PASSWORD: postgres
|
||||
POSTGRES_USER: postgres
|
||||
POSTGRES_DB: postgres
|
||||
49
cmd/jws/projects/jakarta-servlet-todo/pom.xml
Normal file
49
cmd/jws/projects/jakarta-servlet-todo/pom.xml
Normal file
|
|
@ -0,0 +1,49 @@
|
|||
<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>com.example</groupId>
|
||||
<artifactId>jakarta-servlet-todo</artifactId>
|
||||
<version>1.0-SNAPSHOT</version>
|
||||
<packaging>war</packaging>
|
||||
|
||||
<properties>
|
||||
<maven.compiler.source>11</maven.compiler.source>
|
||||
<maven.compiler.target>11</maven.compiler.target>
|
||||
<jakartaee.version>10.0.0</jakartaee.version>
|
||||
<hibernate.version>6.0.0.Final</hibernate.version>
|
||||
<postgresql.version>42.3.1</postgresql.version>
|
||||
</properties>
|
||||
|
||||
<dependencies>
|
||||
<dependency>
|
||||
<groupId>jakarta.platform</groupId>
|
||||
<artifactId>jakarta.jakartaee-api</artifactId>
|
||||
<version>${jakartaee.version}</version>
|
||||
<scope>provided</scope>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>org.hibernate.orm</groupId>
|
||||
<artifactId>hibernate-core</artifactId>
|
||||
<version>${hibernate.version}</version>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>org.postgresql</groupId>
|
||||
<artifactId>postgresql</artifactId>
|
||||
<version>${postgresql.version}</version>
|
||||
</dependency>
|
||||
</dependencies>
|
||||
|
||||
<build>
|
||||
<finalName>${project.artifactId}</finalName>
|
||||
<plugins>
|
||||
<plugin>
|
||||
<groupId>org.apache.maven.plugins</groupId>
|
||||
<artifactId>maven-war-plugin</artifactId>
|
||||
<version>3.3.2</version>
|
||||
</plugin>
|
||||
</plugins>
|
||||
</build>
|
||||
</project>
|
||||
|
||||
|
|
@ -0,0 +1,36 @@
|
|||
package com.example.dao;
|
||||
|
||||
import com.example.model.Todo;
|
||||
import jakarta.persistence.EntityManager;
|
||||
import jakarta.persistence.PersistenceContext;
|
||||
import jakarta.transaction.Transactional;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
public class TodoDAO {
|
||||
|
||||
@PersistenceContext
|
||||
private EntityManager em;
|
||||
|
||||
@Transactional
|
||||
public void create(Todo todo) {
|
||||
em.persist(todo);
|
||||
}
|
||||
|
||||
public List<Todo> findAll() {
|
||||
return em.createQuery("SELECT t FROM Todo t", Todo.class).getResultList();
|
||||
}
|
||||
|
||||
@Transactional
|
||||
public void update(Todo todo) {
|
||||
em.merge(todo);
|
||||
}
|
||||
|
||||
@Transactional
|
||||
public void delete(Long id) {
|
||||
Todo todo = em.find(Todo.class, id);
|
||||
if (todo != null) {
|
||||
em.remove(todo);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -0,0 +1,43 @@
|
|||
package com.example.model;
|
||||
|
||||
import jakarta.persistence.*;
|
||||
|
||||
@Entity
|
||||
@Table(name = "todos")
|
||||
public class Todo {
|
||||
|
||||
@Id
|
||||
@GeneratedValue(strategy = GenerationType.IDENTITY)
|
||||
private Long id;
|
||||
|
||||
@Column(nullable = false)
|
||||
private String title;
|
||||
|
||||
@Column(nullable = false)
|
||||
private boolean completed;
|
||||
|
||||
// Getter und Setter
|
||||
public Long getId() {
|
||||
return id;
|
||||
}
|
||||
|
||||
public void setId(Long id) {
|
||||
this.id = id;
|
||||
}
|
||||
|
||||
public String getTitle() {
|
||||
return title;
|
||||
}
|
||||
|
||||
public void setTitle(String title) {
|
||||
this.title = title;
|
||||
}
|
||||
|
||||
public boolean isCompleted() {
|
||||
return completed;
|
||||
}
|
||||
|
||||
public void setCompleted(boolean completed) {
|
||||
this.completed = completed;
|
||||
}
|
||||
}
|
||||
|
|
@ -0,0 +1,40 @@
|
|||
package com.example.servlet;
|
||||
|
||||
import com.example.dao.TodoDAO;
|
||||
import com.example.model.Todo;
|
||||
import jakarta.inject.Inject;
|
||||
import jakarta.servlet.ServletException;
|
||||
import jakarta.servlet.annotation.WebServlet;
|
||||
import jakarta.servlet.http.HttpServlet;
|
||||
import jakarta.servlet.http.HttpServletRequest;
|
||||
import jakarta.servlet.http.HttpServletResponse;
|
||||
|
||||
import java.io.IOException;
|
||||
import java.util.List;
|
||||
|
||||
@WebServlet("/todos")
|
||||
public class TodoServlet extends HttpServlet {
|
||||
|
||||
@Inject
|
||||
private TodoDAO todoDAO;
|
||||
|
||||
@Override
|
||||
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
|
||||
List<Todo> todos = todoDAO.findAll();
|
||||
req.setAttribute("todos", todos);
|
||||
req.getRequestDispatcher("/index.jsp").forward(req, resp);
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
|
||||
String title = req.getParameter("title");
|
||||
boolean completed = "on".equals(req.getParameter("completed"));
|
||||
|
||||
Todo todo = new Todo();
|
||||
todo.setTitle(title);
|
||||
todo.setCompleted(completed);
|
||||
|
||||
todoDAO.create(todo);
|
||||
resp.sendRedirect(req.getContextPath() + "/todos");
|
||||
}
|
||||
}
|
||||
|
|
@ -0,0 +1,19 @@
|
|||
<persistence xmlns="https://jakarta.ee/xml/ns/persistence"
|
||||
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">
|
||||
|
||||
<persistence-unit name="todoPU">
|
||||
<class>com.example.model.Todo</class>
|
||||
<properties>
|
||||
<property name="jakarta.persistence.jdbc.driver" value="org.postgresql.Driver"/>
|
||||
<property name="jakarta.persistence.jdbc.url" value="jdbc:postgresql://db:5432/tododb"/>
|
||||
<property name="jakarta.persistence.jdbc.user" value="todouser"/>
|
||||
<property name="jakarta.persistence.jdbc.password" value="todopass"/>
|
||||
<property name="hibernate.dialect" value="org.hibernate.dialect.PostgreSQLDialect"/>
|
||||
<property name="hibernate.hbm2ddl.auto" value="update"/>
|
||||
</properties>
|
||||
</persistence-unit>
|
||||
|
||||
</persistence>
|
||||
|
||||
|
|
@ -0,0 +1,9 @@
|
|||
<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
|
||||
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-app_4_0.xsd"
|
||||
version="4.0">
|
||||
|
||||
<display-name>JakartaEE Todo App</display-name>
|
||||
|
||||
</web-app>
|
||||
|
||||
0
cmd/jws/projects/spring-boot-todo/pom.xml
Normal file
0
cmd/jws/projects/spring-boot-todo/pom.xml
Normal file
Loading…
Add table
Add a link
Reference in a new issue