/*
* To change this template, choose Tools | Templates
* and open the template in the editor.
*/
package beans.directory.danger;
import framework.beans.directory.DirectoryBean;
import beans.directory.danger.entity.Danger;
import beans.directory.danger.entity.DangerDetails;
import beans.directory.danger.entity.DangerService;
import beans.directory.danger.entity.DangerServiceDetails;
import beans.directory.service.entity.Service;
import framework.generic.ClipsServerException;
import framework.generic.EDataIntegrity;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
import javax.ejb.Stateful;
import beans.UserRightsSet;
import beans.directory.simple.entities.Speciality;
import framework.security.RightChecker;
import framework.security.UserRight;
/**
* Security - Ok.
* @author axe
*/
@Stateful(mappedName="clips-beans/DirectoryDangerBean")
public class DirectoryDangerBean extends DirectoryBean<Danger, DangerDetails>
implements DirectoryDangerBeanRemote {
public DirectoryDangerBean() {
super(Danger.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(Danger entity, DangerDetails details) throws ClipsServerException {
Danger danger = entity;
DangerDetails d = details;
danger.setTitle(d.title);
danger.setDirty(details.dirty);
danger.setFrequency(d.frequency);
danger.setDescription(d.description);
Danger parent = null;
if(d.parentItem > 0) {
parent = findEntity(Danger.class, d.parentItem);
}
danger.setReferred(parent);
}
@Override
protected void onRemove(Danger entity) throws ClipsServerException {
Field f[] = {
new Field("danger.id", entity.getId()),
};
deleteEntityList(DangerService.class, f);
}
@Override
public ArrayList<DangerServiceDetails> getServiceList(int dangerId) throws ClipsServerException {
if(dangerId == 0) {
throw new EDataIntegrity("Попытка получить услуги опасного фактора с ID=0");
}
Iterator list = findEntityList(DangerService.class, "danger.id", dangerId).iterator();
ArrayList<DangerServiceDetails> res = new ArrayList<DangerServiceDetails>();
while(list.hasNext()) {
DangerService ds = (DangerService)list.next();
res.add(ds.getDetails((RightChecker) this));
}
return res;
}
@Override
public void removeService(DangerServiceDetails details) throws ClipsServerException {
checkCommandAccessibility(COMMAND_WRITE);
if(details.dangerId == 0) {
throw new EDataIntegrity("Попытка удалить услугу опасному фактору с ID=0");
}
Field f[] = {
new Field("danger.id", details.dangerId),
new Field("service.id", details.serviceId),
new Field("speciality.id", details.specialityID)
};
Field fNull[] = {
new Field("danger.id", details.dangerId),
new Field("service.id", details.serviceId),
new Field("speciality", null, Field.OPERATOR_IS_NULL)
};
List list;
if (details.specialityID == 0) {
list = findEntityList(DangerService.class, fNull);
} else {
list = findEntityList(DangerService.class, f);
}
DangerService dangerService = (DangerService) list.get(0);
manager.remove(dangerService);
}
@Override
public int addService(DangerServiceDetails details) throws ClipsServerException{
checkCommandAccessibility(COMMAND_WRITE);
if(details.dangerId == 0) {
throw new EDataIntegrity("Попытка назначить услуги опасному фактору с ID=0");
}
DangerService dangerService = null;
Field f[] = {
new Field("danger.id", details.dangerId),
new Field("service.id", details.serviceId),
new Field("speciality.id", details.specialityID)
};
Field fNull[] = {
new Field("danger.id", details.dangerId),
new Field("service.id", details.serviceId),
new Field("speciality", null, Field.OPERATOR_IS_NULL)
};
List list;
if (details.specialityID == 0) {
list = findEntityList(DangerService.class, fNull);
} else {
list = findEntityList(DangerService.class, f);
}
if (!list.isEmpty()){
dangerService = (DangerService) list.get(0);//Должна быть одна и ниибёт
dangerService.setDescription(details.description);
Speciality spec = null;
if (details.specialityID != 0) {
spec = findEntity(Speciality.class, details.specialityID);
}
dangerService.setSpeciality(spec);
}
else {
dangerService = new DangerService();
dangerService.setDescription(details.description);
dangerService.setDanger(findEntity(Danger.class, details.dangerId));
dangerService.setService(findEntity(Service.class, details.serviceId));
Speciality spec = null;
if (details.specialityID != 0) {
spec = findEntity(Speciality.class, details.specialityID);
}
dangerService.setSpeciality(spec);
}
return saveEntity(dangerService);
}
}