|
|
|
@ -5,9 +5,11 @@ import info.bukova.isspst.data.DataModel;
|
|
|
|
|
import info.bukova.isspst.services.Service;
|
|
|
|
|
import info.bukova.isspst.services.ValidationException;
|
|
|
|
|
|
|
|
|
|
import java.sql.SQLException;
|
|
|
|
|
import java.util.Map;
|
|
|
|
|
|
|
|
|
|
import org.hibernate.exception.ConstraintViolationException;
|
|
|
|
|
import org.springframework.dao.DataIntegrityViolationException;
|
|
|
|
|
import org.springframework.security.access.AccessDeniedException;
|
|
|
|
|
import org.zkoss.bind.annotation.BindingParam;
|
|
|
|
|
import org.zkoss.bind.annotation.Command;
|
|
|
|
@ -17,7 +19,8 @@ import org.zkoss.bind.annotation.NotifyChange;
|
|
|
|
|
import org.zkoss.zul.Messagebox;
|
|
|
|
|
import org.zkoss.zul.Window;
|
|
|
|
|
|
|
|
|
|
public class FormViewModel<T extends DataModel> {
|
|
|
|
|
public class FormViewModel<T extends DataModel>
|
|
|
|
|
{
|
|
|
|
|
|
|
|
|
|
private T dataBean;
|
|
|
|
|
private Map<String, String> errMessages;
|
|
|
|
@ -26,24 +29,30 @@ public class FormViewModel<T extends DataModel> {
|
|
|
|
|
private ServiceConstraint<T> constraint;
|
|
|
|
|
|
|
|
|
|
@Init
|
|
|
|
|
public void init(@ExecutionArgParam("selected") T selected, @ExecutionArgParam("service") Service<T> service) {
|
|
|
|
|
public void init(@ExecutionArgParam("selected") T selected, @ExecutionArgParam("service") Service<T> service)
|
|
|
|
|
{
|
|
|
|
|
this.dataBean = selected;
|
|
|
|
|
this.service = service;
|
|
|
|
|
constraint = new ServiceConstraint<T>();
|
|
|
|
|
constraint.setDataBean(selected);
|
|
|
|
|
constraint.setService(service);
|
|
|
|
|
if (selected.getId() == 0 && selected.getCreated() == null) {
|
|
|
|
|
if (selected.getId() == 0 && selected.getCreated() == null)
|
|
|
|
|
{
|
|
|
|
|
newRec = true;
|
|
|
|
|
} else {
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
|
newRec = false;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public ServiceConstraint<T> getConstriant() {
|
|
|
|
|
public ServiceConstraint<T> getConstriant()
|
|
|
|
|
{
|
|
|
|
|
return constraint;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public T getDataBean() {
|
|
|
|
|
public T getDataBean()
|
|
|
|
|
{
|
|
|
|
|
return dataBean;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
@ -59,52 +68,103 @@ public class FormViewModel<T extends DataModel> {
|
|
|
|
|
|
|
|
|
|
@Command
|
|
|
|
|
@NotifyChange("errMessages")
|
|
|
|
|
public void save(@BindingParam("window") Window win) {
|
|
|
|
|
try {
|
|
|
|
|
if (newRec) {
|
|
|
|
|
public void save(@BindingParam("window") Window win)
|
|
|
|
|
{
|
|
|
|
|
try
|
|
|
|
|
{
|
|
|
|
|
if (newRec)
|
|
|
|
|
{
|
|
|
|
|
doAdd();
|
|
|
|
|
} else {
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
|
doSave();
|
|
|
|
|
}
|
|
|
|
|
win.detach();
|
|
|
|
|
} catch (ValidationException e) {
|
|
|
|
|
}
|
|
|
|
|
catch (ValidationException e)
|
|
|
|
|
{
|
|
|
|
|
errMessages = e.getMessages();
|
|
|
|
|
String classErr = errMessages.get("CLASS_ERR");
|
|
|
|
|
|
|
|
|
|
if (classErr == null) {
|
|
|
|
|
if (classErr == null)
|
|
|
|
|
{
|
|
|
|
|
classErr = "";
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
Messagebox.show(StringUtils.localize("DbValidationError"), StringUtils.localize("Error"), Messagebox.OK, Messagebox.ERROR);
|
|
|
|
|
} catch (AccessDeniedException e) {
|
|
|
|
|
}
|
|
|
|
|
catch (AccessDeniedException e)
|
|
|
|
|
{
|
|
|
|
|
Messagebox.show(StringUtils.localize("ErrorRights"), StringUtils.localize("Error"), Messagebox.OK, Messagebox.ERROR);
|
|
|
|
|
} catch (ConstraintViolationException e) {
|
|
|
|
|
}
|
|
|
|
|
catch (ConstraintViolationException e)
|
|
|
|
|
{
|
|
|
|
|
Messagebox.show(StringUtils.localizeDbErr(e.getSQLException().getMessage()), StringUtils.localize("Error"), Messagebox.OK, Messagebox.ERROR);
|
|
|
|
|
dataBean.setValid(false);
|
|
|
|
|
} catch (Exception e) {
|
|
|
|
|
}
|
|
|
|
|
catch (DataIntegrityViolationException e)
|
|
|
|
|
{
|
|
|
|
|
Throwable actualException = e;
|
|
|
|
|
Throwable previousException = actualException.getCause();
|
|
|
|
|
String msg = actualException.getLocalizedMessage();
|
|
|
|
|
boolean printStackTree = true;
|
|
|
|
|
|
|
|
|
|
if (previousException != null)
|
|
|
|
|
{
|
|
|
|
|
if (previousException instanceof ConstraintViolationException)
|
|
|
|
|
{
|
|
|
|
|
ConstraintViolationException cve = (ConstraintViolationException) previousException;
|
|
|
|
|
SQLException sqle = cve.getSQLException();
|
|
|
|
|
int errCode = sqle.getErrorCode();
|
|
|
|
|
|
|
|
|
|
if (errCode == 1062)
|
|
|
|
|
{
|
|
|
|
|
printStackTree = false;
|
|
|
|
|
msg = sqle.getMessage();
|
|
|
|
|
msg = StringUtils.localizeDbErr(msg);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if (printStackTree)
|
|
|
|
|
{
|
|
|
|
|
e.printStackTrace();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
Messagebox.show(StringUtils.localize("DbSaveError") + "\n\n" + msg, StringUtils.localize("Error"), Messagebox.OK, Messagebox.ERROR);
|
|
|
|
|
dataBean.setValid(false);
|
|
|
|
|
}
|
|
|
|
|
catch (Exception e)
|
|
|
|
|
{
|
|
|
|
|
e.printStackTrace();
|
|
|
|
|
Messagebox.show(StringUtils.localize("DbSaveError"), StringUtils.localize("Error"), Messagebox.OK, Messagebox.ERROR);
|
|
|
|
|
dataBean.setValid(false);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public Map<String, String> getErrMessages() {
|
|
|
|
|
public Map<String, String> getErrMessages()
|
|
|
|
|
{
|
|
|
|
|
return errMessages;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
protected void setErrMesages(Map<String, String> msgs) {
|
|
|
|
|
protected void setErrMesages(Map<String, String> msgs)
|
|
|
|
|
{
|
|
|
|
|
this.errMessages = msgs;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
protected void doSave() {
|
|
|
|
|
protected void doSave()
|
|
|
|
|
{
|
|
|
|
|
service.update(dataBean);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
protected void doAdd() {
|
|
|
|
|
protected void doAdd()
|
|
|
|
|
{
|
|
|
|
|
service.add(dataBean);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public boolean isCanSave() {
|
|
|
|
|
public boolean isCanSave()
|
|
|
|
|
{
|
|
|
|
|
return true;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|