package ext;

import java.io.*;
import java.util.*;
import java.text.*;

import wt.query.*;
import wt.fc.*;

import wt.team.Team;
import wt.project.Role;
import wt.inf.team.ContainerTeam;
import wt.project.Role;

import wt.org.*;
import wt.org.WTUser;
import wt.org.WTOrganization;
import wt.org.WTGroup;
import wt.org.WTPrincipal;
import wt.org.WTPrincipalReference;

import wt.inf.team.*;
import wt.inf.container.*;
import wt.inf.container.WTContainer;

import wt.projmgmt.admin.*;

import wt.method.RemoteMethodServer;
import wt.httpgw.GatewayAuthenticator;

public class TeamRoleParticipants{

	static File outPath;
	static PrintWriter printwriter;

	public static void main(String[] args) throws Exception{

		RemoteMethodServer rms = RemoteMethodServer.getDefault();
		GatewayAuthenticator auth = new GatewayAuthenticator();
		auth.setRemoteUser("wcadmin");
		rms.setAuthenticator(auth);

		boolean writeFlag = false;

        if(args.length == 1)
        {
			writeFlag = true;
			SimpleDateFormat df = new SimpleDateFormat ("MMddyy_HHmmss", Locale.getDefault());
			java.util.Date tm = new java.util.Date();
			String dtStg = df.format(tm);

			outPath = new File(args[0]+"\\TeamRoleParticipants_"+dtStg+".txt");
			System.out.println( "\nWriting Ouput to File: "+args[0]+"\\TeamRoleParticipants_"+dtStg+".txt\n" );
		}

		if(writeFlag)
			printwriter = new PrintWriter(new FileWriter(outPath));

		QueryResult resCTT=PersistenceHelper.manager.find(new QuerySpec(ContainerTeam.class));
		while(resCTT.hasMoreElements()) {
			ContainerTeam contTeam = (ContainerTeam)resCTT.nextElement();
			System.out.println( "\nContainerTeam: " + contTeam.getName()+"\n" );
			if(writeFlag)
				printwriter.println((new StringBuilder()).append("\nContainerTeam: " + contTeam.getName()+"\n").toString());

			Vector vector = contTeam.getRoles();
			int i = vector.size();
		label0:
			for(int j = 0; j < i; j++)
			{
				Role role = (Role)vector.get(j);
				System.out.println("\tRole: "+role.getDisplay());
				if(writeFlag)
					printwriter.println((new StringBuilder()).append("\tRole: "+role.getDisplay()).toString());

				ArrayList arraylist = contTeam.getAllPrincipalsForTarget(role);

				int k = 0;
				do
				{
					if(k >= arraylist.size()) {
						continue label0;
					}
					WTPrincipalReference wtprincipalreference1 = (WTPrincipalReference)(WTPrincipalReference)arraylist.get(k);
					WTPrincipal wtprincipal = (WTPrincipal)wtprincipalreference1.getObject();
					if(wtprincipal instanceof WTUser) {
						WTUser wtuser = (WTUser)wtprincipal;
						System.out.println( "\t\tUser: "+wtuser.getName());
						if(writeFlag)
							printwriter.println((new StringBuilder()).append("\t\tUser: "+wtuser.getName()).toString());
					}
					else if(wtprincipal instanceof WTGroup)
					{
						WTGroup wtgroup = (WTGroup)wtprincipal;
						System.out.println( "\t\tGroup: "+wtgroup.getName());
						if(writeFlag)
							printwriter.println((new StringBuilder()).append("\t\tGroup: "+wtgroup.getName()).toString());

							for(Enumeration enumeration = wtgroup.members(); enumeration.hasMoreElements();)
							{
								WTUser wtuser = (WTUser)enumeration.nextElement();
								System.out.println( "\t\t\tUser: "+wtuser.getName());
								if(writeFlag)
									printwriter.println((new StringBuilder()).append("\t\t\tUser: "+wtuser.getName()).toString());
							}
					}
					else if(wtprincipal instanceof WTOrganization)
					{
						WTOrganization wtorg = (WTOrganization)wtprincipal;
						System.out.println( "\t\tOrg: "+wtorg.getName());
						if(writeFlag)
							printwriter.println((new StringBuilder()).append("\t\tOrg: "+wtorg.getName()).toString());;
					}
					k++;
				} while(true);
			}
		}

		System.out.println("\nNumber of ContainerTeams: "+resCTT.size() + "\n");
		if(writeFlag) {
			printwriter.println((new StringBuilder()).append("\nNumber of ContainerTeams: "+resCTT.size() + "\n").toString());
			printwriter.flush();
			printwriter.close();
		}
	}
}
