All Downloads are FREE. Search and download functionalities are using the official Maven repository.

ee.jakarta.tck.jsonp.signaturetest.Recorder Maven / Gradle / Ivy

The newest version!
/*
 * Copyright (c) 2021, 2022 Oracle and/or its affiliates. All rights reserved.
 *
 * This program and the accompanying materials are made available under the
 * terms of the Eclipse Public License v. 2.0, which is available at
 * http://www.eclipse.org/legal/epl-2.0.
 *
 * This Source Code may also be made available under the following Secondary
 * Licenses when the conditions for such availability set forth in the
 * Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
 * version 2 with the GNU Classpath Exception, which is available at
 * https://www.gnu.org/software/classpath/license.html.
 *
 * SPDX-License-Identifier: EPL-2.0 OR GPL-2.0 WITH Classpath-exception-2.0
 */

/*
 * $Id$
 */

package ee.jakarta.tck.jsonp.signaturetest;

import java.io.BufferedInputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.util.Arrays;
import java.util.Iterator;
import java.util.Properties;
import java.util.logging.Logger;


public abstract class Recorder {

  private static final Logger LOGGER = Logger.getLogger(Recorder.class.getName());

  protected Properties signatureMap;

  protected String packageListFile;

  protected String classpath;

  protected String signatureRepositoryDir;

  protected String signatureMapFile;

  // ------------------------------------------------------------ Constructors

  public Recorder(String[] args) {

    LOGGER.info("\nCalling:  Recorder with following args:");
    for (int ii = 0; ii < args.length; ii++) {
      LOGGER.info("	  args[" + ii + "] = " + args[ii]);
    }

    Arguments arguments = new Arguments(args);
    packageListFile = arguments.getPackageList();
    classpath = arguments.getClasspath();
    signatureRepositoryDir = arguments.getRepository();
    signatureMapFile = arguments.getSignatureMap();
    loadSignatureMap(signatureMapFile);
  }

  // ---------------------------------------------------------- Public Methods

  /**
   * 

* Record the signatures for each package listed in the * TS_HOME/bin/sig-test.map file. *

*/ public void batchRecord() { for (Iterator i = signatureMap.keySet().iterator(); i.hasNext();) { String basePackageName = (String) i.next(); String version = (String) signatureMap.get(basePackageName); String outputFileName = getOutputFileName(basePackageName, version); String[] commandLine = createCommandLine(version, classpath, outputFileName, basePackageName); try { // dump command line args passed to Setup()... LOGGER.info("\n\nDUMPING SIGTEST COMMAND LINE: \n"); for (int ii = 0; ii < commandLine.length; ii++) { LOGGER.info("commandLine[" + ii + "] = " + commandLine[ii]); } LOGGER.info("\nDONE DUMPING SIGTEST COMMAND LINE. \n\n"); doRecord(commandLine); } catch (Exception e) { throw new RuntimeException(e); } try { writePackageListFile(basePackageName, outputFileName, packageListFile); } catch (Exception e) { LOGGER.info("Unexpected exception: " + e); e.printStackTrace(); System.exit(1); } } } // END batchRecord // ------------------------------------------------------- Protected Methods /** * Write, to a separate file, all of the packages that were recorded. How this * is accomplised will be dependent on the framework. * * @param basePackageName * the base package * @param signatureFile * the file in which the signatures were recorded to * @param packageListFile * the name of the package list file (which may or may not exist) * @throws Exception * if an error occurs writing the file */ protected abstract void writePackageListFile(String basePackageName, String signatureFile, String packageListFile) throws Exception; /** * Create a array of arguments appropriate for use with different signature * recording frameworks. * * @param version * The version of the API * @param classpath * the classpath containing classes that will be recorded * @param outputFileName * the file in which to write the recorded signatures to * @param packageName * the base package name of the signatures that will be recorded */ protected abstract String[] createCommandLine(String version, String classpath, String outputFileName, String packageName); /** * Perform whatever action in necessary to do the actual recording of the * signatures. * * @param commandLine * the options to invoke the recording facility * @throws Exception * if an error occurs during the record process */ protected abstract void doRecord(String[] commandLine) throws Exception; // --------------------------------------------------------- Private Methods private void loadSignatureMap(String signatureTestMapFile) { signatureMap = new Properties(); try { signatureMap.load( new BufferedInputStream(new FileInputStream(signatureTestMapFile))); } catch (FileNotFoundException fnfe) { throw new RuntimeException( "Unable to find or read file '" + signatureTestMapFile + '\''); } catch (IOException ioe) { throw new RuntimeException( "Error processing file '" + signatureTestMapFile + '\'', ioe); } } // END loadSignatureMap private String getOutputFileName(String name, String version) { StringBuffer fileName = new StringBuffer(); fileName.append(signatureRepositoryDir).append(File.separatorChar); fileName.append(name).append(".sig_").append(version); return fileName.toString(); } // END getOutputFileName // --------------------------------------------------- Static Nested Classes private static class Arguments { private static final String CLASSPATH_ARG = "-classpath"; private static final String PKG_LIST_ARG = "-packagelist"; private static final String SIG_MAP_ARG = "-sigmap"; private static final String REPOSITORY_ARG = "-repository"; private String classpath; private String packageList; private String signatureMap; private String repository; // -------------------------------------------------------- Constructors Arguments(String[] args) { // all 4 arguments must be defined, thus there should be 8 elements if (args.length != 8) { LOGGER.info("Error - incorrect number of args should be 8 but was: " + args.length); LOGGER.info("Args passed in were: "); for (int ii = 0; ii < args.length; ii++) { LOGGER.info("args[" + ii + "] = " + args[ii]); } throw new IllegalArgumentException(); } String[] clonedArgs = (String[]) args.clone(); Arrays.sort(clonedArgs); // ensure the proper arguments are specified if (Arrays.binarySearch(clonedArgs, CLASSPATH_ARG) < 0 || Arrays.binarySearch(clonedArgs, PKG_LIST_ARG) < 0 || Arrays.binarySearch(clonedArgs, SIG_MAP_ARG) < 0 || Arrays.binarySearch(clonedArgs, REPOSITORY_ARG) < 0) { usage(); System.exit(1); } for (int i = 0; i < args.length; i += 2) { if (CLASSPATH_ARG.equals(args[i])) { classpath = args[i + 1]; } else if (PKG_LIST_ARG.equals(args[i])) { packageList = args[i + 1]; } else if (SIG_MAP_ARG.equals(args[i])) { signatureMap = args[i + 1]; } else if (REPOSITORY_ARG.equals(args[i])) { repository = args[i + 1]; } else { // shouldn't get here usage(); System.exit(1); } } } // END Arguments // ---------------------------------------------------------- Properties public String getClasspath() { return classpath; } // END getClasspath public String getPackageList() { return packageList; } // END getPackageList public String getSignatureMap() { return signatureMap; } // END getSignatureMap public String getRepository() { return repository; } // END getRepository private static void usage() { String usage = "Usage:" + "\t-classpath (classpath to JARs and/or classes under test)\n" + "\t-packageList (Reference to the sig-test-pkg-list.txt file)\n" + "\t-sigmap (Reference to the sig-test.map file)\n" + "\t-repository (Directory in which to write the recorded" + "\tsignatures to)\n\n"; System.err.println(usage); } // END usage } // END Arguments }




© 2015 - 2024 Weber Informatics LLC | Privacy Policy