Search in sources :

Example 1 with ModuleGroupBean

use of org.talend.hadoop.distribution.dynamic.bean.ModuleGroupBean in project tbd-studio-se by Talend.

the class DynamicLibraryNeededExtensionAdaper method adapt.

public IDynamicExtension adapt(IDynamicMonitor monitor) throws Exception {
    DynamicDistributionUtils.checkCancelOrNot(monitor);
    resolve();
    TemplateBean templateBean = getTemplateBean();
    DynamicConfiguration configuration = getConfiguration();
    String templateId = templateBean.getId();
    String distributionName = configuration.getDistribution();
    String id = configuration.getId();
    IDynamicExtension libNeededExtension = DynamicFactory.getInstance().createDynamicExtension();
    libNeededExtension.setExtensionId(DynamicDistributionUtils.getExtensionId(DynamicDistributionUtils.getPluginKey(distributionName, templateId, id, ATTR_POINT)));
    libNeededExtension.setExtensionPoint(ATTR_POINT);
    List<ModuleBean> modules = templateBean.getModules();
    if (modules != null) {
        try {
            Exception[] ex = new Exception[1];
            Set<String> registedModules = Collections.synchronizedSet(new LinkedHashSet<>());
            for (ModuleBean moduleBean : modules) {
                DynamicDistributionUtils.checkCancelOrNot(monitor);
                Runnable runnable = new Runnable() {

                    int count = 0;

                    @Override
                    public void run() {
                        try {
                            DynamicModuleAdapter dynamicModuleAdapter = new DynamicModuleAdapter(templateBean, configuration, moduleBean, dependencyResolver, registedModules);
                            List<IDynamicConfiguration> librariesNeeded = dynamicModuleAdapter.adapt(monitor, isEnableMultiThread());
                            if (librariesNeeded != null && !librariesNeeded.isEmpty()) {
                                addDynamicConfigurations(libNeededExtension, librariesNeeded);
                            }
                            String beanId = moduleBean.getId();
                            moduleBeanAdapterMap.put(beanId, dynamicModuleAdapter);
                        } catch (Exception e) {
                            Throwable rootCause = ExceptionUtils.getRootCause(e);
                            if (e instanceof FileNotFoundException || rootCause instanceof FileNotFoundException) {
                                if (count < 5) {
                                    count++;
                                    run();
                                } else {
                                    ex[0] = e;
                                }
                            } else {
                                ex[0] = e;
                            }
                        }
                    }
                };
                if (isEnableMultiThread()) {
                    getThreadPool().execute(runnable);
                    continue;
                } else {
                    runnable.run();
                    if (ex[0] != null) {
                        throw ex[0];
                    }
                }
            }
            if (isEnableMultiThread()) {
                int totalTasks = modules.size();
                if (monitor != null) {
                    monitor.beginTask(// $NON-NLS-1$
                    Messages.getString("DynamicLibraryNeededExtensionAdaper.monitor.waitAllFinish", totalTasks), totalTasks);
                }
                int completed = 0;
                while (true) {
                    int activeCount = getThreadPool().getActiveCount();
                    if (activeCount <= 0) {
                        break;
                    }
                    if (monitor != null) {
                        int newCompleted = (int) getThreadPool().getCompletedTaskCount();
                        int newWorked = newCompleted - completed;
                        completed = newCompleted;
                        monitor.setTaskName(// $NON-NLS-1$
                        Messages.getString(// $NON-NLS-1$
                        "DynamicLibraryNeededExtensionAdaper.monitor.waitAllFinish", activeCount));
                        monitor.worked(newWorked);
                    }
                    Thread.sleep(200);
                    DynamicDistributionUtils.checkCancelOrNot(monitor);
                    if (ex[0] != null) {
                        throw ex[0];
                    }
                }
            }
        } finally {
            if (isEnableMultiThread()) {
                if (monitor != null) {
                    // $NON-NLS-1$
                    monitor.beginTask("", IProgressMonitor.UNKNOWN);
                }
                getThreadPool().clearThreads();
                threadPool = null;
            }
        }
    }
    List<ModuleGroupBean> moduleGroups = templateBean.getModuleGroups();
    if (moduleGroups != null) {
        for (ModuleGroupBean moduleGroupBean : moduleGroups) {
            DynamicDistributionUtils.checkCancelOrNot(monitor);
            DynamicModuleGroupAdapter libNeededGroupAdapter = new DynamicModuleGroupAdapter(templateBean, configuration, moduleGroupBean, moduleBeanAdapterMap);
            IDynamicConfiguration dynamicModuleGroup = libNeededGroupAdapter.adapt(monitor);
            if (dynamicModuleGroup != null) {
                libNeededExtension.addConfiguration(dynamicModuleGroup);
                String groupId = moduleGroupBean.getId();
                moduleGroupBeanAdapterMap.put(groupId, libNeededGroupAdapter);
            }
        }
    }
    return libNeededExtension;
}
Also used : IDynamicConfiguration(org.talend.core.runtime.dynamic.IDynamicConfiguration) ModuleGroupBean(org.talend.hadoop.distribution.dynamic.bean.ModuleGroupBean) FileNotFoundException(java.io.FileNotFoundException) FileNotFoundException(java.io.FileNotFoundException) IDynamicConfiguration(org.talend.core.runtime.dynamic.IDynamicConfiguration) DynamicConfiguration(org.talend.hadoop.distribution.dynamic.DynamicConfiguration) IDynamicExtension(org.talend.core.runtime.dynamic.IDynamicExtension) ModuleBean(org.talend.hadoop.distribution.dynamic.bean.ModuleBean) TemplateBean(org.talend.hadoop.distribution.dynamic.bean.TemplateBean)

Aggregations

FileNotFoundException (java.io.FileNotFoundException)1 IDynamicConfiguration (org.talend.core.runtime.dynamic.IDynamicConfiguration)1 IDynamicExtension (org.talend.core.runtime.dynamic.IDynamicExtension)1 DynamicConfiguration (org.talend.hadoop.distribution.dynamic.DynamicConfiguration)1 ModuleBean (org.talend.hadoop.distribution.dynamic.bean.ModuleBean)1 ModuleGroupBean (org.talend.hadoop.distribution.dynamic.bean.ModuleGroupBean)1 TemplateBean (org.talend.hadoop.distribution.dynamic.bean.TemplateBean)1