/*
* 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.impl.wsdl;
import com.eviware.soapui.SoapUI;
import com.eviware.soapui.config.ModelItemConfig;
import com.eviware.soapui.config.PropertiesTypeConfig;
import com.eviware.soapui.impl.wsdl.support.XmlBeansPropertiesTestPropertyHolder;
import com.eviware.soapui.model.ModelItem;
import com.eviware.soapui.model.propertyexpansion.PropertyExpansionUtils;
import com.eviware.soapui.model.testsuite.TestProperty;
import com.eviware.soapui.model.testsuite.TestPropertyListener;
import com.eviware.soapui.support.StringUtils;
import org.apache.log4j.Logger;
import java.util.List;
import java.util.Map;
public abstract class AbstractTestPropertyHolderWsdlModelItem<T extends ModelItemConfig> extends
AbstractWsdlModelItem<T> implements MutableTestPropertyHolder {
private XmlBeansPropertiesTestPropertyHolder propertyHolderSupport;
private final static Logger log = Logger.getLogger(AbstractTestPropertyHolderWsdlModelItem.class);
protected AbstractTestPropertyHolderWsdlModelItem(T config, ModelItem parent, String icon) {
super(config, parent, icon);
}
protected void setPropertiesConfig(PropertiesTypeConfig config) {
if (propertyHolderSupport == null) {
propertyHolderSupport = new XmlBeansPropertiesTestPropertyHolder(this, config);
} else {
propertyHolderSupport.resetPropertiesConfig(config);
}
String propertyName = createPropertyName(getName());
if (StringUtils.hasContent(propertyName)) {
String propFileName = "soapui.properties." + propertyName;
String propFile = System.getProperty(propFileName);
if (!StringUtils.hasContent(propFile)) {
propFile = SoapUI.getGlobalProperties().getPropertyValue(propFileName);
}
if (StringUtils.hasContent(propFile)) {
int result = propertyHolderSupport.addPropertiesFromFile(propFile);
if (result > 0) {
log.info("Overriding " + result + " properties from [" + propFile + "] in [" + getName() + "]");
}
}
}
}
protected XmlBeansPropertiesTestPropertyHolder getPropertyHolderSupport() {
return propertyHolderSupport;
}
private String createPropertyName(String str) {
if (str == null) {
return null;
}
StringBuffer result = new StringBuffer();
for (char ch : str.toCharArray()) {
if (Character.isLetterOrDigit(ch)) {
result.append(ch);
}
}
return result.toString();
}
public int addPropertiesFromFile(String propFile) {
return propertyHolderSupport.addPropertiesFromFile(propFile);
}
public TestProperty addProperty(String name) {
return propertyHolderSupport.addProperty(name);
}
public void addTestPropertyListener(TestPropertyListener listener) {
propertyHolderSupport.addTestPropertyListener(listener);
}
public TestProperty getProperty(String name) {
return propertyHolderSupport == null ? null : propertyHolderSupport.getProperty(name);
}
public String[] getPropertyNames() {
return propertyHolderSupport.getPropertyNames();
}
public List<TestProperty> getPropertyList() {
return propertyHolderSupport.getPropertyList();
}
public String getPropertyValue(String name) {
return propertyHolderSupport == null ? null : propertyHolderSupport.getPropertyValue(name);
}
public TestProperty removeProperty(String propertyName) {
return propertyHolderSupport.removeProperty(propertyName);
}
public void removeTestPropertyListener(TestPropertyListener listener) {
propertyHolderSupport.removeTestPropertyListener(listener);
}
public void setPropertyValue(String name, String value) {
propertyHolderSupport.setPropertyValue(name, value);
}
public boolean renameProperty(String name, String newName) {
return PropertyExpansionUtils.renameProperty(propertyHolderSupport.getProperty(name), newName, this) != null;
}
public Map<String, TestProperty> getProperties() {
return propertyHolderSupport.getProperties();
}
public boolean hasProperty(String name) {
return propertyHolderSupport.hasProperty(name);
}
public TestProperty getPropertyAt(int index) {
return propertyHolderSupport.getPropertyAt(index);
}
public int getPropertyCount() {
return propertyHolderSupport.getPropertyCount();
}
public void moveProperty(String propertyName, int targetIndex) {
propertyHolderSupport.moveProperty(propertyName, targetIndex);
}
public ModelItem getModelItem() {
return this;
}
public String getPropertiesLabel() {
return "Custom Properties";
}
}