changeset 3833:70a881045efd sld-colors

Trigger reconfiguration of GeoServer if the system settings were written.
author Sascha L. Teichmann <sascha.teichmann@intevation.de>
date Thu, 04 Jul 2019 17:44:39 +0200
parents cbced21c6d94
children d68c6be758b6
files pkg/controllers/system.go
diffstat 1 files changed, 40 insertions(+), 0 deletions(-) [+]
line wrap: on
line diff
--- 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 {