Revision 8518

View differences:

org.gvsig.vcsgis/tags/org.gvsig.vcsgis-1.0.105/org.gvsig.vcsgis.lib/org.gvsig.vcsgis.lib.impl/src/main/resources/META-INF/services/org.gvsig.tools.library.Library
1
org.gvsig.vcsgis.lib.VCSGisLibraryImpl
org.gvsig.vcsgis/tags/org.gvsig.vcsgis-1.0.105/org.gvsig.vcsgis.lib/org.gvsig.vcsgis.lib.impl/src/main/resources/org/gvsig/vcsgis/lib/PostgreSQL.sql
1
@begin createRepositoryIndex1
2
create index if not exists "idx_data_1" on "VCSGISREPO_DATA" ("COD_ENTITY" ASC, "DAT_REVNUMBER" ASC)
3
@end createRepositoryIndex1
4

  
5
@begin createRepositoryIndex2
6
create index if not exists "idx_data_2" on "VCSGISREPO_DATA" ("DAT_FEATURERELATEDCODE" ASC, "DAT_REVNUMBER" ASC, "DAT_OPERATION" ASC)
7
@end createRepositoryIndex2
8

  
9
@begin getDataOfEntityFromRevisionNumber
10
select * from "VCSGISREPO_DATA" where "VCSGISREPO_DATA"."COD_DATA" in (
11
	select 
12
	  MIN("VCSGISREPO_DATA1"."COD_DATA")
13
	from "VCSGISREPO_DATA" "VCSGISREPO_DATA1"
14
	  left join "VCSGISREPO_DATA" "VCSGISREPO_DATA2" on
15
	    "VCSGISREPO_DATA1"."DAT_FEATURERELATEDCODE" = "VCSGISREPO_DATA2"."DAT_FEATURERELATEDCODE"
16
	    and "VCSGISREPO_DATA2"."DAT_REVNUMBER" > %1$d 
17
	where 
18
	  "VCSGISREPO_DATA1"."COD_ENTITY" = '%2$s'
19
	  and "VCSGISREPO_DATA1"."DAT_REVNUMBER" > %1$d   
20
	group by "VCSGISREPO_DATA1"."DAT_FEATURERELATEDCODE", "VCSGISREPO_DATA1"."DAT_REVNUMBER", "VCSGISREPO_DATA1"."DAT_OPERATION"
21
	having not (
22
	  ("VCSGISREPO_DATA1"."DAT_OPERATION" = 0 and MAX("VCSGISREPO_DATA2"."DAT_OPERATION") = 2 )
23
	  or  ("VCSGISREPO_DATA1"."DAT_OPERATION" = 1 and MIN("VCSGISREPO_DATA2"."DAT_OPERATION") = 0 )
24
	  or  ("VCSGISREPO_DATA1"."DAT_OPERATION" = 2 and (MIN("VCSGISREPO_DATA2"."DAT_OPERATION") = 0  or max("VCSGISREPO_DATA2"."DAT_OPERATION") = 1 or min("VCSGISREPO_DATA2"."DAT_OPERATION") = 1 ))
25
	  or  ("VCSGISREPO_DATA1"."DAT_OPERATION" = 0 and MIN("VCSGISREPO_DATA2"."DAT_OPERATION") <> 0  and "VCSGISREPO_DATA1"."DAT_REVNUMBER" < max("VCSGISREPO_DATA2"."DAT_REVNUMBER"))
26
	  or  ("VCSGISREPO_DATA1"."DAT_OPERATION" = 1 and (max("VCSGISREPO_DATA2"."DAT_OPERATION") = 1 or min("VCSGISREPO_DATA2"."DAT_OPERATION") = 1) and "VCSGISREPO_DATA1"."DAT_REVNUMBER" < max("VCSGISREPO_DATA2"."DAT_REVNUMBER"))
27
	  or  ("VCSGISREPO_DATA1"."DAT_OPERATION" = 2 and max("VCSGISREPO_DATA2"."DAT_OPERATION") = 2 and "VCSGISREPO_DATA1"."DAT_REVNUMBER" < max("VCSGISREPO_DATA2"."DAT_REVNUMBER"))  )
28
)
29
order by "VCSGISREPO_DATA"."DAT_OPERATION" desc
30
@end getDataOfEntityFromRevisionNumber
31

  
32
@begin getDataOfEntityToRevisionNumber
33
select * from "VCSGISREPO_DATA" where "VCSGISREPO_DATA"."COD_DATA" in (
34
	select 
35
	  MIN("VCSGISREPO_DATA1"."COD_DATA")
36
	from "VCSGISREPO_DATA" "VCSGISREPO_DATA1"
37
	  left join "VCSGISREPO_DATA" "VCSGISREPO_DATA2" on
38
	    "VCSGISREPO_DATA1"."DAT_FEATURERELATEDCODE" = "VCSGISREPO_DATA2"."DAT_FEATURERELATEDCODE"
39
	    and "VCSGISREPO_DATA2"."DAT_REVNUMBER" <= %1$d 
40
	where 
41
	  "VCSGISREPO_DATA1"."COD_ENTITY" = '%2$s'
42
	  and "VCSGISREPO_DATA1"."DAT_REVNUMBER" <= %1$d   
43
	group by "VCSGISREPO_DATA1"."DAT_FEATURERELATEDCODE", "VCSGISREPO_DATA1"."DAT_REVNUMBER", "VCSGISREPO_DATA1"."DAT_OPERATION"
44
	having not (
45
	  ("VCSGISREPO_DATA1"."DAT_OPERATION" = 0 and MAX("VCSGISREPO_DATA2"."DAT_OPERATION") = 2 )
46
	  or  ("VCSGISREPO_DATA1"."DAT_OPERATION" = 1 and MIN("VCSGISREPO_DATA2"."DAT_OPERATION") = 0 )
47
	  or  ("VCSGISREPO_DATA1"."DAT_OPERATION" = 2 and (MIN("VCSGISREPO_DATA2"."DAT_OPERATION") = 0  or max("VCSGISREPO_DATA2"."DAT_OPERATION") = 1 or min("VCSGISREPO_DATA2"."DAT_OPERATION") = 1 ))
48
	  or  ("VCSGISREPO_DATA1"."DAT_OPERATION" = 0 and MIN("VCSGISREPO_DATA2"."DAT_OPERATION") <> 0  and "VCSGISREPO_DATA1"."DAT_REVNUMBER" < max("VCSGISREPO_DATA2"."DAT_REVNUMBER"))
49
	  or  ("VCSGISREPO_DATA1"."DAT_OPERATION" = 1 and (max("VCSGISREPO_DATA2"."DAT_OPERATION") = 1 or min("VCSGISREPO_DATA2"."DAT_OPERATION") = 1) and "VCSGISREPO_DATA1"."DAT_REVNUMBER" < max("VCSGISREPO_DATA2"."DAT_REVNUMBER"))
50
	  or  ("VCSGISREPO_DATA1"."DAT_OPERATION" = 2 and max("VCSGISREPO_DATA2"."DAT_OPERATION") = 2 and "VCSGISREPO_DATA1"."DAT_REVNUMBER" < max("VCSGISREPO_DATA2"."DAT_REVNUMBER"))  )
51
)
52
order by "VCSGISREPO_DATA"."DAT_OPERATION" desc
53
@end getDataOfEntityToRevisionNumber
54

  
55
@begin getDataOfEntityFromEfectiveDate
56
select * from "VCSGISREPO_DATA" where "VCSGISREPO_DATA"."COD_DATA" in (
57
	select 
58
	  MIN("VCSGISREPO_DATA1"."COD_DATA")
59
	from "VCSGISREPO_DATA" "VCSGISREPO_DATA1"
60
	  left join "VCSGISREPO_DATA" "VCSGISREPO_DATA2" on
61
	    "VCSGISREPO_DATA1"."DAT_FEATURERELATEDCODE" = "VCSGISREPO_DATA2"."DAT_FEATURERELATEDCODE"
62
	    and "VCSGISREPO_DATA2"."DAT_EFECTIVEDATE" <= to_date('%2$s', 'YYYY-MM-DD HH24:MI:SS') 
63
	where 
64
	  "VCSGISREPO_DATA1"."COD_ENTITY" = '%1$s'
65
	  and "VCSGISREPO_DATA1"."DAT_EFECTIVEDATE" <= to_date('%2$s', 'YYYY-MM-DD HH24:MI:SS')   
66
	group by "VCSGISREPO_DATA1"."DAT_FEATURERELATEDCODE", "VCSGISREPO_DATA1"."DAT_EFECTIVEDATE", "VCSGISREPO_DATA1"."DAT_REVNUMBER", "VCSGISREPO_DATA1"."DAT_OPERATION"
67
	having not (
68
	  ("VCSGISREPO_DATA1"."DAT_OPERATION" = 0 )
69
	  or  ("VCSGISREPO_DATA1"."DAT_OPERATION" = 1 and MIN("VCSGISREPO_DATA2"."DAT_OPERATION") = 0 )
70
	  or  ("VCSGISREPO_DATA1"."DAT_OPERATION" = 2 and (MIN("VCSGISREPO_DATA2"."DAT_OPERATION") = 0  or max("VCSGISREPO_DATA2"."DAT_OPERATION") = 1 or min("VCSGISREPO_DATA2"."DAT_OPERATION") = 1 ))
71
	  or  ("VCSGISREPO_DATA1"."DAT_OPERATION" = 1 and (max("VCSGISREPO_DATA2"."DAT_OPERATION") = 1 or min("VCSGISREPO_DATA2"."DAT_OPERATION") = 1) and "VCSGISREPO_DATA1"."DAT_EFECTIVEDATE" <= max("VCSGISREPO_DATA2"."DAT_EFECTIVEDATE") and "VCSGISREPO_DATA1"."DAT_REVNUMBER" <> max("VCSGISREPO_DATA2"."DAT_REVNUMBER"))
72
	  or  ("VCSGISREPO_DATA1"."DAT_OPERATION" = 2 and max("VCSGISREPO_DATA2"."DAT_OPERATION") = 2 and "VCSGISREPO_DATA1"."DAT_EFECTIVEDATE" <= max("VCSGISREPO_DATA2"."DAT_EFECTIVEDATE") and "VCSGISREPO_DATA1"."DAT_REVNUMBER" <> max("VCSGISREPO_DATA2"."DAT_REVNUMBER"))  )
73
)
74
@end getDataOfEntityFromEfectiveDate
75

  
76
@begin dateFormat
77
yyyy-MM-dd HH:mm:ss
78
@end dateFormat
79

  
80
@begin createWorkspaceIndex1
81
create "index" if not exists "idx_wschanges_1" on "VCSGIS_WSCHANGES" ("COD_ENTITY" ASC, "WSCH_OPERATION" DESC, "COD_WSCHANGE" ASC)
82
@end createWorkspaceIndex1
83

  
84
@begin createWorkspaceIndex2
85
create index if not exists "idx_wschanges_2" on "VCSGIS_WSCHANGES" ("WSCH_SELECTED" ASC, "WSCH_OPERATION" ASC)
86
@end createWorkspaceIndex2
87

  
88
@begin createWorkspaceIndex3
89
create index if not exists "idx_remotechanges_3" on "VCSGIS_REMOTECHANGES" ("COD_ENTITY" ASC, "RCH_SELECTED" ASC)
90
@end createWorkspaceIndex3
91

  
92
@begin updateStateFromLocalChanges
93
-- status
94
update "VCSGIS_REMOTECHANGES" 
95
set "RCH_STATUS" = %1$d 
96
where exists (select 1 from "VCSGIS_WSCHANGES" where "RCH_DATACODE" = "WSCH_FEATURECODE" LIMIT 1)
97
@end updateStateFromLocalChanges
98

  
99
@begin removeLocalChangesRelatedToSelectedRemoteChanges
100
-- entityCode
101
delete from "VCSGIS_WSCHANGES" 
102
where "COD_ENTITY" = '%1$s' and "WSCH_FEATURECODE" in (
103
    select "RCH_DATACODE" from "VCSGIS_REMOTECHANGES" where "RCH_DATACODE" = "WSCH_FEATURECODE" and CAST("RCH_SELECTED" as INT)=1)
104
@end removeLocalChangesRelatedToSelectedRemoteChanges
105

  
106
@begin getChangesWidthUserData
107
-- EntityName
108
-- FeatureIdFieldName (VCSGISCODE)
109
-- RelatedFeatureCode
110
-- filter
111
SELECT * FROM "VCSGIS_WSCHANGES" left join "%1$s" on "WSCH_FEATURECODE" = "%2$s" WHERE "%2$s" <> '%3$s' AND (%4$s)
112
@end getChangesWidthUserData
113

  
114

  
115

  
116
@begin alterTableAddColumnVCSGISCODE
117
-- EntityName
118
ALTER TABLE "%1$s" ADD COLUMN "VCSGISCODE" VARCHAR(40)
119
@end alterTableAddColumnVCSGISCODE
120

  
121
@begin alterTableDropPrimaryKey
122
-- EntityName
123
ALTER TABLE "%1$s" DROP PRIMARY KEY
124
@end alterTableDropPrimaryKey
125

  
126
@begin alterTableAlterColumnVCSGISCODESetNotNull
127
-- EntityName
128
ALTER TABLE "%1$s" ALTER COLUMN "VCSGISCODE" SET NOT NULL
129
@end alterTableAlterColumnVCSGISCODESetNotNull
130

  
131
@begin alterTableAddPrimaryKeyVCSGISCODE
132
-- EntityName
133
ALTER TABLE "%1$s" ADD PRIMARY KEY ("VCSGISCODE")
134
@end alterTableAddPrimaryKeyVCSGISCODE
135

  
136
@begin defaultCheckoutMode
137
USESELECT (posible values USEDBFUNCTION, USESELECT, USEAPPFILTER)
138
@end defaultCheckoutMode
org.gvsig.vcsgis/tags/org.gvsig.vcsgis-1.0.105/org.gvsig.vcsgis.lib/org.gvsig.vcsgis.lib.impl/src/main/resources/org/gvsig/vcsgis/lib/Oracle.sql
1
@begin createRepositoryIndex1
2
create index idx_data_1 on VCSGISREPO_DATA (COD_ENTITY ASC, DAT_REVNUMBER ASC)
3
@end createRepositoryIndex1
4

  
5
@begin createRepositoryIndex2
6
create index idx_data_2 on VCSGISREPO_DATA (DAT_FEATURERELATEDCODE ASC, DAT_REVNUMBER ASC, DAT_OPERATION ASC)
7
@end createRepositoryIndex2
8

  
9
@begin getDataOfEntityFromRevisionNumber
10
@param revision_number
11
@param entity_code
12
@param data_table_name
13
select * from "%data_table_name$s" where
14
        "%data_table_name$s"."COD_ENTITY" = '%entity_code$s' AND
15
        "%data_table_name$s"."COD_DATA" in (
16
	select 
17
	  MIN("VCSGISREPO_DATA1"."COD_DATA")
18
	from "%data_table_name$s" "VCSGISREPO_DATA1"
19
	  left join "%data_table_name$s" "VCSGISREPO_DATA2" on
20
	    ("VCSGISREPO_DATA1"."DAT_FEATURERELATEDCODE" = "VCSGISREPO_DATA2"."DAT_FEATURERELATEDCODE" and "VCSGISREPO_DATA1"."COD_ENTITY" = "VCSGISREPO_DATA2"."COD_ENTITY")
21
	    and "VCSGISREPO_DATA2"."DAT_REVNUMBER" > %revision_number$d 
22
	where 
23
	  "VCSGISREPO_DATA1"."COD_ENTITY" = '%entity_code$s'
24
	  and "VCSGISREPO_DATA1"."DAT_REVNUMBER" > %revision_number$d   
25
	group by "VCSGISREPO_DATA1"."DAT_FEATURERELATEDCODE", "VCSGISREPO_DATA1"."DAT_REVNUMBER", "VCSGISREPO_DATA1"."DAT_OPERATION"
26
	having not (
27
	  ("VCSGISREPO_DATA1"."DAT_OPERATION" = 0 and MAX("VCSGISREPO_DATA2"."DAT_OPERATION") = 2 )
28
	  or  ("VCSGISREPO_DATA1"."DAT_OPERATION" = 1 and MIN("VCSGISREPO_DATA2"."DAT_OPERATION") = 0 )
29
	  or  ("VCSGISREPO_DATA1"."DAT_OPERATION" = 2 and (MIN("VCSGISREPO_DATA2"."DAT_OPERATION") = 0  or max("VCSGISREPO_DATA2"."DAT_OPERATION") = 1 or min("VCSGISREPO_DATA2"."DAT_OPERATION") = 1 ))
30
	  or  ("VCSGISREPO_DATA1"."DAT_OPERATION" = 0 and MIN("VCSGISREPO_DATA2"."DAT_OPERATION") <> 0  and "VCSGISREPO_DATA1"."DAT_REVNUMBER" < max("VCSGISREPO_DATA2"."DAT_REVNUMBER"))
31
	  or  ("VCSGISREPO_DATA1"."DAT_OPERATION" = 1 and (max("VCSGISREPO_DATA2"."DAT_OPERATION") = 1 or min("VCSGISREPO_DATA2"."DAT_OPERATION") = 1) and "VCSGISREPO_DATA1"."DAT_REVNUMBER" < max("VCSGISREPO_DATA2"."DAT_REVNUMBER"))
32
	  or  ("VCSGISREPO_DATA1"."DAT_OPERATION" = 2 and max("VCSGISREPO_DATA2"."DAT_OPERATION") = 2 and "VCSGISREPO_DATA1"."DAT_REVNUMBER" < max("VCSGISREPO_DATA2"."DAT_REVNUMBER"))  )
33
)
34
order by "VCSGISREPO_DATA"."DAT_OPERATION" desc
35
@end getDataOfEntityFromRevisionNumber
36

  
37
@begin getDataOfEntityToRevisionNumber
38
@param revision_number
39
@param entity_code
40
@param data_table_name
41
select * from "%data_table_name$s" where 
42
        "%data_table_name$s"."COD_ENTITY" = '%entity_code$s' AND
43
        "%data_table_name$s"."COD_DATA" in (
44
	select 
45
	  MIN("VCSGISREPO_DATA1"."COD_DATA")
46
	from "%data_table_name$s" "VCSGISREPO_DATA1"
47
	  left join "%data_table_name$s" "VCSGISREPO_DATA2" on
48
	    ("VCSGISREPO_DATA1"."DAT_FEATURERELATEDCODE" = "VCSGISREPO_DATA2"."DAT_FEATURERELATEDCODE" and "VCSGISREPO_DATA1"."COD_ENTITY" = "VCSGISREPO_DATA2"."COD_ENTITY")
49
	    and "VCSGISREPO_DATA2"."DAT_REVNUMBER" <= %revision_number$d 
50
	where 
51
	  "VCSGISREPO_DATA1"."COD_ENTITY" = '%entity_code$s'
52
	  and "VCSGISREPO_DATA1"."DAT_REVNUMBER" <= %revision_number$d   
53
	group by "VCSGISREPO_DATA1"."DAT_FEATURERELATEDCODE", "VCSGISREPO_DATA1"."DAT_REVNUMBER", "VCSGISREPO_DATA1"."DAT_OPERATION"
54
	having not (
55
	  ("VCSGISREPO_DATA1"."DAT_OPERATION" = 0 and MAX("VCSGISREPO_DATA2"."DAT_OPERATION") = 2 )
56
	  or  ("VCSGISREPO_DATA1"."DAT_OPERATION" = 1 and MIN("VCSGISREPO_DATA2"."DAT_OPERATION") = 0 )
57
	  or  ("VCSGISREPO_DATA1"."DAT_OPERATION" = 2 and (MIN("VCSGISREPO_DATA2"."DAT_OPERATION") = 0  or max("VCSGISREPO_DATA2"."DAT_OPERATION") = 1 or min("VCSGISREPO_DATA2"."DAT_OPERATION") = 1 ))
58
	  or  ("VCSGISREPO_DATA1"."DAT_OPERATION" = 0 and MIN("VCSGISREPO_DATA2"."DAT_OPERATION") <> 0  and "VCSGISREPO_DATA1"."DAT_REVNUMBER" < max("VCSGISREPO_DATA2"."DAT_REVNUMBER"))
59
	  or  ("VCSGISREPO_DATA1"."DAT_OPERATION" = 1 and (max("VCSGISREPO_DATA2"."DAT_OPERATION") = 1 or min("VCSGISREPO_DATA2"."DAT_OPERATION") = 1) and "VCSGISREPO_DATA1"."DAT_REVNUMBER" < max("VCSGISREPO_DATA2"."DAT_REVNUMBER"))
60
	  or  ("VCSGISREPO_DATA1"."DAT_OPERATION" = 2 and max("VCSGISREPO_DATA2"."DAT_OPERATION") = 2 and "VCSGISREPO_DATA1"."DAT_REVNUMBER" < max("VCSGISREPO_DATA2"."DAT_REVNUMBER"))  )
61
)
62
order by "VCSGISREPO_DATA"."DAT_OPERATION" desc
63
@end getDataOfEntityToRevisionNumber
64

  
65

  
66
@begin getDataOfEntityToRevisionNumberAndRoi
67
@param revision_number
68
@param entity_code
69
@param roi
70
@param data_table_name
71
select * from "%data_table_name$s" where 
72
        "%data_table_name$s"."COD_ENTITY" = '%entity_code$s'
73
        and (SDO_RELATE("VCSGISREPO_DATA"."DAT_GEOM",%roi$s,'mask=ANYINTERACT') = 'TRUE')
74
        and "%data_table_name$s"."COD_DATA" in (
75
	select 
76
	  MIN("VCSGISREPO_DATA1"."COD_DATA")
77
	from "%data_table_name$s" "VCSGISREPO_DATA1"
78
	  left join "%data_table_name$s" "VCSGISREPO_DATA2" on
79
	    ("VCSGISREPO_DATA1"."DAT_FEATURERELATEDCODE" = "VCSGISREPO_DATA2"."DAT_FEATURERELATEDCODE" and "VCSGISREPO_DATA1"."COD_ENTITY" = "VCSGISREPO_DATA2"."COD_ENTITY")
80
	    and "VCSGISREPO_DATA2"."DAT_REVNUMBER" <= %revision_number$d 
81
	where 
82
	  "VCSGISREPO_DATA1"."COD_ENTITY" = '%entity_code$s'
83
	  and "VCSGISREPO_DATA1"."DAT_REVNUMBER" <= %revision_number$d   
84
          and (SDO_RELATE("VCSGISREPO_DATA1"."DAT_GEOM",%roi$s,'mask=ANYINTERACT') = 'TRUE') 
85
	group by "VCSGISREPO_DATA1"."DAT_FEATURERELATEDCODE", "VCSGISREPO_DATA1"."DAT_REVNUMBER", "VCSGISREPO_DATA1"."DAT_OPERATION"
86
	having not (
87
	  ("VCSGISREPO_DATA1"."DAT_OPERATION" = 0 and MAX("VCSGISREPO_DATA2"."DAT_OPERATION") = 2 )
88
	  or  ("VCSGISREPO_DATA1"."DAT_OPERATION" = 1 and MIN("VCSGISREPO_DATA2"."DAT_OPERATION") = 0 )
89
	  or  ("VCSGISREPO_DATA1"."DAT_OPERATION" = 2 and (MIN("VCSGISREPO_DATA2"."DAT_OPERATION") = 0  or max("VCSGISREPO_DATA2"."DAT_OPERATION") = 1 or min("VCSGISREPO_DATA2"."DAT_OPERATION") = 1 ))
90
	  or  ("VCSGISREPO_DATA1"."DAT_OPERATION" = 0 and MIN("VCSGISREPO_DATA2"."DAT_OPERATION") <> 0  and "VCSGISREPO_DATA1"."DAT_REVNUMBER" < max("VCSGISREPO_DATA2"."DAT_REVNUMBER"))
91
	  or  ("VCSGISREPO_DATA1"."DAT_OPERATION" = 1 and (max("VCSGISREPO_DATA2"."DAT_OPERATION") = 1 or min("VCSGISREPO_DATA2"."DAT_OPERATION") = 1) and "VCSGISREPO_DATA1"."DAT_REVNUMBER" < max("VCSGISREPO_DATA2"."DAT_REVNUMBER"))
92
	  or  ("VCSGISREPO_DATA1"."DAT_OPERATION" = 2 and max("VCSGISREPO_DATA2"."DAT_OPERATION") = 2 and "VCSGISREPO_DATA1"."DAT_REVNUMBER" < max("VCSGISREPO_DATA2"."DAT_REVNUMBER"))  )
93
)
94
order by "VCSGISREPO_DATA"."DAT_OPERATION" desc
95
@end getDataOfEntityToRevisionNumberAndRoi
96

  
97
@begin getDataOfEntityFromEfectiveDate
98
@param entity_code
99
@param efective_date
100
@param data_table_name
101
select * from "%data_table_name$s" where 
102
        "%data_table_name$s"."COD_ENTITY" = '%entity_code$s' AND
103
        "%data_table_name$s"."COD_DATA" in (
104
	select 
105
	  MIN("VCSGISREPO_DATA1"."COD_DATA")
106
	from "%data_table_name$s" "VCSGISREPO_DATA1"
107
	  left join "%data_table_name$s" "VCSGISREPO_DATA2" on
108
	    ("VCSGISREPO_DATA1"."DAT_FEATURERELATEDCODE" = "VCSGISREPO_DATA2"."DAT_FEATURERELATEDCODE" and "VCSGISREPO_DATA1"."COD_ENTITY" = "VCSGISREPO_DATA2"."COD_ENTITY")
109
	    and "VCSGISREPO_DATA2"."DAT_EFECTIVEDATE" <= to_date('%efective_date$s', 'YYYY-MM-DD HH24:MI:SS') 
110
	where 
111
	  "VCSGISREPO_DATA1"."COD_ENTITY" = '%entity_code$s'
112
	  and "VCSGISREPO_DATA1"."DAT_EFECTIVEDATE" <= to_date('%efective_date$s', 'YYYY-MM-DD HH24:MI:SS')   
113
	group by "VCSGISREPO_DATA1"."DAT_FEATURERELATEDCODE", "VCSGISREPO_DATA1"."DAT_EFECTIVEDATE", "VCSGISREPO_DATA1"."DAT_REVNUMBER", "VCSGISREPO_DATA1"."DAT_OPERATION"
114
	having not (
115
	  ("VCSGISREPO_DATA1"."DAT_OPERATION" = 0 )
116
	  or  ("VCSGISREPO_DATA1"."DAT_OPERATION" = 1 and MIN("VCSGISREPO_DATA2"."DAT_OPERATION") = 0 )
117
	  or  ("VCSGISREPO_DATA1"."DAT_OPERATION" = 2 and (MIN("VCSGISREPO_DATA2"."DAT_OPERATION") = 0  or max("VCSGISREPO_DATA2"."DAT_OPERATION") = 1 or min("VCSGISREPO_DATA2"."DAT_OPERATION") = 1 ))
118
	  or  ("VCSGISREPO_DATA1"."DAT_OPERATION" = 1 and (max("VCSGISREPO_DATA2"."DAT_OPERATION") = 1 or min("VCSGISREPO_DATA2"."DAT_OPERATION") = 1) and "VCSGISREPO_DATA1"."DAT_EFECTIVEDATE" <= max("VCSGISREPO_DATA2"."DAT_EFECTIVEDATE") and "VCSGISREPO_DATA1"."DAT_REVNUMBER" <> max("VCSGISREPO_DATA2"."DAT_REVNUMBER"))
119
	  or  ("VCSGISREPO_DATA1"."DAT_OPERATION" = 2 and max("VCSGISREPO_DATA2"."DAT_OPERATION") = 2 and "VCSGISREPO_DATA1"."DAT_EFECTIVEDATE" <= max("VCSGISREPO_DATA2"."DAT_EFECTIVEDATE") and "VCSGISREPO_DATA1"."DAT_REVNUMBER" <> max("VCSGISREPO_DATA2"."DAT_REVNUMBER"))  )
120
)
121
@end getDataOfEntityFromEfectiveDate
122

  
123
@begin getDataOfEntityFromEfectiveDateAndRoi
124
@param entity_code
125
@param efective_date
126
@param roi
127
@param data_table_name
128
@const DELETE=0
129
@const UPDATE=1
130
@const INSERT=2
131
select * from "%data_table_name$s" where 
132
        "%data_table_name$s"."COD_ENTITY" = '%entity_code$s'
133
        and (SDO_RELATE("VCSGISREPO_DATA"."DAT_GEOM",%roi$s,'mask=ANYINTERACT') = 'TRUE') 
134
        and "%data_table_name$s"."COD_DATA" in (
135
	select 
136
	  MIN("VCSGISREPO_DATA1"."COD_DATA")
137
	from "%data_table_name$s" "VCSGISREPO_DATA1"
138
	  left join "%data_table_name$s" "VCSGISREPO_DATA2" on
139
	    ("VCSGISREPO_DATA1"."DAT_FEATURERELATEDCODE" = "VCSGISREPO_DATA2"."DAT_FEATURERELATEDCODE" and "VCSGISREPO_DATA1"."COD_ENTITY" = "VCSGISREPO_DATA2"."COD_ENTITY")
140
	    and "VCSGISREPO_DATA2"."DAT_EFECTIVEDATE" <= to_date('%efective_date$s', 'YYYY-MM-DD HH24:MI:SS') 
141
	where 
142
	  "VCSGISREPO_DATA1"."COD_ENTITY" = '%entity_code$s'
143
	  and "VCSGISREPO_DATA1"."DAT_EFECTIVEDATE" <= to_date('%efective_date$s', 'YYYY-MM-DD HH24:MI:SS')   
144
          and (SDO_RELATE("VCSGISREPO_DATA1"."DAT_GEOM",%roi$s,'mask=ANYINTERACT') = 'TRUE')
145
	group by "VCSGISREPO_DATA1"."DAT_FEATURERELATEDCODE", "VCSGISREPO_DATA1"."DAT_EFECTIVEDATE", "VCSGISREPO_DATA1"."DAT_REVNUMBER", "VCSGISREPO_DATA1"."DAT_OPERATION"
146
	having not (
147
	  ("VCSGISREPO_DATA1"."DAT_OPERATION" = %DELETE$s )
148
	  or  ("VCSGISREPO_DATA1"."DAT_OPERATION" = %UPDATE$s and MIN("VCSGISREPO_DATA2"."DAT_OPERATION") = %DELETE$s )
149
	  or  ("VCSGISREPO_DATA1"."DAT_OPERATION" = %INSERT$s and (MIN("VCSGISREPO_DATA2"."DAT_OPERATION") = %DELETE$s  or max("VCSGISREPO_DATA2"."DAT_OPERATION") = %UPDATE$s or min("VCSGISREPO_DATA2"."DAT_OPERATION") = %UPDATE$s ))
150
	  or  ("VCSGISREPO_DATA1"."DAT_OPERATION" = %UPDATE$s and (max("VCSGISREPO_DATA2"."DAT_OPERATION") = %UPDATE$s or min("VCSGISREPO_DATA2"."DAT_OPERATION") = %UPDATE$s) and "VCSGISREPO_DATA1"."DAT_EFECTIVEDATE" <= max("VCSGISREPO_DATA2"."DAT_EFECTIVEDATE") and "VCSGISREPO_DATA1"."DAT_REVNUMBER" <> max("VCSGISREPO_DATA2"."DAT_REVNUMBER"))
151
	  or  ("VCSGISREPO_DATA1"."DAT_OPERATION" = %INSERT$s and max("VCSGISREPO_DATA2"."DAT_OPERATION") = %INSERT$s and "VCSGISREPO_DATA1"."DAT_EFECTIVEDATE" <= max("VCSGISREPO_DATA2"."DAT_EFECTIVEDATE") and "VCSGISREPO_DATA1"."DAT_REVNUMBER" <> max("VCSGISREPO_DATA2"."DAT_REVNUMBER"))  )
152
)
153
@end getDataOfEntityFromEfectiveDateAndRoi
154

  
155
@begin dateFormat
156
yyyy-MM-dd HH:mm:ss
157
@end dateFormat
158

  
159
@begin createWorkspaceIndex1
160
create index idx_wschanges_1 on VCSGIS_WSCHANGES (COD_ENTITY ASC, WSCH_OPERATION DESC, COD_WSCHANGE ASC)
161
@end createWorkspaceIndex1
162

  
163
@begin createWorkspaceIndex2
164
create index idx_wschanges_2 on VCSGIS_WSCHANGES (WSCH_SELECTED ASC, WSCH_OPERATION ASC)
165
@end createWorkspaceIndex2
166

  
167
@begin createWorkspaceIndex3
168
create index idx_remotechanges_3 on VCSGIS_REMOTECHANGES (COD_ENTITY ASC, RCH_SELECTED ASC)
169
@end createWorkspaceIndex3
170

  
171
@begin updateStateFromLocalChanges
172
@param status
173
update VCSGIS_REMOTECHANGES 
174
set RCH_STATUS = %status$d 
175
where exists (select 1 from VCSGIS_WSCHANGES where RCH_DATACODE = WSCH_FEATURECODE FETCH FIRST 1 ROWS ONLY;)
176
@end updateStateFromLocalChanges
177

  
178
@begin removeLocalChangesRelatedToSelectedRemoteChanges
179
@param entity_code
180
delete from VCSGIS_WSCHANGES 
181
where COD_ENTITY = '%entity_code$s' and WSCH_FEATURECODE in (
182
    select RCH_DATACODE from VCSGIS_REMOTECHANGES where RCH_DATACODE = WSCH_FEATURECODE and CAST(RCH_SELECTED as INT)=1)
183
@end removeLocalChangesRelatedToSelectedRemoteChanges
184

  
185
@begin getChangesWidthUserData
186
@param entity_name
187
@param FeatureIdFieldName
188
@param RelatedFeatureCode
189
@param filter
190
SELECT * FROM VCSGIS_WSCHANGES left join "%entity_name$s" on WSCH_FEATURECODE = "%FeatureIdFieldName$s" WHERE "%FeatureIdFieldName$s" <> '%RelatedFeatureCode$s' AND (%filter$s)
191
@end getChangesWidthUserData
192

  
193
@begin alterTableAddColumnVCSGISCODE
194
@param entity_name
195
ALTER TABLE "%entity_name$s" ADD COLUMN "VCSGISCODE" VARCHAR(40)
196
@end alterTableAddColumnVCSGISCODE
197

  
198
@begin alterTableDropPrimaryKey
199
@param entity_name
200
ALTER TABLE "%entity_name$s" DROP PRIMARY KEY
201
@end alterTableDropPrimaryKey
202

  
203
@begin alterTableAlterColumnVCSGISCODESetNotNull
204
@param entity_name
205
ALTER TABLE "%entity_name$s" ALTER COLUMN "VCSGISCODE" SET NOT NULL
206
@end alterTableAlterColumnVCSGISCODESetNotNull
207

  
208
@begin alterTableAddPrimaryKeyVCSGISCODE
209
@param entity_name
210
ALTER TABLE "%entity_name$s" ADD PRIMARY KEY ("VCSGISCODE")
211
@end alterTableAddPrimaryKeyVCSGISCODE
212

  
213
@begin createFunctionsPre1
214
create or replace PACKAGE VCSGISPKG AS
215
    TYPE VCSGISREPO_DATA_ROWTYPE IS RECORD (
216
          COD_DATA NVARCHAR2(60)
217
        , COD_REVISION NVARCHAR2(60)
218
        , COD_ENTITY NVARCHAR2(60)
219
        , DAT_OPERATION NUMBER(9, 0)
220
        , DAT_REVNUMBER NUMBER(18, 0)
221
        , DAT_EFECTIVEDATE TIMESTAMP(6)
222
        , DAT_FEATURERELATEDCODE NVARCHAR2(60)
223
        , DAT_GEOM SDO_GEOMETRY
224
        , DAT_DATA NCLOB
225
    );
226
    TYPE VCSGISREPO_DATA_TYPE IS TABLE OF VCSGISREPO_DATA_ROWTYPE;
227

  
228
    FUNCTION CHECKOUT(PCOD_ENTITY IN VARCHAR2, PDAT_REVNUMBER IN LONG, PROI SDO_GEOMETRY DEFAULT NULL) RETURN VCSGISREPO_DATA_TYPE PIPELINED;
229

  
230
    function BlobToHex(pBlob in blob) return clob;
231
    
232
    function HexToBlob(pHexClob in clob) return blob;
233
END VCSGISPKG;
234
@end createFunctionsPre1
235

  
236
@begin createFunctionsPost1
237
create or replace PACKAGE BODY VCSGISPKG AS
238
    TYPE MAP_VARCHAR_NUMBER IS TABLE OF NUMBER  INDEX BY VARCHAR2(64);  
239

  
240
    FUNCTION CHECKOUT(PCOD_ENTITY IN VARCHAR2, PDAT_REVNUMBER IN LONG, PROI SDO_GEOMETRY DEFAULT NULL)
241
        RETURN VCSGISREPO_DATA_TYPE
242
        PIPELINED
243
    IS
244
        CURSOR CURSOR_DATA_WITHOUT_ROI IS
245
            SELECT * 
246
            FROM VCSGISREPO_DATA
247
            WHERE 
248
                COD_ENTITY = PCOD_ENTITY 
249
                AND DAT_REVNUMBER <= PDAT_REVNUMBER
250
            ORDER BY DAT_REVNUMBER DESC
251
        ;
252
        CURSOR CURSOR_DATA_WITH_ROI IS
253
            SELECT * 
254
            FROM VCSGISREPO_DATA
255
            WHERE 
256
                COD_ENTITY = PCOD_ENTITY 
257
                AND DAT_REVNUMBER <= PDAT_REVNUMBER
258
                AND (DAT_GEOM IS NULL OR SDO_RELATE(DAT_GEOM, PROI,'mask=ANYINTERACT') = 'TRUE')
259
            ORDER BY DAT_REVNUMBER DESC
260
        ;
261
        DELETEDS MAP_VARCHAR_NUMBER;
262
        UPDATEDS_AND_INSERTEDS MAP_VARCHAR_NUMBER;
263
        VCOD_DATA VCSGISREPO_DATA.COD_DATA%%TYPE;
264
        VDAT_FEATURERELATEDCODE VCSGISREPO_DATA.DAT_FEATURERELATEDCODE%%TYPE;
265
        VDAT_OPERATION VCSGISREPO_DATA.DAT_OPERATION%%TYPE;
266

  
267
    BEGIN
268
        IF PROI IS NULL THEN
269
            FOR record IN CURSOR_DATA_WITHOUT_ROI
270
            LOOP
271
                -- VCOD_DATA := record.COD_DATA;
272
                VDAT_FEATURERELATEDCODE := record.DAT_FEATURERELATEDCODE;
273
                VDAT_OPERATION := record.DAT_OPERATION;
274
    
275
                IF DELETEDS.EXISTS(VDAT_FEATURERELATEDCODE) THEN
276
                    CONTINUE;
277
                END IF;
278
                IF UPDATEDS_AND_INSERTEDS.EXISTS(VDAT_FEATURERELATEDCODE) THEN
279
                    CONTINUE;
280
                END IF;  
281
                IF VDAT_OPERATION = 0 THEN -- DEL
282
                        DELETEDS(VDAT_FEATURERELATEDCODE) := 1;
283
                        CONTINUE;
284
                ELSIF VDAT_OPERATION = 1 THEN -- UPD
285
                        UPDATEDS_AND_INSERTEDS(VDAT_FEATURERELATEDCODE) := 1;
286
                ELSIF VDAT_OPERATION = 2 THEN -- INS
287
                        UPDATEDS_AND_INSERTEDS(VDAT_FEATURERELATEDCODE) := 1;
288
                END IF;
289
    
290
                PIPE ROW (record);
291
            END LOOP; 
292
        ELSE
293
            FOR record IN CURSOR_DATA_WITH_ROI
294
            LOOP
295
                -- VCOD_DATA := record.COD_DATA;
296
                VDAT_FEATURERELATEDCODE := record.DAT_FEATURERELATEDCODE;
297
                VDAT_OPERATION := record.DAT_OPERATION;
298
    
299
                IF DELETEDS.EXISTS(VDAT_FEATURERELATEDCODE) THEN
300
                    CONTINUE;
301
                END IF;
302
                IF UPDATEDS_AND_INSERTEDS.EXISTS(VDAT_FEATURERELATEDCODE) THEN
303
                    CONTINUE;
304
                END IF;  
305
                IF VDAT_OPERATION = 0 THEN -- DEL
306
                        DELETEDS(VDAT_FEATURERELATEDCODE) := 1;
307
                        CONTINUE;
308
                ELSIF VDAT_OPERATION = 1 THEN -- UPD
309
                        UPDATEDS_AND_INSERTEDS(VDAT_FEATURERELATEDCODE) := 1;
310
                ELSIF VDAT_OPERATION = 2 THEN -- INS
311
                        UPDATEDS_AND_INSERTEDS(VDAT_FEATURERELATEDCODE) := 1;
312
                END IF;
313
    
314
                PIPE ROW (record);
315
            END LOOP; 
316
        END IF;
317
    END;
318
    
319
    function BlobToHex(pBlob in blob) return clob is
320
    -- https://paulzipblog.wordpress.com/2021/11/28/blob-to-hex-and-hex-to-blob/
321
    -- Converts a blob to a clob containing the hex representation of the blob
322
      BUFF_SIZE constant integer := 16383; -- Each raw byte converts to 2 hex digits, so buffer is half of 32766
323
      vBuffer varchar2(32766 byte);  -- Twice buffer size
324
      vOffset pls_integer := 1;
325
      vLength pls_integer := DBMS_LOB.GetLength(pBlob);
326
      vResult clob;
327
    begin
328
      if coalesce(vLength, 0) > 0 then
329
        DBMS_LOB.CreateTemporary(vResult, True, DBMS_LOB.Call);
330
        for i in 1..ceil(vLength / BUFF_SIZE)
331
        loop
332
          vBuffer := RawToHex(DBMS_LOB.Substr(pBlob, BUFF_SIZE, vOffset));
333
          DBMS_LOB.WriteAppend(vResult, length(vBuffer), vBuffer);
334
          vOffset := vOffset + BUFF_SIZE;
335
        end loop;
336
      end if;
337
      return vResult;
338
    end;
339
    
340
     
341
    function HexToBlob(pHexClob in clob) return blob is
342
    -- https://paulzipblog.wordpress.com/2021/11/28/blob-to-hex-and-hex-to-blob/
343
    -- Converts a clob containing hex representation of binary data into a blob
344
      BUFF_SIZE constant integer := 32764; -- Some Oracle versions have a bug which loses trailing bytes when using buffer sizes > 32764,
345
      vBuffer raw(16382);
346
      vOffset pls_integer := 1;
347
      vLength pls_integer := DBMS_LOB.GetLength(pHexClob);
348
      vResult blob;
349
    begin
350
      if coalesce(vLength, 0) > 0 then
351
        DBMS_LOB.CreateTemporary(vResult, True, DBMS_LOB.Call);
352
        for i in 1..ceil(vLength / BUFF_SIZE)
353
        loop
354
          vBuffer := HexToRaw(DBMS_LOB.Substr(pHexClob, BUFF_SIZE, vOffset));
355
          DBMS_LOB.WriteAppend(vResult, UTL_RAW.Length(vBuffer), vBuffer);
356
          vOffset := vOffset + BUFF_SIZE;
357
        end loop;
358
      end if;
359
      return vResult;
360
    end;  
361
END;
362
@end createFunctionsPost1
363

  
364
@begin getDataOfEntityToRevisionNumberUsingDatabaseFunction
365
@param revision_number
366
@param entity_code
367
@param data_table_name
368
SELECT * FROM TABLE (VCSGISPKG.CHECKOUT('%entity_code$s', %revision_number$s,NULL))
369
@end getDataOfEntityToRevisionNumberUsingDatabaseFunction
370

  
371
@begin getDataOfEntityToRevisionNumberAndRoiUsingDatabaseFunction
372
@param revision_number
373
@param entity_code
374
@param roi
375
@param data_table_name
376
SELECT * FROM TABLE (VCSGISPKG.CHECKOUT('%entity_code$s', %revision_number$s, %roi$s))
377
@end getDataOfEntityToRevisionNumberAndRoiUsingDatabaseFunction
378

  
379
@begin defaultCheckoutMode
380
USESELECT (posible values USEDBFUNCTION, USESELECT, USEAPPFILTER)
381
@end defaultCheckoutMode
org.gvsig.vcsgis/tags/org.gvsig.vcsgis-1.0.105/org.gvsig.vcsgis.lib/org.gvsig.vcsgis.lib.impl/src/main/resources/org/gvsig/vcsgis/lib/H2Spatial.sql
1

  
2
@begin createRepositoryIndex1
3
create index if not exists idx_data_1 on VCSGISREPO_DATA (COD_ENTITY ASC, DAT_REVNUMBER ASC)
4
@end createRepositoryIndex1
5

  
6
@begin createRepositoryIndex2
7
create index if not exists idx_data_2 on VCSGISREPO_DATA (DAT_FEATURERELATEDCODE ASC, DAT_REVNUMBER ASC, DAT_OPERATION ASC)
8
@end createRepositoryIndex2
9

  
10
@begin getDataOfEntityFromRevisionNumber
11
@param revision_number
12
@param entity_code
13
@param data_table_name
14
select * from "%data_table_name$s" where
15
        "%data_table_name$s"."COD_ENTITY" = '%entity_code$s' AND
16
        "%data_table_name$s"."COD_DATA" in (
17
	select 
18
	  MIN("VCSGISREPO_DATA1"."COD_DATA")
19
	from "%data_table_name$s" AS "VCSGISREPO_DATA1"
20
	  left join "%data_table_name$s" AS "VCSGISREPO_DATA2" on
21
	    "VCSGISREPO_DATA1"."DAT_FEATURERELATEDCODE" = "VCSGISREPO_DATA2"."DAT_FEATURERELATEDCODE"
22
	    and "VCSGISREPO_DATA2"."DAT_REVNUMBER" > %revision_number$d 
23
	where 
24
	  "VCSGISREPO_DATA1"."COD_ENTITY" = '%entity_code$s'
25
	  and "VCSGISREPO_DATA1"."DAT_REVNUMBER" > %revision_number$d   
26
	group by "VCSGISREPO_DATA1"."DAT_FEATURERELATEDCODE", "VCSGISREPO_DATA1"."DAT_REVNUMBER", "VCSGISREPO_DATA1"."DAT_OPERATION"
27
	having not (
28
	  ("VCSGISREPO_DATA1"."DAT_OPERATION" = 0 and MAX("VCSGISREPO_DATA2"."DAT_OPERATION") = 2 )
29
	  or  ("VCSGISREPO_DATA1"."DAT_OPERATION" = 1 and MIN("VCSGISREPO_DATA2"."DAT_OPERATION") = 0 )
30
	  or  ("VCSGISREPO_DATA1"."DAT_OPERATION" = 2 and (MIN("VCSGISREPO_DATA2"."DAT_OPERATION") = 0  or max("VCSGISREPO_DATA2"."DAT_OPERATION") = 1 or min("VCSGISREPO_DATA2"."DAT_OPERATION") = 1 ))
31
	  or  ("VCSGISREPO_DATA1"."DAT_OPERATION" = 0 and MIN("VCSGISREPO_DATA2"."DAT_OPERATION") <> 0  and "VCSGISREPO_DATA1"."DAT_REVNUMBER" < max("VCSGISREPO_DATA2"."DAT_REVNUMBER"))
32
	  or  ("VCSGISREPO_DATA1"."DAT_OPERATION" = 1 and (max("VCSGISREPO_DATA2"."DAT_OPERATION") = 1 or min("VCSGISREPO_DATA2"."DAT_OPERATION") = 1) and "VCSGISREPO_DATA1"."DAT_REVNUMBER" < max("VCSGISREPO_DATA2"."DAT_REVNUMBER"))
33
	  or  ("VCSGISREPO_DATA1"."DAT_OPERATION" = 2 and max("VCSGISREPO_DATA2"."DAT_OPERATION") = 2 and "VCSGISREPO_DATA1"."DAT_REVNUMBER" < max("VCSGISREPO_DATA2"."DAT_REVNUMBER"))  )
34
)
35
order by "VCSGISREPO_DATA"."DAT_OPERATION" desc
36
@end getDataOfEntityFromRevisionNumber
37

  
38
@begin getDataOfEntityToRevisionNumber
39
@param revision_number
40
@param entity_code
41
@param data_table_name
42
select * from "%data_table_name$s" where 
43
        "%data_table_name$s"."COD_ENTITY" = '%entity_code$s' AND
44
        "%data_table_name$s"."COD_DATA" in (
45
	select 
46
	  MIN("VCSGISREPO_DATA1"."COD_DATA")
47
	from "%data_table_name$s" AS "VCSGISREPO_DATA1"
48
	  left join "%data_table_name$s" AS "VCSGISREPO_DATA2" on
49
	    "VCSGISREPO_DATA1"."DAT_FEATURERELATEDCODE" = "VCSGISREPO_DATA2"."DAT_FEATURERELATEDCODE"
50
	    and "VCSGISREPO_DATA2"."DAT_REVNUMBER" <= %revision_number$d 
51
	where 
52
	  "VCSGISREPO_DATA1"."COD_ENTITY" = '%entity_code$s'
53
	  and "VCSGISREPO_DATA1"."DAT_REVNUMBER" <= %revision_number$d   
54
	group by "VCSGISREPO_DATA1"."DAT_FEATURERELATEDCODE", "VCSGISREPO_DATA1"."DAT_REVNUMBER", "VCSGISREPO_DATA1"."DAT_OPERATION"
55
	having not (
56
	  ("VCSGISREPO_DATA1"."DAT_OPERATION" = 0 and MAX("VCSGISREPO_DATA2"."DAT_OPERATION") = 2 )
57
	  or  ("VCSGISREPO_DATA1"."DAT_OPERATION" = 1 and MIN("VCSGISREPO_DATA2"."DAT_OPERATION") = 0 )
58
	  or  ("VCSGISREPO_DATA1"."DAT_OPERATION" = 2 and (MIN("VCSGISREPO_DATA2"."DAT_OPERATION") = 0  or max("VCSGISREPO_DATA2"."DAT_OPERATION") = 1 or min("VCSGISREPO_DATA2"."DAT_OPERATION") = 1 ))
59
	  or  ("VCSGISREPO_DATA1"."DAT_OPERATION" = 0 and MIN("VCSGISREPO_DATA2"."DAT_OPERATION") <> 0  and "VCSGISREPO_DATA1"."DAT_REVNUMBER" < max("VCSGISREPO_DATA2"."DAT_REVNUMBER"))
60
	  or  ("VCSGISREPO_DATA1"."DAT_OPERATION" = 1 and (max("VCSGISREPO_DATA2"."DAT_OPERATION") = 1 or min("VCSGISREPO_DATA2"."DAT_OPERATION") = 1) and "VCSGISREPO_DATA1"."DAT_REVNUMBER" < max("VCSGISREPO_DATA2"."DAT_REVNUMBER"))
61
	  or  ("VCSGISREPO_DATA1"."DAT_OPERATION" = 2 and max("VCSGISREPO_DATA2"."DAT_OPERATION") = 2 and "VCSGISREPO_DATA1"."DAT_REVNUMBER" < max("VCSGISREPO_DATA2"."DAT_REVNUMBER"))  )
62
)
63
order by "VCSGISREPO_DATA"."DAT_OPERATION" desc
64
@end getDataOfEntityToRevisionNumber
65

  
66
@begin getDataOfEntityToRevisionNumberAndRoi
67
@param revision_number
68
@param entity_code
69
@param roi
70
@param data_table_name
71
select * from "%data_table_name$s" where 
72
        "%data_table_name$s"."COD_ENTITY" = '%entity_code$s' AND
73
        "%data_table_name$s"."COD_DATA" in (
74
	select 
75
	  MIN("VCSGISREPO_DATA1"."COD_DATA")
76
	from "%data_table_name$s" AS "VCSGISREPO_DATA1"
77
	  left join "%data_table_name$s" AS "VCSGISREPO_DATA2" on
78
	    "VCSGISREPO_DATA1"."DAT_FEATURERELATEDCODE" = "VCSGISREPO_DATA2"."DAT_FEATURERELATEDCODE"
79
	    and "VCSGISREPO_DATA2"."DAT_REVNUMBER" <= %revision_number$d 
80
	where 
81
	  "VCSGISREPO_DATA1"."COD_ENTITY" = '%entity_code$s'
82
	  and "VCSGISREPO_DATA1"."DAT_REVNUMBER" <= %revision_number$d   
83
          and ("VCSGISREPO_DATA1"."DAT_GEOM" is null or (ST_Intersects("VCSGISREPO_DATA1"."DAT_GEOM",%roi$s)) )
84
	group by "VCSGISREPO_DATA1"."DAT_FEATURERELATEDCODE", "VCSGISREPO_DATA1"."DAT_REVNUMBER", "VCSGISREPO_DATA1"."DAT_OPERATION"
85
	having not (
86
	  ("VCSGISREPO_DATA1"."DAT_OPERATION" = 0 and MAX("VCSGISREPO_DATA2"."DAT_OPERATION") = 2 )
87
	  or  ("VCSGISREPO_DATA1"."DAT_OPERATION" = 1 and MIN("VCSGISREPO_DATA2"."DAT_OPERATION") = 0 )
88
	  or  ("VCSGISREPO_DATA1"."DAT_OPERATION" = 2 and (MIN("VCSGISREPO_DATA2"."DAT_OPERATION") = 0  or max("VCSGISREPO_DATA2"."DAT_OPERATION") = 1 or min("VCSGISREPO_DATA2"."DAT_OPERATION") = 1 ))
89
	  or  ("VCSGISREPO_DATA1"."DAT_OPERATION" = 0 and MIN("VCSGISREPO_DATA2"."DAT_OPERATION") <> 0  and "VCSGISREPO_DATA1"."DAT_REVNUMBER" < max("VCSGISREPO_DATA2"."DAT_REVNUMBER"))
90
	  or  ("VCSGISREPO_DATA1"."DAT_OPERATION" = 1 and (max("VCSGISREPO_DATA2"."DAT_OPERATION") = 1 or min("VCSGISREPO_DATA2"."DAT_OPERATION") = 1) and "VCSGISREPO_DATA1"."DAT_REVNUMBER" < max("VCSGISREPO_DATA2"."DAT_REVNUMBER"))
91
	  or  ("VCSGISREPO_DATA1"."DAT_OPERATION" = 2 and max("VCSGISREPO_DATA2"."DAT_OPERATION") = 2 and "VCSGISREPO_DATA1"."DAT_REVNUMBER" < max("VCSGISREPO_DATA2"."DAT_REVNUMBER"))  )
92
)
93
order by "VCSGISREPO_DATA"."DAT_OPERATION" desc
94
@end getDataOfEntityToRevisionNumberAndRoi
95

  
96
@begin getDataOfEntityFromEfectiveDate
97
@param entity_code
98
@param efective_date
99
@param data_table_name
100
select * from "%data_table_name$s" where 
101
        "%data_table_name$s"."COD_ENTITY" = '%entity_code$s' AND
102
        "%data_table_name$s"."COD_DATA" in (
103
	select 
104
	  MIN("VCSGISREPO_DATA1"."COD_DATA")
105
	from "%data_table_name$s" AS "VCSGISREPO_DATA1"
106
	  left join "%data_table_name$s" AS "VCSGISREPO_DATA2" on
107
	    "VCSGISREPO_DATA1"."DAT_FEATURERELATEDCODE" = "VCSGISREPO_DATA2"."DAT_FEATURERELATEDCODE"
108
	    and "VCSGISREPO_DATA2"."DAT_EFECTIVEDATE" <= to_date('%efective_date$s', 'YYYY-MM-DD HH24:MI:SS') 
109
	where 
110
	  "VCSGISREPO_DATA1"."COD_ENTITY" = '%entity_code$s'
111
	  and "VCSGISREPO_DATA1"."DAT_EFECTIVEDATE" <= to_date('%efective_date$s', 'YYYY-MM-DD HH24:MI:SS')   
112
	group by "VCSGISREPO_DATA1"."DAT_FEATURERELATEDCODE", "VCSGISREPO_DATA1"."DAT_EFECTIVEDATE", "VCSGISREPO_DATA1"."DAT_REVNUMBER", "VCSGISREPO_DATA1"."DAT_OPERATION"
113
	having not (
114
	  ("VCSGISREPO_DATA1"."DAT_OPERATION" = 0 )
115
	  or  ("VCSGISREPO_DATA1"."DAT_OPERATION" = 1 and MIN("VCSGISREPO_DATA2"."DAT_OPERATION") = 0 )
116
	  or  ("VCSGISREPO_DATA1"."DAT_OPERATION" = 2 and (MIN("VCSGISREPO_DATA2"."DAT_OPERATION") = 0  or max("VCSGISREPO_DATA2"."DAT_OPERATION") = 1 or min("VCSGISREPO_DATA2"."DAT_OPERATION") = 1 ))
117
	  or  ("VCSGISREPO_DATA1"."DAT_OPERATION" = 1 and (max("VCSGISREPO_DATA2"."DAT_OPERATION") = 1 or min("VCSGISREPO_DATA2"."DAT_OPERATION") = 1) and "VCSGISREPO_DATA1"."DAT_EFECTIVEDATE" <= max("VCSGISREPO_DATA2"."DAT_EFECTIVEDATE") and "VCSGISREPO_DATA1"."DAT_REVNUMBER" <> max("VCSGISREPO_DATA2"."DAT_REVNUMBER"))
118
	  or  ("VCSGISREPO_DATA1"."DAT_OPERATION" = 2 and max("VCSGISREPO_DATA2"."DAT_OPERATION") = 2 and "VCSGISREPO_DATA1"."DAT_EFECTIVEDATE" <= max("VCSGISREPO_DATA2"."DAT_EFECTIVEDATE") and "VCSGISREPO_DATA1"."DAT_REVNUMBER" <> max("VCSGISREPO_DATA2"."DAT_REVNUMBER"))  )
119
)
120
@end getDataOfEntityFromEfectiveDate
121

  
122
@begin getDataOfEntityFromEfectiveDateAndRoi
123
@param entity_code
124
@param efective_date
125
@param roi
126
@param data_table_name
127
@const DELETE=0
128
@const UPDATE=1
129
@const INSERT=2
130
select * from "%data_table_name$s" where 
131
        "%data_table_name$s"."COD_ENTITY" = '%entity_code$s' AND
132
        "%data_table_name$s"."COD_DATA" in (
133
	select 
134
	  MIN("VCSGISREPO_DATA1"."COD_DATA")
135
	from "%data_table_name$s" AS "VCSGISREPO_DATA1"
136
	  left join "%data_table_name$s" AS "VCSGISREPO_DATA2" on
137
	    "VCSGISREPO_DATA1"."DAT_FEATURERELATEDCODE" = "VCSGISREPO_DATA2"."DAT_FEATURERELATEDCODE"
138
	    and "VCSGISREPO_DATA2"."DAT_EFECTIVEDATE" <= to_date('%efective_date$s', 'YYYY-MM-DD HH24:MI:SS') 
139
	where 
140
	  "VCSGISREPO_DATA1"."COD_ENTITY" = '%entity_code$s'
141
	  and "VCSGISREPO_DATA1"."DAT_EFECTIVEDATE" <= to_date('%efective_date$s', 'YYYY-MM-DD HH24:MI:SS')   
142
          and ("VCSGISREPO_DATA1"."DAT_GEOM" is null or (ST_Intersects("VCSGISREPO_DATA1"."DAT_GEOM",%roi$s)) )
143
	group by "VCSGISREPO_DATA1"."DAT_FEATURERELATEDCODE", "VCSGISREPO_DATA1"."DAT_EFECTIVEDATE", "VCSGISREPO_DATA1"."DAT_REVNUMBER", "VCSGISREPO_DATA1"."DAT_OPERATION"
144
	having not (
145
	  ("VCSGISREPO_DATA1"."DAT_OPERATION" = %DELETE$s )
146
	  or  ("VCSGISREPO_DATA1"."DAT_OPERATION" = %UPDATE$s and MIN("VCSGISREPO_DATA2"."DAT_OPERATION") = %DELETE$s )
147
	  or  ("VCSGISREPO_DATA1"."DAT_OPERATION" = %INSERT$s and (MIN("VCSGISREPO_DATA2"."DAT_OPERATION") = %DELETE$s  or max("VCSGISREPO_DATA2"."DAT_OPERATION") = %UPDATE$s or min("VCSGISREPO_DATA2"."DAT_OPERATION") = %UPDATE$s ))
148
	  or  ("VCSGISREPO_DATA1"."DAT_OPERATION" = %UPDATE$s and (max("VCSGISREPO_DATA2"."DAT_OPERATION") = %UPDATE$s or min("VCSGISREPO_DATA2"."DAT_OPERATION") = %UPDATE$s) and "VCSGISREPO_DATA1"."DAT_EFECTIVEDATE" <= max("VCSGISREPO_DATA2"."DAT_EFECTIVEDATE") and "VCSGISREPO_DATA1"."DAT_REVNUMBER" <> max("VCSGISREPO_DATA2"."DAT_REVNUMBER"))
149
	  or  ("VCSGISREPO_DATA1"."DAT_OPERATION" = %INSERT$s and max("VCSGISREPO_DATA2"."DAT_OPERATION") = %INSERT$s and "VCSGISREPO_DATA1"."DAT_EFECTIVEDATE" <= max("VCSGISREPO_DATA2"."DAT_EFECTIVEDATE") and "VCSGISREPO_DATA1"."DAT_REVNUMBER" <> max("VCSGISREPO_DATA2"."DAT_REVNUMBER"))  )
150
)
151
@end getDataOfEntityFromEfectiveDateAndRoi
152

  
153
@begin dateFormat
154
yyyy-MM-dd HH24:mm:ss.S
155
@end dateFormat
156

  
157
@begin createWorkspaceIndex1
158
create index if not exists idx_wschanges_1 on VCSGIS_WSCHANGES (COD_ENTITY ASC, WSCH_OPERATION DESC, COD_WSCHANGE ASC)
159
@end createWorkspaceIndex1
160

  
161
@begin createWorkspaceIndex2
162
create index if not exists idx_wschanges_2 on VCSGIS_WSCHANGES (WSCH_SELECTED ASC, WSCH_OPERATION ASC)
163
@end createWorkspaceIndex2
164

  
165
@begin createWorkspaceIndex3
166
create index if not exists idx_remotechanges_3 on VCSGIS_REMOTECHANGES (COD_ENTITY ASC, RCH_SELECTED ASC)
167
@end createWorkspaceIndex3
168

  
169
@begin updateStateFromLocalChanges
170
@param status
171
update VCSGIS_REMOTECHANGES 
172
set RCH_STATUS = %status$d 
173
where exists (select 1 from VCSGIS_WSCHANGES where RCH_DATACODE = WSCH_FEATURECODE LIMIT 1)
174
@end updateStateFromLocalChanges
175

  
176
@begin removeLocalChangesRelatedToSelectedRemoteChanges
177
@param entityCode
178
delete from VCSGIS_WSCHANGES 
179
where COD_ENTITY = '%entityCode$s' and WSCH_FEATURECODE in (
180
    select RCH_DATACODE from VCSGIS_REMOTECHANGES where RCH_DATACODE = WSCH_FEATURECODE and CAST(RCH_SELECTED as INT)=1)
181
@end removeLocalChangesRelatedToSelectedRemoteChanges
182

  
183
@begin getChangesWidthUserData
184
@param EntityName
185
@param FeatureIdFieldName
186
@param RelatedFeatureCode
187
@param filter
188
SELECT * FROM VCSGIS_WSCHANGES left join "%EntityName$s" on WSCH_FEATURECODE = "%FeatureIdFieldName$s" WHERE "%FeatureIdFieldName$s" <> '%RelatedFeatureCode$s' AND (%filter$s)
189
@end getChangesWidthUserData
190

  
191
@begin alterTableAddColumnVCSGISCODE
192
@param EntityName
193
ALTER TABLE "%EntityName$s" ADD COLUMN "VCSGISCODE" VARCHAR(40)
194
@end alterTableAddColumnVCSGISCODE
195

  
196
@begin alterTableDropPrimaryKey
197
@param EntityName
198
ALTER TABLE "%EntityName$s" DROP PRIMARY KEY
199
@end alterTableDropPrimaryKey
200

  
201
@begin alterTableAlterColumnVCSGISCODESetNotNull
202
@param EntityName
203
ALTER TABLE "%EntityName$s" ALTER COLUMN "VCSGISCODE" SET NOT NULL
204
@end alterTableAlterColumnVCSGISCODESetNotNull
205

  
206
@begin alterTableAddPrimaryKeyVCSGISCODE
207
@param EntityName
208
ALTER TABLE "%EntityName$s" ADD PRIMARY KEY ("VCSGISCODE")
209
@end alterTableAddPrimaryKeyVCSGISCODE
210

  
211
@begin defaultCheckoutMode
212
USESELECT (posible values USEDBFUNCTION, USESELECT, USEAPPFILTER)
213
@end defaultCheckoutMode
org.gvsig.vcsgis/tags/org.gvsig.vcsgis-1.0.105/org.gvsig.vcsgis.lib/org.gvsig.vcsgis.lib.impl/src/main/resources/org/gvsig/vcsgis/lib/notas-Oracle.txt
1

  
2
Esta sql podria ser una sustituta de la actual para recuperar datos de una revision
3
en concreto:
4

  
5
SELECT * FROM VCSGISREPO_DATA D
6
WHERE COD_ENTITY = 'HENTITY_ENT_161101000000000000000'
7
AND "DAT_REVNUMBER" <= 1000000000
8
AND DAT_OPERATION <> 0
9
AND DAT_REVNUMBER < (
10
    SELECT MAX(D1.DAT_REVNUMBER) FROM VCSGISREPO_DATA D1 
11
        WHERE 
12
            COD_ENTITY =  'HENTITY_ENT_161101000000000000000'
13
            AND DAT_FEATURERELATEDCODE = D.DAT_FEATURERELATEDCODE 
14
            AND "DAT_REVNUMBER" <= 1000000000  
15
)
16
order by "D"."DAT_OPERATION" desc;
17

  
18

  
19

  
20

  
21

  
22
Esta sql comprobaria si hay alguna tabla que tiene actualizaciones o inserciones
23
despues de un borrado:
24

  
25
SELECT count(d.cod_entity), vcsgisrepo_entities.ent_name, min(vcsgisrepo_entities.ent_label)
26
-- SELECT d.cod_entity, vcsgisrepo_entities.ent_name, vcsgisrepo_entities.ent_label, D.DAT_FEATURERELATEDCODE
27
FROM VCSGISREPO_DATA D
28
  LEFT JOIN vcsgisrepo_entities ON 
29
    d.cod_entity = vcsgisrepo_entities.cod_entity
30
WHERE 
31
    "DAT_REVNUMBER" <= 1000000000
32
-- AND COD_ENTITY = 'HENTITY_ENT_161101000000000000000'
33
AND DAT_OPERATION = 0
34
AND DAT_REVNUMBER < (
35
    SELECT MAX(D1.DAT_REVNUMBER) FROM VCSGISREPO_DATA D1 
36
        WHERE 
37
                "DAT_REVNUMBER" <= 1000000000  
38
            AND COD_ENTITY =  D.COD_ENTITY
39
            AND DAT_FEATURERELATEDCODE = D.DAT_FEATURERELATEDCODE 
40
)
41
group by vcsgisrepo_entities.ent_name
42
order by vcsgisrepo_entities.ent_name asc;
43

  
org.gvsig.vcsgis/tags/org.gvsig.vcsgis-1.0.105/org.gvsig.vcsgis.lib/org.gvsig.vcsgis.lib.impl/src/main/java/org/gvsig/vcsgis/lib/PipedIterator.java
1
/*
2
 * gvSIG. Desktop Geographic Information System.
3
 * 
4
 * Copyright (C) 2007-2020 gvSIG Association.
5
 * 
6
 * This program is free software; you can redistribute it and/or
7
 * modify it under the terms of the GNU General Public License
8
 * as published by the Free Software Foundation; either version 3
9
 * of the License, or (at your option) any later version.
10
 * 
11
 * This program is distributed in the hope that it will be useful,
12
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
13
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
14
 * GNU General Public License for more details.
15
 * 
16
 * You should have received a copy of the GNU General Public License 
17
 * along with this program. If not, see <https://www.gnu.org/licenses/>. 
18
 * 
19
 * For any additional information, do not hesitate to contact us
20
 * at info AT gvsig.com, or visit our website www.gvsig.com.
21
 */
22

  
23
package org.gvsig.vcsgis.lib;
24

  
25
import java.util.Iterator;
26
import org.gvsig.tools.dispose.DisposableIterable;
27
import org.gvsig.tools.dispose.DisposableIterator;
28
import org.slf4j.Logger;
29
import org.slf4j.LoggerFactory;
30

  
31
/**
32
 *
33
 * @author gvSIG Team
34
 * @param <T>
35
 */
36
public class PipedIterator<T> implements DisposableIterable<T>, DisposableIterator<T> {
37

  
38
    private static final Logger LOGGER = LoggerFactory.getLogger(PipedIterator.class);
39
    
40
    private T currentElement;
41
    private boolean isClosed;
42
    private final long timeout;
43

  
44
    public PipedIterator(long timeout) {
45
        this.currentElement = null;
46
        this.isClosed = false;
47
        this.timeout = timeout;
48
    }
49

  
50
    public synchronized void put(T element) {
51
        if( this.isClosed ) {
52
            throw new IllegalStateException("The piped iterator is closed");
53
        }
54
        if (this.currentElement != null) {
55
            try {
56
                LOGGER.debug("===: put wait");
57
                for (int retry = 0; retry < 10; retry++) {
58
                    this.wait(timeout);
59
                    if( this.currentElement==null ) {
60
                        break;
61
                    }
62
                    LOGGER.warn("Timeout waiting to consume elements on piped iterator (timeout="+timeout+", retry="+retry+").");
63
                }
64
                if( this.currentElement!=null ) {
65
                    throw new RuntimeException("Timeout waiting to consume elements on piped iterator (timeout="+timeout+").");
66
                }
67
            } catch (InterruptedException ex) {
68
                throw new RuntimeException("Can't put element on piped iterator.", ex);
69
            }
70
        }
71
        LOGGER.debug("===: put notifyAll (closed "+this.isClosed+") "+ element.toString());
72
        this.currentElement = element;
73
        this.notifyAll();
74
    }
75

  
76
    @Override
77
    public synchronized boolean hasNext() {
78
        if (this.currentElement != null) {
79
            LOGGER.debug("===: hasNext true, has currentElement");
80
            return true;
81
        }
82
        if (this.isClosed) {
83
            LOGGER.debug("===: hasNext false, is closed");
84
            return false;
85
        }
86
        if (this.currentElement == null) {
87
            try {
88
                LOGGER.debug("===: hasNext wait");
89
                for (int retry = 0; retry < 10; retry++) {
90
                    this.wait(timeout);
91
                    if( this.currentElement!=null ) {
92
                        break;
93
                    }
94
                    LOGGER.warn("Timeout waiting to the next element on piped iterator (timeout="+timeout+", retry="+retry+").");
95
                }
96
                if( this.currentElement==null ) {
97
                    throw new RuntimeException("Timeout waiting to the next element on piped iterator (timeout="+timeout+").");
98
                }
99
            } catch (InterruptedException ex) {
100
                throw new RuntimeException("Can't get next element on piped iterator.", ex);
101
            }
102
        }
103
        LOGGER.debug("===: hasNext "+ (this.currentElement != null));
104
        return this.currentElement != null;
105
    }
106

  
107
    @Override
108
    public synchronized T next() {
109
        if (this.currentElement == null) {
110
            if( this.isClosed ) {
111
                throw new IllegalStateException("The piped iterator is closed");
112
            }
113
            try {
114
                LOGGER.debug("===: next wait");
115
                this.wait(timeout);
116
                if( this.currentElement==null ) {
117
                    throw new RuntimeException("Timeout waiting to the next element on piped iterator.");
118
                }
119
            } catch (InterruptedException ex) {
120
                throw new RuntimeException("Can't get next element on piped iterator.", ex);
121
            }
122
        }
123
        T x = this.currentElement;
124
        this.currentElement = null;
125
        LOGGER.debug("===: next notifyAll "+ x.toString());
126
        this.notifyAll();
127
        return x;
128
    }
129

  
130
    @Override
131
    public synchronized void dispose() {
132
    }
133

  
134
    @Override
135
    public synchronized Iterator<T> iterator() {
136
        return this;
137
    }
138

  
139
    public synchronized void close() {
140
        LOGGER.debug("===: close notifyAll");
141
        this.isClosed = true;
142
        this.notifyAll();
143
    }
144

  
145
}
org.gvsig.vcsgis/tags/org.gvsig.vcsgis-1.0.105/org.gvsig.vcsgis.lib/org.gvsig.vcsgis.lib.impl/src/main/java/org/gvsig/vcsgis/lib/VCSGisManagerImpl.java
1
/* gvSIG. Desktop Geographic Information System.
2
 *
3
 * Copyright (c) 2007-2015 gvSIG Association
4
 *
5
 * This program is free software; you can redistribute it and/or
6
 * modify it under the terms of the GNU General Public License
7
 * as published by the Free Software Foundation; either version 2
8
 * of the License, or (at your option) any later version.
9
 *
10
 * This program is distributed in the hope that it will be useful,
11
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
12
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
13
 * GNU General Public License for more details.
14
 *
15
 * You should have received a copy of the GNU General Public License
16
 * along with this program; if not, write to the Free Software
17
 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
18
 * MA  02110-1301, USA.
19
 *
20
 * For any additional information, do not hesitate to contact us
21
 * at info AT gvsig.com, or visit our website www.gvsig.com.
22
 */
23
package org.gvsig.vcsgis.lib;
24

  
25
import java.io.File;
26
import java.io.IOException;
27
import java.lang.ref.WeakReference;
28
import java.net.URL;
29
import java.nio.file.Files;
30
import java.nio.file.Path;
31
import java.util.ArrayList;
32
import java.util.Collections;
33
import java.util.HashMap;
34
import java.util.Iterator;
35
import java.util.List;
36
import java.util.Map;
37
import java.util.Objects;
38
import javax.json.JsonObject;
39
import javax.servlet.http.HttpServlet;
40
import org.apache.commons.lang3.StringUtils;
41
import org.apache.commons.lang3.tuple.Pair;
42
import org.cresques.cts.IProjection;
43
import org.gvsig.fmap.crs.CRSFactory;
44
import org.gvsig.fmap.dal.DALLocator;
45
import org.gvsig.fmap.dal.DataManager;
46
import org.gvsig.fmap.dal.DataServerExplorer;
47
import org.gvsig.fmap.dal.DataStore;
48
import org.gvsig.fmap.dal.DataStoreParameters;
49
import org.gvsig.fmap.dal.DatabaseWorkspaceManager;
50
import static org.gvsig.fmap.dal.DatabaseWorkspaceManager.CONFIG_NAME_STORESREPOSITORYID;
51
import static org.gvsig.fmap.dal.DatabaseWorkspaceManager.TABLE_CONFIGURATION;
52
import static org.gvsig.fmap.dal.DatabaseWorkspaceManager.TABLE_CONFIGURATION_NAME;
53
import static org.gvsig.fmap.dal.DatabaseWorkspaceManager.TABLE_REPOSITORY;
54
import static org.gvsig.fmap.dal.DatabaseWorkspaceManager.TABLE_REPOSITORY_NAME;
55
import static org.gvsig.fmap.dal.DatabaseWorkspaceManager.TABLE_RESOURCES;
56
import static org.gvsig.fmap.dal.DatabaseWorkspaceManager.TABLE_RESOURCES_NAME;
57
import org.gvsig.fmap.dal.feature.FeatureStore;
58
import org.gvsig.fmap.dal.feature.FeatureType;
59
import org.gvsig.fmap.dal.store.jdbc.JDBCNewStoreParameters;
60
import org.gvsig.fmap.dal.store.jdbc.JDBCServerExplorerParameters;
61
import org.gvsig.fmap.dal.store.jdbc.JDBCStoreParameters;
62
import org.gvsig.fmap.dal.store.jdbc2.JDBCServerExplorer;
63
import org.gvsig.fmap.geom.primitive.Envelope;
64
import org.gvsig.json.Json;
65
import org.gvsig.json.JsonManager;
66
import org.gvsig.tools.ToolsLocator;
67
import org.gvsig.tools.dispose.DisposeUtils;
68
import org.gvsig.tools.task.SimpleTaskStatus;
69
import org.gvsig.tools.util.Factory;
70
import org.gvsig.tools.util.HasAFile;
71
import org.gvsig.tools.util.ListBuilder;
72
import static org.gvsig.vcsgis.lib.VCSGisManager.ERR_OK;
73
import org.gvsig.vcsgis.lib.repository.VCSGisIdentityController;
74
import org.gvsig.vcsgis.lib.repository.VCSGisRepository;
75
import org.gvsig.vcsgis.lib.repository.localdb.VCSGisRepositoryLocaldbImpl;
76
import org.gvsig.vcsgis.lib.repository.localdb.tables.ConfigRepoTable;
77
import org.gvsig.vcsgis.lib.repository.localdb.tables.DataRepoTable;
78
import org.gvsig.vcsgis.lib.repository.localdb.tables.EntitiesRepoTable;
79
import org.gvsig.vcsgis.lib.repository.localdb.tables.HooksRepoTable;
80
import org.gvsig.vcsgis.lib.repository.localdb.tables.RevisionsRepoTable;
81
import org.gvsig.vcsgis.lib.repository.localdb.tables.TopologyplanRepoTable;
82
import org.gvsig.vcsgis.lib.repository.localdb.tables.UsersRepoTable;
83
import org.gvsig.vcsgis.lib.repository.remoteclient.VCSGisRepositoryClientImpl;
84
import org.gvsig.vcsgis.lib.repository.requests.VCSGisAuthenticateRequest;
85
import org.gvsig.vcsgis.lib.repository.requests.VCSGisListWCRequest;
86
import org.gvsig.vcsgis.lib.repository.requests.VCSGisPrepareWCRequest;
87
import org.gvsig.vcsgis.lib.server.VCSGisServerController;
88
import org.gvsig.vcsgis.lib.server.VCSGisServerControllerImpl;
89
import org.gvsig.vcsgis.lib.server.servlets.RepoInfoServlet;
90
import org.gvsig.vcsgis.lib.server.servlets.HookTestServlet;
91
import org.gvsig.vcsgis.lib.server.servlets.SimpleWFSServlet;
92
import org.gvsig.vcsgis.lib.server.servlets.VCSGisAuthenticateServlet;
93
import org.gvsig.vcsgis.lib.server.servlets.VCSGisCheckoutServlet;
94
import org.gvsig.vcsgis.lib.server.servlets.VCSGisCommitServlet;
95
import org.gvsig.vcsgis.lib.server.servlets.VCSGisDownloadWCServlet;
96
import org.gvsig.vcsgis.lib.server.servlets.VCSGisEntitiesServlet;
97
import org.gvsig.vcsgis.lib.server.servlets.VCSGisHistoryServlet;
98
import org.gvsig.vcsgis.lib.server.servlets.VCSGisListWCServlet;
99
import org.gvsig.vcsgis.lib.server.servlets.VCSGisPrepareWCServlet;
100
import org.gvsig.vcsgis.lib.server.servlets.VCSGisRowCreateServlet;
101
import org.gvsig.vcsgis.lib.server.servlets.VCSGisRowDeleteServlet;
102
import org.gvsig.vcsgis.lib.server.servlets.VCSGisRowIsOutofdateServlet;
103
import org.gvsig.vcsgis.lib.server.servlets.VCSGisRowUpdateServlet;
104
import org.gvsig.vcsgis.lib.server.servlets.VCSGisTopologyPlansServlet;
105
import org.gvsig.vcsgis.lib.server.servlets.VCSGisUpdateServlet;
106
import org.gvsig.vcsgis.lib.server.servlets.VCSGisUsersServlet;
107
import org.gvsig.vcsgis.lib.workspace.FeatureStoreObserver;
108
import org.gvsig.vcsgis.lib.workspace.StoreProperties;
109
import org.gvsig.vcsgis.lib.workspace.VCSGisWorkspace;
110
import org.gvsig.vcsgis.lib.workspace.VCSGisWorkspaceDescriptor;
111
import org.gvsig.vcsgis.lib.workspace.VCSGisWorkspaceDescriptorImpl;
112
import org.gvsig.vcsgis.lib.workspace.VCSGisWorkspaceImpl;
113
import static org.gvsig.vcsgis.lib.workspace.VCSGisWorkspaceImpl.CONFIG_REPOSITORY_NAME;
114
import org.gvsig.vcsgis.lib.workspace.tables.EntitiesTable;
115
import org.gvsig.vcsgis.lib.workspace.tables.EntitiesTable.EntityRow;
116
import org.gvsig.vcsgis.lib.workspace.tables.LocalRevisionsTable;
117
import org.gvsig.vcsgis.lib.workspace.tables.RemoteChangesTable;
118
import org.gvsig.vcsgis.lib.workspace.tables.TopologyplanTable;
119
import org.gvsig.vcsgis.lib.workspace.tables.UsersTable;
120
import org.gvsig.vcsgis.lib.workspace.tables.VarsTable;
121
import org.gvsig.vcsgis.lib.workspace.tables.WorkspaceChangesTable;
122
import org.slf4j.Logger;
123
import org.slf4j.LoggerFactory;
124

  
125

  
126
/**
127
 * @author gvSIG Team
128
 *
129
 */
130
@SuppressWarnings("UseSpecificCatch")
131
public class VCSGisManagerImpl implements VCSGisManager {
132
    private static final Logger LOGGER = LoggerFactory.getLogger(VCSGisManagerImpl.class);
133

  
134
    
135
    
136
    public static final List<String> INTERNAL_WORKSPACE_TABLES = ListBuilder.create(
137
            EntitiesTable.TABLE_NAME,
138
            LocalRevisionsTable.TABLE_NAME,
139
            RemoteChangesTable.TABLE_NAME,
140
            VarsTable.TABLE_NAME,
141
            WorkspaceChangesTable.TABLE_NAME,
142
            UsersTable.TABLE_NAME,
143
            TopologyplanTable.TABLE_NAME,
144
            TABLE_RESOURCES_NAME,
145
            TABLE_CONFIGURATION_NAME,
146
            TABLE_REPOSITORY_NAME
147
    );
148
    
149
    public static final List<String> INTERNAL_REPOSITORY_TABLES = ListBuilder.create(DataRepoTable.TABLE_NAME, 
150
            EntitiesRepoTable.TABLE_NAME,
151
            HooksRepoTable.TABLE_NAME,
152
            RevisionsRepoTable.TABLE_NAME,
153
            ConfigRepoTable.TABLE_NAME,
154
            TopologyplanRepoTable.TABLE_NAME,
155
            UsersRepoTable.TABLE_NAME,
156
            
157
            TABLE_RESOURCES_NAME,
158
            TABLE_CONFIGURATION_NAME,
159
            TABLE_REPOSITORY_NAME
160
    );
161
    
162
    
163
    private Map<String,VCSGisWorkspaceDescriptor> workspaces;
164
    private VCSGisCodeGenerator codeGenerator;
165
    private VCSGisUserIdentificationRequester userIdentificationRequester;
166
    private Factory<VCSGisAuthenticateRequest> authenticateRequestFactory;
167
    private Factory<VCSGisIdentityController> identityControllerFactory;
168
    
169
    public VCSGisManagerImpl() {
170
        this.workspaces = new HashMap<>();
171
        this.codeGenerator = new RandomCodeGenerator();
172
        this.userIdentificationRequester = null;
173
    }
174
    
175
    @Override
176
    public void clean() {
177
        for (VCSGisWorkspaceDescriptor workspace : workspaces.values()) {
178
            DisposeUtils.disposeQuietly(workspace);
179
        }
180
        this.workspaces = new HashMap<>();
181
        this.codeGenerator = new RandomCodeGenerator();
182
        this.userIdentificationRequester = null;
183
    }
184
    
185
    @Override
186
    public Map<String, VCSGisWorkspaceDescriptor> getWorkspaces() {
187
        return Collections.unmodifiableMap(this.workspaces);
188
    }
189

  
190
    @Override
191
    public void restoreWorkspaces(Map<String, VCSGisWorkspaceDescriptor> descriptors) {
192
        this.workspaces = new HashMap<>();
193
        if( descriptors != null ) {
194
            this.workspaces.putAll(descriptors);
195
        }
196
    }
197
    
198
    @Override
199
    public int initWorkspace(File wsfile, VCSGisRepository repo, String label, SimpleTaskStatus status) {
200
        int err = ERR_NO_ERROR;
201
        if (wsfile == null) {
202
            return ERR_DBFILE_IS_NULL;
203
        }
204
        if (status == null) {
205
            status = ToolsLocator.getTaskStatusManager().createDefaultSimpleTaskStatus("vcsgis init_workingcopy");
206
            status.setAutoremove(true);
207
            status.add();
208
        } else {
209
            status.push();
210
        }
211
        DataManager dataManager = DALLocator.getDataManager();
212
        JDBCServerExplorer explorer = null;
213
        try {
214
            wsfile = removeH2FileExtension(wsfile);
215
            if (StringUtils.isBlank(label)) {
216
                label = wsfile.getName();
217
            }
218
            err = ERR_CANT_OPEN_WORKSPACE_SERVEREXPLORER;
219
            JDBCServerExplorerParameters explorerParams = (JDBCServerExplorerParameters) dataManager.createServerExplorerParameters(DataStore.H2SPATIAL_PROVIDER_NAME);
220
            ((HasAFile) explorerParams).setFile(wsfile);
221
            explorer = (JDBCServerExplorer) dataManager.openServerExplorer(
222
                    explorerParams.getProviderName(),
223
                    explorerParams
224
            );
225
            return this.initWorkspace(explorer, repo, label, status);
226
        } catch (Exception ex) {
227
            status.abort();
228
            LOGGER.warn("Can't init workspace in '" + wsfile.getAbsolutePath() + "'.", ex);
229
            status.message(ex.getMessage());
230
            return err;
231
        } finally {
232
            status.pop();
233
            DisposeUtils.disposeQuietly(explorer);
234
        }
235
    }
236

  
237
    @Override
238
    public int initWorkspace(JDBCServerExplorer wsexplorer, VCSGisRepository repository, String label, SimpleTaskStatus status) {
239
        int err = ERR_NO_ERROR;
240
        if (wsexplorer == null) {
241
            return ERR_WSEXPLORER_IS_NULL;
242
        }
243
        if (StringUtils.isBlank(label)) {
244
            return ERR_LABEL_IS_NULL;
245
        }
246
        if (status == null) {
247
            status = ToolsLocator.getTaskStatusManager().createDefaultSimpleTaskStatus("vcsgis init_workingcopy");
248
            status.setAutoremove(true);
249
            status.add();
250
        } else {
251
            status.push();
252
        }
253
        LOGGER.info("Initializing workspace "+Objects.toString(wsexplorer.getParameters().toJson()).replace('\n', ' ').replaceAll("\"password\":\"[^\"]*\"", "\"password\":\"****\""));
254

  
255
        DataManager dataManager = DALLocator.getDataManager();
256
        VCSGisWorkspaceImpl workspace = null;
257
        try {
258
            status.setTitle("vcsgis init_workingcopy");
259
            
260
            DatabaseWorkspaceManager databaseWorkspaceManager = dataManager.createDatabaseWorkspaceManager(wsexplorer.getParameters());
261
            
262
            if(!databaseWorkspaceManager.existsTable(TABLE_CONFIGURATION)){
263
                databaseWorkspaceManager.createTable(TABLE_CONFIGURATION);
264
            }
265
            if(!databaseWorkspaceManager.existsTable(TABLE_RESOURCES)){
266
                databaseWorkspaceManager.createTable(TABLE_RESOURCES);
267
            }
268
            if(!databaseWorkspaceManager.existsTable(TABLE_REPOSITORY)){
269
                databaseWorkspaceManager.createTable(TABLE_REPOSITORY);
270
                databaseWorkspaceManager.set(CONFIG_NAME_STORESREPOSITORYID, "VCSGIS");
271
            }
272
            databaseWorkspaceManager.connect();
273

  
274
            
275
            FeatureType[] tables = new FeatureType[]{
276
                VarsTable.featureType(),
277
                EntitiesTable.featureType(),
278
                WorkspaceChangesTable.featureType(),
279
                RemoteChangesTable.featureType(),
280
                LocalRevisionsTable.featureType(),
281
                UsersTable.featureType(),
282
                TopologyplanTable.featureType()
283
            };
284
            status.setRangeOfValues(0, tables.length);
285
            int step = 1;
286
            for (FeatureType table : tables) {
287
                status.message(table.getLabel());
288
                status.setCurValue(step++);
289
                err = ERR_CANT_CREATE_TABLE + step;
290
                JDBCNewStoreParameters table_params = wsexplorer.getAddParameters();
291
                table_params.setDefaultFeatureType(table.getEditable());
292
                String tableName = table.getTags().getString("ID");
293
                table_params.setTable(tableName);
294
                wsexplorer.add(wsexplorer.getProviderName(), table_params, false);
295
                
296
                JDBCStoreParameters openParams = wsexplorer.get(tableName);
297
                databaseWorkspaceManager.writeStoresRepositoryEntry(tableName, openParams);
298
                
299
            }
300
            try {
301
                wsexplorer.execute(VCSGisUtils.getSqlTemplate(wsexplorer.getProviderName(), "createWorkspaceIndex1"));
302
                wsexplorer.execute(VCSGisUtils.getSqlTemplate(wsexplorer.getProviderName(), "createWorkspaceIndex2"));
303
                wsexplorer.execute(VCSGisUtils.getSqlTemplate(wsexplorer.getProviderName(), "createWorkspaceIndex3"));
304
                
305
            } catch (Exception ex) {
306
                LOGGER.warn("Can't create index in workspace", ex);
307
            }
308
            
309
            status.setTitle("vcsgis retrieving entities");
310
            workspace = new VCSGisWorkspaceImpl(wsexplorer, this.codeGenerator, repository, label);
311
            if (workspace.getUserIdentificationRequester() == null) {
312
                workspace.setUserIdentificationRequester(this.userIdentificationRequester);
313
            }
314
            workspace.initialize();
315
            LOGGER.info("Workspace initialized "+workspace.getCode());
316

  
317
            this.registerWorkspace(workspace);
318
            status.terminate();
319
            return ERR_NO_ERROR;
320
        } catch (UserCancelledException ex) {
321
            status.cancel();
322
            LOGGER.warn("Cancelled by user (" + getMessageLabel(wsexplorer) + ").", ex);
323
            status.message("Cancelled by user.");
324
            throw ex;
325
        } catch (Exception ex) {
326
            status.abort();
327
            LOGGER.warn("Can't init workspace in '" + getMessageLabel(wsexplorer) + "'.", ex);
328
            status.message(ex.getMessage());
329
            return err;
330
        } finally {
331
            status.pop();
332
            DisposeUtils.disposeQuietly(workspace);
333
        }
334
    }
335
    
336
    private String getMessageLabel(JDBCServerExplorer explorer) {
337
        return explorer.getParameters().getUrl();
338
    }
339

  
340
    @Override
341
    public VCSGisWorkspace openWorkspace(File wsfile) {
342
        if (wsfile == null) {
343
            return null;
344
        }
345
        JDBCServerExplorer explorer = null;
346
        try {
347
            DataManager dataManager = DALLocator.getDataManager();
348
            JDBCServerExplorerParameters explorerParams = (JDBCServerExplorerParameters) dataManager.createServerExplorerParameters(DataStore.H2SPATIAL_PROVIDER_NAME);
349
            ((HasAFile) explorerParams).setFile(wsfile);
350
            explorer = (JDBCServerExplorer) dataManager.openServerExplorer(
351
                    explorerParams.getProviderName(),
352
                    explorerParams
353
            );
354
            VCSGisWorkspace workspace = openWorkspace(explorer);
355
            return workspace;
356
        } catch (Exception ex) {
357
            return null;
358
        } finally {
359
            DisposeUtils.disposeQuietly(explorer);
360
        }
361
    }
362

  
363
    @Override
364
    public VCSGisWorkspace openWorkspace(JDBCServerExplorer wsexplorer) {
365
        if (wsexplorer == null) {
366
            return null;
367
        }
368
        JDBCServerExplorerParameters params = null;
369
        try {
370
            VCSGisWorkspace workspace;
371

  
372
            params = wsexplorer.getParameters();
373
            String url = params.getUrl();
374
            for (Iterator<VCSGisWorkspaceDescriptor> iterator = this.workspaces.values().iterator(); iterator.hasNext();) {
375
                VCSGisWorkspaceDescriptorImpl value = (VCSGisWorkspaceDescriptorImpl) iterator.next();
376
                if (DisposeUtils.getReferences(value)<=0) {
377
                    iterator.remove();
378
                    continue;
379
                }
380
                if (value.isWorkspaceInitialized() && StringUtils.equals(url, value.getExplorerParameters().getUrl())) {
381
                    workspace = value.getWorkspace();//FIXME: lo siguiente solo si es null
382
                    //workspace.getCode(); value.getCode();
383
                    if (workspace.getUserIdentificationRequester() == null) {
384
                        workspace.setUserIdentificationRequester(this.userIdentificationRequester);
385
                    }
386
                    dropExpiredCaches();
387
//                    LOGGER.debug("===: OPEN WORKSPACE "+ hexId(workspace)+ " from registry (code='"+workspace.getCode()+"', label='"+workspace.getLabel()+"')");        
388
                    return workspace;
389
                }
390
            }
391

  
392
            workspace = new VCSGisWorkspaceImpl(wsexplorer, this.codeGenerator);
393
            workspace.setUserIdentificationRequester(this.userIdentificationRequester);
394
            this.registerWorkspace(workspace);
395
            dropExpiredCaches();
396
            return workspace;
397
        } catch (Exception ex) {
398
            LOGGER.debug("Can't get workspace from "+Objects.toString(params)+".", ex);
399
            return null;
400
        }
401
    }
402

  
403
    public VCSGisWorkspace openWorkspace(File wsfile, String label) {
404
        if (wsfile == null) {
405
            return null;
406
        }
407
        JDBCServerExplorer explorer = null;
408
        try {
409
            DataManager dataManager = DALLocator.getDataManager();
410
            JDBCServerExplorerParameters explorerParams = (JDBCServerExplorerParameters) dataManager.createServerExplorerParameters(DataStore.H2SPATIAL_PROVIDER_NAME);
411
            ((HasAFile) explorerParams).setFile(wsfile);
412
            explorer = (JDBCServerExplorer) dataManager.openServerExplorer(
413
                    explorerParams.getProviderName(),
414
                    explorerParams
415
            );
416
            VCSGisWorkspace workspace = openWorkspace(explorer, label);
417
            return workspace;
418
        } catch (Exception ex) {
419
            return null;
420
        } finally {
421
            DisposeUtils.disposeQuietly(explorer);
422
        }
423
    }
424

  
425
    public VCSGisWorkspace openWorkspace(JDBCServerExplorer wsexplorer, String label) {
426
        // Abre la copia local cambiando su label y asignando un code nuevo.
427
        if (wsexplorer == null) {
428
            return null;
429
        }
430
        JDBCServerExplorerParameters params = null;
431
        try {
432
            VCSGisWorkspace workspace;
433
            params = wsexplorer.getParameters();
434
            
435
            workspace = new VCSGisWorkspaceImpl(wsexplorer, this.codeGenerator, label);
436
            workspace.setUserIdentificationRequester(this.userIdentificationRequester);
437
            this.registerWorkspace(workspace);
438
            dropExpiredCaches();
439
            return workspace;
440
        } catch (Exception ex) {
441
            LOGGER.debug("Can't get workspace from "+Objects.toString(params)+".", ex);
442
            return null;
443
        }
444
    }
445
    
446
    @Override
447
    public void registerWorkspace(VCSGisWorkspace workspace) {
448
        this.deregisterWorkspace(workspace.getCode());
449
        VCSGisWorkspaceDescriptorImpl descriptor = new VCSGisWorkspaceDescriptorImpl(workspace);
450
        this.workspaces.put(descriptor.getCode(), descriptor);
451
    }
452

  
453
    @Override
454
    public void deregisterWorkspace(File dbfile) {
455
        Path dbpath = dbfile.toPath();
456
        List<String>wscodes = new ArrayList<>();
457
        for (Iterator<VCSGisWorkspaceDescriptor> iterator = this.workspaces.values().iterator(); iterator.hasNext();) {
458
            VCSGisWorkspaceDescriptorImpl descriptor = (VCSGisWorkspaceDescriptorImpl) iterator.next();
459
            JDBCServerExplorerParameters explorerParams = descriptor.getExplorerParameters();
460
            if( explorerParams instanceof HasAFile ) {
461
                Path p = ((HasAFile) explorerParams).getFile().toPath();
462
                try {
463
                    if( Files.isSameFile(dbpath, p) ) {
464
                        wscodes.add(descriptor.getCode());
465
                    }
466
                } catch (IOException ex) {
467
                    LOGGER.debug("Can't deregister workspace '"+dbfile.getAbsolutePath()+"'.",ex);
468
                }
469
            }
470
        }        
471
        for (String wscode : wscodes) {
472
            deregisterWorkspace(wscode);
473
        }
474
    }
475

  
476
    @Override
477
    public void deregisterWorkspace(VCSGisWorkspace workspace) {
478
        this.deregisterWorkspace(workspace.getCode());
479
    }
480

  
481
    @Override
482
    public void deregisterWorkspace(String workspaceCode) {
483
        DisposeUtils.disposeQuietly(this.workspaces.get(workspaceCode));
484
        this.workspaces.remove(workspaceCode);
485
        dropExpiredCaches();
486
    }
487
    
488
    private void dropExpiredCaches() {
489
        for (Iterator<VCSGisWorkspaceDescriptor> iterator = this.workspaces.values().iterator(); iterator.hasNext();) {
490
            VCSGisWorkspaceDescriptorImpl value = (VCSGisWorkspaceDescriptorImpl) iterator.next();
491
            if(DisposeUtils.getReferences(value)<=0){
492
                iterator.remove();
493
            } else {
494
                value.dropExpiredCaches();
495
            }
496
        }
497
    }
498

  
499
    @Override
500
    public VCSGisWorkspace getWorkspace(FeatureStore store) {
501
        try {
502
            VCSGisWorkspaceImpl workspace;
503
            switch(StoreProperties.getVCSMode(store)) {
504
                case StoreProperties.MODE_NOT_VCS:
505
                    return null;
506

  
507
                case StoreProperties.MODE_VCS:
508
                    String workspace_code = StoreProperties.getWorkspaceCode(store);
509
                    VCSGisWorkspaceDescriptor workspaceDescriptor = this.workspaces.get(workspace_code);
510
                    if( workspaceDescriptor!=null ) {
511
                        workspace = (VCSGisWorkspaceImpl) workspaceDescriptor.getWorkspace();
512
                        if (workspace != null) {
513
                            if( workspace.isInStoreIgnoreChanges(store) ) {
514
                                return workspace;
515
                            }
516
                            String entity_name = StoreProperties.getEntityName(store);
517
                            EntityRow entity = (EntityRow) workspace.getWorkspaceEntityByName(entity_name);
518
                            if (entity == null) {
519
                                StoreProperties.setNotVCSMode(store);
520
                                DisposeUtils.dispose(workspace);
521
                                return null;
522
                            }
523
                            if( workspace.isCorrupt(entity,store,0) ) {
524
//                                return null; 
525
                            }
526
//                            LOGGER.debug("===: GET WORKSPACE "+ hexId(workspace)+ " from property (code='"+workspace.getCode()+"', label='"+workspace.getLabel()+"') for store '"+store.getName()+"'");        
527
                            return workspace;
528
                        }
529
                    }
530
                    // break;
531
                
532
                case StoreProperties.MODE_UNKNOWN:
533
                default:
534
                    DataStoreParameters params = store.getParameters();
535
                    if(!(params instanceof JDBCStoreParameters)) {
536
                        StoreProperties.setNotVCSMode(store);
537
                        return null;
538
                    }
539
                    String entity_name = ((JDBCStoreParameters) params).getTable();
540

  
541
                    if (INTERNAL_WORKSPACE_TABLES.contains(entity_name)) {
542
                        StoreProperties.setNotVCSMode(store);
543
                        return null;
544
                    }
545

  
... This diff was truncated because it exceeds the maximum size that can be displayed.

Also available in: Unified diff