// Copyright 2012 Georg-August-Universität Göttingen, Germany // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // http://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. package de.ugoe.cs.autoquest.plugin.http.eventcore; import java.io.Serializable; import java.util.Collections; import java.util.HashMap; import java.util.Map; import java.util.Random; import java.util.Set; import org.apache.commons.collections4.set.ListOrderedSet; /** *

* Handles all request bodies of equal SOAP events. Can be used to view either all request bodies sent to an operation or to randomly draw one of the bodies. *

* * @author Steffen Herbold */ public class EqualSOAPDataMap implements Serializable { /** */ private static final long serialVersionUID = 1L; /** * Map with all soapRequestBodies for all equal {@link SimpleSOAPEventType}s */ private Map> soapRequestBodies = new HashMap<>(); /** * random number generator for picking a random request body */ private final Random random = new Random(); /** *

* Default constructor. *

*/ public EqualSOAPDataMap() { } /** *

* Adds a new body to the map. *

* * @param simpleSOAPEventType */ public void add(SimpleSOAPEventType simpleSOAPEventType, String soapRequestBody) { if( soapRequestBody!=null ) { ListOrderedSet requestBodySet = soapRequestBodies.get(simpleSOAPEventType); if( requestBodySet==null ) { requestBodySet = new ListOrderedSet<>(); soapRequestBodies.put(simpleSOAPEventType, requestBodySet); } requestBodySet.add(soapRequestBody); } } /** *

* Retrieves all bodies associated with the simpleSoapEventType; null if not found *

* * @param simpleSoapEventType * @return */ public Set getAll(SimpleSOAPEventType simpleSoapEventType) { return Collections.unmodifiableSet(soapRequestBodies.get(simpleSoapEventType)); } /** *

* Randomly draws one of the SOAP event type bodies associated with the event *

* * @param simpleSOAPEventType * @return */ public String getRandom(SimpleSOAPEventType simpleSOAPEventType) { ListOrderedSet requestBodySet = soapRequestBodies.get(simpleSOAPEventType); if( requestBodySet==null || requestBodySet.isEmpty() ) { throw new RuntimeException("no request body known for SimpleSOAPEventType: " + simpleSOAPEventType); } return requestBodySet.get(random.nextInt(requestBodySet.size())); } /** *

* resets the internal map by creating new one *

* */ public void reset() { soapRequestBodies = new HashMap<>(); } /** *

* returns is the current data map is empty *

* * @return true if empty; false otherwise */ public boolean isEmpty() { return soapRequestBodies.isEmpty(); } }