package info.bukova.isspst.ui.search;

import info.bukova.isspst.EntityUrlResolver;
import info.bukova.isspst.data.BaseData;
import info.bukova.isspst.data.DataModel;

/**
 * @author Pepa Rokos
 * 
 * Třída obecného transformačního objektu. Do výsledku nastaví property z rozhraní {@link DataModel}, které implementují všechny entity.
 *
 */
public abstract class AbstractResultTransformer implements ResultTransformer {
	
	protected EntityUrlResolver urlResolver;

	@Override
	public SearchResult transformObject(Object object) {
		BaseData data = (BaseData)object;
		SearchResult result = new SearchResult();
		
		result.setCreated(data.getCreated());
		result.setModified(data.getModified());
		result.setOwnedBy(data.getOwnedBy());
		result.setModifiedBy(data.getModifiedBy());
		
		if (urlResolver != null) {
			result.setUrl(urlResolver.entityUrl(data));
		}
		
		
		transform(object, result);
		
		return result;
	}
	
	/**
	 * Další transformace v závislosti na konkrétní třídě přdané entity
	 * 
	 * @param object entita k transformaci
	 * @param result výsledný transformovaný objekt
	 */
	protected abstract void transform(Object object, SearchResult result);

	@Override
	public void setUrlResolver(EntityUrlResolver resolver) {
		this.urlResolver = resolver;
	}

}
