/*
* To change this template, choose Tools | Templates
* and open the template in the editor.
*/
package clips.delegate.directory.filtered;
import beans.directory.checkuptype.DirectoryCheckupTypeBean;
import beans.directory.checkuptype.DirectoryCheckupTypeBeanRemote;
import beans.directory.checkuptype.entity.CheckupTypeDetails;
import cli_fmw.delegate.directory.DirectoryMagic;
import cli_fmw.delegate.directory.SelectorDirectoryAbstract;
import cli_fmw.delegate.directory.FilteredDirectory;
import cli_fmw.main.ClipsException;
import cli_fmw.utils.SelectorEditableExceptional;
import clips.delegate.directory.simple.speciality.DirectorySpecialityItem;
import framework.beans.directory.DirectoryItemDetails;
import framework.generic.ClipsServerException;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.logging.Level;
import java.util.logging.Logger;
/**
*
* @author lacoste
*/
public class DirectoryCheckupType
extends DirectoryMagic<DirectoryCheckupTypeBeanRemote, DirectoryCheckupTypeItem>
implements FilteredDirectory<DirectoryCheckupTypeItem, DirectorySpecialityItem>{
private Map<DirectorySpecialityItem, SelectorEditableExceptional<DirectoryCheckupTypeItem>> typeMap;
public DirectoryCheckupType() throws ClipsException {
super(DirectoryCheckupTypeBean.class.getSimpleName());
}
@Override
public String getDirectoryTitle() {
return "Типы осмотров";
}
@Override
protected DirectoryCheckupTypeItem createFromLoadedDetails(DirectoryItemDetails details) {
CheckupTypeDetails d = (CheckupTypeDetails) details;
return new DirectoryCheckupTypeItem(d);
}
@Override
protected DirectoryCheckupTypeItem createNullItem() {
CheckupTypeDetails details = new CheckupTypeDetails();
details.title = "Не указан";
details.isAnalyse = true;
return new DirectoryCheckupTypeItem(details);
}
@Override
public SelectorEditableExceptional<DirectoryCheckupTypeItem> getFilteredItems(DirectorySpecialityItem type) throws ClipsException {
if (typeMap == null){
typeMap = new HashMap<DirectorySpecialityItem, SelectorEditableExceptional<DirectoryCheckupTypeItem>>();
}
if (typeMap.get(type) == null){
typeMap.put(type, new TypeSelector(type));
}
return typeMap.get(type);
}
@Override
protected void removeDB(DirectoryCheckupTypeItem item) throws ClipsException {
super.removeDB(item);
typeMap = null;
}
private class TypeSelector extends SelectorDirectoryAbstract<DirectoryCheckupTypeItem,
DirectorySpecialityItem>{
public TypeSelector(DirectorySpecialityItem filter) {
super(filter);
}
@Override
protected List<DirectoryCheckupTypeItem> initItems(DirectorySpecialityItem filter) throws ClipsException {
List<DirectoryCheckupTypeItem> res = new ArrayList<DirectoryCheckupTypeItem>();
CheckupTypeDetails[] itemDetailsByFilter = getBean().get().getItemDetailsByFilter(filter.getDetails());
for (CheckupTypeDetails checkupTypeDetails : itemDetailsByFilter) {
res.add(getItemFromID(checkupTypeDetails.id));
}
return res;
}
@Override
public void remove(DirectoryCheckupTypeItem element) throws ClipsException {
try {
// System.out.println("Remove \"" + element + " ("+ element.getID() + ")\" from \"" + getFilter() + "\" (" + getFilter().getID() + ")\"");
getBean().get().removeItemFromFilter(getFilter().getDetails(), element.getDetails());
getSelectorItems().remove(element);
} catch (Exception ex) {
clearBean();
throw new ClipsException("Не удалось удалить", ex);
}
}
@Override
protected void appendDB(DirectoryCheckupTypeItem item) throws ClipsException {
try {
// System.out.println("Add \"" + item + " ("+ item.getID() + ")\" to \"" + getFilter() + "\" (" + getFilter().getID() + ")\"");
getBean().get().addItemToFilter(getFilter().getDetails(), item.getDetails());
} catch (ClipsServerException ex) {
clearBean();
throw new ClipsException("Не удалось добавить", ex);
}
}
}
public boolean isNotUsedInCheckup(DirectoryCheckupTypeItem item) throws ClipsException{
try {
return getBean().get().isNotUsedInCheckup(item.getID());
} catch (Exception ex) {
clearBean();
throw new ClipsException("Не удалось получить данные об использовании данного типа в осмотрах", ex);
}
}
}