package com.mossle.api.keyvalue;
import java.util.Date;
import java.util.List;
import java.util.Map;
import com.mossle.api.store.StoreConnector;
import com.mossle.core.MultipartHandler;
import com.mossle.core.store.MultipartFileDataSource;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.util.MultiValueMap;
import org.springframework.web.multipart.MultipartFile;
/**
* 构建Record.
*/
public class RecordBuilder {
private static Logger logger = LoggerFactory.getLogger(RecordBuilder.class);
/**
* 把status和parameters更新到record里.
*/
public Record build(Record record, int status, FormParameter formParameter) {
record.setStatus(status);
for (Map.Entry<String, List<String>> entry : formParameter
.getMultiValueMap().entrySet()) {
String key = entry.getKey();
List<String> value = entry.getValue();
if ((value == null) || (value.isEmpty())) {
continue;
}
Prop prop = new Prop();
prop.setCode(key);
prop.setType(0);
prop.setValue(this.getValue(value));
record.getProps().put(prop.getCode(), prop);
}
return record;
}
/**
* 创建一个新record
*/
public Record build(String category, int status,
FormParameter formParameter, String userId, String tenantId) {
Record record = new Record();
record.setCategory(category);
record.setUserId(userId);
record.setCreateTime(new Date());
record.setTenantId(tenantId);
return build(record, status, formParameter);
}
/**
* 更新record的ref属性.
*/
public Record build(Record record, int status, String ref) {
if (record == null) {
record = new Record();
}
record.setRef(ref);
record.setStatus(status);
return record;
}
public Record build(Record record, MultipartHandler multipartHandler,
StoreConnector storeConnector, String tenantId) throws Exception {
for (Map.Entry<String, List<String>> entry : multipartHandler
.getMultiValueMap().entrySet()) {
String key = entry.getKey();
if (key == null) {
continue;
}
List<String> value = entry.getValue();
if ((value == null) || (value.isEmpty())) {
continue;
}
Prop prop = new Prop();
prop.setCode(key);
prop.setType(0);
prop.setValue(this.getValue(value));
record.getProps().put(prop.getCode(), prop);
}
if (multipartHandler.getMultiFileMap() == null) {
return record;
}
for (Map.Entry<String, List<MultipartFile>> entry : multipartHandler
.getMultiFileMap().entrySet()) {
String key = entry.getKey();
if (key == null) {
continue;
}
List<MultipartFile> value = entry.getValue();
if ((value == null) || (value.isEmpty())) {
continue;
}
MultipartFile multipartFile = value.get(0);
if ((multipartFile.getName() == null)
|| "".equals(multipartFile.getName().trim())) {
continue;
}
if (multipartFile.getSize() == 0) {
logger.info("ignore empty file");
continue;
}
Prop prop = new Prop();
prop.setCode(key);
prop.setType(0);
prop.setValue(storeConnector.saveStore("form",
new MultipartFileDataSource(multipartFile), tenantId)
.getKey());
record.getProps().put(prop.getCode(), prop);
}
return record;
}
public Record build(Record record,
MultiValueMap<String, String> multiValueMap, String tenantId)
throws Exception {
for (Map.Entry<String, List<String>> entry : multiValueMap.entrySet()) {
String key = entry.getKey();
if (key == null) {
continue;
}
List<String> value = entry.getValue();
if ((value == null) || (value.isEmpty())) {
continue;
}
Prop prop = new Prop();
prop.setCode(key);
prop.setType(0);
prop.setValue(this.getValue(value));
record.getProps().put(prop.getCode(), prop);
}
return record;
}
/**
* 主要是获得多值属性,比如checkbox.
*/
public String getValue(List<String> values) {
if ((values == null) || (values.isEmpty())) {
return "";
}
if (values.size() == 1) {
return values.get(0);
}
StringBuilder buff = new StringBuilder();
for (String value : values) {
buff.append(value).append(",");
}
buff.deleteCharAt(buff.length() - 1);
return buff.toString();
}
}