Changeset 11476 for trunk

Show
Ignore:
Timestamp:
10/06/08 14:16:06 (3 months ago)
Author:
juruen@…
Message:

add support to add custom models

Location:
trunk/extra/moddev
Files:
6 modified

Legend:

Unmodified
Added
Removed
  • trunk/extra/moddev/src/ebox-moddev-create

    r11472 r11476  
    148148    my ($interp, $output, $options) = @_; 
    149149 
    150     my $dir = $options->{destdir} . '/src/EBox/Model'; 
    151     my $mainClass = 'Settings.pm'; 
    152     mkdir ($dir) or die "Can't create $dir"; 
    153  
    154     my $comp = $interp->make_component( 
    155             comp_file => STUBS_PATH .  '/src/Model/Makefile.am.mas', 
    156             ); 
    157     ${$output} = ''; 
    158     $interp->exec($comp,  
    159                     ( module => $options->{mainClass}, 
    160                       models => ('Settings.pm'))); 
    161     write_file($dir . '/Makefile.am', ${$output}); 
    162      
    163     # TableModel or FormModel ? 
    164     my $template; 
    165     if ($options->{model} eq 'table') { 
    166         $template = '/src/Model/TableModel.pm.mas'; 
    167     } else { 
    168         $template = '/src/Model/FormModel.pm.mas'; 
    169     } 
    170     $comp = $interp->make_component( 
    171             comp_file => STUBS_PATH . $template, 
    172             ); 
    173     ${$output} = ''; 
    174     $interp->exec($comp,  
    175             ( mainClass => 'EBox::' . $options->{mainClass}, 
    176               modelName => 'Settings', 
    177               printableTableName => 'Settings',  
    178               rowName   => 'Setting', 
    179               modelDomain => $options->{mainClass} 
    180               )); 
    181     write_file("$dir/Settings.pm", ${$output}); 
     150    my $dir = $options->{destdir};  
     151    my $mainClass = $options->{mainClass};  
     152    my $params = " --main-class $mainClass --name Settings" . 
     153                 " --field field1:Text --field field2:Text" . 
     154                 " --destdir $dir"; 
     155    system("ebox-moddev-model $params");  
    182156} 
    183157 
  • trunk/extra/moddev/src/ebox-moddev-create.in

    r11471 r11476  
    148148    my ($interp, $output, $options) = @_; 
    149149 
    150     my $dir = $options->{destdir} . '/src/EBox/Model'; 
    151     my $mainClass = 'Settings.pm'; 
    152     mkdir ($dir) or die "Can't create $dir"; 
    153  
    154     my $comp = $interp->make_component( 
    155             comp_file => STUBS_PATH .  '/src/Model/Makefile.am.mas', 
    156             ); 
    157     ${$output} = ''; 
    158     $interp->exec($comp,  
    159                     ( module => $options->{mainClass}, 
    160                       models => ('Settings.pm'))); 
    161     write_file($dir . '/Makefile.am', ${$output}); 
    162      
    163     # TableModel or FormModel ? 
    164     my $template; 
    165     if ($options->{model} eq 'table') { 
    166         $template = '/src/Model/TableModel.pm.mas'; 
    167     } else { 
    168         $template = '/src/Model/FormModel.pm.mas'; 
    169     } 
    170     $comp = $interp->make_component( 
    171             comp_file => STUBS_PATH . $template, 
    172             ); 
    173     ${$output} = ''; 
    174     $interp->exec($comp,  
    175             ( mainClass => 'EBox::' . $options->{mainClass}, 
    176               modelName => 'Settings', 
    177               printableTableName => 'Settings',  
    178               rowName   => 'Setting', 
    179               modelDomain => $options->{mainClass} 
    180               )); 
    181     write_file("$dir/Settings.pm", ${$output}); 
     150    my $dir = $options->{destdir};  
     151    my $mainClass = $options->{mainClass};  
     152    my $params = " --main-class $mainClass --name Settings" . 
     153                 " --field field1:Text --field field2:Text" . 
     154                 " --destdir $dir"; 
     155    system("ebox-moddev-model $params");  
    182156} 
    183157 
  • trunk/extra/moddev/src/ebox-moddev-model.in

    r11472 r11476  
    3333sub _printUsage 
    3434{ 
    35     print STDERR "\nUsage: $0 --name name --field field1:type1 [Options]\n\n"; 
     35    print STDERR "\nUsage: $0 --main-class class --name name --field field1:type1 [Options]\n\n"; 
    3636    print STDERR "Options:\n"; 
    3737    print STDERR "\t--model form | table. Default: form\n"; 
     
    4848    my %validTypes = map {$_ => 1} types(); 
    4949    my %names; 
    50  
     50    my  @fields; 
    5151    for my $pair (@{$fields}) { 
    5252        unless ($pair =~ /:/) { 
     
    6464        } else { 
    6565            $names{$name} = $type; 
    66         } 
    67     } 
    68  
    69     return %names; 
     66            push (@fields, { name => $name, type => $type}); 
     67        } 
     68    } 
     69 
     70    return \@fields; 
    7071} 
    7172 
     
    7778            destdir => undef, 
    7879            model => 'form', 
     80            mainClass => undef, 
    7981            ); 
    8082    my $help; 
     
    8284    my @fields; 
    8385    my $optionsOk = GetOptions( 
     86            'main-class=s' => \$options{mainClass}, 
    8487            'name=s' => \$options{name}, 
    8588            'fields=s' => $options{fields}, 
     
    8992            'info'  => \$info, 
    9093            ); 
    91     %options{parsedFields} = _parseFields($options{fields}); 
     94    $options{parsedFields} = _parseFields($options{fields}); 
    9295    if (not $optionsOk or $info or $help) { 
    9396        _printUsage(); 
     
    106109    } 
    107110 
    108  
    109     $options{destdir} .= '/' . $options{moduleName}; 
    110  
    111111    unless ( -d $options{destdir} ) { 
    112112        die "$options{destdir} does not exist!!"; 
     
    116116} 
    117117 
     118sub _models 
     119{ 
     120    my ($dir) = @_; 
     121    my @models ; 
     122    opendir ( my $dirFH, $dir ); 
     123    while ( defined ( my $file = readdir ( $dirFH ))) { 
     124          next unless ( $file =~ m/.*\.pm/ ); 
     125          push(@models, $file); 
     126    } 
     127    return \@models;  
     128} 
     129sub _makefile 
     130{ 
     131    my ($interp, $output, $options) = @_; 
     132 
     133    my $dir = $options->{destdir} . '/src/EBox/Model'; 
     134 
     135   my $comp = $interp->make_component( 
     136            comp_file => STUBS_PATH .  '/src/Model/Makefile.am.mas', 
     137            ); 
     138    ${$output} = ''; 
     139    $interp->exec($comp, 
     140                    ( module => $options->{mainClass}, 
     141                      models => _models($dir))); 
     142 
     143    write_file($dir . '/Makefile.am', ${$output}); 
     144} 
     145 
    118146sub _src_EBox_Model 
    119147{ 
     
    121149 
    122150    my $dir = $options->{destdir} . '/src/EBox/Model'; 
    123     my $mainClass = 'Settings.pm'; 
    124     mkdir ($dir) or die "Can't create $dir"; 
    125  
     151    my $mainClass = $options->{name} . '.pm'; 
     152    mkdir ($dir) unless (-d $dir);  
     153 
     154    # TableModel or FormModel ? 
     155    my $template = '/src/Model/FormModel.pm.mas'; 
     156    
    126157    my $comp = $interp->make_component( 
    127             comp_file => STUBS_PATH .  '/src/Model/Makefile.am.mas', 
    128             ); 
    129     ${$output} = ''; 
    130     $interp->exec($comp,  
    131                     ( module => $options->{mainClass}, 
    132                       models => ('Settings.pm'))); 
    133     write_file($dir . '/Makefile.am', ${$output}); 
    134      
    135     # TableModel or FormModel ? 
    136     my $template; 
    137     if ($options->{model} eq 'table') { 
    138         $template = '/src/Model/TableModel.pm.mas'; 
    139     } else { 
    140         $template = '/src/Model/FormModel.pm.mas'; 
    141     } 
    142     $comp = $interp->make_component( 
    143158            comp_file => STUBS_PATH . $template, 
    144159            ); 
     
    146161    $interp->exec($comp,  
    147162            ( mainClass => 'EBox::' . $options->{mainClass}, 
    148               modelName => 'Settings', 
    149               printableTableName => 'Settings',  
    150               rowName   => 'Setting', 
    151               modelDomain => $options->{mainClass} 
     163              modelName => $options->{name}, 
     164              printableTableName => $options->{name},  
     165              rowName   => $options->{name}, 
     166              modelDomain => $options->{mainClass}, 
     167              fields    => $options->{parsedFields}, 
    152168              )); 
    153     write_file("$dir/Settings.pm", ${$output}); 
     169    write_file("$dir/$mainClass", ${$output}); 
     170 
     171} 
     172 
     173sub _addModelsToMainClass 
     174{ 
     175    my ($interp, $output, $options) = @_; 
     176 
     177    my $mainClass = $options->{mainClass}; 
     178    my $file = $options->{destdir} . "/src/EBox/$mainClass.pm"; 
     179    my $dir = $options->{destdir} . "/src/EBox/Model"; 
     180 
     181    my $code = "    return [\n"; 
     182    for my $model (@{_models($dir)}) { 
     183        $code .= ' ' x 8; 
     184        $code .= "'EBox::${mainClass}::Model::$model',\n"; 
     185    } 
     186    $code .= "    ];\n"; 
     187 
     188    my $fd; 
     189    open($fd, $file) or die "Can open $file\n"; 
     190    my @oldFile = <$fd>; 
     191    close($fd); 
     192     
     193    open($fd, ">$file"); 
     194    my $inFunction = undef; 
     195    for my $line (@oldFile) { 
     196        if ($line =~ /sub modelClasses/) { 
     197            $inFunction = 1;     
     198        } elsif ($inFunction and $line =~ /{/) { 
     199            print $fd "{\n$code"; 
     200            next; 
     201        } elsif ($inFunction and $line =~ /}/) { 
     202            $inFunction = undef 
     203        }  elsif ($inFunction) { 
     204            next; 
     205        } 
     206        print $fd $line; 
     207    } 
     208    close($fd); 
    154209} 
    155210 
     
    160215 
    161216    my $dir = $options->{destdir}; 
    162      
    163     mkdir $dir or die "Can't create dir $dir"; 
    164217     
    165218    my $output; 
     
    168221 
    169222   _src_EBox_Model($interp, \$output, $options); 
     223   _makefile($interp, \$output, $options); 
     224   _addModelsToMainClass($interp, \$output, $options); 
    170225 
    171226} 
  • trunk/extra/moddev/stubs/Makefile.am

    r11471 r11476  
    5151 
    5252EXTRA_DIST = $(stubs_DATA) $(stubsdebian_DATA) $(stubsm4_DATA) \ 
    53         $(stubsmigration_DATA) $(stubsschema_DATA) $(stubssrc_DATA) \ 
     53        $(stubsmigration_DATA) $(stubsschemas_DATA) $(stubssrc_DATA) \ 
    5454        $(stubsmodel_DATA) $(stubstools_DATA) $(stubsstubs_DATA) 
    5555 
  • trunk/extra/moddev/stubs/src/MainClass.pm.mas

    r11471 r11476  
    5959# 
    6060#       <EBox::Model::ModelProvider::modelClasses> 
    61 sub modelClasses { 
     61sub modelClasses  
     62{ 
    6263    my ($self) = @_; 
    6364 
  • trunk/extra/moddev/stubs/src/Model/FormModel.pm.mas

    r11471 r11476  
    55    $rowName 
    66    $modelDomain 
     7    $modelType => 'form' 
     8    @fields => () 
    79</%args> 
    810# Copyright   
     
    3537use warnings; 
    3638 
     39% if ($modelType eq 'form') { 
    3740use base 'EBox::Model::DataForm'; 
     41% } else { 
     42use base 'EBox::Model::DataTable'; 
     43% } 
    3844 
    3945sub new  
     
    5359    my @tableHead =  
    5460    (  
    55         new EBox::Types::Text( 
    56             'fieldName' => 'field1', 
    57             'printableName' => __('Field 1'), 
     61% for my $field (@fields) { 
     62        new EBox::Types::<% $field->{type} %>( 
     63            'fieldName' => '<% $field->{name} %>', 
     64            'printableName' => __('<% $field->{name} %>'), 
    5865            'size' => '8', 
    5966            'unique' => 1, 
    6067            'editable' => 1 
    6168        ), 
    62         new EBox::Types::Text( 
    63             'fieldName' => 'field2', 
    64             'printableName' => __('Field 2'), 
    65             'size' => '8', 
    66             'unique' => 1, 
    67             'editable' => 1 
    68         ), 
     69% } 
    6970    ); 
    70  
    7171    my $dataTable =  
    7272    {