private boolean validateArtifact(Artifact artifact) {
    if (artifact == null) {
      return false;
    }

    if (!isAccepted(artifact.getType())) {
      log.warn(
          "Can't deploy artifact : "
              + artifact.getName()
              + " of type : "
              + artifact.getType()
              + ". Required features are not installed in the system");
      return false;
    }

    List<CappFile> files = artifact.getFiles();
    if (files.size() != 1) {
      log.error(
          "Synapse artifact types must have a single file to "
              + "be deployed. But "
              + files.size()
              + " files found.");
      return false;
    }

    return true;
  }
  /**
   * Check the artifact type and if it is a Gadget, copy it to the Gadget deployment hot folder
   *
   * @param carbonApp - CarbonApplication instance to check for Gadget artifacts
   * @param axisConfig - AxisConfiguration of the current tenant
   */
  public void deployArtifacts(CarbonApplication carbonApp, AxisConfiguration axisConfig)
      throws DeploymentException {
    List<Artifact.Dependency> artifacts =
        carbonApp.getAppConfig().getApplicationArtifact().getDependencies();

    for (Artifact.Dependency dep : artifacts) {
      Deployer deployer;
      Artifact artifact = dep.getArtifact();
      if (artifact == null) {
        continue;
      }
      if (!isAccepted(artifact.getType())) {
        log.warn(
            "Can't deploy artifact : "
                + artifact.getName()
                + " of type : "
                + artifact.getType()
                + ". Required features are not installed in the system");
        continue;
      }

      if (GADGET_TYPE.equals(artifact.getType())) {
        deployer = AppDeployerUtils.getArtifactDeployer(axisConfig, GADGET_DIR, "gar");
      } else {
        continue;
      }

      List<CappFile> files = artifact.getFiles();
      if (files.size() != 1) {
        log.error(
            "Gadgets must have a single .gar file to "
                + "be deployed. But "
                + files.size()
                + " files found.");
        continue;
      }
      if (deployer != null) {
        String fileName = artifact.getFiles().get(0).getName();
        String artifactPath = artifact.getExtractedPath() + File.separator + fileName;
        try {
          deployer.deploy(new DeploymentFileData(new File(artifactPath), deployer));
          artifact.setDeploymentStatus(AppDeployerConstants.DEPLOYMENT_STATUS_DEPLOYED);
        } catch (DeploymentException e) {
          artifact.setDeploymentStatus(AppDeployerConstants.DEPLOYMENT_STATUS_FAILED);
          throw e;
        }
      }
    }
  }
  public void undeployArtifacts(CarbonApplication carbonApp, AxisConfiguration axisConfig) {
    List<Artifact.Dependency> artifacts =
        carbonApp.getAppConfig().getApplicationArtifact().getDependencies();

    for (Artifact.Dependency dep : artifacts) {
      EventProcessingDeployer deployer;
      Artifact artifact = dep.getArtifact();
      if (artifact == null) {
        continue;
      }

      deployer = getDeployer(artifact, axisConfig);

      List<CappFile> files = artifact.getFiles();
      if (files.size() != 1) {
        log.error("Artifact must have only a single file. But " + files.size() + " files found.");
        continue;
      }

      if (deployer != null
          && AppDeployerConstants.DEPLOYMENT_STATUS_DEPLOYED.equals(
              artifact.getDeploymentStatus())) {
        String fileName = artifact.getFiles().get(0).getName();
        String artifactPath = artifact.getExtractedPath() + File.separator + fileName;
        try {
          deployer.processUndeployment(artifactPath);
          artifact.setDeploymentStatus(AppDeployerConstants.DEPLOYMENT_STATUS_PENDING);
          File artifactFile = new File(artifactPath);
          if (artifactFile.exists() && !artifactFile.delete()) {
            log.warn("Couldn't delete App artifact file : " + artifactPath);
          }
        } catch (Exception e) {
          artifact.setDeploymentStatus(AppDeployerConstants.DEPLOYMENT_STATUS_FAILED);
          log.error(
              "Error occured while trying to undeploy : "
                  + artifact.getName()
                  + " due to "
                  + e.getMessage(),
              e);
        }
      }
    }
  }
  /**
   * Check the artifact type and if it is a Gadget, delete the file from the Gadget deployment hot
   * folder
   *
   * @param carbonApp - CarbonApplication instance to check for Gadget artifacts
   * @param axisConfig - AxisConfiguration of the current tenant
   */
  public void undeployArtifacts(CarbonApplication carbonApp, AxisConfiguration axisConfig) {

    List<Artifact.Dependency> artifacts =
        carbonApp.getAppConfig().getApplicationArtifact().getDependencies();

    for (Artifact.Dependency dep : artifacts) {
      Deployer deployer;
      Artifact artifact = dep.getArtifact();
      if (artifact == null) {
        continue;
      }

      if (GADGET_TYPE.equals(artifact.getType())) {
        deployer = AppDeployerUtils.getArtifactDeployer(axisConfig, GADGET_DIR, "gar");
      } else {
        continue;
      }

      List<CappFile> files = artifact.getFiles();
      if (files.size() != 1) {
        log.error("A Gadget must have a single .gar file. But " + files.size() + " files found.");
        continue;
      }
      if (deployer != null
          && AppDeployerConstants.DEPLOYMENT_STATUS_DEPLOYED.equals(
              artifact.getDeploymentStatus())) {
        String fileName = artifact.getFiles().get(0).getName();
        String artifactPath = artifact.getExtractedPath() + File.separator + fileName;
        try {
          deployer.undeploy(artifactPath);
          artifact.setDeploymentStatus(AppDeployerConstants.DEPLOYMENT_STATUS_PENDING);
          File artifactFile = new File(artifactPath);
          if (artifactFile.exists() && !artifactFile.delete()) {
            log.warn("Couldn't delete App artifact file : " + artifactPath);
          }
        } catch (DeploymentException e) {
          artifact.setDeploymentStatus(AppDeployerConstants.DEPLOYMENT_STATUS_FAILED);
          log.error("Error occured while trying to un deploy : " + artifact.getName());
        }
      }
    }
  }