Revision 7764
Added by Matt Jones over 11 years ago
src/edu/ucsb/nceas/metacat/Sitemap.java | ||
---|---|---|
25 | 25 |
package edu.ucsb.nceas.metacat; |
26 | 26 |
|
27 | 27 |
import java.io.File; |
28 |
import java.io.FileOutputStream; |
|
28 | 29 |
import java.io.FileWriter; |
29 | 30 |
import java.io.IOException; |
31 |
import java.io.OutputStreamWriter; |
|
30 | 32 |
import java.io.Writer; |
33 |
import java.nio.charset.Charset; |
|
31 | 34 |
import java.sql.PreparedStatement; |
32 | 35 |
import java.sql.ResultSet; |
33 | 36 |
import java.sql.SQLException; |
... | ... | |
131 | 134 |
// Loop through all of the documents, and write them to a |
132 | 135 |
// sitemap |
133 | 136 |
File sitemapFile = null; |
134 |
FileWriter sitemap = null;
|
|
137 |
OutputStreamWriter sitemap = null;
|
|
135 | 138 |
int counter = 0; |
136 | 139 |
int fileNumber = 0; |
137 | 140 |
while (rs.next()) { |
... | ... | |
148 | 151 |
fileNumber++; |
149 | 152 |
sitemapFile = new File(directory, fileRoot + fileNumber |
150 | 153 |
+ ".xml"); |
151 |
sitemap = new FileWriter(sitemapFile);
|
|
154 |
sitemap = new OutputStreamWriter(new FileOutputStream(sitemapFile), Charset.forName("UTF-8"));
|
|
152 | 155 |
|
153 | 156 |
// Write the sitemap document header for the new file |
154 | 157 |
writeSitemapHeader(sitemap); |
... | ... | |
162 | 165 |
} |
163 | 166 |
stmt.close(); |
164 | 167 |
writeSitemapFooter(sitemap); |
168 |
writeSitemapIndex(fileNumber); |
|
165 | 169 |
} catch (SQLException e) { |
166 | 170 |
logMetacat.warn("Error while writing to the sitemap file: " |
167 | 171 |
+ e.getMessage()); |
... | ... | |
195 | 199 |
String header = "<urlset xmlns=\"http://www.sitemaps.org/schemas/sitemap/0.9\"\n" + |
196 | 200 |
"xmlns:sm=\"http://www.sitemaps.org/schemas/sitemap/0.9\"\n" + |
197 | 201 |
"xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\"\n" + |
198 |
"xsi:schemaLocation=\"http://www.sitemaps.org/schemas/sitemap/0.9 http://www.sitemaps.org/schemas/sitemap/0.9/sitemap.xsd\">"; |
|
202 |
"xsi:schemaLocation=\"http://www.sitemaps.org/schemas/sitemap/0.9 http://www.sitemaps.org/schemas/sitemap/0.9/sitemap.xsd\">\n";
|
|
199 | 203 |
|
200 | 204 |
sitemap.write(header); |
201 | 205 |
sitemap.flush(); |
... | ... | |
259 | 263 |
} |
260 | 264 |
} |
261 | 265 |
|
266 |
/** |
|
267 |
* Create an index file listing all of the sitemap files that were created. |
|
268 |
* @param fileNumber the number of sitemap files that were created. |
|
269 |
*/ |
|
270 |
private void writeSitemapIndex(int fileNumber) { |
|
271 |
|
|
272 |
// Open a new sitemapIndex file for writing |
|
273 |
File sitemapIndexFile = null; |
|
274 |
OutputStreamWriter sitemapIndex = null; |
|
275 |
sitemapIndexFile = new File(directory, indexFilename); |
|
276 |
try { |
|
277 |
sitemapIndex = new OutputStreamWriter(new FileOutputStream(sitemapIndexFile), Charset.forName("UTF-8")); |
|
278 |
|
|
279 |
// Write the sitemap index header for the new file |
|
280 |
sitemapIndex.write(PROLOG); |
|
281 |
String header = "<sitemapindex xmlns=\"http://www.sitemaps.org/schemas/sitemap/0.9\"\n" |
|
282 |
+ "xmlns:sm=\"http://www.sitemaps.org/schemas/sitemap/0.9\"\n" + "xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\"\n" |
|
283 |
+ "xsi:schemaLocation=\"http://www.sitemaps.org/schemas/sitemap/0.9 http://www.sitemaps.org/schemas/sitemap/0.9/siteindex.xsd\">\n"; |
|
284 |
sitemapIndex.write(header); |
|
285 |
sitemapIndex.flush(); |
|
286 |
|
|
287 |
// Write out one index entry for each sitemap file |
|
288 |
for (int fn = 1; fn <= fileNumber; fn++) { |
|
289 |
String filename = fileRoot + fileNumber + ".xml"; |
|
290 |
writeSitemapIndexEntry(sitemapIndex, filename); |
|
291 |
} |
|
292 |
|
|
293 |
// Write the sitemap index footer content |
|
294 |
if (sitemapIndex != null) { |
|
295 |
String footer = "</sitemapindex>\n"; |
|
296 |
sitemapIndex.write(footer); |
|
297 |
sitemapIndex.close(); |
|
298 |
} |
|
299 |
|
|
300 |
// Close the index file |
|
301 |
if (sitemapIndex != null) { |
|
302 |
sitemapIndex.close(); |
|
303 |
} |
|
304 |
|
|
305 |
} catch (IOException e) { |
|
306 |
logMetacat.warn("Could not open or write to the sitemap index file." + e.getMessage()); |
|
307 |
} |
|
308 |
} |
|
309 |
|
|
310 |
/** |
|
311 |
* Write a single line of the sitemap index file containing the URL to a specific sitemap file. |
|
312 |
* @param sitemapIndex the writer to which the index information is written |
|
313 |
* @param filename the name of the index file to be used |
|
314 |
* @throws IOException on error writing to the index file |
|
315 |
*/ |
|
316 |
private void writeSitemapIndexEntry(Writer sitemapIndex, String filename) |
|
317 |
throws IOException { |
|
318 |
if (sitemapIndex != null && filename != null && urlRoot != null) { |
|
319 |
StringBuffer url = new StringBuffer(); |
|
320 |
url.append(urlRoot); |
|
321 |
if (!urlRoot.endsWith("/")) { |
|
322 |
url.append("/"); |
|
323 |
} |
|
324 |
url.append(filename); |
|
325 |
sitemapIndex.write("<sitemap><loc>"); |
|
326 |
sitemapIndex.write(url.toString()); |
|
327 |
sitemapIndex.write("</loc>"); |
|
328 |
sitemapIndex.write("</sitemap>"); |
|
329 |
sitemapIndex.write("\n"); |
|
330 |
sitemapIndex.flush(); |
|
331 |
} |
|
332 |
} |
|
333 |
|
|
262 | 334 |
// Member variables |
263 | 335 |
|
264 | 336 |
/** The directory in which sitemaps are written. */ |
... | ... | |
275 | 347 |
|
276 | 348 |
/** The root name to be used in naming sitemap files. */ |
277 | 349 |
static final String fileRoot = "metacat"; |
350 |
|
|
351 |
/** The name to give to the sitemap index file */ |
|
352 |
static final String indexFilename = "metacatSitemapIndex.xml"; |
|
278 | 353 |
|
279 | 354 |
/** A String constant containing the XML prolog to be written in files. */ |
280 | 355 |
static final String PROLOG = "<?xml version=\"1.0\" encoding=\"UTF-8\" ?>\n"; |
Also available in: Unified diff
Mofdified Sitemap class to also generate the sitemap index file that is needed when more than one sitemap file is provided.