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.List; 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.ExternalScriptDao; import com.intuit.tank.dao.ScriptFilterDao; import com.intuit.tank.project.ExternalScript; import com.intuit.tank.project.ScriptFilter; import com.intuit.tank.project.ScriptFilterAction; import com.intuit.tank.project.ScriptFilterCondition; import com.intuit.tank.util.ExceptionHandler; import com.intuit.tank.util.ScriptFilterType; import com.intuit.tank.util.TsConversationManager; import com.intuit.tank.vm.settings.AccessRight; @Named @ConversationScoped public class ScriptFilterCreationBean implements Serializable { private static final long serialVersionUID = 1L; private ScriptFilter filter; private String name; private String productName; private ScriptFilterType creationMode = ScriptFilterType.INTERNAL; private Integer selectedExternalScript; private List<ExternalScript> externalScripts; @Inject private ExceptionHandler exceptionHandler; @Inject private Identity identity; @Inject private IdentityManager identityManager; @Inject private Security security; @Inject private Messages messages; @Inject private Conversation conversation; private boolean conditionProcessed = false; private boolean allConditionsPass; private String saveAsName; private boolean editing; public ScriptFilterType[] getScriptFilterTypeList() { return ScriptFilterType.values(); } /** * @return the isEditing */ public boolean isEditing() { return editing; } /** * @return the saveAsName */ public String getSaveAsName() { return saveAsName; } /** * @param saveAsName * the saveAsName to set */ public void setSaveAsName(String saveAsName) { this.saveAsName = saveAsName; } public boolean isConditionProcessed() { return conditionProcessed; } public void setConditionProcessed(boolean isConditionProcessed) { this.conditionProcessed = isConditionProcessed; } public ScriptFilter getFilter() { return filter; } public void setFilter(ScriptFilter filter) { this.filter = filter; } public void editFilter(ScriptFilter filter) { conversation.begin(); this.editing = true; this.filter = filter; this.setName(filter.getName()); this.setSelectedExternalScript(filter.getExternalScriptId()); this.setCreationMode(filter.getFilterType()); this.productName = filter.getProductName(); if (!canEditFilter()) { messages.warn("You do not have permission to edit this filter."); } } public void newFilter() { conversation.begin(); this.editing = false; this.filter = new ScriptFilter(); filter.setCreator(identityManager.lookupById(User.class, identity.getAccount().getId()).getLoginName()); } public void removeCondition(ScriptFilterCondition condition) { getFilter().getConditions().remove(condition); } public void removeAction(ScriptFilterAction action) { getFilter().getActions().remove(action); } @TsLoggedIn public String save() { ScriptFilterDao sfDao = new ScriptFilterDao(); if (creationMode == ScriptFilterType.INTERNAL) { validate(); if (messages.isEmpty()) { try { filter.setProductName(productName); filter.setName(name); filter.setFilterType(creationMode); sfDao.saveOrUpdate(filter); conversation.end(); return "success"; } catch (Exception e) { exceptionHandler.handle(e); } } } else { if (messages.isEmpty()) { try { filter.setProductName(productName); filter.setName(name); filter.setExternalScriptId(selectedExternalScript); filter.setFilterType(creationMode); sfDao.saveOrUpdate(filter); conversation.end(); return "success"; } catch (Exception e) { exceptionHandler.handle(e); } } } return "fail"; } @TsLoggedIn public void saveAs() { if (StringUtils.isEmpty(saveAsName)) { messages.error("You must give the Filter a name."); return; } try { String originalName = name; if (originalName.equals(saveAsName)) { save(); } else { ScriptFilter copied = new ScriptFilter(); copied.setCreator(identityManager.lookupById(User.class, identity.getAccount().getId()).getLoginName()); copied.setName(saveAsName); copied.setProductName(productName); copied.setAllConditionsMustPass(allConditionsPass); copied.setPersist(filter.getPersist()); copied.setFilterType(filter.getFilterType()); copied.setExternalScriptId(filter.getExternalScriptId()); for (ScriptFilterAction action : filter.getActions()) { ScriptFilterAction ca = new ScriptFilterAction(); ca.setAction(action.getAction()); ca.setKey(action.getKey()); ca.setValue(action.getValue()); ca.setScope(action.getScope()); copied.addAction(ca); } for (ScriptFilterCondition condition : filter.getConditions()) { ScriptFilterCondition cc = new ScriptFilterCondition(); cc.setCondition(condition.getCondition()); cc.setValue(condition.getValue()); cc.setScope(condition.getScope()); copied.addCondition(cc); } copied = new ScriptFilterDao().saveOrUpdate(copied); messages.info("Filter " + originalName + " has been saved as " + copied.getName() + "."); editFilter(copied); } } catch (Exception e) { messages.error(e.getMessage()); } } public void cancel() { conversation.end(); } private void validate() { } public String getName() { return name; } public void setName(String name) { this.name = name; } public String getProductName() { return productName; } public void setProductName(String productName) { this.productName = productName; } public ScriptFilterType getCreationMode() { return creationMode; } public void setCreationMode(ScriptFilterType creationMode) { this.creationMode = creationMode; } public Integer getSelectedExternalScript() { return selectedExternalScript; } public void setSelectedExternalScript(Integer selectedExternalScript) { this.selectedExternalScript = selectedExternalScript; } public List<ExternalScript> getExternalScripts() { ExternalScriptDao externalScriptDao = new ExternalScriptDao(); externalScripts = externalScriptDao.findAll(); return externalScripts; } public void setExternalScripts(List<ExternalScript> externalScripts) { this.externalScripts = externalScripts; } public List<ScriptFilterCondition> getConditions() { List<ScriptFilterCondition> conditions = new ArrayList<ScriptFilterCondition>(); conditions.addAll(filter.getConditions()); return conditions; } public List<ScriptFilterAction> getActions() { List<ScriptFilterAction> actions = new ArrayList<ScriptFilterAction>(); actions.addAll(filter.getActions()); return actions; } /** * @return the allConditionsPass */ public boolean isAllConditionsPass() { allConditionsPass = filter.getAllConditionsMustPass(); return allConditionsPass; } /** * @param allConditionsPass * the allConditionsPass to set */ public void setAllConditionsPass(boolean allConditionsPass) { this.allConditionsPass = allConditionsPass; filter.setAllConditionsMustPass(allConditionsPass); } public boolean canCreateFilter() { return security.hasRight(AccessRight.CREATE_FILTER); } public boolean canEditFilter() { return security.hasRight(AccessRight.EDIT_FILTER) || security.isOwner(filter); } }