Current File : /home/jvzmxxx/wiki1/extensions/Wikibase/repo/includes/ChangeOp/MergeChangeOpsFactory.php
<?php

namespace Wikibase\ChangeOp;

use InvalidArgumentException;
use SiteLookup;
use Wikibase\DataModel\Entity\Item;
use Wikibase\Repo\Validators\EntityConstraintProvider;

/**
 * Factory for ChangeOps that merge Items.
 *
 * @license GPL-2.0+
 * @author Daniel Kinzler
 */
class MergeChangeOpsFactory {

	/**
	 * @var EntityConstraintProvider
	 */
	private $constraintProvider;

	/**
	 * @var ChangeOpFactoryProvider
	 */
	private $factoryProvider;

	/**
	 * @var SiteLookup
	 */
	private $siteLookup;

	/**
	 * @param EntityConstraintProvider $constraintProvider
	 * @param ChangeOpFactoryProvider $factoryProvider
	 * @param SiteLookup $siteLookup
	 */
	public function __construct(
		EntityConstraintProvider $constraintProvider,
		ChangeOpFactoryProvider $factoryProvider,
		SiteLookup $siteLookup
	) {
		$this->constraintProvider = $constraintProvider;
		$this->factoryProvider = $factoryProvider;
		$this->siteLookup = $siteLookup;
	}

	/**
	 * @param Item $fromItem
	 * @param Item $toItem
	 * @param string[] $ignoreConflicts list of elements to ignore conflicts for
	 *   can only contain 'label' and or 'description' and or 'sitelink'
	 *
	 * @throws InvalidArgumentException
	 * @return ChangeOpsMerge
	 *
	 * @todo: Injecting ChangeOpFactoryProvider is an Abomination Unto Nuggan, we'll
	 *        need a ItemMergeChangeOpsSequenceBuilder or some such.
	 */
	public function newMergeOps(
		Item $fromItem,
		Item $toItem,
		array $ignoreConflicts = array()
	) {
		return new ChangeOpsMerge(
			$fromItem,
			$toItem,
			$ignoreConflicts,
			$this->constraintProvider,
			$this->factoryProvider,
			$this->siteLookup
		);
	}

}