jws/cmd/jws/main.go
Patryk Hegenberg 09b1054588 feat: initial project commit
commit to push first working snapshot to codeberg
2025-03-15 00:13:20 +01:00

113 lines
2.7 KiB
Go

// 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
}