DE:Osmosis/Writing Plugins

From OpenStreetMap Wiki
Jump to navigation Jump to search

Aufbau eines Plugins

Ein Osmosis-Plugin besteht aus:

  • einem Zip-Archiv
    • einer Datei plugin.xml
    • den Klassen des Plugins

Inhalt von plugin.xml

(example plugin.xml)

<?xml version="1.0" ?>
<!DOCTYPE plugin PUBLIC "-//JPF//Java Plug-in Manifest 1.0" "http://jpf.sourceforge.net/plugin_1_0.dtd">
<plugin id="LibOSM" version="2.5.2.0"
    class="org.openstreetmap.osm.Plugins.LibOSMOsmosisPlugin">

    <!--These are library-files we require including our own code. -->
    <requires>
           <import plugin-id="org.openstreetmap.osmosis.core.plugin.Core" plugin-version="0.32" reverse-lookup="false"/>
    </requires>
    
    <!--These are library-files we require including our own code. -->
    <runtime>
        <library id="mycode" path="/" type="code"/>
    </runtime>

<!--This is where our plugin plugs into.
    The extension-point 'task' with a subclass of PluginLoader named 'WriteOSMBinPlugin'
    that tells Osmosis what tasks are provided.-->
    <extension plugin-id="org.openstreetmap.osmosis.core.plugin.Core"
               point-id="Task" id="LibOSM/OsmBin-Tasks/writeOsmBin">
       <parameter id="name"
               value="writeOsmBin"/>
       <parameter id="class"
               value="org.openstreetmap.osm.data.osmbin.OSMBinPlugin"/>
    </extension>
    <!--extension plugin-id="org.openstreetmap.osmosis.core.plugin.Core"
               point-id="Task" id="LibOSM/OsmBin-Tasks/writeOsmBin-0.6">
       <parameter id="name"
               value="writeOsmBin-0.6"/>
       <parameter id="class"
               value="org.openstreetmap.osm.data.osmbin.OSMBinPlugin"/>
    </extension-->
</plugin>

Wo hängt man sich ein

Momentan gibt es nur den Erweiterungs-Punkt task

Einhängen von tasks

Der plugin-loader

Um den Erweiterungs-Punkt task zu nutzen muß man eine Factory-Klasse schreiben die com.bretth.osmosis.core.plugin.PluginLoader erweitert (example).

Diese Klasse ist aus historischen Gründen erforderlich.

Die TaskManagerFactory

Diese Klasse enthält eine Methode loadTaskFactories() welche eine Zuordnung (map) vom Befehlszeilennamen zur Instanz von TaskManagerFactory zurückgibt.

Für jeden Task, der hinzugefügt werden soll, muß eine Implementierung von com.bretth.osmosis.core.pipeline.common.TaskManagerFactory geschrieben werden (example). Diese Klasse hat die Aufgabe, die Befehlszeilenargumente zu analysieren, Ihren Task zu instanziieren und in einen TaskManager zu verpacken. Zum Beispiel ein com.bretth.osmosis.core.pipeline.v0_5.SinkManager für eine Aufgabe, die OSM-Daten nutzt.

Der Task

Schließlich müssen Sie die eigentliche Aufgabe implementieren (example).