Описание zcmljunction
=====================

    Автор
        Andrey Orlov
    
    Версия
        $Id: ng.zcmljunction.txt 12884 2007-11-10 14:06:58Z cray $

    URL 
        $URL: https://code.dreambot.ru/svn/ng.zcmljunction/tags/ng.zcmljunction-1.0.3/src/ng/zcmljunction/ng.zcmljunction.txt $

Аннотация
---------

Продукт ng.zcmljunction объявляет две вложенные директивы,
которые позволяют механически сконструировать адаптер
к интерфейсу, суть которого сводится к переименованию
переменных, их объединению и подстановке значений
по умолчанию.   
  
Описание
--------

Регистрируются две директивы: junction и вложенная в нее директива property.

    junction 
        Объявляет собственно адаптер, т.е. указывает между какими
        именно интерфейсами будет происходить преобразование.
        
        Возможные параметры:
        
            for 
                Имя адаптируемого интерфейса;
                
            provides 
                Имя предоставляемого интерфейса;

            factory 
                Необязательный параметр, который содержит класс, который
                может реализовывать преобразование атрибутов, которое не
                сводится к вышеописанным преобразованиям.

    property
        Директива вложена в директиву junction и для каждого свойства
        описывает, как оно может быть получено. 
        
        Возможные параметры:

            out
                Имя атрибута предоставляемого интерфейса;
        
            in
                Список атрибутов адаптируемого интерфейса, из которых
                собирается атрибут предоставляемого интерфейса. Обратите
                внимание, что в адаптере возможна рекурсия - т.е. он может
                использовать в качестве входных атрибуты, собранные ранее.
                Текстовые атрибуты, если их много, складываются через символ
                *\n*, не-текстовый атрибут может быть только один и он
                копируется;
                
            default
                Значение, которое будет подставлено, если отсутствует
                указанный атрибут адаптируемого интерфейса или атрибут
                не указан вообще.

Пример
------

Для примера возьмем типичный адаптер, преобразующий интерфейс
объекта к интерфейсу поискового каталога::

    <junction
      for=".interfaces.IArticle"
      provides=".interfaces.ISearch"
      factory = ".searchadapter.SearchAdapter"
      >
      <property in="title" out="title"/>
      <property in="abstract" out="abstract"/>
      <property in="body" out="body" default=""/>
      <property in="abstract klass name keyword title body author" out="common" default=""/>
    </junction>


        
