/*
* To change this template, choose Tools | Templates
* and open the template in the editor.
*/
package clips.delegate.directory.complex;
import beans.directory.mkb10.DirectoryMKB10BeanRemote;
import beans.directory.mkb10.entity.Mkb10Details;
import beans.directory.mkb10.DirectoryMKB10Bean;
import beans.directory.mkb10.MKBCode;
import beans.directory.mkb10.MKBParser;
import beans.directory.mkb10.MkbItem;
import cli_fmw.delegate.directory.DirectoryRecursive;
import cli_fmw.main.ClipsException;
import cli_fmw.utils.Selector;
import clips.directory.editors.mkb10.MKbSelector;
import framework.beans.directory.DirectoryItemDetails;
import java.text.ParseException;
import java.util.ArrayList;
import java.util.GregorianCalendar;
import java.util.HashMap;
import java.util.List;
/**
* Справочник заболеваний
* @author vip
*/
public class DirectoryMKB10 extends
DirectoryRecursive<DirectoryMKB10BeanRemote, DirectoryMKB10Item> {
private MKbSelector selector;
private MKBParser parser;
public DirectoryMKB10() throws ClipsException {
super(DirectoryMKB10Bean.class.getSimpleName());
}
@Override
public String getDirectoryTitle() {
return "Болезни";
}
@Override
protected DirectoryMKB10Item createFromLoadedDetails(DirectoryItemDetails details) {
Mkb10Details d = (Mkb10Details) details;
return new DirectoryMKB10Item(d);
}
@Override
protected DirectoryMKB10Item createNullItem() {
Mkb10Details d = new Mkb10Details();
d.code = "";
d.mustNotify = false;
d.title = "Нет диагноза";
return new DirectoryMKB10Item(d);
}
public void synchronize(List<MkbItem> newItems) throws ClipsException {
try {
getBean().get().synchronize(newItems);
} catch (Exception ex) {
clearBean();
throw new ClipsException("Синхронизация не удалась", ex);
}
}
public void updateTitle(List<MkbItem> newItems) throws ClipsException {
try {
getBean().get().updateTitle(newItems);
} catch (Exception ex) {
clearBean();
throw new ClipsException("Апдейт тайтлов не удался", ex);
}
}
public void validate() throws ParseException, ClipsException{
Selector<DirectoryMKB10Item> items = getItems();
int size = items.size();
DirectoryMKB10Item.validateList(items, null);
for (int i = 0; i < size; i++){
DirectoryMKB10Item item = items.get(i);
if (item.getID() != 0){
items.get(i).validateRecursive();
}
}
}
public DirectoryMKB10Item getItemByCode(String code) throws ClipsException, ParseException {
MKBCode parsed;
try{
parsed = MKBParser.decodeWellFormed(code);
}
catch (ParseException ex){
System.out.println("Incorect code \"" + code + "\", try to use advanced parse method");
if (parser == null){
parser = new MKBParser(MKBParser.ParseLevel.hard);
}
ArrayList<MKBCode> codes = parser.parse(code);
if (codes.size() != 1){
throw new ParseException("Строка \"" + code + "\" содержит более одного кода мкб", 0);
}
parsed = codes.get(0);
}
if (selector == null){
selector = new MKbSelector(this, MKbSelector.SelectType.oneToOne);
}
return selector.getSingleItem(parsed);
}
}