annotate pkg/models/intservices.go @ 2549:9bf6b767a56a

client: refactored and improved splitscreen for diagrams To make different diagrams possible, the splitscreen view needed to be decoupled from the cross profiles. Also the style has changed to make it more consistent with the rest of the app. The standard box header is now used and there are collapse and expand animations.
author Markus Kottlaender <markus@intevation.de>
date Fri, 08 Mar 2019 08:50:47 +0100
parents cabf4789e02b
children dfe9cde6a20c
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 = `
1288
9f7dc950ffd2 Accept only well-formed XML documents as style in database
Tom Gottfried <tom@intevation.de>
parents: 1017
diff changeset
47 SELECT XMLSERIALIZE(DOCUMENT style AS text)
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
1288
9f7dc950ffd2 Accept only well-formed XML documents as style in database
Tom Gottfried <tom@intevation.de>
parents: 1017
diff changeset
54 SET style = XMLPARSE(DOCUMENT $1)
877
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
1327
cabf4789e02b To make golint happier made context.Context to be the first argument of auth.RunAs.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1288
diff changeset
62 ctx := context.Background()
cabf4789e02b To make golint happier made context.Context to be the first argument of auth.RunAs.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1288
diff changeset
63 err := auth.RunAs(ctx, "sys_admin",
915
2ebf677fc2e1 Load style data only on demand to not waste menory.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 913
diff changeset
64 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
65 return conn.QueryRowContext(
1327
cabf4789e02b To make golint happier made context.Context to be the first argument of auth.RunAs.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1288
diff changeset
66 ctx,
915
2ebf677fc2e1 Load style data only on demand to not waste menory.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 913
diff changeset
67 selectStyleSQL,
2ebf677fc2e1 Load style data only on demand to not waste menory.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 913
diff changeset
68 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
69 })
2ebf677fc2e1 Load style data only on demand to not waste menory.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 913
diff changeset
70 return style, err
2ebf677fc2e1 Load style data only on demand to not waste menory.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 913
diff changeset
71 }
2ebf677fc2e1 Load style data only on demand to not waste menory.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 913
diff changeset
72
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
73 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
74 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
75 _, 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
76 req.Context(), updateStyleSQL,
877
254cd247826d The XSLT stuff is not need (Puh!).
Sascha L. Teichmann <teichmann@intevation.de>
parents: 876
diff changeset
77 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
78 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
79 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
80 }
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 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
82 })
871
f0b6852c14d1 More on uploading styles to gemma.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 634
diff changeset
83 }
f0b6852c14d1 More on uploading styles to gemma.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 634
diff changeset
84
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
85 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
86 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
87 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
88
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 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
90 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
91 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
92 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
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 }
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
95
456
a8e217119085 Fixed internal proxy resolution.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 446
diff changeset
96 if ps.has(name) {
a8e217119085 Fixed internal proxy resolution.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 446
diff changeset
97 return config.GeoServerURL() + "/" + name, true
a8e217119085 Fixed internal proxy resolution.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 446
diff changeset
98 }
a8e217119085 Fixed internal proxy resolution.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 446
diff changeset
99 return "", false
a8e217119085 Fixed internal proxy resolution.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 446
diff changeset
100 }
441
76a76691a298 Load the configuration of the published services from database.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
101
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
102 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
103 var check func(*IntEntry) bool
456
a8e217119085 Fixed internal proxy resolution.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 446
diff changeset
104 switch service {
a8e217119085 Fixed internal proxy resolution.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 446
diff changeset
105 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
106 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
107 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
108 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
109 default:
a8e217119085 Fixed internal proxy resolution.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 446
diff changeset
110 return false
a8e217119085 Fixed internal proxy resolution.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 446
diff changeset
111 }
a8e217119085 Fixed internal proxy resolution.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 446
diff changeset
112 for i := range ps.entries {
a8e217119085 Fixed internal proxy resolution.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 446
diff changeset
113 if check(&ps.entries[i]) {
a8e217119085 Fixed internal proxy resolution.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 446
diff changeset
114 return true
441
76a76691a298 Load the configuration of the published services from database.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
115 }
76a76691a298 Load the configuration of the published services from database.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
116 }
456
a8e217119085 Fixed internal proxy resolution.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 446
diff changeset
117 return false
441
76a76691a298 Load the configuration of the published services from database.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
118 }
76a76691a298 Load the configuration of the published services from database.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
119
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
120 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
121 // 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
122 ps.entries = []IntEntry{}
1327
cabf4789e02b To make golint happier made context.Context to be the first argument of auth.RunAs.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1288
diff changeset
123 ctx := context.Background()
cabf4789e02b To make golint happier made context.Context to be the first argument of auth.RunAs.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1288
diff changeset
124 return auth.RunAs(ctx, "sys_admin",
501
c10c76c92797 Use metamorphic database connections for auth.RunAs().
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 474
diff changeset
125 func(conn *sql.Conn) error {
c10c76c92797 Use metamorphic database connections for auth.RunAs().
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 474
diff changeset
126 rows, err := conn.QueryContext(
1327
cabf4789e02b To make golint happier made context.Context to be the first argument of auth.RunAs.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1288
diff changeset
127 ctx, selectServicesSQL)
501
c10c76c92797 Use metamorphic database connections for auth.RunAs().
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 474
diff changeset
128 if err != nil {
441
76a76691a298 Load the configuration of the published services from database.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
129 return err
76a76691a298 Load the configuration of the published services from database.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
130 }
501
c10c76c92797 Use metamorphic database connections for auth.RunAs().
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 474
diff changeset
131 defer rows.Close()
c10c76c92797 Use metamorphic database connections for auth.RunAs().
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 474
diff changeset
132 for rows.Next() {
c10c76c92797 Use metamorphic database connections for auth.RunAs().
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 474
diff changeset
133 var entry IntEntry
c10c76c92797 Use metamorphic database connections for auth.RunAs().
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 474
diff changeset
134 if err := rows.Scan(
c10c76c92797 Use metamorphic database connections for auth.RunAs().
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 474
diff changeset
135 &entry.Name, &entry.Style,
599
ac325d191009 Ficxed typo when scanning WMS.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 598
diff changeset
136 &entry.WMS, &entry.WFS,
501
c10c76c92797 Use metamorphic database connections for auth.RunAs().
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 474
diff changeset
137 ); err != nil {
c10c76c92797 Use metamorphic database connections for auth.RunAs().
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 474
diff changeset
138 return err
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 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
141 }
c10c76c92797 Use metamorphic database connections for auth.RunAs().
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 474
diff changeset
142 return rows.Err()
c10c76c92797 Use metamorphic database connections for auth.RunAs().
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 474
diff changeset
143 })
441
76a76691a298 Load the configuration of the published services from database.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
144 }
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
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
146 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
147 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
148 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
149 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
150 }
444
c315885825e5 Publish WFS layers on GeoServer from database configuration.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 442
diff changeset
151
915
2ebf677fc2e1 Load style data only on demand to not waste menory.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 913
diff changeset
152 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
153 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
154 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
155 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
156
871
f0b6852c14d1 More on uploading styles to gemma.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 634
diff changeset
157 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
158 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
159 }
f0b6852c14d1 More on uploading styles to gemma.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 634
diff changeset
160
913
876d1f5433be Started with direct applying style after modification via controller. WIP.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 877
diff changeset
161 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
162 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
163 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
164 if !a(entry) {
876d1f5433be Started with direct applying style after modification via controller. WIP.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 877
diff changeset
165 return false
876d1f5433be Started with direct applying style after modification via controller. WIP.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 877
diff changeset
166 }
876d1f5433be Started with direct applying style after modification via controller. WIP.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 877
diff changeset
167 }
876d1f5433be Started with direct applying style after modification via controller. WIP.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 877
diff changeset
168 return true
876d1f5433be Started with direct applying style after modification via controller. WIP.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 877
diff changeset
169 }
871
f0b6852c14d1 More on uploading styles to gemma.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 634
diff changeset
170 }
f0b6852c14d1 More on uploading styles to gemma.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 634
diff changeset
171
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
172 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
173 ps.mu.Lock()
c315885825e5 Publish WFS layers on GeoServer from database configuration.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 442
diff changeset
174 defer ps.mu.Unlock()
c315885825e5 Publish WFS layers on GeoServer from database configuration.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 442
diff changeset
175 if ps.entries == nil {
c315885825e5 Publish WFS layers on GeoServer from database configuration.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 442
diff changeset
176 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
177 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
178 return nil
c315885825e5 Publish WFS layers on GeoServer from database configuration.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 442
diff changeset
179 }
c315885825e5 Publish WFS layers on GeoServer from database configuration.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 442
diff changeset
180 }
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
181 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
182 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
183 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
184 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
185 }
c315885825e5 Publish WFS layers on GeoServer from database configuration.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 442
diff changeset
186 }
c315885825e5 Publish WFS layers on GeoServer from database configuration.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 442
diff changeset
187
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
188 return pe
444
c315885825e5 Publish WFS layers on GeoServer from database configuration.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 442
diff changeset
189 }