Subversion Repository Public Repository

litesoft

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
// This Source Code is in the Public Domain per: http://unlicense.org
package org.litesoft.GWT.client.nonpublic;

import org.litesoft.GWT.client.*;
import org.litesoft.logger.*;

import com.google.gwt.core.client.*;

import java.util.*;

import static org.litesoft.GWT.client.nonpublic.NativeExtendedFamilyManagerSupport.*;

public class ExtendedFamilyManager {
    public static final Logger LOGGER = LoggerFactory.getLogger( ExtendedFamilyManager.class );

    /**
     * Ancestors: 0 - Parent, 1 - GrandParent, 2 - ...
     */
    private static List<JavaScriptObject> sAncestorWinHandles = new ArrayList<JavaScriptObject>();

    public static void initialize( boolean pAllowUsToBeGrandPoobah ) {
        buildAncestry();
        CookieNet.initialize( pAllowUsToBeGrandPoobah );
    }

    public static boolean buildAncestry() {
        buildCurrentlyActiveDirectAncestry();
        int zCurrentAncestors = sAncestorWinHandles.size() - 1;
        if ( zCurrentAncestors != -1 ) {
            JavaScriptObject zAncestorHandle = LLgetAncestor( zCurrentAncestors );
            for ( int i = 0; true; i++ ) {
                LOGGER.debug.log( "getAncestorIndexedWinHandle( ", zCurrentAncestors, ", ", i, " )" );
                JavaScriptObject zHandle = getAncestorIndexedWinHandle( zAncestorHandle, i );
                if ( zHandle == null ) {
                    break;
                }
                registerAncestor( zHandle );
            }
        }
        return !sAncestorWinHandles.isEmpty();
    }

    private static JavaScriptObject LLgetAncestor( int pIndex ) {
        if ( ((0 <= pIndex) && (pIndex < sAncestorWinHandles.size())) ) {
            JavaScriptObject zAncestorWinHandle = sAncestorWinHandles.get( pIndex );
            if ( zAncestorWinHandle != null ) {
                LOGGER.debug.log( "getAncestor( ", pIndex, " ): Returned!" );
                return zAncestorWinHandle;
            }
        }
        LOGGER.debug.log( "getAncestor( ", pIndex, " ): null" );
        return null;
    }

    private static void notifyAncestryOfNewDecendent( String pWinName, JavaScriptObject pWinHandle ) {
        for ( int i = 0; i < sAncestorWinHandles.size(); i++ ) {
            JavaScriptObject zAncestorWinHandle = sAncestorWinHandles.get( i );
            String zError = notifyNewDecendent( zAncestorWinHandle, pWinName, pWinHandle );
            if ( zError.length() == 0 ) {
                return; // Success!
            }
            LOGGER.debug.log( "Ancestor( ", i, " ): ", zError );
        }
    }

    ///////////////////////////////////////////////////////////////////////////////////////////////////////////

    private static Map<String, String> sFutureChildren = new HashMap<String, String>();

    private static void registerFutureChild( String pWinName, String pUrl ) {
        sFutureChildren.put( pWinName, pUrl );
    }

    public static void openChildWindow( String pWinName, String pUrl ) {
        registerFutureChild( pWinName, pUrl );
        JavaScriptObject zNewWinHandle = openNewWindow( "ServerApp?NewWindowPage", //
                                                        pWinName, //
                                                        UtilsGwt.CHROMELESS_OVERFLOW );
        report( "openNewWindow", pWinName, zNewWinHandle );
    }

    private static void report( String pMethod, String pWinName, JavaScriptObject pWinHandle ) {
        if ( LOGGER.debug.isEnabled() ) {
            StringBuilder sb = new StringBuilder().append( pMethod ).append( "( '" ).append( pWinName ).append( "' ): " );
            if ( pWinHandle == null ) {
                sb.append( "null" );
            } else {
                sb.append( "State: " ).append( NativeExtendedFamilyManagerSupport.getWindowState( pWinHandle ) );
                // sb.append( "  X: " ).append( getWindowPosX( pWinHandle ) );
                // sb.append( "  Y: " ).append( getWindowPosY( pWinHandle ) );
            }
            LOGGER.debug.log( sb.toString() );
        }
    }

    // vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv called from NativeExtendedFamilyManagerSupport vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv

    public static JavaScriptObject getAncestor( Integer pIndex ) {
        return LLgetAncestor( (pIndex != null) ? pIndex : -1 );
    }

    protected static void registerAncestor( JavaScriptObject pWinHandle ) {
        sAncestorWinHandles.add( pWinHandle );
        LOGGER.debug.log( "registerAncestor: ", sAncestorWinHandles.size() );
    }

    protected static void registerNewChildWindow( String pWinName, JavaScriptObject pWinHandle ) {
        report( "regNewChild", pWinName, pWinHandle );
    }

    protected static String ackNewChildWindow( String pWinName, JavaScriptObject pWinHandle ) {
        report( "ackNewChild", pWinName, pWinHandle );
        notifyAncestryOfNewDecendent( pWinName, pWinHandle );
        String zUrl = sFutureChildren.remove( pWinName );
        return (zUrl != null) ? zUrl : "ServerApp?RealPage";
    }

    protected static void newDecendentWindow( String pWinName, JavaScriptObject pWinHandle ) {
        report( "ackNewDecendent", pWinName, pWinHandle );
        notifyAncestryOfNewDecendent( pWinName, pWinHandle );
    }
}

Commits for litesoft/trunk/Java/GWT/Client/src/org/litesoft/GWT/client/nonpublic/ExtendedFamilyManager.java

Diff revisions: vs.
Revision Author Commited Message
948 Diff Diff GeorgeS picture GeorgeS Sat 07 Jun, 2014 23:42:39 +0000

Jusefuls Formatter Updated to New Code Format

947 Diff Diff GeorgeS picture GeorgeS Fri 06 Jun, 2014 23:36:56 +0000

Correct Spelling of package!

151 Diff Diff GeorgeS picture GeorgeS Thu 17 Mar, 2011 04:16:22 +0000
49 Diff Diff GeorgeS picture GeorgeS Mon 12 Apr, 2010 02:59:10 +0000

License Text

2 GeorgeS picture GeorgeS Sun 07 Feb, 2010 12:50:58 +0000