📄 cmscontentstore.java
字号:
/**
* Retrive revision content.
*
* @param uri Uri
* @param revisionNumber Node revision number
*/
public NodeRevisionContent retrieveRevisionContent
(Uri uri, NodeRevisionDescriptor revisionDescriptor)
throws ServiceAccessException, RevisionNotFoundException {
NodeRevisionContent result = null;
String revisionUri = null;
if (version)
revisionUri = uri.toString() + "_"
+ revisionDescriptor.getRevisionNumber();
else
revisionUri = uri.toString();
try {
File file = new File(rootpath + revisionUri);
FileInputStream is = new FileInputStream(file);
InputStreamReader reader = new InputStreamReader
(is, CHARACTER_ENCODING);
result = new NodeRevisionContent();
result.setContent(reader);
result.setContent(is);
} catch (FileNotFoundException e) {
throw new RevisionNotFoundException
(uri.toString(),
revisionDescriptor.getRevisionNumber());
} catch (IOException e) {
e.printStackTrace();
throw new ServiceAccessException(this, e.getMessage());
}
return result;
}
/**
* Create a new revision
*
* @param uri Uri
* @param revisionDescriptor Node revision descriptor
* @param revisionContent Node revision content
*/
public void createRevisionContent
(Uri uri, NodeRevisionDescriptor revisionDescriptor,
NodeRevisionContent revisionContent)
throws ServiceAccessException, RevisionAlreadyExistException {
String revisionUri = null;
if (version)
revisionUri = uri.toString() + "_"
+ revisionDescriptor.getRevisionNumber();
else
revisionUri = uri.toString();
try {
File file = new File(rootpath + revisionUri);
File parentFile = new File(file.getParent());
if ((parentFile != null) && (!parentFile.exists())) {
parentFile.mkdirs();
}
boolean created = !file.exists();
if (!created) {
throw new RevisionAlreadyExistException
(uri.toString(), revisionDescriptor.getRevisionNumber());
}
InputStream is = revisionContent.streamContent();
if (is != null) {
OutputStream os = new FileOutputStream(file);
// We copy 8 ko with each read
byte[] buffer = new byte[BUFFER_SIZE];
long position = 0;
long contentLength = revisionDescriptor.getContentLength();
while (true) {
int nChar = is.read(buffer);
if (nChar == -1) {
break;
}
os.write(buffer, 0, nChar);
position = position + nChar;
}
os.close();
is.close();
if (contentLength != -1) {
if (position != contentLength) {
// set content length so that repository is consistent
revisionDescriptor.setContentLength(position);
if (position < contentLength) {
// Not enough bytes read !!!
throw new IOException("Not enough bytes read");
}
if (position > contentLength) {
// Not enough bytes read !!!
throw new IOException("Too many bytes read");
}
// FIXME : Delete the file
}
} else {
revisionDescriptor.setContentLength(position);
}
} else {
}
} catch (IOException e) {
throw new ServiceAccessException(this, e.getMessage());
} catch(RevisionAlreadyExistException e) {
throw e; // we do NOT want this caught by next clause.
} catch (Exception e) {
e.printStackTrace();
throw new ServiceAccessException(this, e.getMessage());
}
}
/**
* Modify the latest revision of an object.
*
* @param uri Uri
* @param revisionDescriptor Node revision descriptor
* @param revisionContent Node revision content
*/
public void storeRevisionContent
(Uri uri, NodeRevisionDescriptor revisionDescriptor,
NodeRevisionContent revisionContent)
throws ServiceAccessException, RevisionNotFoundException {
String revisionUri = null;
if (version)
revisionUri = uri.toString() + "_"
+ revisionDescriptor.getRevisionNumber();
else
revisionUri = uri.toString();
try {
File file = new File(rootpath + revisionUri);
InputStream is = revisionContent.streamContent();
if (is != null) {
OutputStream os = null;
try {
os = new FileOutputStream(file);
} catch (FileNotFoundException ex) {
// Try to create the parent directory and try again
File parentFile = new File(file.getParent());
if ((parentFile != null) && (!parentFile.exists())) {
parentFile.mkdirs();
}
os = new FileOutputStream(file);
}
// We copy 8 ko with each read
byte[] buffer = new byte[BUFFER_SIZE];
long position = 0;
long contentLength = revisionDescriptor.getContentLength();
while (true) {
int nChar = is.read(buffer);
if (nChar == -1) {
break;
}
os.write(buffer, 0, nChar);
position = position + nChar;
}
os.close();
is.close();
if (contentLength != -1) {
if (position != contentLength) {
if (position < contentLength) {
// Not enough bytes read !!!
throw new IOException("Not enough bytes read");
}
if (position > contentLength) {
// Not enough bytes read !!!
throw new IOException("Too many bytes read");
}
// FIXME : Delete the file
}
} else {
revisionDescriptor.setContentLength(position);
}
} else {
}
} catch (FileNotFoundException e) {
throw new RevisionNotFoundException
(uri.toString(), revisionDescriptor.getRevisionNumber());
} catch (IOException e) {
e.printStackTrace();
throw new ServiceAccessException(this, e.getMessage());
}
}
/**
* Remove revision.
*
* @param uri Uri
* @param revisionNumber Node revision number
*/
public void removeRevisionContent(Uri uri,
NodeRevisionDescriptor revisionDescriptor)
throws ServiceAccessException {
String revisionUri = null;
if (version)
revisionUri = uri.toString() + "_" + revisionDescriptor.getRevisionNumber();
else
revisionUri = uri.toString();
try {
File file = new File(rootpath + revisionUri);
boolean deleted = file.delete();
File parentFile = new File(file.getParent());
if (parentFile != null) {
parentFile.delete();
}
} catch (Exception e) {
e.printStackTrace();
throw new ServiceAccessException(this, e.getMessage());
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -