package com.mossle.operation.web;
import javax.annotation.Resource;
import javax.servlet.http.HttpServletRequest;
import com.mossle.api.form.FormConnector;
import com.mossle.api.form.FormDTO;
import com.mossle.api.keyvalue.KeyValueConnector;
import com.mossle.api.keyvalue.Record;
import com.mossle.api.keyvalue.RecordBuilder;
import com.mossle.api.store.StoreConnector;
import com.mossle.api.tenant.TenantHolder;
import com.mossle.core.MultipartHandler;
import com.mossle.core.export.Exportor;
import com.mossle.core.mapper.BeanMapper;
import com.mossle.core.mapper.JsonMapper;
import com.mossle.core.spring.MessageHelper;
import com.mossle.xform.Xform;
import com.mossle.xform.XformBuilder;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.multipart.MultipartResolver;
@Controller
@RequestMapping("operation")
public class FormOperationController {
private static Logger logger = LoggerFactory
.getLogger(FormOperationController.class);
private Exportor exportor;
private BeanMapper beanMapper = new BeanMapper();
private JsonMapper jsonMapper = new JsonMapper();
private MessageHelper messageHelper;
private KeyValueConnector keyValueConnector;
private MultipartResolver multipartResolver;
private StoreConnector storeConnector;
private FormConnector formConnector;
private TenantHolder tenantHolder;
@RequestMapping("form-operation-preview")
public String preview(@RequestParam("code") String code, Model model)
throws Exception {
String tenantId = tenantHolder.getTenantId();
FormDTO formDto = formConnector.findForm(code, tenantId);
Record record = keyValueConnector.findByRef(code);
if (record == null) {
record = new Record();
record.setName(formDto.getName());
record.setRef(formDto.getCode());
keyValueConnector.save(record);
}
model.addAttribute("record", record);
Xform xform = new XformBuilder().setStoreConnector(storeConnector)
.setContent(formDto.getContent()).setRecord(record).build();
model.addAttribute("xform", xform);
return "operation/form-operation-preview";
}
@RequestMapping("form-operation-test")
public String test(HttpServletRequest request) throws Exception {
String tenantId = tenantHolder.getTenantId();
MultipartHandler multipartHandler = new MultipartHandler(
multipartResolver);
FormDTO formDto = null;
try {
multipartHandler.handle(request);
logger.info("{}", multipartHandler.getMultiValueMap());
logger.info("{}", multipartHandler.getMultiFileMap());
String ref = multipartHandler.getMultiValueMap().getFirst("ref");
formDto = formConnector.findForm(ref, tenantId);
Record record = keyValueConnector.findByRef(ref);
record = new RecordBuilder().build(record, multipartHandler,
storeConnector, tenantId);
keyValueConnector.save(record);
} finally {
multipartHandler.clear();
}
if (formDto == null) {
return "redirect:/form/form-template-list.do";
} else {
return "redirect:/operation/form-operation-preview.do?code="
+ formDto.getCode();
}
}
// ~ ======================================================================
@Resource
public void setExportor(Exportor exportor) {
this.exportor = exportor;
}
@Resource
public void setMessageHelper(MessageHelper messageHelper) {
this.messageHelper = messageHelper;
}
@Resource
public void setKeyValueConnector(KeyValueConnector keyValueConnector) {
this.keyValueConnector = keyValueConnector;
}
@Resource
public void setMultipartResolver(MultipartResolver multipartResolver) {
this.multipartResolver = multipartResolver;
}
@Resource
public void setStoreConnector(StoreConnector storeConnector) {
this.storeConnector = storeConnector;
}
@Resource
public void setFormConnector(FormConnector formConnector) {
this.formConnector = formConnector;
}
@Resource
public void setTenantHolder(TenantHolder tenantHolder) {
this.tenantHolder = tenantHolder;
}
}