add hasReservation() method (NotImplemented, however)
Test that the obsoletes and derivedFrom system metadata fields were set correctly.
use objectFormatIdentifier for listObjects()remove provisional system metadata indicator - Metacat will not implement reserveIdentifier()
newer jars with better certificate exception handling as well as additional libclient implementations
use correct log name for the class
consistently construct username/groups for MetacatHandler calls - also consistently call isAuthorized
add test for synchronization failed -- TODO: verify that the log record made it in the logs
provisional replicate() implementation -- does not check if the session's subject is "allowed" to do this.the test also requires 2 servers -- right now it attempts to replicate with itself which will fail because of duplicate IDs
provisional version of getOperationStatistics() -- not clear if we are meant to aggregate by hour or by day
provisional getCapabilities() implementation. Much of the synchronization information and node health is omitted.
include test for replicate() method -- still fails as not implemented
allow null objects (use default checksum)
wire-up the getCapabilities() and getOperationStatistics() methods for when they are actually implemented (tests fail now)
test listObjects()
include MNAuthorization tests
refactor to use common superclass D1NodeServiceTest for shared methods
simplify the get() method -- no need to use temp files for this operation
test for getLogRecords -- with some semi-reasonable expectations on the return that is expected
implement d1 paging for the log record results
tests for isAuthorized and setAccessPolicy
include getLogRecords() test, though it is commented out at the moment
Reverting the resultset order in querySystemMetadata(). Thanks Ben.
test for CN.getSystemMetadata()
Because of the new 'provisional' column, the resultset field order in querySystemMetadata() was out of order. Changed the order to reflect the new table column order.
test CN.get()
Uncommented MNStorage tests.
save systemmetadata when create() is called
Send the correct Date format in testGetLogRecords(). I've commented out certain tests in the suite until isAuthorized() functionality is working. It is returning a NotFound exception even though the object is clearly in Metacat.
allow very minimal system metadata for provisional entries (CN.reserveIdentifier)
Fix a NullPointerException issue when the SubjectList in a Session is null.
Add MNodeServiceTest tests for MNCore, MNRead, MNStorage, MNAuthorization implementations. MNReplication remains to be tested, as does MNCore.getCapabilities() and getOperationStatistics().
Add the missing URL delimiter when building the D1 base service URL.
add the d1_common formats if they do not exist on the server
allow the test to read the OFL docid
check for null docid from access table -- using guid for many system meta rows
use docImpl getBytes() to preserve encodingno need to catch an exception only to throw it (those I was playing around with looking up the fmt from the d1_common lib if it was not found on the server...but this is redundant with other client code)
remove resolve() test -- not implemented in Metacat
handle data objects (not sci meta) and also set the resulting pid so that create() can succeed
newer d1_common jar with updated MNCore interface
catch exceptions from system meta data query and throw service failure rather than swallowing them with an error msg
handle null values from DB better when querying system metadata
Update getOperationStatistics() to reflect the change in the signature, using ObjectFormatIdentifier instead of ObjectFormat.
Modify monitor() to accept new parameters for getOperationStatisics() (fromDate, toDate) instead of 'period'. Added getDateAsUTC() to parse incoming fromDate and toDate parameter strings.
Fixed problems in IdentifierManager asSystemMetadata(), getSystemMetadata(), and querySystemMetadata() that were using ObjectFormat.toString() rather than ObjectFormat.getFmtid().getValue(). Metacat was storing the string memory pointer rather than the actual format string in the systemmetadata table.
add methods for testing CNodeService impl. Still some failing tests, but whittling them down
use super class' create() methoduse string comparison for assertRelation method
beef up isAuthorized method to check for "public" access rules and also for the rights holder
do not delete if the sysmeta doesn't exist
add "public" user subject
make the left panle look exactly the same as the left panel of index.jsp.
Use 'synchronization_failed' for the event string in synchronizationFailed(), and add a TODO to use the event enum when the 0.6.3 types are updated.
refactor to test the entire CN service impl
return all public objects for the search() method [for now]
Changed 'guid' to 'pid' to be in line with the D1 API.
simplify the MN rest servlet mapping to match CN mappings - also streamlined the handler code to share extra path info parsing
add space to error message
route all /d1/cn/* traffic through the CNRestServlet/Handler -- inspect the pathInfo when deciding what action to take and also strip off any extra parts (like pid).include query() method pass-through to CNodeService
add the old ecogrid query code (still commented out) from the old Rest handler
allow service implementation method to throw exception when guid parameter is null
allow parameters to be omitted in reserveIdentifier handling
implement reserveIdentifier() and check whether the id is reserved when creating records (only allow the create when the Subject creating matches the Subject who reserved it -- currently stored in rightsHolder)
allow for provisional SystemMetadata records (provisional=true)
remove extraneous update() call when create() does the call for us
remove old RestServlet url-mappings
use monitor() return value when processing response
throw exceptions up the call stack and handle exception reporting/serialization centrally in the handle() method
use logging, not system.out
consolidate session management and parameter preparation in the superclass
throw exceptions up the call stack rather than catching and handling them differently for each possible rest path
consolidate multi part handling in the super class - subclasses need only call the appropriate helper to get access to the needed resources. superclass does some validation to make sure the files are in place in the request
cleaning up the handlers -- removing superclass methods.
refactor to use D1RestServlet and D1ResourceHandler for the D1 rest interface
remove old RestServlet and it's mappings -- only using D1Servlet subclasses now
deprecate the old rest servlet in favor of the new D1-specific (CN/MN) versions
MN rest servlet, handler and mappings
share getSystemMetadata (before refactoring the superclass)
share getSystemMetadata (before refactoring this superclass)
Add placeholder NotImplemented exceptions for getOperationsStatistics() and getCapabilities() in MNodeService.
Implement MNCore.ping() by testing for a successful database connection.
Minor housekeeping - tabs to spaces.
Implement update() in MNodeService. Handle both XML science metadata updates and data object updates. Keep system metadata up to date, and log the update event.
Make isScienceMetadata() protected for access from subclasses.
Add insertSystemMetadata() to D1NodeService, wrap the exception handling from calls to IdentifierManager.
Add updateSystemMetadata() to D1NodeService as a helper method to wrap the exception handling from calls to IdentifierManager.
At Ben's suggestion, add metacatUrl to D1NodeService and make it available to subclasses. Set the metacatUrl in the constructor using SystemUtil rather than all roll your own PropertyService calls. More concise. Also, log the delete event in MNodeService.delete().
add CNRestServlet and mappings for urls in the form:/d1/cn/*This extends existing code for CN-specific handling. MN handling will be analogous and is forthcoming
share the deserializer method with subclasses
throw NotAllowed in MNodeService.delete() when isAuthorized() returns false.
Implement the MNStorage.delete() MNodeService. There is debate about what permissions are needed to 'delete' an object (archive it in metacat terms): D1 'WRITE' (metacat 'write') or D1 CHANGE_PERMISSION (metacat 'all'). For now we are using CHANGE_PERMISSION until it is ironed out.
add shared operations for authorization
share tempDir method with subclasses
make RestServlet and ResourceHandler extendible for D1 CN and MN handlers
use session member variable now that we actually have it
isAuthorized: check for nulls in Session subjects, catch any unexpected errors and deny access when in doubt
remove CrudService calls in favor of MNodeService
include commons-configuration jar -- runtime dep for d1_common
Remove setParamsFromRequest() from D1NodeService. This was called (previously as CrudService) from ResourceHandler, but will be deprecated in favor of manually creating a param map for each method that needs to pass params on to MetacatHandler.
Implement [MN|CN]Storage.create() in D1NodeService. Since MetacatHandler requires an IP for event logging, we pass in the metacat URL (hold over from CrudService). To do this in the abstract D1NodeService, change the constructors to take metacatUrl as a parameter and get the URL from the metacat properties file in getInstance() of the subclasses. Needs testing.
Add a dataone.serviceName property (set to 'd1') to remove hardcoded 'd1' strings in the codebase.
include URL in resolve() method as well as placeholder for preference