/*
* To change this template, choose Tools | Templates
* and open the template in the editor.
*/
package clips.directory.editors.update.updaters;
import cli_fmw.delegate.directory.UpdaterDirectory;
import cli_fmw.delegate.directory.complex.DirectoryKladrTypeItem;
import cli_fmw.delegate.directory.complex.DirectoryLocator;
import cli_fmw.main.ClipsException;
import cli_fmw.utils.SelectorEditableExceptional;
import clips.main.ClipsConfig;
import cli_fmw.delegate.directory.complex.DirectoryKladrType;
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 vip
*/
public class UpdaterDirectoryAddressObjectType extends UpdaterDirectory{
DirectoryKladrType dir;
@Override
public String getFilename() {
return "S_TITEM.DBF";
}
@Override
public String getTitle() {
return "Коды типов объектов адреса";
}
@Override
public void updateImpl() throws ClipsException {
dir = DirectoryLocator.getDirectory(DirectoryKladrType.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("ID", dbf.getField("ID"));
fields.put("CUTNAME", dbf.getField("CUTNAME"));
} catch (xBaseJException ex) {
throw new ClipsException("Ошибка при чтении данных из файла " + dbf.getName(), ex);
}
int recordCount = dbf.getRecordCount();
for (int c = 0; c < recordCount; c++) {
try {
dbf.read();
String extKey = fields.get("ID").get().trim();
String cutName = fields.get("CUTNAME").get().trim();
ArrayList<DirectoryKladrTypeItem> items = getItemsByShortTitle(cutName);
if (items.size() != 0) {
for (DirectoryKladrTypeItem item : items) {
item.setExtKey(extKey);
}
}
} 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);
}
private ArrayList<DirectoryKladrTypeItem> getItemsByShortTitle(String shortTitle) throws ClipsException {
SelectorEditableExceptional<DirectoryKladrTypeItem> selector = dir.getItems();
ArrayList<DirectoryKladrTypeItem> target = new ArrayList<DirectoryKladrTypeItem>();
int size = selector.size();
for (int i = 0; i < size; i++){
DirectoryKladrTypeItem item = selector.get(i);
if (item.getID() == 0){
continue;
}
if (item.getAbbrivation() != null && item.getAbbrivation().equals(shortTitle)) {
target.add(item);
}
}
return target;
}
}