2010-03-03 3 views
1

У меня есть этот класс:Castor: Создание сопоставления файлов для классов, которые имеют атрибуты Аннотация

public class Source extends Node { 
    protected DistributionSampler delay ; 
    protected DistributionSampler batchsize ; 


/** 
* @param name The name of the source node 
* @param d The {@link DistributionSampler} used to generate the 
*   inter-arrival times 
*/ 
    public Source(String name, DistributionSampler d) { 
    super(name) ; 
    delay = d ; 
    batchsize = new Deterministic(1) ; 
    Sim.schedule(new Arrival(Sim.now() + delay.next())) ; 
    } 

/** 
* @param name The name of the source node 
* @param d The {@link DistributionSampler} used to generate the 
*   inter-arrival times 
* @param b The {@link DistributionSampler} used to generate the 
      batch sizes 
*/ 
    public Source(String name, DistributionSampler d, DistributionSampler b) { 
    super(name) ; 
    delay = d ; 
    batchsize = b ; 
    Sim.schedule(new Arrival(Sim.now() + delay.next())) ; 
    } 

    .... 
} 

DistributionSampler является AbstractClass.

Во время преобразования из XML в объект Java я буду знать, какую конкретную реализацию использовать мой абстрактный класс (через имя компонента).

Однако я не совсем уверен, как написать файл сопоставления, чтобы сообщить кастору, как сделать перевод.

Любая помощь будет высоко оценена.

ответ

1
<class name="network.Source"> 
     <description xmlns=""> 
      Default mapping for class network.Source 
     </description> 

     <map-to xml="Source"/> 

     <field name="name" type="java.lang.String" required="true"> 
      <bind-xml node="element" /> 
     </field> 

     <field name="delay" type="tools.DistributionSampler" required="true" set-method="initialiseDelay" get-method="getDelay"> 
      <bind-xml auto-naming="deriveByClass" node="element" location="delay"/> 
     </field> 

     <field name="batchSize" type="tools.DistributionSampler"> 
      <bind-xml auto-naming="deriveByClass" node="element" location="batchSize"/> 
     </field> 
    </class> 

Авто-именование = «deriveByClass» часть означает, что если мы пошлем будет связывать имя узла для элемента вложенного внутри задержек эквивалентного класса, который он надеется, расширяет distributionSampler.

Так передавая его счастливым обработать следующий XML:

<Source name="asd"> 
    <delay> 
     <Deterministic time="234" /> 
    </delay> 

    <batchSize> 
     <Erlang K="234" Theta="234" /> 
    </batchSize> 
</Source> 

будет использовать файлы отображения Детерминированные и Erlang, чтобы отобразить его экземпляры классов whihc расширяющих DistributionSampler.