All Downloads are FREE. Search and download functionalities are using the official Maven repository.

org.itest.impl.ITestParamMergerImpl Maven / Gradle / Ivy

The newest version!
/**
 * 
 * The MIT License (MIT)
 * 
 * Copyright (c) 2014 Grzegorz Kochański
 * 
 * Permission is hereby granted, free of charge, to any person obtaining a copy
 * of this software and associated documentation files (the "Software"), to deal
 * in the Software without restriction, including without limitation the rights
 * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
 * copies of the Software, and to permit persons to whom the Software is
 * furnished to do so, subject to the following conditions:
 * 
 * The above copyright notice and this permission notice shall be included in all
 * copies or substantial portions of the Software.
 * 
 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
 * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
 * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
 * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
 * SOFTWARE.
 * 
*/ package org.itest.impl; import org.itest.ITestConstants; import org.itest.json.simple.ITestSimpleJsonState; import org.itest.param.ITestParamAssignment; import org.itest.param.ITestParamMerger; import org.itest.param.ITestParamState; import java.util.ArrayList; import java.util.Collection; import java.util.LinkedHashSet; import java.util.StringTokenizer; public class ITestParamMergerImpl implements ITestParamMerger { @Override public ITestParamState merge(ITestParamAssignment... itestParamAssignments) { Collection unifiedStates = unifyStates(itestParamAssignments); ITestParamState mergedState = mergeUnified(unifiedStates); return mergedState; } private Collection unifyStates(ITestParamAssignment... iTestParamAssignments) { Collection unifiedStates = new ArrayList(); for (ITestParamAssignment iTestParamAssignment : iTestParamAssignments) { ITestParamState itestParam = iTestParamAssignment.getITestParamState(); for (String transformation : iTestParamAssignment.getTransformation()) { //ITestParamStateImpl state = new ITestParamStateImpl(); ITestParamState state = getState(transformation, itestParam); unifiedStates.add(state); } } return unifiedStates; } private ITestParamState mergeUnified(Collection unifiedStates) { if ( 1 == unifiedStates.size() ) { return unifiedStates.iterator().next(); } Collection collectedElements = collectAllNames(unifiedStates); ITestParamStateImpl mergedState = new ITestParamStateImpl(); for (String element : collectedElements) { merge(element, mergedState, unifiedStates); } return mergedState; } private void merge(String name, ITestParamStateImpl parentState, Collection unifiedStates) { ITestParamStateImpl currentState = null; Collection unifiedElements = new ArrayList(unifiedStates.size()); for (ITestParamState itestState : unifiedStates) { unifiedElements.add(null == itestState ? null : itestState.getElement(name)); } Iterable allNamesIterable = collectAllNames(unifiedElements); if ( null != allNamesIterable ) { currentState = new ITestParamStateImpl(); currentState.elements = ITestSimpleJsonState.createElements(); copyAttributes(currentState, unifiedElements); parentState.addElement(name, currentState); for (String elementName : allNamesIterable) { merge(elementName, currentState, unifiedElements); } } else { for (ITestParamState itestState : unifiedElements) { if ( null != itestState ) { if ( null == currentState ) { currentState = new ITestParamStateImpl(); parentState.addElement(name, currentState); copyAttributes(currentState, unifiedElements); } if(null==itestState.getNames()) { currentState.value = itestState.getValue(); } } } } } private void copyAttributes(ITestParamStateImpl currentState, Collection unifiedElements) { for (ITestParamState unified : unifiedElements) { if ( null == unified ) { continue; } Iterable attributeNames = unified.getAttributeNames(); if ( null != attributeNames ) { for (String attributeName : attributeNames) { currentState.addAttribute(attributeName, unified.getAttribute(attributeName)); } } } } private Collection collectAllNames(Collection unifiedElements) { Collection res = null; for (ITestParamState state : unifiedElements) { if ( null != state ) { Collection names = state.getNames(); if ( names != null ) { if ( null == res ) { res = new LinkedHashSet(); } res.addAll(names); } } } return res; } private ITestParamState getState(String transformation, ITestParamState itestParam) { if ( 0 == transformation.length() ) { return itestParam; } String s = transformation.replaceAll(ITestConstants.ASSIGN, ITestConstants.ASSIGN_SEPARATOR + ITestConstants.ASSIGN + ITestConstants.ASSIGN_SEPARATOR); StringTokenizer t = new StringTokenizer(s, ITestConstants.ASSIGN_SEPARATOR); ITestParamStateImpl res = new ITestParamStateImpl(); ITestParamStateImpl prevState = null; String token; String prevToken = null; while (!ITestConstants.ASSIGN.equals(token = t.nextToken())) { ITestParamStateImpl p = new ITestParamStateImpl(); if (prevState != null) { prevState.addElement(prevToken, p); } else { p = res; } prevState = p; prevToken = token; } while (t.hasMoreElements()) { itestParam = itestParam.getElement(t.nextToken()); } prevState.addElement(prevToken, itestParam); return res; } }




© 2015 - 2024 Weber Informatics LLC | Privacy Policy