// Path: components/application-mgt/org.wso2.carbon.application.mgt/src/main/java/org/wso2/carbon/application/mgt/internal/AppManagementServiceComponent.java
// @Component(
//         name = "application.mgt.dscomponent",
//         immediate = true)
// public class AppManagementServiceComponent {
// 
//     private static Log log = LogFactory.getLog(AppManagementServiceComponent.class);
// 
//     private static ApplicationManagerService applicationManager;
// 
//     @Activate
//     protected void activate(ComponentContext ctxt) {
// 
//         if (log.isDebugEnabled()) {
//             log.debug("Activated AppManagementServiceComponent");
//         }
//     }
// 
//     @Deactivate
//     protected void deactivate(ComponentContext ctxt) {
// 
//         if (log.isDebugEnabled()) {
//             log.debug("Deactivated AppManagementServiceComponent");
//         }
//     }
// 
//     @Reference(
//             name = "application.manager",
//             service = org.wso2.carbon.application.deployer.service.ApplicationManagerService.class,
//             cardinality = ReferenceCardinality.MANDATORY,
//             policy = ReferencePolicy.DYNAMIC,
//             unbind = "unsetAppManager")
//     protected void setAppManager(ApplicationManagerService appManager) {
// 
//         applicationManager = appManager;
//     }
// 
//     protected void unsetAppManager(ApplicationManagerService appManager) {
// 
//         applicationManager = null;
//     }
// 
//     public static ApplicationManagerService getAppManager() throws Exception {
// 
//         if (applicationManager == null) {
//             String msg = "Before activating App management service bundle, an instance of " + "ApplicationManager " +
//                     "should be in existance";
//             log.error(msg);
//             throw new Exception(msg);
//         }
//         return applicationManager;
//     }
// }


import org.apache.axis2.description.AxisService;
import org.apache.axis2.description.AxisServiceGroup;
import org.apache.axis2.description.Parameter;
import org.apache.axis2.engine.AxisConfiguration;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.wso2.carbon.CarbonException;
import org.wso2.carbon.application.deployer.AppDeployerConstants;
import org.wso2.carbon.application.deployer.AppDeployerUtils;
import org.wso2.carbon.application.deployer.CarbonApplication;
import org.wso2.carbon.application.deployer.config.Artifact;
import org.wso2.carbon.application.deployer.config.RegistryConfig;
import org.wso2.carbon.application.deployer.handler.DefaultAppDeployer;
import org.wso2.carbon.application.deployer.handler.RegistryResourceDeployer;
import org.wso2.carbon.application.deployer.persistence.CarbonAppPersistenceManager;
import org.wso2.carbon.application.mgt.internal.AppManagementServiceComponent;
import org.wso2.carbon.core.AbstractAdmin;
import org.wso2.carbon.core.util.SystemFilter;
import org.wso2.carbon.utils.ServerConstants;
import javax.activation.DataHandler;
import javax.activation.FileDataSource;
import java.io.File;
import java.io.PrintWriter;
import java.io.StringWriter;
import java.util.*;
            fileName = anAppList.substring(anAppList.lastIndexOf('/') + 1);
            existingFaultyApps.add(fileName);
        }
        return existingFaultyApps.toArray(new String[existingFaultyApps.size()]);

    }


    /**
     * Gives Fault Reason of the given Faulty Carbon Application
     *
     * @param faultCarbonAppName - name of the faulty Application
     * @throws Exception - error on getting carbon app service
     */
    public String getFaultException(String faultCarbonAppName) throws Exception {
        String tenantId = AppDeployerUtils.getTenantIdString(getAxisConfig());
        HashMap<String, Exception> appList
                = AppManagementServiceComponent.getAppManager().getFaultyCarbonApps(tenantId);

        String faultException = null;

        String fileName = null;
        for (String anAppList : appList.keySet()) {
            fileName = anAppList.substring(anAppList.lastIndexOf('/') + 1);

            if(faultCarbonAppName .equals(fileName)){
                Exception e = appList.get(anAppList);
                StringWriter errors = new StringWriter();
                e.printStackTrace(new PrintWriter(errors));
                faultException = errors.toString();
// Path: components/application-mgt/org.wso2.carbon.application.mgt/src/main/java/org/wso2/carbon/application/mgt/internal/AppManagementServiceComponent.java
// @Component(
//         name = "application.mgt.dscomponent",
//         immediate = true)
// public class AppManagementServiceComponent {
// 
//     private static Log log = LogFactory.getLog(AppManagementServiceComponent.class);
// 
//     private static ApplicationManagerService applicationManager;
// 
//     @Activate
//     protected void activate(ComponentContext ctxt) {
// 
//         if (log.isDebugEnabled()) {
//             log.debug("Activated AppManagementServiceComponent");
//         }
//     }
// 
//     @Deactivate
//     protected void deactivate(ComponentContext ctxt) {
// 
//         if (log.isDebugEnabled()) {
//             log.debug("Deactivated AppManagementServiceComponent");
//         }
//     }
// 
//     @Reference(
//             name = "application.manager",
//             service = org.wso2.carbon.application.deployer.service.ApplicationManagerService.class,
//             cardinality = ReferenceCardinality.MANDATORY,
//             policy = ReferencePolicy.DYNAMIC,
//             unbind = "unsetAppManager")
//     protected void setAppManager(ApplicationManagerService appManager) {
// 
//         applicationManager = appManager;
//     }
// 
//     protected void unsetAppManager(ApplicationManagerService appManager) {
// 
//         applicationManager = null;
//     }
// 
//     public static ApplicationManagerService getAppManager() throws Exception {
// 
//         if (applicationManager == null) {
//             String msg = "Before activating App management service bundle, an instance of " + "ApplicationManager " +
//                     "should be in existance";
//             log.error(msg);
//             throw new Exception(msg);
//         }
//         return applicationManager;
//     }
// }


// Path: components/application-mgt/org.wso2.carbon.application.mgt/src/main/java/org/wso2/carbon/application/mgt/ApplicationAdmin.java
import org.apache.axis2.description.AxisService;
import org.apache.axis2.description.AxisServiceGroup;
import org.apache.axis2.description.Parameter;
import org.apache.axis2.engine.AxisConfiguration;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.wso2.carbon.CarbonException;
import org.wso2.carbon.application.deployer.AppDeployerConstants;
import org.wso2.carbon.application.deployer.AppDeployerUtils;
import org.wso2.carbon.application.deployer.CarbonApplication;
import org.wso2.carbon.application.deployer.config.Artifact;
import org.wso2.carbon.application.deployer.config.RegistryConfig;
import org.wso2.carbon.application.deployer.handler.DefaultAppDeployer;
import org.wso2.carbon.application.deployer.handler.RegistryResourceDeployer;
import org.wso2.carbon.application.deployer.persistence.CarbonAppPersistenceManager;
import org.wso2.carbon.application.mgt.internal.AppManagementServiceComponent;
import org.wso2.carbon.core.AbstractAdmin;
import org.wso2.carbon.core.util.SystemFilter;
import org.wso2.carbon.utils.ServerConstants;
import javax.activation.DataHandler;
import javax.activation.FileDataSource;
import java.io.File;
import java.io.PrintWriter;
import java.io.StringWriter;
import java.util.*;

            fileName = anAppList.substring(anAppList.lastIndexOf('/') + 1);
            existingFaultyApps.add(fileName);
        }
        return existingFaultyApps.toArray(new String[existingFaultyApps.size()]);

    }


    /**
     * Gives Fault Reason of the given Faulty Carbon Application
     *
     * @param faultCarbonAppName - name of the faulty Application
     * @throws Exception - error on getting carbon app service
     */
    public String getFaultException(String faultCarbonAppName) throws Exception {
        String tenantId = AppDeployerUtils.getTenantIdString(getAxisConfig());
        HashMap<String, Exception> appList
                = AppManagementServiceComponent.getAppManager().getFaultyCarbonApps(tenantId);

        String faultException = null;

        String fileName = null;
        for (String anAppList : appList.keySet()) {
            fileName = anAppList.substring(anAppList.lastIndexOf('/') + 1);

            if(faultCarbonAppName .equals(fileName)){
                Exception e = appList.get(anAppList);
                StringWriter errors = new StringWriter();
                e.printStackTrace(new PrintWriter(errors));
                faultException = errors.toString();
                break;