Package org.cishell.testing.convertertester.algorithm

Source Code of org.cishell.testing.convertertester.algorithm.ConverterTesterAlgorithm$DataUpdater

package org.cishell.testing.convertertester.algorithm;

import java.io.File;
import java.io.IOException;
import java.util.ArrayList;
import java.util.Dictionary;

import org.cishell.framework.CIShellContext;
import org.cishell.framework.algorithm.Algorithm;
import org.cishell.framework.algorithm.AlgorithmProperty;
import org.cishell.framework.data.BasicData;
import org.cishell.framework.data.Data;
import org.cishell.framework.data.DataProperty;
import org.cishell.testing.convertertester.algorithm.pathfilter.ConvAndHopFilter;
import org.cishell.testing.convertertester.algorithm.pathfilter.HopFilter;
import org.cishell.testing.convertertester.core.tester2.ConverterTester2;
import org.cishell.testing.convertertester.core.tester2.reportgen.ReportGenerator;
import org.cishell.testing.convertertester.core.tester2.reportgen.allconvs.AllConvsReportGenerator;
import org.cishell.testing.convertertester.core.tester2.reportgen.allerrors.AllErrorReportGenerator;
import org.cishell.testing.convertertester.core.tester2.reportgen.alltests.AllTestsReportGenerator;
import org.cishell.testing.convertertester.core.tester2.reportgen.convgraph.AnnotatedGraphReportGenerator;
import org.cishell.testing.convertertester.core.tester2.reportgen.convgraph.GraphReportGenerator;
import org.cishell.testing.convertertester.core.tester2.reportgen.readme.ReadMeReportGenerator;
import org.cishell.testing.convertertester.core.tester2.reportgen.reports.AllConvsReport;
import org.cishell.testing.convertertester.core.tester2.reportgen.reports.AllErrorReport;
import org.cishell.testing.convertertester.core.tester2.reportgen.reports.AllTestsReport;
import org.cishell.testing.convertertester.core.tester2.reportgen.reports.ConvReport;
import org.cishell.testing.convertertester.core.tester2.reportgen.reports.ConvertedDataReport;
import org.cishell.testing.convertertester.core.tester2.reportgen.reports.FilePassReport;
import org.cishell.testing.convertertester.core.tester2.reportgen.reports.ReadMeReport;
import org.cishell.testing.convertertester.core.tester2.reportgen.reports.TestReport;
import org.eclipse.swt.widgets.Display;
import org.eclipse.ui.IWorkbenchWindow;
import org.eclipse.ui.PlatformUI;
import org.osgi.framework.BundleContext;
import org.osgi.framework.ServiceReference;
import org.osgi.service.log.LogService;

//TODO: Maybe let the user specify which converters he/she wants to test, or other things
//TODO: Make it progress-trackable

public class ConverterTesterAlgorithm implements Algorithm,
  AlgorithmProperty {

    private CIShellContext cContext;
    private BundleContext bContext;
    private LogService log;
   
    private boolean testAllConvs;
    private String selectedConvName;
    private int numHops;
   
    public ConverterTesterAlgorithm(Data[] data, Dictionary parameters,
        CIShellContext cContext, BundleContext bContext ) {
        this.cContext = cContext;
        this.bContext = bContext;
       
        this.log = (LogService) cContext.getService(
        LogService.class.getName());
       
       
        this.testAllConvs = ((Boolean) parameters.get(
            ConverterTesterAlgorithmFactory.TEST_ALL_CONVS_PARAM_ID)).booleanValue();
        this.selectedConvName = ((String) parameters.get(
            ConverterTesterAlgorithmFactory.SELECTED_CONVERTER_PARAM_ID));
        this.numHops = ((Integer) parameters.get(
            ConverterTesterAlgorithmFactory.NUM_HOPS_PARAM_ID)).intValue();
       
    }

    public Data[] execute() {
//      this.log.log(LogService.LOG_INFO,
//                                                         "\r\n" +
//          "-------NOTICE-------" +                       "\r\n" +  
//          "The Converter Tester will take " +
//          "some time to run all the tests. \r\n" +
//          "Thank you for waiting :)" +                   "\r\n" +
//          "-----END NOTICE-----                           \r\n");
     
      Data[] returnDM;

      final IWorkbenchWindow[] windows =
        PlatformUI.getWorkbench().getWorkbenchWindows();
      if (windows.length == 0) {
        return null;
      }
   
      Display display = PlatformUI.getWorkbench().getDisplay();
      DataUpdater dataUpdater = new DataUpdater (windows[0], this.log);
     
      if (Thread.currentThread() != display.getThread()) {
        display.syncExec(dataUpdater);
    } else {
      dataUpdater.run();
    }
     
      if (!dataUpdater.returnList.isEmpty()){
        int size = dataUpdater.returnList.size();
        returnDM = new Data[size];
        for(int index=0; index<size; index++){
          returnDM[index]=(Data)dataUpdater.returnList.get(index);
        }
        return returnDM;
      }
      else {       
        return null;
      }
     
    }
   
    final class DataUpdater implements Runnable {
      boolean loadFileSuccess = false;
      IWorkbenchWindow window;
      ArrayList returnList = new ArrayList();
      LogService log;
     
      DataUpdater (IWorkbenchWindow window, LogService log){
        this.log = log;
        this.window = window;       
      }     
     
      public void run () {
       
        try {
          System.out.println("getting converter references....");
            //get all the converters
             ServiceReference[] convRefs =
               ConverterTesterAlgorithmUtil.
               getConverterReferences(bContext);
            

            
             //initialize all the report generators
            
             AllTestsReportGenerator       allGen     =
               new AllTestsReportGenerator(this.log);
             AllConvsReportGenerator       allConvGen =
               new AllConvsReportGenerator(this.log);
             AllErrorReportGenerator      allErrGen  =
               new AllErrorReportGenerator(this.log);
             GraphReportGenerator origGraphGen        =
               new GraphReportGenerator(this.log);
             AnnotatedGraphReportGenerator graphGen   =
               new AnnotatedGraphReportGenerator(this.log);
             ReadMeReportGenerator         readmeGen  =
               new ReadMeReportGenerator(this.log);
            
             /*
              * execute the tests, and provide the results to the
              * report generators
              */
            
             System.out.println("Executing tests...");
            
             ConverterTester2 ct = new ConverterTester2(log);
        
             if (testAllConvs) {
               ct.execute(convRefs,
                   new ReportGenerator[]
                      {allGen, allConvGen, allErrGen,
                   graphGen, origGraphGen, readmeGen},
                   cContext, bContext,
                   new HopFilter(numHops));
             } else {
               ct.execute(convRefs,
                   new ReportGenerator[]
                      {allGen, allConvGen, allErrGen,
                   graphGen, origGraphGen, readmeGen},
                   cContext, bContext,
                   new ConvAndHopFilter(selectedConvName, numHops));
             }
             /*
              * report generators have now been supplied with the test
              * results, and their reports can now be extracted.
              */
            
             System.out.println("Returning reports...");
            
             //return readme report
            
             ReadMeReport readmeReport = readmeGen.getReadMe();
             File readmeFile = readmeReport.getReportFile();
             Data readMeData = createReportData(readmeFile,
                 readmeReport.getName(), null);
             addReturn(readMeData);
            
             //return all converters report
            
             AllConvsReport allConvReport =
               allConvGen.getAllConvsReport();
             File allConvReportFile = allConvReport.getReport();
             Data allConvReportData =
               createReportData(allConvReportFile,
                   allConvReport.getName(),
                 null);
             addReturn(allConvReportData);
            
             ConvReport[] convReports =
               allConvReport.getConverterReports();
             for (int ii = 0; ii < convReports.length; ii++) {
               ConvReport convReport = convReports[ii];
               File convReportFile = convReport.getReport();
               Data convReportData =
                 createReportData(convReportFile,
                     convReport.getName(), allConvReportData);
               addReturn(convReportData);
              
               TestReport[] trs = convReport.getTestReports();
               addFilePasses(trs, convReportData);
             }
            
             //return all tests report
            
             AllTestsReport allReport = allGen.getAllTestsReport();
             File allReportFile = allReport.getAllTestsReport();
             Data allReportData = createReportData(allReportFile,
                 allReport.getName() , null);
             addReturn(allReportData);
            
             TestReport[] sTestReports =
               allReport.getSuccessfulTestReports();
             addFilePasses(sTestReports, allReportData);
            
             TestReport[] ppTestReports =
               allReport.getPartialSuccessTestReports();
             addFilePasses(ppTestReports, allReportData);
            
             TestReport[] fTestReports =
               allReport.getFailedTestReports();
             addFilePasses(fTestReports, allReportData);
            
             //return all errors report
            
             AllErrorReport allErrorReport =
               allErrGen.getAllErrorsReport();
             File allErrReportFile = allErrorReport.getReportFile();
             Data allErrReport = createReportData(allErrReportFile,
                 allErrorReport.getName(), null);
             addReturn(allErrReport);
            
            
             //return annotated graph report
            
             File graphReportFile = graphGen.getGraphReport();
             Data graphReport = createReportData(graphReportFile,
                 "Annotated Converter Graph", null,
                 "file:text/nwb", DataProperty.NETWORK_TYPE);
             addReturn(graphReport);
            
             //return original graph report
            
             File origGraphReportFile = origGraphGen.getGraphReport();
             Data origGraphReport = createReportData(
                 origGraphReportFile,
                 "Original Converter Graph", null,
                 "file:text/nwb", DataProperty.NETWORK_TYPE);
             addReturn(origGraphReport);
            
        } catch (Exception e) {
          this.log.log(LogService.LOG_ERROR, "Converter Tester Failed.",
              e);
          e.printStackTrace();
        }
    }
     
      /**
       * Add a report to a list of reports that are later returned.
       * @param report the report to be returned from this algorithm
       */
        private void addReturn(Data report) {
          if (report != null) {
            this.returnList.add(report);
          }
        }
       
       
        /**
         * Returns file pass reports associated with tests or converters.
         * @param testReports reports to be returned as children or test or
         * converter
         * @param parent the parent of the file pass
         */
        private void addFilePasses(TestReport[] testReports, Data parent) {
          for (int ii = 0; ii < testReports.length; ii++) {
            TestReport tr = testReports[ii];
            File testReportFile = tr.getTestReport();
            Data testReportData = createReportData(testReportFile,
                tr.getName(), parent);
            addReturn(testReportData);
           
            FilePassReport[] sFilePassReports =
              tr.getSuccessfulFilePassReports();
            for (int kk = 0; kk < sFilePassReports.length; kk++) {
              FilePassReport fp = sFilePassReports[kk];
              File fpFile = fp.getFilePassReport();
              Data fpData = createReportData(fpFile, fp.getName(),
                  testReportData);
              addReturn(fpData);
              addAllConvertedDataReports(fp, fpData);
              }
           
            FilePassReport[] fFilePassReports =
              tr.getFailedFilePassReports()
            for (int kk = 0; kk < fFilePassReports.length; kk++) {
              FilePassReport fp = fFilePassReports[kk];
              File fpFile = fp.getFilePassReport();
              Data fpData = createReportData(fpFile, fp.getName(),
                  testReportData);
              addReturn(fpData);
              addAllConvertedDataReports(fp, fpData);
              }
          }
        }
       
        private void addConvertedDataReports(ConvertedDataReport[] cdrs, Data fpData) {
        if (cdrs != null) {
          for (int mm = 0; mm < cdrs.length; mm++) {
            File cdrFile = cdrs[mm].getReport();
            Data cdrData = createReportData(cdrFile, cdrs[mm].getName(), fpData);
            addReturn(cdrData);
          }
        }
      }
       
      private void addAllConvertedDataReports(FilePassReport fp, Data fpData) {
        try {
        ConvertedDataReport[] testCDRs = fp.getTestConvertedDataReports();
      File testDummyParentFile = File.createTempFile("testdummyfile", "");
      Data testDummyParentData = createReportData(testDummyParentFile, "test phase", fpData);
      addReturn(testDummyParentData);
      addConvertedDataReports(testCDRs, testDummyParentData);
      ConvertedDataReport[] origCompareCDRs = fp.getOrigCompareConvertedDataReports();
      File origCompareDummyParentFile = File.createTempFile("origcomparedummyfile", "");
      Data origCompareDummyParentData = createReportData(origCompareDummyParentFile, "compare phase for original file", fpData);
      addReturn(origCompareDummyParentData);
      addConvertedDataReports(origCompareCDRs, origCompareDummyParentData);
      ConvertedDataReport[] resultCompareCDRs = fp.getResultCompareConvertedDataReports();
      File resultCompareDummyParentFile = File.createTempFile("origresultdummyfile", "");
      Data resultCompareDummyParentData = createReportData(resultCompareDummyParentFile, "compare phase for resulting file", fpData);
      addReturn(resultCompareDummyParentData);
      addConvertedDataReports(resultCompareCDRs, resultCompareDummyParentData);
        } catch (IOException e) {
          this.log.log(LogService.LOG_WARNING, "Unable to write converted data reports due to IO Error");
        }
     
    }
       
        /**
         * Wraps the report with metadata in a form that is ready to be
         * returned from the algorithm.
         *
         * @param report the report to be turned into data
         * @param label how the report will be labeled in the data manager
         * window
         * @param parent which report this report will hang from
         * (null if it is not a child of any report)
         * @param format The file format or class name of the report
         * @param type whether the report is a network or text file
         * @return the report encapsulated in data, ready to be returned.
         */
        private Data createReportData(Object report, String label,
            Data parent, String format, String type) {
          Data reportData = new BasicData(report, format);
      Dictionary metadata = reportData.getMetadata();
      if (label == null) {
        label = "no label";
      }
     
      if (type == null) {
        type = "No type";
      }
      metadata.put(DataProperty.LABEL, label);
      metadata.put(DataProperty.TYPE, type);
      if (parent != null) {
        metadata.put(DataProperty.PARENT, parent);
      }
      return reportData;
        }
       
        /**
         * Alternate version of createReportData that assumes the report
         *  is a plain text file
         * @param report the report to be turned into data
         * @param label how the report will be labeled in the data manager
         *  window
         * @param parent which report this report will hang from
         * (null if it is not a child of any report)
         * @return the report encapsulated in data, ready to be returned.
         */
        private Data createReportData(Object report, String label,
            Data parent) {
          return createReportData(report, label, parent, "file:text/plain",
              DataProperty.TEXT_TYPE);
        }
       
      
   }
   
 
   
   
}
TOP

Related Classes of org.cishell.testing.convertertester.algorithm.ConverterTesterAlgorithm$DataUpdater

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.