diff --git a/src/main/java/info/bukova/isspst/CommonUrlResolver.java b/src/main/java/info/bukova/isspst/CommonUrlResolver.java new file mode 100644 index 00000000..ffa975ba --- /dev/null +++ b/src/main/java/info/bukova/isspst/CommonUrlResolver.java @@ -0,0 +1,39 @@ +package info.bukova.isspst; + +import info.bukova.isspst.data.DataModel; + +import javax.servlet.http.HttpServletRequest; + +import org.springframework.beans.factory.annotation.Autowired; + +public class CommonUrlResolver implements EntityUrlResolver { + + @Autowired + private HttpServletRequest request; + protected String defaultUrl; + + public CommonUrlResolver() { + + } + + @Override + public String entityUrl(Object entity) { + if (defaultUrl == null) { + this.defaultUrl = request.getRequestURL().toString(); + this.defaultUrl = defaultUrl.substring(0, defaultUrl.indexOf(request.getServletPath())); + } + + if (!DataModel.class.isAssignableFrom(entity.getClass())) { + return defaultUrl + "/app"; + } + + String url = Constants.URL_MAP.get(entity.getClass()); + + if (url == null) { + return defaultUrl + "/app"; + } + + return defaultUrl + url + "?select=" + String.valueOf(((DataModel)entity).getId()); + } + +} diff --git a/src/main/java/info/bukova/isspst/Constants.java b/src/main/java/info/bukova/isspst/Constants.java index 9578e056..a26cf875 100644 --- a/src/main/java/info/bukova/isspst/Constants.java +++ b/src/main/java/info/bukova/isspst/Constants.java @@ -1,9 +1,15 @@ package info.bukova.isspst; +import java.util.Collections; +import java.util.HashMap; +import java.util.Map; + import info.bukova.isspst.data.Permission; import info.bukova.isspst.data.PermissionType; +import info.bukova.isspst.data.Requirement; import info.bukova.isspst.data.RequirementType; import info.bukova.isspst.data.Role; +import info.bukova.isspst.data.TripRequirement; import info.bukova.isspst.reporting.Report; import info.bukova.isspst.reporting.ReportMapping; import info.bukova.isspst.services.addressbook.AdbService; @@ -129,4 +135,10 @@ public class Constants { public final static long REQ_TYPE_MATERIAL = 1; public final static long REQ_TYPE_SERVICES = 2; + + @SuppressWarnings("serial") + public final static Map, String> URL_MAP = Collections.unmodifiableMap(new HashMap, String>() {{ + put(Requirement.class, "/main/orders/"); + put(TripRequirement.class, "/main/trips/requirements/"); + }} ); } diff --git a/src/main/java/info/bukova/isspst/EntityUrlResolver.java b/src/main/java/info/bukova/isspst/EntityUrlResolver.java new file mode 100644 index 00000000..745f0e71 --- /dev/null +++ b/src/main/java/info/bukova/isspst/EntityUrlResolver.java @@ -0,0 +1,7 @@ +package info.bukova.isspst; + +public interface EntityUrlResolver { + + public String entityUrl(Object entity); + +} diff --git a/src/main/java/info/bukova/isspst/RequirementUrlResolver.java b/src/main/java/info/bukova/isspst/RequirementUrlResolver.java new file mode 100644 index 00000000..f427c103 --- /dev/null +++ b/src/main/java/info/bukova/isspst/RequirementUrlResolver.java @@ -0,0 +1,39 @@ +package info.bukova.isspst; + +import info.bukova.isspst.data.Requirement; + +import javax.servlet.http.HttpServletRequest; + +import org.springframework.beans.factory.annotation.Autowired; + +public class RequirementUrlResolver implements EntityUrlResolver { + + private String defaultUrl; + @Autowired + private HttpServletRequest request; + + public RequirementUrlResolver() { + + } + + @Override + public String entityUrl(Object entity) { + if (!(entity instanceof Requirement)) { + return defaultUrl + "/app"; + } + + if (defaultUrl == null) { + this.defaultUrl = request.getRequestURL().toString(); + this.defaultUrl = defaultUrl.substring(0, defaultUrl.indexOf(request.getServletPath())); + } + + Requirement req = (Requirement)entity; + + if (req.getKind() == Constants.REQ_TYPE_MATERIAL) { + return defaultUrl + Constants.URL_MAP.get(req) + "material/?select=" + String.valueOf(req.getId()); + } else { + return defaultUrl + Constants.URL_MAP.get(req) + "services/?select=" + String.valueOf(req.getId()); + } + } + +} diff --git a/src/main/java/info/bukova/isspst/UrlResolverHolder.java b/src/main/java/info/bukova/isspst/UrlResolverHolder.java new file mode 100644 index 00000000..0244549c --- /dev/null +++ b/src/main/java/info/bukova/isspst/UrlResolverHolder.java @@ -0,0 +1,30 @@ +package info.bukova.isspst; + +import java.util.HashMap; +import java.util.Map; + +public class UrlResolverHolder { + + private EntityUrlResolver commonResolver; + private Map, EntityUrlResolver> resolvers; + + public UrlResolverHolder(EntityUrlResolver common) { + this.commonResolver = common; + resolvers = new HashMap, EntityUrlResolver>(); + } + + public void setResolvers(Map, EntityUrlResolver> resolvers) { + this.resolvers = resolvers; + } + + public EntityUrlResolver resolverFor(Class clazz) { + EntityUrlResolver res = resolvers.get(clazz); + + if (res == null) { + return commonResolver; + } + + return res; + } + +} diff --git a/src/main/java/info/bukova/isspst/mail/EntityMessageBuilder.java b/src/main/java/info/bukova/isspst/mail/EntityMessageBuilder.java index a441714d..74eadf36 100644 --- a/src/main/java/info/bukova/isspst/mail/EntityMessageBuilder.java +++ b/src/main/java/info/bukova/isspst/mail/EntityMessageBuilder.java @@ -1,5 +1,8 @@ package info.bukova.isspst.mail; +import info.bukova.isspst.EntityUrlResolver; +import info.bukova.isspst.UrlResolverHolder; + import java.lang.reflect.InvocationTargetException; import java.util.ArrayList; import java.util.List; @@ -12,6 +15,7 @@ public class EntityMessageBuilder implements MessageBuilder { private final static Logger logger = LoggerFactory.getLogger(EntityMessageBuilder.class); private boolean html; + private UrlResolverHolder urlResolverHolder; public void setHtml(boolean html) { this.html = html; @@ -53,7 +57,11 @@ public class EntityMessageBuilder implements MessageBuilder { for (String p : properties) { try { - ret = ret.replaceAll("\\[" + p + "\\]", BeanUtils.getProperty(data, p)); + if (p.equals("-url-")) { + ret = ret.replaceAll("\\[" + p + "\\]", getUrl(data)); + } else { + ret = ret.replaceAll("\\[" + p + "\\]", BeanUtils.getProperty(data, p)); + } } catch (IllegalAccessException e) { logger.error(e.getMessage()); } catch (InvocationTargetException e) { @@ -67,5 +75,18 @@ public class EntityMessageBuilder implements MessageBuilder { return ret; } + + private String getUrl(Object data) { + if (urlResolverHolder == null) { + return ""; + } + + EntityUrlResolver res = urlResolverHolder.resolverFor(data.getClass()); + return res.entityUrl(data); + } + + public void setUrlResolverHolder(UrlResolverHolder urlResolverHolder) { + this.urlResolverHolder = urlResolverHolder; + } } diff --git a/src/main/java/info/bukova/isspst/mail/MailerWithAttachement.java b/src/main/java/info/bukova/isspst/mail/MailerWithAttachement.java index 16ab9a80..58abe507 100644 --- a/src/main/java/info/bukova/isspst/mail/MailerWithAttachement.java +++ b/src/main/java/info/bukova/isspst/mail/MailerWithAttachement.java @@ -42,6 +42,10 @@ public class MailerWithAttachement implements Mailer { message.setFrom(from); } } + + if (message.getReplyTo() == null) { + message.setReplyTo(message.getFrom()); + } helper.setFrom(message.getFrom()); helper.setReplyTo(message.getReplyTo()); @@ -63,6 +67,7 @@ public class MailerWithAttachement implements Mailer { } try { sender.send(mimeMessage); + logger.info("Mail queued for send"); } catch (MailAuthenticationException e) { logger.error("Authentication error"); } catch (MailSendException e) { diff --git a/src/main/java/info/bukova/isspst/ui/ListViewModel.java b/src/main/java/info/bukova/isspst/ui/ListViewModel.java index 98056f43..0fb8b86d 100644 --- a/src/main/java/info/bukova/isspst/ui/ListViewModel.java +++ b/src/main/java/info/bukova/isspst/ui/ListViewModel.java @@ -300,11 +300,16 @@ public class ListViewModel extends DocumentViewModel if (selIndex > -1) { this.setDataBean(dataList.get(selIndex)); + afterSelect(); } } protected void beforeSelectViaUrl() { + } + + protected void afterSelect() { + } @Command diff --git a/src/main/java/info/bukova/isspst/ui/requirement/RequirementSubpage.java b/src/main/java/info/bukova/isspst/ui/requirement/RequirementSubpage.java index a8168a3d..3bc720ec 100644 --- a/src/main/java/info/bukova/isspst/ui/requirement/RequirementSubpage.java +++ b/src/main/java/info/bukova/isspst/ui/requirement/RequirementSubpage.java @@ -68,4 +68,9 @@ public class RequirementSubpage extends ListViewModel return false; } + + @Override + protected void afterSelect() { + BindUtils.postNotifyChange(null, null, this, "canApprove"); + } } diff --git a/src/main/java/info/bukova/isspst/ui/settings/GlobalSettingsVM.java b/src/main/java/info/bukova/isspst/ui/settings/GlobalSettingsVM.java index b085b676..62389f38 100644 --- a/src/main/java/info/bukova/isspst/ui/settings/GlobalSettingsVM.java +++ b/src/main/java/info/bukova/isspst/ui/settings/GlobalSettingsVM.java @@ -94,6 +94,12 @@ public class GlobalSettingsVM { message.setText(message.getText() + "[" + field + "]"); } + @Command + @NotifyChange("settings") + public void insertUrl(@BindingParam("message") MailMessage message) { + message.setText(message.getText() + "[-url-]"); + } + @Command @NotifyChange("settings") public void addAddress() { diff --git a/src/main/webapp/WEB-INF/spring/mail-services.xml b/src/main/webapp/WEB-INF/spring/mail-services.xml index ebf1bb71..7115106e 100644 --- a/src/main/webapp/WEB-INF/spring/mail-services.xml +++ b/src/main/webapp/WEB-INF/spring/mail-services.xml @@ -30,6 +30,20 @@ + + + + + + + + + + + + + + diff --git a/src/main/webapp/app/template.zhtml b/src/main/webapp/app/template.zhtml index 38f80528..bca9beb4 100644 --- a/src/main/webapp/app/template.zhtml +++ b/src/main/webapp/app/template.zhtml @@ -51,6 +51,6 @@
- + \ No newline at end of file diff --git a/src/main/webapp/settings/global/email.zul b/src/main/webapp/settings/global/email.zul index d2e3f9e4..7c800e24 100644 --- a/src/main/webapp/settings/global/email.zul +++ b/src/main/webapp/settings/global/email.zul @@ -21,7 +21,10 @@ -