/*
* To change this template, choose Tools | Templates
* and open the template in the editor.
*/
package beans.directory.vidal;
import framework.beans.directory.DirectoryBean;
import framework.beans.directory.DirectoryItemDetails;
import beans.directory.vidal.entities.Vidal;
import beans.directory.vidal.entities.atc.VidalAtc;
import beans.directory.vidal.entities.farm.VidalFarm;
import beans.directory.vidal.entities.matter.VidalMatter;
import beans.directory.vidal.entities.matter.VidalMatterPK;
import beans.doctor.contraindication.Contraindication;
import beans.doctor.prescription.PrescriptionItem;
import framework.generic.ClipsServerException;
import framework.generic.EDataIntegrity;
import framework.generic.EMoveToTrash;
import java.util.HashSet;
import java.util.Iterator;
import java.util.Set;
import javax.ejb.Stateful;
import beans.UserRightsSet;
import framework.security.UserRight;
/**
* @security ok.
* @author axe
*/
@Stateful(mappedName="clips-beans/DirectoryVidalBean")
public class DirectoryVidalBean extends DirectoryBean<Vidal, DirectoryItemDetails>
implements DirectoryVidalBeanRemote {
public DirectoryVidalBean() {
super(Vidal.class, "препарат");
}
@Override
protected UserRight getRightForCreateDirectoryItem() {
return UserRightsSet.WRITE_REGION_ADMIN_DIRECTORY;
}
@Override
protected UserRight getRightForWriteToDirectory() {
return UserRightsSet.WRITE_REGION_ADMIN_DIRECTORY;
}
@Override
protected void set(Vidal vidal, DirectoryItemDetails item) throws ClipsServerException {
vidal.setTitle(item.title);
vidal.setDirty(item.dirty);
vidal.setTrash(item.hidden);
}
/**
* Активные вещества, содержащиеся в препарате
* @param vidal
* @return
* @throws generic.ClipsServerException
*/
@Override
public Set<Integer> getMatters(int vidal) throws ClipsServerException {
if(vidal == 0) {
throw new EDataIntegrity("");
}
Iterator<VidalMatter> list = findEntityList(VidalMatter.class, "key.vidal", vidal).iterator();
Set<Integer> res = new HashSet<Integer>();
while (list.hasNext()) {
VidalMatter matter = list.next();
res.add(matter.getKey().getMatter());
}
return res;
}
/**
* Активные вещества, содержащиеся в препарате
* @param vidal
* @param matters
* @throws generic.ClipsServerException
*/
@Override
public void setMatters(int vidal, Set<Integer> matters) throws ClipsServerException {
checkCommandAccessibility(COMMAND_WRITE);
Set<Integer> backup = new HashSet<Integer>(matters);
Set<Integer> oldMatters = getMatters(vidal);
matters.removeAll(oldMatters);
oldMatters.removeAll(backup);
if(oldMatters.size() > 0) {
@SuppressWarnings("unchecked")
Field f[] = {
new Field("key.vidal", vidal),
new Field("key.matter", oldMatters, Field.OPERATOR_IN)
};
deleteEntityList(VidalMatter.class, f);
}
Iterator<Integer> addNew = matters.iterator();
while(addNew.hasNext()) {
VidalMatter r = new VidalMatter();
r.setKey(new VidalMatterPK(vidal, addNew.next()));
System.out.println("Added new:" + r);
manager.persist(r);
}
}
@Override
protected void onRemove(Vidal entity) throws ClipsServerException {
Field f[] = { new Field("vidal", entity) };
if(getEntityCount(VidalFarm.class, f, "") > 0) {
throw new EMoveToTrash("Данному классификатору соотвествует "
+ "один или несколько элементов фармакологического классификатора, удаление невозможно");
}
if(getEntityCount(VidalAtc.class, f, "") > 0) {
throw new EMoveToTrash("Данному классификатору соотвествует "
+ "один или несколько элементов АТХ классификатора, удаление невозможно");
}
if(getEntityCount(VidalMatter.class, f, "") > 0) {
throw new EMoveToTrash("Данному классификатору соотвествует "
+ "один или несколько элементов классификатора активных веществ, удаление невозможно");
}
if(getEntityCount(Contraindication.class, f) > 0) {
throw new EMoveToTrash("Данный классификатор использован при назначении противопоказания, удаление невозможно");
}
if(getEntityCount(PrescriptionItem.class, f) > 0) {
throw new EMoveToTrash("Данный классификатор использован при выписке рецепта, удаление невозможно");
}
}
}