====== Layer Utente WMS e Shapefile ======
^ Sigla | SV.0026.016 |
^ Versione GeoWeb | 4.8.3 |
^ Versione MapGuide | 3.1.2 |
^ Data rilascio | 2026-06-26 |
^ Redattore | GSC |
^ Cliente | FIBERCOP ZENITH REAL ESTATE |
^ Issue | #1808 |
===== 1. Introduzione =====
Il presente documento descrive il rilascio della funzionalità **Layer Utente WMS e Shapefile** (sigla ''SV.0026.016'') per il widget **Layout 2D** del prodotto GeoWeb MapGuide.
Il documento è rivolto al team di implementazione e ai responsabili tecnici del progetto; ha lo scopo di descrivere in modo esaustivo le modifiche apportate al framework, le dipendenze tecniche e le istruzioni di installazione.
^ Documento di riferimento ^ Identificativo ^
| Studio di Fattibilità / BRD | SV.0026.016.SF — Layout 2D Layer Utente WMS + ShapeFile — V02 — 30/03/2026 |
| Progetto Esecutivo / PE | SV.0026.016.PE — Layout 2D Layer Utente WMS + ShapeFile — V01 — 21/05/2026 |
| Cliente / Committente | FIBERCOP ZENITH REAL ESTATE |
| Prodotto | GeoWeb Framework — modulo MapGuide — widget Layout 2D |
===== 2. Contesto =====
==== 2.1 Scenario precedente ====
Nel framework GeoWeb MapGuide le mappe cartografiche erogate nelle webapp sono tradizionalmente pre-configurate dal personale tecnico GeoWeb tramite strumenti specializzati esterni (MapGuide Maestro). Le risorse cartografiche — Feature Source, Layer Definition, Map Definition — sono definite a monte e pubblicate sulla library del server MapGuide.
Esiste un meccanismo per il caricamento di package MapGuide personalizzati che permette a utenti configuratori di estendere le mappe; tuttavia tale meccanismo richiede competenze tecniche specialistiche e l'intervento del personale GeoWeb, escludendo l'utente finale da qualsiasi autonomia operativa nella gestione della cartografia.
Il servizio WMS è già supportato da GeoWeb come sfondo cartografico (''baseLayer''), configurabile dall'amministratore nel webadmin. Il webadmin non è tuttavia accessibile all'utente finale, che non può aggiungere autonomamente sorgenti WMS alla propria mappa.
==== 2.2 Scenario attuale ====
Con questo rilascio l'utente finale acquisisce piena autonomia nella gestione di layer cartografici personalizzati, direttamente dalla webapp GeoWeb, senza necessità di strumenti esterni o intervento del personale tecnico.
Le tipologie di layer gestibili sono:
* **Layer WMS**: l'utente specifica l'URL del servizio OGC WMS; il sistema recupera automaticamente le capabilities, presenta la lista dei layer disponibili e, al salvataggio, deploya il layer nella library MapGuide.
* **Layer Shapefile**: l'utente carica un file ZIP contenente shapefile ESRI (.shp, .dbf, .shx); il sistema valida il contenuto, crea una Feature Source nella library MapGuide e genera il layer con la simbologia configurata dall'utente.
I layer utente si integrano nella legenda del widget Layout 2D in una folder dedicata **"Layer Utente"**, senza modifiche al layout della scheda mappa. Tutti i layer caricati da qualsiasi utente sono visibili a tutti gli utenti con accesso alla mappa.
===== 3. Nomenclatura =====
Vademecum dei nuovi concetti base introdotti con questo rilascio.
^ Termine ^ Definizione ^
| **Layer Utente** | Layer cartografico definito e gestito dall'utente finale; distinto dai layer di prodotto, configurati dal team GeoWeb tramite strumenti tecnici esterni. |
| **Layer WMS** | Layer basato su servizio OGC Web Map Service; i dati cartografici sono richiesti in tempo reale al server WMS remoto tramite richieste HTTP. |
| **Layer Shapefile** | Layer basato su file ZIP contenente shapefile ESRI (.shp, .dbf, .shx); i dati sono importati nella library MapGuide come Feature Source. |
| **Feature Source** | Risorsa della library MapGuide che descrive una fonte dati (es. uno shapefile deployato); è il punto di partenza per la definizione di un layer. |
| **Library MapGuide** | Repository centralizzato sul server MapGuide in cui sono memorizzate le risorse cartografiche: Feature Source, Layer Definition, Map Definition. |
| **GetCapabilities** | Operazione standard OGC WMS (richiesta HTTP) che restituisce la lista dei layer disponibili, i CRS supportati e i metadati del servizio. |
| **EventTrigger** | Componente Java GeoWeb che si attiva automaticamente al salvataggio di un record; in questo contesto gestisce il deploy del layer in MapGuide. |
| **is_valid** | Flag DB (INTEGER 0/1): 1 = deploy completato con successo in MapGuide; 0 = errore (il dettaglio è nel campo ''validation_message''). |
| **FDO WMS Provider** | Driver MapGuide per l'accesso a servizi WMS (versione 4.1); invia sempre la BBOX in formato (lon, lat). |
| **CRS geografico** | Sistema di riferimento non proiettato (es. EPSG 4326); con WMS 1.3.0 lo standard OGC richiede axis-order (lat, lon), in conflitto con FDO. Il sistema effettua auto-downgrade a WMS 1.1.0 in questo caso. |
| **EhCache** | Framework di caching Java; le entry relative ai layer utente vengono invalidate ad ogni operazione di insert/update/delete, garantendo dati sempre aggiornati. |
===== 4. Ambito e Dipendenze =====
^ Componente ^ Versione / Dettaglio ^
| GeoWeb Framework | 4.8.3 |
| MapGuide Open Source | 3.1.2 |
| FDO WMS Provider | 4.1 |
| Database supportati | PostgreSQL, Oracle, SQL Server |
| Java EventTrigger | MapGuideUserLayerShapeFileTrigger, MapGuideUserLayerWMSTrigger |
| Cache | EhCache: ''retrieveValidUserWmsLayersForMap'', ''retrieveValidUserShapefileLayersForMap'' |
===== 5. Classi GeoWeb =====
Sono state introdotte due nuove classi GeoWeb, ciascuna con tabella DB e trigger Java associato:
^ Classe GeoWeb ^ Tabella DB ^ Trigger ^
| ''gwd_mg_user_layer_shapefile'' | ''gwd_mg_user_layer_shapefile'' | ''MapGuideUserLayerShapeFileTrigger'' — valida ZIP, deploya Feature Source, aggiorna is_valid |
| ''gwd_mg_user_layer_wms'' | ''gwd_mg_user_layer_wms'' | ''MapGuideUserLayerWMSTrigger'' — esegue GetCapabilities, valida WMS, deploya con auto-downgrade 1.3.0→1.1.0 per CRS geografici |
I metadati delle classi si trovano nella cartella ''DR/metadata/'' e vanno importati tramite il Webadmin GeoWeb (funzione Import/Export metadati).
===== 6. Schema Dati =====
==== 6.1 Tabella gwd_mg_user_layer_shapefile ====
^ Campo ^ Tipo ^ Descrizione ^
| ''id_mg_user_layer_shapefile'' | INTEGER PK | Identificativo univoco (autoincrement) |
| ''name'' | VARCHAR | Nome univoco del layer (UNIQUE) |
| ''description'' | VARCHAR | Descrizione testuale del layer |
| ''gw_map_name'' | VARCHAR | Nome della mappa MapGuide di riferimento |
| ''file_name'' | VARCHAR | Nome originale del file ZIP caricato |
| ''file_data'' | BLOB/BYTEA | Contenuto binario del file ZIP |
| ''file_c_type'' | VARCHAR | MIME type del file |
| ''is_valid'' | INTEGER | 1 = deploy riuscito; 0 = errore |
| ''validation_message'' | VARCHAR | Messaggio di esito validazione/deploy |
| ''is_valid_html'' | VARCHAR | HTML con indicatore di stato (verde/rosso) |
| ''is_visible'' | INTEGER | 1 = layer visibile nel renderer |
| ''is_shown_in_legend'' | INTEGER | 1 = layer incluso nella legenda |
| ''is_start_selected_in_legend'' | INTEGER | 1 = layer selezionato di default all'avvio |
| ''legend_name'' | VARCHAR | Etichetta personalizzata nella legenda |
| ''layer_filter'' | VARCHAR | Filtro FDO applicato al layer |
| ''library_resource_id'' | TEXT | Identificatore nella library MapGuide |
| ''style_xml_point / line / area'' | VARCHAR/CLOB | XML stile per tipo di geometria |
| ''style_pt_* / style_li_* / style_ar_*'' | vari | Parametri di stile (simbolo, colori, etichette) per punti/linee/aree |
| ''created_at / updated_at'' | TIMESTAMP | Date di creazione/modifica |
| ''created_by / updated_by'' | VARCHAR | Utente di creazione/modifica |
==== 6.2 Tabella gwd_mg_user_layer_wms ====
^ Campo ^ Tipo ^ Descrizione ^
| ''id_gwd_mg_user_layer_wms'' | INTEGER PK | Identificativo univoco (autoincrement) |
| ''name'' | VARCHAR | Nome univoco del layer WMS (UNIQUE) |
| ''description'' | VARCHAR | Descrizione testuale del layer |
| ''gw_map_name'' | VARCHAR | Nome della mappa MapGuide di riferimento |
| ''base_url'' | TEXT | URL base del servizio WMS |
| ''wms_version'' | VARCHAR(20) | Versione WMS negoziata (1.1.0 o 1.3.0) |
| ''wms_available_layers'' | TEXT | Elenco layer disponibili da GetCapabilities |
| ''wms_layers'' | TEXT | Layer selezionati per il deploy |
| ''wms_json_params'' | JSONB/TEXT | Parametri WMS aggiuntivi (JSON) |
| ''wms_get_capabilities_xml'' | TEXT | XML GetCapabilities memorizzato |
| ''username / password'' | VARCHAR | Credenziali servizio WMS (opzionali) |
| ''is_valid'' | INTEGER | 1 = deploy riuscito; 0 = errore |
| ''validation_message'' | VARCHAR | Messaggio di esito validazione/deploy |
| ''is_valid_html'' | VARCHAR | HTML con indicatore di stato |
| ''is_visible'' | INTEGER | 1 = layer visibile nel renderer |
| ''is_shown_in_legend'' | INTEGER | 1 = layer incluso nella legenda |
| ''is_start_selected_in_legend'' | INTEGER | 1 = layer selezionato di default all'avvio |
| ''legend_name'' | VARCHAR | Etichetta personalizzata nella legenda |
| ''created_at / updated_at'' | TIMESTAMP | Date di creazione/modifica |
| ''created_by / updated_by'' | VARCHAR | Utente di creazione/modifica |
===== 7. Componenti Sviluppati =====
^ Componente ^ File ^ Descrizione ^
| EventTrigger SHP | ''MapGuideUserLayerShapeFileTrigger.java'' | Validazione ZIP shapefile, deploy Feature Source in MapGuide, aggiornamento is_valid |
| EventTrigger WMS | ''MapGuideUserLayerWMSTrigger.java'' | Esecuzione GetCapabilities, validazione WMS, deploy WMS Layer, auto-downgrade versione, aggiornamento is_valid |
| MapGuideService | ''MapGuideService.java'' | Metodi ''addDynamicUserWmsLayersToMgMap'' e ''addDynamicUserShapefileLayersToMgMap''; gestione fallback WMS 1.1.0 per CRS geografici |
| Layout2DController | ''Layout2DController.java'' | Wiring dell'aggiunta dei layer utente al caricamento del widget Layout 2D |
| LayersManagement.js | ''LayersManagement.js'' | Subscriptions agli eventi insert/update/delete → ''gwLoad()'' per ricaricamento automatico della mappa |
| Cache EhCache | ''ehcache.xml'' | Entry ''retrieveValidUserWmsLayersForMap'' e ''retrieveValidUserShapefileLayersForMap'' |
===== 8. Funzionalità UI — Layer WMS =====
**Attore: Utente Finale**
==== 8.1 Lista layer WMS ====
La lista mostra tutti i layer WMS configurati con il relativo indicatore di validità (verde = operativo, rosso = errore) e il messaggio di validazione.
{{:custom:lista classe layer wms.png}}
//Fig. 1 — Lista layer WMS (classe gwd_mg_user_layer_wms)//
==== 8.2 Creazione nuovo layer WMS — form vuoto ====
Per creare un nuovo layer WMS l'Utente Finale compila la scheda **Definizione** con:
* **Nome** — nome univoco del layer (campo UNIQUE nel DB)
* **Mappa MapGuide** — la mappa Layout 2D in cui sarà visibile il layer (''gw_map_name'')
* **URL base WMS** — l'URL del servizio (es. ''http://server/wms?'')
{{:custom:dettaglio classe layer wms nuovo definizione.png}}
//Fig. 2 — Form nuovo layer WMS: campi di definizione (vuoto)//
==== 8.3 Creazione nuovo layer WMS — compilato ====
Dopo l'inserimento dell'URL base, il sistema esegue automaticamente il GetCapabilities e popola la lista dei layer disponibili (''wms_available_layers''). L'Utente Finale seleziona i layer da visualizzare in mappa (''wms_layers'').
{{:custom:dettaglio classe layer wms nuovo definizione popolato.png}}
//Fig. 3 — Form nuovo layer WMS: compilato con layer disponibili caricati da GetCapabilities//
==== 8.4 Layer WMS dopo salvataggio ====
Al salvataggio, il trigger ''MapGuideUserLayerWMSTrigger'' esegue il deploy nella library MapGuide e aggiorna i campi ''is_valid'', ''validation_message'', ''is_valid_html''.
{{:custom:dettaglio classe layer wms esempio creato definizione con validazione.png}}
//Fig. 4 — Layer WMS salvato: indicatore di validità aggiornato (verde = deploy riuscito)//
==== 8.5 Layer WMS in mappa ====
Aprendo la mappa Layout 2D configurata nel layer, il sistema carica i layer WMS validi per quella mappa e li aggiunge alla cartografia. I layer appaiono nella folder **"Layer Utente"** della legenda.
{{:custom:mappa cartografica esempio layer wms.png}}
//Fig. 5 — Mappa Layout 2D con layer WMS attivo nella folder "Layer Utente"//
===== 9. Funzionalità UI — Layer Shapefile =====
**Attore: Utente Finale**
==== 9.1 Lista layer Shapefile ====
La lista mostra tutti i layer Shapefile configurati con indicatore di validità.
{{:custom:lista classe layer shapefile.jpg}}
//Fig. 6 — Lista layer Shapefile (classe gwd_mg_user_layer_shapefile)//
==== 9.2 Creazione nuovo layer Shapefile — form vuoto ====
La scheda **Definizione** richiede:
* **Nome** — nome univoco del layer
* **Mappa MapGuide** — mappa di destinazione
* **File shapefile (ZIP)** — file ZIP contenente obbligatoriamente ''.shp'', ''.dbf'', ''.shx'' (opzionali: ''.prj'', ''.cpg'')
{{:custom:dettaglio classe layer shapefile nuovo definizione.png}}
//Fig. 7 — Form nuovo layer Shapefile: campi di definizione (vuoto)//
==== 9.3 Creazione nuovo layer Shapefile — compilato ====
{{:custom:dettaglio classe layer shapefile nuovo definizione popolata.png}}
//Fig. 8 — Form nuovo layer Shapefile: compilato con file ZIP caricato//
==== 9.4 Configurazione stile ====
La scheda **Stili** permette di configurare la simbologia per tipo di geometria. I parametri di stile vengono serializzati come XML MapGuide Layer Definition (campi ''style_xml_point'', ''style_xml_line'', ''style_xml_area'').
**Stile Punti:**
{{:custom:dettaglio classe layer shapefile nuovo stili punti.png}}
//Fig. 9 — Configurazione stile: geometrie punto (simbolo, dimensione, colore, etichetta)//
**Stile Linee:**
{{:custom:dettaglio classe layer shapefile nuovo stili linee.png}}
//Fig. 10 — Configurazione stile: geometrie linea (stile linea, spessore, colore, etichetta)//
**Stile Aree:**
{{:custom:dettaglio classe layer shapefile nuovo stili aree.png}}
//Fig. 11 — Configurazione stile: geometrie area/poligono (riempimento, bordo, etichetta)//
==== 9.5 Layer Shapefile dopo salvataggio ====
Al salvataggio, il trigger ''MapGuideUserLayerShapeFileTrigger'' valida il contenuto del ZIP (presenza dei file obbligatori), crea la Feature Source nella library MapGuide e aggiorna ''is_valid''.
{{:custom:dettaglio classe layer shapefile esempio gia creato definizione con validazione.png}}
//Fig. 12 — Layer Shapefile salvato: indicatore di validità aggiornato//
==== 9.6 Layer Shapefile in mappa ====
{{:custom:mappa cartografica esempio layer shapefile.png}}
//Fig. 13 — Mappa Layout 2D con layer Shapefile attivo//
===== 10. Legenda e Visibilità =====
Entrambe le classi supportano i seguenti campi per la gestione della legenda:
^ Campo ^ Comportamento ^
| ''legend_name'' | Etichetta del nodo nella legenda. Se vuoto, viene usato il campo ''name''. |
| ''is_shown_in_legend'' | 1 = il layer appare nell'albero della legenda; 0 = nascosto. |
| ''is_start_selected_in_legend'' | 1 = il layer è selezionato (spuntato) di default all'apertura della mappa. |
I layer appaiono raggruppati in una folder denominata **"Layer Utente"** nell'albero della legenda del widget Layout 2D.
===== 11. Ricaricamento Automatico della Mappa =====
Il widget Layout 2D si ricarica automaticamente (via ''gwLoad()'') ogni volta che viene eseguita un'operazione di insert, update o delete su una delle classi ''gwd_mg_user_layer_shapefile'' o ''gwd_mg_user_layer_wms''.
Il meccanismo è implementato in ''LayersManagement.js'' tramite subscriptions ai topic di aggiornamento pubblicati dal modulo dati. Questo garantisce che le modifiche ai layer siano immediatamente visibili in mappa senza ricaricare la pagina.
===== 12. Note Tecniche =====
==== 12.1 EventTrigger Java ====
I trigger sono implementati come **Java EventTrigger** (non groovy) e implementano i metodi:
* ''afterInsert'' — deploy del layer appena creato
* ''afterUpdate'' — re-deploy del layer aggiornato
* ''afterDelete'' — rimozione del layer dalla library MapGuide
L'aggiornamento di ''is_valid'' in caso di errore avviene tramite ''executeUpdateQuery()'' (query SQL diretta) e non tramite modifica JPA dell'entità originale. Questo è necessario perché il metodo si trova negli hook ''after*'': a quel punto la transazione JPA è già stata completata e non è possibile modificare l'entità originale.
==== 12.2 Auto-downgrade WMS 1.3.0 → 1.1.0 ====
**FDO WMS Provider 4.1** invia sempre la BBOX come (longitudine, latitudine). Con WMS 1.3.0 e CRS geografici (EPSG 4000–4999, 6000–6999, 7000–7999) lo standard OGC prevede axis-order inverso (lat, lon), causando un mismatch che produce tiles vuote o errate.
**Soluzione implementata:** per servizi WMS che espongono CRS geografici, il sistema rileva automaticamente la situazione e usa la versione 1.1.0 (che usa sempre lon/lat indipendentemente dal CRS). La versione negoziata viene memorizzata nel campo ''wms_version''.
==== 12.3 Cache EhCache ====
Le entry di cache ''retrieveValidUserWmsLayersForMap'' e ''retrieveValidUserShapefileLayersForMap'' memorizzano i layer validi per mappa. La cache viene invalidata automaticamente ad ogni operazione di insert/update/delete sui layer utente, garantendo che la mappa ricarichi sempre i dati aggiornati.
===== 13. Ambiente di Test =====
^ Voce ^ Valore ^
| URL applicazione Utente Finale | http://192.168.0.225:8090/test_gw48/project/mg_user_layer.html?group=TESTER_GROUP |
| Utente Finale — username | tester |
| Utente Finale — password | Tester0@ |
| URL Webadmin | http://192.168.0.225:8090/test_gw48admin/index.html |
| Webadmin — utente | adminTester |
| Webadmin — password | admin |
| Versione GeoWeb | 4.8.3 |
| Versione MapGuide | 3.1.2 |
===== 14. Script SQL — Data Schema =====
Script DDL per la creazione delle tabelle applicative (schema dati GeoWeb). Eseguire prima di importare i metadati.
==== 12.1 PostgreSQL — data_script.sql ====
-- Table: test_gw48data.gwd_mg_user_layer_shapefile
-- DROP TABLE IF EXISTS test_gw48data.gwd_mg_user_layer_shapefile;
CREATE TABLE IF NOT EXISTS test_gw48data.gwd_mg_user_layer_shapefile
(
id_mg_user_layer_shapefile integer NOT NULL,
name character varying COLLATE pg_catalog."default" NOT NULL,
description character varying COLLATE pg_catalog."default",
gw_map_name character varying COLLATE pg_catalog."default" NOT NULL,
file_name character varying COLLATE pg_catalog."default" NOT NULL,
file_data bytea NOT NULL,
file_c_type character varying COLLATE pg_catalog."default" NOT NULL,
is_valid integer NOT NULL DEFAULT 0,
is_valid_html character varying COLLATE pg_catalog."default",
validation_message character varying COLLATE pg_catalog."default",
is_visible integer NOT NULL DEFAULT 0,
is_shown_in_legend integer NOT NULL DEFAULT 0,
layer_filter character varying COLLATE pg_catalog."default",
style_xml_point character varying COLLATE pg_catalog."default",
style_pt_display integer NOT NULL DEFAULT 1,
style_pt_allowoverpost integer NOT NULL DEFAULT 0,
style_pt_symbol_display integer NOT NULL DEFAULT 1,
style_pt_symbol_shape character varying COLLATE pg_catalog."default",
style_pt_symbol_size_context character varying COLLATE pg_catalog."default",
style_pt_symbol_unit character varying COLLATE pg_catalog."default",
style_pt_symbol_width character varying COLLATE pg_catalog."default",
style_pt_symbol_height character varying COLLATE pg_catalog."default",
style_pt_symbol_rotation character varying COLLATE pg_catalog."default",
style_pt_symbol_fill_display integer NOT NULL DEFAULT 1,
style_pt_symbol_fill_pattern character varying COLLATE pg_catalog."default",
style_pt_symbol_fill_foregroundcolor character varying COLLATE pg_catalog."default",
style_pt_symbol_fill_backgroundcolor character varying COLLATE pg_catalog."default",
style_pt_symbol_edge_display integer NOT NULL DEFAULT 1,
style_pt_symbol_edge_linestyle character varying COLLATE pg_catalog."default",
style_pt_symbol_edge_thickness character varying COLLATE pg_catalog."default",
style_pt_symbol_edge_color character varying COLLATE pg_catalog."default",
style_pt_label_display integer NOT NULL DEFAULT 0,
style_pt_label_unit character varying COLLATE pg_catalog."default",
style_pt_label_sizecontext character varying COLLATE pg_catalog."default",
style_pt_label_size character varying COLLATE pg_catalog."default",
style_pt_label_rotation character varying COLLATE pg_catalog."default",
style_pt_label_text character varying COLLATE pg_catalog."default",
style_pt_label_foregroundcolor character varying COLLATE pg_catalog."default",
style_pt_label_backgroundcolor character varying COLLATE pg_catalog."default",
style_pt_label_backgroundstyle character varying COLLATE pg_catalog."default",
style_pt_label_h_align character varying COLLATE pg_catalog."default",
style_pt_label_v_align character varying COLLATE pg_catalog."default",
style_xml_line character varying COLLATE pg_catalog."default",
style_li_display integer NOT NULL DEFAULT 1,
style_li_symbol_display integer NOT NULL DEFAULT 1,
style_li_symbol_linestyle character varying COLLATE pg_catalog."default",
style_li_symbol_thickness character varying COLLATE pg_catalog."default",
style_li_symbol_color character varying COLLATE pg_catalog."default",
style_li_symbol_unit character varying COLLATE pg_catalog."default",
style_li_label_display integer NOT NULL DEFAULT 0,
style_li_label_unit character varying COLLATE pg_catalog."default",
style_li_label_sizecontext character varying COLLATE pg_catalog."default",
style_li_label_size character varying COLLATE pg_catalog."default",
style_li_label_rotation character varying COLLATE pg_catalog."default",
style_li_label_text character varying COLLATE pg_catalog."default",
style_li_label_foregroundcolor character varying COLLATE pg_catalog."default",
style_li_label_backgroundcolor character varying COLLATE pg_catalog."default",
style_li_label_backgroundstyle character varying COLLATE pg_catalog."default",
style_li_label_h_align character varying COLLATE pg_catalog."default",
style_li_label_v_align character varying COLLATE pg_catalog."default",
style_xml_area character varying COLLATE pg_catalog."default",
style_ar_display integer NOT NULL DEFAULT 1,
style_ar_fill_display integer NOT NULL DEFAULT 1,
style_ar_fill_pattern character varying COLLATE pg_catalog."default",
style_ar_fill_foregroundcolor character varying COLLATE pg_catalog."default",
style_ar_fill_backgroundcolor character varying COLLATE pg_catalog."default",
style_ar_stroke_display integer NOT NULL DEFAULT 1,
style_ar_stroke_linestyle character varying COLLATE pg_catalog."default",
style_ar_stroke_thickness character varying COLLATE pg_catalog."default",
style_ar_stroke_color character varying COLLATE pg_catalog."default",
style_ar_stroke_unit character varying COLLATE pg_catalog."default",
style_ar_label_display integer NOT NULL DEFAULT 0,
style_ar_label_unit character varying COLLATE pg_catalog."default",
style_ar_label_sizecontext character varying COLLATE pg_catalog."default",
style_ar_label_size character varying COLLATE pg_catalog."default",
style_ar_label_rotation character varying COLLATE pg_catalog."default",
style_ar_label_text character varying COLLATE pg_catalog."default",
style_ar_label_foregroundcolor character varying COLLATE pg_catalog."default",
style_ar_label_backgroundcolor character varying COLLATE pg_catalog."default",
style_ar_label_backgroundstyle character varying COLLATE pg_catalog."default",
style_ar_label_h_align character varying COLLATE pg_catalog."default",
style_ar_label_v_align character varying COLLATE pg_catalog."default",
created_at timestamp without time zone,
created_by character varying COLLATE pg_catalog."default",
updated_at timestamp without time zone,
updated_by character varying COLLATE pg_catalog."default",
is_start_selected_in_legend integer NOT NULL DEFAULT 0,
legend_name character varying COLLATE pg_catalog."default",
CONSTRAINT gwd_mg_user_layer_shapefile_pkey PRIMARY KEY (id_mg_user_layer_shapefile),
CONSTRAINT unique_name_layer_shapefile UNIQUE (name)
)
WITH (
OIDS = FALSE
)
TABLESPACE pg_default;
ALTER TABLE IF EXISTS test_gw48data.gwd_mg_user_layer_shapefile
OWNER to test_gw48data;
-- Table: test_gw48data.gwd_mg_user_layer_wms
-- DROP TABLE IF EXISTS test_gw48data.gwd_mg_user_layer_wms;
CREATE TABLE IF NOT EXISTS test_gw48data.gwd_mg_user_layer_wms
(
id_gwd_mg_user_layer_wms integer NOT NULL,
name character varying COLLATE pg_catalog."default" NOT NULL,
description character varying COLLATE pg_catalog."default",
gw_map_name character varying COLLATE pg_catalog."default" NOT NULL,
base_url character varying COLLATE pg_catalog."default" NOT NULL,
wms_version character varying COLLATE pg_catalog."default",
wms_available_layers character varying COLLATE pg_catalog."default",
wms_layers character varying COLLATE pg_catalog."default",
wms_json_params jsonb,
username character varying COLLATE pg_catalog."default",
password character varying COLLATE pg_catalog."default",
is_valid integer NOT NULL DEFAULT 0,
is_valid_html character varying COLLATE pg_catalog."default",
validation_message character varying COLLATE pg_catalog."default",
created_at timestamp without time zone,
created_by character varying COLLATE pg_catalog."default",
updated_at timestamp without time zone,
updated_by character varying COLLATE pg_catalog."default",
wms_get_capabilities_xml character varying COLLATE pg_catalog."default",
is_visible integer NOT NULL DEFAULT 0,
is_shown_in_legend integer NOT NULL DEFAULT 0,
is_start_selected_in_legend integer NOT NULL DEFAULT 0,
legend_name character varying COLLATE pg_catalog."default",
CONSTRAINT gwd_mg_user_layer_wms_pkey PRIMARY KEY (id_gwd_mg_user_layer_wms),
CONSTRAINT unique_name_layer_wms UNIQUE (name)
)
WITH (
OIDS = FALSE
)
TABLESPACE pg_default;
ALTER TABLE IF EXISTS test_gw48data.gwd_mg_user_layer_wms
OWNER to test_gw48data;
==== 12.2 Oracle — data_script.sql ====
-- SV.0026.016 - Layout 2D: Layer Utente WMS + Shapefile
-- Oracle DDL
-- Redattore: GSC Data: 2026-06-26
-- ============================================================
-- Tabella: GWD_MG_USER_LAYER_SHAPEFILE
-- ============================================================
CREATE TABLE GWD_MG_USER_LAYER_SHAPEFILE
(
ID_MG_USER_LAYER_SHAPEFILE NUMBER(10) NOT NULL,
NAME VARCHAR2(500) NOT NULL,
DESCRIPTION VARCHAR2(2000),
GW_MAP_NAME VARCHAR2(500) NOT NULL,
FILE_NAME VARCHAR2(500) NOT NULL,
FILE_DATA BLOB NOT NULL,
FILE_C_TYPE VARCHAR2(200) NOT NULL,
IS_VALID NUMBER(1) DEFAULT 0 NOT NULL,
IS_VALID_HTML VARCHAR2(2000),
VALIDATION_MESSAGE VARCHAR2(2000),
IS_VISIBLE NUMBER(1) DEFAULT 0 NOT NULL,
IS_SHOWN_IN_LEGEND NUMBER(1) DEFAULT 0 NOT NULL,
LAYER_FILTER VARCHAR2(4000),
STYLE_XML_POINT CLOB,
STYLE_PT_DISPLAY NUMBER(1) DEFAULT 1 NOT NULL,
STYLE_PT_ALLOWOVERPOST NUMBER(1) DEFAULT 0 NOT NULL,
STYLE_PT_SYMBOL_DISPLAY NUMBER(1) DEFAULT 1 NOT NULL,
STYLE_PT_SYMBOL_SHAPE VARCHAR2(200),
STYLE_PT_SYMBOL_SIZE_CONTEXT VARCHAR2(200),
STYLE_PT_SYMBOL_UNIT VARCHAR2(100),
STYLE_PT_SYMBOL_WIDTH VARCHAR2(100),
STYLE_PT_SYMBOL_HEIGHT VARCHAR2(100),
STYLE_PT_SYMBOL_ROTATION VARCHAR2(100),
STYLE_PT_SYMBOL_FILL_DISPLAY NUMBER(1) DEFAULT 1 NOT NULL,
STYLE_PT_SYMBOL_FILL_PATTERN VARCHAR2(200),
STYLE_PT_SYMBOL_FILL_FOREGROUNDCOLOR VARCHAR2(50),
STYLE_PT_SYMBOL_FILL_BACKGROUNDCOLOR VARCHAR2(50),
STYLE_PT_SYMBOL_EDGE_DISPLAY NUMBER(1) DEFAULT 1 NOT NULL,
STYLE_PT_SYMBOL_EDGE_LINESTYLE VARCHAR2(100),
STYLE_PT_SYMBOL_EDGE_THICKNESS VARCHAR2(100),
STYLE_PT_SYMBOL_EDGE_COLOR VARCHAR2(50),
STYLE_PT_LABEL_DISPLAY NUMBER(1) DEFAULT 0 NOT NULL,
STYLE_PT_LABEL_UNIT VARCHAR2(100),
STYLE_PT_LABEL_SIZECONTEXT VARCHAR2(200),
STYLE_PT_LABEL_SIZE VARCHAR2(100),
STYLE_PT_LABEL_ROTATION VARCHAR2(100),
STYLE_PT_LABEL_TEXT VARCHAR2(500),
STYLE_PT_LABEL_FOREGROUNDCOLOR VARCHAR2(50),
STYLE_PT_LABEL_BACKGROUNDCOLOR VARCHAR2(50),
STYLE_PT_LABEL_BACKGROUNDSTYLE VARCHAR2(100),
STYLE_PT_LABEL_H_ALIGN VARCHAR2(50),
STYLE_PT_LABEL_V_ALIGN VARCHAR2(50),
STYLE_XML_LINE CLOB,
STYLE_LI_DISPLAY NUMBER(1) DEFAULT 1 NOT NULL,
STYLE_LI_SYMBOL_DISPLAY NUMBER(1) DEFAULT 1 NOT NULL,
STYLE_LI_SYMBOL_LINESTYLE VARCHAR2(100),
STYLE_LI_SYMBOL_THICKNESS VARCHAR2(100),
STYLE_LI_SYMBOL_COLOR VARCHAR2(50),
STYLE_LI_SYMBOL_UNIT VARCHAR2(100),
STYLE_LI_LABEL_DISPLAY NUMBER(1) DEFAULT 0 NOT NULL,
STYLE_LI_LABEL_UNIT VARCHAR2(100),
STYLE_LI_LABEL_SIZECONTEXT VARCHAR2(200),
STYLE_LI_LABEL_SIZE VARCHAR2(100),
STYLE_LI_LABEL_ROTATION VARCHAR2(100),
STYLE_LI_LABEL_TEXT VARCHAR2(500),
STYLE_LI_LABEL_FOREGROUNDCOLOR VARCHAR2(50),
STYLE_LI_LABEL_BACKGROUNDCOLOR VARCHAR2(50),
STYLE_LI_LABEL_BACKGROUNDSTYLE VARCHAR2(100),
STYLE_LI_LABEL_H_ALIGN VARCHAR2(50),
STYLE_LI_LABEL_V_ALIGN VARCHAR2(50),
STYLE_XML_AREA CLOB,
STYLE_AR_DISPLAY NUMBER(1) DEFAULT 1 NOT NULL,
STYLE_AR_FILL_DISPLAY NUMBER(1) DEFAULT 1 NOT NULL,
STYLE_AR_FILL_PATTERN VARCHAR2(200),
STYLE_AR_FILL_FOREGROUNDCOLOR VARCHAR2(50),
STYLE_AR_FILL_BACKGROUNDCOLOR VARCHAR2(50),
STYLE_AR_STROKE_DISPLAY NUMBER(1) DEFAULT 1 NOT NULL,
STYLE_AR_STROKE_LINESTYLE VARCHAR2(100),
STYLE_AR_STROKE_THICKNESS VARCHAR2(100),
STYLE_AR_STROKE_COLOR VARCHAR2(50),
STYLE_AR_STROKE_UNIT VARCHAR2(100),
STYLE_AR_LABEL_DISPLAY NUMBER(1) DEFAULT 0 NOT NULL,
STYLE_AR_LABEL_UNIT VARCHAR2(100),
STYLE_AR_LABEL_SIZECONTEXT VARCHAR2(200),
STYLE_AR_LABEL_SIZE VARCHAR2(100),
STYLE_AR_LABEL_ROTATION VARCHAR2(100),
STYLE_AR_LABEL_TEXT VARCHAR2(500),
STYLE_AR_LABEL_FOREGROUNDCOLOR VARCHAR2(50),
STYLE_AR_LABEL_BACKGROUNDCOLOR VARCHAR2(50),
STYLE_AR_LABEL_BACKGROUNDSTYLE VARCHAR2(100),
STYLE_AR_LABEL_H_ALIGN VARCHAR2(50),
STYLE_AR_LABEL_V_ALIGN VARCHAR2(50),
CREATED_AT TIMESTAMP,
CREATED_BY VARCHAR2(200),
UPDATED_AT TIMESTAMP,
UPDATED_BY VARCHAR2(200),
IS_START_SELECTED_IN_LEGEND NUMBER(1) DEFAULT 0 NOT NULL,
LEGEND_NAME VARCHAR2(500),
CONSTRAINT GWD_MG_USER_LAYER_SHAPEFILE_PK PRIMARY KEY (ID_MG_USER_LAYER_SHAPEFILE),
CONSTRAINT UNIQUE_NAME_LAYER_SHAPEFILE UNIQUE (NAME)
);
-- ============================================================
-- Tabella: GWD_MG_USER_LAYER_WMS
-- ============================================================
CREATE TABLE GWD_MG_USER_LAYER_WMS
(
ID_GWD_MG_USER_LAYER_WMS NUMBER(10) NOT NULL,
NAME VARCHAR2(500) NOT NULL,
DESCRIPTION VARCHAR2(2000),
GW_MAP_NAME VARCHAR2(500) NOT NULL,
BASE_URL VARCHAR2(2000) NOT NULL,
WMS_VERSION VARCHAR2(20),
WMS_AVAILABLE_LAYERS CLOB,
WMS_LAYERS VARCHAR2(2000),
WMS_JSON_PARAMS CLOB,
USERNAME VARCHAR2(200),
PASSWORD VARCHAR2(200),
IS_VALID NUMBER(1) DEFAULT 0 NOT NULL,
IS_VALID_HTML VARCHAR2(2000),
VALIDATION_MESSAGE VARCHAR2(2000),
CREATED_AT TIMESTAMP,
CREATED_BY VARCHAR2(200),
UPDATED_AT TIMESTAMP,
UPDATED_BY VARCHAR2(200),
WMS_GET_CAPABILITIES_XML CLOB,
IS_VISIBLE NUMBER(1) DEFAULT 0 NOT NULL,
IS_SHOWN_IN_LEGEND NUMBER(1) DEFAULT 0 NOT NULL,
IS_START_SELECTED_IN_LEGEND NUMBER(1) DEFAULT 0 NOT NULL,
LEGEND_NAME VARCHAR2(500),
CONSTRAINT GWD_MG_USER_LAYER_WMS_PK PRIMARY KEY (ID_GWD_MG_USER_LAYER_WMS),
CONSTRAINT UNIQUE_NAME_LAYER_WMS UNIQUE (NAME)
);
==== 12.3 SQL Server — data_script.sql ====
-- SV.0026.016 - Layout 2D: Layer Utente WMS + Shapefile
-- SQL Server DDL
-- Redattore: GSC Data: 2026-06-26
-- ============================================================
-- Tabella: GWD_MG_USER_LAYER_SHAPEFILE
-- ============================================================
IF OBJECT_ID(N'dbo.GWD_MG_USER_LAYER_SHAPEFILE', N'U') IS NULL
BEGIN
CREATE TABLE dbo.GWD_MG_USER_LAYER_SHAPEFILE
(
ID_MG_USER_LAYER_SHAPEFILE INT NOT NULL,
NAME NVARCHAR(500) NOT NULL,
DESCRIPTION NVARCHAR(2000),
GW_MAP_NAME NVARCHAR(500) NOT NULL,
FILE_NAME NVARCHAR(500) NOT NULL,
FILE_DATA VARBINARY(MAX) NOT NULL,
FILE_C_TYPE NVARCHAR(200) NOT NULL,
IS_VALID INT NOT NULL DEFAULT 0,
IS_VALID_HTML NVARCHAR(2000),
VALIDATION_MESSAGE NVARCHAR(2000),
IS_VISIBLE INT NOT NULL DEFAULT 0,
IS_SHOWN_IN_LEGEND INT NOT NULL DEFAULT 0,
LAYER_FILTER NVARCHAR(4000),
STYLE_XML_POINT NVARCHAR(MAX),
STYLE_PT_DISPLAY INT NOT NULL DEFAULT 1,
STYLE_PT_ALLOWOVERPOST INT NOT NULL DEFAULT 0,
STYLE_PT_SYMBOL_DISPLAY INT NOT NULL DEFAULT 1,
STYLE_PT_SYMBOL_SHAPE NVARCHAR(200),
STYLE_PT_SYMBOL_SIZE_CONTEXT NVARCHAR(200),
STYLE_PT_SYMBOL_UNIT NVARCHAR(100),
STYLE_PT_SYMBOL_WIDTH NVARCHAR(100),
STYLE_PT_SYMBOL_HEIGHT NVARCHAR(100),
STYLE_PT_SYMBOL_ROTATION NVARCHAR(100),
STYLE_PT_SYMBOL_FILL_DISPLAY INT NOT NULL DEFAULT 1,
STYLE_PT_SYMBOL_FILL_PATTERN NVARCHAR(200),
STYLE_PT_SYMBOL_FILL_FOREGROUNDCOLOR NVARCHAR(50),
STYLE_PT_SYMBOL_FILL_BACKGROUNDCOLOR NVARCHAR(50),
STYLE_PT_SYMBOL_EDGE_DISPLAY INT NOT NULL DEFAULT 1,
STYLE_PT_SYMBOL_EDGE_LINESTYLE NVARCHAR(100),
STYLE_PT_SYMBOL_EDGE_THICKNESS NVARCHAR(100),
STYLE_PT_SYMBOL_EDGE_COLOR NVARCHAR(50),
STYLE_PT_LABEL_DISPLAY INT NOT NULL DEFAULT 0,
STYLE_PT_LABEL_UNIT NVARCHAR(100),
STYLE_PT_LABEL_SIZECONTEXT NVARCHAR(200),
STYLE_PT_LABEL_SIZE NVARCHAR(100),
STYLE_PT_LABEL_ROTATION NVARCHAR(100),
STYLE_PT_LABEL_TEXT NVARCHAR(500),
STYLE_PT_LABEL_FOREGROUNDCOLOR NVARCHAR(50),
STYLE_PT_LABEL_BACKGROUNDCOLOR NVARCHAR(50),
STYLE_PT_LABEL_BACKGROUNDSTYLE NVARCHAR(100),
STYLE_PT_LABEL_H_ALIGN NVARCHAR(50),
STYLE_PT_LABEL_V_ALIGN NVARCHAR(50),
STYLE_XML_LINE NVARCHAR(MAX),
STYLE_LI_DISPLAY INT NOT NULL DEFAULT 1,
STYLE_LI_SYMBOL_DISPLAY INT NOT NULL DEFAULT 1,
STYLE_LI_SYMBOL_LINESTYLE NVARCHAR(100),
STYLE_LI_SYMBOL_THICKNESS NVARCHAR(100),
STYLE_LI_SYMBOL_COLOR NVARCHAR(50),
STYLE_LI_SYMBOL_UNIT NVARCHAR(100),
STYLE_LI_LABEL_DISPLAY INT NOT NULL DEFAULT 0,
STYLE_LI_LABEL_UNIT NVARCHAR(100),
STYLE_LI_LABEL_SIZECONTEXT NVARCHAR(200),
STYLE_LI_LABEL_SIZE NVARCHAR(100),
STYLE_LI_LABEL_ROTATION NVARCHAR(100),
STYLE_LI_LABEL_TEXT NVARCHAR(500),
STYLE_LI_LABEL_FOREGROUNDCOLOR NVARCHAR(50),
STYLE_LI_LABEL_BACKGROUNDCOLOR NVARCHAR(50),
STYLE_LI_LABEL_BACKGROUNDSTYLE NVARCHAR(100),
STYLE_LI_LABEL_H_ALIGN NVARCHAR(50),
STYLE_LI_LABEL_V_ALIGN NVARCHAR(50),
STYLE_XML_AREA NVARCHAR(MAX),
STYLE_AR_DISPLAY INT NOT NULL DEFAULT 1,
STYLE_AR_FILL_DISPLAY INT NOT NULL DEFAULT 1,
STYLE_AR_FILL_PATTERN NVARCHAR(200),
STYLE_AR_FILL_FOREGROUNDCOLOR NVARCHAR(50),
STYLE_AR_FILL_BACKGROUNDCOLOR NVARCHAR(50),
STYLE_AR_STROKE_DISPLAY INT NOT NULL DEFAULT 1,
STYLE_AR_STROKE_LINESTYLE NVARCHAR(100),
STYLE_AR_STROKE_THICKNESS NVARCHAR(100),
STYLE_AR_STROKE_COLOR NVARCHAR(50),
STYLE_AR_STROKE_UNIT NVARCHAR(100),
STYLE_AR_LABEL_DISPLAY INT NOT NULL DEFAULT 0,
STYLE_AR_LABEL_UNIT NVARCHAR(100),
STYLE_AR_LABEL_SIZECONTEXT NVARCHAR(200),
STYLE_AR_LABEL_SIZE NVARCHAR(100),
STYLE_AR_LABEL_ROTATION NVARCHAR(100),
STYLE_AR_LABEL_TEXT NVARCHAR(500),
STYLE_AR_LABEL_FOREGROUNDCOLOR NVARCHAR(50),
STYLE_AR_LABEL_BACKGROUNDCOLOR NVARCHAR(50),
STYLE_AR_LABEL_BACKGROUNDSTYLE NVARCHAR(100),
STYLE_AR_LABEL_H_ALIGN NVARCHAR(50),
STYLE_AR_LABEL_V_ALIGN NVARCHAR(50),
CREATED_AT DATETIME2,
CREATED_BY NVARCHAR(200),
UPDATED_AT DATETIME2,
UPDATED_BY NVARCHAR(200),
IS_START_SELECTED_IN_LEGEND INT NOT NULL DEFAULT 0,
LEGEND_NAME NVARCHAR(500),
CONSTRAINT GWD_MG_USER_LAYER_SHAPEFILE_PK PRIMARY KEY (ID_MG_USER_LAYER_SHAPEFILE),
CONSTRAINT UNIQUE_NAME_LAYER_SHAPEFILE UNIQUE (NAME)
);
END
GO
-- ============================================================
-- Tabella: GWD_MG_USER_LAYER_WMS
-- ============================================================
IF OBJECT_ID(N'dbo.GWD_MG_USER_LAYER_WMS', N'U') IS NULL
BEGIN
CREATE TABLE dbo.GWD_MG_USER_LAYER_WMS
(
ID_GWD_MG_USER_LAYER_WMS INT NOT NULL,
NAME NVARCHAR(500) NOT NULL,
DESCRIPTION NVARCHAR(2000),
GW_MAP_NAME NVARCHAR(500) NOT NULL,
BASE_URL NVARCHAR(2000) NOT NULL,
WMS_VERSION NVARCHAR(20),
WMS_AVAILABLE_LAYERS NVARCHAR(MAX),
WMS_LAYERS NVARCHAR(2000),
WMS_JSON_PARAMS NVARCHAR(MAX),
USERNAME NVARCHAR(200),
PASSWORD NVARCHAR(200),
IS_VALID INT NOT NULL DEFAULT 0,
IS_VALID_HTML NVARCHAR(2000),
VALIDATION_MESSAGE NVARCHAR(2000),
CREATED_AT DATETIME2,
CREATED_BY NVARCHAR(200),
UPDATED_AT DATETIME2,
UPDATED_BY NVARCHAR(200),
WMS_GET_CAPABILITIES_XML NVARCHAR(MAX),
IS_VISIBLE INT NOT NULL DEFAULT 0,
IS_SHOWN_IN_LEGEND INT NOT NULL DEFAULT 0,
IS_START_SELECTED_IN_LEGEND INT NOT NULL DEFAULT 0,
LEGEND_NAME NVARCHAR(500),
CONSTRAINT GWD_MG_USER_LAYER_WMS_PK PRIMARY KEY (ID_GWD_MG_USER_LAYER_WMS),
CONSTRAINT UNIQUE_NAME_LAYER_WMS UNIQUE (NAME)
);
END
GO
===== 15. Script SQL — Metadata Schema =====
Script DDL per l'aggiornamento dello schema metadati GeoWeb (tabelle ''gwm_*''). Eseguire dopo il ''data_script'' e prima dell'importazione dei metadati GeoWeb.
Il campo ''layout'' della tabella ''gwm_detail_layouts'' viene ampliato a tipo illimitato (TEXT / CLOB / NVARCHAR(MAX)) per supportare definizioni di layout di grandi dimensioni prodotte dalla configurazione dei layer utente.
==== 13.1 PostgreSQL — metadata_script.sql ====
-- SV.0026.016 - Layout 2D: Layer Utente WMS + Shapefile
-- PostgreSQL -- script metadati (schema gwm)
-- Redattore: GSC Data: 2026-06-26
--
-- Il campo layout della tabella gwm_detail_layouts viene ampliato
-- a TEXT (lunghezza illimitata).
-- PostgreSQL: ALTER COLUMN ... TYPE TEXT non richiede migrazione dati
-- (VARCHAR e TEXT sono internamente equivalenti, l'operazione e' istantanea).
-- ------------------------------------------------------------
ALTER TABLE test_gw48metadata.gwm_detail_layouts
ALTER COLUMN layout TYPE TEXT;
==== 13.2 Oracle — metadata_script.sql ====
-- SV.0026.016 - Layout 2D: Layer Utente WMS + Shapefile
-- Oracle -- script metadati (schema gwm)
-- Redattore: GSC Data: 2026-06-26
--
-- Il campo LAYOUT della tabella GWM_DETAIL_LAYOUTS viene migrato a CLOB.
-- NOTA: Oracle non consente ALTER TABLE ... MODIFY diretto da VARCHAR2 a CLOB.
-- E' necessaria la migrazione in 4 step senza perdita di dati.
-- ------------------------------------------------------------
-- Step 1: aggiungo colonna CLOB temporanea
ALTER TABLE GWM_DETAIL_LAYOUTS ADD (LAYOUT_TMP CLOB);
-- Step 2: copio i dati nella nuova colonna
UPDATE GWM_DETAIL_LAYOUTS
SET LAYOUT_TMP = LAYOUT;
COMMIT;
-- Step 3: elimino la colonna originale VARCHAR2
ALTER TABLE GWM_DETAIL_LAYOUTS DROP COLUMN LAYOUT;
-- Step 4: rinomino la colonna temporanea al nome originale
ALTER TABLE GWM_DETAIL_LAYOUTS RENAME COLUMN LAYOUT_TMP TO LAYOUT;
==== 13.3 SQL Server — metadata_script.sql ====
-- SV.0026.016 - Layout 2D: Layer Utente WMS + Shapefile
-- SQL Server -- script metadati (schema gwm)
-- Redattore: GSC Data: 2026-06-26
--
-- Il campo [layout] della tabella [gwm_detail_layouts] viene ampliato
-- a NVARCHAR(MAX) per supportare definizioni di layout di grandi dimensioni.
-- ------------------------------------------------------------
ALTER TABLE test_gw48metadata.[gwm_detail_layouts]
ALTER COLUMN [layout] NVARCHAR(MAX) NULL;
===== 16. Installazione =====
Eseguire i passi nell'ordine indicato:
- Eseguire ''DR/script//data_script.sql'' — crea le tabelle applicative
- Eseguire ''DR/script//metadata_script.sql'' — aggiorna lo schema metadati GeoWeb
- Importare i file XML da ''DR/metadata/'' tramite il Webadmin GeoWeb (Import/Export metadati):
* ''gw_exp.classes gwd_mg_user_layer_shapefile+gwd_mg_user_layer_wms.xml''
* ''gw_exp.projects mg_user_layer.xml''
* ''gw_exp.themes MAPGUIDE USER LAYER E SCENARIO.xml''
- Verificare le entry EhCache in ''ehcache.xml'': ''retrieveValidUserWmsLayersForMap'', ''retrieveValidUserShapefileLayersForMap''
- Verificare nel Webadmin GeoWeb che i trigger ''MapGuideUserLayerShapeFileTrigger'' e ''MapGuideUserLayerWMSTrigger'' siano associati alle rispettive classi