/*
* To change this template, choose Tools | Templates
* and open the template in the editor.
*/
package clips.delegate.directory.complex;
import beans.directory.danger.DirectoryDangerBeanRemote;
import cli_fmw.delegate.directory.DirectoryItemRO;
import cli_fmw.delegate.directory.DirectoryItemRecursive;
import cli_fmw.delegate.cache.Cache;
import beans.directory.danger.entity.DangerDetails;
import cli_fmw.delegate.directory.DirectoryMagic;
import cli_fmw.main.ClipsException;
import cli_fmw.utils.MessageBox;
import cli_fmw.utils.SelectorEditableExceptional;
import beans.directory.danger.entity.DangerServiceDetails;
import framework.generic.ClipsServerException;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
/**
*
* @author petr
*/
public class DirectoryDangerItem extends
DirectoryItemRecursive<DirectoryDangerItem, DangerDetails> {
private Cache<SelectorEditableExceptional<DangerServiceData>> services =
new Cache<SelectorEditableExceptional<DangerServiceData>>();
public DirectoryDangerItem(DangerDetails details) {
super(details);
}
public int getFrequency(){
return getDetails().frequency;
}
public void setFrequency(int frequency) throws ClipsException{
if(isInDirectory()) {
DangerDetails newDetails = getDetailsCopy();
newDetails.frequency = frequency;
saveDetails(newDetails);
} else {
getDetails().frequency = frequency;
}
}
public String getDescription() {
return getDetails().description;
}
/**
* Итемы, не содержащие связанных услуг выбирать нельзя
* @return
*/
@Override
public boolean canBeSelected() {
if (!super.canBeSelected()) {
return false;
}
try {
if (getID() == 0 || getDangerServices().size() == 0) {
return false;
}
} catch (ClipsException ex) {
MessageBox.showException(ex);
return false;
}
return true;
}
public void setDescription(String description) throws ClipsException {
if(isInDirectory()) {
DangerDetails newDetails = getDetailsCopy();
newDetails.description = description;
saveDetails(newDetails);
} else {
getDetails().description = description;
}
}
/**
* Вернёт список прицепленных услуг
* @return список
* @throws cli_fmw.main.ClipsException
*/
public SelectorEditableExceptional<DangerServiceData> getDangerServices() throws ClipsException {
if (!services.inCache()) {
services.set(new DangerServiceItems());
}
return services.get();
}
@Override
protected DirectoryDanger getDirectory() {
return (DirectoryDanger) super.getDirectory();
}
private class DangerServiceItems implements SelectorEditableExceptional<DangerServiceData> {
private List<DangerServiceData> items = new ArrayList<DangerServiceData>();
private int dangerId;
public DangerServiceItems() throws ClipsException {
dangerId = getID();
for (DangerServiceDetails dsd : getDirectory().getServiceList(dangerId)) {
items.add(new DangerServiceData(dsd));
}
}
@Override
public int size() {
return items.size();
}
@Override
public DangerServiceData get(int index) {
return items.get(index);
}
@Override
public void remove(int index) throws ClipsException {
DangerServiceData data = items.get(index);
remove(data);
}
@Override
public void remove(DangerServiceData element) throws ClipsException {
getDirectory().removeService(element.getDetails());
}
@Override
public void append(DangerServiceData item) throws ClipsException {
DangerServiceDetails details = item.getDetails();
getDirectory().addService(details);
DangerServiceData founded = null;
for (DangerServiceData d : items) {
if (d.getDetails().dangerId == details.dangerId
&& d.getDetails().serviceId == details.serviceId
&& d.getDetails().specialityID == details.specialityID) {
founded = d;
break;
}
}
if (founded == null) {
items.add(item);
} else {
founded.setDescription(item.getDescription());
founded.setSpeciality(item.getSpeciality());
}
}
@Override
public void removeByID(int id) throws ClipsException {
throw new UnsupportedOperationException("Not supported yet.");
}
@Override
public boolean contains(DangerServiceData element) {
return items.contains(element);
}
}
@Override
public int compareTo(DirectoryItemRO item) {
return getTitle().compareTo(((DirectoryDangerItem)item).getTitle());
}
}