Java tutorial
/** * Axelor Business Solutions * * Copyright (C) 2016 Axelor (<http://axelor.com>). * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU Affero General Public License, version 3, * as published by the Free Software Foundation. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Affero General Public License for more details. * * You should have received a copy of the GNU Affero General Public License * along with this program. If not, see <http://www.gnu.org/licenses/>. */ package com.axelor.apps.account.service; import java.io.File; import java.io.FileOutputStream; import java.io.IOException; import java.io.InputStream; import java.util.Arrays; import java.util.HashMap; import java.util.Set; import org.apache.commons.io.FileUtils; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import com.axelor.apps.account.db.AccountChart; import com.axelor.apps.account.db.AccountConfig; import com.axelor.apps.account.db.repo.AccountChartRepository; import com.axelor.apps.account.db.repo.AccountConfigRepository; import com.axelor.apps.base.db.Company; import com.axelor.apps.base.db.repo.CompanyRepository; import com.axelor.data.Listener; import com.axelor.data.csv.CSVImporter; import com.axelor.db.Model; import com.axelor.exception.service.TraceBackService; import com.google.inject.Inject; import com.google.inject.persist.Transactional; public class AccountChartService { private final Logger log = LoggerFactory.getLogger(getClass()); protected AccountConfigRepository accountConfigRepo; protected CompanyRepository companyRepo; protected AccountChartRepository accountChartRepository; @Inject public AccountChartService(AccountConfigRepository accountConfigRepo, CompanyRepository companyRepo, AccountChartRepository accountChartRepository) { this.accountConfigRepo = accountConfigRepo; this.companyRepo = companyRepo; this.accountChartRepository = accountChartRepository; } public Boolean installAccountChart(AccountChart act, Company company, AccountConfig accountConfig) { try { File tempDir = new File(System.getProperty("java.io.tmpdir") + "/chartImport"); if (!tempDir.exists()) tempDir.mkdir(); String chartPath = "/l10n/l10n_" + act.getCountryCode() + "/" + act.getCode() + "/"; String[] files = new String[] { "chart-config.xml", "account_account.csv", "account_accountEquiv.csv", "account_accountType.csv", "account_fiscalPosition.csv", "account_tax.csv", "account_taxAccount.csv", "account_taxEquiv.csv", "account_taxLine.csv" }; for (String fileName : Arrays.asList(files)) { File resourceFile = new File(tempDir, fileName); String resource = chartPath + fileName; if (fileName.equals("chart-config.xml")) resource = "/l10n/chart-config.xml"; log.debug("Resource file path: {}", resource); InputStream inputStream = this.getClass().getResourceAsStream(resource); if (inputStream == null) continue; FileOutputStream outputStream; outputStream = new FileOutputStream(resourceFile); int read = 0; byte[] bytes = new byte[1024]; while ((read = inputStream.read(bytes)) != -1) outputStream.write(bytes, 0, read); outputStream.close(); } HashMap<String, Object> context = new HashMap<String, Object>(); context.put("_companyId", company.getId()); importAccountChartData(tempDir.getAbsolutePath() + "/" + "chart-config.xml", tempDir.getAbsolutePath(), context); updateChartCompany(act, company, accountConfig); FileUtils.deleteDirectory(tempDir); return true; } catch (IOException e) { e.printStackTrace(); TraceBackService.trace(e); return false; } } @Transactional public void updateChartCompany(AccountChart act, Company company, AccountConfig accountConfig) { accountConfig = accountConfigRepo.find(accountConfig.getId()); accountConfig.setHasChartImported(true); accountConfigRepo.save(accountConfig); act = accountChartRepository.find(act.getId()); company = companyRepo.find(company.getId()); Set<Company> companySet = act.getCompanySet(); companySet.add(company); act.setCompanySet(companySet); accountChartRepository.save(act); } public void importAccountChartData(String configPath, String dataDir, HashMap<String, Object> context) throws IOException { CSVImporter importer = new CSVImporter(configPath.toString(), dataDir); importer.addListener(new Listener() { @Override public void handle(Model bean, Exception e) { } @Override public void imported(Model arg0) { } @Override public void imported(Integer total, Integer count) { log.debug("Total records: {}", total); log.debug("Success records: {}", count); } }); importer.setContext(context); importer.run(); } }