/* * SoapUI, Copyright (C) 2004-2016 SmartBear Software * * Licensed under the EUPL, Version 1.1 or - as soon as they will be approved by the European Commission - subsequent * versions of the EUPL (the "Licence"); * You may not use this work except in compliance with the Licence. * You may obtain a copy of the Licence at: * * http://ec.europa.eu/idabc/eupl * * Unless required by applicable law or agreed to in writing, software distributed under the Licence is * distributed on an "AS IS" basis, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either * express or implied. See the Licence for the specific language governing permissions and limitations * under the Licence. */ package com.eviware.soapui.security.support; import com.eviware.soapui.config.CheckedParameterConfig; import com.eviware.soapui.config.CheckedParametersListConfig; import com.eviware.soapui.model.security.SecurityCheckedParameter; import com.eviware.soapui.model.security.SecurityScan; import com.eviware.soapui.model.security.SecurityScanParameterHolderListener; import com.eviware.soapui.model.testsuite.TestPropertyListener; import java.util.ArrayList; import java.util.HashMap; import java.util.HashSet; import java.util.List; import java.util.Map; import java.util.Set; /** * Holder for SecurityScanPameters, which are request parameters on which * security scan is applied. * * @author robert */ public class SecurityCheckedParameterHolder extends SecurityScanParameterListenerAdapter implements TestPropertyListener { private SecurityScan securityCheck; private CheckedParametersListConfig paramsConfig; private List<SecurityCheckedParameter> params = new ArrayList<SecurityCheckedParameter>(); private Map<String, SecurityCheckedParameter> paramsMap = new HashMap<String, SecurityCheckedParameter>(); private Set<SecurityScanParameterHolderListener> listeners = new HashSet<SecurityScanParameterHolderListener>(); public SecurityCheckedParameterHolder(SecurityScan securityCheck, CheckedParametersListConfig checkedPameters) { this.securityCheck = securityCheck; this.paramsConfig = checkedPameters; for (CheckedParameterConfig param : paramsConfig.getParametersList()) { addParameter(param); } securityCheck.getTestStep().addTestPropertyListener(this); } public void addParameterListener(SecurityScanParameterHolderListener listener) { listeners.add(listener); } public void removeParameterListener(SecurityScanParameterHolderListener listener) { listeners.remove(listener); } public void updateConfig(CheckedParametersListConfig config) { paramsConfig = config; List<CheckedParameterConfig> paramsList = config.getParametersList(); for (int c = 0; c < paramsList.size(); c++) { if (params.get(c) instanceof SecurityCheckedParameterImpl) { ((SecurityCheckedParameterImpl) params.get(c)).setConfig(paramsList.get(c)); } } } SecurityCheckedParameter addParameter(CheckedParameterConfig param) { SecurityCheckedParameter result = new SecurityCheckedParameterImpl(param); params.add(result); paramsMap.put(result.getLabel().toUpperCase(), result); fireParameterAdded(result); return result; } public boolean addParameter(String label, String name, String xpath, boolean used) { if (paramsMap.get(label.toUpperCase()) != null) { return false; } CheckedParameterConfig newParameterConfig = paramsConfig.addNewParameters(); SecurityCheckedParameterImpl newParameter = new SecurityCheckedParameterImpl(newParameterConfig); newParameter.setLabel(label); newParameter.setName(name); newParameter.setXpath(xpath); newParameter.setChecked(used); params.add(newParameter); paramsMap.put(newParameter.getLabel().toUpperCase(), newParameter); fireParameterAdded(newParameter); return true; } public void removeParameter(SecurityCheckedParameter parameter) { int index = params.indexOf(parameter); params.remove(parameter); paramsMap.remove(parameter.getLabel().toUpperCase()); paramsConfig.removeParameters(index); fireParameterRemoved(parameter); } public void fireParameterAdded(SecurityCheckedParameter parameter) { for (SecurityScanParameterHolderListener listener : listeners) { listener.parameterAdded(parameter); } } public void fireParameterRemoved(SecurityCheckedParameter parameter) { for (SecurityScanParameterHolderListener listener : listeners) { listener.parameterRemoved(parameter); } } public List<SecurityCheckedParameter> getParameterList() { return params; } public String[] getParameterLabels() { String[] labels = new String[params.size()]; for (int c = 0; c < labels.length; c++) { labels[c] = params.get(c).getLabel(); } return labels; } /* * Need to keep track on parameter label change. * * (non-Javadoc) * * @see * com.eviware.soapui.security.support.SecurityScanParameterListenerAdapter * #parameterLabelChanged * (com.eviware.soapui.model.security.SecurityCheckedParameter, * java.lang.String, java.lang.String) */ @Override public void parameterLabelChanged(SecurityCheckedParameter parameter, String oldLabel, String newLabel) { SecurityCheckedParameter param = paramsMap.get(oldLabel); paramsMap.remove(oldLabel); paramsMap.put(newLabel, param); } /** * This method returns parameter based on its label. * * @param paramLabel * @return parameter */ public SecurityCheckedParameter getParametarByLabel(String paramLabel) { for (SecurityCheckedParameter param : params) { if (param.getLabel().equals(paramLabel)) { return param; } } return null; } /** * This method returns parameter based on its name. * * @param paramName * @return parameter */ public List<SecurityCheckedParameter> getParametarsByName(String paramName) { List<SecurityCheckedParameter> paramsList = new ArrayList<SecurityCheckedParameter>(); for (SecurityCheckedParameter param : params) { if (param.getName().equals(paramName)) { paramsList.add(param); } } return paramsList; } public void removeParameters(int[] selected) { ArrayList<SecurityCheckedParameter> paramsToRemove = new ArrayList<SecurityCheckedParameter>(); for (int index : selected) { paramsToRemove.add(params.get(index)); } for (SecurityCheckedParameter param : paramsToRemove) { removeParameter(param); } } @Override public void propertyAdded(String name) { // TODO Auto-generated method stub // we do not care for this } @Override public void propertyMoved(String name, int oldIndex, int newIndex) { // TODO Auto-generated method stub // we do not care about this, we keep order by label } @Override public void propertyRemoved(String name) { ArrayList<SecurityCheckedParameter> parameterToRemove = new ArrayList<SecurityCheckedParameter>(); for (SecurityCheckedParameter param : params) { if (param.getName().equals(name)) { parameterToRemove.add(param); } } for (SecurityCheckedParameter param : parameterToRemove) { removeParameter(param); } } @Override public void propertyRenamed(String oldName, String newName) { ArrayList<SecurityCheckedParameter> parameterToRemove = new ArrayList<SecurityCheckedParameter>(); for (SecurityCheckedParameter param : params) { if (param.getName().equals(oldName)) { parameterToRemove.add(param); } } for (SecurityCheckedParameter param : parameterToRemove) { ((SecurityCheckedParameterImpl) param).setName(newName); } } @Override public void propertyValueChanged(String name, String oldValue, String newValue) { // TODO Auto-generated method stub // we do not cate for this } public void release() { securityCheck.getTestStep().removeTestPropertyListener(this); } }