KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > com > vladium > emma > data > mergeCommand


1 /* Copyright (C) 2003 Vladimir Roubtsov. All rights reserved.
2  *
3  * This program and the accompanying materials are made available under
4  * the terms of the Common Public License v1.0 which accompanies this distribution,
5  * and is available at http://www.eclipse.org/legal/cpl-v10.html
6  *
7  * $Id: mergeCommand.java,v 1.1.1.1.2.1 2004/07/16 23:32:29 vlad_r Exp $
8  */

9 package com.vladium.emma.data;
10
11 import java.io.IOException JavaDoc;
12
13 import com.vladium.util.ClassLoaderResolver;
14 import com.vladium.util.args.IOptsParser;
15 import com.vladium.emma.Command;
16 import com.vladium.emma.IAppConstants;
17 import com.vladium.emma.IAppErrorCodes;
18 import com.vladium.emma.EMMARuntimeException;
19
20 // ----------------------------------------------------------------------------
21
/**
22  * @author Vlad Roubtsov, (C) 2003
23  */

24 public
25 final class mergeCommand extends Command
26 {
27     // public: ................................................................
28

29     public mergeCommand (final String JavaDoc usageToolName, final String JavaDoc [] args)
30     {
31         super (usageToolName, args);
32     }
33
34     public synchronized void run ()
35     {
36         ClassLoader JavaDoc loader;
37         try
38         {
39             loader = ClassLoaderResolver.getClassLoader ();
40         }
41         catch (Throwable JavaDoc t)
42         {
43             loader = getClass ().getClassLoader ();
44         }
45         
46         try
47         {
48             // process 'args':
49
{
50                 final IOptsParser parser = getOptParser (loader);
51                 final IOptsParser.IOpts parsedopts = parser.parse (m_args);
52                 
53                 // check if usage is requested before checking args parse errors etc:
54
{
55                     final int usageRequestLevel = parsedopts.usageRequestLevel ();
56
57                     if (usageRequestLevel > 0)
58                     {
59                         usageexit (parser, usageRequestLevel, null);
60                         return;
61                     }
62                 }
63                 
64                 final IOptsParser.IOpt [] opts = parsedopts.getOpts ();
65                 
66                 if (opts == null) // this means there were args parsing errors
67
{
68                     parsedopts.error (m_out, STDOUT_WIDTH);
69                     usageexit (parser, IOptsParser.SHORT_USAGE, null);
70                     return;
71                 }
72                 
73                 // process parsed args:
74

75                 try
76                 {
77                     for (int o = 0; o < opts.length; ++ o)
78                     {
79                         final IOptsParser.IOpt opt = opts [o];
80                         final String JavaDoc on = opt.getCanonicalName ();
81                         
82                         if (! processOpt (opt))
83                         {
84                             if ("in".equals (on))
85                             {
86                                 m_datapath = getListOptValue (opt, PATH_DELIMITERS, true);
87                             }
88                             else if ("out".equals (on))
89                             {
90                                 m_outFileName = opt.getFirstValue ();
91                             }
92                         }
93                     }
94                     
95                     // user '-props' file property overrides:
96

97                     if (! processFilePropertyOverrides ()) return;
98                     
99                     // process prefixed opts:
100

101                     processCmdPropertyOverrides (parsedopts);
102                 }
103                 catch (IOException JavaDoc ioe)
104                 {
105                     throw new EMMARuntimeException (IAppErrorCodes.ARGS_IO_FAILURE, ioe);
106                 }
107                 
108                 // handle cmd line-level defaults:
109
{
110                 }
111             }
112             
113             // run the reporter:
114
{
115                 final MergeProcessor processor = MergeProcessor.create ();
116                 processor.setAppName (IAppConstants.APP_NAME); // for log prefixing
117

118                 processor.setDataPath (m_datapath);
119                 processor.setSessionOutFile (m_outFileName);
120                 processor.setPropertyOverrides (m_propertyOverrides);
121                 
122                 processor.run ();
123             }
124         }
125         catch (EMMARuntimeException yre)
126         {
127             // TODO: see below
128

129             exit (true, yre.getMessage (), yre, RC_UNEXPECTED); // does not return
130
return;
131         }
132         catch (Throwable JavaDoc t)
133         {
134             // TODO: embed: OS/JVM fingerprint, build #, etc
135
// TODO: save stack trace in a file and prompt user to send it to ...
136

137             exit (true, "unexpected failure: ", t, RC_UNEXPECTED); // does not return
138
return;
139         }
140
141         exit (false, null, null, RC_OK);
142     }
143     
144     // protected: .............................................................
145

146
147     protected void initialize ()
148     {
149         super.initialize ();
150     }
151     
152     protected String JavaDoc usageArgsMsg ()
153     {
154         return "[options]";
155     }
156
157     // package: ...............................................................
158

159     // private: ...............................................................
160

161     
162     private String JavaDoc [] m_datapath; // list of data files, not a real path
163
private String JavaDoc m_outFileName;
164     
165 } // end of class
166
// ----------------------------------------------------------------------------
Popular Tags