// Decompiled by Jad v1.5.8e. Copyright 2001 Pavel Kouznetsov.
// Jad home page: http://www.geocities.com/kpdus/jad.html
// Decompiler options: packimports(3) 
// Source File Name:   PrepareForUpgrade.java

package wt.epm.upgrade;

import java.io.*;
import java.util.*;
import wt.epm.*;
import wt.epm.workspaces.EPMWorkspace;
import wt.fc.*;
import wt.feedback.StatusFeedback;
import wt.folder.*;
import wt.identity.IdentityFactory;
import wt.method.*;
import wt.org.WTPrincipalReference;
import wt.part.WTPart;
import wt.query.*;
import wt.session.SessionHelper;
import wt.session.SessionManager;
import wt.util.*;
import wt.vc.VersionControlHelper;
import wt.vc.wip.*;

public class PrepareForUpgrade
{
    public static class Server
        implements RemoteAccess
    {

        public static Boolean purge()
            throws WTException, IOException, WTPropertyVetoException
        {
            int i;
            int j;
            i = 0;
            j = 0;
            FileWriter filewriter;
            File file = new File(WTProperties.getLocalProperties().getProperty("wt.logs.dir"));
            File file1 = new File(file, "EPMPrepareForUpgrade.log");
            filewriter = new FileWriter(file1);
            Boolean boolean1;
            try
            {
                filewriter.write("\n");
                filewriter.write("STATUS: Starting PrepareForUpgrade ...");
                QueryResult queryresult = getWorkspacesWithModifiables(filewriter);
                if(queryresult.size() <= 0)
                    break MISSING_BLOCK_LABEL_483;
                HashMap hashmap = new HashMap(queryresult.size());
                do
                {
                    if(!queryresult.hasMoreElements())
                        break;
                    Object aobj[] = (Object[])queryresult.nextElement();
                    long l = ((Number)aobj[0]).longValue();
                    if(hashmap.get(new Long(l)) == null)
                    {
                        ObjectIdentifier objectidentifier = new ObjectIdentifier(PrepareForUpgrade.class$wt$epm$workspaces$EPMWorkspace != null ? PrepareForUpgrade.class$wt$epm$workspaces$EPMWorkspace : (PrepareForUpgrade.class$wt$epm$workspaces$EPMWorkspace = PrepareForUpgrade._mthclass$("wt.epm.workspaces.EPMWorkspace")), l);
                        EPMWorkspace epmworkspace = (EPMWorkspace)ObjectReference.newObjectReference(objectidentifier).getObject();
                        hashmap.put(new Long(l), epmworkspace);
                        filewriter.write("\n STATUS: Processing workspace " + epmworkspace.getName() + "[" + epmworkspace.getPrincipalReference().getName() + "] ...");
                        try
                        {
                            purgeModifiables(epmworkspace, filewriter);
                            filewriter.write("\n STATUS: Completed processing workspace " + epmworkspace.getName() + "[" + epmworkspace.getPrincipalReference().getName() + "]");
                            i++;
                        }
                        catch(Exception exception)
                        {
                            exception.printStackTrace();
                            filewriter.write("\n WARNING: " + epmworkspace.getName() + "[" + epmworkspace.getPrincipalReference().getName() + "] processing failed.");
                            j++;
                        }
                    }
                } while(true);
                filewriter.write("\n SUMMARY: Number of workspace successfully processed: " + i);
                println("SUMMARY: Number of workspace successfully processed: " + i);
                filewriter.write("\n SUMMARY: Number of workspace with failures: " + j);
                println("SUMMARY: Number of workspace with failures: " + j);
                boolean1 = j <= 0 ? Boolean.TRUE : Boolean.FALSE;
            }
            catch(WTPropertyVetoException wtpropertyvetoexception)
            {
                throw new WTException(wtpropertyvetoexception);
            }
            finally
            {
                filewriter.close();
                throw exception1;
            }
            filewriter.close();
            return boolean1;
            filewriter.close();
            break MISSING_BLOCK_LABEL_521;
            IOException ioexception;
            ioexception;
            ioexception.printStackTrace();
            return Boolean.TRUE;
        }

        static QueryResult getWorkspacesWithModifiables(FileWriter filewriter)
            throws WTException, WTPropertyVetoException, IOException
        {
            String s = ".key.id";
            QuerySpec queryspec = new QuerySpec();
            int i = queryspec.appendClassList(PrepareForUpgrade.class$wt$epm$workspaces$EPMWorkspace != null ? PrepareForUpgrade.class$wt$epm$workspaces$EPMWorkspace : (PrepareForUpgrade.class$wt$epm$workspaces$EPMWorkspace = PrepareForUpgrade._mthclass$("wt.epm.workspaces.EPMWorkspace")), false);
            int j = queryspec.appendClassList(PrepareForUpgrade.class$wt$vc$baseline$BaselineMember != null ? PrepareForUpgrade.class$wt$vc$baseline$BaselineMember : (PrepareForUpgrade.class$wt$vc$baseline$BaselineMember = PrepareForUpgrade._mthclass$("wt.vc.baseline.BaselineMember")), false);
            int k = queryspec.appendClassList(PrepareForUpgrade.class$wt$enterprise$RevisionControlled != null ? PrepareForUpgrade.class$wt$enterprise$RevisionControlled : (PrepareForUpgrade.class$wt$enterprise$RevisionControlled = PrepareForUpgrade._mthclass$("wt.enterprise.RevisionControlled")), false);
            int l = queryspec.appendClassList(PrepareForUpgrade.class$wt$folder$IteratedFolderMemberLink != null ? PrepareForUpgrade.class$wt$folder$IteratedFolderMemberLink : (PrepareForUpgrade.class$wt$folder$IteratedFolderMemberLink = PrepareForUpgrade._mthclass$("wt.folder.IteratedFolderMemberLink")), false);
            queryspec.appendSelectAttribute("thePersistInfo.theObjectIdentifier.id", i, false);
            queryspec.appendWhere(new SearchCondition(new ClassAttribute(PrepareForUpgrade.class$wt$epm$workspaces$EPMWorkspace != null ? PrepareForUpgrade.class$wt$epm$workspaces$EPMWorkspace : (PrepareForUpgrade.class$wt$epm$workspaces$EPMWorkspace = PrepareForUpgrade._mthclass$("wt.epm.workspaces.EPMWorkspace")), "checkpointReference" + s), "=", new ClassAttribute(PrepareForUpgrade.class$wt$vc$baseline$BaselineMember != null ? PrepareForUpgrade.class$wt$vc$baseline$BaselineMember : (PrepareForUpgrade.class$wt$vc$baseline$BaselineMember = PrepareForUpgrade._mthclass$("wt.vc.baseline.BaselineMember")), "roleAObjectRef.key.id")), i, j);
            queryspec.appendAnd();
            queryspec.appendWhere(new SearchCondition(new ClassAttribute(PrepareForUpgrade.class$wt$vc$baseline$BaselineMember != null ? PrepareForUpgrade.class$wt$vc$baseline$BaselineMember : (PrepareForUpgrade.class$wt$vc$baseline$BaselineMember = PrepareForUpgrade._mthclass$("wt.vc.baseline.BaselineMember")), "roleBObjectRef.key.id"), "=", new ClassAttribute(PrepareForUpgrade.class$wt$enterprise$RevisionControlled != null ? PrepareForUpgrade.class$wt$enterprise$RevisionControlled : (PrepareForUpgrade.class$wt$enterprise$RevisionControlled = PrepareForUpgrade._mthclass$("wt.enterprise.RevisionControlled")), "thePersistInfo.theObjectIdentifier.id")), j, k);
            queryspec.appendAnd();
            queryspec.appendSearchCondition(VersionControlHelper.getSearchCondition(PrepareForUpgrade.class$wt$enterprise$RevisionControlled != null ? PrepareForUpgrade.class$wt$enterprise$RevisionControlled : (PrepareForUpgrade.class$wt$enterprise$RevisionControlled = PrepareForUpgrade._mthclass$("wt.enterprise.RevisionControlled")), true), k, -1);
            queryspec.appendAnd();
            queryspec.appendWhere(new SearchCondition(new ClassAttribute(PrepareForUpgrade.class$wt$folder$IteratedFolderMemberLink != null ? PrepareForUpgrade.class$wt$folder$IteratedFolderMemberLink : (PrepareForUpgrade.class$wt$folder$IteratedFolderMemberLink = PrepareForUpgrade._mthclass$("wt.folder.IteratedFolderMemberLink")), "roleAObjectRef.key.id"), "=", new ClassAttribute(PrepareForUpgrade.class$wt$epm$workspaces$EPMWorkspace != null ? PrepareForUpgrade.class$wt$epm$workspaces$EPMWorkspace : (PrepareForUpgrade.class$wt$epm$workspaces$EPMWorkspace = PrepareForUpgrade._mthclass$("wt.epm.workspaces.EPMWorkspace")), "folderReference" + s)), l, i);
            queryspec.appendAnd();
            queryspec.appendWhere(new SearchCondition(new ClassAttribute(PrepareForUpgrade.class$wt$folder$IteratedFolderMemberLink != null ? PrepareForUpgrade.class$wt$folder$IteratedFolderMemberLink : (PrepareForUpgrade.class$wt$folder$IteratedFolderMemberLink = PrepareForUpgrade._mthclass$("wt.folder.IteratedFolderMemberLink")), "roleBObjectRef.key.branchId"), "=", new ClassAttribute(PrepareForUpgrade.class$wt$enterprise$RevisionControlled != null ? PrepareForUpgrade.class$wt$enterprise$RevisionControlled : (PrepareForUpgrade.class$wt$enterprise$RevisionControlled = PrepareForUpgrade._mthclass$("wt.enterprise.RevisionControlled")), "iterationInfo.branchId")), l, k);
            filewriter.write("\n INFO: Querying for workspaces to be processed ...");
            QueryResult queryresult = PersistenceHelper.manager.find(queryspec);
            if(queryresult.size() == 0)
            {
                println("INFO: No workspaces containing new or checked-out objects found.");
                filewriter.write("\n INFO: No workspaces containing new or checked-out objects found.");
            } else
            {
                println("INFO: Found workspaces containing new and/or checked-out objects.");
                filewriter.write("\n INFO: Found workspaces containing new and/or checked-out objects.");
            }
            return queryresult;
        }

        static void purgeModifiables(EPMWorkspace epmworkspace, FileWriter filewriter)
            throws WTException, IOException
        {
            if(epmworkspace == null)
                return;
            Folder folder = epmworkspace.getFolder();
            if(folder == null)
                return;
            QueryResult queryresult = FolderHelper.service.findFolderContents(folder);
            ArrayList arraylist = new ArrayList();
            ArrayList arraylist1 = new ArrayList();
            String s = folder.getFolderPath();
            do
            {
                if(!queryresult.hasMoreElements())
                    break;
                FolderEntry folderentry = (FolderEntry)queryresult.nextElement();
                if((folderentry instanceof Workable) && WorkInProgressHelper.isWorkingCopy((Workable)folderentry))
                {
                    arraylist.add(folderentry);
                } else
                {
                    String s1 = FolderHelper.getLocation(folderentry);
                    if(s.equals(s1) && ((folderentry instanceof EPMDocument) || (folderentry instanceof WTPart)))
                        arraylist1.add(folderentry);
                }
            } while(true);
            filewriter.write("\n INFO: Number of checked-out objects : " + arraylist.size());
            filewriter.write("\n INFO: Number of new objects : " + arraylist1.size());
            if(arraylist.size() > 0)
            {
                Workable aworkable[] = (Workable[])arraylist.toArray(new Workable[arraylist.size()]);
                MultiWorkInProgressServiceFwd multiworkinprogressservicefwd = new MultiWorkInProgressServiceFwd();
                filewriter.write("\n INFO: Performing undo-checkout of following objects:");
                listObjects(arraylist, filewriter);
                try
                {
                    multiworkinprogressservicefwd.undoCheckout(aworkable, true);
                }
                catch(WTException wtexception)
                {
                    wtexception.printStackTrace();
                    throw wtexception;
                }
                filewriter.write("\n INFO: Undo Checkout completed.");
            }
            if(arraylist1.size() > 0)
            {
                filewriter.write("\n INFO: Deleting following new objects:");
                listObjects(arraylist1, filewriter);
                EPMDocumentHelper.service.deleteObjects(arraylist1);
                filewriter.write("\n INFO: Deletion completed.");
            }
        }

        static void listObjects(Collection collection, FileWriter filewriter)
            throws IOException
        {
            Object obj;
            for(Iterator iterator = collection.iterator(); iterator.hasNext(); filewriter.write("\n \t\t" + IdentityFactory.getDisplayIdentity(obj)))
                obj = iterator.next();

        }

        private static boolean runningOnServer()
        {
            return RemoteMethodServer.ServerFlag;
        }

        public static void println(String s)
        {
            if(runningOnServer())
                MethodContext.getContext().sendFeedback(new StatusFeedback(s));
            System.out.println(s);
        }

        public Server()
        {
        }
    }


    public PrepareForUpgrade()
    {
    }

    public static void main(String args[])
        throws WTException
    {
        Boolean boolean1 = Boolean.FALSE;
        try
        {
            String s = (wt.epm.upgrade.PrepareForUpgrade.class).getName() + "$Server";
            System.out.println("STATUS: Starting PrepareForUpgrade ...");
            SessionHelper.manager.getPrincipal();
            EPMContextHelper.setApplication(EPMApplicationType.getEPMApplicationTypeDefault());
            boolean1 = (Boolean)RemoteMethodServer.getDefault().invoke("purge", s, null, new Class[0], args);
        }
        catch(Exception exception)
        {
            exception.printStackTrace();
            System.out.println("STATUS: PrepareForUpgrade failed... Please check the PrepareForUpgrade log in the logs directory... ");
            System.exit(-1);
        }
        if(boolean1.booleanValue())
            System.out.println("STATUS: PrepareForUpgrade completed successfully...Please check the PrepareForUpgrade log in the logs directory... ");
        else
            System.out.println("STATUS: PrepareForUpgrade completed with errors....Please check the PrepareForUpgrade log in the logs directory... ");
        System.exit(0);
    }

    static Class class$wt$epm$workspaces$EPMWorkspace; /* synthetic field */
    static Class class$wt$vc$baseline$BaselineMember; /* synthetic field */
    static Class class$wt$enterprise$RevisionControlled; /* synthetic field */
    static Class class$wt$folder$IteratedFolderMemberLink; /* synthetic field */
}
