/*
* To change this template, choose Tools | Templates
* and open the template in the editor.
*/
package beans.directory.vidal.farm;
import beans.directory.vidal.entities.farm.ClassificationFarmDetails;
import framework.beans.directory.DirectoryBean;
import beans.directory.vidal.entities.farm.ClassificationFarm;
import beans.directory.vidal.entities.farm.VidalFarm;
import beans.directory.vidal.entities.farm.VidalFarmPK;
import framework.generic.ClipsServerException;
import framework.generic.EDataIntegrity;
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 petr
*/
@Stateful(mappedName="clips-beans/DirectoryVidalFarmBean")
public class DirectoryVidalFarmBean extends DirectoryBean<ClassificationFarm, ClassificationFarmDetails> implements DirectoryVidalFarmBeanRemote {
public DirectoryVidalFarmBean() {
super(ClassificationFarm.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(ClassificationFarm atc, ClassificationFarmDetails item) throws ClipsServerException {
ClassificationFarm farmParent = item.parentItem == 0? null: findEntity(ClassificationFarm.class, item.parentItem);
atc.setTitle(item.title);
//atc.setDirty(details.dirty);
if (farmParent != null){
atc.setParentFarm(farmParent);
}
}
@Override
protected void onRemove(ClassificationFarm entity) throws ClipsServerException {
Field f[] = { new Field("farm", entity) };
if(getEntityCount(VidalFarm.class, f, "") > 0) {
throw new EDataIntegrity("Данному классификатору соотвествует "
+ "несколько элементов классификатора VIDAL, удаление невозможно");
}
}
@Override
public Set<Integer> getVidals(int farm) throws ClipsServerException {
if(farm == 0) {
throw new EDataIntegrity("");
}
Iterator<VidalFarm> list = findEntityList(VidalFarm.class, "key.farm", farm).iterator();
Set<Integer> res = new HashSet<Integer>();
while(list.hasNext()) {
VidalFarm vidal = (VidalFarm)list.next();
res.add(vidal.getKey().getVidal());
}
return res;
}
@Override
public void setVidals(int farm, Set<Integer> vidals) throws ClipsServerException {
checkCommandAccessibility(COMMAND_WRITE);
Set<Integer> backup = new HashSet<Integer>(vidals);
Set<Integer> oldVidals = getVidals(farm);
vidals.removeAll(oldVidals);
oldVidals.removeAll(backup);
if(oldVidals.size() > 0) {
@SuppressWarnings("unchecked")
Field f[] = {
new Field("key.farm", farm),
new Field("key.vidal", oldVidals, Field.OPERATOR_IN)
};
deleteEntityList(VidalFarm.class, f);
}
Iterator<Integer> addNew = vidals.iterator();
while(addNew.hasNext()) {
VidalFarm r = new VidalFarm();
r.setKey(new VidalFarmPK(farm, addNew.next()));
System.out.println("Added new:" + r);
manager.persist(r);
}
}
}