use of com.axelor.db.mapper.Mapper in project axelor-open-suite by axelor.
the class DataImportServiceImpl method createDataFileName.
private String createDataFileName(FileTab fileTab) {
String fileName = null;
MetaModel model = fileTab.getMetaModel();
Long fileTabId = fileTab.getId();
try {
Mapper mapper = advancedImportService.getMapper(model.getFullName());
fileName = inflector.camelize(mapper.getBeanClass().getSimpleName(), true) + fileTabId + ".csv";
} catch (ClassNotFoundException e) {
TraceBackService.trace(e);
}
return fileName;
}
use of com.axelor.db.mapper.Mapper in project axelor-open-suite by axelor.
the class DataImportServiceImpl method process.
private List<CSVInput> process(DataReaderService reader, AdvancedImport advancedImport) throws AxelorException, IOException, ClassNotFoundException {
String[] sheets = reader.getSheetNames();
boolean isConfig = advancedImport.getIsConfigInFile();
int linesToIgnore = advancedImport.getNbOfFirstLineIgnore();
boolean isTabConfig = advancedImport.getIsFileTabConfigAdded();
List<CSVInput> inputList = new ArrayList<CSVInput>();
validatorService.sortFileTabList(advancedImport.getFileTabList());
for (FileTab fileTab : advancedImport.getFileTabList()) {
if (!Arrays.stream(sheets).anyMatch(sheet -> sheet.equals(fileTab.getName()))) {
continue;
}
this.initializeVariables();
String fileName = createDataFileName(fileTab);
csvInput = this.createCSVInput(fileTab, fileName);
ifList = new ArrayList<String>();
try (CSVWriter csvWriter = new CSVWriter(new FileWriter(new File(dataDir, fileName)), CSV_SEPRATOR)) {
int totalLines = reader.getTotalLines(fileTab.getName());
if (totalLines == 0) {
continue;
}
Mapper mapper = advancedImportService.getMapper(fileTab.getMetaModel().getFullName());
List<String[]> allLines = new ArrayList<String[]>();
int startIndex = isConfig ? 1 : linesToIgnore;
String[] row = reader.read(fileTab.getName(), startIndex, 0);
String[] headers = this.createHeader(row, fileTab, isConfig, mapper);
allLines.add(headers);
int tabConfigRowCount = 0;
if (isTabConfig) {
String[] objectRow = reader.read(fileTab.getName(), 0, 0);
tabConfigRowCount = advancedImportService.getTabConfigRowCount(fileTab.getName(), reader, totalLines, objectRow);
}
startIndex = isConfig ? tabConfigRowCount + 3 : fileTab.getAdvancedImport().getIsHeader() ? linesToIgnore + 1 : linesToIgnore;
for (int line = startIndex; line < totalLines; line++) {
String[] dataRow = reader.read(fileTab.getName(), line, row.length);
if (dataRow == null || Arrays.stream(dataRow).allMatch(StringUtils::isBlank)) {
continue;
}
String[] data = this.createData(dataRow, fileTab, isConfig, mapper);
allLines.add(data);
}
csvWriter.writeAll(allLines);
csvWriter.flush();
}
inputList.add(csvInput);
importContext.put("ifConditions" + fileTab.getId(), ifList);
importContext.put("jsonContextValues" + fileTab.getId(), createJsonContext(fileTab));
importContext.put("actionsToApply" + fileTab.getId(), fileTab.getActions());
XStream stream = XStreamUtils.createXStream();
stream.processAnnotations(CSVConfig.class);
LOG.debug("CSV Config created :" + "\n" + stream.toXML(csvInput));
}
return inputList;
}
use of com.axelor.db.mapper.Mapper in project axelor-open-suite by axelor.
the class PrintServiceImpl method saveMetaFileInModel.
protected void saveMetaFileInModel(Class<? extends Model> modelClass, Model objectModel, MetaFile metaFile, String metaFileFieldName) {
Mapper mapper = Mapper.of(modelClass);
Property p = mapper.getProperty(metaFileFieldName);
if (ObjectUtils.notEmpty(p)) {
p.set(objectModel, metaFile);
JPA.save(objectModel);
}
}
use of com.axelor.db.mapper.Mapper in project axelor-open-suite by axelor.
the class AdvancedImportServiceImpl method checkSubFields.
private boolean checkSubFields(String[] subFields, int index, Property parentProp, String model) throws AxelorException, ClassNotFoundException {
boolean isValid = true;
if (index < subFields.length) {
if (parentProp.getTarget() != null) {
Mapper mapper = getMapper(parentProp.getTarget().getName());
Property childProp = mapper.getProperty(subFields[index]);
if (childProp == null) {
throw new AxelorException(TraceBackRepository.CATEGORY_CONFIGURATION_ERROR, String.format(I18n.get(IExceptionMessage.ADVANCED_IMPORT_2), subFields[index], parentProp.getName(), model));
}
if (childProp.getTarget() != null) {
if (childProp.getType().name().equals("ONE_TO_MANY")) {
isValid = false;
return isValid;
}
if (index != subFields.length - 1) {
isValid = this.checkSubFields(subFields, index + 1, childProp, model);
} else {
throw new AxelorException(TraceBackRepository.CATEGORY_CONFIGURATION_ERROR, String.format(I18n.get(IExceptionMessage.ADVANCED_IMPORT_5), subFields[index], model));
}
}
}
}
return isValid;
}
use of com.axelor.db.mapper.Mapper in project axelor-open-suite by axelor.
the class FileTabServiceImpl method getSubImportField.
private String getSubImportField(MetaField importField) throws ClassNotFoundException {
String modelName = importField.getTypeName();
MetaModel metaModel = Beans.get(MetaModelRepository.class).findByName(modelName);
AdvancedImportService advancedImportService = Beans.get(AdvancedImportService.class);
Mapper mapper = advancedImportService.getMapper(metaModel.getFullName());
return (mapper != null && mapper.getNameField() != null) ? mapper.getNameField().getName() : null;
}
Aggregations