SERVEI DE MERGING

Introducció

Propòsit

Aquest servei permet aplicar un conjunt de canvis definits per un diccionari sobre un document en format WordML.

Es parteix d'un document que conté un o més marcadors que han de ser substituits i d'un conjunt de diccionaris de substitució.

Per cada un dels diccionaris de substitució, el servei de merging realitza la substitució de cada marcador pel valor indicat en el diccionari i el resultat és un nou document, també en format WordML.

Els marcadors consisteixen en una marca d'inici, un texte-clau i una marca de final.

Per exemple, si el document WordML conté el texte "En un lugar de la @@cosa## y tal.", les marques d'inici i final s'han definit com "@@" i "##" respectivament i el diccionari conté la entrada ("cosa", "Mancha") llavors en el document WordML resultant el texte s'haurà convertit en "En un lugar de la Mancha y tal."

Context i Escenaris d'Ús

Versions i Dependències

A qui va dirigit

Aquest document va dirigit als següents perfils:

  1. Programador. Per conéixer l'ús del servei
  2. Arquitecte. Per conéixer quins són els components i la configuració del servei
  3. Administrador. Per conéixer com configurar el servei en cadascun dels entorns en cas de necessitat

Documents i Fonts de Referència

Descripció Detallada

Arquitectura i Components

Els components podem classificar-los en:

  1. Interfícies i Components Genérics. Interfícies del servei i components d'ús general amb independència de la implementació escollida.
  2. Implementació basada en Spring

Instal.lació i Configuració

Instal.lació

La instal.lació del servei requereix de la utilització de la llibreria 'canigo-services-merging' i les seves dependències.

Configuració

La configuració del servei implica els següents pasos:

  1. Definir la implementació del Servei que s'usarà
  2. Definir la localització del fitxer de propietats del Servei
  3. Definir les propietats del Servei

Definició del Servei

Fitxer de configuració: canigo-services-merging.xml

Ubicació proposada: <PROJECT_ROOT>/src/main/resources/spring

En aquest apartat configurarem el bean de Servei de Merging, és a dir, la implementació que es farà servir en l'atribut 'class'. En l'actualitat s'ofereix la classe 'net.gencat.ctti.canigo.services.merging.impl.MergeTemplateXMLEngineImpl'

<bean id="mergeService"
      class="net.gencat.ctti.canigo.services.merging.impl.MergeTemplateXMLEngineImpl">
...
</bean>

Podem definir les següents propietats:

Propietat Requerit Descripció
logService Si Referència al Servei de Traces
iniciBookmark Marca d'inici del texte a substituir (2 caràcters)
fiBookmark Marca de final del texte a substituir (2 caràcters)

Exemple:

<bean id="mergeService"
      class="net.gencat.ctti.canigo.services.merging.impl.MergeTemplateXMLEngineImpl">
    <property name="logService" ref="loggingService"></property>
    <property name="iniciBookmark" value="@@"></property>
    <property name="fiBookmark" value="##"></property>
</bean>

Utilització del Servei

A partir del bean mergeService, la utilització del servei consisteix en cridar el mètode mergeTemplate(InputStream pTemplate, List pDades) amb els paràmetres corresponents.

El primer paràmetre (pTemplate) és un InputStream amb el document WordML a processar.

El segon paràmetre (pDades) és un ArrayList que conté els diccionaris de traducció (HashMaps)

El resultat (de tipus ByteArrayOutputStream[]) conté un ByteArrayOutputStream per cada un dels elements de l'ArrayList pDades, amb el document ja processat.

Integració amb el Servei Multiidioma i Excepcions

El servei llença vàries excepcions amb codis per tal que el missatge pugui ser internacionalitzat.

Els codis generats son

net.gencat.ctti.canigo.services.merging.wrongXML : l'arxiu d'entrada no te el format WordML
net.gencat.ctti.canigo.services.merging.gral : problemes en la interpretació de l'arxiu o la generació del document amb el resultat.

Exemple

public class MergeServiceTest extends TestCase {
  private MergeTemplateEngine mergeTemplateEngine;

  ...	
	
  public void testMerge() throws Exception {
    mergeTemplateEngine.mergeTemplate(null, null);
    InputStream is = Thread.currentThread().getContextClassLoader().getResourceAsStream("TestDoc.xml");

    ArrayList dades = new ArrayList();
    HashMap itemsMap = new HashMap();
    itemsMap.put("cosa", "Mancha");
    itemsMap.put("marca", "Funciona");
    dades.add(itemsMap);

    ByteArrayOutputStream[] os = mergeTemplateEngine.mergeTemplate(is, dades);

    ...

  }
}