package com.constellio.app.modules.rm.services.borrowingServices;
import java.util.StringTokenizer;
import org.joda.time.LocalDateTime;
import com.constellio.model.entities.schemas.ModifiableStructure;
import com.constellio.model.entities.schemas.StructureFactory;
public class BorrowingFactory implements StructureFactory {
private static final String NULL = "~null~";
@Override
public ModifiableStructure build(String string) {
StringTokenizer stringTokenizer = new StringTokenizer(string, ":");
Borrowing borrowing = new Borrowing();
BorrowingType borrowingType = null;
String borrowTypeString = readString(stringTokenizer);
if (borrowTypeString != null) {
borrowingType = BorrowingType.valueOf(borrowTypeString);
}
borrowing.borrowingType = borrowingType;
borrowing.borrowerId = readString(stringTokenizer);
borrowing.borrowerUsername = readString(stringTokenizer);
borrowing.setBorrowDateTime(readLocalDateTime(stringTokenizer));
borrowing.setReturnDateTime(readLocalDateTime(stringTokenizer));
borrowing.setPreviewReturnDateTime(readLocalDateTime(stringTokenizer));
borrowing.dirty = false;
return borrowing;
}
@Override
public String toString(ModifiableStructure structure) {
Borrowing borrowing = (Borrowing) structure;
StringBuilder stringBuilder = new StringBuilder();
writeString(stringBuilder, borrowing.getBorrowingType() == null ?
NULL :
"" + borrowing.getBorrowingType());
writeString(stringBuilder, "" + borrowing.getBorrowerId() == null ?
NULL :
borrowing.getBorrowerId());
writeString(stringBuilder, "" + borrowing.getBorrowerUsername() == null ?
"" :
borrowing.getBorrowerUsername());
if (borrowing.getBorrowDateTime() != null) {
writeString(stringBuilder, borrowing.getBorrowDateTime().toString("yyyy-MM-dd'T'HH:mm:ss.SSSZ"));
} else {
writeString(stringBuilder, NULL);
}
if (borrowing.getReturnDateTime() != null) {
writeString(stringBuilder, borrowing.getReturnDateTime().toString("yyyy-MM-dd'T'HH:mm:ss.SSSZ"));
} else {
writeString(stringBuilder, NULL);
}
if (borrowing.getPreviewReturnDateTime() != null) {
writeString(stringBuilder, borrowing.getPreviewReturnDateTime().toString("yyyy-MM-dd'T'HH:mm:ss.SSSZ"));
} else {
writeString(stringBuilder, NULL);
}
return stringBuilder.toString();
}
private String readString(StringTokenizer stringTokenizer) {
String value = stringTokenizer.nextToken();
if (NULL.equals(value)) {
return null;
} else {
return value.replace("~~~", ":");
}
}
private void writeString(StringBuilder stringBuilder, String value) {
if (stringBuilder.length() != 0) {
stringBuilder.append(":");
}
if (value == null) {
stringBuilder.append(NULL);
} else {
stringBuilder.append(value.replace(":", "~~~"));
}
}
private LocalDateTime readLocalDateTime(StringTokenizer stringTokenizer) {
String localDateTime = readString(stringTokenizer);
return localDateTime == null ? null : LocalDateTime.parse(localDateTime);
}
}