/*
* ClientLocal.java
*
* Created on 28 Ноябрь 2007 г., 10:51
*
* To change this template, choose Tools | Template Manager
* and open the template in the editor.
*/
package cli_fmw.delegate.client;
import cli_fmw.delegate.AuditListener;
import cli_fmw.delegate.cache.ExtraDataManager;
import cli_fmw.delegate.DelegateLine2;
import cli_fmw.delegate.cache.DelegateExtraData;
import cli_fmw.delegate.directory.complex.DirectoryLocator;
import cli_fmw.delegate.directory.simple.name.DirectoryNameAbstract;
import cli_fmw.delegate.directory.simple.name.DirectoryNameItemAbstract;
import cli_fmw.delegate.directory.simple.pathron.DirectoryPathronAbstract;
import cli_fmw.delegate.directory.simple.pathron.DirectoryPathronItemAbstract;
import cli_fmw.delegate.directory.simple.sex.DirectorySexAbstract;
import cli_fmw.delegate.directory.simple.sex.DirectorySexItemAbstract;
import cli_fmw.delegate.directory.simple.surname.DirectorySurnameAbstract;
import cli_fmw.delegate.directory.simple.surname.DirectorySurnameItemAbstract;
import cli_fmw.main.ClipsException;
import cli_fmw.main.DirectoryItemReplacedException;
import framework.beans.client.ClientBeanRemoteAbstract;
import framework.beans.address.entities.AddressDetails;
import framework.beans.client.ClientDetailsAbstract;
import java.text.SimpleDateFormat;
import java.util.Date;
/**
* Делегат - клиент (персона) включая его адрес
* @author Администратор
*/
public abstract class ClientLocalAbstract
<BEANINTERFACE extends ClientBeanRemoteAbstract,
CLIENTDETAILS extends ClientDetailsAbstract,
SURNAME extends DirectorySurnameItemAbstract,
NAME extends DirectoryNameItemAbstract,
PATHRON extends DirectoryPathronItemAbstract,
SEX extends DirectorySexItemAbstract>
extends DelegateLine2<BEANINTERFACE, CLIENTDETAILS>{
//кеш адреса
protected AddressInfo addressInfo = new AddressInfo(getEDM());
/**
* Кеш адреса
*/
protected class AddressInfo extends DelegateExtraData<AddressDetails> {
public AddressInfo(ExtraDataManager contaner) {
super(contaner);
}
@Override
protected AddressDetails init() throws Exception {
return getBean().getAddress();
}
@Override
protected void saveDB() throws Exception {
auditDetailsList.addAll(getBean().setAddress(get()).getAudit());
fireAuditEvent();
}
@Override
protected AddressDetails initNew() {
return new AddressDetails();
}
}
/**
* Дефолтовый конструктор для создания новых клиентов.
* Инициализируются детали и кеши
*/
public ClientLocalAbstract(AuditListener al) throws ClipsException {
super(al);
}
/**
* Конструктор для инициализации по идентификтатору.
* Загрузка деталей отложенная.
* @param id идентифкатор клиента
*/
public ClientLocalAbstract(int id, AuditListener al) throws ClipsException {
super(id, al);
}
/**
* @param details детали клиента
*/
public ClientLocalAbstract(CLIENTDETAILS details, AuditListener al) throws ClipsException {
super(details, al);
}
/**
* Возвращает ФИО клиента
* @return фио в формате Иванов И.И.
*/
public String getFIO() {
try {
String name = getName().toString();
String surname = getSurname().toString();
String pathron = getPathron().toString();
String fio = String.format("%s %s.%s.", surname, name.length() > 1 ? name.substring(0, 1) : name, pathron.length() > 1 ? pathron.substring(0, 1) : pathron);
return fio;
} catch (ClipsException ex) {
ex.printStackTrace();
return "Не найдено в справочнике";
}
}
@SuppressWarnings({"unchecked", "unchecked"})
public SURNAME getSurname() throws ClipsException {
DirectorySurnameAbstract surnameList = DirectoryLocator.getDirectory(DirectorySurnameAbstract.class, false);
try {
return (SURNAME) surnameList.getItemFromID(getDetails().surnameId);
} catch (DirectoryItemReplacedException ex) {
reload();
return (SURNAME) surnameList.getItemFromID(getDetails().surnameId);
}
}
public void setSurname(SURNAME surname) throws ClipsException {
getDetails().surnameId = surname.getID();
fireContentStateEvent();
}
public NAME getName() throws ClipsException {
DirectoryNameAbstract list = DirectoryLocator.getDirectory(DirectoryNameAbstract.class, false);
try {
return (NAME) list.getItemFromID(getDetails().nameId);
} catch (DirectoryItemReplacedException ex) {
reload();
return (NAME) list.getItemFromID(getDetails().nameId);
}
}
public void setName(NAME name) throws ClipsException {
getDetails().nameId = name.getID();
fireContentStateEvent();
}
public PATHRON getPathron() throws ClipsException {
DirectoryPathronAbstract list = DirectoryLocator.getDirectory(DirectoryPathronAbstract.class, false);
try {
return (PATHRON) list.getItemFromID(getDetails().pathronId);
} catch (DirectoryItemReplacedException ex) {
reload();
return (PATHRON) list.getItemFromID(getDetails().pathronId);
}
}
public void setPathron(PATHRON pathron) throws ClipsException {
getDetails().pathronId = pathron.getID();
fireContentStateEvent();
}
public SEX getSex() throws ClipsException {
DirectorySexAbstract list = DirectoryLocator.getDirectory(DirectorySexAbstract.class, false);
return (SEX) list.getItemFromID(getDetails().sexId);
}
public void setSex(SEX sex) throws ClipsException {
getDetails().sexId = sex.getID();
fireContentStateEvent();
}
public Date getBorn() throws ClipsException {
return getDetails().born;
}
public void setBorn(Date born) throws ClipsException {
getDetails().born = born;
fireContentStateEvent();
}
public String BornToString() throws ClipsException {
SimpleDateFormat formatter = new SimpleDateFormat("dd.MM.yyyy");
if (getDetails().born == null) {
return "";
} else {
return formatter.format(getDetails().born);
}
}
public String getRemarks() throws ClipsException {
return getDetails().remarks;
}
public void setRemarks(String remarks) throws ClipsException {
if (remarks == null || remarks.trim().equals("")) {
getDetails().remarks = null;
} else {
getDetails().remarks = remarks;
}
fireContentStateEvent();
}
public String getEmail() throws ClipsException {
return getDetails().email;
}
public void setEmail(String email) throws ClipsException {
if (email == null || email.trim().equals("")) {
getDetails().email = null;
} else {
getDetails().email = email;
}
fireContentStateEvent();
}
public String getTelephones() throws ClipsException {
return getDetails().telephones;
}
public void setTelephones(String telephones) throws ClipsException {
if (telephones == null || telephones.trim().equals("")) {
getDetails().telephones = null;
} else {
getDetails().telephones = telephones;
}
fireContentStateEvent();
}
public String getSnils() throws ClipsException {
return getDetails().snils;
}
public void setSnils(String snils) throws ClipsException {
if (snils == null || snils.trim().equals("")) {
getDetails().snils = null;
} else {
getDetails().snils = snils;
}
fireContentStateEvent();
}
public String getInn() throws ClipsException {
return getDetails().inn;
}
public void setInn(String inn) throws ClipsException {
getDetails().inn = inn;
fireContentStateEvent();
}
/**
* Выдает Фамилию Имя Отчество
* @return
*/
@Override
public String toString() {
try {
return getSurname() + " " + getName() + " " + getPathron();
} catch (ClipsException ex) {
ex.printStackTrace();
return "Не найдено в справочнике";
}
}
/**
* @return Address != null
* @throws cli_fmw.main.ClipsException
*/
public Address getAddress() throws ClipsException {
return new Address(addressInfo.get().clone());
}
public void setAddress(Address addr) throws ClipsException {
addressInfo.set(addr.getDetails().clone());
fireContentStateEvent();
}
}