Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 3 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -280,6 +280,9 @@ target
liuxin/.DS_Store
liuxin/src/.DS_Store

students/*
!students/785396327




Expand Down
9 changes: 9 additions & 0 deletions students/785396327/first/ood/srp/ConfigParser.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
package first.ood.srp;

/**
* Created by william on 2017/6/14.
*/
public abstract class ConfigParser {

abstract void parseInfoFromConfig(Email email);
}
28 changes: 28 additions & 0 deletions students/785396327/first/ood/srp/Configuration.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,28 @@
package first.ood.srp;

import java.util.HashMap;
import java.util.Map;

public class Configuration {

static Map<String, String> configurations = new HashMap<String, String>();


static {
configurations.put(ConfigurationKeys.SMTP_SERVER, "smtp.163.com");
configurations.put(ConfigurationKeys.ALT_SMTP_SERVER, "smtp1.163.com");
configurations.put(ConfigurationKeys.EMAIL_ADMIN, "admin@company.com");
}

/**
* 应该从配置文件读, 但是这里简化为直接从一个map 中去读
*
* @param key
* @return
*/
public String getProperty(String key) {

return configurations.get(key);
}

}
10 changes: 10 additions & 0 deletions students/785396327/first/ood/srp/ConfigurationKeys.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
package first.ood.srp;

public class ConfigurationKeys {

public static final String SMTP_SERVER = "smtp.server";
public static final String ALT_SMTP_SERVER = "alt.smtp.server";
public static final String EMAIL_ADMIN = "email.admin";
public static final String NAME_KEY = "NAME";
public static final String EMAIL_KEY = "EMAIL";
}
24 changes: 24 additions & 0 deletions students/785396327/first/ood/srp/DBParser.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
package first.ood.srp;

import java.util.HashMap;
import java.util.List;

/**
* Created by william on 2017/6/14.
*/
public abstract class DBParser<T extends Email> {
protected String sql;
protected Object[] params;

protected DBParser(String sql, Object[] params) {
this.sql = sql;
this.params = params;
}

protected List<T> parseInfoFromDB(T email) {
List<HashMap<String, String>> data = DBUtil.query(sql, params);
return convertData(email, data);
}

abstract List<T> convertData(T email, List<HashMap<String, String>> data);
}
43 changes: 43 additions & 0 deletions students/785396327/first/ood/srp/DBUtil.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,43 @@
package first.ood.srp;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

public class DBUtil {

/**
* 应该从数据库读, 但是简化为直接生成。
*
* @param sql
* @return
*/
public static List<HashMap<String, String>> query(String sql, Object[] params) {
formateSQL(sql, params);

List userList = new ArrayList();
for (int i = 1; i <= 3; i++) {
Map<String, String> userInfo = new HashMap();
userInfo.put("NAME", "User" + i);
userInfo.put("EMAIL", "aa@bb.com");
userList.add(userInfo);
}

return userList;
}

private static String formateSQL(String sql, Object[] params) {
if (StringUtils.isEmpty(sql))
throw new RuntimeException("empty sql");
String[] sqlFaction = sql.split("\\?");
if (sqlFaction.length - 1 != params.length)
throw new RuntimeException("wrong number of parameters");
for (int i = 0; i < params.length; i++) {
sql = sql.replaceFirst("\\?", "'" + params[i].toString() + "'");
}

return sql;
}

}
46 changes: 46 additions & 0 deletions students/785396327/first/ood/srp/Email.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,46 @@
package first.ood.srp;

/**
* Created by william on 2017/6/12.
*/
public class Email {
protected String smtpHost;
protected String altSmtpHost;
protected String fromAddress;
protected String toAddress;
protected String subject;
protected String message;

protected void setSMTPHost(String smtpHost) {
this.smtpHost = smtpHost;
}

protected void setAltSMTPHost(String altSmtpHost) {
this.altSmtpHost = altSmtpHost;

}

protected void setFromAddress(String fromAddress) {
this.fromAddress = fromAddress;
}

protected void setMessage(String message) {
this.message = message;
}

public String getToAddress() {
return toAddress;
}

public void setToAddress(String toAddress) {
this.toAddress = toAddress;
}

public String getSubject() {
return subject;
}

public void setSubject(String subject) {
this.subject = subject;
}
}
26 changes: 26 additions & 0 deletions students/785396327/first/ood/srp/EmailParser.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,26 @@
package first.ood.srp;

import java.util.List;

/**
* Created by william on 2017/6/12.
*/
public class EmailParser {
private ConfigParser configParser;
private FileParser fileParser;
private DBParser dbParser;

public EmailParser(ConfigParser configParser,FileParser fileParser,DBParser dbParser) {
this.configParser = configParser;
this.fileParser = fileParser;
this.dbParser = dbParser;
}

public List<Email> parseEmailList() {
PromotionMail promotionMail = new PromotionMail();
configParser.parseInfoFromConfig(promotionMail);
fileParser.parseInfoFromFile(promotionMail);
return dbParser.parseInfoFromDB(promotionMail);
}

}
38 changes: 38 additions & 0 deletions students/785396327/first/ood/srp/FileParser.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,38 @@
package first.ood.srp;

import java.io.BufferedReader;
import java.io.FileReader;
import java.io.IOException;

/**
* Created by gongxun on 2017/6/12.
*/
public abstract class FileParser {
protected String[] data;

protected FileParser(String filePath) {
try {
if (StringUtils.isEmpty(filePath))
throw new RuntimeException("init file parser must contains a legal file");
readFile(filePath);
} catch (IOException e) {
throw new RuntimeException("parse file cause errors");
}
}

private void readFile(String filePath) throws IOException {
BufferedReader br = null;
try {
br = new BufferedReader(new FileReader(filePath));
String temp = br.readLine();
data = temp.split(" ");
} catch (IOException e) {
throw new IOException(e.getMessage());
} finally {
br.close();
}
}

protected abstract void parseInfoFromFile(Email email);

}
33 changes: 33 additions & 0 deletions students/785396327/first/ood/srp/MailSender.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,33 @@
package first.ood.srp;

import java.util.Iterator;
import java.util.List;

/**
* Created by william on 2017/6/12.
*/
public class MailSender<T extends Email> {

private void sendMail(Email mail, boolean isDebug) {
if (!StringUtils.isEmpty(mail.toAddress))
try {
MailUtil.sendEmail(
mail.toAddress,
mail.fromAddress,
mail.subject,
mail.message,
StringUtils.isEmpty(mail.smtpHost) == true ? mail.smtpHost : mail.altSmtpHost,
isDebug);
} catch (Exception e) {
System.out.println("通过备用 SMTP服务器发送邮件失败: " + e.getMessage());
}
}

public void sendMailList(List<T> mailList, boolean isDebug) {
if (mailList != null) {
for (Iterator<T> iterator = mailList.iterator(); iterator.hasNext(); ) {
sendMail(iterator.next(), isDebug);
}
}
}
}
16 changes: 16 additions & 0 deletions students/785396327/first/ood/srp/MailUtil.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
package first.ood.srp;

public class MailUtil {

public static void sendEmail(String toAddress, String fromAddress, String subject, String message, String smtpHost,
boolean debug) {
//假装发了一封邮件
StringBuilder buffer = new StringBuilder();
buffer.append("From:").append(fromAddress).append("\n");
buffer.append("To:").append(toAddress).append("\n");
buffer.append("Subject:").append(subject).append("\n");
buffer.append("Content:").append(message).append("\n");
System.out.println(buffer.toString());

}
}
27 changes: 27 additions & 0 deletions students/785396327/first/ood/srp/PromotionFileParser.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,27 @@
package first.ood.srp;

/**
* Created by william on 2017/6/14.
*/
public class PromotionFileParser extends FileParser {


public PromotionFileParser(String filePath) {
super(filePath);
}

@Override
protected void parseInfoFromFile(Email email) {
PromotionMail promotionMail = (PromotionMail) email;
promotionMail.setProductID(parseProductID());
promotionMail.setProductDesc(parseProductDesc());
}

private String parseProductID() {
return super.data[0];
}

private String parseProductDesc() {
return super.data[1];
}
}
22 changes: 22 additions & 0 deletions students/785396327/first/ood/srp/PromotionMail.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
package first.ood.srp;

public class PromotionMail extends Email {
private String productID;
private String productDesc;

public void setProductID(String productID) {
this.productID = productID;
}

public String getproductID() {
return productID;
}

public void setProductDesc(String desc) {
this.productDesc = desc;
}

public String getProductDesc() {
return this.productDesc;
}
}
15 changes: 15 additions & 0 deletions students/785396327/first/ood/srp/PromotionMailConfigParser.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
package first.ood.srp;

/**
* Created by william on 2017/6/14.
*/
public class PromotionMailConfigParser extends ConfigParser {

@Override
void parseInfoFromConfig(Email email) {
Configuration configuration = new Configuration();
email.setSMTPHost(configuration.getProperty(ConfigurationKeys.SMTP_SERVER));
email.setFromAddress(configuration.getProperty(ConfigurationKeys.EMAIL_ADMIN));
email.setAltSMTPHost(configuration.getProperty(ConfigurationKeys.ALT_SMTP_SERVER));
}
}
Loading