Implementing Copy
Webdav has a COPY method which corresponds to milton's CopyableResource method:
void copyTo(CollectionResource toCollection, String name) throws NotAuthorizedException, BadRequestException, ConflictException;
We will implement CopyableResource on our PlanetResource to allow planets to be copied within their own solar system to a different solar system. The method will throw an exception if the destination folder is not a SolarSystemResource
public class PlanetResource extends AbstractResource implements GetableResource, ReplaceableResource, MoveableResource, CopyableResource{ private static org.apache.log4j.Logger log = org.apache.log4j.Logger.getLogger(PlanetResource.class); private final SolarSystemResource parent; private final Planet planet; public PlanetResource(SolarSystemResource parent, Planet planet) { this.parent = parent; this.planet = planet; } @Override public void copyTo(CollectionResource toCollection, String name) throws NotAuthorizedException, BadRequestException, ConflictException { if( toCollection instanceof SolarSystemResource ) { throw new BadRequestException("Can only copy planet to a SolarSystemResource folder. Current parent=" +parent.getName() + " dest parent=" + toCollection.getName()); } SolarSystemResource newSolarSystem = (SolarSystemResource) toCollection; Planet pNew = newSolarSystem.getSolarSystem().addPlanet(name); pNew.setRadius(planet.getRadius()); pNew.setType(planet.getType()); pNew.setYearLength(planet.getYearLength()); }
Copying Collections
Note that when you implement the copy method on a folder it must be recursive, it your method should copy all of the files and folders within that folder - webdav clients won't do that for you.