diff --git a/src/main/java/org/jenkinsci/plugins/p4/changes/P4ChangeEntry.java b/src/main/java/org/jenkinsci/plugins/p4/changes/P4ChangeEntry.java index 7ed8abb4..f844d48d 100644 --- a/src/main/java/org/jenkinsci/plugins/p4/changes/P4ChangeEntry.java +++ b/src/main/java/org/jenkinsci/plugins/p4/changes/P4ChangeEntry.java @@ -2,7 +2,6 @@ import hudson.model.User; import hudson.scm.ChangeLogSet; -import hudson.tasks.Mailer.UserProperty; import java.text.ParseException; import java.text.SimpleDateFormat; @@ -14,6 +13,7 @@ import java.util.logging.Logger; import org.jenkinsci.plugins.p4.client.ConnectionHelper; +import org.jenkinsci.plugins.p4.email.P4UserProperty; import org.kohsuke.stapler.export.Exported; import com.perforce.p4java.core.ChangelistStatus; @@ -66,14 +66,10 @@ public void setChange(ConnectionHelper p4, int changeId) throws Exception { author = User.get(user); // set email property on user - UserProperty prop = author.getProperty(UserProperty.class); - if (prop == null || prop.getAddress() == null - || prop.getAddress().isEmpty()) { - String email = p4.getEmail(user); - UserProperty userProp = new UserProperty(email); - author.addProperty(userProp); - logger.fine("Setting email for user: " + user + ":" + email); - } + String email = p4.getEmail(user); + P4UserProperty p4prop = new P4UserProperty(email); + author.addProperty(p4prop); + logger.fine("Setting email for user: " + user + ":" + email); // set date of change date = changelist.getDate(); diff --git a/src/main/java/org/jenkinsci/plugins/p4/email/P4AddressResolver.java b/src/main/java/org/jenkinsci/plugins/p4/email/P4AddressResolver.java new file mode 100644 index 00000000..27634de3 --- /dev/null +++ b/src/main/java/org/jenkinsci/plugins/p4/email/P4AddressResolver.java @@ -0,0 +1,24 @@ +package org.jenkinsci.plugins.p4.email; + +import hudson.model.User; +import hudson.tasks.MailAddressResolver; + +import java.util.logging.Logger; + +public class P4AddressResolver extends MailAddressResolver { + + private static Logger logger = Logger.getLogger(P4AddressResolver.class + .getName()); + + @Override + public String findMailAddressFor(User user) { + P4UserProperty prop = user.getProperty(P4UserProperty.class); + if (prop != null) { + String id = user.getId(); + String email = prop.getEmail(); + logger.info("MailAddressResolver: " + id + ":" + email); + return email; + } + return null; + } +} diff --git a/src/main/java/org/jenkinsci/plugins/p4/email/P4UserProperty.java b/src/main/java/org/jenkinsci/plugins/p4/email/P4UserProperty.java new file mode 100644 index 00000000..8d0cbe32 --- /dev/null +++ b/src/main/java/org/jenkinsci/plugins/p4/email/P4UserProperty.java @@ -0,0 +1,48 @@ +package org.jenkinsci.plugins.p4.email; + +import hudson.Extension; +import hudson.Util; +import hudson.model.UserProperty; +import hudson.model.UserPropertyDescriptor; +import hudson.model.User; +import net.sf.json.JSONObject; + +import org.kohsuke.stapler.DataBoundConstructor; +import org.kohsuke.stapler.StaplerRequest; +import org.kohsuke.stapler.export.Exported; + +public class P4UserProperty extends UserProperty { + + private final String email; + + @DataBoundConstructor + public P4UserProperty(String email) { + this.email = Util.fixEmptyAndTrim(email); + } + + @Extension + public static class DescriptorImpl extends UserPropertyDescriptor { + + @Override + public UserProperty newInstance(User user) { + return new P4UserProperty(null); + } + + @Override + public String getDisplayName() { + return "Perforce User Property"; + } + + @Override + public UserProperty + newInstance(StaplerRequest req, JSONObject formData) + throws FormException { + return new P4UserProperty(formData.optString("email")); + } + } + + @Exported + public String getEmail() { + return email; + } +} diff --git a/src/main/resources/org/jenkinsci/plugins/p4/email/P4UserProperty/config.jelly b/src/main/resources/org/jenkinsci/plugins/p4/email/P4UserProperty/config.jelly new file mode 100644 index 00000000..a5ab36e2 --- /dev/null +++ b/src/main/resources/org/jenkinsci/plugins/p4/email/P4UserProperty/config.jelly @@ -0,0 +1,5 @@ + + + + +