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