package fr.openwide.core.wicket.more.export.file.behavior;
import java.io.File;
import java.util.Objects;
import org.apache.wicket.Component;
import org.apache.wicket.model.AbstractReadOnlyModel;
import org.apache.wicket.model.IModel;
import org.javatuples.LabelValue;
import fr.openwide.core.commons.util.functional.SerializableFunction;
import fr.openwide.core.wicket.more.export.AbstractDeferredDownloadBehavior;
import fr.openwide.core.wicket.more.model.ReadOnlyModel;
import fr.openwide.core.wicket.more.util.model.Detachables;
public class FileDeferredDownloadBehavior extends AbstractDeferredDownloadBehavior {
private static final long serialVersionUID = -2564879404137129896L;
private final IModel<LabelValue<String, File>> fileInformationModel;
public FileDeferredDownloadBehavior(IModel<File> fileModel, IModel<String> fileNameModel) {
this(fileModel, fileNameModel, true);
}
public FileDeferredDownloadBehavior(final IModel<File> fileModel, final IModel<String> fileNameModel, boolean addAntiCache) {
this(
new AbstractReadOnlyModel<LabelValue<String, File>>() {
private static final long serialVersionUID = 1L;
@Override
public LabelValue<String, File> getObject() {
return LabelValue.with(fileNameModel.getObject(), fileModel.getObject());
}
@Override
public void detach() {
super.detach();
Detachables.detach(fileModel, fileNameModel);
}
},
addAntiCache
);
Objects.requireNonNull(fileModel);
Objects.requireNonNull(fileNameModel);
}
public FileDeferredDownloadBehavior(IModel<LabelValue<String, File>> fileInformationModel) {
this(fileInformationModel, true);
}
public FileDeferredDownloadBehavior(IModel<LabelValue<String, File>> fileInformationModel, boolean addAntiCache) {
super(
ReadOnlyModel.of(
fileInformationModel,
new SerializableFunction<LabelValue<String, File>, File>() {
private static final long serialVersionUID = 1L;
@Override
public File apply(LabelValue<String, File> input) {
return input != null ? input.getValue() : null;
}
}
),
addAntiCache
);
this.fileInformationModel = Objects.requireNonNull(fileInformationModel);
}
@Override
protected String getFileDisplayName() {
return fileInformationModel.getObject().getLabel();
}
@Override
public void detach(Component component) {
super.detach(component);
Detachables.detach(fileInformationModel);
}
}