/**
* The contents of this file are subject to the license and copyright
* detailed in the LICENSE and NOTICE files at the root of the source
* tree and available online at
*
* http://www.dspace.org/license/
*/
package org.dspace.xoai.services.impl.xoai;
import com.lyncode.xoai.dataprovider.core.ResumptionToken;
import com.lyncode.xoai.dataprovider.exceptions.BadResumptionToken;
import com.lyncode.xoai.dataprovider.services.api.ResumptionTokenFormatter;
import org.apache.log4j.LogManager;
import org.apache.log4j.Logger;
import org.dspace.xoai.util.DateUtils;
import java.util.Date;
public class DSpaceResumptionTokenFormatter implements ResumptionTokenFormatter {
private static Logger log = LogManager
.getLogger(DSpaceResumptionTokenFormatter.class);
public DSpaceResumptionTokenFormatter() {
// TODO Auto-generated constructor stub
}
@Override
public ResumptionToken parse(String resumptionToken) throws BadResumptionToken {
if (resumptionToken == null) return new ResumptionToken();
String[] res = resumptionToken.split("/", -1);
if (res.length != 5) throw new BadResumptionToken();
else {
try {
int offset = Integer.parseInt(res[4]);
String prefix = (res[0].equals("")) ? null : res[0];
String set = (res[3].equals("")) ? null : res[3];
Date from = (res[1].equals("")) ? null : DateUtils.parse(res[1]);
Date until = res[2].equals("") ? null : DateUtils.parse(res[2]);
return new ResumptionToken(offset, prefix, set, from, until);
} catch (Exception e) {
log.error(e.getMessage(), e);
throw new BadResumptionToken();
}
}
}
@Override
public String format(ResumptionToken resumptionToken) {
String result = "";
if (resumptionToken.hasMetadataPrefix())
result += resumptionToken.getMetadataPrefix();
result += "/";
if (resumptionToken.hasFrom())
result += DateUtils.format(resumptionToken.getFrom());
result += "/";
if (resumptionToken.hasUntil())
result += DateUtils.format(resumptionToken.getUntil());
result += "/";
if (resumptionToken.hasSet())
result += resumptionToken.getSet();
result += "/";
result += resumptionToken.getOffset();
return result;
}
}