|
Lines 17-22
Link Here
|
| 17 |
import java.io.InputStream; |
17 |
import java.io.InputStream; |
| 18 |
import java.net.URL; |
18 |
import java.net.URL; |
| 19 |
import java.text.MessageFormat; |
19 |
import java.text.MessageFormat; |
|
|
20 |
import java.util.ArrayList; |
| 21 |
import java.util.HashMap; |
| 22 |
import java.util.List; |
| 23 |
import java.util.Map; |
| 24 |
import java.util.Map.Entry; |
| 20 |
|
25 |
|
| 21 |
import org.eclipse.core.runtime.CoreException; |
26 |
import org.eclipse.core.runtime.CoreException; |
| 22 |
import org.eclipse.core.runtime.FileLocator; |
27 |
import org.eclipse.core.runtime.FileLocator; |
|
Lines 374-387
Link Here
|
| 374 |
IExtensionRegistry registry = Platform.getExtensionRegistry(); |
379 |
IExtensionRegistry registry = Platform.getExtensionRegistry(); |
| 375 |
IExtensionPoint point = registry.getExtensionPoint( ID_RESOURCES ); |
380 |
IExtensionPoint point = registry.getExtensionPoint( ID_RESOURCES ); |
| 376 |
IConfigurationElement[] elements = point.getConfigurationElements(); |
381 |
IConfigurationElement[] elements = point.getConfigurationElements(); |
|
|
382 |
List loadedResources = new ArrayList(); |
| 383 |
Map deferredResources = new HashMap(); |
| 377 |
for( int i = 0; i < elements.length; i++ ) { |
384 |
for( int i = 0; i < elements.length; i++ ) { |
| 378 |
try { |
385 |
try { |
| 379 |
IResource resource = ( IResource )elements[ i ].createExecutableExtension( "class" ); |
386 |
IResource resource = ( IResource )elements[ i ].createExecutableExtension( "class" ); |
| 380 |
RWTFactory.getResourceRegistry().add( resource ); |
387 |
IConfigurationElement[] dependsOn = elements[ i ].getChildren( "dependsOn" ); |
| 381 |
} catch( final CoreException ce ) { |
388 |
List resourceDependencies = new ArrayList(); |
|
|
389 |
for( int j = 0 ; j < dependsOn.length ; j++ ) { |
| 390 |
String dependency = dependsOn[ j ].getAttribute( "class" ); |
| 391 |
resourceDependencies.add( dependency ); |
| 392 |
} |
| 393 |
resourceDependencies.removeAll( loadedResources ); |
| 394 |
boolean checkDeferredResources = false; |
| 395 |
if( resourceDependencies.size() == 0 ) { |
| 396 |
RWTFactory.getResourceRegistry().add( resource ); |
| 397 |
loadedResources.add( resource.getClass().getName() ); |
| 398 |
checkDeferredResources = true; |
| 399 |
} else { |
| 400 |
deferredResources.put( resource, resourceDependencies ); |
| 401 |
} |
| 402 |
while( checkDeferredResources ) { |
| 403 |
checkDeferredResources = false; |
| 404 |
Entry[] entries = new Entry[ deferredResources.size() ]; |
| 405 |
deferredResources.entrySet().toArray( entries ); |
| 406 |
for( int j = 0; j < entries.length; j++ ) { |
| 407 |
IResource deferredResource = ( IResource )entries[ j ].getKey(); |
| 408 |
List deferredResourceDependencies = ( List )entries[ j ].getValue(); |
| 409 |
deferredResourceDependencies.removeAll( loadedResources ); |
| 410 |
if( deferredResourceDependencies.size() == 0 ) { |
| 411 |
RWTFactory.getResourceRegistry().add( deferredResource ); |
| 412 |
loadedResources.add( deferredResource.getClass().getName() ); |
| 413 |
deferredResources.remove( deferredResource ); |
| 414 |
checkDeferredResources = true; |
| 415 |
} |
| 416 |
} |
| 417 |
} |
| 418 |
} catch( CoreException ce ) { |
| 382 |
WorkbenchPlugin.getDefault().getLog().log( ce.getStatus() ); |
419 |
WorkbenchPlugin.getDefault().getLog().log( ce.getStatus() ); |
| 383 |
} |
420 |
} |
| 384 |
} |
421 |
} |
|
|
422 |
if( deferredResources.size() != 0 ) { |
| 423 |
String pluginId = WorkbenchPlugin.getDefault().getBundle().getSymbolicName(); |
| 424 |
String message = "Dependencies could not be resolved for " + deferredResources; |
| 425 |
WorkbenchPlugin.getDefault().getLog().log( new Status( IStatus.ERROR, pluginId, message ) ); |
| 426 |
} |
| 385 |
} |
427 |
} |
| 386 |
|
428 |
|
| 387 |
private static void registerUICallBackServiceHandler() { |
429 |
private static void registerUICallBackServiceHandler() { |