View Javadoc

1   /**
2    * 
3    */
4   package net.sf.madmap;
5   
6   import java.lang.management.ManagementFactory;
7   
8   import javax.management.MBeanServer;
9   import javax.management.ObjectName;
10  import javax.swing.JOptionPane;
11  import org.springframework.context.*;
12  import org.springframework.context.support.*;
13  /**
14   * MadmapMain is the main class of the application, it launches the primordial
15   * window or starts execution if running cmd-line only.
16   * 
17   * @author ecaspole
18   *
19   */
20  public class MadmapMain {
21  
22  	static boolean _runDumpPhase     = false;
23  	static boolean _runAnalysisPhase = true;
24  	static int     _concurrency      = Runtime.getRuntime().availableProcessors();  // 1;
25  	static int     _running          = 0;
26  	static boolean _verbose          = false;
27  	static boolean _saveMemberNames  = true;
28  	static boolean _printFinalizers   = true;
29  	static boolean _do_recursive_children_size   = false;
30  	static boolean _do_gc             = false;
31  	static boolean  _jdk14_compatible = true;
32  	static boolean  _nogui            = false;
33  	static boolean  _testFeature      = false;
34  	
35  	static ApplicationContext  _appContext      = new ClassPathXmlApplicationContext("madmapContext.xml");
36  	
37  	public static ApplicationContext appContext()           { return _appContext; }
38  	static ILogger	_logger = (ILogger)(MadmapMain.appContext()).getBean("logger");
39    static IResources	_resources = (IResources)(MadmapMain.appContext()).getBean("resources");
40  
41  	static Object   _guiLock    = new Object();
42  
43  	public static void guiNotify() {
44  		synchronized( _guiLock ) {
45  			_guiLock.notify();
46  		}
47  	}
48  
49    public static boolean runDump()           { return _runDumpPhase; }
50    public static boolean runAnalysis()       { return _runAnalysisPhase; }
51    public static boolean runSystemGC()       { return _do_gc; }
52    public static boolean runRecursiveChildrenSize()       { return _do_recursive_children_size; }
53    public static void    setVerbose(boolean newVal)           {  _verbose = newVal; }
54    public static boolean verbose()           { return _verbose; }
55    public static void    setSaveMemberNames(boolean newVal)           {  _saveMemberNames = newVal; }
56    public static boolean getSaveMemberNames()           { return _saveMemberNames; }
57  
58    public static boolean printFinalizers()   { return _printFinalizers; }
59    public static boolean noGUI()             { return _nogui; }
60    public static boolean testFeature()      { return _testFeature; }
61    public static boolean jdk14_compatible()  { return _jdk14_compatible; }
62    public static int     concurrency()       { return _concurrency; }
63  	
64  	public static void waitForGui() {
65  		try {
66  			synchronized( _guiLock ) {
67  				_guiLock.wait();
68  			}
69  		} catch( InterruptedException ie ) {
70  			System. out. println ( "Error opening file : Caught " + ie );
71  			ie.printStackTrace();
72  		}
73  	}
74  
75    public static void usage() {    
76      System.out.println(_resources.getString("usageStrs"));
77    }
78  
79  	/**
80  	 * @param args
81  	 */
82  	public static void main( String argv[] )
83  	{
84  		String  name        = null;
85  		String  arg;
86  		boolean seenFile    = false;
87  		boolean firstTime   = true;
88  
89  		try {
90  			for ( int i = 0; i < argv.length; i++ ) {
91  				if ( argv[ i ].equals( "-d" ) ) {
92  					_runDumpPhase = true;
93  				} else if ( argv[ i ].equals( "-a" ) ) {
94  					_runAnalysisPhase = true;
95  				} else if ( argv[ i ].equals( "-c" ) ) {
96  					_do_gc = true;
97  				} else if ( argv[ i ].equals( "-f" ) ) {
98  					_printFinalizers = true;
99  				} else if ( argv[ i ].equals( "-h" ) ) {
100 					usage();
101 					return;
102 				} else if ( argv[ i ].equals( "-n" ) ) {
103 					_nogui = true;
104 				} else if ( argv[ i ].equals( "-m" ) ) {
105 					_saveMemberNames = false;
106 				} else if ( argv[ i ].equals( "-r" ) ) {
107 					_do_recursive_children_size = true;
108 				} else if ( argv[ i ].equals( "-u" ) ) {
109 					_concurrency = 1;
110 				} else if ( argv[ i ].equals( "-x" ) ) {
111 					_testFeature = true;
112 
113 				} else if ( argv[ i ].equals( "-v" ) ) {
114 					_verbose = true;
115 					//} else if ( argv[ i ].equals( "-y" ) ) {
116 					//  _jdk14_compatible = true;
117 				} else {
118 					if (argv[ i ].startsWith("-") == false) {
119 						if ( seenFile == false ) {
120 							name = argv[ i ];
121 							seenFile = true;
122 						} else {
123 							System.out.println( "Unknown:" + argv[ i ] );
124 							usage();
125 							return;
126 						}
127 					}
128 				}
129 			}
130 		} catch (ArrayIndexOutOfBoundsException e) { // argv is empty
131 			System.out.println("Must specify an argument");
132 			usage();
133 			return;
134 		}
135 
136 		usage();
137 
138 		if ( _nogui ) {
139 			try {
140 				Madmap	app = new Madmap( name );
141 				app.init();
142 			} catch (OutOfMemoryError e) { 
143 				System.out.println("OutOfMemoryError in main thread. Relaunch Madmap with larger heap size.");
144 				e.printStackTrace();
145 				System.exit(-1);
146 			} catch (Exception e) { 
147 				System.out.println("Exception in main: " + e);
148 				e.printStackTrace();
149 				return;
150 			}
151 		} else { 
152 			MainWindow.init();
153 			waitForGui();
154 
155 			//System. out. println ( "======== All System Properties ========" );
156 			//System.getProperties().list(System. out);
157 			//System. out. println ( "=======================================" );
158 
159 			while ( true ) {
160 				waitForGui();
161 			}
162 		}
163 	}
164 }