/*
* To change this license header, choose License Headers in Project Properties.
* To change this template file, choose Tools | Templates
* and open the template in the editor.
*/
package com.eas.server.handlers;
import com.eas.server.RequestHandler;
import com.eas.client.threetier.requests.ResourceRequest;
import com.eas.server.PlatypusServerCore;
import com.eas.server.Session;
import com.eas.util.FileUtils;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.nio.file.Path;
import java.util.Date;
import java.util.function.Consumer;
import java.util.logging.Level;
import java.util.logging.Logger;
/**
*
* @author mg
*/
public class ResourceRequestHandler extends RequestHandler<ResourceRequest, ResourceRequest.Response> {
public ResourceRequestHandler(PlatypusServerCore aServerCore, ResourceRequest aRequest) {
super(aServerCore, aRequest);
}
@Override
public void handle(Session aSession, Consumer<ResourceRequest.Response> onSuccess, Consumer<Exception> onFailure) {
String relativeName = getRequest().getResourceName();
relativeName = relativeName.replace("\\", File.separator);
relativeName = relativeName.replace("/", File.separator);
Path resolved = serverCore.getIndexer().getAppPath().resolve(relativeName);
File resourceFile = resolved.toFile();
if (resourceFile.exists()) {
try {
Date serverResourceTime = new Date(resourceFile.lastModified());
Date clientResourceTime = getRequest().getTimeStamp();
ResourceRequest.Response resp = new ResourceRequest.Response();
if (clientResourceTime == null || serverResourceTime.after(clientResourceTime)) {
resp.setContent(FileUtils.readBytes(resourceFile));
resp.setTimeStamp(serverResourceTime);
}
try {
onSuccess.accept(resp);
} catch (Exception ex) {
Logger.getLogger(ResourceRequestHandler.class.getName()).log(Level.SEVERE, null, ex);
}
} catch (IOException ex) {
if (ex instanceof FileNotFoundException) {
onFailure.accept(new FileNotFoundException(relativeName));
} else {
onFailure.accept(ex);
}
}
} else {
onFailure.accept(new FileNotFoundException(relativeName));
}
}
}