# HG changeset patch # User Sascha L. Teichmann # Date 1562255079 -7200 # Node ID 70a881045efdb6da1e1226e11033812650341518 # Parent cbced21c6d9450912e3cfa4eec4c3a8ddc70425e Trigger reconfiguration of GeoServer if the system settings were written. diff -r cbced21c6d94 -r 70a881045efd pkg/controllers/system.go --- a/pkg/controllers/system.go Thu Jul 04 17:18:05 2019 +0200 +++ b/pkg/controllers/system.go Thu Jul 04 17:44:39 2019 +0200 @@ -20,10 +20,12 @@ "io/ioutil" "net/http" "strings" + "sync" "github.com/gorilla/mux" "gemma.intevation.de/gemma/pkg/config" + "gemma.intevation.de/gemma/pkg/geoserver" "gemma.intevation.de/gemma/pkg/models" ) @@ -139,6 +141,32 @@ return } +var ( + reconfigureFuncsMu sync.Mutex + reconfigureFuncs = map[string]func(){} +) + +func registerReconfigureFunc(key string, fn func()) { + reconfigureFuncsMu.Lock() + defer reconfigureFuncsMu.Unlock() + reconfigureFuncs[key] = fn +} + +func reconfigureFunc(key string) func() { + reconfigureFuncsMu.Lock() + defer reconfigureFuncsMu.Unlock() + return reconfigureFuncs[key] +} + +func init() { + registerReconfigureFunc("morphology_classbreaks", func() { + geoserver.ReconfigureStyle("sounding_results_contour_lines_geoserver") + }) + registerReconfigureFunc("morphology_classbreaks_compare", func() { + geoserver.ReconfigureStyle("sounding_differences") + }) +} + func setSystemSettings( input interface{}, req *http.Request, @@ -160,7 +188,15 @@ } defer setStmt.Close() + reconfigure := map[string]func(){} + for key, value := range *settings { + + // XXX: Only trigger this if the value really has changed. + if fn := reconfigureFunc(key); fn != nil { + reconfigure[key] = fn + } + if _, err = setStmt.ExecContext(ctx, key, value); err != nil { return } @@ -170,6 +206,10 @@ return } + for _, fn := range reconfigure { + fn() + } + jr = JSONResult{ Code: http.StatusCreated, Result: struct {