package de.hsadmin.remote;

import java.text.DateFormat;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Map;

import de.hsadmin.core.model.AbstractEntity;
import de.hsadmin.mods.dom.Domain;
import de.hsadmin.mods.user.UnixUser;

public class DomainRemote extends AbstractRemote {

	private static final DateFormat df = SimpleDateFormat.getDateInstance(DateFormat.SHORT);
	
	@Override
	protected Class<? extends AbstractEntity> getEntityClass() {
		return Domain.class;
	}

	@Override
	protected void entity2map(AbstractEntity entity, Map<String, String> resultMap) {
		Domain dom = (Domain) entity;
		String id = Long.toString(dom.getId());
		resultMap.put("id", id);
		String name = dom.getName();
		resultMap.put("name", name);
		String user = dom.getUser().getName();
		resultMap.put("user", user);
		String hive = dom.getHiveName();
		resultMap.put("hive", hive);
		String pac = dom.getUser().getPac().getName();
		resultMap.put("pac", pac);
		Date sDate = dom.getFiled();
		if (assertNotNull(sDate)) {
			String since = df.format(sDate);
			resultMap.put("since", since);
		}
	}

	@Override
	protected void map2entity(Map<String, String> setParams, AbstractEntity entity) {
		Domain dom = (Domain) entity;
		String name = setParams.get("name");
		String user = setParams.get("user");
		if (assertNotNull(name)) {
			dom.setName(name);
		}
		if (assertNotNull(user)) {
			UnixUser u = new UnixUser();
			u.setName(user);
			dom.setUser(u);
		}
	}

	@Override
	protected void regularizeKeys(Map<String, String> whereParams) {
		replaceKey(whereParams, "user", "user.name");
		replaceKey(whereParams, "pac", "user.pac.name");
		replaceKey(whereParams, "hive", "hiveName");
	}

}
