|
Lines 17-23
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 |
|
20 |
import java.util.ArrayList; |
|
|
21 |
import java.util.Iterator; |
| 22 |
import java.util.List; |
| 21 |
import org.eclipse.core.runtime.CoreException; |
23 |
import org.eclipse.core.runtime.CoreException; |
| 22 |
import org.eclipse.core.runtime.FileLocator; |
24 |
import org.eclipse.core.runtime.FileLocator; |
| 23 |
import org.eclipse.core.runtime.IConfigurationElement; |
25 |
import org.eclipse.core.runtime.IConfigurationElement; |
|
Lines 61-66
Link Here
|
| 61 |
*/ |
63 |
*/ |
| 62 |
// TODO: [fappel] clean replacement mechanism that is anchored in W4Toolkit core |
64 |
// TODO: [fappel] clean replacement mechanism that is anchored in W4Toolkit core |
| 63 |
public final class EngineConfigWrapper implements IEngineConfig { |
65 |
public final class EngineConfigWrapper implements IEngineConfig { |
|
|
66 |
|
| 67 |
private static final class DependentResource { |
| 68 |
public final IResource resource; |
| 69 |
public final String id; |
| 70 |
public final List dependencies; |
| 71 |
|
| 72 |
public DependentResource( IResource resource, String id, List dependencies ) { |
| 73 |
this.resource = resource; |
| 74 |
this.id = id; |
| 75 |
this.dependencies = dependencies; |
| 76 |
} |
| 77 |
|
| 78 |
public String toString() { |
| 79 |
return id != null ? id : resource.getClass().getName(); |
| 80 |
} |
| 81 |
} |
| 64 |
|
82 |
|
| 65 |
// extension point id for adapter factory registration |
83 |
// extension point id for adapter factory registration |
| 66 |
private static final String ID_ADAPTER_FACTORY |
84 |
private static final String ID_ADAPTER_FACTORY |
|
Lines 374-387
Link Here
|
| 374 |
IExtensionRegistry registry = Platform.getExtensionRegistry(); |
392 |
IExtensionRegistry registry = Platform.getExtensionRegistry(); |
| 375 |
IExtensionPoint point = registry.getExtensionPoint( ID_RESOURCES ); |
393 |
IExtensionPoint point = registry.getExtensionPoint( ID_RESOURCES ); |
| 376 |
IConfigurationElement[] elements = point.getConfigurationElements(); |
394 |
IConfigurationElement[] elements = point.getConfigurationElements(); |
|
|
395 |
DependentResource[] resources = loadResources( elements ); |
| 396 |
resources = sortResources( resources ); |
| 397 |
registerResources( resources ); |
| 398 |
} |
| 399 |
|
| 400 |
private static DependentResource[] loadResources( IConfigurationElement[] elements ) { |
| 401 |
DependentResource[] result = new DependentResource[ elements.length ]; |
| 377 |
for( int i = 0; i < elements.length; i++ ) { |
402 |
for( int i = 0; i < elements.length; i++ ) { |
| 378 |
try { |
403 |
try { |
| 379 |
IResource resource = ( IResource )elements[ i ].createExecutableExtension( "class" ); |
404 |
IResource resource = ( IResource )elements[ i ].createExecutableExtension( "class" ); |
| 380 |
RWTFactory.getResourceRegistry().add( resource ); |
405 |
String resourceId = elements[ i ].getAttribute( "id" ); |
| 381 |
} catch( final CoreException ce ) { |
406 |
IConfigurationElement[] dependsOn = elements[ i ].getChildren( "dependsOn" ); |
|
|
407 |
List resourceDependencies = new ArrayList(); |
| 408 |
for( int j = 0 ; j < dependsOn.length ; j++ ) { |
| 409 |
String dependency = dependsOn[ j ].getAttribute( "resourceId" ); |
| 410 |
resourceDependencies.add( dependency ); |
| 411 |
} |
| 412 |
result[ i ] = new DependentResource( resource, resourceId, resourceDependencies ); |
| 413 |
} catch( CoreException ce ) { |
| 382 |
WorkbenchPlugin.getDefault().getLog().log( ce.getStatus() ); |
414 |
WorkbenchPlugin.getDefault().getLog().log( ce.getStatus() ); |
| 383 |
} |
415 |
} |
| 384 |
} |
416 |
} |
|
|
417 |
return result; |
| 418 |
} |
| 419 |
|
| 420 |
private static DependentResource[] sortResources( DependentResource[] resources ) { |
| 421 |
DependentResource[] result = new DependentResource[ resources.length ]; |
| 422 |
List sortedResourceIds = new ArrayList(); |
| 423 |
List deferredResources = new ArrayList(); |
| 424 |
int index = 0; |
| 425 |
for( int i = 0; i < resources.length; i++ ) { |
| 426 |
DependentResource resource = resources[ i ]; |
| 427 |
if( resource != null ) { |
| 428 |
resource.dependencies.removeAll( sortedResourceIds ); |
| 429 |
boolean checkDeferredResources = false; |
| 430 |
if( resource.dependencies.isEmpty() ) { |
| 431 |
result[ index++ ] = resource; |
| 432 |
sortedResourceIds.add( resource.id ); |
| 433 |
checkDeferredResources = true; |
| 434 |
} else { |
| 435 |
deferredResources.add( resource ); |
| 436 |
} |
| 437 |
while( checkDeferredResources ) { |
| 438 |
checkDeferredResources = false; |
| 439 |
for( Iterator iterator = deferredResources.iterator(); iterator.hasNext(); ) { |
| 440 |
DependentResource deferredResource = ( DependentResource )iterator.next(); |
| 441 |
deferredResource.dependencies.removeAll( sortedResourceIds ); |
| 442 |
if( deferredResource.dependencies.isEmpty() ) { |
| 443 |
result[ index++ ] = deferredResource; |
| 444 |
sortedResourceIds.add( deferredResource.id ); |
| 445 |
iterator.remove(); |
| 446 |
checkDeferredResources = true; |
| 447 |
} |
| 448 |
} |
| 449 |
} |
| 450 |
} |
| 451 |
} |
| 452 |
if( deferredResources.size() != 0 ) { |
| 453 |
String pluginId = WorkbenchPlugin.getDefault().getBundle().getSymbolicName(); |
| 454 |
String message = "Dependencies could not be resolved for " + deferredResources; |
| 455 |
WorkbenchPlugin.getDefault().getLog().log( new Status( IStatus.ERROR, pluginId, message ) ); |
| 456 |
} |
| 457 |
return result; |
| 458 |
} |
| 459 |
|
| 460 |
private static void registerResources( DependentResource[] resources ) { |
| 461 |
for( int i = 0; i < resources.length; i++ ) { |
| 462 |
if( resources[ i ] != null ) { |
| 463 |
RWTFactory.getResourceRegistry().add( resources[ i ].resource ); |
| 464 |
} |
| 465 |
} |
| 385 |
} |
466 |
} |
| 386 |
|
467 |
|
| 387 |
private static void registerUICallBackServiceHandler() { |
468 |
private static void registerUICallBackServiceHandler() { |