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