Search in sources :

Example 6 with LoadMetadataRepositoryJob

use of org.eclipse.equinox.p2.ui.LoadMetadataRepositoryJob in project translationstudio8 by heartsome.

the class AutomaticUpdate method checkForUpdates.

public void checkForUpdates() throws OperationCanceledException {
    // 检查 propfile
    String profileId = getProvisioningUI().getProfileId();
    IProvisioningAgent agent = getProvisioningUI().getSession().getProvisioningAgent();
    IProfile profile = null;
    if (agent != null) {
        IProfileRegistry registry = (IProfileRegistry) agent.getService(IProfileRegistry.SERVICE_NAME);
        if (registry != null) {
            profile = registry.getProfile(profileId);
        }
    }
    if (profile == null) {
        // Inform the user nicely
        P2UpdateUtil.openConnectErrorInfoDialog(getShell(), P2UpdateUtil.INFO_TYPE_AUTO_CHECK);
        return;
    }
    // 开始检查前先确定是否有repository
    RepositoryTracker repoMan = getProvisioningUI().getRepositoryTracker();
    if (repoMan.getKnownRepositories(getProvisioningUI().getSession()).length == 0) {
        P2UpdateUtil.openConnectErrorInfoDialog(getShell(), P2UpdateUtil.INFO_TYPE_AUTO_CHECK);
        return;
    }
    final IStatus[] checkStatus = new IStatus[1];
    Job.getJobManager().cancel(LoadMetadataRepositoryJob.LOAD_FAMILY);
    final LoadMetadataRepositoryJob loadJob = new LoadMetadataRepositoryJob(getProvisioningUI()) {

        public IStatus runModal(IProgressMonitor monitor) {
            SubMonitor sub = SubMonitor.convert(monitor, P2UpdateUtil.CHECK_UPDATE_TASK_NAME, 1000);
            // load repository
            IStatus status = super.runModal(sub.newChild(500));
            if (status.getSeverity() == IStatus.CANCEL) {
                return status;
            }
            if (status.getSeverity() != Status.OK) {
                // load repository error
                checkStatus[0] = status;
            }
            operation = getProvisioningUI().getUpdateOperation(null, null);
            // check for updates
            IStatus resolveStatus = operation.resolveModal(sub.newChild(500));
            if (resolveStatus.getSeverity() == IStatus.CANCEL) {
                return Status.CANCEL_STATUS;
            }
            return Status.OK_STATUS;
        }
    };
    loadJob.setName(P2UpdateUtil.ATUO_CHECK_UPDATE_JOB_NAME);
    loadJob.setProperty(LoadMetadataRepositoryJob.ACCUMULATE_LOAD_ERRORS, Boolean.toString(true));
    loadJob.addJobChangeListener(new JobChangeAdapter() {

        public void done(IJobChangeEvent event) {
            if (PlatformUI.isWorkbenchRunning())
                if (event.getResult().isOK()) {
                    PlatformUI.getWorkbench().getDisplay().asyncExec(new Runnable() {

                        public void run() {
                            if (checkStatus[0] != null) {
                                // 提示连接异常
                                P2UpdateUtil.openConnectErrorInfoDialog(getShell(), P2UpdateUtil.INFO_TYPE_AUTO_CHECK);
                                return;
                            }
                            doUpdate();
                        }
                    });
                }
        }
    });
    loadJob.setUser(true);
    loadJob.schedule();
}
Also used : IStatus(org.eclipse.core.runtime.IStatus) IProvisioningAgent(org.eclipse.equinox.p2.core.IProvisioningAgent) JobChangeAdapter(org.eclipse.core.runtime.jobs.JobChangeAdapter) SubMonitor(org.eclipse.core.runtime.SubMonitor) IJobChangeEvent(org.eclipse.core.runtime.jobs.IJobChangeEvent) IProgressMonitor(org.eclipse.core.runtime.IProgressMonitor) IProfileRegistry(org.eclipse.equinox.p2.engine.IProfileRegistry) IProfile(org.eclipse.equinox.p2.engine.IProfile) LoadMetadataRepositoryJob(org.eclipse.equinox.p2.ui.LoadMetadataRepositoryJob) RepositoryTracker(org.eclipse.equinox.p2.operations.RepositoryTracker)

Example 7 with LoadMetadataRepositoryJob

use of org.eclipse.equinox.p2.ui.LoadMetadataRepositoryJob in project knime-core by knime.

the class AbstractP2Action method startLoadJob.

/**
 * Starts the repository load job. After the repositories have been loaded,
 * {@link #openWizard(LoadMetadataRepositoryJob, ProvisioningUI)} is called.
 */
protected final void startLoadJob() {
    final ProvisioningUI provUI = ProvisioningUI.getDefaultUI();
    Job.getJobManager().cancel(LoadMetadataRepositoryJob.LOAD_FAMILY);
    final LoadMetadataRepositoryJob loadJob = new LoadMetadataRepositoryJob(provUI);
    loadJob.setProperty(LoadMetadataRepositoryJob.ACCUMULATE_LOAD_ERRORS, Boolean.toString(true));
    loadJob.addJobChangeListener(new JobChangeAdapter() {

        @Override
        public void done(final IJobChangeEvent event) {
            if (PlatformUI.isWorkbenchRunning() && event.getResult().isOK()) {
                openWizard(loadJob, provUI);
            }
        }
    });
    loadJob.setUser(true);
    loadJob.schedule();
}
Also used : ProvisioningUI(org.eclipse.equinox.p2.ui.ProvisioningUI) JobChangeAdapter(org.eclipse.core.runtime.jobs.JobChangeAdapter) IJobChangeEvent(org.eclipse.core.runtime.jobs.IJobChangeEvent) LoadMetadataRepositoryJob(org.eclipse.equinox.p2.ui.LoadMetadataRepositoryJob)

Example 8 with LoadMetadataRepositoryJob

use of org.eclipse.equinox.p2.ui.LoadMetadataRepositoryJob in project knime-core by knime.

the class InvokeUpdateAction method openWizard.

@Override
protected void openWizard(final LoadMetadataRepositoryJob job, final ProvisioningUI provUI) {
    final UpdateOperation operation = provUI.getUpdateOperation(null, null);
    // check for updates
    operation.resolveModal(null);
    PlatformUI.getWorkbench().getDisplay().asyncExec(new Runnable() {

        @Override
        public void run() {
            Shell shell = PlatformUI.getWorkbench().getModalDialogShellProvider().getShell();
            if (!operation.hasResolved()) {
                MessageDialog.openInformation(shell, "Update KNIME...", "No updates were found");
            } else if (provUI.getPolicy().continueWorkingWithOperation(operation, shell)) {
                if (UpdateSingleIUWizard.validFor(operation)) {
                    // Special case for only updating a single root
                    UpdateSingleIUWizard wizard = new UpdateSingleIUWizard(provUI, operation);
                    WizardDialog dialog = new WizardDialog(shell, wizard);
                    dialog.create();
                    if (dialog.open() == 0) {
                        clearOsgiAreaBeforeRestart();
                    }
                } else {
                    // Open the normal version of the update wizard
                    if (provUI.openUpdateWizard(false, operation, job) == 0) {
                        clearOsgiAreaBeforeRestart();
                    }
                }
            }
        }
    });
}
Also used : Shell(org.eclipse.swt.widgets.Shell) UpdateOperation(org.eclipse.equinox.p2.operations.UpdateOperation) UpdateSingleIUWizard(org.eclipse.equinox.internal.p2.ui.dialogs.UpdateSingleIUWizard) WizardDialog(org.eclipse.jface.wizard.WizardDialog)

Aggregations

IJobChangeEvent (org.eclipse.core.runtime.jobs.IJobChangeEvent)5 JobChangeAdapter (org.eclipse.core.runtime.jobs.JobChangeAdapter)5 LoadMetadataRepositoryJob (org.eclipse.equinox.p2.ui.LoadMetadataRepositoryJob)5 IStatus (org.eclipse.core.runtime.IStatus)3 UpdateSingleIUWizard (org.eclipse.equinox.internal.p2.ui.dialogs.UpdateSingleIUWizard)3 UpdateOperation (org.eclipse.equinox.p2.operations.UpdateOperation)3 WizardDialog (org.eclipse.jface.wizard.WizardDialog)3 IProgressMonitor (org.eclipse.core.runtime.IProgressMonitor)2 SubMonitor (org.eclipse.core.runtime.SubMonitor)2 ProvisioningUI (org.eclipse.equinox.p2.ui.ProvisioningUI)2 OperationCanceledException (org.eclipse.core.runtime.OperationCanceledException)1 IProvisioningAgent (org.eclipse.equinox.p2.core.IProvisioningAgent)1 IProfile (org.eclipse.equinox.p2.engine.IProfile)1 IProfileRegistry (org.eclipse.equinox.p2.engine.IProfileRegistry)1 InstallOperation (org.eclipse.equinox.p2.operations.InstallOperation)1 RepositoryTracker (org.eclipse.equinox.p2.operations.RepositoryTracker)1 Shell (org.eclipse.swt.widgets.Shell)1