#!/usr/bin/perl # Template creator tool use Getopt::Long; my %options; my ($dest, $prefix, $postfix, $package, $neutral); $ok = GetOptions(\%options, "package=s", "prefix=s", "postfix=s", "output=s", "neutral", "repetitions!"); ($dest, $prefix, $postfix, $package, $neutral) = ($options{'output'}, $options{'prefix'}, $options{'postfix'}, $options{'package'}, $options{'neutral'}); $ok = $ok && defined($dest) && defined($dest) && defined($prefix) && defined($postfix) && defined($package); if(!$ok) { die(q( Use this tool to easily create your own look from the ERDirectToWebJava templates It creates subclasses for every class whose name ends with "Template" and pre- and postfixes those with supplied parameters: ERD2WInspectPage -> CMSInspectPagePlain it will also create a d2wmodel that contains rules like *true* -> templateNameForInspectPage = "CMSInspectPagePlain" (20) Usage: template_creator.pl -package com.foo package name for the templates -prefix BAS prefix for the templates -postfix AdminPage postfix for the templates -output BASLook destination directory -neutral use ERNeutralLook instead of ERD2W ) . "\n"); } if($neutral) { # you may need to adjust this path # ERNeutralLook has "standard" pages $pathToERDirectToWeb = "~/Roots/ERNeutralLook.framework/Resources/"; die("Can't find $pathToERDirectToWeb") if(!-e $pathToERDirectToWeb); $pattern = 'ERNEU(.*?)Page'; $Nonlocalized = ""; $Suffix = "Page.wo"; } else { # ERD2W has more experimental but advanced pages $pathToERDirectToWeb = "~/Roots/ERDirectToWeb.framework/Resources/"; # die("Can't find $pathToERDirectToWeb") if(!-e $pathToERDirectToWeb); $pattern = 'ERD2W(.*?)PageTemplate'; $Nonlocalized = ""; $Suffix = "Template.wo"; } #$dest = "tmp"; $packageDir = $package; $packageDir =~ s|\.|/|g; $cmd = "find $pathToERDirectToWeb -name \\*$Suffix -type d |grep -v CVS"; #warn $cmd; @files = `$cmd`; foreach $file (@files) { if($file =~ m|(.*?)/([A-Za-z0-9_]+)\.wo|) { ($source, $class) = ($1, $2); if($class =~ m|$pattern|) { $typeName = "$1"; $newClass = "$prefix$typeName$postfix"; warn "creating $newClass\n"; system "mkdir -p $dest/Sources/$packageDir" if (!-e "$dest/Sources/$packageDir/"); open OUT, ">$dest/Sources/$packageDir/$newClass.java" || die("Can't open $dest/Sources/$packageDir/$newClass.java"); print OUT "package $package;\n"; print OUT "import com.webobjects.appserver.*;\n"; print OUT "import com.webobjects.directtoweb.*;\n"; print OUT "import er.extensions.*;\n"; print OUT "import er.directtoweb.*;\n"; print OUT "public class $newClass extends $class {\n"; print OUT "\tpublic $newClass(WOContext wocontext) {\n"; print OUT "\t\tsuper(wocontext);\n"; print OUT "\t\}\n\n}\n"; close OUT; system "mkdir -p $dest/Components/Nonlocalized.lproj" if(!-e "$dest/Components/Nonlocalized.lproj"); system "rm -rf $dest/Components/Nonlocalized.lproj/$newClass.wo" if(-e "$dest/Components/Nonlocalized.lproj/$newClass.wo"); system "cp -r $source/$Nonlocalized$class.wo $dest/Components/Nonlocalized.lproj/$newClass.wo"; system "cp -r $source/$class.api $dest/Components/$newClass.api"; system "rm -rf $dest/Components/Nonlocalized.lproj/$newClass.wo/CVS"; # print "~/Roots/PBXTool $dest/IDE/*.pbproj/project.pbxproj $newClass $newClass.java $newClass.api $newClass.wo\n"; $classes .= " $newClass "; system "mv $dest/Components/Nonlocalized.lproj/$newClass.wo/$class.html $dest/Components/Nonlocalized.lproj/$newClass.wo/$newClass.html"; system "mv $dest/Components/Nonlocalized.lproj/$newClass.wo/$class.wod $dest/Components/Nonlocalized.lproj/$newClass.wo/$newClass.wod"; system "mv $dest/Components/Nonlocalized.lproj/$newClass.wo/$class.woo $dest/Components/Nonlocalized.lproj/$newClass.wo/$newClass.woo"; $rules .= " { author = 20; class = com.webobjects.directtoweb.Rule; rhs = { class = com.webobjects.directtoweb.Assignment; keyPath = templateNameFor$typeName" . "Page; value = $newClass; }; },"; } } } chop($rules); system "mkdir -p $dest/Resources/"; # print "~/Roots/PBXTool $dest/*.pbproj/project.pbxproj 'Components' $classes\n"; open D2W, ">$dest/Resources/d2w.d2wmodel" || die("Can't open $dest/Resources/d2w.d2wmodel"); print D2W "{ rules = ( $rules );}"; close D2W; open D2W, ">$dest/.classpath" || die("Can't open $dest/.classpath"); print D2W q( ); close D2W; open D2W, ">$dest/.project" || die("Can't open $dest/.project"); print D2W q( ) . $dest . q( org.eclipse.jdt.core.javabuilder org.objectstyle.wolips.incrementalbuilder org.eclipse.jdt.core.javanature org.objectstyle.wolips.incrementalframeworknature ); close D2W;