public class ExtractEmails { /* * connect to database * execute SQL statement to retrieve domain IDs Could use database and SQL to do the heavy processing but that's easy SELECT date(now()), substr(addr,locate('@',addr)+1) as maildomain, count (*) as mailcount FROM mailing GROUP BY maildomain ORDER BY mailcount DESC use simple SQL statement (do not truncate) restriction: simple SQL statement being used select * from mailing retrieve domain IDs and put them into list (or file) go through list and strip the local part of email out, save the domain (base on @) assume that the e-mails have already went through a validation/verification process before being put into the table */ //initialize variables/constants //database objects/variables Connection con = null; Statement qry = null; Statement insert = null; ResultSet rs = null; String database = "test_database"; String username = "******"; String password = "******"; final String table1 = "mailing"; final String table1C1 = "ADDR"; final String table2 = "addresscount"; //final String fileName = "" //figure out if need to insert by file or by sQL statement String SQLRetrive = "SELECT * FROM " + table1; //String SQLLoad = "LOAD DATA INFILE " + fileName + " INTO TABLE " + table2; //figure out if need to insert by file or SQL statement //data variables List <String> emailList = new ArrayList<String>(); SimpleDateFormat dateFormat = new SimpleDateFormat("MM-dd-YYYY"); Calendar calDate = Calendar.getInstance(); String date = dateFormat.format(calDate); //Connect to database String strRS = null; Hashtable <String, Integer> domainCount = new Hashtable<String, Integer>(); int i = 0; int dupEmailCount = 0; //execute SQL statement, SELECT * FROM mailing //rs = ... while (rs.next()) { strRS = rs.getString(table1C1); strRS = strRS.substring(strRS.lastIndexOf("@")+1); emailList.add(strRS); } //sort list in alphabetical order (duplicates included) Collections.sort(emailList); for (i=0; i < emailList.length(); i++) { //create out of bounds exception emailList.get(-1) if (emailList.get(i) == emailList.get(i-1)) { dupEmailCount++; } else { //insert domain email, dupEmailCount into hashtable domainCount.put(emailList.get(i), dupEmailCount); dupEmailCount = 0; } } //count the duplicates //use TreeSet as a solution? }
public void update(MultihopMsg msg) { String info; SurgeMsg SMsg = new SurgeMsg(msg.dataGet(), msg.offset_data(0)); if (SMsg.get_type() == 0) { if (SMsg.get_parentaddr() == MainFrame.BEACON_BASE_ADDRESS) { isDirectChild = true; } else { isDirectChild = false; } // Update message count and rate // Only update if this message is coming to the root from // a direct child int saddr = msg.get_sourceaddr(); NodeInfo ni = (NodeInfo) SensorAnalyzer.proprietaryNodeInfo.get(new Integer(saddr)); if (ni != null) { if (ni.isDirectChild) { msgCount++; int new_seq_no = (int) SMsg.get_seq_no() & 0x7fffff; if (stats_start_sequence_number == 0) stats_start_sequence_number = new_seq_no; if (seq_no == 0) seq_no = new_seq_no - 1; int diff = new_seq_no - seq_no; if (diff > 1000) diff = 1; active = true; long curtime = System.currentTimeMillis(); packetTimes[packetTimesPointer++] = curtime - lastTime; packetTimesPointer %= SensorAnalyzer.HISTORY_LENGTH; packetSkips[packetSkipsPointer++] = diff; packetSkipsPointer %= SensorAnalyzer.HISTORY_LENGTH; msgRate = calcMsgRate(0); msgYield = calcMsgYield(0); SimpleDateFormat formatter = new SimpleDateFormat("MM/dd/yyyy hh:mm:ss a"); String log = ""; log += nodeNumber + "#"; log += msgCount + "#"; log += formatter.format(new Date()) + "#"; log += curtime + "#"; log += (curtime - lastTime) + "#"; log += SMsg.get_parentaddr() + "#"; parent_count[SMsg.get_parentaddr()]++; log += msgRate + "#"; seq_no = new_seq_no; batt = (int) SMsg.get_seq_no() >> 23 & 0x1ff; log += seq_no + "#"; log += hopcount + "#"; level_sum += hopcount; log += SMsg.get_reading() + "#"; log += batt + "#"; for (int i = 0; i < 5; i++) { log += neighbors[i].id + "#"; log += neighbors[i].hopcount + "#"; log += neighbors[i].link_quality / 255.0 + "#"; } log += SMsg.get_temp() + "#"; log += SMsg.get_light() + "#"; log += SMsg.get_accelx() + "#"; log += SMsg.get_accely() + "#"; log += SMsg.get_magx() + "#"; log += SMsg.get_magy() + "#"; System.out.println(log); double batt_val = (double) batt; batt_val = 1.25 * 1023.0 / batt_val; batt_val *= 256.0 / 4.0; // System.out.println(batt_val); // Store the sensor readings. yield_series.insertNewReading(total_yield++, new Integer((int) (yield() * 256.0))); time_series.insertNewReading(seq_no, new Long(curtime)); batt_series.insertNewReading(seq_no, new Integer((int) batt_val)); temp_series.insertNewReading(seq_no, new Integer(SMsg.get_temp())); light_series.insertNewReading(seq_no, new Integer(SMsg.get_light())); accelx_series.insertNewReading(seq_no, new Integer(SMsg.get_accelx())); accely_series.insertNewReading(seq_no, new Integer(SMsg.get_accely())); magx_series.insertNewReading(seq_no, new Integer(SMsg.get_magx())); magy_series.insertNewReading(seq_no, new Integer(SMsg.get_magy())); link_quality = neighbors[0].link_quality / 255; // update the edge quality as well... MainClass.locationAnalyzer.setQualityForEdge( nodeNumber.intValue(), SMsg.get_parentaddr(), (int) (link_quality * 255.0)); lastTime = curtime; } } if (self_calc != false) info = msgCount + " msgs "; else info = ""; this.value = SMsg.get_reading(); if (panel != null) { panel.YieldLabel.setText(String.valueOf(percent_yield()) + " %"); panel.SensorLabel.setText(String.valueOf(value)); panel.ParentLabel.setText(String.valueOf(SMsg.get_parentaddr())); panel.SequenceLabel.setText(String.valueOf(seq_no)); panel.CountLabel.setText(String.valueOf(msgCount)); panel.DepthLabel.setText(String.valueOf(hopcount)); panel.repaint(); } this.infoString = info; } }