Difference between revisions of "Hello XML World Example (Buckminster)"

From Eclipsepedia

Jump to: navigation, search
Line 7: Line 7:
 
** It is an Eclipse plugin - it has some meta data
 
** It is an Eclipse plugin - it has some meta data
 
** A has a dependency on B
 
** A has a dependency on B
* The B component is ??
+
* The B component is called org.demo.xml.provider
 
** It lives in a CVS repository
 
** It lives in a CVS repository
 +
** It is an Eclipse plugin - it has some meta data
 
** It requires two jars; the jar in component D, and a jar that is built by component C.
 
** It requires two jars; the jar in component D, and a jar that is built by component C.
* Component C is ?
+
* Component C is called org.demo.worlds
 +
** It lives in a CVS repository
 +
** Although it is an Eclipse project, it is <b>not</b> an Eclipse plugin.
 
* Component D is a sax parser called se.tada.util.sax
 
* Component D is a sax parser called se.tada.util.sax
 
** It lives in binary form in the maven repository at Ibiblio
 
** It lives in binary form in the maven repository at Ibiblio

Revision as of 11:28, 9 October 2006

< To: Buckminster Project
This examples shows several Buckminster features in action. Here is an overview of what is going on:

HelloDemo.gif

  • The A component is called org.demo.hello.xml.world
    • It lives in a CVS repository
    • It is an Eclipse plugin - it has some meta data
    • A has a dependency on B
  • The B component is called org.demo.xml.provider
    • It lives in a CVS repository
    • It is an Eclipse plugin - it has some meta data
    • It requires two jars; the jar in component D, and a jar that is built by component C.
  • Component C is called org.demo.worlds
    • It lives in a CVS repository
    • Although it is an Eclipse project, it is not an Eclipse plugin.
  • Component D is a sax parser called se.tada.util.sax
    • It lives in binary form in the maven repository at Ibiblio

To run the example, use the File > Open dialog in Eclipse, and enter this URL:

That will start the Buckminster materialization of the project.

The CQUERY

The CQuery looks like this:

<?xml version="1.0" encoding="UTF-8"?>
<cq:componentQuery xmlns:cq="http://www.eclipse.org/buckminster/CQuery-1.0"
resourceMap="http://www.eclipse.org/buckminster/samples/rmaps/demo.rmap">
    <cq:rootRequest name="org.demo.hello.xml.world" category="plugin" versionType="OSGi"/>
    <cq:advisorNode namePattern="org\.demo\..*" whenNotEmpty="OVERWRITE" useInstalled="false" useMaterialization="false"/>
    <cq:advisorNode namePattern="se\.tada\..*" whenNotEmpty="REUSE" useInstalled="false"/>
</cq:componentQuery>

This is what the XML in the CQUERY means:

  • The first three lines are the usual XML incantations - this is XML, and this is the syntax of the XML - i.e. CQuery-1.0 and the namespace is called "cq".
  • Next line declares where the resourcemap to use when resolving components is found (we will look at the resource map next).
  • Next line states that the wanted (root) component is called org.demo.hello.xml.world, that is is a plugin and that it follows the OSGi versioning scheme.
  • Then there are two advisor node lines. The first declares that the demo component should be re-materialized even if it already has been materialized (i.e. give me a fresh copy). The second declares that components with "tada" in their name should reuse already materialized results.

For more details see CQUERY

The RMAP

This is what the RMAP looks like:

<?xml version="1.0" encoding="UTF-8"?>
<rm:rmap
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xmlns:rm="http://www.eclipse.org/buckminster/RMap-1.0"
    xmlns:pv="http://www.eclipse.org/buckminster/Provider-1.0"
    xmlns:mp="http://www.eclipse.org/buckminster/MavenProvider-1.0"
    xmlns:bc="http://www.eclipse.org/buckminster/Common-1.0">

    <rm:searchPath name="default">
    	<rm:provider readerType="cvs" componentType="eclipse-project" mutable="true" source="true">
    	    <pv:uri format=":pserver:anonymous@dev.eclipse.org:/cvsroot/technology,org.eclipse.buckminster/org.eclipse.buckminster/demo/{0}">
	        <bc:propertyRef key="buckminster.component" />
	    </pv:uri>
	</rm:provider>
    </rm:searchPath>

    <rm:searchPath name="maven">
    	<rm:provider xsi:type="mp:MavenProvider" readerType="maven" componentType="maven" mutable="false" source="false">
    		<pv:uri format="http://www.ibiblio.org/maven"/>
		<mp:mappings>
			<mp:entry name="se.tada.util.sax" groupId="se.tada" artifactId="tada-sax"/>
		</mp:mappings>
	</rm:provider>
    </rm:searchPath>

    <rm:locator searchPathRef="maven" pattern="^se\.tada\..*" />
    <rm:locator searchPathRef="default" pattern="^org\.demo\..*" />

</rm:rmap>

This is what the RMAP XML means:

  • The 7 first lines declares the name spaces and syntax of the rmap and the repository providers needed.
  • Below that you see two major elements declaring search paths, the first is called default, and the second is called maven.
  • Continue down and you see two locator declarations...
    • the first states that if a component name starts with se.tada. then the maven search path should be used.
    • and the second locator states that if the name starts with org.demo. then the default path should be used.
  • Back to the paths:
    • The default path:
      • The default path declares that the repository is in CVS and that what we find is an eclipse project
      • We do not need to commit changes back (mutable=false), and we do not want source (source=false).
      • The URI to the CVS repository is stated next
      • what is the parameter substitution involving buckminster.component?
    • The maven path:
      • The maven path declares that it uses a maven provider and a reader type of maven and that the component type is also a maven component. Further the mutable=false says that we are not interested in comitting any changes back to the repository, and source=false says that we are not interested in source.
      • A URI to the maven repository at Ibiblio is declared
      • A mapping that translates the component name into what the actual file on Ibiblio is called is then declared (i.e. mapping se.tada.util.sax to tada-sax).

Describe what the demo does