Some Eclipse Foundation services are deprecated, or will be soon. Please ensure you've read this important communication.
View | Details | Raw Unified | Return to bug 321282 | Differences between
and this patch

Collapse All | Expand All

(-)schema/rap/resources.exsd (+25 lines)
Lines 49-54 Link Here
49
         </appInfo>
49
         </appInfo>
50
      </annotation>
50
      </annotation>
51
      <complexType>
51
      <complexType>
52
         <sequence minOccurs="0" maxOccurs="unbounded">
53
            <element ref="dependsOn"/>
54
         </sequence>
55
         <attribute name="id" type="string">
56
            <annotation>
57
               <documentation>
58
                  An optional identifier of the resource instance.
59
               </documentation>
60
            </annotation>
61
         </attribute>
52
         <attribute name="class" type="string" use="required">
62
         <attribute name="class" type="string" use="required">
53
            <annotation>
63
            <annotation>
54
               <documentation>
64
               <documentation>
Lines 62-67 Link Here
62
      </complexType>
72
      </complexType>
63
   </element>
73
   </element>
64
74
75
   <element name="dependsOn">
76
      <complexType>
77
         <attribute name="resourceId" type="string" use="required">
78
            <annotation>
79
               <documentation>
80
                  The resourceId is used to identify the resource on which this resource depends on.
81
               </documentation>
82
               <appInfo>
83
                  <meta.attribute kind="identifier" basedOn="org.eclipse.rap.ui.resources/resource/@id"/>
84
               </appInfo>
85
            </annotation>
86
         </attribute>
87
      </complexType>
88
   </element>
89
65
   <annotation>
90
   <annotation>
66
      <appInfo>
91
      <appInfo>
67
         <meta.section type="since"/>
92
         <meta.section type="since"/>
(-)All Tests/org/eclipse/rap/ui/tests/AllTests.java (-8 / +10 lines)
Lines 1-12 Link Here
1
/*******************************************************************************
1
/*******************************************************************************
2
* Copyright (c) 2010 EclipseSource and others. All rights reserved. This
2
 * Copyright (c) 2010, 2011 EclipseSource and others.
3
* program and the accompanying materials are made available under the terms of
3
 * All rights reserved. This program and the accompanying materials
4
* the Eclipse Public License v1.0 which accompanies this distribution, and is
4
 * are made available under the terms of the Eclipse Public License v1.0
5
* available at http://www.eclipse.org/legal/epl-v10.html
5
 * which accompanies this distribution, and is available at
6
*
6
 * http://www.eclipse.org/legal/epl-v10.html
7
* Contributors:
7
 *
8
*   EclipseSource - initial API and implementation
8
 * Contributors:
9
*******************************************************************************/
9
 *    EclipseSource - initial API and implementation
10
 ******************************************************************************/
10
package org.eclipse.rap.ui.tests;
11
package org.eclipse.rap.ui.tests;
11
12
12
import org.eclipse.jface.tests.viewers.Bug264226TableViewerTest;
13
import org.eclipse.jface.tests.viewers.Bug264226TableViewerTest;
Lines 26-31 Link Here
26
      suite.addTest( new org.eclipse.jface.tests.AllTests() );
27
      suite.addTest( new org.eclipse.jface.tests.AllTests() );
27
      // RAP UI Tests
28
      // RAP UI Tests
28
      suite.addTestSuite( ServiceHandlerExtensionTest.class );
29
      suite.addTestSuite( ServiceHandlerExtensionTest.class );
30
      suite.addTestSuite( EngineConfigWrapperTest.class );
29
      // RAP JFace Tests
31
      // RAP JFace Tests
30
      suite.addTestSuite( Bug264226TableViewerTest.class );
32
      suite.addTestSuite( Bug264226TableViewerTest.class );
31
      // Cleanup
33
      // Cleanup
(-)RAP (+53 lines)
Added Link Here
1
/*******************************************************************************
2
 * Copyright (c) 2011 EclipseSource and others.
3
 * All rights reserved. This program and the accompanying materials
4
 * are made available under the terms of the Eclipse Public License v1.0
5
 * which accompanies this distribution, and is available at
6
 * http://www.eclipse.org/legal/epl-v10.html
7
 *
8
 * Contributors:
9
 *    EclipseSource - initial API and implementation
10
 ******************************************************************************/
11
12
package org.eclipse.rap.ui.tests;
13
14
import org.eclipse.rap.ui.tests.resources.Resource1;
15
import org.eclipse.rap.ui.tests.resources.Resource2;
16
import org.eclipse.rap.ui.tests.resources.Resource3;
17
import org.eclipse.rap.ui.tests.resources.Resource4;
18
import org.eclipse.rap.ui.tests.resources.Resource5;
19
import org.eclipse.rwt.internal.engine.RWTFactory;
20
import org.eclipse.rwt.resources.IResource;
21
22
import junit.framework.TestCase;
23
24
public class EngineConfigWrapperTest extends TestCase {
25
  
26
  public void testRegisterResourcesWithDependencies() {
27
    IResource[] resources = RWTFactory.getResourceRegistry().get();
28
    int resource1Index = -1;
29
    int resource2Index = -1;
30
    int resource3Index = -1;
31
    int resource4Index = -1;
32
    int resource5Index = -1;
33
    for( int i = 0; i < resources.length; i++ ) {
34
      if( resources[ i ] instanceof Resource1 ) {
35
        resource1Index = i;
36
      } else if( resources[ i ] instanceof Resource2 ) {
37
        resource2Index = i;
38
      } else if( resources[ i ] instanceof Resource3 ) {
39
        resource3Index = i;
40
      } else if( resources[ i ] instanceof Resource4 ) {
41
        resource4Index = i;
42
      } else if( resources[ i ] instanceof Resource5 ) {
43
        resource5Index = i;
44
      }
45
    }
46
    // expected Resource4, Resource5, Resource3, Resource2, Resource1
47
    assertTrue( resource4Index < resource5Index );
48
    assertTrue( resource5Index < resource3Index );
49
    assertTrue( resource3Index < resource2Index );
50
    assertTrue( resource2Index < resource1Index );
51
  }
52
53
}
(-)RAP (+1 lines)
Added Link Here
1
var name = "bar";
(-)RAP (+32 lines)
Added Link Here
1
package org.eclipse.rap.ui.tests.resources;
2
3
import org.eclipse.rwt.resources.IResource;
4
import org.eclipse.rwt.resources.IResourceManager.RegisterOptions;
5
6
7
public final class Resource1 implements IResource {
8
9
  public String getCharset() {
10
    return "UTF-8"; //$NON-NLS-1$
11
  }
12
13
  public ClassLoader getLoader() {
14
    return Resource1.class.getClassLoader();
15
  }
16
17
  public String getLocation() {
18
    return "org/eclipse/rap/ui/tests/resources/Resource.js"; //$NON-NLS-1$
19
  }
20
21
  public RegisterOptions getOptions() {
22
    return RegisterOptions.VERSION_AND_COMPRESS;
23
  }
24
25
  public boolean isExternal() {
26
    return false;
27
  }
28
29
  public boolean isJSLibrary() {
30
    return true;
31
  }
32
}
(-)RAP (+32 lines)
Added Link Here
1
package org.eclipse.rap.ui.tests.resources;
2
3
import org.eclipse.rwt.resources.IResource;
4
import org.eclipse.rwt.resources.IResourceManager.RegisterOptions;
5
6
7
public final class Resource2 implements IResource {
8
9
  public String getCharset() {
10
    return "UTF-8"; //$NON-NLS-1$
11
  }
12
13
  public ClassLoader getLoader() {
14
    return Resource2.class.getClassLoader();
15
  }
16
17
  public String getLocation() {
18
    return "org/eclipse/rap/ui/tests/resources/Resource.js"; //$NON-NLS-1$
19
  }
20
21
  public RegisterOptions getOptions() {
22
    return RegisterOptions.VERSION_AND_COMPRESS;
23
  }
24
25
  public boolean isExternal() {
26
    return false;
27
  }
28
29
  public boolean isJSLibrary() {
30
    return true;
31
  }
32
}
(-)RAP (+32 lines)
Added Link Here
1
package org.eclipse.rap.ui.tests.resources;
2
3
import org.eclipse.rwt.resources.IResource;
4
import org.eclipse.rwt.resources.IResourceManager.RegisterOptions;
5
6
7
public final class Resource3 implements IResource {
8
9
  public String getCharset() {
10
    return "UTF-8"; //$NON-NLS-1$
11
  }
12
13
  public ClassLoader getLoader() {
14
    return Resource3.class.getClassLoader();
15
  }
16
17
  public String getLocation() {
18
    return "org/eclipse/rap/ui/tests/resources/Resource.js"; //$NON-NLS-1$
19
  }
20
21
  public RegisterOptions getOptions() {
22
    return RegisterOptions.VERSION_AND_COMPRESS;
23
  }
24
25
  public boolean isExternal() {
26
    return false;
27
  }
28
29
  public boolean isJSLibrary() {
30
    return true;
31
  }
32
}
(-)RAP (+32 lines)
Added Link Here
1
package org.eclipse.rap.ui.tests.resources;
2
3
import org.eclipse.rwt.resources.IResource;
4
import org.eclipse.rwt.resources.IResourceManager.RegisterOptions;
5
6
7
public final class Resource4 implements IResource {
8
9
  public String getCharset() {
10
    return "UTF-8"; //$NON-NLS-1$
11
  }
12
13
  public ClassLoader getLoader() {
14
    return Resource4.class.getClassLoader();
15
  }
16
17
  public String getLocation() {
18
    return "org/eclipse/rap/ui/tests/resources/Resource.js"; //$NON-NLS-1$
19
  }
20
21
  public RegisterOptions getOptions() {
22
    return RegisterOptions.VERSION_AND_COMPRESS;
23
  }
24
25
  public boolean isExternal() {
26
    return false;
27
  }
28
29
  public boolean isJSLibrary() {
30
    return true;
31
  }
32
}
(-)RAP (+32 lines)
Added Link Here
1
package org.eclipse.rap.ui.tests.resources;
2
3
import org.eclipse.rwt.resources.IResource;
4
import org.eclipse.rwt.resources.IResourceManager.RegisterOptions;
5
6
7
public final class Resource5 implements IResource {
8
9
  public String getCharset() {
10
    return "UTF-8"; //$NON-NLS-1$
11
  }
12
13
  public ClassLoader getLoader() {
14
    return Resource5.class.getClassLoader();
15
  }
16
17
  public String getLocation() {
18
    return "org/eclipse/rap/ui/tests/resources/Resource.js"; //$NON-NLS-1$
19
  }
20
21
  public RegisterOptions getOptions() {
22
    return RegisterOptions.VERSION_AND_COMPRESS;
23
  }
24
25
  public boolean isExternal() {
26
    return false;
27
  }
28
29
  public boolean isJSLibrary() {
30
    return true;
31
  }
32
}
(-)plugin.xml (+27 lines)
Lines 4450-4454 Link Here
4450
            id="myHandler2">
4450
            id="myHandler2">
4451
      </serviceHandler>
4451
      </serviceHandler>
4452
   </extension>
4452
   </extension>
4453
   <extension
4454
         point="org.eclipse.rap.ui.resources">
4455
      <resource
4456
            class="org.eclipse.rap.ui.tests.resources.Resource4">
4457
      </resource>
4458
      <resource
4459
            class="org.eclipse.rap.ui.tests.resources.Resource2"
4460
            id="org.eclipse.rap.ui.tests.resources.resource2">
4461
         <dependsOn
4462
               resourceId="org.eclipse.rap.ui.tests.resources.resource3">
4463
         </dependsOn>
4464
      </resource>
4465
      <resource
4466
            class="org.eclipse.rap.ui.tests.resources.Resource5">
4467
      </resource>
4468
      <resource
4469
            class="org.eclipse.rap.ui.tests.resources.Resource1"
4470
            id="org.eclipse.rap.ui.tests.resources.resource1">
4471
         <dependsOn
4472
               resourceId="org.eclipse.rap.ui.tests.resources.resource2">
4473
         </dependsOn>
4474
      </resource>
4475
      <resource
4476
            class="org.eclipse.rap.ui.tests.resources.Resource3"
4477
            id="org.eclipse.rap.ui.tests.resources.resource3">
4478
      </resource>
4479
   </extension>
4453
   <!-- RAP IAD END -->
4480
   <!-- RAP IAD END -->
4454
</plugin>            
4481
</plugin>            
(-)Eclipse UI/org/eclipse/rap/ui/internal/servlet/EngineConfigWrapper.java (-3 / +84 lines)
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() {

Return to bug 321282