/**
 * Copyright (c) 2011, 2015 - Lunifera GmbH (Gross Enzersdorf), Loetz GmbH&Co.KG (Heidelberg)
 * All rights reserved. This program and the accompanying materials
 * are made available under the terms of the Eclipse Public License 2.0 
 * which accompanies this distribution, and is available at
 * https://www.eclipse.org/legal/epl-2.0/
 *
 * SPDX-License-Identifier: EPL-2.0
 *
 * Contributors:
 *         Florian Pirchner - Initial implementation
 *
 * generated by Xtext 2.11.0

 */
package org.eclipse.osbp.dsl.dto.lib;

import java.util.List;
import java.util.function.Consumer;

public interface IEntityMappingList<D> extends List<D> {

	/**
	 * Maps the content of this list to entities list using the adder and
	 * remover consumer instance.
	 * 
	 * @param childMapper
	 * @param oppositeAdder
	 * @param oppositeRemover
	 */
	public abstract <E> void mapToEntity(IMapper<D, E> childMapper,
			Consumer<E> oppositeAdder, Consumer<E> oppositeRemover);

	public List<D> getAdded();

	public List<D> getRemoved();

	public List<D> getUpdated();
}