Mercurial > gemma
changeset 444:c315885825e5
Publish WFS layers on GeoServer from database configuration.
author | Sascha L. Teichmann <sascha.teichmann@intevation.de> |
---|---|
date | Tue, 21 Aug 2018 17:43:37 +0200 |
parents | 5e8ac1c67fe6 |
children | 37742dd72fdb |
files | cmd/gemma/geoserver.go pkg/models/pubservices.go |
diffstat | 2 files changed, 42 insertions(+), 6 deletions(-) [+] |
line wrap: on
line diff
--- a/cmd/gemma/geoserver.go Tue Aug 21 17:06:29 2018 +0200 +++ b/cmd/gemma/geoserver.go Tue Aug 21 17:43:37 2018 +0200 @@ -10,6 +10,7 @@ "gemma.intevation.de/gemma/pkg/config" "gemma.intevation.de/gemma/pkg/misc" + "gemma.intevation.de/gemma/pkg/models" ) const ( @@ -233,7 +234,10 @@ hasFeature = func(string) bool { return false } } - for _, table := range tables { + npe := models.PublishedServices.Filter(models.PublishedWFS) + for i := range npe { + table := npe[i].Name + if hasFeature(table) { log.Printf("info: featuretype %s already exists.\n", table) continue
--- a/pkg/models/pubservices.go Tue Aug 21 17:06:29 2018 +0200 +++ b/pkg/models/pubservices.go Tue Aug 21 17:43:37 2018 +0200 @@ -3,15 +3,21 @@ import ( "database/sql" "log" + "sort" "sync" "gemma.intevation.de/gemma/pkg/auth" ) type PubEntry struct { - style sql.NullString - asWMS bool - asWFS bool + Style sql.NullString + WMS bool + WFS bool +} + +type NamedPubEntry struct { + PubEntry + Name string } type PubServices struct { @@ -53,8 +59,8 @@ var entry PubEntry var key string if err := rows.Scan( - &key, &entry.style, - &entry.asWFS, &entry.asWFS, + &key, &entry.Style, + &entry.WFS, &entry.WFS, ); err != nil { return err } @@ -70,3 +76,29 @@ ps.entries = nil ps.mu.Unlock() } + +func PublishedWMS(_ string, entry PubEntry) bool { return entry.WMS } +func PublishedWFS(_ string, entry PubEntry) bool { return entry.WFS } + +func (ps *PubServices) Filter(accept func(string, PubEntry) bool) []NamedPubEntry { + ps.mu.Lock() + defer ps.mu.Unlock() + if ps.entries == nil { + ps.entries = make(map[string]PubEntry) + if err := ps.load(); err != nil { + log.Printf("error: %v\n", err) + return nil + } + } + var npe []NamedPubEntry + for k, v := range ps.entries { + if accept(k, v) { + npe = append(npe, NamedPubEntry{PubEntry: v, Name: k}) + } + } + + // To make output deterministic. + sort.Slice(npe, func(i, j int) bool { return npe[i].Name < npe[j].Name }) + + return npe +}