--- /dev/null
+<?php
+
+namespace Drupal\Driver\Fields\Drupal7;
+
+use Drupal\Driver\Fields\FieldHandlerInterface;
+
+/**
+ * Base class for field handlers in Drupal 7.
+ */
+abstract class AbstractHandler implements FieldHandlerInterface {
+
+ /**
+ * The entity language.
+ *
+ * @var string
+ */
+ protected $language = NULL;
+
+ /**
+ * The simulated entity.
+ *
+ * @var \stdClass
+ */
+ protected $entity = NULL;
+
+ /**
+ * The entity type.
+ *
+ * @var string
+ */
+ protected $entityType = NULL;
+
+ /**
+ * The field name.
+ *
+ * @var string
+ */
+ protected $fieldName = NULL;
+
+ /**
+ * The field array, as returned by field_read_fields().
+ *
+ * @var array
+ */
+ protected $fieldInfo = array();
+
+ /**
+ * Constructs an AbstractHandler object.
+ *
+ * @param \stdClass $entity
+ * The simulated entity object containing field information.
+ * @param string $entity_type
+ * The entity type.
+ * @param string $field_name
+ * The field name.
+ */
+ public function __construct(\stdClass $entity, $entity_type, $field_name) {
+ $this->entity = $entity;
+ $this->entityType = $entity_type;
+ $this->fieldName = $field_name;
+ $this->fieldInfo = $this->getFieldInfo();
+ $this->language = $this->getEntityLanguage();
+ }
+
+ /**
+ * Magic caller.
+ */
+ public function __call($method, $args) {
+ if ($method == 'expand') {
+ $args['values'] = (array) $args['values'];
+ }
+ return call_user_func_array(array($this, $method), $args);
+ }
+
+ /**
+ * Returns field information.
+ *
+ * @return array
+ * The field array, as returned by field_read_fields().
+ */
+ public function getFieldInfo() {
+ return field_info_field($this->fieldName);
+ }
+
+ /**
+ * Returns the entity language.
+ *
+ * @return string
+ * The entity language.
+ */
+ public function getEntityLanguage() {
+ if (field_is_translatable($this->entityType, $this->fieldInfo)) {
+ return entity_language($this->entityType, $this->entity);
+ }
+ return LANGUAGE_NONE;
+ }
+
+}