/**
  * Generate the initial artifact by running maven assembly plugin on pre installed artifacts in
  * archetype
  *
  * @param applicationId application id
  * @param workingDirectory current working directory. this is where we do all application related
  *     file operations
  * @param archetypeDir location of the archetypes generated
  * @throws AppFactoryException
  */
 protected void initialDeployArtifactGeneration(
     String applicationId, String workingDirectory, File archetypeDir) throws AppFactoryException {
   List<String> goals = new ArrayList<String>();
   goals.add(AppFactoryConstants.MVN_GOAL_CLEAN);
   goals.add(AppFactoryConstants.MVN_GOAL_INSTALL);
   goals.add(AppFactoryConstants.MVN_GOAL_ASSEMBLY);
   File projectDir = new File(archetypeDir.getAbsolutePath() + File.separator + applicationId);
   File initialArtifact =
       new File(
           archetypeDir.getAbsolutePath()
               + File.separator
               + applicationId
               + AppFactoryConstants.AF_ARCHETYPE_INITIAL_ARTIFACT_LOCATION);
   boolean isInitialArtifactGenerationSuccess =
       ProjectUtils.initialDeployArtifactGeneration(
           applicationId, projectDir, initialArtifact, new File(workingDirectory), goals);
   if (isInitialArtifactGenerationSuccess) {
     try {
       File initialArtifactSource =
           new File(
               projectDir
                   + File.separator
                   + AppFactoryConstants.AF_ARCHETYPE_INITIAL_ARTIFACT_SOURCE_LOCATION);
       FileUtils.deleteDirectory(initialArtifactSource);
       File assemblyFile =
           new File(
               projectDir
                   + File.separator
                   + AppFactoryConstants.AF_ARCHETYPE_INITIAL_ARTIFACT_ASSEMBLY_XML_LOCATION);
       FileUtils.forceDelete(assemblyFile);
       File assemblyDescriptorFile =
           new File(
               projectDir
                   + File.separator
                   + AppFactoryConstants.AF_ARCHETYPE_INITIAL_ARTIFACT_BIN_XML_LOCATION);
       FileUtils.forceDelete(assemblyDescriptorFile);
     } catch (IOException e) {
       String msg = "Error occurred while deleting files used in deploy artifact generation";
       log.error(msg, e);
       throw new AppFactoryException(msg, e);
     }
   }
 }