001    package cnslab.gui;
002    
003    import java.io.*;
004    import java.util.*;
005
006    import ucar.ma2.ArrayChar;
007    import ucar.nc2.Dimension;
008    import ucar.nc2.Variable;    
009    import thinlet.Thinlet;
010    
011    import cnslab.cnsnetwork.PlotResult;
012    
013    /***********************************************************************
014    * @version
015    *   $Date$
016    *   $Rev$
017    *   $Author$
018    * @author
019    *   Yi Dong
020    * @author
021    *   David Wallace Croft, M.Sc.
022    * @author
023    *   Jeremy Cohen
024    ***********************************************************************/
025    public final class  ContentProcessResult
026      implements Runnable
027    ////////////////////////////////////////////////////////////////////////
028    ////////////////////////////////////////////////////////////////////////
029    {
030      
031    private final Thinlet thinlet;
032    
033    ////////////////////////////////////////////////////////////////////////
034    ////////////////////////////////////////////////////////////////////////
035      
036    public  ContentProcessResult ( final Thinlet  thinlet )
037    ////////////////////////////////////////////////////////////////////////
038    {
039      this.thinlet = thinlet;
040    }
041
042    ////////////////////////////////////////////////////////////////////////
043    ////////////////////////////////////////////////////////////////////////
044
045    @Override
046    public void  run ( )
047    ////////////////////////////////////////////////////////////////////////
048    {
049      final File  dir = new File ( "results" );
050      
051      final FilenameFilter
052        filter = new FilenameFilter ( )
053        {
054          @Override
055          public boolean  accept (
056            final File    dirFile,
057            final String  name )
058          {
059            return name.endsWith ( ".nc" ) || name.endsWith ( ".NC" );
060          }
061        };
062
063      //System.out.println(thin.getCount(thin.find("xmlModles")));
064        
065      final String [ ]  children = dir.list ( filter );
066      
067      if ( children !=  null 
068                  && thinlet.getCount ( thinlet.find ( "resultsCombo" ) )
069        != children.length )
070      {
071        Arrays.sort ( children );
072        
073        thinlet.removeAll ( thinlet.find ( "resultsCombo" ) );
074        
075        //System.out.println("files:" +children.length);
076        
077        for( int  i = 0; i < children.length; i++ )
078        {
079          //    System.out.println("file:"+children[i]);
080          
081          final Object  o = Thinlet.create ( "choice" );
082          
083          thinlet.setString (
084            o,
085            "text",
086            children [ i ] );
087          
088          thinlet.add (
089            thinlet.find ( "resultsCombo" ),
090            o);
091        }
092      }
093
094      if ( thinlet.getSelectedItem ( thinlet.find ( "resultsCombo" ) )
095        != null )
096      {
097        try
098        {
099          thinlet.removeAll ( thinlet.find ( "eleList" ) );
100          
101          final String
102            fileName = thinlet.getString (
103              thinlet.getSelectedItem ( thinlet.find ( "resultsCombo" ) ),
104              "text" );
105          
106          //System.out.println(fileName);
107
108          // TODO:  Why is this not used?
109          final PlotResult  pr = new PlotResult ( "test" );
110          
111          PlotResult.init ( "results/" + fileName );
112          
113          //System.out.println(pr.numExp);
114          
115          final Dimension
116            exp = PlotResult.ncfile.findDimension ( "suEleId" );
117          
118          for ( int  i = 0; i < PlotResult.numExp; i++ )
119          {
120            // Subexperiment node
121            
122            final Object  o = Thinlet.create ( "node" );
123            
124            thinlet.setString (
125              o,
126              "text",
127              PlotResult.subexpNames.getString ( i ) );
128
129            // Single Unit node
130            
131            if ( exp != null )
132            {
133              final Object  su = Thinlet.create ( "node" );
134              
135              thinlet.setString (
136                su,
137                "text",
138                "Single Unit" );
139              
140              thinlet.setBoolean (
141                su,
142                "expanded",
143                false );
144
145              final Variable
146                v = PlotResult.ncfile.findVariable ( "suNames" );
147              
148              final ArrayChar.D2  suNames = ( ArrayChar.D2 ) v.read ( );
149
150              // System.out.println(names.getString(0));
151              
152              final int [ ]  varShape = v.getShape ( );
153              
154              // TODO:  Why is this not used?
155              final int  suSeries = varShape [ 0 ];
156              
157              // System.out.println(varShape[0]+" "+varShape[1]);
158              
159              for ( int  eleId = 0; eleId < varShape [ 0 ]; eleId++ )
160              {
161                final Object  su_item = Thinlet.create ( "node" );
162                
163                thinlet.setString (
164                  su_item,
165                  "text",
166                  suNames.getString ( eleId ) );
167                
168                thinlet.setString (
169                  su_item,
170                  "name",
171                  i + ",0," + eleId );
172                
173                thinlet.add (
174                  su,
175                  su_item );
176              }
177              
178              thinlet.add (
179                o,
180                su);
181            }
182
183            // Mu node
184
185            Variable  v = PlotResult.ncfile.findVariable ( "muNames" );
186            
187            if ( v != null )
188            {
189              final ArrayChar.D2  suNames = ( ArrayChar.D2 ) v.read ( );
190              
191              // System.out.println(names.getString(0));
192              
193              final int [ ]  varShape = v.getShape ( );
194              
195              // TODO:  Why is this not used?
196              final int  suSeries = varShape [ 0 ];
197              
198              // suNames.getString(i);
199
200              final Object  mu = Thinlet.create ( "node" );
201              
202              thinlet.setString (
203                mu,
204                "text",
205                "Multiple Unit" );
206              
207              thinlet.setBoolean (
208                mu,
209                "expanded",
210                false );
211
212              for ( int  eleId = 0; eleId < varShape [ 0 ]; eleId++ )
213              {
214                final Object  mu_item = Thinlet.create ( "node" );
215                
216                thinlet.setString (
217                  mu_item,
218                  "text",
219                  suNames.getString ( eleId ) );
220                
221                thinlet.setString (
222                  mu_item,
223                  "name",
224                  i + ",1," + eleId );
225                
226                thinlet.add (
227                  mu,
228                  mu_item );
229              }
230              
231              thinlet.add (
232                o,
233                mu );
234            }
235
236            // Field node
237            
238            if ( PlotResult.numField > 0 )
239            {
240              v = PlotResult.ncfile.findVariable ( "fieldNames" );
241              
242              final ArrayChar.D2  fieldNames = ( ArrayChar.D2 ) v.read ( );
243
244              final Object  field = Thinlet.create ( "node" );
245              
246              thinlet.setString (
247                field,
248                "text",
249                "Field" );
250              
251              thinlet.setBoolean (
252                field,
253                "expanded",
254                false );
255
256              for ( int  ii = 0; ii < PlotResult.numField; ii++ )
257              {
258                final Object  fie_item = Thinlet.create ( "node" );
259                
260                thinlet.setString (
261                  fie_item,
262                  "text",
263                  fieldNames.getString ( ii ) );
264                
265                thinlet.setString (
266                  fie_item,
267                  "name",
268                  i + ",2," + ii );
269                
270                thinlet.add (
271                  field,
272                  fie_item );
273              }
274              
275              thinlet.add (
276                o,
277                field );
278            }
279
280            // Vector node
281            
282            if ( PlotResult.numVector > 0 )
283            {
284              v = PlotResult.ncfile.findVariable ( "vectorNames" );
285              
286              final ArrayChar.D2  vectorNames = ( ArrayChar.D2 ) v.read ( );
287
288              final Object  vector = Thinlet.create ( "node" );
289              
290              thinlet.setString (
291                vector,
292                "text",
293                "Vector" );
294              
295              thinlet.setBoolean (
296                vector,
297                "expanded",
298                false );
299
300              for ( int  ii = 0; ii < PlotResult.numVector; ii++ )
301              {
302                final Object  fie_item = Thinlet.create ( "node" );
303                
304                thinlet.setString (
305                  fie_item,
306                  "text",
307                  vectorNames.getString ( ii ) );
308                
309                thinlet.setString (
310                  fie_item,
311                  "name",
312                  i + ",3," + ii );
313                
314                thinlet.add (
315                  vector,
316                  fie_item );
317              }
318              
319              thinlet.add (
320                o,
321                vector );
322            }
323            
324            // Intracellular node
325            
326            if ( PlotResult.numIntra > 0 )
327            {
328              v = PlotResult.ncfile.findVariable ( "intraNames" );
329              
330              final ArrayChar.D2  intraNames = ( ArrayChar.D2 ) v.read ( );
331
332              final Object  intra = Thinlet.create ( "node" );
333              
334              thinlet.setString (
335                intra,
336                "text",
337                "Intracellular" );
338              
339              thinlet.setBoolean (
340                intra,
341                "expanded",
342                false );
343
344              for ( int  ii = 0; ii < PlotResult.numIntra; ii++ )
345              {
346                final Object  intra_item = Thinlet.create ( "node" );
347                
348                thinlet.setString (
349                  intra_item,
350                  "text",
351                  intraNames.getString ( ii ) );
352                
353                thinlet.setString (
354                  intra_item,
355                  "name",
356                  i + ",4," + ii );
357                
358                thinlet.add (
359                  intra,
360                  intra_item );
361              }
362              
363              thinlet.add (
364                o,
365                intra );
366            }
367
368            thinlet.add ( thinlet.find ( "eleList" ), o );
369          }
370          
371          
372
373          /*
374          if ( out.equals ( "" ) )
375          {
376            thin.setString (
377              thin.find ( "simStatusDisplay" ),
378              "text",
379              thin.getString (
380                thin.getSelectedItem ( thin.find ( "xmlModles" ) ),
381                "text" ) + " ...OK!\n" );
382                
383            thin.setBoolean (
384              thin.find ( "startSim" ),
385              "enabled",
386              true );
387              
388            thin.setBoolean (
389              thin.find ( "stopSim" ),
390              "enabled",
391              false );
392          }
393          else
394          {
395            thin.setString (
396              thin.find ( "simStatusDisplay" ),
397              "text",
398              thin.getString (
399                thin.getSelectedItem ( thin.find ( "xmlModles" ) ),
400                "text" )
401                + " ...Error!\n" + out );
402                
403            thin.setBoolean (
404              thin.find( "startSim" ),
405              "enabled",
406              false );
407              
408            thin.setBoolean (
409              thin.find ( "stopSim" ),
410              "enabled",
411              false );
412          }
413          */
414          
415          PlotResult.stop ( );
416        }
417        catch ( final Exception  e )
418        {
419          e.printStackTrace ( );
420        }
421      }
422    }
423
424    ////////////////////////////////////////////////////////////////////////
425    ////////////////////////////////////////////////////////////////////////
426    }