Skip to content

Commit

Permalink
Added discovery strategy for ds models.
Browse files Browse the repository at this point in the history
Also added workaround for installation of plugins.
Some of this should be moved to the ds repo after 2.6
  • Loading branch information
goglepox committed Jun 14, 2012
1 parent 671f0bf commit 4db767b
Show file tree
Hide file tree
Showing 2 changed files with 97 additions and 7 deletions.
Expand Up @@ -5,6 +5,7 @@

import net.bioclipse.ui.install.InstallUtils;
import net.bioclipse.ui.install.discovery.BasicRepositoryDiscoveryStrategy;
import net.bioclipse.ui.install.discovery.DSModelsDiscoveryStrategy;

import org.eclipse.core.commands.AbstractHandler;
import org.eclipse.core.commands.ExecutionEvent;
Expand Down Expand Up @@ -37,7 +38,7 @@ public Object execute( ExecutionEvent event ) throws ExecutionException {
configuration.setShowTagFilter( false );

// open dialog
IWizard wizard = getWizard( catalog, configuration );
IWizard wizard = getWizard( catalog, configuration, strategy );
WizardDialog dialog =
new WizardDialog( WorkbenchUtil.getShell(), wizard );
dialog.open();
Expand All @@ -46,12 +47,22 @@ public Object execute( ExecutionEvent event ) throws ExecutionException {
}

private IWizard getWizard( Catalog catalog,
CatalogConfiguration configuration ) {

// NewDataProjectWizard wizard = new NewDataProjectWizard( catalog,
// configuration );

return new DiscoveryWizard( catalog, configuration );// wizard;
CatalogConfiguration configuration,
BasicRepositoryDiscoveryStrategy strategy ) {

if ( strategy instanceof DSModelsDiscoveryStrategy ) {
return new DiscoveryWizard( catalog, configuration ) {
@Override
public boolean performFinish() {

return DSModelsDiscoveryStrategy
.install( getCatalogPage().getInstallableConnectors(),
getContainer() );
}
};
} else {
return new DiscoveryWizard( catalog, configuration );// wizard;
}
}

private BasicRepositoryDiscoveryStrategy getStrategy( ExecutionEvent event ) {
Expand Down
@@ -0,0 +1,79 @@

package net.bioclipse.ui.install.discovery;

import java.lang.reflect.InvocationTargetException;
import java.util.Iterator;
import java.util.List;

import org.eclipse.core.runtime.IStatus;
import org.eclipse.core.runtime.Status;
import org.eclipse.core.runtime.SubMonitor;
import org.eclipse.equinox.internal.p2.discovery.model.CatalogItem;
import org.eclipse.equinox.internal.p2.ui.discovery.operations.DiscoveryInstallOperation;
import org.eclipse.equinox.p2.metadata.IInstallableUnit;
import org.eclipse.equinox.p2.query.IQuery;
import org.eclipse.equinox.p2.query.IQueryResult;
import org.eclipse.equinox.p2.query.QueryUtil;
import org.eclipse.equinox.p2.repository.metadata.IMetadataRepository;
import org.eclipse.jface.operation.IRunnableContext;
import org.eclipse.jface.operation.IRunnableWithProgress;
import org.eclipse.ui.statushandlers.StatusManager;

public class DSModelsDiscoveryStrategy extends
BasicRepositoryDiscoveryStrategy {

public static final String ID_PLUGIN = "net.bioclipse.ui.install";

protected void queryInstallableUnits( SubMonitor monitor,
List<IMetadataRepository> repositories ) {
monitor.setWorkRemaining(repositories.size());
for (final IMetadataRepository repository : repositories) {
checkCancelled(monitor);
IQuery<IInstallableUnit> cQuery = QueryUtil
.createMatchQuery( "id == 'net.bioclipse.ds.models_feature.feature.group'",
new Object[0] );
IQueryResult<IInstallableUnit> cResult = repository.query( cQuery,
monitor.newChild( 100 ) );
IInstallableUnit iu = cResult.iterator().next();

IQuery<IInstallableUnit> query = QueryUtil
.createQuery( "select( iu | $0.requirements.exists( rc | iu ~= rc))", new Object[] { iu } ); //$NON-NLS-1$
IQueryResult<IInstallableUnit> result = repository.query(query, monitor.newChild(1));
for (Iterator<IInstallableUnit> iter = result.iterator(); iter.hasNext();) {
process(repository, iter.next());
}
}
}

public static boolean install( List<CatalogItem> descriptors,
IRunnableContext context ) {

try {
IRunnableWithProgress runner = new DiscoveryInstallOperation(
descriptors ) {

@Override
protected IQuery<IInstallableUnit> createInstalledIUsQuery() {

return QueryUtil.createIUAnyQuery();
}
};
context.run( true, true, runner );
} catch ( InvocationTargetException e ) {
IStatus status = new Status(
IStatus.ERROR,
DSModelsDiscoveryStrategy.ID_PLUGIN,
e.getCause().getMessage(),
e.getCause() );
StatusManager.getManager()
.handle( status,
StatusManager.SHOW | StatusManager.BLOCK
| StatusManager.LOG );
return false;
} catch ( InterruptedException e ) {
// canceled
return false;
}
return true;
}
}

0 comments on commit 4db767b

Please sign in to comment.