/* * 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.rest; import com.eviware.soapui.SoapUI; import com.eviware.soapui.config.RestResourceRepresentationConfig; import com.eviware.soapui.config.RestResourceRepresentationTypeConfig; import com.eviware.soapui.impl.rest.panels.request.inspectors.schema.InferredSchemaManager; import com.eviware.soapui.impl.rest.support.RestParamsPropertyHolder; import com.eviware.soapui.impl.rest.support.XmlBeansRestParamsTestPropertyHolder; import com.eviware.soapui.impl.wadl.WadlDefinitionContext; import com.eviware.soapui.impl.wsdl.support.xsd.SampleXmlUtil; import com.eviware.soapui.model.iface.Request; import com.eviware.soapui.support.PropertyChangeNotifier; import org.apache.xmlbeans.SchemaGlobalElement; import org.apache.xmlbeans.SchemaType; import javax.xml.namespace.QName; import java.beans.PropertyChangeEvent; import java.beans.PropertyChangeListener; import java.beans.PropertyChangeSupport; import java.util.ArrayList; import java.util.List; public class RestRepresentation implements PropertyChangeNotifier, PropertyChangeListener { // private final RestRequest restRequest; private final RestMethod restMethod; private RestResourceRepresentationConfig config; private RestParamsPropertyHolder params; private PropertyChangeSupport propertyChangeSupport; private SchemaType schemaType; public enum Type { REQUEST, RESPONSE, FAULT } /* * //TODO: Remove this? public RestRepresentation( RestRequest restResource, * RestResourceRepresentationConfig config ) { this.restMethod = null; * this.restRequest = restResource; this.config = config; * * if( config.getParams() == null ) config.addNewParams(); * * params = new XmlBeansRestParamsTestPropertyHolder( restResource, * config.getParams() ); propertyChangeSupport = new PropertyChangeSupport( * this ); * * if(this.restRequest.getResource() != null && * this.restRequest.getResource().getService() != null) * InferredSchemaManager. * addPropertyChangeListener(this.restRequest.getResource().getService(), * this); } */ public RestRepresentation(RestMethod restMethod, RestResourceRepresentationConfig config) { this.restMethod = restMethod; this.config = config; if (config.getParams() == null) { config.addNewParams(); } params = new XmlBeansRestParamsTestPropertyHolder(restMethod, config.getParams()); propertyChangeSupport = new PropertyChangeSupport(this); InferredSchemaManager.addPropertyChangeListener(this.restMethod.getResource().getService(), this); } public RestMethod getRestMethod() { return restMethod; } public RestResourceRepresentationConfig getConfig() { return config; } public RestParamsPropertyHolder getParams() { return params; } public void setConfig(RestResourceRepresentationConfig config) { this.config = config; } public String getId() { return config.getId(); } public Type getType() { if (!config.isSetType()) { return null; } return Type.valueOf(config.getType().toString()); } public String getMediaType() { return config.getMediaType(); } public void setId(String arg0) { String old = getId(); config.setId(arg0); propertyChangeSupport.firePropertyChange("id", old, arg0); } public void setType(Type type) { Type old = getType(); config.setType(RestResourceRepresentationTypeConfig.Enum.forString(type.toString())); propertyChangeSupport.firePropertyChange("type", old, type); } public void setMediaType(String arg0) { String old = getMediaType(); config.setMediaType(arg0); propertyChangeSupport.firePropertyChange(Request.MEDIA_TYPE, old, arg0); } public void setElement(QName name) { QName old = getElement(); config.setElement(name); schemaType = null; propertyChangeSupport.firePropertyChange("element", old, name); } public List<?> getStatus() { return config.getStatus() == null ? new ArrayList<Object>() : config.getStatus(); } public void setStatus(List<?> arg0) { List<?> old = getStatus(); config.setStatus(arg0); propertyChangeSupport.firePropertyChange("status", old, arg0); } public SchemaType getSchemaType() { if (schemaType == null) { try { if (getElement() != null) { WadlDefinitionContext context = getRestMethod().getResource().getService().getWadlContext(); if (context.hasSchemaTypes()) { schemaType = context.getSchemaTypeSystem().findDocumentType(getElement()); if (schemaType == null) { SchemaGlobalElement element = context.getSchemaTypeSystem().findElement(getElement()); if (element != null) { schemaType = element.getType(); } } } } } catch (Exception e) { SoapUI.logError(e); } } return schemaType; } public void release() { InferredSchemaManager.removePropertyChangeListener(getRestMethod().getResource().getService(), this); } public void setDescription(String description) { String old = getDescription(); config.setDescription(description); propertyChangeSupport.firePropertyChange("description", old, description); } public String getDescription() { return config.getDescription(); } public QName getElement() { return config.getElement(); } public void addPropertyChangeListener(PropertyChangeListener listener) { propertyChangeSupport.addPropertyChangeListener(listener); } public void addPropertyChangeListener(String propertyName, PropertyChangeListener listener) { propertyChangeSupport.addPropertyChangeListener(propertyName, listener); } public void removePropertyChangeListener(PropertyChangeListener listener) { propertyChangeSupport.removePropertyChangeListener(listener); } public void removePropertyChangeListener(String propertyName, PropertyChangeListener listener) { propertyChangeSupport.removePropertyChangeListener(propertyName, listener); } public String getDefaultContent() { if (getSchemaType() != null) { // Document document = XmlUtils.createDocument( getElement() ); SampleXmlUtil generator = new SampleXmlUtil(false); generator.setIgnoreOptional(false); return generator.createSample(getSchemaType()); // return XmlUtils.serialize( document ); } else { return ""; } } public void propertyChange(PropertyChangeEvent evt) { schemaType = null; } }