package net.techreadiness.customer.action.task.org.edit;
import java.util.Collections;
import java.util.HashSet;
import java.util.List;
import java.util.Map;
import javax.inject.Inject;
import net.techreadiness.navigation.taskflow.user.UserTaskFlowData;
import net.techreadiness.service.OrganizationService;
import net.techreadiness.service.ServiceContext;
import net.techreadiness.service.object.Org;
import net.techreadiness.ui.BaseAction;
import net.techreadiness.ui.action.filters.MultipleFilterSelectionHandler;
import org.springframework.context.annotation.Scope;
import org.springframework.stereotype.Component;
import com.google.common.collect.Lists;
import com.opensymphony.xwork2.ActionContext;
@Component
@Scope("prototype")
public class OrgFilterSelectionHandlerForOrgEdit implements MultipleFilterSelectionHandler<Org> {
@Inject
protected OrganizationService orgService;
@Inject
private UserTaskFlowData data;
@Override
public List<Org> getList(Map<String, Object> parameters, String key) {
Object[] term = (Object[]) parameters.get("term");
ServiceContext context = (ServiceContext) ActionContext.getContext().getSession().get(BaseAction.SERVICE_CONTEXT);
List<Org> orgs;
Long orgId = Long.valueOf(key);
if (term != null && term.length > 0) {
orgs = orgService.findOrgsThatCanHaveChildrenBySearchTermByType(context, (String) term[0], orgId);
} else {
orgs = orgService.findOrgsThatCanHaveChildrenByType(context, orgId);
}
return orgs;
}
@Override
public List<Org> getSelection(String key) {
return Lists.newArrayList(data.getOrgMap().get(key));
}
@Override
public void add(Long id, String key) {
ServiceContext context = (ServiceContext) ActionContext.getContext().getSession().get(BaseAction.SERVICE_CONTEXT);
Org org = orgService.getById(context, id);
data.getOrgMap().get(key).add(org);
}
@Override
public void addSet(String key) {
data.getOrgMap().put(key, Collections.synchronizedSet(new HashSet<Org>()));
}
@Override
public void remove(Long id, String key) {
ServiceContext context = (ServiceContext) ActionContext.getContext().getSession().get(BaseAction.SERVICE_CONTEXT);
Org org = orgService.getById(context, id);
data.getOrgMap().get(key).remove(org);
}
@Override
public void clear(String key) {
data.getOrgMap().get(key).clear();
}
}