====== 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