/*
* 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.monitor;
import org.apache.commons.lang.StringUtils;
import javax.mail.internet.ContentType;
import javax.mail.internet.ParseException;
import java.util.ArrayList;
import java.util.List;
/**
* @author joel.jonsson
*/
public class ContentTypes {
private List<ContentType> contentTypes;
private ContentTypes(List<ContentType> contentTypes) {
this.contentTypes = contentTypes;
}
public static ContentTypes of(String contentTypes) {
List<ContentType> contentTypeList = new ArrayList<ContentType>();
for (String ct : contentTypes.split(",")) {
try {
contentTypeList.add(new ContentType(ct.trim()));
} catch (ParseException ignore) {
}
}
return new ContentTypes(contentTypeList);
}
public boolean matches(String value) {
for (ContentType contentType : contentTypes) {
try {
ContentType respondedContentType = new ContentType(value);
if (contentTypeMatches(contentType, respondedContentType)) {
return true;
}
} catch (ParseException ignore) {
}
}
return false;
}
@Override
public String toString() {
return StringUtils.join(contentTypes, ", ");
}
private boolean contentTypeMatches(ContentType contentType, ContentType respondedContentType) {
// ContentType doesn't take wildcards into account for the primary type, but we want to do that
return contentType.match(respondedContentType) ||
((contentType.getPrimaryType().charAt(0) == '*'
|| respondedContentType.getPrimaryType().charAt(0) == '*')
&& (contentType.getSubType().charAt(0) == '*'
|| respondedContentType.getSubType().charAt(0) == '*'
|| contentType.getSubType().equalsIgnoreCase(respondedContentType.getSubType())));
}
}