Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
13 changes: 13 additions & 0 deletions README.org
Original file line number Diff line number Diff line change
Expand Up @@ -154,6 +154,19 @@ is provided, all workspaces matching the regex will be deleted.
"responsePort": 5555}
#+end_src

1. Remove a single layer and it's associated store under a Workspace from Geoserver

Both ~geoserverWorkspace~ and ~geoserverLayer~ are plain texts that must
match the exact entries in Geoserver.

#+begin_src js
{"action": "remove",
"geoserverWorkspace": "demo",
"geoserverLayer": "demo-layer",
"responseHost": "my.server.org",
"responsePort": 5555}
#+end_src

Because GeoServer updates can take awhile to complete, these requests
are processed asynchronously. This means that the network connection
will be closed as soon as the incoming request is read from the
Expand Down
13 changes: 13 additions & 0 deletions src/geosync/core.clj
Original file line number Diff line number Diff line change
Expand Up @@ -484,3 +484,16 @@
(and acc)))
true
workspaces)))

(defn remove-layer!
[{:keys [geoserver-workspace geoserver-layer] :as config-params}]
(when (workspace-exists? config-params)
(reduce (fn [acc f]
(->> (f geoserver-workspace geoserver-layer true)
(make-rest-request config-params)
(:status)
(success-code?)
(or acc)))
false
[rest/delete-data-store
rest/delete-coverage-store])))
24 changes: 16 additions & 8 deletions src/geosync/rest_api.clj
Original file line number Diff line number Diff line change
Expand Up @@ -155,10 +155,14 @@
[:entry {:key "memory mapped buffer"} true]
[:entry {:key "cache and reuse memory maps"} true]]])])

(defn delete-data-store [workspace store]
["DELETE"
(str "/workspaces/" workspace "/datastores/" store)
nil])
(defn delete-data-store
([workspace store]
(delete-data-store workspace store false))

([workspace store recurse?]
["DELETE"
(str "/workspaces/" workspace "/datastores/" store "?recurse=" recurse?)
nil]))

;;=================================================================================
;;
Expand Down Expand Up @@ -211,10 +215,14 @@
file-url
"text/plain"])

(defn delete-coverage-store [workspace store]
["DELETE"
(str "/workspaces/" workspace "/coveragestores/" store)
nil])
(defn delete-coverage-store
([workspace store]
(delete-coverage-store workspace store false))

([workspace store recurse?]
["DELETE"
(str "/workspaces/" workspace "/coveragestores/" store "?recurse=" recurse?)
nil]))

;;=================================================================================
;;
Expand Down
21 changes: 15 additions & 6 deletions src/geosync/server.clj
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@
[clojure.spec.alpha :as spec]
[geosync.action-hooks :refer [run-action-hooks!]]
[geosync.core :refer [add-directory-to-workspace!
remove-layer!
remove-workspace!]]
[geosync.file-watcher :as file-watcher]
[geosync.simple-sockets :as sockets]
Expand Down Expand Up @@ -33,6 +34,7 @@
::action
::geoserver-workspace]
:opt-un [::data-dir
::geoserver-layer
::prioritize])
(fn [{:keys [action data-dir]}]
(or (and (= action "add") (string? data-dir))
Expand Down Expand Up @@ -67,10 +69,14 @@
[1 "GeoSync: Errors encountered during layer registration."]))

(defmethod process-request! :remove
[config-params _]
(if (remove-workspace! config-params)
[0 "GeoSync: Workspace(s) removed."]
[1 "GeoSync: Errors encountered during workspace removal."]))
[{:keys [geoserver-layer] :as config-params} _]
(if geoserver-layer
(if (remove-layer! config-params)
[0 "GeoSync: Layer removed."]
[1 "GeoSync: Errors encountered during layer removal."])
(if (remove-workspace! config-params)
[0 "GeoSync: Workspace(s) removed."]
[1 "GeoSync: Errors encountered during workspace removal."])))

(defn process-requests!
[{:keys [geosync-server-host geosync-server-port action-hooks] :as config-params}]
Expand All @@ -79,15 +85,18 @@
[response-host
response-port
geoserver-workspace
geoserver-layer
data-dir] :as request} @(first (alts! [job-queue stand-by-queue]
:priority true))]
(log-str "Processing Request: " request)
(let [config-params (-> config-params
(dissoc :geosync-server-host :geosync-server-port)
(assoc :geoserver-workspace geoserver-workspace :data-dir data-dir))
(assoc :geoserver-workspace geoserver-workspace
:geoserver-layer geoserver-layer
:data-dir data-dir))
[status-num status-msg] (try
(let [_ (run-action-hooks! action-hooks request :before)
status (process-request! config-params request)
status (process-request! config-params)
_ (run-action-hooks! action-hooks request :after)]
status)
(catch Exception e
Expand Down