package com.constellio.data.dao.dto.records;
import java.io.Serializable;
import java.util.Collections;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import com.constellio.data.dao.services.bigVault.RecordDaoRuntimeException;
public class RecordDTO implements RecordsOperationDTO, Serializable {
private final String id;
private final long version;
private final List<String> loadedFields;
private final Map<String, Object> fields;
private final Map<String, Object> copyfields;
public RecordDTO(String id, Map<String, Object> fields) {
this(id, 0, null, fields, new HashMap<String, Object>());
}
public RecordDTO(String id, long version, List<String> loadedFields, Map<String, Object> fields) {
this(id, version, loadedFields, fields, new HashMap<String, Object>());
}
public RecordDTO(String id, long version, List<String> loadedFields, Map<String, Object> fields,
Map<String, Object> copyfields) {
super();
if (id == null) {
throw new RecordDaoRuntimeException("DTO Cannot have a null id");
}
this.id = id;
this.version = version;
this.loadedFields = loadedFields == null ? null : Collections.unmodifiableList(loadedFields);
this.fields = Collections.unmodifiableMap(fields);
this.copyfields = Collections.unmodifiableMap(copyfields);
}
public String getId() {
return id;
}
public long getVersion() {
return version;
}
public List<String> getLoadedFields() {
return loadedFields;
}
public Map<String, Object> getFields() {
return fields;
}
public Map<String, Object> getCopyFields() {
return copyfields;
}
public RecordDTO createCopyWithDelta(RecordDeltaDTO recordDeltaDTO) {
Map<String, Object> newFields = new HashMap<>(fields);
newFields.putAll(recordDeltaDTO.getModifiedFields());
Map<String, Object> copyFields = new HashMap<>(copyfields);
copyFields.putAll(recordDeltaDTO.getCopyfields());
return new RecordDTO(id, version, loadedFields, newFields, copyFields);
}
public RecordDTO withVersion(long version) {
return new RecordDTO(id, version, loadedFields, fields, copyfields);
}
}