Refactored the extension points. Defined manager-related extension points. Updated the manager-related classes. Small updates to the simple scheduler. Added logging to the MP context.

git-svn-id: https://svn.cs.york.ac.uk/svn/ossmeter/Software/source@400 1b171192-1bc4-4300-84b6-1b6fde2e8ce3

jw@CS.YORK.AC.UK jw@CS.YORK.AC.UK 2013-06-03

removed platform/org.ossmeter.platform/lib
removed platform/org.ossmeter.platform/lib/mapdb-0.9-20130314.081924-57.jar
removed platform/org.ossmeter.platform/src/org/ossmeter/platform/ExtensionMetricProviderManager.java
changed platform/org.ossmeter.platform/META-INF/MANIFEST.MF
changed platform/org.ossmeter.platform/src/org/ossmeter/platform/delta/bugtrackingsystem/ExtensionPointBugTrackingSystemManager.java
changed platform/org.ossmeter.platform/src/org/ossmeter/platform/delta/bugtrackingsystem/PlatformBugTrackingSystemManager.java
changed platform/org.ossmeter.platform/src/org/ossmeter/platform/delta/communicationchannel/ExtensionPointCommunicationChannelManager.java
changed platform/org.ossmeter.platform/src/org/ossmeter/platform/delta/communicationchannel/PlatformCommunicationChannelManager.java
changed platform/org.ossmeter.platform/src/org/ossmeter/platform/delta/vcs/ExtensionPointVcsManager.java
changed platform/org.ossmeter.platform/src/org/ossmeter/platform/delta/vcs/PlatformVcsManager.java
changed platform/org.ossmeter.platform/src/org/ossmeter/platform/Date.java
changed platform/org.ossmeter.platform/src/org/ossmeter/platform/MetricHistoryManager.java
changed platform/org.ossmeter.platform/src/org/ossmeter/platform/MetricProviderContext.java
changed platform/org.ossmeter.platform/src/org/ossmeter/platform/Platform.java
changed platform/org.ossmeter.platform/src/org/ossmeter/platform/SimpleMetricProviderScheduler.java
changed platform/org.ossmeter.platform/plugin.xml
copied platform/org.ossmeter.platform/schema/org.ossmeter.platform.metricprovider.rascal.exsd -> platform/org.ossmeter.platform/schema/org.ossmeter.platform.metricprovider.exsd
copied platform/org.ossmeter.platform/schema/org.ossmeter.repository.metricprovider.exsd -> platform/org.ossmeter.platform/schema/org.ossmeter.platform.managers.vcs.exsd
copied platform/org.ossmeter.platform/schema/org.ossmeter.repository.vcsmanager.exsd -> platform/org.ossmeter.platform/src/org/ossmeter/platform/ExtensionPointMetricProviderManager.java
platform/org.ossmeter.platform/META-INF/MANIFEST.MF Diff Switch to side-by-side view
Loading...
platform/org.ossmeter.platform/src/org/ossmeter/platform/delta/bugtrackingsystem/ExtensionPointBugTrackingSystemManager.java Diff Switch to side-by-side view
Loading...
platform/org.ossmeter.platform/src/org/ossmeter/platform/delta/bugtrackingsystem/PlatformBugTrackingSystemManager.java Diff Switch to side-by-side view
Loading...
platform/org.ossmeter.platform/src/org/ossmeter/platform/delta/communicationchannel/ExtensionPointCommunicationChannelManager.java Diff Switch to side-by-side view
Loading...
platform/org.ossmeter.platform/src/org/ossmeter/platform/delta/communicationchannel/PlatformCommunicationChannelManager.java Diff Switch to side-by-side view
Loading...
platform/org.ossmeter.platform/src/org/ossmeter/platform/delta/vcs/ExtensionPointVcsManager.java Diff Switch to side-by-side view
Loading...
platform/org.ossmeter.platform/src/org/ossmeter/platform/delta/vcs/PlatformVcsManager.java Diff Switch to side-by-side view
Loading...
platform/org.ossmeter.platform/src/org/ossmeter/platform/Date.java Diff Switch to side-by-side view
Loading...
platform/org.ossmeter.platform/src/org/ossmeter/platform/MetricHistoryManager.java Diff Switch to side-by-side view
Loading...
platform/org.ossmeter.platform/src/org/ossmeter/platform/MetricProviderContext.java Diff Switch to side-by-side view
Loading...
platform/org.ossmeter.platform/src/org/ossmeter/platform/Platform.java Diff Switch to side-by-side view
Loading...
platform/org.ossmeter.platform/src/org/ossmeter/platform/SimpleMetricProviderScheduler.java Diff Switch to side-by-side view
Loading...
platform/org.ossmeter.platform/plugin.xml Diff Switch to side-by-side view
Loading...
platform/org.ossmeter.platform/schema/org.ossmeter.platform.metricprovider.rascal.exsd to platform/org.ossmeter.platform/schema/org.ossmeter.platform.metricprovider.exsd
--- a/platform/org.ossmeter.platform/schema/org.ossmeter.platform.metricprovider.rascal.exsd
+++ b/platform/org.ossmeter.platform/schema/org.ossmeter.platform.metricprovider.exsd
@@ -3,7 +3,7 @@
 <schema targetNamespace="org.ossmeter.platform" xmlns="http://www.w3.org/2001/XMLSchema">
 <annotation>
       <appinfo>
-         <meta.schema plugin="org.ossmeter.platform" id="org.ossmeter.platform.metricprovider.rascal" name="Rascal Metric Provider"/>
+         <meta.schema plugin="org.ossmeter.platform" id="org.ossmeter.platform.metricprovider" name="metricProvider"/>
       </appinfo>
       <documentation>
          [Enter description of this extension point.]
@@ -18,7 +18,7 @@
       </annotation>
       <complexType>
          <sequence>
-            <element ref="rascalMetricProvider" minOccurs="1" maxOccurs="unbounded"/>
+            <element ref="metricProvider" minOccurs="1" maxOccurs="unbounded"/>
          </sequence>
          <attribute name="point" type="string" use="required">
             <annotation>
@@ -47,20 +47,16 @@
       </complexType>
    </element>
 
-   <element name="rascalMetricProvider">
+   <element name="metricProvider">
       <complexType>
-         <attribute name="rascalUri" type="string" use="required">
+         <attribute name="provider" type="string" use="required">
             <annotation>
                <documentation>
-                  The Rascal function. Format is &quot;rascal://ModuleName/functionName&quot;.
+                  The metrics provider.
                </documentation>
-            </annotation>
-         </attribute>
-         <attribute name="isHistoric" type="boolean" use="required">
-            <annotation>
-               <documentation>
-                  
-               </documentation>
+               <appinfo>
+                  <meta.attribute kind="java" basedOn=":org.ossmeter.platform.IMetricProvider"/>
+               </appinfo>
             </annotation>
          </attribute>
       </complexType>
platform/org.ossmeter.platform/schema/org.ossmeter.repository.metricprovider.exsd to platform/org.ossmeter.platform/schema/org.ossmeter.platform.managers.vcs.exsd
--- a/platform/org.ossmeter.platform/schema/org.ossmeter.repository.metricprovider.exsd
+++ b/platform/org.ossmeter.platform/schema/org.ossmeter.platform.managers.vcs.exsd
@@ -1,9 +1,9 @@
 <?xml version='1.0' encoding='UTF-8'?>
 <!-- Schema file written by PDE -->
-<schema targetNamespace="org.ossmeter.repository" xmlns="http://www.w3.org/2001/XMLSchema">
+<schema targetNamespace="org.ossmeter.platform" xmlns="http://www.w3.org/2001/XMLSchema">
 <annotation>
       <appinfo>
-         <meta.schema plugin="org.ossmeter.repository" id="org.ossmeter.repository.metricprovider" name="metricProvider"/>
+         <meta.schema plugin="org.ossmeter.platform" id="org.ossmeter.platform.managers.vcs" name="vcsmanager"/>
       </appinfo>
       <documentation>
          [Enter description of this extension point.]
@@ -18,7 +18,7 @@
       </annotation>
       <complexType>
          <sequence>
-            <element ref="metricProvider" minOccurs="1" maxOccurs="unbounded"/>
+            <element ref="vcsManager" minOccurs="1" maxOccurs="unbounded"/>
          </sequence>
          <attribute name="point" type="string" use="required">
             <annotation>
@@ -47,15 +47,15 @@
       </complexType>
    </element>
 
-   <element name="metricProvider">
+   <element name="vcsManager">
       <complexType>
-         <attribute name="provider" type="string" use="required">
+         <attribute name="manager" type="string" use="required">
             <annotation>
                <documentation>
                   The metrics provider.
                </documentation>
                <appinfo>
-                  <meta.attribute kind="java" basedOn=":org.ossmeter.repository.MetricsProvider"/>
+                  <meta.attribute kind="java" basedOn="org.ossmeter.repository.vcs.model.AbstractVcsManager:"/>
                </appinfo>
             </annotation>
          </attribute>
platform/org.ossmeter.platform/schema/org.ossmeter.repository.vcsmanager.exsd to platform/org.ossmeter.platform/src/org/ossmeter/platform/ExtensionPointMetricProviderManager.java
--- a/platform/org.ossmeter.platform/schema/org.ossmeter.repository.vcsmanager.exsd
+++ b/platform/org.ossmeter.platform/src/org/ossmeter/platform/ExtensionPointMetricProviderManager.java
@@ -1,102 +1,54 @@
-<?xml version='1.0' encoding='UTF-8'?>
-<!-- Schema file written by PDE -->
-<schema targetNamespace="org.ossmeter.repository" xmlns="http://www.w3.org/2001/XMLSchema">
-<annotation>
-      <appinfo>
-         <meta.schema plugin="org.ossmeter.repository" id="org.ossmeter.repository.metricprovider" name="metricProvider"/>
-      </appinfo>
-      <documentation>
-         [Enter description of this extension point.]
-      </documentation>
-   </annotation>
+package org.ossmeter.platform;
 
-   <element name="extension">
-      <annotation>
-         <appinfo>
-            <meta.element />
-         </appinfo>
-      </annotation>
-      <complexType>
-         <sequence>
-            <element ref="vcsManager" minOccurs="1" maxOccurs="unbounded"/>
-         </sequence>
-         <attribute name="point" type="string" use="required">
-            <annotation>
-               <documentation>
-                  
-               </documentation>
-            </annotation>
-         </attribute>
-         <attribute name="id" type="string">
-            <annotation>
-               <documentation>
-                  
-               </documentation>
-            </annotation>
-         </attribute>
-         <attribute name="name" type="string">
-            <annotation>
-               <documentation>
-                  
-               </documentation>
-               <appinfo>
-                  <meta.attribute translatable="true"/>
-               </appinfo>
-            </annotation>
-         </attribute>
-      </complexType>
-   </element>
+import java.util.ArrayList;
+import java.util.List;
 
-   <element name="vcsManager">
-      <complexType>
-         <attribute name="manager" type="string" use="required">
-            <annotation>
-               <documentation>
-                  The metrics provider.
-               </documentation>
-               <appinfo>
-                  <meta.attribute kind="java" basedOn="org.ossmeter.repository.vcs.model.AbstractVcsManager:"/>
-               </appinfo>
-            </annotation>
-         </attribute>
-      </complexType>
-   </element>
+import org.eclipse.core.runtime.CoreException;
+import org.eclipse.core.runtime.IConfigurationElement;
+import org.ossmeter.platform.util.ExtensionPointHelper;
 
-   <annotation>
-      <appinfo>
-         <meta.section type="since"/>
-      </appinfo>
-      <documentation>
-         [Enter the first release in which this extension point appears.]
-      </documentation>
-   </annotation>
+import com.googlecode.pongo.runtime.PongoCollection;
 
-   <annotation>
-      <appinfo>
-         <meta.section type="examples"/>
-      </appinfo>
-      <documentation>
-         [Enter extension point usage example here.]
-      </documentation>
-   </annotation>
+public class ExtensionPointMetricProviderManager implements IMetricProviderManager {
+	
+	protected List<IMetricProvider> metricProviders;
+	protected final String metricProviderExtensionPointId = "org.ossmeter.platform.metricprovider";
+	protected final String metricProviderManagerExtensionPointId = "org.ossmeter.platform.managers.metricprovider";
 
-   <annotation>
-      <appinfo>
-         <meta.section type="apiinfo"/>
-      </appinfo>
-      <documentation>
-         [Enter API information here.]
-      </documentation>
-   </annotation>
-
-   <annotation>
-      <appinfo>
-         <meta.section type="implementation"/>
-      </appinfo>
-      <documentation>
-         [Enter information about supplied implementation of this extension point.]
-      </documentation>
-   </annotation>
-
-
-</schema>
+	protected List<? extends PongoCollection> metricCollections = null;
+	
+	public List<IMetricProvider> getMetricProviders() {
+		if (metricProviders == null) { // TODO: This needs some better logic. This will not pick up any MPs added during runtime.
+			metricProviders = new ArrayList<IMetricProvider>();
+			
+			// Load the standard MP extensions
+			for(IConfigurationElement configurationElement : ExtensionPointHelper.getConfigurationElementsForExtensionPoint(metricProviderExtensionPointId)){
+				try {
+					metricProviders.add((IMetricProvider) configurationElement.createExecutableExtension("provider"));
+				} catch (CoreException e) {
+					e.printStackTrace();
+				}
+			}
+			
+			// Load extension points via custom managers 
+			System.err.println("Custom Extension Point managers: ");
+			for(IConfigurationElement configurationElement : ExtensionPointHelper.getConfigurationElementsForExtensionPoint(metricProviderManagerExtensionPointId)){
+				try {
+					IMetricProviderManager impm = (IMetricProviderManager) configurationElement.createExecutableExtension("manager");
+					System.err.println("\t" + impm.getClass().toString());
+					
+					//metricProviders.addAll(impm.getMetricProviders()); // FIXME: Commented out whilst determining how to properly resolve rascal URIs
+				} catch (CoreException e) {
+					e.printStackTrace();
+				}
+			}
+		}
+		
+		System.err.println("Registered metric providers: ");
+		for (IMetricProvider imp : metricProviders) {
+			System.err.println("\t"+ imp.getIdentifier());
+		}
+		
+		return metricProviders;
+	}	
+}