113 lines
2.7 KiB
Go
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
|
|
}
|