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;
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;
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: void trainMessageAsSpam(IMailbox, Object) Method name: void trainMessageAsHam(IMailbox, Object)
Number of AST nodes: 19 Number of AST nodes: 19
1
InputStream istream = CommandHelper.getBodyPart(mailbox, uid);
1
InputStream istream = CommandHelper.getBodyPart(mailbox, uid);
2
		// get headers
2
		// get headers
3
		Header h = mailbox.getHeaderFields(uid, Message.HEADERFIELDS);
3
		Header h = mailbox.getHeaderFields(uid, Message.HEADERFIELDS);
4
		// put headers in list
4
		// put headers in list
5
		Enumeration e = h.getKeys();
5
		Enumeration e = h.getKeys();
6
		List list = new ArrayList();
6
		List list = new ArrayList();
7
		while (e.hasMoreElements()) {
7
		while (e.hasMoreElements()) {
8
			String key = (String) e.nextElement();
8
			String key = (String) e.nextElement();
9
			list.add(h.get(key));
9
			list.add(h.get(key));
10
		}
10
		}
11
		// load database from file
11
		// load database from file
12
		load();
12
		load();
13
		try {
13
		try {
14
			CloneStreamMaster master = new CloneStreamMaster(istream);
14
			CloneStreamMaster master = new CloneStreamMaster(istream);
15
			InputStream inputStream = master.getClone();
15
			InputStream inputStream = master.getClone();
16
			byte[] md5sum = MD5SumHelper.createMD5(inputStream);
16
			byte[] md5sum = MD5SumHelper.createMD5(inputStream);
17
			// close stream
17
			// close stream
18
			inputStream.close();
18
			inputStream.close();
19
			// get new inputstream
19
			// get new inputstream
20
			inputStream = master.getClone();
20
			inputStream = master.getClone();
21
			Message message = new Message(inputStream, list, md5sum);
21
			Message message = new Message(inputStream, list, md5sum);
22
			// check if this message was already learned
22
			// check if this message was already learned
23
			// -> only add if this is not the case
23
			
24
			if (db.MD5SumExists(md5sum)) {
24
if (db.MD5SumExists(md5sum)) {
25
				// message already exists
25
				// message already exists
26
				// --> correct token data
26
				// --> correct token data
27
				filter.correctMessageAsSpam(message);
27
				filter.correctMessageAsHam(message);
28
			} else {
28
			} else {
29
				// new message
29
				// new message
30
				filter.trainMessageAsSpam(message);
30
				filter.trainMessageAsHam(message);
31
			}
31
			}
32
			// close stream
32
			// close stream
33
			inputStream.close();
33
			inputStream.close();
34
			// set dirty flag
34
			// set dirty flag
35
			hasChanged = true;
35
			hasChanged = true;
Summary
Number of common nesting structure subtrees1
Number of refactorable cases0
Number of non-refactorable cases1
Time elapsed for finding largest common nesting structure subtrees (ms)0.3
Clones locationClones are declared in the same class
Number of node comparisons19
  1. {Non-refactorable}
    Mapping Summary
    Number of mapped statements7
    Number of unmapped statements in the first code fragment0
    Number of unmapped statements in the second code fragment0
    Time elapsed for statement mapping (ms)14.5
    Clone typeType 1
    Mapped Statements
    ID Statement ID Statement
    1
    InputStream istream = CommandHelper.getBodyPart(mailbox, uid);
    1
    InputStream istream = CommandHelper.getBodyPart(mailbox, uid);
    2
    Header h = mailbox.getHeaderFields(uid, Message.HEADERFIELDS);
    2
    Header h = mailbox.getHeaderFields(uid, Message.HEADERFIELDS);
    3
    Enumeration e = h.getKeys();
    3
    Enumeration e = h.getKeys();
    4
    List list = new ArrayList();
    4
    List list = new ArrayList();
    5
    while (e.hasMoreElements())
    5
    while (e.hasMoreElements())
    6
    String key = (String)e.nextElement();
    6
    String key = (String)e.nextElement();
    7
    list.add(h.get(key));
    7
    list.add(h.get(key));
    Precondition Violations (1)
    Row Violation
    1Clone fragment #1 returns variables istream, list , while Clone fragment #2 returns variables istream, list