Package clips.directory.editors.update.updaters.dlo

Source Code of clips.directory.editors.update.updaters.dlo.UpdaterDloDrugSection

/*
* To change this template, choose Tools | Templates
* and open the template in the editor.
*/

package clips.directory.editors.update.updaters.dlo;

import beans.directory.dlodrugsection.DloDrugSectionDetails;
import cli_fmw.delegate.directory.UpdaterDirectory;
import cli_fmw.delegate.directory.complex.DirectoryLocator;
import cli_fmw.main.ClipsException;
import clips.delegate.directory.complex.DirectoryDloDrugSection;
import clips.delegate.directory.complex.DirectoryDloDrugSectionItem;
import clips.main.ClipsConfig;
import framework.utils.ROList;
import java.io.File;
import java.io.IOException;
import java.util.ArrayList;
import java.util.HashMap;
import org.xBaseJ.micro.DBF;
import org.xBaseJ.micro.fields.Field;
import org.xBaseJ.micro.xBaseJException;

/**
*
* @author lacoste
*/
public class UpdaterDloDrugSection
        extends UpdaterDirectory {

    private DirectoryDloDrugSection dir;

    private enum Col {
        C_RLP,
        N_RAZD,
        NAME_RAZD,
        N_PRAZD,
        NAME_PRAZD
  }

    @Override
    public String getFilename() {
        return "S_RLP.DBF";
    }

    @Override
    public String getTitle() {
        return "Разделы перечня ЛС";
    }

    @Override
    protected void updateImpl() throws ClipsException {
        dir = DirectoryLocator.getDirectory(DirectoryDloDrugSection.class);
        ClipsConfig cfg = ClipsConfig.getInstance();
        File file = new File(cfg.getLastDBFImportPath(),getFilename());
        DBF dbf = createDBF(file);
        HashMap<Col, Field> fields = new HashMap<Col, Field>();
        try {
            for (int i = 0; i < Col.values().length; i++) {
                Col col = Col.values()[i];
                fields.put(col, dbf.getField(col.toString()));
            }
        } catch (xBaseJException ex) {
            throw new ClipsException("Ошибка при чтении данных из файла " + dbf.getName(), ex);
        }

        //мап существующих итемов по внешнему ключу //потом будет списком на удаление
        HashMap<Integer, DirectoryDloDrugSectionItem> presentItems =
                new HashMap<Integer, DirectoryDloDrugSectionItem>();
        //мап существующих итемов для изменения Тайтла
        HashMap<DirectoryDloDrugSectionItem, String> changeList =
                new HashMap<DirectoryDloDrugSectionItem, String>();
        //список итемов для добавления
        ArrayList<DirectoryDloDrugSectionItem> addList =
                new ArrayList<DirectoryDloDrugSectionItem>();

        ROList<DirectoryDloDrugSectionItem> itemsList = dir.getItemsList();

        for (int i = 0; i < itemsList.size(); i++) {
            DirectoryDloDrugSectionItem item = itemsList.get(i);
            if (item.getID() != 0 && item.getCode() != 0) {
                presentItems.put(item.getCode(), item);
            }
        }

        int recordCount = dbf.getRecordCount();
        for (int c = 0; c < recordCount; c++) {
            try {
                if ((c%500) == 0) {
                    System.out.println("Обновление разделов перечня ЛС выполнено " + (c+1)/((float)recordCount)*100 + "%");
                    out.println("Обновление разделов перечня ЛС выполнено " + (c+1)/((float)recordCount)*100 + "%");
                }
                dbf.read();
                int code = Integer.parseInt(fields.get(Col.C_RLP).get().trim());
                int number = Integer.parseInt(fields.get(Col.N_RAZD).get().trim());
                String title = fields.get(Col.NAME_PRAZD).get().trim();
                String p_number = fields.get(Col.N_PRAZD).get().trim();
                String p_title = fields.get(Col.NAME_PRAZD).get().trim();

                DirectoryDloDrugSectionItem pItem = presentItems.get(code);
                if (pItem != null) {
                    if (!pItem.getTitle().equals(title)) {
                        changeList.put(pItem, title);
                    }
                    presentItems.remove(code);
                } else {
                    //Создать новый
                    DloDrugSectionDetails details = new DloDrugSectionDetails();
                    details.code = code;
                    details.number = number;
                    details.title = title;
                    details.subNumber = p_number;
                    details.subTitle = p_title;

                    DirectoryDloDrugSectionItem newItem = new DirectoryDloDrugSectionItem(details);
                    addList.add(newItem);
                }
               
            } catch (IOException ex) {
                closeDBF(dbf);
                throw new ClipsException("Ошибка при чтении данных из файла " + dbf.getName() + " строка + " + c, ex);
            } catch (xBaseJException ex) {
                closeDBF(dbf);
                throw new ClipsException("Ошибка при чтении данных из файла " + dbf.getName() + " строка + " + c, ex);
            }
        }
        closeDBF(dbf);
        //Удаление (а может пассивация решает бин)
        for (DirectoryDloDrugSectionItem item : presentItems.values()) {
            dir.getItems().remove(item);
        }
        //разпассивация и изменение тайтла
        for (DirectoryDloDrugSectionItem item : changeList.keySet()) {
            item.setTitle(changeList.get(item));
        }
        //добавление новых
        for (DirectoryDloDrugSectionItem item : addList) {
            dir.getItems().append(item);
        }
        dir = DirectoryLocator.getDirectory(dir.getClass(), true);

    }

}
TOP

Related Classes of clips.directory.editors.update.updaters.dlo.UpdaterDloDrugSection

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.