@Override
 public void handle(ResourceEvent event) {
   LocalResourceRequest req = event.getLocalResourceRequest();
   LocalizedResource rsrc = localrsrc.get(req);
   switch (event.getType()) {
     case REQUEST:
     case LOCALIZED:
       if (null == rsrc) {
         rsrc = new LocalizedResource(req, dispatcher);
         localrsrc.put(req, rsrc);
       }
       break;
     case RELEASE:
       if (null == rsrc) {
         LOG.info("Release unknown rsrc null (discard)");
         return;
       }
       break;
   }
   rsrc.handle(event);
 }
 @Override
 public boolean remove(LocalizedResource rem, DeletionService delService) {
   // current synchronization guaranteed by crude RLS event for cleanup
   LocalizedResource rsrc = localrsrc.get(rem.getRequest());
   if (null == rsrc) {
     LOG.error("Attempt to remove absent resource: " + rem.getRequest() + " from " + getUser());
     return true;
   }
   if (rsrc.getRefCount() > 0
       || ResourceState.DOWNLOADING.equals(rsrc.getState())
       || rsrc != rem) {
     // internal error
     LOG.error("Attempt to remove resource: " + rsrc + " with non-zero refcount");
     return false;
   } else { // ResourceState is LOCALIZED or INIT
     localrsrc.remove(rem.getRequest());
     if (ResourceState.LOCALIZED.equals(rsrc.getState())) {
       delService.delete(getUser(), getPathToDelete(rsrc.getLocalPath()));
     }
     return true;
   }
 }