Project

General

Profile

« Previous | Next » 

Revision 5211

Added by Matt Jones about 14 years ago

Merging in REST interface implementation that was created by Serhan Akin. Main change is
a refactored MetaCatServlet.java class, in which all of the handle* methods were moved
into a separate MetacatHandler.java class. This allows both the standard MetaCatServlet
and the new RestServlet to both call the MetacatHandler.handle* methods as needed. This
is a basic port of Akin's work without any major changes to his design or architecture.
One major difference is that the ResourceHandler.query() method has been essentially
disabled because it relied on EcoGrid classes which would have generated a circular
dependency between EcoGrid and Metacat. See the comments in ResourceHandler describing
these issues. Until the circularities are resolved, the REST query() method will
be disabled.

View differences:

test/restfiles/ecogrid_query.xml
1
<?xml version="1.0" encoding="UTF-8"?>
2
<query queryId="test.1.1" system="http://knb.ecoinformatics.org">
3
	<namespace prefix="eml">eml://ecoinformatics.org/eml-2.1.0</namespace>
4
	<title>%</title>
5
	<condition operator="LIKE" concept="title">%</condition>
6
</query>
test/restfiles/knb-lter-gce.109.6.xml
1
<?xml version="1.0"?><eml:eml xmlns:eml="eml://ecoinformatics.org/eml-2.0.1" xmlns:stmml="http://www.xml-cml.org/schema/stmml" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:ds="eml://ecoinformatics.org/dataset-2.0.1" packageId="knb-lter-gce.109.6" system="knb" xsi:schemaLocation="eml://ecoinformatics.org/eml-2.0.1 http://gce-lter.marsci.uga.edu/lter/files/schemas/eml-201/eml.xsd" scope="system">
2
<dataset scope="document">
3
<alternateIdentifier>INV-GCEM-0305a1.1.1</alternateIdentifier>
4
<title>Mollusc population abundance monitoring: Fall 2000 mid-marsh and creekbank infaunal and epifaunal mollusc abundance based on collections from GCE marsh, monitoring sites 1-10</title>
5
<creator id="GCE-LTER" scope="document"><organizationName>Georgia Coastal Ecosystems LTER Project</organizationName>
6
<address scope="document">
7
<deliveryPoint>Dept. of Marine Sciences</deliveryPoint>
8
<deliveryPoint>University of Georgia</deliveryPoint>
9
<city>Athens</city>
10
<administrativeArea>Georgia</administrativeArea>
11
<postalCode>30602-3636</postalCode>
12
<country>USA</country>
13
</address>
14
<electronicMailAddress>gcelter@uga.edu</electronicMailAddress>
15
<onlineUrl>http://gce-lter.marsci.uga.edu/lter/</onlineUrl>
16
</creator>
17
<creator scope="document">
18
<individualName>
19
<salutation>Dr.</salutation>
20
<givenName>Dale</givenName>
21
<surName>Bishop</surName>
22
</individualName>
23
<organizationName>University of Georgia</organizationName>
24
<address scope="document">
25
<deliveryPoint>Dept. of Marine Sciences</deliveryPoint>
26
<deliveryPoint>University of Georgia</deliveryPoint>
27
<city>Athens</city>
28
<administrativeArea>Georgia</administrativeArea>
29
<postalCode>30602-3636</postalCode>
30
<country>USA</country>
31
</address>
32
<electronicMailAddress>tdbish@uga.edu</electronicMailAddress>
33
<onlineUrl>http://lmer.marsci.uga.edu/bios/bishop.html</onlineUrl>
34
</creator>
35
<metadataProvider scope="document"><references>GCE-LTER</references></metadataProvider>
36
<associatedParty scope="document">
37
<individualName>
38
<salutation>Dr.</salutation>
39
<givenName>Merryl</givenName>
40
<surName>Alber</surName>
41
</individualName>
42
<organizationName>University of Georgia</organizationName>
43
<electronicMailAddress>malber@uga.edu</electronicMailAddress>
44
<role>co-author</role>
45
</associatedParty>
46
<associatedParty scope="document">
47
<individualName>
48
<salutation>Mr.</salutation>
49
<givenName>Kenneth</givenName>
50
<surName>Helm</surName>
51
</individualName>
52
<organizationName>University of Georgia Marine Institute</organizationName>
53
<electronicMailAddress>khelm@darientel.net</electronicMailAddress>
54
<role>co-author</role>
55
</associatedParty>
56
<pubDate>2003</pubDate>
57
<abstract>
58
<para>This data set is the Fall 2000 estimate of infaunal and epifaunal mollusc abundance at the GCE-LTER marsh sites used for population monitoring.  Species abundance was determined by hand-collecting all the infaunal and epifaunal molluscs from within quadrats of known area in mid-marsh and creekbank zones (n = 4 quadrats per zone) at all sites.  The molluscs were returned to the lab, fixed in fomalin, transferred to and preserved in ethanol, counted and measured (size data is reported separately).  The counts were converted to number per square meter.  Gastropod species are listed first, followed by bivalve species.  Size distribution data for these collections may be found in the GCE-LTER data set INV-GCEM-0305a2.</para>
59
</abstract>
60
<keywordSet><keyword keywordType="place">Sapelo Island</keyword>
61
<keyword keywordType="place">Georgia</keyword>
62
<keyword keywordType="place">USA</keyword>
63
</keywordSet>
64
<keywordSet>
65
<keyword keywordType="theme">GCE</keyword>
66
<keyword keywordType="theme">LTER</keyword>
67
<keyword keywordType="theme">Population Dynamics</keyword>
68
<keyword keywordType="theme">2000</keyword>
69
<keyword keywordType="theme">abundance</keyword>
70
<keyword keywordType="theme">Crassostrea</keyword>
71
<keyword keywordType="theme">creekbank</keyword>
72
<keyword keywordType="theme">density</keyword>
73
<keyword keywordType="theme">Detracia</keyword>
74
<keyword keywordType="theme">epifauna</keyword>
75
<keyword keywordType="theme">Fall</keyword>
76
<keyword keywordType="theme">Geukensia</keyword>
77
<keyword keywordType="theme">Hydrobiidae</keyword>
78
<keyword keywordType="theme">infauna</keyword>
79
<keyword keywordType="theme">intertidal</keyword>
80
<keyword keywordType="theme">Littoraria</keyword>
81
<keyword keywordType="theme">Littorina</keyword>
82
<keyword keywordType="theme">marsh</keyword>
83
<keyword keywordType="theme">Melampus</keyword>
84
<keyword keywordType="theme">mid-marsh</keyword>
85
<keyword keywordType="theme">molluscs</keyword>
86
<keyword keywordType="theme">monitoring</keyword>
87
<keyword keywordType="theme">Polymesoda</keyword>
88
<keyword keywordType="theme">population</keyword>
89
<keyword keywordType="theme">vegetated</keyword>
90
</keywordSet>
91
<intellectualRights>
92
<para>All publications based on this data set must cite the contributor and Georgia Coastal Ecosystems LTER project, and two copies of the manuscript must be submitted to the GCE-LTER Information Management Office.</para>
93
</intellectualRights>
94
<distribution scope="document">
95
<online>
96
<url function="download">http://gce-lter.marsci.uga.edu/lter/asp/db/dataset_details.asp?INV-GCEM-0305a1</url>
97
</online>
98
</distribution>
99
<coverage scope="document">
100
<geographicCoverage scope="document">
101
<geographicDescription>Overall bounding box describing the geographic region within the Georgia Coastal Ecosystems LTER study domain represented in data set INV-GCEM-0305a1</geographicDescription>
102
<boundingCoordinates>
103
<westBoundingCoordinate>-81.494228</westBoundingCoordinate>
104
<eastBoundingCoordinate>-81.194083</eastBoundingCoordinate>
105
<northBoundingCoordinate>31.550249</northBoundingCoordinate>
106
<southBoundingCoordinate>31.303976</southBoundingCoordinate>
107
</boundingCoordinates>
108
</geographicCoverage>
109
<temporalCoverage scope="document">
110
<rangeOfDates>
111
<beginDate>
112
<calendarDate>2000-10-24</calendarDate>
113
</beginDate>
114
<endDate>
115
<calendarDate>2000-10-30</calendarDate>
116
</endDate>
117
</rangeOfDates>
118
</temporalCoverage>
119
<taxonomicCoverage scope="document">
120
<generalTaxonomicCoverage>Participants were trained to recognize mollusc species in the field by D. Bishop.  Final species identifications were made (under the supervision of D. Bishop) when specimens were sorted and counted in the lab.  Most species were common and easily recognizeable.  Useful references for marsh species and molluscs in general are:  1) Heard, R.W.  1982.  Guide to Common Tidal Marsh Invertebrates of the Northeastern Gulf of Mexico.  Mississippi Alabama Sea Grant Consortium, MASGP-79-004.  82 pp. and 2) Abbott, R.T. 1974.  American Seashells.  Van Nostrand Reinhold Co., New York, Second Edition.  663 pp.</generalTaxonomicCoverage>
121
<taxonomicClassification>
122
<taxonRankName>Kingdom</taxonRankName>
123
<taxonRankValue>Animalia</taxonRankValue>
124
<taxonomicClassification>
125
<taxonRankName>Phylum</taxonRankName>
126
<taxonRankValue>Mollusca</taxonRankValue>
127
<taxonomicClassification>
128
<taxonRankName>Class</taxonRankName>
129
<taxonRankValue>Bivalvia</taxonRankValue>
130
<taxonomicClassification>
131
<taxonRankName>Order</taxonRankName>
132
<taxonRankValue>Filibranchia</taxonRankValue>
133
<taxonomicClassification>
134
<taxonRankName>Genus</taxonRankName>
135
<taxonRankValue>Crassostrea</taxonRankValue>
136
<taxonomicClassification>
137
<taxonRankName>Species</taxonRankName>
138
<taxonRankValue>Crassostrea virginica</taxonRankValue>
139
<commonName>Eastern or American Oyster</commonName>
140
</taxonomicClassification>
141
</taxonomicClassification>
142
</taxonomicClassification>
143
</taxonomicClassification>
144
</taxonomicClassification>
145
</taxonomicClassification>
146
<taxonomicClassification>
147
<taxonRankName>Kingdom</taxonRankName>
148
<taxonRankValue>Animalia</taxonRankValue>
149
<taxonomicClassification>
150
<taxonRankName>Phylum</taxonRankName>
151
<taxonRankValue>Mollusca</taxonRankValue>
152
<taxonomicClassification>
153
<taxonRankName>Class</taxonRankName>
154
<taxonRankValue>Gastropoda</taxonRankValue>
155
<taxonomicClassification>
156
<taxonRankName>Order</taxonRankName>
157
<taxonRankValue>Basommatophora</taxonRankValue>
158
<taxonomicClassification>
159
<taxonRankName>Genus</taxonRankName>
160
<taxonRankValue>Detracia</taxonRankValue>
161
<taxonomicClassification>
162
<taxonRankName>Species</taxonRankName>
163
<taxonRankValue>Detracia floridana</taxonRankValue>
164
<commonName>Florida Melampus</commonName>
165
</taxonomicClassification>
166
</taxonomicClassification>
167
</taxonomicClassification>
168
</taxonomicClassification>
169
</taxonomicClassification>
170
</taxonomicClassification>
171
<taxonomicClassification>
172
<taxonRankName>Kingdom</taxonRankName>
173
<taxonRankValue>Animalia</taxonRankValue>
174
<taxonomicClassification>
175
<taxonRankName>Phylum</taxonRankName>
176
<taxonRankValue>Mollusca</taxonRankValue>
177
<taxonomicClassification>
178
<taxonRankName>Class</taxonRankName>
179
<taxonRankValue>Bivalvia</taxonRankValue>
180
<taxonomicClassification>
181
<taxonRankName>Order</taxonRankName>
182
<taxonRankValue>Filibranchia</taxonRankValue>
183
<taxonomicClassification>
184
<taxonRankName>Genus</taxonRankName>
185
<taxonRankValue>Geukensia</taxonRankValue>
186
<taxonomicClassification>
187
<taxonRankName>Species</taxonRankName>
188
<taxonRankValue>Geukensia demissa</taxonRankValue>
189
<commonName>Ribbed Mussel</commonName>
190
</taxonomicClassification>
191
</taxonomicClassification>
192
</taxonomicClassification>
193
</taxonomicClassification>
194
</taxonomicClassification>
195
</taxonomicClassification>
196
<taxonomicClassification>
197
<taxonRankName>Kingdom</taxonRankName>
198
<taxonRankValue>Animalia</taxonRankValue>
199
<taxonomicClassification>
200
<taxonRankName>Phylum</taxonRankName>
201
<taxonRankValue>Mollusca</taxonRankValue>
202
<taxonomicClassification>
203
<taxonRankName>Class</taxonRankName>
204
<taxonRankValue>Gastropoda</taxonRankValue>
205
<taxonomicClassification>
206
<taxonRankName>Order</taxonRankName>
207
<taxonRankValue>Mesogastropoda</taxonRankValue>
208
<taxonomicClassification>
209
<taxonRankName>Family</taxonRankName>
210
<taxonRankValue>Hydrobiidae</taxonRankValue>
211
</taxonomicClassification>
212
</taxonomicClassification>
213
</taxonomicClassification>
214
</taxonomicClassification>
215
</taxonomicClassification>
216
<taxonomicClassification>
217
<taxonRankName>Kingdom</taxonRankName>
218
<taxonRankValue>Animalia</taxonRankValue>
219
<taxonomicClassification>
220
<taxonRankName>Phylum</taxonRankName>
221
<taxonRankValue>Mollusca</taxonRankValue>
222
<taxonomicClassification>
223
<taxonRankName>Class</taxonRankName>
224
<taxonRankValue>Gastropoda</taxonRankValue>
225
<taxonomicClassification>
226
<taxonRankName>Order</taxonRankName>
227
<taxonRankValue>Mesogastropoda</taxonRankValue>
228
<taxonomicClassification>
229
<taxonRankName>Genus</taxonRankName>
230
<taxonRankValue>Ilyanassa</taxonRankValue>
231
<taxonomicClassification>
232
<taxonRankName>Species</taxonRankName>
233
<taxonRankValue>Ilyanassa obsoleta</taxonRankValue>
234
<commonName>Mud Snail</commonName>
235
</taxonomicClassification>
236
</taxonomicClassification>
237
</taxonomicClassification>
238
</taxonomicClassification>
239
</taxonomicClassification>
240
</taxonomicClassification>
241
<taxonomicClassification>
242
<taxonRankName>Kingdom</taxonRankName>
243
<taxonRankValue>Animalia</taxonRankValue>
244
<taxonomicClassification>
245
<taxonRankName>Phylum</taxonRankName>
246
<taxonRankValue>Mollusca</taxonRankValue>
247
<taxonomicClassification>
248
<taxonRankName>Class</taxonRankName>
249
<taxonRankValue>Gastropoda</taxonRankValue>
250
<taxonomicClassification>
251
<taxonRankName>Order</taxonRankName>
252
<taxonRankValue>Mesogastropoda</taxonRankValue>
253
<taxonomicClassification>
254
<taxonRankName>Genus</taxonRankName>
255
<taxonRankValue>Littoraria</taxonRankValue>
256
<taxonomicClassification>
257
<taxonRankName>Species</taxonRankName>
258
<taxonRankValue>Littoraria irrorata</taxonRankValue>
259
<commonName>Marsh Periwinkle</commonName>
260
</taxonomicClassification>
261
</taxonomicClassification>
262
</taxonomicClassification>
263
</taxonomicClassification>
264
</taxonomicClassification>
265
</taxonomicClassification>
266
<taxonomicClassification>
267
<taxonRankName>Kingdom</taxonRankName>
268
<taxonRankValue>Animalia</taxonRankValue>
269
<taxonomicClassification>
270
<taxonRankName>Phylum</taxonRankName>
271
<taxonRankValue>Mollusca</taxonRankValue>
272
<taxonomicClassification>
273
<taxonRankName>Class</taxonRankName>
274
<taxonRankValue>Gastropoda</taxonRankValue>
275
<taxonomicClassification>
276
<taxonRankName>Order</taxonRankName>
277
<taxonRankValue>Basommatophora</taxonRankValue>
278
<taxonomicClassification>
279
<taxonRankName>Genus</taxonRankName>
280
<taxonRankValue>Melampus</taxonRankValue>
281
<taxonomicClassification>
282
<taxonRankName>Species</taxonRankName>
283
<taxonRankValue>Melampus bidentatus</taxonRankValue>
284
<commonName>Eastern Melampus</commonName>
285
</taxonomicClassification>
286
</taxonomicClassification>
287
</taxonomicClassification>
288
</taxonomicClassification>
289
</taxonomicClassification>
290
</taxonomicClassification>
291
<taxonomicClassification>
292
<taxonRankName>Kingdom</taxonRankName>
293
<taxonRankValue>Animalia</taxonRankValue>
294
<taxonomicClassification>
295
<taxonRankName>Phylum</taxonRankName>
296
<taxonRankValue>Mollusca</taxonRankValue>
297
<taxonomicClassification>
298
<taxonRankName>Class</taxonRankName>
299
<taxonRankValue>Bivalvia</taxonRankValue>
300
<taxonomicClassification>
301
<taxonRankName>Order</taxonRankName>
302
<taxonRankValue>Eulamellibranchia</taxonRankValue>
303
<taxonomicClassification>
304
<taxonRankName>Genus</taxonRankName>
305
<taxonRankValue>Polymesoda</taxonRankValue>
306
<taxonomicClassification>
307
<taxonRankName>Species</taxonRankName>
308
<taxonRankValue>Polymesoda caroliniana</taxonRankValue>
309
<commonName>Carolina Marsh Clam</commonName>
310
</taxonomicClassification>
311
</taxonomicClassification>
312
</taxonomicClassification>
313
</taxonomicClassification>
314
</taxonomicClassification>
315
</taxonomicClassification>
316
</taxonomicCoverage>
317
</coverage>
318
<contact scope="document"><positionName>GCE-LTER Information Manager</positionName>
319
<address scope="document">
320
<deliveryPoint>Dept. of Marine Sciences</deliveryPoint>
321
<deliveryPoint>University of Georgia</deliveryPoint>
322
<city>Athens</city>
323
<administrativeArea>Georgia</administrativeArea>
324
<postalCode>30602-3636</postalCode>
325
<country>USA</country>
326
</address>
327
<electronicMailAddress>gcelter@uga.edu</electronicMailAddress>
328
</contact>
329
<publisher scope="document"><references>GCE-LTER</references></publisher>
330
<methods>
331
<methodStep>
332
<description>
333
<section>
334
<title>Mollusc Collection</title>
335
<para>A quadrat device, constructed of treated, 1&quot; X 3/4&quot; slats, drilled and joined with bolts and wing nuts, was designed to enclose selectable areas of 0.0625, 0.25 or 0.5 m^2.  The quadrat size used for each sample may have varied between plots, zones, and sites and was dependent on apparent density of molluscs (particularly Littoraria) in the immediate area.  In high density areas, smaller quadrats were used and vice versa.  Quadrat selection was guided by the need to balance accuracy of abundance estimates, prevention of excessive removal of fauna and ensurance that field sampling was kept to a reasonable amount of time.  The quadrat was placed around the bases of the plants in the selected sampling area.  Snails are collected first, from the standing plants.  Collection started at the tops of the plants and proceeded downward to the marsh surface.  Particular attention was given to enrolled, scenescing leaves, when present, as new recruits and small species were often concentrated there.  After the plants had been inspected, the marsh surface was examined for snails and signs of infaunal bivalves.  After all epifaunal molluscs were removed, the infaunal bivalves were dug from the sediment.  This often required feeling (centimeter by centimeter) along the marsh surface and probing down inside large crab holes to make sure all individuals were collected.  All molluscs were placed in pre-labeled plastic bags and transported back to the lab.  The molluscs were washed free of sediment over a sieve (&amp;lt; 500 micron-mesh), fixed with 10% formalin and ultimately transferred to and preserved in 70% ethanol.</para>
336
</section>
337
</description>
338
</methodStep>
339
<methodStep>
340
<description>
341
<section>
342
<title>Density Estimation</title>
343
<para>Individuals were identified to the lowest practicable taxonomic unit and the number of individuals of each species was determined.  The identity of small individuals was confirmed with a stereomicroscope.  Per meter square density for each species was determined by dividing total count data for a sample by the quadrat size used for the sample.</para>
344
</section>
345
</description>
346
<instrumentation>Stereomicroscope; manufacturer: Leica (model: MZ 7.5)</instrumentation>
347
<instrumentation>Stereomicroscope; manufacturer: Wild (model: M5)</instrumentation>
348
</methodStep>
349
<sampling>
350
<studyExtent>
351
<coverage scope="document">
352
<temporalCoverage scope="document">
353
<rangeOfDates>
354
<beginDate>
355
<calendarDate>2000-10-24</calendarDate>
356
</beginDate>
357
<endDate>
358
<calendarDate>2000-10-30</calendarDate>
359
</endDate>
360
</rangeOfDates>
361
</temporalCoverage>
362
</coverage>
363
<coverage scope="document">
364
<geographicCoverage scope="document">
365
<geographicDescription>GCE Study Site GCE1 -- Eulonia, Georgia, USA.  Transitional salt marsh/upland forest site at the upper reach of the Sapelo River near Eulonia, Georgia. The main marsh area is to the north of the channel where the upland is controlled by DNR. Several small creeks lie within the study area.  Residential development is increasing on the upland areas south of the channel. A hydrographic sonde is deployed within this site attached to a private dock to the south of the main channel near the HW-17 bridge.</geographicDescription>
366
<boundingCoordinates>
367
<westBoundingCoordinate>-81.427321</westBoundingCoordinate>
368
<eastBoundingCoordinate>-81.410390</eastBoundingCoordinate>
369
<northBoundingCoordinate>31.546173</northBoundingCoordinate>
370
<southBoundingCoordinate>31.535095</southBoundingCoordinate>
371
</boundingCoordinates>
372
</geographicCoverage>
373
<geographicCoverage scope="document">
374
<geographicDescription>GCE Study Site GCE2 -- Four Mile Island, Georgia, USA.  Low salt marsh/estuary site encompassing the southwestern end of Four Mile Island and the Sapelo River near Sapelo Sound. The large island is totally marsh, with no upland, and no development. Nearby areas, like &quot;Sutherland Bluff&quot;, are developing with golf courses. A hydrographic sonde is deployed within this site attached to channel marker 4 (under U.S. Coast Guard permit). Salinity regime is similar to seawater.</geographicDescription>
375
<boundingCoordinates>
376
<westBoundingCoordinate>-81.320771</westBoundingCoordinate>
377
<eastBoundingCoordinate>-81.293259</eastBoundingCoordinate>
378
<northBoundingCoordinate>31.550249</northBoundingCoordinate>
379
<southBoundingCoordinate>31.532138</southBoundingCoordinate>
380
</boundingCoordinates>
381
</geographicCoverage>
382
<geographicCoverage scope="document">
383
<geographicDescription>GCE Study Site GCE3 -- North Sapelo, Sapelo Island, Georgia, USA.  High salinity marsh/Sapelo Sound site.  Few or no small creeks, but one large creek is easily accessed. Further upstream upland drainage is affected by culvert at Reynolds&apos; duck pond. Upland is heavily forested. Hydrographic sonde is deployed adjacent to this site attached to a channel marker (under U.S. Coast Guard permit). A huge mud flat is present at the northern tip of Sapelo Island.</geographicDescription>
384
<boundingCoordinates>
385
<westBoundingCoordinate>-81.232911</westBoundingCoordinate>
386
<eastBoundingCoordinate>-81.194083</eastBoundingCoordinate>
387
<northBoundingCoordinate>31.547261</northBoundingCoordinate>
388
<southBoundingCoordinate>31.515840</southBoundingCoordinate>
389
</boundingCoordinates>
390
</geographicCoverage>
391
<geographicCoverage scope="document">
392
<geographicDescription>GCE Study Site GCE4 -- Meridian, Georgia, USA.  Inland marsh and tidal creek site near Meridian, Georgia. The primary marsh site is to the south of the dock in front of the Sapelo Island Visitor Center. Some small creeks and one large creek (Hudson Creek) are present. Upland is heavily forested. Marsh to the north of the dock can be used for additional studies if larger areas are required. Upland to the North is being developed for residential use, so future access is uncertain. The USGS super station site (weather station plus multiple-sensor sonde) is deployed off the ferry dock. Salinity is similar to seawater because there is little freshwater input from the upland.</geographicDescription>
393
<boundingCoordinates>
394
<westBoundingCoordinate>-81.370812</westBoundingCoordinate>
395
<eastBoundingCoordinate>-81.358187</eastBoundingCoordinate>
396
<northBoundingCoordinate>31.462771</northBoundingCoordinate>
397
<southBoundingCoordinate>31.447213</southBoundingCoordinate>
398
</boundingCoordinates>
399
</geographicCoverage>
400
<geographicCoverage scope="document">
401
<geographicDescription>GCE Study Site GCE5 -- Folly River, Georgia, USA.  Salt marsh/tidal creek site at the Folly River near Doboy Sound.  No upland areas present. The north side of Doboy Sound immediately opposite is similar, but creeks are not as nice. No existing markers are close enough for sonde deployment, so we will initially use the existing sonde at Marsh Landing operated by UGAMI for surrogate hydrographic data.</geographicDescription>
402
<boundingCoordinates>
403
<westBoundingCoordinate>-81.354636</westBoundingCoordinate>
404
<eastBoundingCoordinate>-81.327494</eastBoundingCoordinate>
405
<northBoundingCoordinate>31.442310</northBoundingCoordinate>
406
<southBoundingCoordinate>31.418161</southBoundingCoordinate>
407
</boundingCoordinates>
408
</geographicCoverage>
409
<geographicCoverage scope="document">
410
<geographicDescription>GCE Study Site GCE6 -- Dean Creek, Sapelo Island, Georgia, USA.  Doboy Sound/salt marsh site at the southern end of Sapelo Island near Dean Creek and the Sapelo lighthouse.  A few small creeks are present, but a large creek (Dean Creek) is easily accessed. Upland is composed of small hammocks and some constructed causeways, with sand dune complexes east of Dean Creek and extending to the beach. Upper end of the watershed is affected by a culvert at Beach Road and heavy student use of marsh immediately adjacent to culvert. A hydrographic sonde is deployed in Doboy Sound near Commodore Island approximately 1.5km from this site. GCE6 is also the focus of Sapelo Island Microbial Observatory research on microbial diversity  and  genomics (http://simo.marsci.uga.edu)</geographicDescription>
411
<boundingCoordinates>
412
<westBoundingCoordinate>-81.300786</westBoundingCoordinate>
413
<eastBoundingCoordinate>-81.264957</eastBoundingCoordinate>
414
<northBoundingCoordinate>31.393522</northBoundingCoordinate>
415
<southBoundingCoordinate>31.371279</southBoundingCoordinate>
416
</boundingCoordinates>
417
</geographicCoverage>
418
<geographicCoverage scope="document">
419
<geographicDescription>GCE Study Site GCE7 -- Carrs Island, Georgia, USA.  Freshwater marsh site along the northern bank of Hammersmith Creek at the south end of Carrs Island. Upland area is heavily forested. Northern 3/4 of the island was diked for rice agriculture, but the southern 1/4 is undisturbed. A hydrographic sonde is deployed in the Altamaha River near Hammersmith Creek, adjacent to this site.</geographicDescription>
420
<boundingCoordinates>
421
<westBoundingCoordinate>-81.494228</westBoundingCoordinate>
422
<eastBoundingCoordinate>-81.475991</eastBoundingCoordinate>
423
<northBoundingCoordinate>31.349002</northBoundingCoordinate>
424
<southBoundingCoordinate>31.334587</southBoundingCoordinate>
425
</boundingCoordinates>
426
</geographicCoverage>
427
<geographicCoverage scope="document">
428
<geographicDescription>GCE Study Site GCE8 -- Alligator Creek, Georgia, USA.  Mid-estuary/salt marsh site on the west side of Friday Cap Creek along the Altamaha River. This is a brackish marsh with salinities around 14 PSU during drought, less than 5 PSU normally. A hydrographic sonde is deployed adjacent to this site in the Altamaha River near Alligator Creek, attached to the US Coast Guard Daymarker 2 pilings.</geographicDescription>
429
<boundingCoordinates>
430
<westBoundingCoordinate>-81.426316</westBoundingCoordinate>
431
<eastBoundingCoordinate>-81.410043</eastBoundingCoordinate>
432
<northBoundingCoordinate>31.317771</northBoundingCoordinate>
433
<southBoundingCoordinate>31.303976</southBoundingCoordinate>
434
</boundingCoordinates>
435
</geographicCoverage>
436
<geographicCoverage scope="document">
437
<geographicDescription>GCE Study Site GCE9 -- Rockdedundy Island, Georgia, USA.  Lower estuary tidal creek and marsh site at Rockdedundy Island west of Wolf Island. A hydrographic sonde is deployed approximately 2km from this site in the Altamaha River near Rockdedundy Island, attached to the US Coast Guard Daymarker 201 pilings.</geographicDescription>
438
<boundingCoordinates>
439
<westBoundingCoordinate>-81.346982</westBoundingCoordinate>
440
<eastBoundingCoordinate>-81.326749</eastBoundingCoordinate>
441
<northBoundingCoordinate>31.358146</northBoundingCoordinate>
442
<southBoundingCoordinate>31.339162</southBoundingCoordinate>
443
</boundingCoordinates>
444
</geographicCoverage>
445
<geographicCoverage scope="document">
446
<geographicDescription>GCE Study Site GCE10 -- Hunt Camp, Sapelo Island, Georgia, USA.  Barrier island/marsh site on western Sapelo Island.  This site is located at the upper reaches of the Duplin River, and is within the Sapelo Island National Estuarine Research Reserve. Existing well fields border small marsh area to northwest, some wells have been installed to south end of hammock where marsh is more extensive and permanent plots are located. Two existing hydrographic sondes and weather stations within this site are operated by SINERR (Hunt Camp dock) and UGAMI (flume dock).</geographicDescription>
447
<boundingCoordinates>
448
<westBoundingCoordinate>-81.296229</westBoundingCoordinate>
449
<eastBoundingCoordinate>-81.261288</eastBoundingCoordinate>
450
<northBoundingCoordinate>31.497780</northBoundingCoordinate>
451
<southBoundingCoordinate>31.464728</southBoundingCoordinate>
452
</boundingCoordinates>
453
</geographicCoverage>
454
</coverage>
455
</studyExtent>
456
<samplingDescription>
457
<section>
458
<title>Mollusc Abundance Survey</title>
459
<para>Samples were taken within 3 meters of the GCE permanent monitoring plots, which were established in the marsh areas at each GCE sampling site prior to this first sample trip.  Each site was divided into two nominal zones -- creekbank and mid-marsh -- and eight plots were randomly located in each zone and marked with stakes.</para>
460
<para>This study represents a regular component of the population monitoring program of the GCE-LTER.  It was designed to document abundance and spatial distribution of common infaunal and epifaunal molluscs and track their changes over time at each of the ten intertidal marsh monitoring sites within the GCE-LTER domain.  All molluscs within randomly placed, small quadrats at four plots in the mid and creekbank marshes at each of the permanent monitoring sites were collected by hand.  This design resulted in four replicate samples per zone (n = 4) at each site (n = 8 per site).  Collections were made by different teams of trained individuals (staff and volunteers).  Molluscs were returned to the lab, preserved and enumerated.</para>
461
<para>For each sample, an area of marsh was selected that was similar in gross appearance and near to (within 3 m of) a GCE permanent monitoring plot. The permanent plots were not used so as to avoid damaging the plants within them. Permanent plots 1, 3, 6, and 8 in each zone were chosen to be the anchor plots for selecting actual sample areas. When wrack or other disturbances necessitated the use of alternate plots, these are indicated in the data set and noted as anomalies.</para>
462
</section>
463
</samplingDescription>
464
</sampling>
465
</methods>
466
<project scope="document"><title>Georgia Coastal Ecosystems LTER Project</title>
467
<personnel scope="document">
468
<individualName>
469
<givenName>James</givenName>
470
<givenName>T.</givenName>
471
<surName>Hollibaugh</surName>
472
</individualName>
473
<role>principalInvestigator</role>
474
</personnel>
475
<personnel scope="document">
476
<individualName>
477
<givenName>Steven</givenName>
478
<givenName>C.</givenName>
479
<surName>Pennings</surName>
480
</individualName>
481
<role>principalInvestigator</role>
482
</personnel>
483
<personnel scope="document">
484
<individualName>
485
<givenName>Wade</givenName>
486
<givenName>M.</givenName>
487
<surName>Sheldon</surName>
488
</individualName>
489
<role>informationManager</role>
490
</personnel>
491
<abstract>
492
<para>We propose to establish a Long Term Ecological Research site on the central Georgia coast in the vicinity of Sapelo Island. This is a barrier island and marsh complex with the Altamaha River, one of the largest and least developed rivers on the east coast of the US, as the primary source of fresh water. The proposed study would investigate the linkages between local and distant upland areas mediated by water - surface water and ground water - delivery to the coastal zone. We would explicitly examine the relationship between variability in environmental factors driven by river flow, primarily salinity because we can measure it at high frequency, and ecosystem processes and structure. We will accomplish this by comparing estuary/marsh complexes separated from the Altamaha River by one or two lagoonal estuary/marsh complexes that damp and attenuate the river signal. This spatial gradient is analogous to the temporal trend in riverine influence expected as a result of development in the watershed. We will implement a monitoring system that documents physical and biological variables and use the time trends and spatial distributions of these variables and of their variance structure to address questions about the factors controlling distributions, trophic structure, diversity, and biogeochemistry. An existing GIS-based hydrologic model will be modified to incorporate changes in river water resulting from changes in land use patterns that can be expected as the watershed develops. This model will be linked to ecosystem models and will serve as an heuristic and management tool. Another consequence of coastal development is that as river flow decreases, groundwater flow increases and becomes nutrified. We will compare the effects of ground water discharge from the surficial aquifer in relatively pristine (Sapelo Island) versus more urbanized (mainland) sites to assess the relative importance of fresh water versus nutrients to productivity, structure and biomass turnover rate in marshes influenced by groundwater. We will also investigate the effect of marine processes (tides, storm surge) on mixing across the fresh/salt interface in the surficial aquifer. Additional physical studies will relate the morphology of salt marsh - tidal creek channel complexes to tidal current distributions and exchange. These findings will be incorporated into a physical model that will be coupled to an existing ecosystem model. The land/ocean margin ecosystem lies at the interface between two ecosystems in which distinctly different groups of decomposers control organic matter degradation. The terrestrial ecosystem is largely dominated by fungal decomposers, while bacterial decomposers dominate the marine ecosystem. Both groups are important in salt marsh-dominated ecosystems. Specific studies will examine, at the level of individual cells and hyphae, the relationship bacteria and fungi in the consortia that decompose standing dead Spartina and other marsh plants and examine how, or if, this changes along the salinity gradient.</para>
493
</abstract>
494
<funding>
495
<para>This material is based upon work supported by the National Science Foundation under Cooperative Agreement #OCE-9982133 (May 2000 to May 2006). Any opinions, findings, conclusions, or recommendations expressed in the material are those of the author(s) and do not necessarily reflect the views of the National Science Foundation.</para>
496
</funding>
497
</project>
498
<access authSystem="knb" order="allowFirst" scope="document">
499
<allow>
500
<principal>uid=GCE,o=lter,dc=ecoinformatics,dc=org</principal>
501
<permission>all</permission>
502
</allow>
503
<allow>
504
<principal>public</principal>
505
<permission>read</permission>
506
</allow>
507
</access>
508
<dataTable scope="document">
509
<entityName>INV-GCEM-0305a1_1_1.TXT</entityName>
510
<physical scope="document">
511
<objectName>INV-GCEM-0305a1_1_1.TXT</objectName>
512
<size unit="rows">641</size>
513
<characterEncoding>ASCII</characterEncoding>
514
<dataFormat>
515
<textFormat>
516
<numHeaderLines>1</numHeaderLines>
517
<numFooterLines>0</numFooterLines>
518
<recordDelimiter>\r</recordDelimiter>
519
<numPhysicalLinesPerRecord>1</numPhysicalLinesPerRecord>
520
<attributeOrientation>column</attributeOrientation>
521
<simpleDelimited>
522
<fieldDelimiter>\t</fieldDelimiter>
523
</simpleDelimited>
524
</textFormat>
525
</dataFormat>
526
<distribution scope="document">
527
<online>
528
<url function="download">http://gce-lter.marsci.uga.edu/lter/asp/db/send_file.asp?name=metacat-user&amp;email=none&amp;affiliation=LNO&amp;notify=0&amp;accession=INV-GCEM-0305a1&amp;filename=INV-GCEM-0305a1_1_1.TXT</url>
529
</online>
530
</distribution>
531
</physical>
532
<method>
533
<methodStep>
534
<description><para>Data file post-processing in the GCE-LTER Information Management Office</para></description>
535
<software id="gcetoolbox" scope="document">
536
<title>GCE Data Toolbox for MATLAB(r)</title>
537
<creator scope="document">
538
<individualName>
539
<salutation>Mr.</salutation>
540
<givenName>Wade</givenName>
541
<givenName>M.</givenName>
542
<surName>Sheldon</surName>
543
</individualName>
544
<address scope="document">
545
<deliveryPoint>Dept. of Marine Sciences</deliveryPoint>
546
<deliveryPoint>University of Georgia</deliveryPoint>
547
<city>Athens</city>
548
<administrativeArea>Georgia</administrativeArea>
549
<postalCode>30602-3636</postalCode>
550
<country>USA</country>
551
</address>
552
<electronicMailAddress>sheldon@uga.edu</electronicMailAddress>
553
<onlineUrl>http://gce-lter.marsci.uga.edu/lter/bios/wsheldon.htm</onlineUrl>
554
</creator>
555
<associatedParty scope="document">
556
<organizationName>Georgia Coastal Ecosystems LTER Project</organizationName>
557
<address scope="document">
558
<deliveryPoint>Dept. of Marine Sciences</deliveryPoint>
559
<deliveryPoint>University of Georgia</deliveryPoint>
560
<city>Athens</city>
561
<administrativeArea>Georgia</administrativeArea>
562
<postalCode>30602-3636</postalCode>
563
<country>USA</country>
564
</address>
565
<electronicMailAddress>gcelter@uga.edu</electronicMailAddress>
566
<role>sponsoring research program</role>
567
</associatedParty>
568
<abstract>
569
<para>The GCE Data Toolbox is a comprehensive library of functions for managing, analyzing and displaying ecological data and metadata (i.e. documentation) stored using the GCE Data Structure specification. These data structures are specialized arrays designed to store a single tabular data set along with all information required to interpret the data and generate formatted documentation.  The various metadata fields in the structures are queried by toolbox functions for all operations, allowing functions to process and format values appropriately based on the type of information they represent. This semantic processing approach supports highly automated and intelligent analysis of data stored in GCE Data Structures.</para>
570
</abstract>
571
<implementation>
572
<distribution scope="document">
573
<online>
574
<url function="download">http://gce-lter.marsci.uga.edu/lter/research/tools/toolbox_download.htm</url>
575
</online>
576
</distribution>
577
<operatingSystem>Linux</operatingSystem>
578
<operatingSystem>Windows NT4</operatingSystem>
579
<operatingSystem>Windows 2000</operatingSystem>
580
<operatingSystem>Windows XP</operatingSystem>
581
<operatingSystem>Sun Solaris</operatingSystem>
582
<operatingSystem>Mac OS X</operatingSystem>
583
<programmingLanguage>MATLAB</programmingLanguage>
584
</implementation>
585
<version>1.9x</version>
586
</software>
587
<subStep>
588
<description>
589
<para>05/21/2003: new GCE Data Structure 1.1 created (&apos;newstruct&apos;)</para>
590
</description>
591
</subStep>
592
<subStep>
593
<description>
594
<para>05/21/2003: 640 rows imported from ASCII data file &apos;INV-GCEM-0305a1.TXT&apos; (&apos;imp_ascii&apos;)</para>
595
</description>
596
</subStep>
597
<subStep>
598
<description>
599
<para>05/21/2003: 10 metadata fields in file header parsed (&apos;parse_header&apos;)</para>
600
</description>
601
</subStep>
602
<subStep>
603
<description>
604
<para>05/21/2003: data structure validated (&apos;gce_valid&apos;)</para>
605
</description>
606
</subStep>
607
<subStep>
608
<description>
609
<para>05/21/2003: Q/C flagging criteria applied, &apos;flags&apos; field updated (&apos;dataflag&apos;)</para>
610
</description>
611
</subStep>
612
<subStep>
613
<description>
614
<para>05/21/2003: imported Data, Dataset, Project, Site, Study, Status, Supplement metadata descriptors from the GCE Metabase (&apos;imp_gcemetadata&apos;)</para>
615
</description>
616
</subStep>
617
<subStep>
618
<description>
619
<para>05/21/2003: Q/C flagging criteria applied, &apos;flags&apos; field updated (&apos;dataflag&apos;)</para>
620
</description>
621
</subStep>
622
<subStep>
623
<description>
624
<para>05/21/2003: manually edited data set metadata (&apos;ui_editmetadata&apos;)</para>
625
</description>
626
</subStep>
627
<subStep>
628
<description>
629
<para>10/29/2003: imported Data, Dataset, Project, Site, Study, Status, Supplement metadata descriptors from the GCE Metabase (&apos;imp_gcemetadata&apos;)</para>
630
</description>
631
</subStep>
632
<subStep>
633
<description>
634
<para>10/29/2003: Q/C flagging criteria applied, &apos;flags&apos; field updated (&apos;dataflag&apos;)</para>
635
</description>
636
</subStep>
637
<subStep>
638
<description>
639
<para>10/29/2003: updated 4 metadata fields (&apos;addmeta&apos;)</para>
640
</description>
641
</subStep>
642
<subStep>
643
<description>
644
<para>10/29/2003: updated 15 metadata fields in the Status, Data sections (&apos;updatecols&apos;)</para>
645
</description>
646
</subStep>
647
</methodStep>
648
<qualityControl>
649
<description>
650
<para>QA/QC flags are generated automatically according to domain criteria specified for each data column.  A flag column is generated and appended to the data table if any flags are assigned to any value, listing the flags for each column on each row.</para>
651
</description>
652
<software scope="document">
653
<references>gcetoolbox</references>
654
</software>
655
</qualityControl>
656
</method>
657
<additionalInfo>
658
<para>Data Anomalies: Site 4, zone 1, plots 2 and 4 substitute for plots 1 and 6.</para>
659
</additionalInfo>
660
<attributeList>
661
<attribute id="att.1" scope="document">
662
<attributeName>Year</attributeName>
663
<attributeDefinition>Calendar year of observation</attributeDefinition>
664
<storageType typeSystem="http://www.w3.org/2001/XMLSchema-datatypes">integer</storageType>
665
<measurementScale>
666
<datetime>
667
<formatString>YYYY</formatString>
668
<dateTimePrecision>1</dateTimePrecision>
669
<dateTimeDomain></dateTimeDomain>
670
</datetime>
671
</measurementScale>
672
<missingValueCode>
673
<code>NaN</code>
674
<codeExplanation>value not recorded or invalid</codeExplanation>
675
</missingValueCode>
676
</attribute>
677
<attribute id="att.2" scope="document">
678
<attributeName>Month</attributeName>
679
<attributeDefinition>Calendar month of observation</attributeDefinition>
680
<storageType typeSystem="http://www.w3.org/2001/XMLSchema-datatypes">integer</storageType>
681
<measurementScale>
682
<datetime>
683
<formatString>MM</formatString>
684
<dateTimePrecision>1</dateTimePrecision>
685
<dateTimeDomain>
686
<bounds>
687
<minimum exclusive="false">1</minimum>
688
<maximum exclusive="false">12</maximum>
689
</bounds>
690
</dateTimeDomain>
691
</datetime>
692
</measurementScale>
693
<missingValueCode>
694
<code>NaN</code>
695
<codeExplanation>value not recorded or invalid</codeExplanation>
696
</missingValueCode>
697
</attribute>
698
<attribute id="att.3" scope="document">
699
<attributeName>Day</attributeName>
700
<attributeDefinition>Calendar day of observation</attributeDefinition>
701
<storageType typeSystem="http://www.w3.org/2001/XMLSchema-datatypes">integer</storageType>
702
<measurementScale>
703
<datetime>
704
<formatString>DD</formatString>
705
<dateTimePrecision>1</dateTimePrecision>
706
<dateTimeDomain>
707
<bounds>
708
<minimum exclusive="false">1</minimum>
709
<maximum exclusive="false">31</maximum>
710
</bounds>
711
</dateTimeDomain>
712
</datetime>
713
</measurementScale>
714
<missingValueCode>
715
<code>NaN</code>
716
<codeExplanation>value not recorded or invalid</codeExplanation>
717
</missingValueCode>
718
</attribute>
719
<attribute id="att.4" scope="document">
720
<attributeName>Site</attributeName>
721
<attributeDefinition>GCE-LTER sampling site number</attributeDefinition>
722
<storageType typeSystem="http://www.w3.org/2001/XMLSchema-datatypes">integer</storageType>
723
<measurementScale>
724
<ordinal>
725
<nonNumericDomain>
726
<enumeratedDomain enforced="yes">
727
<codeDefinition>
728
<code>1</code>
729
<definition>GCE1</definition>
730
</codeDefinition>
731
<codeDefinition>
732
<code>2</code>
733
<definition>GCE2</definition>
734
</codeDefinition>
735
<codeDefinition>
736
<code>3</code>
737
<definition>GCE3</definition>
738
</codeDefinition>
739
<codeDefinition>
740
<code>4</code>
741
<definition>GCE4</definition>
742
</codeDefinition>
743
<codeDefinition>
744
<code>5</code>
745
<definition>GCE5</definition>
746
</codeDefinition>
747
<codeDefinition>
748
<code>6</code>
749
<definition>GCE6</definition>
750
</codeDefinition>
751
<codeDefinition>
752
<code>7</code>
753
<definition>GCE7</definition>
754
</codeDefinition>
755
<codeDefinition>
756
<code>8</code>
757
<definition>GCE8</definition>
758
</codeDefinition>
759
<codeDefinition>
760
<code>9</code>
761
<definition>GCE9</definition>
762
</codeDefinition>
763
<codeDefinition>
764
<code>10</code>
765
<definition>GCE10</definition>
766
</codeDefinition>
767
</enumeratedDomain>
768
</nonNumericDomain>
769
</ordinal>
770
</measurementScale>
771
<missingValueCode>
772
<code>NaN</code>
773
<codeExplanation>value not recorded or invalid</codeExplanation>
774
</missingValueCode>
775
</attribute>
776
<attribute id="att.5" scope="document">
777
<attributeName>Zone</attributeName>
778
<attributeDefinition>Marsh zone code (1=Creekbank, 2=Mid-marsh)</attributeDefinition>
779
<storageType typeSystem="http://www.w3.org/2001/XMLSchema-datatypes">integer</storageType>
780
<measurementScale>
781
<ordinal>
782
<nonNumericDomain>
783
<enumeratedDomain enforced="yes">
784
<codeDefinition>
785
<code>1</code>
786
<definition>Creekbank zone</definition>
787
</codeDefinition>
788
<codeDefinition>
789
<code>2</code>
790
<definition>Mid-marsh zone</definition>
791
</codeDefinition>
792
</enumeratedDomain>
793
</nonNumericDomain>
794
</ordinal>
795
</measurementScale>
796
<missingValueCode>
797
<code>NaN</code>
798
<codeExplanation>value not recorded or invalid</codeExplanation>
799
</missingValueCode>
800
</attribute>
801
<attribute id="att.6" scope="document">
802
<attributeName>Plot</attributeName>
803
<attributeDefinition>GCE-LTER permanent plot number</attributeDefinition>
804
<storageType typeSystem="http://www.w3.org/2001/XMLSchema-datatypes">integer</storageType>
805
<measurementScale>
806
<nominal>
807
<nonNumericDomain>
808
<textDomain>
809
<definition>GCE-LTER permanent plot number</definition>
810
</textDomain>
811
</nonNumericDomain>
812
</nominal>
813
</measurementScale>
814
<missingValueCode>
815
<code>NaN</code>
816
<codeExplanation>value not recorded or invalid</codeExplanation>
817
</missingValueCode>
818
</attribute>
819
<attribute id="att.7" scope="document">
820
<attributeName>Species</attributeName>
821
<attributeDefinition>Latinized name of the mollusc species collected</attributeDefinition>
822
<storageType typeSystem="http://www.w3.org/2001/XMLSchema-datatypes">string</storageType>
823
<measurementScale>
824
<nominal>
825
<nonNumericDomain>
826
<enumeratedDomain enforced="yes">
827
<codeDefinition>
828
<code>Littoraria</code>
829
<definition>Littoraria irrorata</definition>
830
</codeDefinition>
831
<codeDefinition>
832
<code>Melampus</code>
833
<definition>Melampus bidentatus</definition>
834
</codeDefinition>
835
<codeDefinition>
836
<code>Detracia</code>
837
<definition>Detracia floridana</definition>
838
</codeDefinition>
839
<codeDefinition>
840
<code>Hydrobiidae</code>
841
<definition>undifferentiated Hydrobiidae species</definition>
842
</codeDefinition>
843
<codeDefinition>
844
<code>Ilyanassa</code>
845
<definition>Ilyanassa obsoleta</definition>
846
</codeDefinition>
847
<codeDefinition>
848
<code>Geukensia</code>
849
<definition>Geukensia demissa</definition>
850
</codeDefinition>
851
<codeDefinition>
852
<code>Polymesoda</code>
853
<definition>Polymesoda caroliniana</definition>
854
</codeDefinition>
855
<codeDefinition>
856
<code>Crassostrea</code>
857
<definition>Crassostrea virginica</definition>
858
</codeDefinition>
859
</enumeratedDomain>
860
</nonNumericDomain>
861
</nominal>
862
</measurementScale>
863
</attribute>
864
<attribute id="att.8" scope="document">
865
<attributeName>Mollusc_Count</attributeName>
866
<attributeDefinition>Number of individuals collected in the specified quadrat</attributeDefinition>
867
<storageType typeSystem="http://www.w3.org/2001/XMLSchema-datatypes">integer</storageType>
868
<measurementScale>
869
<interval>
870
<unit>
871
<standardUnit>number</standardUnit>
872
</unit>
873
<precision>1</precision>
874
<numericDomain>
875
<numberType>whole</numberType>
876
<bounds>
877
<minimum exclusive="false">0</minimum>
878
</bounds>
879
</numericDomain>
880
</interval>
881
</measurementScale>
882
<missingValueCode>
883
<code>NaN</code>
884
<codeExplanation>value not recorded or invalid</codeExplanation>
885
</missingValueCode>
886
</attribute>
887
<attribute id="att.9" scope="document">
888
<attributeName>Quadrat_Area</attributeName>
889
<attributeDefinition>Number of square meters in the quadrat sampled</attributeDefinition>
890
<storageType typeSystem="http://www.w3.org/2001/XMLSchema-datatypes">float</storageType>
891
<measurementScale>
892
<ratio>
893
<unit>
894
<standardUnit>squareMeter</standardUnit>
895
</unit>
896
<precision>0.0001</precision>
897
<numericDomain>
898
<numberType>real</numberType>
899
<bounds>
900
<minimum exclusive="false">0</minimum>
901
</bounds>
902
</numericDomain>
903
</ratio>
904
</measurementScale>
905
<missingValueCode>
906
<code>NaN</code>
907
<codeExplanation>value not recorded or invalid</codeExplanation>
908
</missingValueCode>
909
</attribute>
910
<attribute id="att.10" scope="document">
911
<attributeName>Mollusc_Density</attributeName>
912
<attributeDefinition>Calculated number of individuals per meter squared</attributeDefinition>
913
<storageType typeSystem="http://www.w3.org/2001/XMLSchema-datatypes">float</storageType>
914
<measurementScale>
915
<ratio>
916
<unit>
917
<standardUnit>numberPerMeterSquared</standardUnit>
918
</unit>
919
<precision>1</precision>
920
<numericDomain>
921
<numberType>real</numberType>
922
<bounds>
923
<minimum exclusive="false">0</minimum>
924
</bounds>
925
</numericDomain>
926
</ratio>
927
</measurementScale>
928
<missingValueCode>
929
<code>NaN</code>
930
<codeExplanation>value not recorded or invalid</codeExplanation>
931
</missingValueCode>
932
<method>
933
<methodStep>
934
<description>
935
<para>Calculations: Mollusc_Density = Mollusc_Count / Quadrat_Area</para>
936
</description>
937
</methodStep>
938
</method>
939
</attribute>
940
</attributeList>
941
</dataTable>
942
</dataset>
943
</eml:eml>
test/edu/ucsb/nceas/metacattest/restservice/MetacatRestClientTest.java
1
/**
2
 *  '$RCSfile$'
3
 *  Copyright: 2000 Regents of the University of California and the
4
 *              National Center for Ecological Analysis and Synthesis
5
 *
6
 *   '$Author: Serhan AKIN $'
7
 *     '$Date: 2009-07-15 10:54:27 +0300  $'
8
 *
9
 * This program is free software; you can redistribute it and/or modify
10
 * it under the terms of the GNU General Public License as published by
11
 * the Free Software Foundation; either version 2 of the License, or
12
 * (at your option) any later version.
13
 *
14
 * This program is distributed in the hope that it will be useful,
15
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
16
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
17
 * GNU General Public License for more details.
18
 *
19
 * You should have received a copy of the GNU General Public License
20
 * along with this program; if not, write to the Free Software
21
 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
22
 */
23
package edu.ucsb.nceas.metacattest.restservice;
24

  
25
import java.io.FileReader;
26
import java.io.IOException;
27
import java.io.Reader;
28
import java.util.Calendar;
29
import java.util.Date;
30
import java.util.GregorianCalendar;
31
import java.util.SimpleTimeZone;
32
import java.util.TimeZone;
33
import java.util.Vector;
34

  
35
import junit.framework.Test;
36
import junit.framework.TestSuite;
37
import edu.ucsb.nceas.MCTestCase;
38
import edu.ucsb.nceas.metacat.client.DocumentNotFoundException;
39
import edu.ucsb.nceas.metacat.client.MetacatAuthException;
40
import edu.ucsb.nceas.metacat.client.MetacatException;
41
import edu.ucsb.nceas.metacat.client.MetacatInaccessibleException;
42
import edu.ucsb.nceas.metacat.client.rest.MetacatRest;
43
import edu.ucsb.nceas.metacat.client.rest.MetacatRestClient;
44
import edu.ucsb.nceas.metacat.properties.PropertyService;
45
import edu.ucsb.nceas.utilities.IOUtil;
46
import edu.ucsb.nceas.utilities.PropertyNotFoundException;
47

  
48
/**
49
 * A JUnit test for testing Step class processing
50
 */
51
public class MetacatRestClientTest extends MCTestCase{
52
	protected static String contextUrl;
53
	static {
54
		try {
55
		    contextUrl = PropertyService.getProperty("test.contextUrl");
56
			username = PropertyService.getProperty("test.mcUser");
57
			password = PropertyService.getProperty("test.mcPassword");
58
			anotheruser = PropertyService.getProperty("test.mcAnotherUser");
59
			anotherpassword = PropertyService.getProperty("test.mcAnotherPassword");
60
		} catch (PropertyNotFoundException pnfe) {
61
			System.err.println("Could not get property in static block: " 
62
					+ pnfe.getMessage());
63
		}
64
	}
65
	
66
	
67
	
68
    private String failpass = "sdfsdfsdfsd";
69
    private String prefix = "test";
70
    private String newdocid = null;
71
    private String testfile = "test/jones.204.22.xml";
72
    private String onlinetestdatafile = "test/onlineDataFile1";
73
    private String queryFile = "test/query.xml";
74
    private String testdocument = "";
75
    private MetacatRest m;
76
    private String spatialTestFile = "test/spatialEml.xml";
77
    private static final int TIME = 30;
78
    private static final String DOCID = "docid";
79
    private static final String DATAID = "dataid";
80
    
81
    private static final String public_doc_id = "serhan.3.1";
82
    private static final String authorized_doc_id = "serhan.4.2";
83
    private static final String notexisting_doc_id = "serhan.1.1";
84
    private static final String ecogridQueryFile= "test/restfiles/ecogrid_query.xml";
85

  
86

  
87
    private static final String insert_file = "test/restfiles/knb-lter-gce.109.6.xml";
88
    
89
    
90
    /**
91
     * Constructor to build the test
92
     *
93
     * @param name the name of the test method
94
     */
95
    public MetacatRestClientTest(String name)
96
    {
97
        super(name);
98
        newdocid = generateDocid();
99
    }
100

  
101
    /**
102
     * Establish a testing framework by initializing appropriate objects
103
     */
104
    public void setUp()
105
    {
106
        try {
107
            FileReader fr = new FileReader(testfile);
108
            testdocument = IOUtil.getAsString(fr, true);
109
        } catch (IOException ioe) {
110
            fail("Can't read test data to run the test: " + testfile);
111
        }
112

  
113
        m = new MetacatRestClient(contextUrl);
114
    }
115
    
116
    /**
117
     * Release any objects after tests are complete
118
     */
119
    public void tearDown()
120
    {
121
    }
122

  
123
    /**
124
     * Create a suite of tests to be run together
125
     */
126
    public static Test suite()
127
    {
128
      TestSuite suite = new TestSuite();
129
      suite.addTest(new MetacatRestClientTest("initialize"));
130
      suite.addTest(new MetacatRestClientTest("invalidLogin"));
131
      suite.addTest(new MetacatRestClientTest("login"));
132
      suite.addTest(new MetacatRestClientTest("logout"));
133
      suite.addTest(new MetacatRestClientTest("get"));
134
      suite.addTest(new MetacatRestClientTest("getPrivate"));
135
      suite.addTest(new MetacatRestClientTest("invalidGet"));
136
      suite.addTest(new MetacatRestClientTest("authenticatedGet"));
137
      suite.addTest(new MetacatRestClientTest("query"));
138
      suite.addTest(new MetacatRestClientTest("authenticatedQuery"));      
139
      suite.addTest(new MetacatRestClientTest("crud"));
140
      suite.addTest(new MetacatRestClientTest("getNextObject"));
141
      suite.addTest(new MetacatRestClientTest("getNextRevision"));
142
      suite.addTest(new MetacatRestClientTest("getAllDocids"));
143
      suite.addTest(new MetacatRestClientTest("isRegistered"));
144
      suite.addTest(new MetacatRestClientTest("addLSID"));
145
      return suite;
146
  }
147
    
148
    
149
    /**
150
     * Run an initial test that always passes to check that the test
151
     * harness is working.
152
     */
153
    public void initialize() {
154
        assertTrue(1 == 1);
155
    }
156
    
157
    /**
158
     * Test the login() function with valid credentials
159
     */
160
    public void login()
161
    {
162
        debug("\nStarting login test...");
163
        debug("-------------------------------------------------------");
164
        // Try a valid login
165
        try {
166
            String response = m.login(username, password);
167
            debug("login(): response=" + response);
168
            assertTrue(response != null);
169
            assertTrue(response.indexOf("<login>") != -1);
170
            String sessionId = m.getSessionId();
171
            debug("login(): Session ID=" + m.getSessionId());
172
            assertTrue(sessionId != null);
173
            assertTrue(response.indexOf(m.getSessionId()) != -1);
174
        } catch (MetacatAuthException mae) {
175
            fail("Authorization failed:\n" + mae.getMessage());
176
        } catch (MetacatInaccessibleException mie) {
177
            fail("Metacat Inaccessible:\n" + mie.getMessage());
178
        }
179
    }
180
    
181
    /**
182
     * Test the login() function with INVALID credentials
183
     */
184
    public void invalidLogin()
185
    {
186
        debug("\nStarting invalidLogin test...");
187
        debug("-------------------------------------------------------");
188
        // Try an invalid login
189
        String response = "";
190
        try {
191
        	response = m.login(username, failpass);        	
192
            fail("Authorization should have failed.");
193
        } catch (MetacatAuthException mae) {
194
        	debug("invalid login(): response=" + mae.getMessage());
195
            //assertTrue(1 == 1);
196
        } catch (MetacatInaccessibleException mie) {
197
            fail("Metacat Inaccessible:\n" + mie.getMessage());
198
        } 
199
    }
200
    
201
    /**
202
     * Test the logout() function. 
203
     */
204
    public void logout()
205
    {
206
       debug("\nStarting logout test...");
207
       debug("-------------------------------------------------------");
208
       try {
209
            m.login(username, password);
210
            String response = m.logout();
211
            debug("logout(): Response ="+response);
212
            assertTrue(response.indexOf("<success>") == -1);
213
        } catch (MetacatAuthException mae) {
214
            fail("Authorization failed:\n" + mae.getMessage());
215
        } catch (MetacatInaccessibleException mie) {
216
            fail("Metacat Inaccessible:\n" + mie.getMessage());
217
        } catch (MetacatException me) {
218
            if(me.getMessage().
219
              indexOf("Permission denied for user public inser") == -1){
220
               fail("Metacat Error:\n" + me.getMessage());
221
           }
222
        } catch (Exception e) {
223
            fail("General exception:\n" + e.getMessage());
224
        }
225
    }
226
    
227
    
228
    /**
229
     * Test the get() function with a public document
230
     */
231
    public void get()
232
    {
233
        debug("\nStarting get test...");
234
        debug("-------------------------------------------------------");        
235
        try {
236
            Reader r =  m.getObject(public_doc_id, null);            
237
            String doc = IOUtil.getAsString(r, true);
238
            doc = doc +"\n";
239
            debug("document:\n"+doc);
240
        } catch (MetacatInaccessibleException mie) {
241
            debug("Metacat Inaccessible:\n" + mie.getMessage());
242
        } catch (Exception e) {
243
        	e.printStackTrace();
244
            debug("General exception:\n" + e.getMessage());
245
        }
246
    }
247
    
248
    /**
249
     * Test the get() function with a private document
250
     */
251
    public void getPrivate()
252
    {
253
        debug("\nStarting getprivate  test...");
254
        debug("-------------------------------------------------------");        
255
        try {
256
            Reader r =  m.getObject(authorized_doc_id, null);            
257
            String doc = IOUtil.getAsString(r, true);
258
            doc = doc +"\n";
259
            debug("document:\n"+doc);
260
        } catch (MetacatInaccessibleException mie) {
261
            debug("Metacat Inaccessible:\n" + mie.getMessage());
262
        } catch (Exception e) {
263
            debug("General exception:\n" + e.getMessage());
264
        }
265
    }
266
    
267
    /**
268
     * Test the authenticatedGet() function with a private document without for a valid session
269
     */
270
    public void authenticatedGet()
271
    {
272
        debug("\nStarting authorizedGet test...");
273
        debug("-------------------------------------------------------");
274
        try {
275
        	m.login(username,password);
276
            Reader r =  m.authenticatedGetObject(authorized_doc_id, null);            
277
            String doc = IOUtil.getAsString(r, true);
278
            doc = doc +"\n";
279
            debug("document:\n"+doc);
280
        } catch (MetacatInaccessibleException mie) {
281
            debug("Metacat Inaccessible:\n" + mie.getMessage());
282
        } catch (Exception e) {
283
            debug("General exception:\n" + e.getMessage());
284
        }
285
    }
286
    
287
    /**
288
     * Test the get() function with a not existing document
289
     */
290
    public void invalidGet()
291
    {
292
        debug("\nStarting invalid get test ...");
293
        debug("-------------------------------------------------------");
294
        try {
295
            Reader r =  m.getObject(notexisting_doc_id, null);            
296
            String doc = IOUtil.getAsString(r, true);
297
            doc = doc +"\n";
298
            debug("document:\n"+doc);
299
        } catch (MetacatInaccessibleException mie) {
300
            debug("Metacat Inaccessible:\n" + mie.getMessage());
301
        } catch (DocumentNotFoundException doe) {
302
        	  debug("Document not found:\n" + doe.getMessage());
303
        } catch (Exception e) {
304
        	e.printStackTrace();
305
            debug("General exception:\n" + e.getMessage());
306
        }
307
    }
308
    
309
    /**
310
     * Test the query() function with a public session
311
     */
312
    public void query(){
313
    	debug("\nStarting query test ...");
314
        debug("-------------------------------------------------------");
315
    	try {
316
    	 FileReader fr = new FileReader(ecogridQueryFile);   	
317
    	 Reader r = m.query(fr);   
318
         String doc = IOUtil.getAsString(r, true);
319
         doc = doc +"\n";
320
         debug("document:\n"+doc);
321
         
322
        } catch (MetacatInaccessibleException mie) {
323
            fail("Metacat Inaccessible:\n" + mie.getMessage());
324
        } catch (Exception e) {
325
        	e.printStackTrace();
326
            fail("General exception:\n" + e.getMessage());
327
        }
328
    }
329
    
330
    
331
    
332
    /**
333
     * Test the authenticatedQuery() function
334
     */
335
    public void authenticatedQuery(){
336
    	debug("\nStarting authenticatedQuery test ...");
337
        debug("-------------------------------------------------------");
338
    	try {
339
    	 FileReader fr = new FileReader(ecogridQueryFile);	
340
    	 m.login(username,password);
341
    	 Reader r = m.authenticatedQuery(fr);   
342
         String doc = IOUtil.getAsString(r, true);
343
         doc = doc +"\n";
344
         debug("document:\n"+doc);
345
         
346
        } catch (MetacatAuthException mae) {
347
            fail("Authorization failed:\n" + mae.getMessage());
348
        } catch (MetacatInaccessibleException mie) {
349
            fail("Metacat Inaccessible:\n" + mie.getMessage());
350
        } catch (Exception e) {
351
        	e.printStackTrace();
352
            fail("General exception:\n" + e.getMessage());
353
        }
354
    }
355
    
356
    /**
357
     * Test the insert,update and delete function
358
     */
359
    public void crud(){
360
    	debug("\nStarting insert,update,delete document test ...");
361
        debug("-------------------------------------------------------");
362
    	try {
363
    		FileReader fr = new FileReader(insert_file);	
364
    		m.login(username,password);
365

  
366
    		debug("\nFirst insert the document...");
367
    		String response = m.putObject(newdocid+".1",fr,true);
368
    		debug("response:\n"+response);
369

  
370
    		fr = new FileReader(insert_file);
371
    		debug("\nNow update the document...");
372
    		response = m.putObject(newdocid+".2",fr,false);    	 
373
    		debug("response:\n"+response);    		
374
    		fr.close();
375
    		
376
    		Thread.sleep(10000);
377
    		
378
    		debug("\nFinally delete the document...");
379
    		response = m.deleteObject(newdocid+".2");  
380
    		debug("response:\n"+response);
381

  
382

  
383
    	} catch (MetacatAuthException mae) {
384
    		debug("Authorization failed:\n" + mae.getMessage());
385
    	} catch (MetacatInaccessibleException mie) {
386
    		debug("Metacat Inaccessible:\n" + mie.getMessage());
387
    	} catch (Exception e) {
388
    		e.printStackTrace();
389
    		fail("General exception:\n" + e.getMessage());
390
    	}
391
    }
392

  
393
    
394
    /**
395
     * Get the most recent document id for a given scope and be sure
396
     * that it matches the one we last inserted. Assumes this test is run
397
     * immediately following a successful insert() test.
398
     */
399
    public void getNextObject() {
400
        debug("\nStarting getNextObject test...");
401
        debug("-------------------------------------------------------");
402
        try {
403

  
404
            String lastId = m.getNextObject(prefix);
405
            debug("getNextObject(): Last Id=" + lastId);
406

  
407
        } catch (MetacatException me) {
408
            fail("Metacat Error:\n" + me.getMessage());
409
        } catch (Exception e) {
410
            fail("General exception:\n" + e.getMessage());
411
        }
412
    }
413

  
414
    /**
415
     * Get the most recent document id for a given scope and be sure
416
     * that it matches the one we last inserted. Assumes this test is run
417
     * immediately following a successful insert() test.
418
     */
419
    public void getNextRevision() {
420
        debug("\nStarting getNextRevision test...");
421
        debug("-------------------------------------------------------");
422
        try {
423

  
424
            int rev_id = m.getNextRevision(public_doc_id);
425
            debug("NextRevision number is " + rev_id);
426

  
427
        } catch (MetacatException me) {
428
            fail("Metacat Error:\n" + me.getMessage());
429
        } catch (Exception e) {
430
            fail("General exception:\n" + e.getMessage());
431
        }
432
    }
433
    
434
    
435
    /**
436
     * Test getAllDocids function
437
     */
438
    public void getAllDocids() {
439
        debug("\nStarting getAllDocids test...");
440
        debug("-------------------------------------------------------");
441
        try {
442

  
443
            Vector<String> vector = m.getAllDocids(prefix);
444
            StringBuffer b = new StringBuffer();
445
            for (String doc_id:vector)
446
            	b.append(doc_id+"\n");
447
            debug("getAllDocids():\n " + b.toString());
448

  
449
        } catch (MetacatException me) {
450
            fail("Metacat Error:\n" + me.getMessage());
451
        } catch (Exception e) {
452
            fail("General exception:\n" + e.getMessage());
453
        }
454
    }
455
    
456
    /***
457
     * Test isRegistered function
458
     */
459
    public void isRegistered() {
460
        debug("\nStarting isRegistered test...");
461
        debug("-------------------------------------------------------");
462
        try {
463
            boolean registered = m.isRegistered(public_doc_id);
464
            debug("isRegistered(): " + public_doc_id+" is "+(registered?"":"not ")+"registered"); 
465
            registered = m.isRegistered(newdocid);
466
            debug("isRegistered(): " + newdocid+" is "+(registered?"":"not ")+"registered");
467
        } catch (MetacatException me) {
468
            fail("Metacat Error:\n" + me.getMessage());
469
        } catch (Exception e) {
470
            fail("General exception:\n" + e.getMessage());
471
        }
472
    }
473
    
474
    /***
475
     * Test addLSID function
476
     */
477
    public void addLSID() {
478
    	  debug("\nStarting addLSID test...");
479
    	  debug("-------------------------------------------------------");
480
          try {
481
        	  String response =  m.addLSID(public_doc_id);
482
        	  debug("response:\n"+response);
483
          } catch (MetacatException me) {
484
              fail("Metacat Error:\n" + me.getMessage());
485
          } catch (Exception e) {
486
              fail("General exception:\n" + e.getMessage());
487
          }
488
    }
489
    	
490
    	
491
    /**
492
     * Create a hopefully unique docid for testing insert and update. Does
493
     * not include the 'revision' part of the id.
494
     *
495
     * @return a String docid based on the current date and time
496
     */
497
    private String generateDocid()
498
    {
499
    	StringBuffer docid = new StringBuffer(prefix);
500
    	docid.append(".");
501

  
502
    	// Create a calendar to get the date formatted properly
503
    	String[] ids = TimeZone.getAvailableIDs(-8 * 60 * 60 * 1000);
504
    	SimpleTimeZone pdt = new SimpleTimeZone(-8 * 60 * 60 * 1000, ids[0]);
505
    	pdt.setStartRule(Calendar.APRIL, 1, Calendar.SUNDAY, 2*60*60*1000);
506
    	pdt.setEndRule(Calendar.OCTOBER, -1, Calendar.SUNDAY, 2*60*60*1000);
507
    	Calendar calendar = new GregorianCalendar(pdt);
508
    	Date trialTime = new Date();
509
    	calendar.setTime(trialTime);
510

  
511
    	int time = 0; 
512

  
513
    	docid.append(calendar.get(Calendar.YEAR));
514

  
515
    	time = calendar.get(Calendar.DAY_OF_YEAR);
516
    	if(time < 10){
517
    		docid.append("0");
518
    		docid.append("0");
519
    		docid.append(time);
520
    	} else if(time < 100) {
521
    		docid.append("0");
522
    		docid.append(time);
523
    	} else {
524
    		docid.append(time);
525
    	}
526

  
527
    	time = calendar.get(Calendar.HOUR_OF_DAY);
528
    	if(time < 10){
529
    		docid.append("0");
530
    		docid.append(time);
531
    	} else {
532
    		docid.append(time);
533
    	}
534

  
535
    	time = calendar.get(Calendar.MINUTE);
536
    	if(time < 10){
... This diff was truncated because it exceeds the maximum size that can be displayed.

Also available in: Unified diff