Skip to content
GitLab
Explore
Sign in
Primary navigation
Search or go to…
Project
S
StoragePlugin4Rosetta
Manage
Activity
Members
Labels
Plan
Issues
Issue boards
Milestones
Code
Merge requests
Repository
Branches
Commits
Tags
Repository graph
Compare revisions
Snippets
Build
Pipelines
Jobs
Pipeline schedules
Artifacts
Deploy
Releases
Container registry
Harbor Registry
Model registry
Operate
Environments
Monitor
Incidents
Analyze
Value stream analytics
Contributor analytics
CI/CD analytics
Repository analytics
Model experiments
Help
Help
Support
GitLab documentation
Compare GitLab plans
GitLab community forum
Contribute to GitLab
Provide feedback
Keyboard shortcuts
?
Snippets
Groups
Projects
Show more breadcrumbs
Digital Preservation
StoragePlugin4Rosetta
Commits
60f6d7f0
Commit
60f6d7f0
authored
11 years ago
by
Andreas Romeyke
Browse files
Options
Downloads
Patches
Plain Diff
- added more javadoc comments
- minor, fixed indentation
parent
b8a632ce
No related branches found
No related tags found
No related merge requests found
Changes
1
Show whitespace changes
Inline
Side-by-side
Showing
1 changed file
java/org/slub/rosetta/dps/repository/plugin/storage/nfs/SLUBStoragePlugin.java
+156
-111
156 additions, 111 deletions
.../dps/repository/plugin/storage/nfs/SLUBStoragePlugin.java
with
156 additions
and
111 deletions
java/org/slub/rosetta/dps/repository/plugin/storage/nfs/SLUBStoragePlugin.java
+
156
−
111
View file @
60f6d7f0
...
@@ -17,14 +17,31 @@ import com.exlibris.digitool.common.dnx.DnxSection;
...
@@ -17,14 +17,31 @@ import com.exlibris.digitool.common.dnx.DnxSection;
import
com.exlibris.digitool.common.dnx.DnxSectionRecord
;
import
com.exlibris.digitool.common.dnx.DnxSectionRecord
;
import
com.exlibris.dps.repository.plugin.storage.nfs.NFSStoragePlugin
;
import
com.exlibris.dps.repository.plugin.storage.nfs.NFSStoragePlugin
;
import
com.exlibris.digitool.common.storage.Fixity
;
import
com.exlibris.digitool.common.storage.Fixity.FixityAlgorithm
;
/**
/**
* SLUBStoragePlugin
* SLUBStoragePlugin
* writes all IEs, files and so on into the same dir under yyyy/mm/dd/IEpid/
* writes all IEs, files and so on into the same dir under yyyy/mm/dd/IEpid/
*
*
* HINT: this plugin is *only* useful to store AIPs (IEs + files) in
* permanent storage. Otherwise it could not detect the IE-PID and
* will report an error.
*
* the fixities will only be checked if files are stored (storeEntity()),
* because the Rosetta API does not give enough information about available
* fixities by calling retrieveEntity() to read files, because only
* a string containing the path is given.
*
* Please note, that all undocumented codelines are in most cases copied from
* com.exlibris.dps.repository.plugin.storage.nfs.NFSStoragePlugin and I am
* unable to find full documentation.
*
* @author andreas.romeyke@slub-dresden.de (Andreas Romeyke)
* @author andreas.romeyke@slub-dresden.de (Andreas Romeyke)
* @see com.exlibris.dps.repository.plugin.storage.nfs.NFSStoragePlugin
*/
*/
public
class
SLUBStoragePlugin
extends
NFSStoragePlugin
{
public
class
SLUBStoragePlugin
extends
NFSStoragePlugin
{
private
static
final
String
DIR_ROOT
=
"DIR_ROOT"
;
private
static
final
String
DIR_ROOT
=
"DIR_ROOT"
;
/** {@inheritDoc} */
private
static
final
ExLogger
log
=
ExLogger
.
getExLogger
(
SLUBStoragePlugin
.
class
);
private
static
final
ExLogger
log
=
ExLogger
.
getExLogger
(
SLUBStoragePlugin
.
class
);
public
SLUBStoragePlugin
()
{
public
SLUBStoragePlugin
()
{
...
@@ -32,7 +49,26 @@ public class SLUBStoragePlugin extends NFSStoragePlugin {
...
@@ -32,7 +49,26 @@ public class SLUBStoragePlugin extends NFSStoragePlugin {
log
.
info
(
"SLUBStoragePlugin instantiated"
);
log
.
info
(
"SLUBStoragePlugin instantiated"
);
}
}
/** copied from NFS Storage Plugin, enhanced with debugging info */
/** retrieves a list of available checksum fixities
* @param storedEntityMetaData storedEntityMetaData
* @return list of available fixities
*/
protected
List
<
Fixity
>
getAvailableFixities
(
StoredEntityMetaData
storedEntityMetaData
)
{
List
<
Fixity
>
fixities
=
storedEntityMetaData
.
getFixities
();
for
(
Iterator
<
Fixity
>
iter
=
fixities
.
iterator
();
iter
.
hasNext
();
)
{
Fixity
element
=
iter
.
next
();
log
.
info
(
"getAvailableFixities fixity="
+
element
.
toString
()
);
}
return
fixities
;
}
/** copied from NFS Storage Plugin, enhanced with debugging info,
* stores InputStream on Storage in given format and does fixity check
* if written sucessfully
* @param is InputStream
* @param storedEntityMetadata storedEntityMetaData
* @return relative path to file
*/
@Override
@Override
public
String
storeEntity
(
InputStream
is
,
StoredEntityMetaData
storedEntityMetadata
)
throws
Exception
{
public
String
storeEntity
(
InputStream
is
,
StoredEntityMetaData
storedEntityMetadata
)
throws
Exception
{
log
.
info
(
"SLUBStoragePlugin.storeEntity() called"
);
log
.
info
(
"SLUBStoragePlugin.storeEntity() called"
);
...
@@ -42,6 +78,10 @@ public class SLUBStoragePlugin extends NFSStoragePlugin {
...
@@ -42,6 +78,10 @@ public class SLUBStoragePlugin extends NFSStoragePlugin {
log
.
info
(
"SLUBStoragePlugin.storeEntity() relativeDirectoryPath="
+
relativeDirectoryPath
);
log
.
info
(
"SLUBStoragePlugin.storeEntity() relativeDirectoryPath="
+
relativeDirectoryPath
);
File
destFile
=
getStreamDirectory
(
relativeDirectoryPath
,
fileName
);
File
destFile
=
getStreamDirectory
(
relativeDirectoryPath
,
fileName
);
log
.
info
(
"SLUBStoragePlugin.storeEntity() destfile.getAbsolutePath()="
+
destFile
.
getAbsolutePath
());
log
.
info
(
"SLUBStoragePlugin.storeEntity() destfile.getAbsolutePath()="
+
destFile
.
getAbsolutePath
());
// debug
// List<Fixity> fixities = getAvailableFixities( storedEntityMetadata );
// better move/link
// better move/link
if
(
canHandleSourcePath
(
storedEntityMetadata
.
getCurrentFilePath
()))
{
if
(
canHandleSourcePath
(
storedEntityMetadata
.
getCurrentFilePath
()))
{
is
.
close
();
// close input stream so that 'move' can work, we don't use it anyway
is
.
close
();
// close input stream so that 'move' can work, we don't use it anyway
...
@@ -53,7 +93,9 @@ public class SLUBStoragePlugin extends NFSStoragePlugin {
...
@@ -53,7 +93,9 @@ public class SLUBStoragePlugin extends NFSStoragePlugin {
}
}
String
storedEntityIdentifier
=
relativeDirectoryPath
+
File
.
separator
+
fileName
;
String
storedEntityIdentifier
=
relativeDirectoryPath
+
File
.
separator
+
fileName
;
log
.
info
(
"SLUBStoragePlugin.storeEntity() storedEntityIdentifier="
+
storedEntityIdentifier
);
log
.
info
(
"SLUBStoragePlugin.storeEntity() storedEntityIdentifier="
+
storedEntityIdentifier
);
// check if stored correctly
if
(!
checkFixity
(
storedEntityMetadata
.
getFixities
(),
storedEntityIdentifier
))
{
if
(!
checkFixity
(
storedEntityMetadata
.
getFixities
(),
storedEntityIdentifier
))
{
log
.
error
(
"error, SLUBStoragePlugin.storeEntity() has written corrupted files (checked via checkFixity()), storedEntityIdentifier="
+
storedEntityIdentifier
);
deleteEntity
(
storedEntityIdentifier
);
// delete corrupt files
deleteEntity
(
storedEntityIdentifier
);
// delete corrupt files
return
null
;
return
null
;
}
}
...
@@ -66,13 +108,14 @@ public class SLUBStoragePlugin extends NFSStoragePlugin {
...
@@ -66,13 +108,14 @@ public class SLUBStoragePlugin extends NFSStoragePlugin {
* we need to findout the associated dnx document (IE),
* we need to findout the associated dnx document (IE),
* get the creation date of the IE/SIP
* get the creation date of the IE/SIP
* and get the IE PID of the associated IE.
* and get the IE PID of the associated IE.
* @param storedEntityMetaData StoredEntityMetaData
* @return calculated relative path as String
* returns the path as string
* returns the path as string
*/
*/
protected
String
getStreamRelativePath
(
StoredEntityMetaData
storedEntityMetaData
)
throws
Exception
{
protected
String
getStreamRelativePath
(
StoredEntityMetaData
storedEntityMetaData
)
throws
Exception
{
log
.
info
(
"SLUBStoragePlugin AAB"
);
log
.
info
(
"SLUBStoragePlugin AAB"
);
String
relativeDirectoryPath
=
File
.
separator
;
String
relativeDirectoryPath
=
File
.
separator
;
// get IE PID by calling IE-DNX record and search for ""internalIdentifierType" == "PID"
// get IE PID by calling IE-DNX record and search for ""internalIdentifierType" == "PID"
DnxDocument
iedoc
=
storedEntityMetaData
.
getIeDnx
();
DnxDocument
iedoc
=
storedEntityMetaData
.
getIeDnx
();
String
entitytype
=
storedEntityMetaData
.
getEntityType
().
name
();
String
entitytype
=
storedEntityMetaData
.
getEntityType
().
name
();
DnxSection
iesec
=
iedoc
.
getSectionById
(
"internalIdentifier"
);
DnxSection
iesec
=
iedoc
.
getSectionById
(
"internalIdentifier"
);
...
@@ -86,11 +129,11 @@ public class SLUBStoragePlugin extends NFSStoragePlugin {
...
@@ -86,11 +129,11 @@ public class SLUBStoragePlugin extends NFSStoragePlugin {
for
(
Iterator
<
DnxSectionRecord
>
iter
=
records
.
iterator
();
iter
.
hasNext
();
)
{
for
(
Iterator
<
DnxSectionRecord
>
iter
=
records
.
iterator
();
iter
.
hasNext
();
)
{
DnxSectionRecord
element
=
iter
.
next
();
DnxSectionRecord
element
=
iter
.
next
();
if
(
element
.
getKeyById
(
"internalIdentifierType"
).
getValue
().
equals
(
"PID"
))
{
if
(
element
.
getKeyById
(
"internalIdentifierType"
).
getValue
().
equals
(
"PID"
))
{
iepid
=
element
.
getKeyById
(
"internalIdentifierValue"
).
getValue
();
iepid
=
element
.
getKeyById
(
"internalIdentifierValue"
).
getValue
();
// found IEPID
break
;
break
;
}
}
}
}
// raise Exception if
iepid
is null
// raise Exception if
IEPID
is null
if
(
null
==
iepid
)
{
if
(
null
==
iepid
)
{
log
.
error
(
"SLUBStoragePlugin.getStreamRelativePath iesec="
+
iesec
.
toString
()
);
log
.
error
(
"SLUBStoragePlugin.getStreamRelativePath iesec="
+
iesec
.
toString
()
);
throw
new
Exception
(
"error, could not get IEPID for storedEntityMetaData:"
+
storedEntityMetaData
.
toString
()
+
" of type "
+
entitytype
);
throw
new
Exception
(
"error, could not get IEPID for storedEntityMetaData:"
+
storedEntityMetaData
.
toString
()
+
" of type "
+
entitytype
);
...
@@ -105,6 +148,7 @@ public class SLUBStoragePlugin extends NFSStoragePlugin {
...
@@ -105,6 +148,7 @@ public class SLUBStoragePlugin extends NFSStoragePlugin {
Date
d
=
sdf
.
parse
(
datestring
);
Date
d
=
sdf
.
parse
(
datestring
);
date
.
setTime
(
d
);
date
.
setTime
(
d
);
log
.
info
(
"SLUBStoragePlugin.getStreamRelativePath creation Date read="
+
datestring
+
" parsed="
+
date
.
toString
());
log
.
info
(
"SLUBStoragePlugin.getStreamRelativePath creation Date read="
+
datestring
+
" parsed="
+
date
.
toString
());
// now create path in format /yyyy/MM/dd/IEPID/
relativeDirectoryPath
=
relativeDirectoryPath
+
new
SimpleDateFormat
(
"yyyy"
).
format
(
d
);
relativeDirectoryPath
=
relativeDirectoryPath
+
new
SimpleDateFormat
(
"yyyy"
).
format
(
d
);
relativeDirectoryPath
=
relativeDirectoryPath
+
File
.
separator
;
relativeDirectoryPath
=
relativeDirectoryPath
+
File
.
separator
;
relativeDirectoryPath
=
relativeDirectoryPath
+
new
SimpleDateFormat
(
"MM"
).
format
(
d
);
relativeDirectoryPath
=
relativeDirectoryPath
+
new
SimpleDateFormat
(
"MM"
).
format
(
d
);
...
@@ -117,7 +161,9 @@ public class SLUBStoragePlugin extends NFSStoragePlugin {
...
@@ -117,7 +161,9 @@ public class SLUBStoragePlugin extends NFSStoragePlugin {
return
relativeDirectoryPath
;
return
relativeDirectoryPath
;
}
}
/** copied from NFS Storage Plugin, enhanced with debugging info */
/** copied from NFS Storage Plugin, enhanced with debugging info,
* this combines full file path and creates parent directories if needed {@inheritDoc}
*/
protected
File
getStreamDirectory
(
String
path
,
String
fileName
)
{
protected
File
getStreamDirectory
(
String
path
,
String
fileName
)
{
File
newDir
=
new
File
(
parameters
.
get
(
DIR_ROOT
)
+
File
.
separator
+
path
);
File
newDir
=
new
File
(
parameters
.
get
(
DIR_ROOT
)
+
File
.
separator
+
path
);
log
.
info
(
"SLUBStoragePlugin.getStreamDirectory path="
+
path
);
log
.
info
(
"SLUBStoragePlugin.getStreamDirectory path="
+
path
);
...
@@ -128,7 +174,7 @@ public class SLUBStoragePlugin extends NFSStoragePlugin {
...
@@ -128,7 +174,7 @@ public class SLUBStoragePlugin extends NFSStoragePlugin {
return
new
File
(
newDir
.
getAbsolutePath
()
+
File
.
separator
+
fileName
);
return
new
File
(
newDir
.
getAbsolutePath
()
+
File
.
separator
+
fileName
);
}
}
/** copied from NFS Storage Plugin, enhanced with debugging info */
/** copied from NFS Storage Plugin, enhanced with debugging info
, {@inheritDoc}
*/
private
boolean
canHandleSourcePath
(
String
srcPath
)
{
private
boolean
canHandleSourcePath
(
String
srcPath
)
{
try
{
try
{
File
file
=
new
File
(
srcPath
);
File
file
=
new
File
(
srcPath
);
...
@@ -138,5 +184,4 @@ public class SLUBStoragePlugin extends NFSStoragePlugin {
...
@@ -138,5 +184,4 @@ public class SLUBStoragePlugin extends NFSStoragePlugin {
return
false
;
return
false
;
}
}
}
}
}
}
This diff is collapsed.
Click to expand it.
Preview
0%
Loading
Try again
or
attach a new file
.
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Save comment
Cancel
Please
register
or
sign in
to comment