refactoring code

This commit is contained in:
2022-04-20 09:21:45 +02:00
parent b38b40a677
commit 2c99aa20b3
8 changed files with 199 additions and 128 deletions

View File

@@ -7,12 +7,10 @@ import de.srsoftware.widerhall.mail.SmtpClient;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import javax.mail.Address;
import javax.mail.Message;
import javax.mail.MessagingException;
import javax.mail.internet.AddressException;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeMessage;
import java.io.UnsupportedEncodingException;
import java.sql.ResultSet;
import java.sql.SQLException;
@@ -49,7 +47,7 @@ public class MailingList implements MessageHandler {
private final SmtpClient smtp;
private final ImapClient imap;
private static final HashMap<String,MailingList> lists = new HashMap<>();
private static final HashMap<String,MailingList> cache = new HashMap<>();
/**
* create a new ML object
@@ -145,7 +143,7 @@ public class MailingList implements MessageHandler {
private void forward(Message message) throws MessagingException {
try {
var emails = members().stream().map(User::email).toList();
var emails = members().stream().map(ListMember::user).map(User::email).toList();
String sender = (state & STATE_FORWARD_FROM) > 0 ? message.getFrom()[0].toString() : email();
smtp.bccForward(sender,message,emails);
} catch (SQLException e) {
@@ -163,8 +161,8 @@ public class MailingList implements MessageHandler {
*/
private static MailingList from(ResultSet rs) throws SQLException {
String email = rs.getString(EMAIL);
var ml = lists.get(email);
if (ml == null) lists.put(email,ml = new MailingList(rs.getString(EMAIL),
var ml = cache.get(email);
if (ml == null) cache.put(email,ml = new MailingList(rs.getString(EMAIL),
rs.getString(NAME),
rs.getString(IMAP_HOST),
rs.getInt(IMAP_PORT),
@@ -213,7 +211,7 @@ public class MailingList implements MessageHandler {
*/
public static MailingList load(String listEmail) {
if (listEmail == null) return null;
var ml = lists.get(listEmail);
var ml = cache.get(listEmail);
if (ml == null) try {
var rs = Database.open()
.select(TABLE_NAME)
@@ -226,10 +224,41 @@ public class MailingList implements MessageHandler {
return ml;
}
private Set<User> members() throws SQLException {
return ListMember.of(email()).keySet();
public boolean mayBeAlteredBy(User user) {
if (user.hashPermission(PERMISSION_ADMIN)) return true;
try {
if (ListMember.load(this,user).hasState(ListMember.STATE_OWNER)) return true;
} catch (SQLException e) {
LOG.debug("Error loading list member for ({}, {})",user.email(),email());
}
return false;
}
public boolean mayBeTestedBy(User user) {
if (user.hashPermission(PERMISSION_ADMIN)) return true;
try {
if (ListMember.load(this,user).hasState(ListMember.STATE_OWNER)) return true;
} catch (SQLException e) {
LOG.debug("Error loading list member for ({}, {})",user.email(),email());
}
return false;
}
public Set<ListMember> members() throws SQLException {
return ListMember.of(this);
}
public boolean membersMayBeListedBy(User user) {
if (user.hashPermission(PERMISSION_ADMIN)) return true;
try {
if (ListMember.load(this,user).hasState(ListMember.STATE_OWNER)) return true;
} catch (SQLException e) {
LOG.debug("Error loading list member for ({}, {})",user.email(),email());
}
return false;
}
/**
* creates a map from the current ML object containing only email and name of the ML
* @return
@@ -424,5 +453,4 @@ public class MailingList implements MessageHandler {
return new ArrayList<InternetAddress>().stream();
}
}
}