⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 devicehandler.java

📁 Network Administration Visualized 网络管理可视化源码
💻 JAVA
字号:
package no.ntnu.nav.getDeviceData.dataplugins.Device;import java.util.*;import java.sql.*;import no.ntnu.nav.logger.*;import no.ntnu.nav.Database.*;import no.ntnu.nav.event.*;import no.ntnu.nav.getDeviceData.Netbox;import no.ntnu.nav.getDeviceData.dataplugins.*;/** * DataHandler plugin for getDeviceData; provides an interface for storing * phyiscal device data. * * @see DeviceContainer */public class DeviceHandler implements DataHandler {	//private static Map devidMap;	//private static Map devserialMap;	/**	 * Fetch initial data from device and module tables.	 */	public synchronized void init(Map persistentStorage, Map changedDeviceids) {		if (persistentStorage.containsKey("initDone")) return;		persistentStorage.put("initDone", null);		/*		ResultSet rs;		long dumpBeginTime,dumpUsedTime;		Log.setDefaultSubsystem("DeviceHandler");		try {					// device			dumpBeginTime = System.currentTimeMillis();			devidMap = Collections.synchronizedMap(new HashMap());			devserialMap = Collections.synchronizedMap(new HashMap());			//rs = Database.query("SELECT deviceid,serial,hw_ver,sw_ver FROM device");			rs = Database.query("SELECT deviceid,serial,hw_ver,fw_ver,sw_ver FROM device");			while (rs.next()) {								String deviceid = rs.getString("deviceid");				String serial = rs.getString("serial");				String hw_ver = rs.getString("hw_ver");				String fw_ver = rs.getString("fw_ver");				String sw_ver = rs.getString("sw_ver");				Device d = new Device(serial, hw_ver, fw_ver, sw_ver);				d.setDeviceid(deviceid);				devidMap.put(deviceid, d);				if (serial != null) devserialMap.put(serial, d);			}			dumpUsedTime = System.currentTimeMillis() - dumpBeginTime;			Log.d("INIT", "Dumped device in " + dumpUsedTime + " ms");		} catch (SQLException e) {			Log.e("INIT", "SQLException: " + e.getMessage());		}		*/	}	// Check if the serial is in use in the DB, and if it is, update devidMap	private Device getDevice(ResultSet rs) throws SQLException {		String deviceid = rs.getString("deviceid");		String serial = rs.getString("serial");		String hw_ver = rs.getString("hw_ver");		String fw_ver = rs.getString("fw_ver");		String sw_ver = rs.getString("sw_ver");		Device d = new Device(serial, hw_ver, fw_ver, sw_ver);		d.setDeviceid(deviceid);		return d;	}	private void checkActive(ResultSet rs) throws SQLException {		if (!rs.getBoolean("active")) {			Database.update("UPDATE device SET active=true WHERE deviceid="+rs.getString("deviceid"));		}	}	/**	 * Return a DataContainer object used to return data to this	 * DataHandler.	 */	public DataContainer dataContainerFactory() {		return new DeviceContainer(this);	}		/**	 * Store the data in the DataContainer in the database.	 */	public void handleData(Netbox nb, DataContainer dc, Map changedDeviceids) {		if (!(dc instanceof DeviceContainer)) return;		DeviceContainer devc = (DeviceContainer)dc;		if (!devc.isCommited()) return;		Log.setDefaultSubsystem("DeviceHandler");		//new RuntimeException().printStackTrace(System.err);		try {			Set seenSerials = new HashSet();			for (Iterator devices = devc.getDevices(); devices.hasNext();) {				Device dev = (Device)devices.next();				// Check if this is a new device				Device olddev = null;				String serial = dev.getSerial();				String deviceid = dev.getDeviceidS();				try {					String fields = "deviceid,serial,hw_ver,fw_ver,sw_ver,active FROM device WHERE";					ResultSet rs = Database.query("SELECT " + fields + " serial='"+serial+"'");					if (rs.next()) {						checkActive(rs);						if (seenSerials.add(serial)) {							olddev = getDevice(rs);						} else {							Log.e("DUPLICATE_SERIAL", "Duplicate serial found for device " + dev + ", ignoring serial");							if (dev.getDeviceid() == rs.getInt("deviceid")) {								deviceid = null;							}							dev.setSerial(null);						}						//System.err.println("Found old device: " + olddev);					} else {						//System.err.println("Not found: " + "SELECT " + fields + " serial='"+serial+"'");					}					if (olddev == null && deviceid != null && !"0".equals(deviceid)) {						rs = Database.query("SELECT " + fields + " deviceid='"+deviceid+"'");						if (rs.next()) {							checkActive(rs);							olddev = getDevice(rs);							//System.err.println("Found old device2: " + olddev);						}					}				} catch (SQLException e) {					Log.e("HANDLE", "Cannot fetch old device: " + serial + ", " + deviceid);					e.printStackTrace(System.err);				}				if (olddev == null) {					// FIXME: Skal gi feilmelding her hvis vi ikke oppretter devicer automatisk!					// Først oppretter vi device					String[] ins = {						"deviceid", "",						"serial", dev.getSerial(),						"hw_ver", dev.getHwVer(),						"fw_ver", dev.getFwVer(),						"sw_ver", dev.getSwVer(),						"auto", "t",						"active", "t",					};					deviceid = Database.insert("device", ins, null);					//dev.setDeviceid(deviceid);					//changedDeviceids.put(deviceid, new Integer(DataHandler.DEVICE_ADDED));					Log.i("NEW_DEVICE", "New device("+deviceid+") with serial: " + dev.getSerial() + ", " + dev);				} else {					deviceid = olddev.getDeviceidS();					if (!dev.equalsDevice(olddev)) {						// Device needs to be updated						Log.i("UPDATE_DEVICE", "Update deviceid="+deviceid+" serial="+dev.getSerial()+" hw_ver="+dev.getHwVer()+" fw_ver="+dev.getFwVer()+" sw_ver="+dev.getSwVer());						//System.err.println("new: " + dev);						//System.err.println("old: " + olddev);												String[] set = {							"serial", dev.getSerial(),							"hw_ver", dev.getHwVer(),							"fw_ver", dev.getFwVer(),							"sw_ver", dev.getSwVer()						};						String[] where = {							"deviceid", deviceid,						};						Database.update("device", set, where);						//changedDeviceids.put(deviceid, new Integer(DataHandler.DEVICE_UPDATED));						// Now we need to send events if hw_ver, fw_ver or sw_ver changed						if (!equalsNN(dev.getHwVer(), olddev.getHwVer())) {							Map varMap = new HashMap();							varMap.put("alerttype", "deviceHwVerChanged");							varMap.put("deviceid", deviceid);							varMap.put("old_hwver", String.valueOf(olddev.getHwVer()));							varMap.put("new_hwver", String.valueOf(dev.getHwVer()));							EventQ.createAndPostEvent("getDeviceData", "eventEngine", nb.getDeviceid(), nb.getNetboxid(), 0, "info", Event.STATE_NONE, 0, 0, varMap);						}												if (!equalsNN(dev.getFwVer(), olddev.getFwVer())) {							Map varMap = new HashMap();							varMap.put("alerttype", "deviceFwVerChanged");							varMap.put("deviceid", deviceid);							varMap.put("old_fwver", String.valueOf(olddev.getFwVer()));							varMap.put("new_fwver", String.valueOf(dev.getFwVer()));							EventQ.createAndPostEvent("getDeviceData", "eventEngine", nb.getDeviceid(), nb.getNetboxid(), 0, "info", Event.STATE_NONE, 0, 0, varMap);						}												if (!equalsNN(dev.getSwVer(), olddev.getSwVer())) {							Map varMap = new HashMap();							varMap.put("alerttype", "deviceSwVerChanged");							varMap.put("deviceid", deviceid);							varMap.put("old_swver", String.valueOf(olddev.getSwVer()));							varMap.put("new_swver", String.valueOf(dev.getSwVer()));							EventQ.createAndPostEvent("getDeviceData", "eventEngine", nb.getDeviceid(), nb.getNetboxid(), 0, "info", Event.STATE_NONE, 0, 0, varMap);						}					}					//dev.setEqual(olddev);				}				dev.setDeviceid(deviceid);				//devidMap.put(deviceid, dev);				//if (serial != null) devserialMap.put(serial, dev);			}		} catch (SQLException e) {			Log.e("HANDLE", "SQLException: " + e.getMessage());			e.printStackTrace(System.err);		}	}	private boolean equals(String s1, String s2) {		if (s1 == null && s2 == null) return true;		if (s1 != null) return s1.equals(s2);		return s2.equals(s1);	}	// Returns true if either string is null	private boolean equalsNN(String s1, String s2) {		if (s1 == null || s2 == null) return true;		if (s1 != null) return s1.equals(s2);		return s2.equals(s1);	}}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -