Package clips.directory.editors.update.updaters

Source Code of clips.directory.editors.update.updaters.UpdaterDirectoryMKB

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

package clips.directory.editors.update.updaters;

import beans.directory.mkb10.MKBCode;
import beans.directory.mkb10.MKBCode.CompareResould;
import beans.directory.mkb10.MKBParser;
import cli_fmw.delegate.directory.UpdaterDirectory;
import cli_fmw.delegate.directory.complex.DirectoryLocator;
import cli_fmw.main.ClipsException;
import cli_fmw.utils.Selector;
import clips.delegate.directory.complex.DirectoryMKB10;
import clips.delegate.directory.complex.DirectoryMKB10Item;
import clips.main.ClipsConfig;
import beans.directory.mkb10.entity.Mkb10Details;
import java.io.File;
import java.io.IOException;
import java.text.ParseException;
import java.util.HashMap;
import org.xBaseJ.micro.DBF;
import org.xBaseJ.micro.fields.Field;
import org.xBaseJ.micro.xBaseJException;

/**
*
* @author vip
*/
public class UpdaterDirectoryMKB extends UpdaterDirectory{
    DirectoryMKB10 dirMKB;

    @Override
    public String getFilename() {
        return "s_mkb10.dbf";
    }

    @Override
    public String getTitle() {
        return "Справочник МКБ";
    }

    @Override
    public void updateImpl() throws ClipsException {
        dirMKB = DirectoryLocator.getDirectory(DirectoryMKB10.class);
        ClipsConfig cfg = ClipsConfig.getInstance();
        File file = new File(cfg.getLastDBFImportPath(),getFilename());
        DBF dbf = createDBF(file);
        HashMap<String, Field> fields = new HashMap<String, Field>();
        try {
            //fields.put("PRIZNAK", dbf.getField("PRIZNAK"));
            fields.put("CODE", dbf.getField("CODE"));
            fields.put("NAME", dbf.getField("NAME"));
            //fields.put("SHIFT", dbf.getField("SHIFT"));
        } catch (xBaseJException ex) {
            throw new ClipsException("Ошибка при чтении данных из файла " + dbf.getName(), ex);
        }

        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();
                //String priznak = fields.get("PRIZNAK").get().trim();
                String kod = fields.get("CODE").get().trim();
                String title = fields.get("NAME").get().trim();
                //String shortTitle = fields.get("SHIFT").get().trim();
                /*if (priznak.equals("1")
                        || title.isEmpty() && shortTitle.isEmpty()) {
                    continue;
                }*/
                if (title.isEmpty()) {
                    continue;
                }

                DirectoryMKB10Item item = dirMKB.getItemByCode(kod);
                if (item == null) {
                    DirectoryMKB10Item parent = getParent(kod);
                    Mkb10Details d = new Mkb10Details();
                    d.code = kod;
                    d.title = title;
                    //d.shortTitle = shortTitle;
                    d.parentItem = parent.getID();
                    item = new DirectoryMKB10Item(d);
                    parent.getItems().append(item);
                    System.out.println("Новый МКБ итем : " + item);
                }
                if (!item.getTitle().equals(title)) {
                    //System.out.println("МКБ итем - другое название : " + title);
                    //item.setTitle(title);
                }
                /*if (!item.getShortTitle().equals(shortTitle)) {
                    item.setShortTitle(shortTitle);
                }*/

            } catch (IOException ex) {
                closeDBF(dbf);
                throw new ClipsException("Ошибка при чтении данных из файла " + dbf.getName() + " строка + " + c, ex);
            } catch (xBaseJException ex) {
                closeDBF(dbf);
                throw new ClipsException("Ошибка при чтении данных из файла " + dbf.getName() + " строка + " + c, ex);
            } catch (ParseException ex) {
                closeDBF(dbf);
                throw new ClipsException("Ошибка при парсинге кода мкб. Файл " + dbf.getName() + " строка + " + c, ex);
            }
        }
        closeDBF(dbf);

    }

    private DirectoryMKB10Item getParent(String code) throws ParseException, ClipsException{
        MKBCode         decoded = MKBParser.decodeWellFormed(code);
        return dirScanRecursive(null, dirMKB.getItems(), decoded);
    }

  private DirectoryMKB10Item dirScanRecursive(DirectoryMKB10Item cur, Selector<DirectoryMKB10Item> selector, MKBCode code) throws ParseException, ClipsException{
    int      size = selector.size();
    for (int i = 0; i < size; i++){
      DirectoryMKB10Item    item = selector.get(i);
      if (item.getID() == 0){
        continue;
      }
      MKBCode          itemCode = item.getDecodedCode();
      CompareResould      res = itemCode.advanceCompare(code);
            switch (res){
                case contains:
                    return dirScanRecursive(item, item.getItems(), code);
            }
        }
        return cur;
    }
}
TOP

Related Classes of clips.directory.editors.update.updaters.UpdaterDirectoryMKB

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.