/*
* To change this template, choose Tools | Templates
* and open the template in the editor.
*/
package clips.delegate.directory.filtered;
import beans.directory.service.DirectoryServiceBeanRemote;
import beans.directory.service.entity.ServiceDetails;
import beans.directory.service.DirectoryServiceBean;
import beans.directory.service.entity.ServiceToServiceDetails;
import cli_fmw.delegate.directory.AccessDeniable;
import cli_fmw.delegate.directory.DirectoryMagic;
import cli_fmw.delegate.directory.FilteredDirectory;
import clips.delegate.directory.complex.DirectoryServicesGroupItem;
import cli_fmw.main.AccessException;
import cli_fmw.utils.Selector;
import cli_fmw.main.ClipsException;
import cli_fmw.main.DirectoryItemNotFoundException;
import cli_fmw.utils.SelectorEditableExceptional;
import framework.beans.directory.DirectoryItemDetails;
import framework.generic.ClipsServerException;
import java.util.ArrayList;
import java.util.List;
import java.util.Set;
import java.util.logging.Level;
import java.util.logging.Logger;
import org.apache.poi.util.List2d;
/**
*
* @author Axe Ilshat
*/
public class DirectoryService
extends DirectoryMagic<DirectoryServiceBeanRemote, DirectoryServiceItem>
implements FilteredDirectory<DirectoryServiceItem, DirectoryServicesGroupItem>,
AccessDeniable<DirectoryServiceItem> {
private DirectoryServiceItem dsi = null;
public DirectoryService() throws ClipsException {
super(DirectoryServiceBean.class.getSimpleName());
//load();
}
@Override
public String getDirectoryTitle() {
return "Услуги";
}
@Override
protected DirectoryServiceItem createFromLoadedDetails(DirectoryItemDetails details) {
ServiceDetails d = (ServiceDetails) details;
return new DirectoryServiceItem(d);
}
@Override
protected DirectoryServiceItem createNullItem() {
ServiceDetails d = new ServiceDetails();
d.title = "Нет услуги";
return createFromLoadedDetails(d);
}
@Override
@Deprecated
protected void loadExtra(DirectoryServiceItem item) throws ClipsException {
/*DirectoryServiceBeanRemote dsb = getBean().get();
DirectoryServiceItem service = item;
DirectoryCheckupType checkupTypesDirectory = (DirectoryCheckupType)
DirectoryLocator.getDirectory(DirectoryCheckupType.class, false);
List<Integer> types;
try {
types = dsb.getCheckupTypes(item.getID());
} catch (Exception ex) {
clearBean();
throw new ClipsException("Не удалось получить типы анализов для данной услуги", ex);
}
for(Integer id : types) {
DirectoryCheckupTypeItem cti = checkupTypesDirectory.getItemFromID(id);
service.addLoaded(cti);
}
*/
}
/**
* Возвращает услуги принадлежащие указанной группе
* @param group
* @return
* @throws generic.ClipsException
*/
@Override
public Selector<DirectoryServiceItem> getFilteredItems(DirectoryServicesGroupItem group) throws ClipsException {
return new FilteredByGroup( group);
}
List<ServiceToServiceDetails> getChildServiceList(int pserviceId) throws ClipsException {
try {
return getBean().get().getChildServiceList(pserviceId);
} catch (Exception ex) {
getBean().clear();
throw new ClipsException("Не удалось загрузить список связанных услуг", ex);
}
}
void removeChildService(ServiceToServiceDetails details, int pserviceId) throws ClipsException {
try {
getBean().get().removeChildService(details, pserviceId);
} catch (Exception ex) {
getBean().clear();
throw new ClipsException("Не удалось удалить связанную услугу", ex);
}
}
void addChildService(ServiceToServiceDetails details, int pserviceId) throws ClipsException {
try {
getBean().get().addChildService(details, pserviceId);
} catch (Exception ex) {
getBean().clear();
throw new ClipsException("Не удалось добавить связанную услугу", ex);
}
}
Set<Integer> getActions(int iD) throws ClipsException {
try {
return getBean().get().getActions(iD);
} catch (Exception ex) {
throw new ClipsException("Не удалось загрузить действия врача", ex);
}
}
void setActions(int iD, Set<Integer> vs) throws ClipsException {
try {
getBean().get().setActions(iD, vs);
} catch (Exception ex) {
throw new ClipsException("Не удалось сохранить действия врача", ex);
}
}
private class FilteredByGroup implements Selector<DirectoryServiceItem> {
List<DirectoryServiceItem> itemsByGroup = new ArrayList<DirectoryServiceItem>();
public FilteredByGroup(DirectoryServicesGroupItem group) throws ClipsException {
SelectorEditableExceptional it = getItems();
for (int i = 0; i < it.size(); i++) {
DirectoryServiceItem item = (DirectoryServiceItem) it.get(i);
//pass nullable element
if(item.getID() == 0) {
continue;
}
if(item.getGroup() == group) {
itemsByGroup.add(item);
}
}
}
@Override
public int size() {
return itemsByGroup.size();
}
@Override
public DirectoryServiceItem get(int index) {
return itemsByGroup.get(index);
}
}
@Override
public DirectoryServiceItem getNotAccessItem() throws DirectoryItemNotFoundException {
// try {
if (dsi == null){
ServiceDetails serviceDetails = new ServiceDetails();
serviceDetails.title = AccessException.E_TEXT;
dsi = new DirectoryServiceItem(serviceDetails);
}
return dsi;
/* }
catch (ClipsException ex) {
throw new DirectoryItemNotFoundException("Не удалось инициализировать элемент запрещённого доступа");
}*/
}
}