package com.intuit.tank.filter; /* * #%L * JSF Support Beans * %% * Copyright (C) 2011 - 2015 Intuit Inc. * %% * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html * #L% */ import java.io.Serializable; import java.util.ArrayList; import java.util.Collections; import java.util.HashMap; import java.util.List; import java.util.Map; import javax.faces.view.ViewScoped; import javax.inject.Inject; import javax.inject.Named; import com.intuit.tank.util.Messages; import com.intuit.tank.auth.Security; import com.intuit.tank.dao.ScriptFilterDao; import com.intuit.tank.dao.ScriptFilterGroupDao; import com.intuit.tank.project.ScriptFilter; import com.intuit.tank.project.ScriptFilterGroup; import com.intuit.tank.util.ExceptionHandler; import com.intuit.tank.util.Multiselectable; import com.intuit.tank.view.filter.ViewFilterType; import com.intuit.tank.vm.settings.AccessRight; import com.intuit.tank.wrapper.SelectableBean; import com.intuit.tank.wrapper.SelectableWrapper; @Named @ViewScoped public class FilterBean extends SelectableBean<ScriptFilter> implements Serializable, Multiselectable<ScriptFilter> { private static final long serialVersionUID = 1L; private SelectableWrapper<ScriptFilter> selectedFilter; @Inject private ExceptionHandler exceptionHandler; @Inject private Security security; @Inject private Messages messages; /** * @{inheritDoc */ @Override public boolean isCurrent() { return true; } /** * @{inheritDoc */ @Override public void delete(ScriptFilter entity) { if (!security.hasRight(AccessRight.DELETE_FILTER) && !security.isOwner(entity)) { messages.warn("You don't have permission to delete this filter."); } else { try { ScriptFilterGroupDao groupDao = new ScriptFilterGroupDao(); List<ScriptFilterGroup> groups = groupDao.getScriptFilterGroupForFilter(entity.getId()); for (ScriptFilterGroup group : groups) { if (group.getFilters().remove(entity)) { groupDao.saveOrUpdate(group); } } new ScriptFilterDao().delete(entity); refresh(); } catch (Exception e) { exceptionHandler.handle(e); } } } public void deleteSelectedFilter() { if (selectedFilter != null) { delete(selectedFilter.getEntity()); } } /** * @return the selectedFilter */ public SelectableWrapper<ScriptFilter> getSelectedFilter() { return selectedFilter; } /** * @param selectedFilter * the selectedFilter to set */ public void setSelectedFilter(SelectableWrapper<ScriptFilter> selectedFilter) { this.selectedFilter = selectedFilter; } /** * @{inheritDoc */ @Override public List<ScriptFilter> getEntityList(ViewFilterType viewFilter) { List<ScriptFilter> all = new ScriptFilterDao().findFiltered(ViewFilterType.ALL); Collections.sort(all); return all; } public void processSelection(SelectableWrapper<ScriptFilterGroup> w) { Map<Integer, SelectableWrapper<ScriptFilter>> map = getListMap(getSelectionList()); boolean selected = w.isSelected(); for (ScriptFilter sf : w.getEntity().getFilters()) { SelectableWrapper<ScriptFilter> wrapper = map.get(sf.getId()); if (wrapper != null) { wrapper.setSelected(selected); } } } /** * @param list * @return */ private Map<Integer, SelectableWrapper<ScriptFilter>> getListMap(List<SelectableWrapper<ScriptFilter>> list) { Map<Integer, SelectableWrapper<ScriptFilter>> ret = new HashMap<Integer, SelectableWrapper<ScriptFilter>>(); for (SelectableWrapper<ScriptFilter> f : list) { ret.put(f.getEntity().getId(), f); } return ret; } /** * @return the list of integers representing the IDs of each selected filter */ public List<Integer> getSelectedFilterIds() { List<Integer> retVals = new ArrayList<Integer>(); for (SelectableWrapper<ScriptFilter> wrapper : this.getSelectionList()) { if (wrapper.isSelected()) { retVals.add(wrapper.getEntity().getId()); } } return retVals; } }