public void trainMessageAsSpam(IMailbox mailbox, Object uid) throws Exception { // get inputstream of message body InputStream istream = CommandHelper.getBodyPart(mailbox, uid); // get headers Header h = mailbox.getHeaderFields(uid, Message.HEADERFIELDS); // put headers in list Enumeration e = h.getKeys(); List list = new ArrayList(); while (e.hasMoreElements()) { String key = (String) e.nextElement(); list.add(h.get(key)); } // load database from file load(); try { CloneStreamMaster master = new CloneStreamMaster(istream); InputStream inputStream = master.getClone(); byte[] md5sum = MD5SumHelper.createMD5(inputStream); // close stream inputStream.close(); // get new inputstream inputStream = master.getClone(); Message message = new Message(inputStream, list, md5sum); // check if this message was already learned // -> only add if this is not the case if (db.MD5SumExists(md5sum)) { // message already exists // --> correct token data filter.correctMessageAsSpam(message); } else { // new message filter.trainMessageAsSpam(message); } // close stream inputStream.close(); // set dirty flag hasChanged = true; } catch (IOException e1) { LOG.severe(e1.getMessage()); if (Logging.DEBUG) e1.printStackTrace(); } catch (NoSuchAlgorithmException nsae) {
public void trainMessageAsHam(IMailbox mailbox, Object uid) throws Exception { // get inputstream of message body InputStream istream = CommandHelper.getBodyPart(mailbox, uid); // get headers Header h = mailbox.getHeaderFields(uid, Message.HEADERFIELDS); // put headers in list Enumeration e = h.getKeys(); List list = new ArrayList(); while (e.hasMoreElements()) { String key = (String) e.nextElement(); list.add(h.get(key)); } // load database from file load(); try { CloneStreamMaster master = new CloneStreamMaster(istream); InputStream inputStream = master.getClone(); byte[] md5sum = MD5SumHelper.createMD5(inputStream); // close stream inputStream.close(); // get new inputstream inputStream = master.getClone(); Message message = new Message(inputStream, list, md5sum); // check if this message was already learned if (db.MD5SumExists(md5sum)) { // message already exists // --> correct token data filter.correctMessageAsHam(message); } else { // new message filter.trainMessageAsHam(message); } // close stream inputStream.close(); // set dirty flag hasChanged = true; } catch (IOException e1) { LOG.severe(e1.getMessage()); if (Logging.DEBUG) e1.printStackTrace(); } catch (NoSuchAlgorithmException nsae) {
Clone fragments detected by clone detection tool
File path: /columba-1.4-src/mail/src/main/java/org/columba/mail/spam/MacchiatoPlugin.java File path: /columba-1.4-src/mail/src/main/java/org/columba/mail/spam/MacchiatoPlugin.java
Method name: Method name:
Number of AST nodes: 0 Number of AST nodes: 0
1
public void trainMessageAsSpam(IMailbox mailbox, Object uid)
1
public void trainMessageAsHam(IMailbox mailbox, Object uid)
2
			throws Exception {
2
			throws Exception {
3
		// get inputstream of message body
3
		// get inputstream of message body
4
		InputStream istream = CommandHelper.getBodyPart(mailbox, uid);
4
		InputStream istream = CommandHelper.getBodyPart(mailbox, uid);
5
		// get headers
5
		// get headers
6
		Header h = mailbox.getHeaderFields(uid, Message.HEADERFIELDS);
6
		Header h = mailbox.getHeaderFields(uid, Message.HEADERFIELDS);
7
		// put headers in list
7
		// put headers in list
8
		Enumeration e = h.getKeys();
8
		Enumeration e = h.getKeys();
9
		List list = new ArrayList();
9
		List list = new ArrayList();
10
		while (e.hasMoreElements()) {
10
		while (e.hasMoreElements()) {
11
			String key = (String) e.nextElement();
11
			String key = (String) e.nextElement();
12
			list.add(h.get(key));
12
			list.add(h.get(key));
13
		}
13
		}
14
		// load database from file
14
		// load database from file
15
		load();
15
		load();
16
		try {
16
		try {
17
			CloneStreamMaster master = new CloneStreamMaster(istream);
17
			CloneStreamMaster master = new CloneStreamMaster(istream);
18
			InputStream inputStream = master.getClone();
18
			InputStream inputStream = master.getClone();
19
			byte[] md5sum = MD5SumHelper.createMD5(inputStream);
19
			byte[] md5sum = MD5SumHelper.createMD5(inputStream);
20
			// close stream
20
			// close stream
21
			inputStream.close();
21
			inputStream.close();
22
			// get new inputstream
22
			// get new inputstream
23
			inputStream = master.getClone();
23
			inputStream = master.getClone();
24
			Message message = new Message(inputStream, list, md5sum);
24
			Message message = new Message(inputStream, list, md5sum);
25
			// check if this message was already learned
25
			// check if this message was already learned
26
			// -> only add if this is not the case
26
			
27
			if (db.MD5SumExists(md5sum)) {
27
if (db.MD5SumExists(md5sum)) {
28
				// message already exists
28
				// message already exists
29
				// --> correct token data
29
				// --> correct token data
30
				filter.correctMessageAsSpam(message);
30
				filter.correctMessageAsHam(message);
31
			} else {
31
			} else {
32
				// new message
32
				// new message
33
				filter.trainMessageAsSpam(message);
33
				filter.trainMessageAsHam(message);
34
			}
34
			}
35
			// close stream
35
			// close stream
36
			inputStream.close();
36
			inputStream.close();
37
			// set dirty flag
37
			// set dirty flag
38
			hasChanged = true;
38
			hasChanged = true;
39
		} catch (IOException e1) {
39
		} catch (IOException e1) {
40
			LOG.severe(e1.getMessage());
40
			LOG.severe(e1.getMessage());
41
			if (Logging.DEBUG)
41
			if (Logging.DEBUG)
42
				e1.printStackTrace();
42
				e1.printStackTrace();
43
		} catch (NoSuchAlgorithmException nsae) {
43
		} catch (NoSuchAlgorithmException nsae) {
44
		
44
		
Summary
Number of common nesting structure subtrees0
Number of refactorable cases0
Number of non-refactorable cases0
Time elapsed for finding largest common nesting structure subtrees (ms)0.0
Clones location
Number of node comparisons0