예제 #1
0
  /**
   * ************* Packs an application folder into a zip file.
   *
   * @param application the application object as read from the application file.
   * @param applicationDir the directory where the application was read from.
   * @param additionalServiceFiles additional files that should be packaged into each service
   *     directory.
   * @return the packaged zip file.
   * @throws IOException .
   * @throws PackagingException .
   */
  public static File packApplication(
      final Application application, final File applicationDir, final File[] additionalServiceFiles)
      throws IOException, PackagingException {

    boolean hasExtendedServices = false;
    for (final Service service : application.getServices()) {
      if (!service.getExtendedServicesPaths().isEmpty()) {
        hasExtendedServices = true;
        break;
      }
    }
    File applicationFolderToPack = applicationDir;
    // If there are no extended service we don't need to prepare an application folder to pack with
    // all the
    // extended services content.
    if (hasExtendedServices) {
      final File destApplicationFolder = createCopyDirectory(applicationFolderToPack);

      for (final Service service : application.getServices()) {
        final File extFolder = new File(destApplicationFolder + "/" + service.getName());
        final File recipeFile =
            DSLReader.findDefaultDSLFile(
                DSLReader.SERVICE_DSL_FILE_NAME_SUFFIX,
                new File(applicationDir + "/" + service.getName()));
        copyExtendedServiceFiles(service, recipeFile, extFolder);
      }
      // Pack the prepared folder instead of the original application folder.
      applicationFolderToPack = destApplicationFolder;
    }

    if ((additionalServiceFiles != null) && (additionalServiceFiles.length > 0)) {
      // if a copy directory was already created, use the existing one, otherwise
      // create a new one.
      if (applicationFolderToPack == applicationDir) {
        applicationFolderToPack = createCopyDirectory(applicationFolderToPack);
      }
      List<Service> services = application.getServices();
      for (Service service : services) {
        File serviceDir = new File(applicationFolderToPack, service.getName());
        if (!serviceDir.exists()) {
          throw new PackagingException("Could not find service folder at: " + serviceDir);
        }
        if (!serviceDir.isDirectory()) {
          throw new PackagingException("Was expecting a directory at: " + serviceDir);
        }

        for (File fileToCopy : additionalServiceFiles) {
          FileUtils.copyFileToDirectory(fileToCopy, serviceDir);
        }
      }
    }
    // zip the application folder.
    final File zipFile = File.createTempFile("application", ".zip");
    zipFile.deleteOnExit();
    ZipUtils.zip(applicationFolderToPack, zipFile);
    return zipFile;
  }
예제 #2
0
  /**
   * source folder structure: service.groovy something.zip install.sh start.sh ...
   *
   * <p>usmlib mylib1.jar mylib2.jar ...
   *
   * <p>output folder: ext service.groovy something.zip install.sh start.sh ... lib mylib1.jar
   * mylib2.jar ... usm.jar
   *
   * <p>META-INF spring pu.xml
   *
   * @param srcFolder
   * @param recipeDirOrFile
   * @return
   * @throws IOException
   * @throws PackagingException
   */
  private static File buildPuFolder(final Service service, final File recipeFile)
      throws IOException, PackagingException {
    final File srcFolder = recipeFile.getParentFile();
    final File destPuFolder = File.createTempFile("gs_usm_", "");
    FileUtils.forceDelete(destPuFolder);
    FileUtils.forceMkdir(destPuFolder);
    logger.finer("created temp directory " + destPuFolder.getAbsolutePath());

    // create folders
    final File extFolder = new File(destPuFolder, "/ext");
    FileUtils.forceMkdir(extFolder);
    final File libFolder = new File(destPuFolder.getAbsolutePath(), "/lib");
    FileUtils.forceMkdir(libFolder);
    final File springFolder = new File(destPuFolder.getAbsolutePath(), "/META-INF/spring");
    FileUtils.forceMkdir(springFolder);
    logger.finer("created pu structure under " + destPuFolder);

    // copy all files except usmlib from working dir to ext
    // FileUtils.copyDirectory(srcFolder, extFolder, new FileFilter() {
    //
    // @Override
    // public boolean accept(File pathname) {
    // boolean f1 = SVNFileFilter.getFilter().accept(pathname);
    // boolean f2 = !(pathname.isDirectory() && pathname.getName().equals("usmlib"));
    // return f1 && f2;
    // }
    // });
    FileUtils.copyDirectory(srcFolder, extFolder);

    logger.finer(
        "copied files from " + srcFolder.getAbsolutePath() + " to " + extFolder.getAbsolutePath());

    // copy all files from usmlib to lib
    final File srcUsmLibDir = new File(srcFolder, "usmlib");
    if (srcUsmLibDir.exists()) {
      FileUtils.copyDirectory(srcUsmLibDir, libFolder, SVNFileFilter.getFilter());
    }

    // copy usm.jar to lib
    final File usmLibDir = getUsmLibDir(service);
    final File srcUsmJar = new File(usmLibDir, "usm.jar");
    if (!srcUsmJar.exists()) {
      throw new PackagingException("could not find usm.jar");
    }
    FileUtils.copyDirectory(usmLibDir, libFolder, SVNFileFilter.getFilter());
    logger.finer("copied " + srcUsmJar.getName());

    // no pu.xml in source folder, lets copy the default one
    final InputStream puXmlStream =
        Packager.class.getClassLoader().getResourceAsStream("META-INF/spring/default_usm_pu.xml");
    if (puXmlStream == null) {
      throw new PackagingException("can not find locate default pu.xml");
    }
    final File destPuXml = new File(springFolder, "pu.xml");
    FileUtils.copyInputStreamToFile(puXmlStream, destPuXml);
    logger.finer("copied pu.xml");
    try {
      puXmlStream.close();
    } catch (final IOException e) {
      logger.log(Level.SEVERE, "failed to close default_usm_pu.xml stream", e);
    }

    copyExtendedServiceFiles(service, recipeFile, extFolder);

    logger.finer("created pu folder " + destPuFolder.getAbsolutePath());
    return destPuFolder;
  }