package ch.elexis.data;
import org.apache.commons.lang.math.NumberUtils;
import ch.elexis.core.exceptions.ElexisException;
import ch.elexis.core.interfaces.ITransferable;
import ch.elexis.core.types.AddressType;
import ch.elexis.core.types.LocalizeUtil;
import ch.elexis.data.dto.ZusatzAdresseDTO;
import ch.rgw.tools.StringTool;
public class ZusatzAdresse extends PersistentObject implements ITransferable<ZusatzAdresseDTO> {
protected static final String KONTAKT_ID = "Kontakt_Id";
private static final String COUNTRY = "Land";
private static final String PLACE = "Ort";
private static final String ZIP = "Plz";
public static final String STREET1 = "Strasse1";
private static final String STREET2 = "Strasse2";
public static final String TYPE = "Typ";
public static final String POSTAL_ADDRESS = "Anschrift";
public static final String TABLENAME = "ZusatzAdresse";
private static final String[] FIELDS = new String[] {
KONTAKT_ID, STREET1, STREET2, COUNTRY, PLACE, ZIP, TYPE, POSTAL_ADDRESS
};
static {
addMapping(TABLENAME, KONTAKT_ID, STREET1, STREET2, ZIP, PLACE, COUNTRY, TYPE,
POSTAL_ADDRESS);
}
protected ZusatzAdresse(){}
protected ZusatzAdresse(String id){
super(id);
}
public ZusatzAdresse(Kontakt kontakt){
create(null, new String[] {
KONTAKT_ID
}, new String[] {
kontakt.getId()
});
}
public static ZusatzAdresse load(String id){
return new ZusatzAdresse(id);
}
/**
* Eine Etikette der Anschrift liefern
*
* @param withName
* TODO
* @param multiline
* Wenn true wird die Etikette mehrzeilig, sonst einzeilig
*/
public String getEtikette(boolean withName, boolean multiline){
return getEtikette(withName, multiline, get(KONTAKT_ID), get(STREET1), get(COUNTRY),
get(ZIP), get(PLACE));
}
public String getEtikette(boolean withName, boolean multiline, String kontaktId, String street1, String country, String zip, String place)
{
String sep = StringTool.lf;
if (multiline == false) {
sep = ", ";
}
StringBuilder ret = new StringBuilder(100);
if (withName == true) {
ret.append(Kontakt.load(kontaktId).getLabel(false)).append(sep);
}
if (street1 != null) {
ret.append(street1).append(sep);
}
if (!StringTool.isNothing(country)) {
ret.append(country).append(" - ");
}
if ((zip != null) && (place != null)) {
ret.append(zip).append(StringTool.space).append(place);
}
if (multiline) {
// append trailing newline
ret.append(StringTool.lf);
}
return ret.toString();
}
@Override
public String getLabel(){
String etikette = getEtikette(false, false);
if (get(TYPE) != null) {
return LocalizeUtil.getLocaleText(AddressType.get(NumberUtils.toInt(get(TYPE)))) + ": "
+ etikette;
}
return etikette;
}
@Override
protected String getTableName(){
return TABLENAME;
}
@Override
public ZusatzAdresseDTO getDTO(){
if (getId() == null) {
return new ZusatzAdresseDTO();
} else {
String[] values = new String[FIELDS.length];
get(FIELDS, values);
ZusatzAdresseDTO zusatzAddresseData = new ZusatzAdresseDTO();
zusatzAddresseData.setId(getId());
zusatzAddresseData.setKontaktId(values[0]);
zusatzAddresseData.setStreet1(values[1]);
zusatzAddresseData.setStreet2(values[2]);
zusatzAddresseData.setCountry(values[3]);
zusatzAddresseData.setPlace(values[4]);
zusatzAddresseData.setZip(values[5]);
zusatzAddresseData.setAddressType(AddressType.get(NumberUtils.toInt(values[6])));
zusatzAddresseData.setPostalAddress(values[7]);
return zusatzAddresseData;
}
}
@Override
public void persistDTO(ZusatzAdresseDTO zusatzAdresseDTO) throws ElexisException{
// validations
if (zusatzAdresseDTO.getKontaktId() == null) {
throw new ElexisException(ZusatzAdresse.class, "Kontakt not definied",
ElexisException.EE_NOT_SUPPORTED, true);
}
// persist or update
if (getId() == null) {
create(StringTool.unique("prso"), new String[] {
KONTAKT_ID
}, new String[] {
zusatzAdresseDTO.getKontaktId()
});
}
set(FIELDS, zusatzAdresseDTO.getKontaktId(), zusatzAdresseDTO.getStreet1(),
zusatzAdresseDTO.getStreet2(),
zusatzAdresseDTO.getCountry(), zusatzAdresseDTO.getPlace(), zusatzAdresseDTO.getZip(),
String.valueOf(zusatzAdresseDTO.getAddressType().getValue()),
zusatzAdresseDTO.getPostalAddress());
}
}