XIP LDAP Import Beispiel
Version vom 21. Juni 2010, 13:42 Uhr von Veltrup (Diskussion | Beiträge) (Die Seite wurde neu angelegt: „===XML Konfiguration=== <syntaxhighlight lang="xml"> <?xml version="1.0" encoding="UTF-8"?> <import id="ldapimport" name="Import LDAP User"> <logging> …“)
XML Konfiguration
<?xml version="1.0" encoding="UTF-8"?>
<import id="ldapimport" name="Import LDAP User">
<logging>
<appender name="FILE" class="org.apache.log4j.RollingFileAppender">
<layout class="org.apache.log4j.PatternLayout">
<param name="ConversionPattern" value="%d %-5p %m%n"/>
</layout>
<param name="File" value="${sitepark.home}/ldap-import.log"/>
<param name="MaxFileSize" value="10MB"/>
<param name="MaxBackupIndex" value="10"/>
</appender>
<logger name="com.sitepark.ies" additivity="false">
<appender-ref ref="FILE"/>
<priority value="INFO"/>
</logger>
</logging>
<ies-connection login="Wartung" password="secret" client="ies2work" module="LDAP Importer"/>
<options>
<createElements>true</createElements>
<deleteWorkDir>true</deleteWorkDir>
<createPools>true</createPools>
<updatePools>true</updatePools>
<updateElements>true</updateElements>
<deletePools>true</deletePools>
<deleteOnlyEmptyPools>true</deleteOnlyEmptyPools>
<deleteElements>true</deleteElements>
<xslt>${sitepark.home}/conf/ldap-import.xslt</xslt>
<syncFile>${sitepark.home}/conf/ldap-import.sync</syncFile>
</options>
<source type="ldap" id="1">
<query>
<ldap-query>
<search-filter>(uid=quintama)</search-filter>
<search-base>dc=sitepark,dc=com</search-base>
<search-scope>subtree</search-scope>
<!-- <limit>1000</limit> -->
</ldap-query>
</query>
</source>
</import>
XSLT
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:xip="http://ies.sitepark.com/xip"
extension-element-prefixes="xip">
<xsl:output method="xml" encoding="UTF-8" indent="yes"/>
<!--
xip:getFirstLetter(String s)
Liefert das erste Zeichen der übergebenen Zeichenkette.
Ist dieses Zeichen ein Großbuchstabe wird er in einen
Kleinbuchstaben umgewandelt
Bei den Umlauten ä, ö und ü wird a, o oder ü zurückgeliefert
-->
<xsl:function name="xip:getFirstLetter"> <xsl:param name="s"/>
<!-- Erstes Zeichen ermitteln -->
<xsl:variable name="fistLetter" select="substring($s,1,1)"/>
<!-- in Kleinbuchstaben umwandeln -->
<xsl:variable name="toLowerCase" select="lower-case($fistLetter)"/>
<!-- Umlaute umwandeln und Zeichen zurückgeben -->
<xsl:variable name="substituteFrom" select="'äöü'"/>
<xsl:variable name="substituteTo" select="'aou'"/>
<xsl:value-of select="translate($toLowerCase, $substituteFrom, $substituteTo)"/>
</xsl:function>
<!--
Erzeugt eine Map mit den Anfangsbuchstaben als Keys und jeweils einer Liste von Elementen mit
den entsprechenden Anfangsbuchstaben im Element <bsLastname>
a=[<row>,<row>,...]
b=[<row>,<row>,...]
c=...
...
z=...
-->
<xsl:key name="keyLetter" match="row" use="xip:getFirstLetter(bsLastName)"/>
<xsl:template match="/">
<xip>
<!-- Gruppiert die Elemente nach ihrem Anfangsbuchstaben (siehe xip:getFirstLetter()) -->
<!-- Diese Methode mit XSLT zu gruppieren nennt sich 'Muenchian Method' (siehe: http://www.jenitennison.com/xslt/grouping/muenchian.html) -->
<!-- Schleife über a,b,c,d -->
<xsl:for-each select="//row[generate-id() = generate-id(key('keyLetter', xip:getFirstLetter(bsLastName))[1]) ]">
<xsl:variable name="letter" select="xip:getFirstLetter(bsLastName)"/>
<!-- Schleife über alle mit dem gleichen Anfangsbuchstaben -->
<xsl:for-each select="key('keyLetter',$letter)">
<!-- Eine row der LDAP-Daten in XIP-Artikel umwandeln altes Template: template.main.mitarbeiter -->
<article parent="vv.informationpool.mitarbeiter.{$letter}" anchor="ldap.import.{bsPersonnalNumber}" name="{cn}" filename="{cn}" template="gui.vv.tpl.output.client.person">
<!-- Statische Werte -->
<link name="sp_vv_config_template" anchor="gui.vv.tpl.output.client.person" />
<text name="sp_vv_objectType">person</text>
<!--importierte Werte -->
<xsl:if test='contains(lower-case(bsTitle), "prof")'>
<text name="sp_vv_title">sp_title_1137574665206</text><!--sp_ldap_title-->
</xsl:if>
<xsl:if test='contains(lower-case(bsTitle), "dr")'>
<text name="sp_vv_title">sp_title_1137574647737</text><!--sp_ldap_title-->
</xsl:if>
<xsl:if test="contains(lower-case(bsSalutation), 'herr')">
<text name="sp_vv_salutation">sp_salut_1137574647733</text><!--sp_ldap_salutation-->
</xsl:if>
<xsl:if test="contains(lower-case(bsSalutation),'frau')">
<text name="sp_vv_salutation">sp_salut_1137574654460</text><!--sp_ldap_salutation-->
</xsl:if>
<text name="sp_vv_personnel"><xsl:if test="contains(bsPersonnalNumber,'kein Eintrag')!=true()"><xsl:value-of select="bsPersonnalNumber"/></xsl:if></text><!--sp_ldap_personnalNumber-->
<text name="sp_vv_firstname"><xsl:if test="contains(bsFirstName,'kein Eintrag')!=true()"><xsl:value-of select="bsFirstName"/></xsl:if></text><!--sp_ldap_firstName-->
<text name="sp_vv_lastname"><xsl:if test="contains(bsLastName,'kein Eintrag')!=true()"><xsl:value-of select="bsLastName"/></xsl:if></text><!--sp_ldap_lastName-->
<text name="sp_vv_mail"><xsl:if test="contains(bsMail,'kein Eintrag')!=true()"><xsl:value-of select="bsMail"/></xsl:if></text><!--sp_ldap_mail-->
<text name="sp_vv_publish_mail">true</text><!--sp_ldap_mail-->
<text name="sp_vv_street"><xsl:if test="contains(bsStreet,'kein Eintrag')!=true()"><xsl:value-of select="bsStreet"/></xsl:if></text><!--sp_ldap_street-->
<text name="sp_vv_postal_code"><xsl:if test="contains(bsZip,'kein Eintrag')!=true()"><xsl:value-of select="bsZip"/></xsl:if></text><!--sp_ldap_zip-->
<text name="sp_vv_city"><xsl:if test="contains(bsTown,'kein Eintrag')!=true()"><xsl:value-of select="bsTown"/></xsl:if></text><!--sp_ldap_town-->
<text name="sp_vv_roomNumber"><xsl:if test="contains(bsRoomFloor,'kein Eintrag')!=true()"><xsl:value-of select="bsRoomFloor"/></xsl:if></text><!--sp_ldap_roomFloor-->
<text name="sp_vv_phone"><xsl:if test="contains(bsPhoneComp,'kein Eintrag')!=true()"><xsl:value-of select="bsPhoneComp"/></xsl:if></text><!--sp_ldap_phoneComp-->
<text name="sp_vv_fax"><xsl:if test="contains(bsFaxComp,'kein Eintrag')!=true()"><xsl:value-of select="bsFaxComp"/></xsl:if></text><!--sp_ldap_faxComp-->
<text name="sp_vv_mobile"><xsl:if test="contains(bsMobile,'kein Eintrag')!=true()"><xsl:value-of select="bsMobile"/></xsl:if></text><!--sp_ldap_mobile-->
<text name="sp_vv_publish_mobile">true</text><!--sp_ldap_mobile-->
<text name="sp_vv_function"><xsl:if test="contains(bsFunction,'kein Eintrag')!=true()"><xsl:value-of select="bsFunction"/></xsl:if></text><!--sp_ldap_function-->
</article>
</xsl:for-each>
</xsl:for-each>
</xip>
</xsl:template>
</xsl:stylesheet>