File Coverage

blib/lib/SSIS/Package/DTSTaskFactory.pm
Criterion Covered Total %
statement 139 141 98.5
branch n/a
condition n/a
subroutine 47 47 100.0
pod n/a
total 186 188 98.9


line stmt bran cond sub pod time code
1             package SSIS::Package::DTSTaskFactory;
2            
3 1     1   1439 use 5.010;
  1         4  
  1         43  
4 1     1   6 use Mouse;
  1         2  
  1         6  
5            
6            
7 1     1   930 use SSIS::Package::DTSTask::BulkInsertTask;
  1         2  
  1         38  
8 1     1   701 use SSIS::Package::DTSTask::DataProfilingTask;
  1         3  
  1         28  
9 1     1   546 use SSIS::Package::DTSTask::DMQueryTask;
  1         3  
  1         29  
10 1     1   639 use SSIS::Package::DTSTask::ExecutePackageTask2;
  1         3  
  1         28  
11 1     1   560 use SSIS::Package::DTSTask::ExecuteProcess;
  1         3  
  1         36  
12 1     1   563 use SSIS::Package::DTSTask::ExecuteSQLTask;
  1         3  
  1         37  
13 1     1   646 use SSIS::Package::DTSTask::ExpressionTask;
  1         4  
  1         28  
14 1     1   527 use SSIS::Package::DTSTask::FileSystemTask;
  1         4  
  1         31  
15 1     1   570 use SSIS::Package::DTSTask::FOREACHLOOP;
  1         6  
  1         37  
16 1     1   612 use SSIS::Package::DTSTask::FORLOOP;
  1         3  
  1         34  
17 1     1   613 use SSIS::Package::DTSTask::FtpTask;
  1         3  
  1         34  
18 1     1   617 use SSIS::Package::DTSTask::MessageQueueTask;
  1         3  
  1         34  
19 1     1   645 use SSIS::Package::DTSTask::PipeLine2;
  1         3  
  1         34  
20 1     1   631 use SSIS::Package::DTSTask::ScriptTask;
  1         5  
  1         31  
21 1     1   625 use SSIS::Package::DTSTask::SendMailTask;
  1         4  
  1         32  
22 1     1   1062 use SSIS::Package::DTSTask::SEQUENCE;
  1         3  
  1         35  
23 1     1   585 use SSIS::Package::DTSTask::TransferDatabaseTask;
  1         3  
  1         38  
24 1     1   685 use SSIS::Package::DTSTask::TransferErrorMessagesTask;
  1         3  
  1         33  
25 1     1   576 use SSIS::Package::DTSTask::TransferJobsTask;
  1         3  
  1         34  
26 1     1   682 use SSIS::Package::DTSTask::TransferLoginsTask;
  1         3  
  1         43  
27 1     1   634 use SSIS::Package::DTSTask::TransferSqlServerObjectsTask;
  1         4  
  1         38  
28 1     1   6481 use SSIS::Package::DTSTask::TransferStoredProceduresTask;
  1         2  
  1         39  
29 1     1   652 use SSIS::Package::DTSTask::WebServiceTask;
  1         4  
  1         41  
30 1     1   692 use SSIS::Package::DTSTask::WmiDataReaderTask;
  1         4  
  1         36  
31 1     1   658 use SSIS::Package::DTSTask::WmiEventWatcherTask;
  1         3  
  1         33  
32 1     1   639 use SSIS::Package::DTSTask::XMLTask;
  1         4  
  1         37  
33            
34 1     1   687 use SSIS::Package::DTSTask::ActiveXScriptTask;
  1         4  
  1         63  
35 1     1   605 use SSIS::Package::DTSTask::ASExecuteDDLTask;
  1         4  
  1         34  
36 1     1   612 use SSIS::Package::DTSTask::DTSProcessingTask;
  1         4  
  1         36  
37 1     1   655 use SSIS::Package::DTSTask::EnhancedExecutePackageTask;
  1         4  
  1         46  
38 1     1   816 use SSIS::Package::DTSTask::Exec80PackageTask;
  1         4  
  1         42  
39 1     1   577 use SSIS::Package::DTSTask::SSISSFTTask;
  1         4  
  1         32  
40 1     1   645 use SSIS::Package::DTSTask::DbMaintenanceBackupTask;
  1         4  
  1         31  
41 1     1   661 use SSIS::Package::DTSTask::DbMaintenanceCheckIntegrityTask;
  1         4  
  1         40  
42 1     1   700 use SSIS::Package::DTSTask::DbMaintenanceExecuteAgentJobTask;
  1         3  
  1         34  
43 1     1   753 use SSIS::Package::DTSTask::DbMaintenanceTSQLExecuteTask;
  1         3  
  1         45  
44 1     1   611 use SSIS::Package::DTSTask::DbMaintenanceHistoryCleanupTask;
  1         4  
  1         40  
45 1     1   764 use SSIS::Package::DTSTask::DbMaintenanceFileCleanupTask;
  1         4  
  1         33  
46 1     1   594 use SSIS::Package::DTSTask::DbMaintenanceNotifyOperatorTask;
  1         2  
  1         61  
47 1     1   595 use SSIS::Package::DTSTask::DbMaintenanceReindexTask;
  1         2  
  1         32  
48 1     1   618 use SSIS::Package::DTSTask::DbMaintenanceDefragmentIndexTask;
  1         3  
  1         39  
49 1     1   815 use SSIS::Package::DTSTask::DbMaintenanceShrinkTask;
  1         3  
  1         34  
50 1     1   587 use SSIS::Package::DTSTask::DbMaintenanceUpdateStatisticsTask;
  1         3  
  1         36  
51 1     1   8 use SSIS::Package::DTSTaskConnection;
  1         2  
  1         33  
52            
53 1     1   492 use XML::Simple ; #qw(:strict);
  0            
  0            
54             #use XML::LibXML;
55             use XML::CompactTree::XS;
56             use XML::LibXML::Reader;
57            
58             use Data::Dumper;
59             use Data::Printer;
60            
61             use Carp;
62            
63             =head1 NAME
64            
65             SSIS::Package::DTSTaskFactory - Factory class for SSIS package DTS tasks by Ded MedVed
66            
67             =head1 VERSION
68            
69             Version 0.02
70            
71             =cut
72            
73            
74            
75            
76            
77             use autodie qw(:all);
78            
79             #TODO 0.
80            
81             sub make {
82            
83             my ($self) = shift;
84             croak 'Invalid call' unless defined $self;
85            
86             # my $xml = $_[0] ;
87             #warn Dumper $xml;
88             my $rh_args = $_[0];
89             #warn Dumper $rh_args;
90             #my $obj = SSIS::Package::DTSTaskFactory->make( { type => $x->{'DTS:ExecutableType'}, properties => $x->{'DTS:Property'}, connectors => \@connectors );
91            
92            
93             # my @type = grep { $_->{'DTS:Name'} eq 'CreationName' } @{$xml->{'DTS:Property'}};
94             # my @name = grep { $_->{'DTS:Name'} eq 'ObjectName' } @{$xml->{'DTS:Property'}};
95            
96             # my @type = grep { exists $$_{'DTS:Property'} } grep { ref($_) eq 'HASH' } @{$xml};
97            
98             my $task ;
99             # my $objType = $type[0]->{content};
100             # my $name = $name[0]->{content};
101            
102             my $objType = $rh_args->{type} ;
103             # my @name = grep { $_->{'DTS:Name'} eq 'ObjectName' } @{$rh_args->{properties}};
104             # my $name = $name[0]->{content};
105            
106             #warn Dumper $objType;
107             #warn Dumper $name;
108            
109             my @connectors;
110             #warn Dumper $rh_args->{connectors};
111             foreach my $c (@{$rh_args->{connectors}}) {
112             #warn Dumper $c;
113             #warn Dumper ref($c);
114             if ( ref($c) eq 'ARRAY' ) {
115             foreach my $member (@{$c}) {
116             if ( ref($member) eq 'ARRAY' ) {
117             foreach my $mem2 (@{$member}) {
118             my $conn = SSIS::Package::DTSTaskConnection->new($mem2->{connection}) ;
119             push @connectors, $conn;
120             }
121             }
122             else {
123             #warn Dumper $member;
124             my $conn = SSIS::Package::DTSTaskConnection->new($member->{connection}) ;
125             push @connectors, $conn;
126             }
127             }
128             }
129             else {
130             my $conn = SSIS::Package::DTSTaskConnection->new($c->{connection}) ;
131             push @connectors, $conn;
132             }
133             }
134            
135             if ( $objType =~ m{\A Microsoft\.SqlServer\.Dts\.Tasks\.(\w+) }xmisg ) {
136             $objType = $1;
137             }
138             if ( $objType =~ m{\A Microsoft\.DataTransformationServices\.Tasks\.DTSProcessingTask\.(\w+) }xmisg ) {
139             $objType = $1;
140             }
141             if ( $objType =~ m{\A Microsoft\.SqlServer\.Management\.DatabaseMaintenance\.(\w+) }xmisg ) {
142             $objType = $1;
143             }
144             if ( $objType =~ m{\A \w+\.SSIS\.ControlFlow\.(\w+) }xmisg ) {
145             $objType = $1;
146             }
147             if ( $objType =~ m{\A SSISSFTPTask100\.SSIS\.(\w+) }xmisg ) {
148             $objType = $1;
149             }
150            
151             if ( $objType eq 'STOCK:SEQUENCE' ) {
152             $objType = "SEQUENCE" ;
153             }
154             if ( $objType eq 'STOCK:FOREACHLOOP' ) {
155             $objType = "FOREACHLOOP" ;
156             }
157             if ( $objType eq 'STOCK:FORLOOP' ) {
158             $objType = "FORLOOP" ;
159             }
160             if ( $objType eq 'SSIS.Pipeline.2' ) {
161             $objType = "PipeLine2" ;
162             }
163             if ( $objType eq 'SSIS.ExecutePackageTask.2' ) {
164             $objType = "ExecutePackageTask2" ;
165             }
166            
167            
168             my @valrefs = map { ( $_->{'DTS:Name'},$_->{'content'} ) ;} @{$rh_args->{properties}}; #@{$x->{'DTS:Property'}};
169             push @valrefs, 'Connectors', \@connectors;
170            
171             #warn Dumper $objType ;
172             # $task = "SSIS::Package::DTSTask::${objType}"->new( { 'Name' => $name } );
173             #warn Dumper @valrefs;
174             $task = "SSIS::Package::DTSTask::${objType}"->new( { (@valrefs) } );
175            
176             #if ($objType =~ m{\A(ADONET|EXCEL|FILE|FLATFILE|MSMQ|OLEDB|SMOServer|SMTP)\z} ) {
177             # my @connstr = grep { $_->{'DTS:Name'} eq 'ConnectionString' } @{$xml->{'DTS:ObjectData'}->{'DTS:ConnectionManager'}->{'DTS:Property'}};
178             # my $connstr = $connstr[0]->{content};
179             # my @name = grep { $_->{'DTS:Name'} eq 'ObjectName' } @{$xml->{'DTS:Property'}};
180             # my $name = $name[0]->{content};
181             ##warn Dumper $connstr, $name ;
182             #
183             # if ($objType eq "ADONET" ) {
184             # $connectManager = "SSIS::Package::ConnectionManager::${objType}"->new( { 'Name' => $name, 'ConnectionString' => $connstr } );
185             # }
186             # if ($objType eq "EXCEL" ) {
187             # $connectManager = "SSIS::Package::ConnectionManager::${objType}"->new( { 'Name' => $name, 'ConnectionString' => $connstr } );
188             # }
189             # if ($objType eq "FILE" ) {
190             # $connectManager = "SSIS::Package::ConnectionManager::${objType}"->new( { 'Name' => $name, 'ConnectionString' => $connstr } );
191             # }
192             # if ($objType eq "FLATFILE" ) {
193             ##warn Dumper $xml;
194             # $connectManager = "SSIS::Package::ConnectionManager::${objType}"->new( { 'Name' => $name, 'ConnectionString' => $connstr } );
195             # }
196             # if ($objType eq "MSMQ" ) {
197             ##warn Dumper $xml;
198             # $connstr = $xml->{'DTS:ObjectData'}->{'MsmqConnectionManager'}->{'ConnectionString'};
199             # $connectManager = "SSIS::Package::ConnectionManager::${objType}"->new( { 'Name' => $name, 'ConnectionString' => $connstr } );
200             # }
201             # if ($objType eq "OLEDB" ) {
202             # $connectManager = "SSIS::Package::ConnectionManager::${objType}"->new( { 'Name' => $name, 'ConnectionString' => $connstr } );
203             # }
204             # if ($objType eq "SMOServer" ) {
205             ##warn Dumper $xml;
206             # $connstr = $xml->{'DTS:ObjectData'}->{'SMOServerConnectionManager'}->{'ConnectionString'};
207             # $connectManager = "SSIS::Package::ConnectionManager::${objType}"->new( { 'Name' => $name, 'ConnectionString' => $connstr } );
208             # }
209             # if ($objType eq "SMTP" ) {
210             # $connstr = $xml->{'DTS:ObjectData'}->{'SmtpConnectionManager'}->{'ConnectionString'};
211             # $connectManager = "SSIS::Package::ConnectionManager::${objType}"->new( { 'Name' => $name, 'ConnectionString' => $connstr } );
212             # }
213             # }
214             # else {
215             # croak "Unknown connection type $objType.";
216             # }
217            
218             return $task ;
219            
220            
221             }
222            
223            
224            
225             1 ;
226            
227             __DATA__