Further modules included.
[yaffs-website] / web / modules / contrib / drupalmoduleupgrader / src / Routing / LinkBinding / LinkBindingFactory.php
diff --git a/web/modules/contrib/drupalmoduleupgrader/src/Routing/LinkBinding/LinkBindingFactory.php b/web/modules/contrib/drupalmoduleupgrader/src/Routing/LinkBinding/LinkBindingFactory.php
new file mode 100644 (file)
index 0000000..1168bde
--- /dev/null
@@ -0,0 +1,51 @@
+<?php
+
+namespace Drupal\drupalmoduleupgrader\Routing\LinkBinding;
+
+use Drupal\Component\Plugin\PluginManagerInterface;
+use Drupal\drupalmoduleupgrader\Routing\Drupal7\RouteWrapper as Drupal7Route;
+use Drupal\drupalmoduleupgrader\Routing\Drupal8\RouteWrapper as Drupal8Route;
+
+/**
+ * Factory class to create link bindings, depending on the source route's type.
+ */
+class LinkBindingFactory {
+
+  /**
+   * @var PluginManagerInterface
+   */
+  private $linkManager;
+
+  public function __construct(PluginManagerInterface $link_manager) {
+    $this->linkManager = $link_manager;
+  }
+
+  /**
+   * Factory method. Returns a link binding object appropriate for the source link type.
+   *
+   * @param Drupal7Route $source
+   *  The source (Drupal 7) route.
+   * @param Drupal8Route $destination
+   *  The destination (Drupal 8) route.
+   *
+   * @return mixed
+   *  A link binding object; either an instance of this class or a subclass thereof.
+   */
+  public function create(Drupal7Route $source, Drupal8Route $destination) {
+    if ($source->isLink()) {
+      return new MenuLinkBinding($source, $destination);
+    }
+    elseif ($source->isLocalTask() || $source->isDefaultLocalTask()) {
+      return new LocalTaskLinkBinding($source, $destination, $this->linkManager);
+    }
+    elseif ($source->isLocalAction()) {
+      if ($source->isContextualLink()) {
+        return new LinkBinding($source, $destination);
+      }
+      else {
+        return new LocalActionLinkBinding($source, $destination);
+      }
+    }
+  }
+
+}