Revision 1517
Added by Jing Tao over 21 years ago
src/edu/ucsb/nceas/metacat/EmlSAXHandler.java | ||
---|---|---|
29 | 29 |
package edu.ucsb.nceas.metacat; |
30 | 30 |
|
31 | 31 |
import java.sql.*; |
32 |
import java.io.BufferedReader; |
|
32 | 33 |
import java.io.File; |
34 |
import java.io.FileReader; |
|
33 | 35 |
import java.io.FileWriter; |
34 | 36 |
import java.io.StringReader; |
35 | 37 |
import java.util.Stack; |
... | ... | |
698 | 700 |
else |
699 | 701 |
{ |
700 | 702 |
MetaCatUtil.debugMessage("Write inline data into file system", 35); |
703 |
|
|
704 |
//check if user changed inine data or not if user doesn't have |
|
705 |
// write permission |
|
706 |
if (startCriticalSubTree) |
|
707 |
{ |
|
708 |
NodeRecord node = null; |
|
709 |
String inlineData; |
|
710 |
try |
|
711 |
{ |
|
712 |
node = (NodeRecord)currentUnChangedableSubtreeNodeStack.pop(); |
|
713 |
// get file name from db |
|
714 |
String fileName = node.getNodeData(); |
|
715 |
MetaCatUtil.debugMessage("in handle inline data", 35); |
|
716 |
MetaCatUtil.debugMessage("the inline data file name from node is: "+ |
|
717 |
fileName, 40); |
|
718 |
inlineData = readInlineDataFromFileSystem(fileName); |
|
719 |
} |
|
720 |
catch (EmptyStackException ee) |
|
721 |
{ |
|
722 |
MetaCatUtil.debugMessage("the stack is empty for text data", 32); |
|
723 |
throw new SAXException(PERMISSIONERROR); |
|
724 |
} |
|
725 |
catch (McdbException eee) |
|
726 |
{ |
|
727 |
throw new SAXException(eee.getMessage()); |
|
728 |
} |
|
729 |
|
|
730 |
if (!(textBuffer.toString()).equals(inlineData)) |
|
731 |
{ |
|
732 |
MetaCatUtil.debugMessage("inline data was changed by a user" + |
|
733 |
" who doesn't have permission", 30); |
|
734 |
throw new SAXException(PERMISSIONERROR); |
|
735 |
}//if |
|
736 |
}//if |
|
701 | 737 |
// write inline data into file system and return file name |
702 | 738 |
textBuffer = writeInlineDataIntoFile(textBuffer); |
703 | 739 |
// write file name into db |
... | ... | |
1292 | 1328 |
fileNameBuffer = new StringBuffer(fileName); |
1293 | 1329 |
return fileNameBuffer; |
1294 | 1330 |
} |
1295 |
|
|
1331 |
|
|
1332 |
/* In eml2, the inline data wouldn't store in db, it store in file system |
|
1333 |
* The db stores file name(without path). |
|
1334 |
*/ |
|
1335 |
public static String readInlineDataFromFileSystem(String fileName) |
|
1336 |
throws McdbException |
|
1337 |
{ |
|
1338 |
String data = null; |
|
1339 |
String path = MetaCatUtil.getOption("inlinedatafilepath"); |
|
1340 |
// the new file name will look like path/docid.rev.2 |
|
1341 |
File inlineDataDirectory = new File(path); |
|
1342 |
File dataFile = new File(inlineDataDirectory, fileName); |
|
1343 |
try |
|
1344 |
{ |
|
1345 |
FileReader fileReader = new FileReader(dataFile); |
|
1346 |
BufferedReader stringReader = new BufferedReader(fileReader); |
|
1347 |
// read first line of data |
|
1348 |
String tmp = stringReader.readLine(); |
|
1349 |
// pass first line data to data varible |
|
1350 |
data = tmp; |
|
1351 |
// at the end tmp will be null |
|
1352 |
while (tmp != null) |
|
1353 |
{ |
|
1354 |
// read a new line |
|
1355 |
tmp = stringReader.readLine(); |
|
1356 |
// append new line to data |
|
1357 |
if (tmp != null) |
|
1358 |
{ |
|
1359 |
data = data+tmp; |
|
1360 |
} |
|
1361 |
} |
|
1362 |
|
|
1363 |
} |
|
1364 |
catch (Exception e) |
|
1365 |
{ |
|
1366 |
throw new McdbException(e.getMessage()); |
|
1367 |
} |
|
1368 |
MetaCatUtil.debugMessage("the inline data retrieve from file: "+data, 50); |
|
1369 |
return data; |
|
1370 |
} |
|
1296 | 1371 |
} |
Also available in: Unified diff
Add code for checking if a user try to update inline data.