annotate pkg/models/intservices.go @ 1234:1a5564655f2a

refac: Sidebar reorganized In order to make context switches between administrative tasks which are map related and those which are system related, we now have a category "administration" and "systemadministration". The Riverbedmorphology does nothing than display the map, so it is renamed to that (map). In case the context of "systemadministration" is chosen, the "map" brings you just back to the map.
author Thomas Junk <thomas.junk@intevation.de>
date Tue, 20 Nov 2018 09:54:53 +0100
parents a244b18cb916
children 9f7dc950ffd2
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
1017
a244b18cb916 Added GNU Affero General Public License.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 951
diff changeset
1 // This is Free Software under GNU Affero General Public License v >= 3.0
a244b18cb916 Added GNU Affero General Public License.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 951
diff changeset
2 // without warranty, see README.md and license for details.
a244b18cb916 Added GNU Affero General Public License.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 951
diff changeset
3 //
a244b18cb916 Added GNU Affero General Public License.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 951
diff changeset
4 // SPDX-License-Identifier: AGPL-3.0-or-later
a244b18cb916 Added GNU Affero General Public License.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 951
diff changeset
5 // License-Filename: LICENSES/AGPL-3.0.txt
a244b18cb916 Added GNU Affero General Public License.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 951
diff changeset
6 //
a244b18cb916 Added GNU Affero General Public License.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 951
diff changeset
7 // Copyright (C) 2018 by via donau
a244b18cb916 Added GNU Affero General Public License.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 951
diff changeset
8 // – Österreichische Wasserstraßen-Gesellschaft mbH
a244b18cb916 Added GNU Affero General Public License.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 951
diff changeset
9 // Software engineering by Intevation GmbH
a244b18cb916 Added GNU Affero General Public License.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 951
diff changeset
10 //
a244b18cb916 Added GNU Affero General Public License.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 951
diff changeset
11 // Author(s):
a244b18cb916 Added GNU Affero General Public License.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 951
diff changeset
12 // * Sascha L. Teichmann <sascha.teichmann@intevation.de>
a244b18cb916 Added GNU Affero General Public License.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 951
diff changeset
13 // * Tom Gottfried <tom.gottfried@intevation.de>
a244b18cb916 Added GNU Affero General Public License.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 951
diff changeset
14
442
fc37e7072022 Moved some models used in controllers to to model package because they may be needed elsewhere (e.g. GeoServer config).
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 441
diff changeset
15 package models
441
76a76691a298 Load the configuration of the published services from database.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
16
76a76691a298 Load the configuration of the published services from database.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
17 import (
501
c10c76c92797 Use metamorphic database connections for auth.RunAs().
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 474
diff changeset
18 "context"
441
76a76691a298 Load the configuration of the published services from database.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
19 "database/sql"
76a76691a298 Load the configuration of the published services from database.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
20 "log"
873
ad9272460ef3 Do the XSLT to adjust the layer name when updating the style column in the database.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 871
diff changeset
21 "net/http"
441
76a76691a298 Load the configuration of the published services from database.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
22 "sync"
76a76691a298 Load the configuration of the published services from database.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
23
76a76691a298 Load the configuration of the published services from database.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
24 "gemma.intevation.de/gemma/pkg/auth"
456
a8e217119085 Fixed internal proxy resolution.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 446
diff changeset
25 "gemma.intevation.de/gemma/pkg/config"
441
76a76691a298 Load the configuration of the published services from database.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
26 )
76a76691a298 Load the configuration of the published services from database.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
27
474
11d80120ed3d Renamed published services to internal services to be more symmetrical to external services.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 473
diff changeset
28 type IntEntry struct {
915
2ebf677fc2e1 Load style data only on demand to not waste menory.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 913
diff changeset
29 Name string `json:"name"`
2ebf677fc2e1 Load style data only on demand to not waste menory.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 913
diff changeset
30 Style bool `json:"style"`
2ebf677fc2e1 Load style data only on demand to not waste menory.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 913
diff changeset
31 WMS bool `json:"wms"`
2ebf677fc2e1 Load style data only on demand to not waste menory.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 913
diff changeset
32 WFS bool `json:"wfs"`
444
c315885825e5 Publish WFS layers on GeoServer from database configuration.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 442
diff changeset
33 }
c315885825e5 Publish WFS layers on GeoServer from database configuration.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 442
diff changeset
34
474
11d80120ed3d Renamed published services to internal services to be more symmetrical to external services.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 473
diff changeset
35 type IntServices struct {
11d80120ed3d Renamed published services to internal services to be more symmetrical to external services.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 473
diff changeset
36 entries []IntEntry
441
76a76691a298 Load the configuration of the published services from database.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
37 mu sync.Mutex
76a76691a298 Load the configuration of the published services from database.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
38 }
76a76691a298 Load the configuration of the published services from database.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
39
871
f0b6852c14d1 More on uploading styles to gemma.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 634
diff changeset
40 const (
915
2ebf677fc2e1 Load style data only on demand to not waste menory.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 913
diff changeset
41 selectServicesSQL = `
2ebf677fc2e1 Load style data only on demand to not waste menory.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 913
diff changeset
42 SELECT relname, style IS NOT NULL, as_wms, as_wfs
2ebf677fc2e1 Load style data only on demand to not waste menory.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 913
diff changeset
43 FROM sys_admin.published_services
2ebf677fc2e1 Load style data only on demand to not waste menory.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 913
diff changeset
44 JOIN pg_class ON name = oid ORDER by relname`
2ebf677fc2e1 Load style data only on demand to not waste menory.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 913
diff changeset
45
2ebf677fc2e1 Load style data only on demand to not waste menory.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 913
diff changeset
46 selectStyleSQL = `
951
6eb45b3c73f6 Fixed style loading for GeoServer.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 915
diff changeset
47 SELECT style
915
2ebf677fc2e1 Load style data only on demand to not waste menory.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 913
diff changeset
48 FROM sys_admin.published_services
2ebf677fc2e1 Load style data only on demand to not waste menory.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 913
diff changeset
49 JOIN pg_class ON name = oid
2ebf677fc2e1 Load style data only on demand to not waste menory.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 913
diff changeset
50 WHERE relname = $1`
441
76a76691a298 Load the configuration of the published services from database.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
51
871
f0b6852c14d1 More on uploading styles to gemma.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 634
diff changeset
52 updateStyleSQL = `
f0b6852c14d1 More on uploading styles to gemma.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 634
diff changeset
53 UPDATE sys_admin.published_services
877
254cd247826d The XSLT stuff is not need (Puh!).
Sascha L. Teichmann <teichmann@intevation.de>
parents: 876
diff changeset
54 SET style = $1::bytea
254cd247826d The XSLT stuff is not need (Puh!).
Sascha L. Teichmann <teichmann@intevation.de>
parents: 876
diff changeset
55 WHERE name IN (SELECT oid FROM pg_class WHERE relname = $2)`
871
f0b6852c14d1 More on uploading styles to gemma.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 634
diff changeset
56 )
f0b6852c14d1 More on uploading styles to gemma.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 634
diff changeset
57
474
11d80120ed3d Renamed published services to internal services to be more symmetrical to external services.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 473
diff changeset
58 var InternalServices = &IntServices{}
441
76a76691a298 Load the configuration of the published services from database.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
59
915
2ebf677fc2e1 Load style data only on demand to not waste menory.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 913
diff changeset
60 func (e *IntEntry) LoadStyle() (string, error) {
2ebf677fc2e1 Load style data only on demand to not waste menory.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 913
diff changeset
61 var style string
2ebf677fc2e1 Load style data only on demand to not waste menory.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 913
diff changeset
62 err := auth.RunAs("sys_admin", context.Background(),
2ebf677fc2e1 Load style data only on demand to not waste menory.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 913
diff changeset
63 func(conn *sql.Conn) error {
2ebf677fc2e1 Load style data only on demand to not waste menory.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 913
diff changeset
64 return conn.QueryRowContext(
2ebf677fc2e1 Load style data only on demand to not waste menory.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 913
diff changeset
65 context.Background(),
2ebf677fc2e1 Load style data only on demand to not waste menory.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 913
diff changeset
66 selectStyleSQL,
2ebf677fc2e1 Load style data only on demand to not waste menory.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 913
diff changeset
67 e.Name).Scan(&style)
2ebf677fc2e1 Load style data only on demand to not waste menory.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 913
diff changeset
68 })
2ebf677fc2e1 Load style data only on demand to not waste menory.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 913
diff changeset
69 return style, err
2ebf677fc2e1 Load style data only on demand to not waste menory.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 913
diff changeset
70 }
2ebf677fc2e1 Load style data only on demand to not waste menory.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 913
diff changeset
71
873
ad9272460ef3 Do the XSLT to adjust the layer name when updating the style column in the database.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 871
diff changeset
72 func UpdateInternalStyle(req *http.Request, name, style string) error {
ad9272460ef3 Do the XSLT to adjust the layer name when updating the style column in the database.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 871
diff changeset
73 return auth.RunAsSessionUser(req, func(conn *sql.Conn) error {
ad9272460ef3 Do the XSLT to adjust the layer name when updating the style column in the database.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 871
diff changeset
74 _, err := conn.ExecContext(
ad9272460ef3 Do the XSLT to adjust the layer name when updating the style column in the database.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 871
diff changeset
75 req.Context(), updateStyleSQL,
877
254cd247826d The XSLT stuff is not need (Puh!).
Sascha L. Teichmann <teichmann@intevation.de>
parents: 876
diff changeset
76 style, name)
873
ad9272460ef3 Do the XSLT to adjust the layer name when updating the style column in the database.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 871
diff changeset
77 if err == nil {
ad9272460ef3 Do the XSLT to adjust the layer name when updating the style column in the database.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 871
diff changeset
78 InternalServices.Invalidate()
ad9272460ef3 Do the XSLT to adjust the layer name when updating the style column in the database.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 871
diff changeset
79 }
ad9272460ef3 Do the XSLT to adjust the layer name when updating the style column in the database.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 871
diff changeset
80 return err
ad9272460ef3 Do the XSLT to adjust the layer name when updating the style column in the database.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 871
diff changeset
81 })
871
f0b6852c14d1 More on uploading styles to gemma.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 634
diff changeset
82 }
f0b6852c14d1 More on uploading styles to gemma.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 634
diff changeset
83
474
11d80120ed3d Renamed published services to internal services to be more symmetrical to external services.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 473
diff changeset
84 func (ps *IntServices) Find(name string) (string, bool) {
469
788c87b99bae 465:a8e217119085 removed the mutex and the lazy loading from the internal publishing.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 456
diff changeset
85 ps.mu.Lock()
788c87b99bae 465:a8e217119085 removed the mutex and the lazy loading from the internal publishing.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 456
diff changeset
86 defer ps.mu.Unlock()
788c87b99bae 465:a8e217119085 removed the mutex and the lazy loading from the internal publishing.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 456
diff changeset
87
788c87b99bae 465:a8e217119085 removed the mutex and the lazy loading from the internal publishing.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 456
diff changeset
88 if ps.entries == nil {
788c87b99bae 465:a8e217119085 removed the mutex and the lazy loading from the internal publishing.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 456
diff changeset
89 if err := ps.load(); err != nil {
788c87b99bae 465:a8e217119085 removed the mutex and the lazy loading from the internal publishing.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 456
diff changeset
90 log.Printf("error: %v\n", err)
788c87b99bae 465:a8e217119085 removed the mutex and the lazy loading from the internal publishing.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 456
diff changeset
91 return "", false
788c87b99bae 465:a8e217119085 removed the mutex and the lazy loading from the internal publishing.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 456
diff changeset
92 }
788c87b99bae 465:a8e217119085 removed the mutex and the lazy loading from the internal publishing.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 456
diff changeset
93 }
788c87b99bae 465:a8e217119085 removed the mutex and the lazy loading from the internal publishing.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 456
diff changeset
94
456
a8e217119085 Fixed internal proxy resolution.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 446
diff changeset
95 if ps.has(name) {
a8e217119085 Fixed internal proxy resolution.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 446
diff changeset
96 return config.GeoServerURL() + "/" + name, true
a8e217119085 Fixed internal proxy resolution.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 446
diff changeset
97 }
a8e217119085 Fixed internal proxy resolution.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 446
diff changeset
98 return "", false
a8e217119085 Fixed internal proxy resolution.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 446
diff changeset
99 }
441
76a76691a298 Load the configuration of the published services from database.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
100
474
11d80120ed3d Renamed published services to internal services to be more symmetrical to external services.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 473
diff changeset
101 func (ps *IntServices) has(service string) bool {
11d80120ed3d Renamed published services to internal services to be more symmetrical to external services.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 473
diff changeset
102 var check func(*IntEntry) bool
456
a8e217119085 Fixed internal proxy resolution.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 446
diff changeset
103 switch service {
a8e217119085 Fixed internal proxy resolution.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 446
diff changeset
104 case "wms":
474
11d80120ed3d Renamed published services to internal services to be more symmetrical to external services.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 473
diff changeset
105 check = func(e *IntEntry) bool { return e.WMS }
456
a8e217119085 Fixed internal proxy resolution.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 446
diff changeset
106 case "wfs":
474
11d80120ed3d Renamed published services to internal services to be more symmetrical to external services.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 473
diff changeset
107 check = func(e *IntEntry) bool { return e.WFS }
456
a8e217119085 Fixed internal proxy resolution.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 446
diff changeset
108 default:
a8e217119085 Fixed internal proxy resolution.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 446
diff changeset
109 return false
a8e217119085 Fixed internal proxy resolution.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 446
diff changeset
110 }
a8e217119085 Fixed internal proxy resolution.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 446
diff changeset
111 for i := range ps.entries {
a8e217119085 Fixed internal proxy resolution.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 446
diff changeset
112 if check(&ps.entries[i]) {
a8e217119085 Fixed internal proxy resolution.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 446
diff changeset
113 return true
441
76a76691a298 Load the configuration of the published services from database.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
114 }
76a76691a298 Load the configuration of the published services from database.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
115 }
456
a8e217119085 Fixed internal proxy resolution.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 446
diff changeset
116 return false
441
76a76691a298 Load the configuration of the published services from database.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
117 }
76a76691a298 Load the configuration of the published services from database.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
118
474
11d80120ed3d Renamed published services to internal services to be more symmetrical to external services.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 473
diff changeset
119 func (ps *IntServices) load() error {
446
659c04feb2dc Made use of sorted slice in external proxied services symmetric to published services.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 445
diff changeset
120 // make empty slice to prevent retry if slice is empty.
474
11d80120ed3d Renamed published services to internal services to be more symmetrical to external services.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 473
diff changeset
121 ps.entries = []IntEntry{}
501
c10c76c92797 Use metamorphic database connections for auth.RunAs().
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 474
diff changeset
122 return auth.RunAs("sys_admin", context.Background(),
c10c76c92797 Use metamorphic database connections for auth.RunAs().
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 474
diff changeset
123 func(conn *sql.Conn) error {
c10c76c92797 Use metamorphic database connections for auth.RunAs().
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 474
diff changeset
124 rows, err := conn.QueryContext(
915
2ebf677fc2e1 Load style data only on demand to not waste menory.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 913
diff changeset
125 context.Background(), selectServicesSQL)
501
c10c76c92797 Use metamorphic database connections for auth.RunAs().
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 474
diff changeset
126 if err != nil {
441
76a76691a298 Load the configuration of the published services from database.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
127 return err
76a76691a298 Load the configuration of the published services from database.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
128 }
501
c10c76c92797 Use metamorphic database connections for auth.RunAs().
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 474
diff changeset
129 defer rows.Close()
c10c76c92797 Use metamorphic database connections for auth.RunAs().
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 474
diff changeset
130 for rows.Next() {
c10c76c92797 Use metamorphic database connections for auth.RunAs().
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 474
diff changeset
131 var entry IntEntry
c10c76c92797 Use metamorphic database connections for auth.RunAs().
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 474
diff changeset
132 if err := rows.Scan(
c10c76c92797 Use metamorphic database connections for auth.RunAs().
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 474
diff changeset
133 &entry.Name, &entry.Style,
599
ac325d191009 Ficxed typo when scanning WMS.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 598
diff changeset
134 &entry.WMS, &entry.WFS,
501
c10c76c92797 Use metamorphic database connections for auth.RunAs().
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 474
diff changeset
135 ); err != nil {
c10c76c92797 Use metamorphic database connections for auth.RunAs().
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 474
diff changeset
136 return err
c10c76c92797 Use metamorphic database connections for auth.RunAs().
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 474
diff changeset
137 }
c10c76c92797 Use metamorphic database connections for auth.RunAs().
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 474
diff changeset
138 ps.entries = append(ps.entries, entry)
c10c76c92797 Use metamorphic database connections for auth.RunAs().
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 474
diff changeset
139 }
c10c76c92797 Use metamorphic database connections for auth.RunAs().
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 474
diff changeset
140 return rows.Err()
c10c76c92797 Use metamorphic database connections for auth.RunAs().
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 474
diff changeset
141 })
441
76a76691a298 Load the configuration of the published services from database.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
142 }
442
fc37e7072022 Moved some models used in controllers to to model package because they may be needed elsewhere (e.g. GeoServer config).
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 441
diff changeset
143
474
11d80120ed3d Renamed published services to internal services to be more symmetrical to external services.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 473
diff changeset
144 func (ps *IntServices) Invalidate() {
442
fc37e7072022 Moved some models used in controllers to to model package because they may be needed elsewhere (e.g. GeoServer config).
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 441
diff changeset
145 ps.mu.Lock()
fc37e7072022 Moved some models used in controllers to to model package because they may be needed elsewhere (e.g. GeoServer config).
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 441
diff changeset
146 ps.entries = nil
fc37e7072022 Moved some models used in controllers to to model package because they may be needed elsewhere (e.g. GeoServer config).
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 441
diff changeset
147 ps.mu.Unlock()
fc37e7072022 Moved some models used in controllers to to model package because they may be needed elsewhere (e.g. GeoServer config).
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 441
diff changeset
148 }
444
c315885825e5 Publish WFS layers on GeoServer from database configuration.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 442
diff changeset
149
915
2ebf677fc2e1 Load style data only on demand to not waste menory.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 913
diff changeset
150 func InternalAll(IntEntry) bool { return true }
2ebf677fc2e1 Load style data only on demand to not waste menory.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 913
diff changeset
151 func IntWMS(entry IntEntry) bool { return entry.WMS }
2ebf677fc2e1 Load style data only on demand to not waste menory.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 913
diff changeset
152 func IntWFS(entry IntEntry) bool { return entry.WFS }
2ebf677fc2e1 Load style data only on demand to not waste menory.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 913
diff changeset
153 func IntWithStyle(entry IntEntry) bool { return entry.Style }
444
c315885825e5 Publish WFS layers on GeoServer from database configuration.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 442
diff changeset
154
871
f0b6852c14d1 More on uploading styles to gemma.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 634
diff changeset
155 func IntByName(name string) func(IntEntry) bool {
f0b6852c14d1 More on uploading styles to gemma.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 634
diff changeset
156 return func(entry IntEntry) bool { return entry.Name == name }
f0b6852c14d1 More on uploading styles to gemma.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 634
diff changeset
157 }
f0b6852c14d1 More on uploading styles to gemma.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 634
diff changeset
158
913
876d1f5433be Started with direct applying style after modification via controller. WIP.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 877
diff changeset
159 func IntAnd(accept ...func(IntEntry) bool) func(IntEntry) bool {
876d1f5433be Started with direct applying style after modification via controller. WIP.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 877
diff changeset
160 return func(entry IntEntry) bool {
876d1f5433be Started with direct applying style after modification via controller. WIP.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 877
diff changeset
161 for _, a := range accept {
876d1f5433be Started with direct applying style after modification via controller. WIP.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 877
diff changeset
162 if !a(entry) {
876d1f5433be Started with direct applying style after modification via controller. WIP.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 877
diff changeset
163 return false
876d1f5433be Started with direct applying style after modification via controller. WIP.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 877
diff changeset
164 }
876d1f5433be Started with direct applying style after modification via controller. WIP.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 877
diff changeset
165 }
876d1f5433be Started with direct applying style after modification via controller. WIP.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 877
diff changeset
166 return true
876d1f5433be Started with direct applying style after modification via controller. WIP.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 877
diff changeset
167 }
871
f0b6852c14d1 More on uploading styles to gemma.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 634
diff changeset
168 }
f0b6852c14d1 More on uploading styles to gemma.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 634
diff changeset
169
474
11d80120ed3d Renamed published services to internal services to be more symmetrical to external services.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 473
diff changeset
170 func (ps *IntServices) Filter(accept func(IntEntry) bool) []IntEntry {
444
c315885825e5 Publish WFS layers on GeoServer from database configuration.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 442
diff changeset
171 ps.mu.Lock()
c315885825e5 Publish WFS layers on GeoServer from database configuration.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 442
diff changeset
172 defer ps.mu.Unlock()
c315885825e5 Publish WFS layers on GeoServer from database configuration.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 442
diff changeset
173 if ps.entries == nil {
c315885825e5 Publish WFS layers on GeoServer from database configuration.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 442
diff changeset
174 if err := ps.load(); err != nil {
c315885825e5 Publish WFS layers on GeoServer from database configuration.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 442
diff changeset
175 log.Printf("error: %v\n", err)
c315885825e5 Publish WFS layers on GeoServer from database configuration.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 442
diff changeset
176 return nil
c315885825e5 Publish WFS layers on GeoServer from database configuration.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 442
diff changeset
177 }
c315885825e5 Publish WFS layers on GeoServer from database configuration.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 442
diff changeset
178 }
474
11d80120ed3d Renamed published services to internal services to be more symmetrical to external services.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 473
diff changeset
179 pe := make([]IntEntry, 0, len(ps.entries))
445
37742dd72fdb Use a sorted slice for published layers to get rid of extra sorting.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 444
diff changeset
180 for _, e := range ps.entries {
37742dd72fdb Use a sorted slice for published layers to get rid of extra sorting.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 444
diff changeset
181 if accept(e) {
37742dd72fdb Use a sorted slice for published layers to get rid of extra sorting.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 444
diff changeset
182 pe = append(pe, e)
444
c315885825e5 Publish WFS layers on GeoServer from database configuration.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 442
diff changeset
183 }
c315885825e5 Publish WFS layers on GeoServer from database configuration.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 442
diff changeset
184 }
c315885825e5 Publish WFS layers on GeoServer from database configuration.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 442
diff changeset
185
445
37742dd72fdb Use a sorted slice for published layers to get rid of extra sorting.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 444
diff changeset
186 return pe
444
c315885825e5 Publish WFS layers on GeoServer from database configuration.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 442
diff changeset
187 }