public KarafRuntimeDataProvider()

in plugins/org.apache.karaf.eik.workbench/src/main/java/org/apache/karaf/eik/workbench/internal/KarafRuntimeDataProvider.java [92:157]


    public KarafRuntimeDataProvider(final String name, final MBeanProvider provider) {
        super();

        this.name = name;
        this.mbeanProvider = provider;

        this.updateDataJob = new Job("Populating OSGi Runtime view data for: " + name) {

            private volatile boolean cancel = false;

            @Override
            public IStatus run(IProgressMonitor monitor) {
                if (monitor == null) {
                    monitor = new NullProgressMonitor();
                }

                if (   !KarafRuntimeDataProvider.this.mbeanProvider.isOpen()
                    && !cancel)
                {
                    this.schedule(25000);
                }

                monitor.beginTask("Populating view data set", IProgressMonitor.UNKNOWN);

                IStatus status = loadBundleData(monitor);
                if (!status.isOK()) {
                    // Do something?
                }

                if (monitor.isCanceled()) {
                    return Status.OK_STATUS;
                }

                status = loadServiceData(monitor);
                if (!status.isOK()) {
                    // Do something?
                }

                monitor.done();

                if (monitor.isCanceled()) {
                    return Status.OK_STATUS;
                }

                if (!cancel) {
                    /*
                     * Poll every 25 seconds because the MBeans are not notification
                     * enabled
                     */
                    this.schedule(25000);
                }

                fireProviderChangeEvent(EnumSet.of(RuntimeDataProviderListener.EventType.CHANGE));

                return Status.OK_STATUS;
            }

            @Override
            protected void canceling() {
                cancel = true;
            }
        };

        this.updateDataJob.setSystem(true);
        this.updateDataJob.setPriority(Job.LONG);
    }