my ($TAM, $ARQ);
$TAM = $ARGV[0];

`md $TAM`;
`md $TAM\\br`;
`md $TAM\\br\\usp`;
`md $TAM\\br\\usp\\ime`;
`md $TAM\\br\\usp\\ime\\samples`;
`md $TAM\\br\\usp\\ime\\samples\\foo`;
`md $TAM\\META-INF`;
geraInterface($TAM);
geraBean($TAM);
geraHome($TAM);
geraXML($TAM);


## Funcao que gera a interface do componente EJB
sub geraInterface {
  my $TAM = $_[0];
  my $ARQ = $TAM.'\br\usp\ime\samples\foo\foocom'.$TAM.'.java';
  
  open(ARQ,">$ARQ") || die "Erro na abertura do arquivo $ARQ";
  
	print ARQ "package br.usp.ime.samples.foo;\n";
	print ARQ "\n";
	print ARQ "import javax.ejb.EJBObject;\n";
	print ARQ "import java.rmi.RemoteException;\n";
	print ARQ "\n";
	print ARQ "public interface foocom${TAM} extends EJBObject\n";
	print ARQ "{\n";
	print ARQ "\n";
	print ARQ "\n";
  $TAM = 1;
	for($i=0;$i<$TAM;$i++) {
			print ARQ "	public int met${i}\(\) throws RemoteException;\n";
	}
	print ARQ "}\n";
	print ARQ "\n";
	print ARQ "\n";
  close ARQ;
}

## Funcao que gera o componente do componente EJB
sub geraBean {
  my $TAM = $_[0];
  my $ARQ = $TAM.'\br\usp\ime\samples\foo\foocom'.$TAM.'Bean.java';
  
  open(ARQ,">$ARQ") || die "Erro na abertura do arquivo $ARQ";
  
	print ARQ "	package br.usp.ime.samples.foo;\n";
	print ARQ "\n";
	print ARQ "	import java.rmi.RemoteException;\n";
	print ARQ "	import javax.ejb.SessionBean;\n";
	print ARQ "	import javax.ejb.SessionContext;\n";
	print ARQ "	import javax.ejb.EJBException;\n";
	print ARQ "	import javax.naming.*;\n";
	print ARQ "\n";
	print ARQ "\n";
	print ARQ "	public class foocom${TAM}Bean implements SessionBean\n";
	print ARQ "	{\n";
	for($i=0;$i<$TAM;$i++) {
	  print ARQ "	private int x$i = 0;\n";
  }
  for ($i=0;$i<$TAM;$i++) {
    print ARQ " private String xs$i = \"";
    for ($j=$i;$j<$i+20;$j++) {
      print ARQ "$j";
    }
    print ARQ "\";\n";
  }
	print ARQ "\n";
	for($i=0;$i<$TAM;$i++) {
#	for($i=0;$i<1;$i++) {
			print ARQ "  public int met${i}\(\) \n";
			print ARQ "  {\n";
			print ARQ " 		x${i} += ${i};\n";
			print ARQ " 		return x${i};\n";
			print ARQ " 	}\n";
			print ARQ "\n";
	}
	print ARQ "	/**\n";
	print ARQ "	Empty method body\n";
	print ARQ "	*/\n";
	print ARQ "	public foocom${TAM}Bean() \{\}\n";
	print ARQ "	/**\n";
	print ARQ "	Empty method body\n";
	print ARQ "	*/\n";
	print ARQ "	public void ejbCreate() \{\}\n";
	print ARQ "	/**\n";
	print ARQ "	Empty method body\n";
	print ARQ "	*/\n";
	print ARQ "	public void ejbRemove() \{\}\n";
	print ARQ "	/**\n";
	print ARQ "	Empty method body\n";
	print ARQ "	*/\n";
	print ARQ "	public void ejbActivate() \{\}\n";
	print ARQ "	/**\n";
	print ARQ "	Empty method body\n";
	print ARQ "	*/\n";
	print ARQ "	public void ejbPassivate() \{\}\n";
	print ARQ "	/**\n";
	print ARQ "	Empty method body\n";
	print ARQ "	*/\n";
	print ARQ "	public void setSessionContext(SessionContext sc) \{\}\n";
	print ARQ "	}\n";
	print ARQ "\n";
	print ARQ "\n";
	print ARQ "\n";
  close ARQ;
}

sub geraHome {
  my $TAM = $_[0];
  my $ARQ = $TAM.'\br\usp\ime\samples\foo\foocom'.$TAM.'Home.java';
  
  open(ARQ,">$ARQ") || die "Erro na abertura do arquivo $ARQ";
	print ARQ "package br.usp.ime.samples.foo;\n";
	print ARQ "\n";
	print ARQ "import java.io.Serializable;\n";
	print ARQ "import java.rmi.RemoteException;\n";
	print ARQ "import javax.ejb.CreateException;\n";
	print ARQ "import javax.ejb.EJBHome;\n";
	print ARQ "\n";
	print ARQ "public interface foocom${TAM}Home extends EJBHome\n";
	print ARQ "{\n";
	print ARQ "foocom${TAM} create() throws RemoteException, CreateException;\n";
	print ARQ "}\n";

  close ARQ;
}

sub geraXML {
  my $TAM = $_[0];
  my $ARQ = $TAM.'\META-INF\ejb-jar.xml';
  
  open(ARQ,">$ARQ") || die "Erro na abertura do arquivo $ARQ";
	print ARQ "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n";
	print ARQ "\n";
	print ARQ "<ejb-jar>\n";
	print ARQ "  <description>jBoss test application </description>\n";
	print ARQ "  <display-name>Test $TAM</display-name>\n";
	print ARQ "  <enterprise-beans>\n";
	print ARQ "    <session>\n";
	print ARQ "      <ejb-name>foocom$TAM</ejb-name>\n";
	print ARQ "      <home>br.usp.ime.samples.foo.foocom${TAM}Home</home>\n";
	print ARQ "      <remote>br.usp.ime.samples.foo.foocom${TAM}</remote>\n";
	print ARQ "      <ejb-class>br.usp.ime.samples.foo.foocom${TAM}Bean</ejb-class>\n";
	print ARQ "      <session-type>Stateless</session-type>\n";
	print ARQ "      <transaction-type>Bean</transaction-type>\n";
	print ARQ "\n";
	print ARQ "    </session>\n";
	print ARQ "  </enterprise-beans>\n";
	print ARQ "</ejb-jar>\n";
	print ARQ "\n";
	close ARQ;
	
	$ARQ = $TAM.'\META-INF\jboss.xml';
  open(ARQ,">$ARQ") || die "Erro na abertura do arquivo $ARQ";
	print ARQ "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n";
	print ARQ "\n";
	print ARQ "<jboss>\n";
	print ARQ "  <enterprise-beans>\n";
	print ARQ "     <session>\n";
	print ARQ "       <ejb-name>foocom${TAM}</ejb-name>\n";
	print ARQ "       <jndi-name>samples/foocom${TAM}</jndi-name>\n";
	print ARQ "     </session>\n";
	print ARQ "  </enterprise-beans>\n";
	print ARQ "</jboss>\n";
	close ARQ;
	
	$ARQ = $TAM.'\META-INF\autoconf.xml';
  open(ARQ,">$ARQ") || die "Erro na abertura do arquivo $ARQ";
	print ARQ "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n";
	print ARQ "\n";
		print ARQ "	<AutoConf>\n";
	print ARQ "	  <enterprise-beans>\n";
	print ARQ "	    <session>\n";
	print ARQ "	      <ejb-name>foocom${TAM}</ejb-name>\n";
	print ARQ "	      <directory-service>\n";
	print ARQ "	        <Context>\n";
	print ARQ "	          <Name>cn</Name>\n";
	print ARQ "	          <Value>new</Value>\n";
	print ARQ "	          <Context>\n";
	print ARQ "						<Name>cn</Name>\n";
	print ARQ "	          <Value>old</Value>\n";
	print ARQ "	          <Attribute>\n";
	print ARQ "							<Name>ou</Name>\n";
	print ARQ "							<Value>foocom${TAM}</Value>\n";
	print ARQ "						</Attribute>\n";
	print ARQ "						</Context>\n";
	print ARQ "	        </Context>\n";
	print ARQ "	      </directory-service>\n";
	print ARQ "	    </session>\n";
	print ARQ "	  </enterprise-beans>	\n";
	print ARQ "  </AutoConf>\n";
	close ARQ;

	$ARQ = $TAM.'\build.bat';
  open(ARQ,">$ARQ") || die "Erro na abertura do arquivo $ARQ";
  print ARQ 'javac -classpath d:\master\herbert\jboss-all\build\output\jboss-3.1.0alpha\client\jboss-j2ee.jar;. br\usp\ime\samples\foo\foo*.java'."\n";
	print ARQ 'jar cvf foo'.$TAM.'.jar br\usp\ime\samples\foo\foo*.class META-INF'."\n";
	close ARQ;
}