Custom Property Manager [v2] - OpenMarshal/npm-WebDAV-Server GitHub Wiki
A Property Manager is an object instantiated for each resource in order to:
- list the properties of this resource
- get a specific property of this resource
- set a property to this resource
- remove a property of this resource
This object must be serializable in order to be saved with the architecture of the state of the server.
Implementation
interface IPropertyManager
{
setProperty(name : string, value : ResourcePropertyValue, attributes : PropertyAttributes, callback : SimpleCallback) : void
getProperty(name : string, callback : Return2Callback<ResourcePropertyValue, PropertyAttributes>) : void
removeProperty(name : string, callback : SimpleCallback) : void
getProperties(callback : ReturnCallback<PropertyBag>, byCopy ?: boolean) : void
}
interface PropertyBag
{
[name : string] : {
value : ResourcePropertyValue
attributes ?: PropertyAttributes
}
}
LocalPropertyManager
You can instantiate a basic Property Manager called LocalPropertyManager. It will store the properties in memory (in an object variable called properties of type PropertyBag) and manage the list.
Here is its implementation (which can be used as an example):
class LocalPropertyManager implements IPropertyManager
{
properties : PropertyBag = { };
constructor(serializedData ?: any)
{
if(serializedData)
for(const name in serializedData)
this[name] = serializedData[name];
}
setProperty(name : string, value : ResourcePropertyValue, attributes : PropertyAttributes, callback : SimpleCallback) : void
{
this.properties[name] = {
value,
attributes
};
callback(null);
}
getProperty(name : string, callback : Return2Callback<ResourcePropertyValue, PropertyAttributes>) : void
{
const property = this.properties[name];
callback(property ? null : Errors.PropertyNotFound, property.value, property.attributes);
}
removeProperty(name : string, callback : SimpleCallback) : void
{
delete this.properties[name];
callback(null);
}
getProperties(callback : ReturnCallback<PropertyBag>, byCopy : boolean = false) : void
{
callback(null, byCopy ? this.properties : JSON.parse(JSON.stringify(this.properties)));
}
}