From 2632706661588db873ce4e86f3454748fb9f6c07 Mon Sep 17 00:00:00 2001
From: Jaap Jansma <jaap.jansma@civicoop.org>
Date: Fri, 15 Mar 2019 11:57:00 +0100
Subject: [PATCH] refactor

---
 .../SqlDataFlow/SimpleWhereClause.php         | 16 ++++++---
 Civi/DataProcessor/Factory.php                | 34 +++++++++----------
 .../Source/{ => Contact}/AddressSource.php    |  6 ++--
 .../Source/{ => Contact}/ContactSource.php    |  5 ++-
 .../Source/{ => Contact}/EmailSource.php      |  6 ++--
 .../Source/{ => Contact}/PhoneSource.php      |  6 ++--
 .../{ => Contact}/RelationshipSource.php      |  4 +--
 .../{ => Contact}/RelationshipTypeSource.php  |  7 ++--
 .../{ => Contribution}/ContributionSource.php |  6 ++--
 .../Source/{ => Event}/EventSource.php        |  6 ++--
 .../Source/{ => Event}/ParticipantSource.php  |  6 ++--
 .../Source/{ => Group}/GroupContactSource.php |  6 ++--
 .../Source/{ => Group}/GroupSource.php        |  6 ++--
 .../{ => Mailing}/MailingGroupSource.php      |  6 ++--
 .../Source/{ => Mailing}/MailingJobSource.php |  6 ++--
 .../Source/{ => Mailing}/MailingSource.php    |  6 ++--
 .../Source/{ => Member}/MembershipSource.php  |  6 ++--
 .../{ => Member}/MembershipStatusSource.php   |  6 ++--
 .../{ => Member}/MembershipTypeSource.php     |  6 ++--
 19 files changed, 63 insertions(+), 87 deletions(-)
 rename Civi/DataProcessor/Source/{ => Contact}/AddressSource.php (69%)
 rename Civi/DataProcessor/Source/{ => Contact}/ContactSource.php (86%)
 rename Civi/DataProcessor/Source/{ => Contact}/EmailSource.php (68%)
 rename Civi/DataProcessor/Source/{ => Contact}/PhoneSource.php (68%)
 rename Civi/DataProcessor/Source/{ => Contact}/RelationshipSource.php (97%)
 rename Civi/DataProcessor/Source/{ => Contact}/RelationshipTypeSource.php (64%)
 rename Civi/DataProcessor/Source/{ => Contribution}/ContributionSource.php (69%)
 rename Civi/DataProcessor/Source/{ => Event}/EventSource.php (68%)
 rename Civi/DataProcessor/Source/{ => Event}/ParticipantSource.php (69%)
 rename Civi/DataProcessor/Source/{ => Group}/GroupContactSource.php (69%)
 rename Civi/DataProcessor/Source/{ => Group}/GroupSource.php (68%)
 rename Civi/DataProcessor/Source/{ => Mailing}/MailingGroupSource.php (69%)
 rename Civi/DataProcessor/Source/{ => Mailing}/MailingJobSource.php (69%)
 rename Civi/DataProcessor/Source/{ => Mailing}/MailingSource.php (69%)
 rename Civi/DataProcessor/Source/{ => Member}/MembershipSource.php (69%)
 rename Civi/DataProcessor/Source/{ => Member}/MembershipStatusSource.php (70%)
 rename Civi/DataProcessor/Source/{ => Member}/MembershipTypeSource.php (70%)

diff --git a/Civi/DataProcessor/DataFlow/SqlDataFlow/SimpleWhereClause.php b/Civi/DataProcessor/DataFlow/SqlDataFlow/SimpleWhereClause.php
index b9d0739e..01e0f741 100644
--- a/Civi/DataProcessor/DataFlow/SqlDataFlow/SimpleWhereClause.php
+++ b/Civi/DataProcessor/DataFlow/SqlDataFlow/SimpleWhereClause.php
@@ -73,11 +73,19 @@ class SimpleWhereClause implements WhereClauseInterface {
    * @return string
    */
   public function getWhereClause() {
-    if ($this->operator == 'NOT IN') {
-      // If the operator is NOT IN also include NULL values.
-      return "(`{$this->table_alias}`.`{$this->field}` {$this->operator} {$this->value} OR `{$this->table_alias}`.`{$this->field}` IS NULL)";
+    if ($this->isJoinClause()) {
+      return "`{$this->table_alias}`.`{$this->field}` {$this->operator} {$this->value}";
+    }
+    switch ($this->operator) {
+      case 'NOT IN':
+      case 'NOT LIKE':
+      case '!=':
+        return "(`{$this->table_alias}`.`{$this->field}` {$this->operator} {$this->value} OR `{$this->table_alias}`.`{$this->field}` IS NULL)";
+        break;
+      default:
+        return "`{$this->table_alias}`.`{$this->field}` {$this->operator} {$this->value}";
+        break;
     }
-    return "`{$this->table_alias}`.`{$this->field}` {$this->operator} {$this->value}";
   }
 
 }
\ No newline at end of file
diff --git a/Civi/DataProcessor/Factory.php b/Civi/DataProcessor/Factory.php
index aea34d4c..cc6dc9ba 100644
--- a/Civi/DataProcessor/Factory.php
+++ b/Civi/DataProcessor/Factory.php
@@ -95,23 +95,23 @@ class Factory {
     $this->dispatcher = \Civi::dispatcher();
 
     $this->addDataProcessorType('default', 'Civi\DataProcessor\ProcessorType\DefaultProcessorType', E::ts('Default'));
-    $this->addDataSource('contact', 'Civi\DataProcessor\Source\ContactSource', E::ts('Contact'));
-    $this->addDataSource('group', 'Civi\DataProcessor\Source\GroupSource', E::ts('Group'));
-    $this->addDataSource('group_contact', 'Civi\DataProcessor\Source\GroupContactSource', E::ts('Contacts in a group'));
-    $this->addDataSource('email', 'Civi\DataProcessor\Source\EmailSource', E::ts('E-mail'));
-    $this->addDataSource('address', 'Civi\DataProcessor\Source\AddressSource', E::ts('Address'));
-    $this->addDataSource('phone', 'Civi\DataProcessor\Source\PhoneSource', E::ts('Phone'));
-    $this->addDataSource('contribution', 'Civi\DataProcessor\Source\ContributionSource', E::ts('Contribution'));
-    $this->addDataSource('relationship', 'Civi\DataProcessor\Source\RelationshipSource', E::ts('Relationship'));
-    $this->addDataSource('relationship_type', 'Civi\DataProcessor\Source\RelationshipTypeSource', E::ts('Relationship Type'));
-    $this->addDataSource('event', 'Civi\DataProcessor\Source\EventSource', E::ts('Event'));
-    $this->addDataSource('participant', 'Civi\DataProcessor\Source\ParticipantSource', E::ts('Participant'));
-    $this->addDataSource('mailing', 'Civi\DataProcessor\Source\MailingSource', E::ts('Mailing'));
-    $this->addDataSource('mailing_job', 'Civi\DataProcessor\Source\MailingJobSource', E::ts('Mailing Job'));
-    $this->addDataSource('mailing_group', 'Civi\DataProcessor\Source\MailingGroupSource', E::ts('Mailing Group'));
-    $this->addDataSource('membership', 'Civi\DataProcessor\Source\MembershipSource', E::ts('Membership'));
-    $this->addDataSource('membership_type', 'Civi\DataProcessor\Source\MembershipTypeSource', E::ts('Membership Type'));
-    $this->addDataSource('membership_status', 'Civi\DataProcessor\Source\MembershipStatusSource', E::ts('Membership Status'));
+    $this->addDataSource('contact', 'Civi\DataProcessor\Source\Contact\ContactSource', E::ts('Contact'));
+    $this->addDataSource('group', 'Civi\DataProcessor\Source\Group\GroupSource', E::ts('Group'));
+    $this->addDataSource('group_contact', 'Civi\DataProcessor\Source\Group\GroupContactSource', E::ts('Contacts in a group'));
+    $this->addDataSource('email', 'Civi\DataProcessor\Source\Contact\EmailSource', E::ts('E-mail'));
+    $this->addDataSource('address', 'Civi\DataProcessor\Source\Contact\AddressSource', E::ts('Address'));
+    $this->addDataSource('phone', 'Civi\DataProcessor\Source\Contact\PhoneSource', E::ts('Phone'));
+    $this->addDataSource('contribution', 'Civi\DataProcessor\Source\Contribution\ContributionSource', E::ts('Contribution'));
+    $this->addDataSource('relationship', 'Civi\DataProcessor\Source\Contact\RelationshipSource', E::ts('Relationship'));
+    $this->addDataSource('relationship_type', 'Civi\DataProcessor\Source\Contact\RelationshipTypeSource', E::ts('Relationship Type'));
+    $this->addDataSource('event', 'Civi\DataProcessor\Source\Event\EventSource', E::ts('Event'));
+    $this->addDataSource('participant', 'Civi\DataProcessor\Source\Event\ParticipantSource', E::ts('Participant'));
+    $this->addDataSource('mailing', 'Civi\DataProcessor\Source\Mailing\MailingSource', E::ts('Mailing'));
+    $this->addDataSource('mailing_job', 'Civi\DataProcessor\Source\Mailing\MailingJobSource', E::ts('Mailing Job'));
+    $this->addDataSource('mailing_group', 'Civi\DataProcessor\Source\Mailing\MailingGroupSource', E::ts('Mailing Group'));
+    $this->addDataSource('membership', 'Civi\DataProcessor\Source\Member\MembershipSource', E::ts('Membership'));
+    $this->addDataSource('membership_type', 'Civi\DataProcessor\Source\Member\MembershipTypeSource', E::ts('Membership Type'));
+    $this->addDataSource('membership_status', 'Civi\DataProcessor\Source\Member\MembershipStatusSource', E::ts('Membership Status'));
     $this->addDataSource('csv', 'Civi\DataProcessor\Source\CSV', E::ts('CSV File'));
     $this->addOutput('api', 'Civi\DataProcessor\Output\Api', E::ts('API'));
     $this->addOutput('search', 'CRM_DataprocessorSearch_Search', E::ts('Search'));
diff --git a/Civi/DataProcessor/Source/AddressSource.php b/Civi/DataProcessor/Source/Contact/AddressSource.php
similarity index 69%
rename from Civi/DataProcessor/Source/AddressSource.php
rename to Civi/DataProcessor/Source/Contact/AddressSource.php
index 54261982..0569b810 100644
--- a/Civi/DataProcessor/Source/AddressSource.php
+++ b/Civi/DataProcessor/Source/Contact/AddressSource.php
@@ -4,11 +4,9 @@
  * @license AGPL-3.0
  */
 
-namespace Civi\DataProcessor\Source;
+namespace Civi\DataProcessor\Source\Contact;
 
-use Civi\DataProcessor\DataFlow\SqlTableDataFlow;
-use Civi\DataProcessor\DataSpecification\DataSpecification;
-use Civi\DataProcessor\DataSpecification\FieldSpecification;
+use Civi\DataProcessor\Source\AbstractCivicrmEntitySource;
 
 use CRM_Dataprocessor_ExtensionUtil as E;
 
diff --git a/Civi/DataProcessor/Source/ContactSource.php b/Civi/DataProcessor/Source/Contact/ContactSource.php
similarity index 86%
rename from Civi/DataProcessor/Source/ContactSource.php
rename to Civi/DataProcessor/Source/Contact/ContactSource.php
index 8d9301b9..b0b59759 100644
--- a/Civi/DataProcessor/Source/ContactSource.php
+++ b/Civi/DataProcessor/Source/Contact/ContactSource.php
@@ -4,11 +4,10 @@
  * @license AGPL-3.0
  */
 
-namespace Civi\DataProcessor\Source;
+namespace Civi\DataProcessor\Source\Contact;
 
-use Civi\DataProcessor\DataFlow\SqlTableDataFlow;
 use Civi\DataProcessor\DataSpecification\DataSpecification;
-use Civi\DataProcessor\DataSpecification\FieldSpecification;
+use Civi\DataProcessor\Source\AbstractCivicrmEntitySource;
 
 use CRM_Dataprocessor_ExtensionUtil as E;
 
diff --git a/Civi/DataProcessor/Source/EmailSource.php b/Civi/DataProcessor/Source/Contact/EmailSource.php
similarity index 68%
rename from Civi/DataProcessor/Source/EmailSource.php
rename to Civi/DataProcessor/Source/Contact/EmailSource.php
index 7294b616..15c4526b 100644
--- a/Civi/DataProcessor/Source/EmailSource.php
+++ b/Civi/DataProcessor/Source/Contact/EmailSource.php
@@ -4,11 +4,9 @@
  * @license AGPL-3.0
  */
 
-namespace Civi\DataProcessor\Source;
+namespace Civi\DataProcessor\Source\Contact;
 
-use Civi\DataProcessor\DataFlow\SqlTableDataFlow;
-use Civi\DataProcessor\DataSpecification\DataSpecification;
-use Civi\DataProcessor\DataSpecification\FieldSpecification;
+use Civi\DataProcessor\Source\AbstractCivicrmEntitySource;
 
 use CRM_Dataprocessor_ExtensionUtil as E;
 
diff --git a/Civi/DataProcessor/Source/PhoneSource.php b/Civi/DataProcessor/Source/Contact/PhoneSource.php
similarity index 68%
rename from Civi/DataProcessor/Source/PhoneSource.php
rename to Civi/DataProcessor/Source/Contact/PhoneSource.php
index 1df8d1c1..0eadb7fe 100644
--- a/Civi/DataProcessor/Source/PhoneSource.php
+++ b/Civi/DataProcessor/Source/Contact/PhoneSource.php
@@ -4,11 +4,9 @@
  * @license AGPL-3.0
  */
 
-namespace Civi\DataProcessor\Source;
+namespace Civi\DataProcessor\Source\Contact;
 
-use Civi\DataProcessor\DataFlow\SqlTableDataFlow;
-use Civi\DataProcessor\DataSpecification\DataSpecification;
-use Civi\DataProcessor\DataSpecification\FieldSpecification;
+use Civi\DataProcessor\Source\AbstractCivicrmEntitySource;
 
 use CRM_Dataprocessor_ExtensionUtil as E;
 
diff --git a/Civi/DataProcessor/Source/RelationshipSource.php b/Civi/DataProcessor/Source/Contact/RelationshipSource.php
similarity index 97%
rename from Civi/DataProcessor/Source/RelationshipSource.php
rename to Civi/DataProcessor/Source/Contact/RelationshipSource.php
index 1fb2c3c7..3535a943 100644
--- a/Civi/DataProcessor/Source/RelationshipSource.php
+++ b/Civi/DataProcessor/Source/Contact/RelationshipSource.php
@@ -4,10 +4,10 @@
  * @license AGPL-3.0
  */
 
-namespace Civi\DataProcessor\Source;
+namespace Civi\DataProcessor\Source\Contact;
 
+use Civi\DataProcessor\Source\AbstractCivicrmEntitySource;
 use Civi\DataProcessor\DataFlow\SqlDataFlow\SimpleWhereClause;
-use Civi\DataProcessor\DataFlow\SqlTableDataFlow;
 use Civi\DataProcessor\DataSpecification\CustomFieldSpecification;
 use Civi\DataProcessor\DataSpecification\DataSpecification;
 use Civi\DataProcessor\DataSpecification\FieldSpecification;
diff --git a/Civi/DataProcessor/Source/RelationshipTypeSource.php b/Civi/DataProcessor/Source/Contact/RelationshipTypeSource.php
similarity index 64%
rename from Civi/DataProcessor/Source/RelationshipTypeSource.php
rename to Civi/DataProcessor/Source/Contact/RelationshipTypeSource.php
index c723e126..bed5533b 100644
--- a/Civi/DataProcessor/Source/RelationshipTypeSource.php
+++ b/Civi/DataProcessor/Source/Contact/RelationshipTypeSource.php
@@ -4,12 +4,9 @@
  * @license AGPL-3.0
  */
 
-namespace Civi\DataProcessor\Source;
+namespace Civi\DataProcessor\Source\Contact;
 
-use Civi\DataProcessor\DataFlow\SqlDataFlow\SimpleWhereClause;
-use Civi\DataProcessor\DataFlow\SqlTableDataFlow;
-use Civi\DataProcessor\DataSpecification\DataSpecification;
-use Civi\DataProcessor\DataSpecification\FieldSpecification;
+use Civi\DataProcessor\Source\AbstractCivicrmEntitySource;
 
 use CRM_Dataprocessor_ExtensionUtil as E;
 
diff --git a/Civi/DataProcessor/Source/ContributionSource.php b/Civi/DataProcessor/Source/Contribution/ContributionSource.php
similarity index 69%
rename from Civi/DataProcessor/Source/ContributionSource.php
rename to Civi/DataProcessor/Source/Contribution/ContributionSource.php
index 511f2ec1..312bc9bf 100644
--- a/Civi/DataProcessor/Source/ContributionSource.php
+++ b/Civi/DataProcessor/Source/Contribution/ContributionSource.php
@@ -4,11 +4,9 @@
  * @license AGPL-3.0
  */
 
-namespace Civi\DataProcessor\Source;
+namespace Civi\DataProcessor\Source\Contribution;
 
-use Civi\DataProcessor\DataFlow\SqlTableDataFlow;
-use Civi\DataProcessor\DataSpecification\DataSpecification;
-use Civi\DataProcessor\DataSpecification\FieldSpecification;
+use Civi\DataProcessor\Source\AbstractCivicrmEntitySource;
 
 use CRM_Dataprocessor_ExtensionUtil as E;
 
diff --git a/Civi/DataProcessor/Source/EventSource.php b/Civi/DataProcessor/Source/Event/EventSource.php
similarity index 68%
rename from Civi/DataProcessor/Source/EventSource.php
rename to Civi/DataProcessor/Source/Event/EventSource.php
index eecc74b5..84b0c32c 100644
--- a/Civi/DataProcessor/Source/EventSource.php
+++ b/Civi/DataProcessor/Source/Event/EventSource.php
@@ -4,11 +4,9 @@
  * @license AGPL-3.0
  */
 
-namespace Civi\DataProcessor\Source;
+namespace Civi\DataProcessor\Source\Event;
 
-use Civi\DataProcessor\DataFlow\SqlTableDataFlow;
-use Civi\DataProcessor\DataSpecification\DataSpecification;
-use Civi\DataProcessor\DataSpecification\FieldSpecification;
+use Civi\DataProcessor\Source\AbstractCivicrmEntitySource;
 
 use CRM_Dataprocessor_ExtensionUtil as E;
 
diff --git a/Civi/DataProcessor/Source/ParticipantSource.php b/Civi/DataProcessor/Source/Event/ParticipantSource.php
similarity index 69%
rename from Civi/DataProcessor/Source/ParticipantSource.php
rename to Civi/DataProcessor/Source/Event/ParticipantSource.php
index e2e3a89d..e9f10238 100644
--- a/Civi/DataProcessor/Source/ParticipantSource.php
+++ b/Civi/DataProcessor/Source/Event/ParticipantSource.php
@@ -4,11 +4,9 @@
  * @license AGPL-3.0
  */
 
-namespace Civi\DataProcessor\Source;
+namespace Civi\DataProcessor\Source\Event;
 
-use Civi\DataProcessor\DataFlow\SqlTableDataFlow;
-use Civi\DataProcessor\DataSpecification\DataSpecification;
-use Civi\DataProcessor\DataSpecification\FieldSpecification;
+use Civi\DataProcessor\Source\AbstractCivicrmEntitySource;
 
 use CRM_Dataprocessor_ExtensionUtil as E;
 
diff --git a/Civi/DataProcessor/Source/GroupContactSource.php b/Civi/DataProcessor/Source/Group/GroupContactSource.php
similarity index 69%
rename from Civi/DataProcessor/Source/GroupContactSource.php
rename to Civi/DataProcessor/Source/Group/GroupContactSource.php
index 5763b701..36f01c98 100644
--- a/Civi/DataProcessor/Source/GroupContactSource.php
+++ b/Civi/DataProcessor/Source/Group/GroupContactSource.php
@@ -4,11 +4,9 @@
  * @license AGPL-3.0
  */
 
-namespace Civi\DataProcessor\Source;
+namespace Civi\DataProcessor\Source\Group;
 
-use Civi\DataProcessor\DataFlow\SqlTableDataFlow;
-use Civi\DataProcessor\DataSpecification\DataSpecification;
-use Civi\DataProcessor\DataSpecification\FieldSpecification;
+use Civi\DataProcessor\Source\AbstractCivicrmEntitySource;
 
 use CRM_Dataprocessor_ExtensionUtil as E;
 
diff --git a/Civi/DataProcessor/Source/GroupSource.php b/Civi/DataProcessor/Source/Group/GroupSource.php
similarity index 68%
rename from Civi/DataProcessor/Source/GroupSource.php
rename to Civi/DataProcessor/Source/Group/GroupSource.php
index d5ff4a11..c1f23cb0 100644
--- a/Civi/DataProcessor/Source/GroupSource.php
+++ b/Civi/DataProcessor/Source/Group/GroupSource.php
@@ -4,11 +4,9 @@
  * @license AGPL-3.0
  */
 
-namespace Civi\DataProcessor\Source;
+namespace Civi\DataProcessor\Source\Group;
 
-use Civi\DataProcessor\DataFlow\SqlTableDataFlow;
-use Civi\DataProcessor\DataSpecification\DataSpecification;
-use Civi\DataProcessor\DataSpecification\FieldSpecification;
+use Civi\DataProcessor\Source\AbstractCivicrmEntitySource;
 
 use CRM_Dataprocessor_ExtensionUtil as E;
 
diff --git a/Civi/DataProcessor/Source/MailingGroupSource.php b/Civi/DataProcessor/Source/Mailing/MailingGroupSource.php
similarity index 69%
rename from Civi/DataProcessor/Source/MailingGroupSource.php
rename to Civi/DataProcessor/Source/Mailing/MailingGroupSource.php
index 41f5b332..8c9ab3b4 100644
--- a/Civi/DataProcessor/Source/MailingGroupSource.php
+++ b/Civi/DataProcessor/Source/Mailing/MailingGroupSource.php
@@ -4,11 +4,9 @@
  * @license AGPL-3.0
  */
 
-namespace Civi\DataProcessor\Source;
+namespace Civi\DataProcessor\Source\Mailing;
 
-use Civi\DataProcessor\DataFlow\SqlTableDataFlow;
-use Civi\DataProcessor\DataSpecification\DataSpecification;
-use Civi\DataProcessor\DataSpecification\FieldSpecification;
+use Civi\DataProcessor\Source\AbstractCivicrmEntitySource;
 
 use CRM_Dataprocessor_ExtensionUtil as E;
 
diff --git a/Civi/DataProcessor/Source/MailingJobSource.php b/Civi/DataProcessor/Source/Mailing/MailingJobSource.php
similarity index 69%
rename from Civi/DataProcessor/Source/MailingJobSource.php
rename to Civi/DataProcessor/Source/Mailing/MailingJobSource.php
index d76e152d..7ffb6aa4 100644
--- a/Civi/DataProcessor/Source/MailingJobSource.php
+++ b/Civi/DataProcessor/Source/Mailing/MailingJobSource.php
@@ -4,11 +4,9 @@
  * @license AGPL-3.0
  */
 
-namespace Civi\DataProcessor\Source;
+namespace Civi\DataProcessor\Source\Mailing;
 
-use Civi\DataProcessor\DataFlow\SqlTableDataFlow;
-use Civi\DataProcessor\DataSpecification\DataSpecification;
-use Civi\DataProcessor\DataSpecification\FieldSpecification;
+use Civi\DataProcessor\Source\AbstractCivicrmEntitySource;
 
 use CRM_Dataprocessor_ExtensionUtil as E;
 
diff --git a/Civi/DataProcessor/Source/MailingSource.php b/Civi/DataProcessor/Source/Mailing/MailingSource.php
similarity index 69%
rename from Civi/DataProcessor/Source/MailingSource.php
rename to Civi/DataProcessor/Source/Mailing/MailingSource.php
index 2d7cbaca..5683c688 100644
--- a/Civi/DataProcessor/Source/MailingSource.php
+++ b/Civi/DataProcessor/Source/Mailing/MailingSource.php
@@ -4,11 +4,9 @@
  * @license AGPL-3.0
  */
 
-namespace Civi\DataProcessor\Source;
+namespace Civi\DataProcessor\Source\Mailing;
 
-use Civi\DataProcessor\DataFlow\SqlTableDataFlow;
-use Civi\DataProcessor\DataSpecification\DataSpecification;
-use Civi\DataProcessor\DataSpecification\FieldSpecification;
+use Civi\DataProcessor\Source\AbstractCivicrmEntitySource;
 
 use CRM_Dataprocessor_ExtensionUtil as E;
 
diff --git a/Civi/DataProcessor/Source/MembershipSource.php b/Civi/DataProcessor/Source/Member/MembershipSource.php
similarity index 69%
rename from Civi/DataProcessor/Source/MembershipSource.php
rename to Civi/DataProcessor/Source/Member/MembershipSource.php
index 33d60217..b7f357e6 100644
--- a/Civi/DataProcessor/Source/MembershipSource.php
+++ b/Civi/DataProcessor/Source/Member/MembershipSource.php
@@ -4,11 +4,9 @@
  * @license AGPL-3.0
  */
 
-namespace Civi\DataProcessor\Source;
+namespace Civi\DataProcessor\Source\Member;
 
-use Civi\DataProcessor\DataFlow\SqlTableDataFlow;
-use Civi\DataProcessor\DataSpecification\DataSpecification;
-use Civi\DataProcessor\DataSpecification\FieldSpecification;
+use Civi\DataProcessor\Source\AbstractCivicrmEntitySource;
 
 use CRM_Dataprocessor_ExtensionUtil as E;
 
diff --git a/Civi/DataProcessor/Source/MembershipStatusSource.php b/Civi/DataProcessor/Source/Member/MembershipStatusSource.php
similarity index 70%
rename from Civi/DataProcessor/Source/MembershipStatusSource.php
rename to Civi/DataProcessor/Source/Member/MembershipStatusSource.php
index ae611e6b..15fb3638 100644
--- a/Civi/DataProcessor/Source/MembershipStatusSource.php
+++ b/Civi/DataProcessor/Source/Member/MembershipStatusSource.php
@@ -4,11 +4,9 @@
  * @license AGPL-3.0
  */
 
-namespace Civi\DataProcessor\Source;
+namespace Civi\DataProcessor\Source\Member;
 
-use Civi\DataProcessor\DataFlow\SqlTableDataFlow;
-use Civi\DataProcessor\DataSpecification\DataSpecification;
-use Civi\DataProcessor\DataSpecification\FieldSpecification;
+use Civi\DataProcessor\Source\AbstractCivicrmEntitySource;
 
 use CRM_Dataprocessor_ExtensionUtil as E;
 
diff --git a/Civi/DataProcessor/Source/MembershipTypeSource.php b/Civi/DataProcessor/Source/Member/MembershipTypeSource.php
similarity index 70%
rename from Civi/DataProcessor/Source/MembershipTypeSource.php
rename to Civi/DataProcessor/Source/Member/MembershipTypeSource.php
index b7d87f28..293b5552 100644
--- a/Civi/DataProcessor/Source/MembershipTypeSource.php
+++ b/Civi/DataProcessor/Source/Member/MembershipTypeSource.php
@@ -4,11 +4,9 @@
  * @license AGPL-3.0
  */
 
-namespace Civi\DataProcessor\Source;
+namespace Civi\DataProcessor\Source\Member;
 
-use Civi\DataProcessor\DataFlow\SqlTableDataFlow;
-use Civi\DataProcessor\DataSpecification\DataSpecification;
-use Civi\DataProcessor\DataSpecification\FieldSpecification;
+use Civi\DataProcessor\Source\AbstractCivicrmEntitySource;
 
 use CRM_Dataprocessor_ExtensionUtil as E;
 
-- 
GitLab