/**
* Copyright (C) 2015 Born Informatik AG (www.born.ch)
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.wte4j;
/**
* {@linkplain TemplateRepository} gives access to the stored templates and
* provide methodes to register new templates and edit templates
*/
public interface TemplateRepository {
TemplateQuery queryTemplates();
/**
* Sucht nach einem passenden Template im Repository
*
* @param documentName
* - name des Dokuments
* @param languageCode
* - Sprache des Templates
* @return das Template oder <code>null</code> wenn kein Template gefunden
* wurde.
*/
Template<Object> getTemplate(String documentName, String languageCode);
/**
* Sucht nach einem passenden Template im Repository
*
* @param documentName
* - name des Dokuments
* @param languageCode
* - Sprache und Region des Templates
* @param inputType
* - Erwarteter Type für den Input
* @return das Template oder <code>null</code> wenn kein Template gefunden
* wurde.
* @throws IllegalArgumentException
* wenn InputType nicht passt zum Template.
*/
<E> Template<E> getTemplate(String documentName, String languageCode,
Class<? extends E> inputType) throws IllegalArgumentException;
/**
* Markiert ein Template fuer die Bearbeitung. Andere Benutzer können das
* Template nicht mehr markieren. Dokumente koennen immer noch generiert
* werden.
*
* @param template
* - das zu markierende Template
* @param user
* - der markierende User
* @return das editierbare Template
* @throws LockingException
* wenn das Template durch einen anderen User markiert ist.
*/
<E> Template<E> lockForEdit(Template<E> template, User user)
throws LockingException;
/**
* Gibt das markierte Template wieder frei.
*
* @param template
* - freizugebendes Template
* @return das unmarktierte Template. <code>template</code> kann nicht mehr
* verwendet werden.
*/
<E> Template<E> unlock(Template<E> template);
/**
* Speichert und gibt das template frei.
*
* @param template
* -zu speicherndes Template
* @return das aktualisierte Template. Das uebergebene<code>template</code>
* kann nicht mehr verwendet werden.
* @throws LockingException
* wenn das Template durch einen anderen Benutzer verändert
* wurde oder gesperrt wurde (
* {@link #lockForEdit(Template, User)}) wurde.
*/
<E> Template<E> persist(Template<E> template) throws LockingException,
TemplateExistException;
void delete(Template<?> template);
}