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.HashMap; import java.util.List; import java.util.Set; import javax.enterprise.context.Conversation; import javax.enterprise.context.ConversationScoped; import javax.inject.Inject; import javax.inject.Named; import org.apache.commons.lang3.StringUtils; import com.intuit.tank.util.Messages; import org.picketlink.Identity; import org.picketlink.idm.IdentityManager; import org.picketlink.idm.model.basic.User; import com.intuit.tank.auth.Security; import com.intuit.tank.config.TsLoggedIn; 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.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 @ConversationScoped public class FilterGroupCreationBean extends SelectableBean<ScriptFilter> implements Serializable, Multiselectable<ScriptFilter> { private static final long serialVersionUID = 1L; private ScriptFilterGroup sfg; @Inject private Messages messages; @Inject private Conversation conversation; @Inject private Identity identity; @Inject private IdentityManager identityManager; @Inject private Security security; private String saveAsName; private boolean editing; /** * @return the isEditing */ public boolean isEditing() { return editing; } /** * @return the saveAsName */ public String getName() { return getSfg().getName(); } /** * @param saveAsName * the saveAsName to set */ public void setName(String name) { getSfg().setName(name); } /** * @return the saveAsName */ public String getSaveAsName() { return saveAsName; } /** * @param saveAsName * the saveAsName to set */ public void setSaveAsName(String saveAsName) { this.saveAsName = saveAsName; } public void editFilterGroup(ScriptFilterGroup filterGroup) { conversation.begin(); editing = true; this.sfg = new ScriptFilterGroupDao().findById(filterGroup.getId()); this.saveAsName = sfg.getName(); HashMap<Integer, SelectableWrapper<ScriptFilter>> map = new HashMap<Integer, SelectableWrapper<ScriptFilter>>(); for (SelectableWrapper<ScriptFilter> filterWrapper : getSelectionList()) { map.put(filterWrapper.getEntity().getId(), filterWrapper); } Set<ScriptFilter> filters = sfg.getFilters(); for (ScriptFilter filter : filters) { map.get(filter.getId()).setSelected(true); } if (!canEditFilterGroup()) { messages.warn("You do not have permission to edit this filter group."); } } public void newFilterGroup() { conversation.begin(); editing = false; this.sfg = new ScriptFilterGroup(); sfg.setCreator(identityManager.lookupById(User.class, identity.getAccount().getId()).getLoginName()); } public void cancel() { conversation.end(); } public ScriptFilterGroup getSfg() { if (sfg == null) { sfg = new ScriptFilterGroup(); } return sfg; } public void setSfg(ScriptFilterGroup sfg) { this.sfg = sfg; } @TsLoggedIn public void save() { sfg.getFilters().clear(); for (SelectableWrapper<ScriptFilter> envelope : getSelectionList()) { if (envelope.isSelected()) { sfg.getFilters().add(envelope.getEntity()); } } new ScriptFilterGroupDao().saveOrUpdate(sfg); messages.info(sfg.getName() + " has been saved."); } @TsLoggedIn public void saveAs() { if (StringUtils.isEmpty(saveAsName)) { messages.error("You must give the Filter Group a name."); return; } try { String originalName = sfg.getName(); if (originalName.equals(saveAsName)) { save(); } else { ScriptFilterGroup copied = new ScriptFilterGroup(); copied.setCreator(identityManager.lookupById(User.class, identity.getAccount().getId()).getLoginName()); copied.setName(saveAsName); copied.setProductName(sfg.getProductName()); copied = new ScriptFilterGroupDao().saveOrUpdate(copied); for (SelectableWrapper<ScriptFilter> envelope : getSelectionList()) { if (envelope.isSelected()) { copied.addFilter(envelope.getEntity()); } } copied = new ScriptFilterGroupDao().saveOrUpdate(copied); messages.info("Filter Group " + originalName + " has been saved as " + copied.getName() + "."); editFilterGroup(copied); } } catch (Exception e) { messages.error(e.getMessage()); } } @Override public List<ScriptFilter> getEntityList(ViewFilterType viewFilter) { return new ScriptFilterDao().findAll(); } @Override public void delete(ScriptFilter entity) { } @Override public boolean isCurrent() { return true; } public boolean canCreateFilterGroup() { return security.hasRight(AccessRight.CREATE_FILTER); } public boolean canEditFilterGroup() { return security.hasRight(AccessRight.EDIT_FILTER) || security.isOwner(sfg); } }