package cz.benky.webdav;
import cz.benky.webdav.service.CassandraService;
import cz.benky.webdav.service.FileStorageService;
import org.apache.jackrabbit.webdav.DavException;
import org.apache.jackrabbit.webdav.DavResource;
import org.apache.jackrabbit.webdav.DavResourceIterator;
import org.apache.jackrabbit.webdav.DavResourceIteratorImpl;
import org.apache.jackrabbit.webdav.DavResourceLocator;
import org.apache.jackrabbit.webdav.DavServletResponse;
import org.apache.jackrabbit.webdav.DavSession;
import org.apache.jackrabbit.webdav.io.InputContext;
import org.apache.jackrabbit.webdav.io.OutputContext;
import org.apache.jackrabbit.webdav.property.DavPropertyName;
import org.apache.jackrabbit.webdav.property.DavPropertySet;
import org.apache.jackrabbit.webdav.property.DefaultDavProperty;
import org.apache.jackrabbit.webdav.property.ResourceType;
import java.io.IOException;
import java.util.Collections;
public class DavFileResource extends AbstractDavResource {
public DavFileResource(CassandraDavResourceFactory factory,
DavResourceLocator locator,
DavSession davSession,
CassandraService cassandraService,
FileStorageService fileStorageService) {
super(factory, locator, davSession, cassandraService, fileStorageService);
}
/**
* Returns false.
*/
public boolean isCollection() {
return false;
}
/**
* Method is not allowed.
*/
public void addMember(DavResource resource, InputContext inputContext) throws DavException {
throw new DavException(DavServletResponse.SC_METHOD_NOT_ALLOWED, "Cannot add members to a non-collection resource");
}
/**
* Always returns an empty iterator for a non-collection resource might
* not have internal members.
*/
public DavResourceIterator getMembers() {
return new DavResourceIteratorImpl(Collections.<DavResource>emptyList());
}
/**
* Method is not allowed.
*/
public void removeMember(DavResource member) throws DavException {
throw new DavException(DavServletResponse.SC_METHOD_NOT_ALLOWED, "Cannot remove members from a non-collection resource");
}
@Override
public void spool(OutputContext outputContext) throws IOException {
if (!isCollection()) {
getFileStorageService().readFile(getPath(), outputContext.getOutputStream());
}
}
@Override
protected DavPropertySet createProperties() {
final DavPropertySet properties = super.createProperties();
properties.add(new DefaultDavProperty(DavPropertyName.GETCONTENTLENGTH, getFileStorageService().getFileSize(getPath())));
properties.add(new ResourceType(ResourceType.DEFAULT_RESOURCE));
properties.add(new DefaultDavProperty(DavPropertyName.ISCOLLECTION, "0"));
return properties;
}
}