snmpalarmprocessor.java

来自「关于 RFID 读写器的相关内容」· Java 代码 · 共 589 行 · 第 1/2 页

JAVA
589
字号
/*
 * Copyright (C) 2007 ETH Zurich
 *
 * This file is part of Fosstrak (www.fosstrak.org).
 *
 * Fosstrak is free software; you can redistribute it and/or
 * modify it under the terms of the GNU Lesser General Public
 * License version 2.1, as published by the Free Software Foundation.
 *
 * Fosstrak is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
 * Lesser General Public License for more details.
 *
 * You should have received a copy of the GNU Lesser General Public
 * License along with Fosstrak; if not, write to the Free
 * Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
 * Boston, MA  02110-1301  USA
 */

package org.fosstrak.reader.rprm.core.mgmt.agent.snmp;

import org.fosstrak.reader.rprm.core.mgmt.agent.snmp.mib.EpcglobalReaderMib;
import org.fosstrak.reader.rprm.core.mgmt.agent.snmp.table.SnmpTable;
import org.fosstrak.reader.rprm.core.mgmt.agent.snmp.table.SnmpTable.TableTypeEnum;
import org.fosstrak.reader.rprm.core.mgmt.alarm.Alarm;
import org.fosstrak.reader.rprm.core.mgmt.alarm.AlarmProcessor;
import org.fosstrak.reader.rprm.core.mgmt.alarm.FailedEraseAlarm;
import org.fosstrak.reader.rprm.core.mgmt.alarm.FailedKillAlarm;
import org.fosstrak.reader.rprm.core.mgmt.alarm.FailedLockAlarm;
import org.fosstrak.reader.rprm.core.mgmt.alarm.FailedMemReadAlarm;
import org.fosstrak.reader.rprm.core.mgmt.alarm.FailedWriteAlarm;
import org.fosstrak.reader.rprm.core.mgmt.alarm.FreeMemoryAlarm;
import org.fosstrak.reader.rprm.core.mgmt.alarm.IOPortOperStatusAlarm;
import org.fosstrak.reader.rprm.core.mgmt.alarm.NotificationChannelOperStatusAlarm;
import org.fosstrak.reader.rprm.core.mgmt.alarm.ReadPointOperStatusAlarm;
import org.fosstrak.reader.rprm.core.mgmt.alarm.ReaderDeviceOperStatusAlarm;
import org.fosstrak.reader.rprm.core.mgmt.alarm.SourceOperStatusAlarm;
import org.fosstrak.reader.rprm.core.mgmt.util.SnmpUtil;
import org.snmp4j.agent.NotificationOriginator;
import org.snmp4j.agent.mo.MOScalar;
import org.snmp4j.smi.Gauge32;
import org.snmp4j.smi.Integer32;
import org.snmp4j.smi.OID;
import org.snmp4j.smi.OctetString;
import org.snmp4j.smi.VariableBinding;

/**
 * This class can be used to process <code>Alarm</code> objects using SNMP.
 */
public class SnmpAlarmProcessor implements AlarmProcessor {
	
	/**
	 * The SNMP agent.
	 */
	private SnmpAgent snmpAgent;
	
	/**
	 * The <code>EpcglobalReaderMib</code>.
	 */
	private EpcglobalReaderMib epcglobalReaderMib;
	
	/**
	 * Constructor.
	 * 
	 * @param snmpAgent
	 *            The SNMP agent
	 */
	public SnmpAlarmProcessor(SnmpAgent snmpAgent) {
		this.snmpAgent = snmpAgent;
		epcglobalReaderMib = EpcglobalReaderMib.getInstance();
	}
	
	/**
	 * Processes an <code>Alarm</code> object.
	 * 
	 * @param alarm
	 *            The <code>Alarm</code> object
	 */
	public void process(Alarm alarm) {
		NotificationOriginator notifOrig = snmpAgent.getNotificationOriginator();
		
		if (notifOrig != null) {
		
			if (alarm instanceof ReaderDeviceOperStatusAlarm) {
				ReaderDeviceOperStatusAlarm readerDeviceOperStatusAlarm = (ReaderDeviceOperStatusAlarm) alarm;
				MOScalar operStatePrior = SnmpUtil
						.findMOScalar(EpcglobalReaderMib.oidTrapVarEpcgRdrDevOperStatusPrior);
				operStatePrior.setValue(new Integer32(
						readerDeviceOperStatusAlarm.getFromState().toInt()));
				epcglobalReaderMib
						.epcgReaderDeviceOperationState(
								notifOrig,
								new OctetString(),
								new VariableBinding[] {
										new VariableBinding(
												EpcglobalReaderMib.oidTrapVarSysName,
												new OctetString(
														readerDeviceOperStatusAlarm
																.getReaderDeviceName())),
										new VariableBinding(
												EpcglobalReaderMib.oidTrapVarEpcgRdrDevTimeUtc,
												SnmpUtil
														.dateToOctetString(readerDeviceOperStatusAlarm
																.getTimeUTC())),
										new VariableBinding(
												EpcglobalReaderMib.oidTrapVarEpcgRdrDevOperNotifStateLevel,
												new Integer32(
														readerDeviceOperStatusAlarm
																.getAlarmLevel()
																.toInt())),
										new VariableBinding(
												EpcglobalReaderMib.oidTrapVarEpcgRdrDevOperStatusPrior,
												operStatePrior.getValue()),
										new VariableBinding(
												EpcglobalReaderMib.oidTrapVarEpcgRdrDevOperStatus,
												new Integer32(
														readerDeviceOperStatusAlarm
																.getToState()
																.toInt())) });
			} else if (alarm instanceof FreeMemoryAlarm) {
				FreeMemoryAlarm freeMemoryAlarm = (FreeMemoryAlarm) alarm;
				epcglobalReaderMib
						.epcgRdrDevMemoryState(
								notifOrig,
								new OctetString(),
								new VariableBinding[] {
										new VariableBinding(
												EpcglobalReaderMib.oidTrapVarSysName,
												new OctetString(freeMemoryAlarm
														.getReaderDeviceName())),
										new VariableBinding(
												EpcglobalReaderMib.oidTrapVarEpcgRdrDevTimeUtc,
												SnmpUtil
														.dateToOctetString(freeMemoryAlarm
																.getTimeUTC())),
										new VariableBinding(
												EpcglobalReaderMib.oidTrapVarEpcgRdrDevFreeMemoryNotifLevel,
												new Integer32(freeMemoryAlarm
														.getAlarmLevel()
														.toInt())),
										new VariableBinding(
												EpcglobalReaderMib.oidTrapVarEpcgRdrDevFreeMemory,
												new Gauge32(freeMemoryAlarm
														.getFreeMemory())) });
			} else if (alarm instanceof ReadPointOperStatusAlarm) {
				ReadPointOperStatusAlarm readPointOperStatusAlarm = (ReadPointOperStatusAlarm) alarm;
				OID index = ((SnmpTable) SnmpUtil
						.getSnmpTable(TableTypeEnum.EPCG_READ_POINT_TABLE))
						.getTableRowIndexByValue(new OctetString(
								readPointOperStatusAlarm.getReadPointName()),
								EpcglobalReaderMib.idxEpcgReadPointName);
				Integer32 operStatePrior = new Integer32(readPointOperStatusAlarm.getFromState().toInt());
				epcglobalReaderMib
						.epcgReadPointOperationState(
								notifOrig,
								new OctetString(),
								new VariableBinding[] {
										new VariableBinding(
												EpcglobalReaderMib.oidTrapVarSysName,
												new OctetString(
														readPointOperStatusAlarm
																.getReaderDeviceName())),
										new VariableBinding(
												EpcglobalReaderMib.oidTrapVarEpcgRdrDevTimeUtc,
												SnmpUtil
														.dateToOctetString(readPointOperStatusAlarm
																.getTimeUTC())),
										new VariableBinding(
												new OID(
														EpcglobalReaderMib.oidTrapVarEpcgReadPointOperNotifyStateLevel
																+ "." + index),
												new Integer32(
														readPointOperStatusAlarm
																.getAlarmLevel()
																.toInt())),
										new VariableBinding(
												new OID(
														EpcglobalReaderMib.oidTrapVarEpcgReadPointName
																+ "." + index),
												new OctetString(
														readPointOperStatusAlarm
																.getReadPointName())),
										new VariableBinding(
												new OID(EpcglobalReaderMib.oidTrapVarEpcgReadPointPriorOperStatus + "." + index),
												operStatePrior),
										new VariableBinding(
												new OID(
														EpcglobalReaderMib.oidTrapVarEpcgReadPointOperStatus
																+ "." + index),
												new Integer32(
														readPointOperStatusAlarm
																.getToState()
																.toInt())) });
			} else if (alarm instanceof FailedMemReadAlarm) {
				FailedMemReadAlarm failedMemReadAlarm = (FailedMemReadAlarm) alarm;
				OID index = ((SnmpTable) SnmpUtil
						.getSnmpTable(TableTypeEnum.EPCG_READ_POINT_TABLE))
						.getTableRowIndexByValue(new OctetString(
								failedMemReadAlarm.getReadPointName()),
								EpcglobalReaderMib.idxEpcgReadPointName);
				epcglobalReaderMib
						.epcgReaderAntennaReadFailure(
								notifOrig,
								new OctetString(),
								new VariableBinding[] {
										new VariableBinding(
												EpcglobalReaderMib.oidTrapVarSysName,
												new OctetString(
														failedMemReadAlarm
																.getReaderDeviceName())),
										new VariableBinding(
												EpcglobalReaderMib.oidTrapVarEpcgRdrDevTimeUtc,
												SnmpUtil
														.dateToOctetString(failedMemReadAlarm
																.getTimeUTC())),
										new VariableBinding(
												new OID(
														EpcglobalReaderMib.oidTrapVarEpcgAntRdPntReadFailureNotifLevel
																+ "." + index),
												new Integer32(
														failedMemReadAlarm
																.getAlarmLevel()
																.toInt())),
										new VariableBinding(
												new OID(
														EpcglobalReaderMib.oidTrapVarEpcgReadPointName
																+ "." + index),
												new OctetString(
														failedMemReadAlarm
																.getReadPointName())),
										new VariableBinding(
												new OID(
														EpcglobalReaderMib.oidTrapVarEpcgAntRdPntMemoryReadFailures
																+ "." + index),
												new Gauge32(
														failedMemReadAlarm
																.getFailedMemReadCount())),
										new VariableBinding(
												new OID(
														EpcglobalReaderMib.oidTrapVarEpcgAntRdPntNoiseLevel
																+ "." + index),
												new Integer32(
														failedMemReadAlarm
																.getNoiseLevel())) });
			} else if (alarm instanceof FailedWriteAlarm) {
				FailedWriteAlarm failedWriteAlarm = (FailedWriteAlarm) alarm;
				OID index = ((SnmpTable) SnmpUtil
						.getSnmpTable(TableTypeEnum.EPCG_READ_POINT_TABLE))
						.getTableRowIndexByValue(new OctetString(
								failedWriteAlarm.getReadPointName()),
								EpcglobalReaderMib.idxEpcgReadPointName);
				epcglobalReaderMib
						.epcgReaderAntennaWriteFailure(
								notifOrig,
								new OctetString(),
								new VariableBinding[] {
										new VariableBinding(
												EpcglobalReaderMib.oidTrapVarSysName,
												new OctetString(
														failedWriteAlarm
																.getReaderDeviceName())),
										new VariableBinding(
												EpcglobalReaderMib.oidTrapVarEpcgRdrDevTimeUtc,
												SnmpUtil
														.dateToOctetString(failedWriteAlarm
																.getTimeUTC())),
										new VariableBinding(
												new OID(
														EpcglobalReaderMib.oidTrapVarEpcgAntRdPntWriteFailuresNotifLevel
																+ "." + index),
												new Integer32(failedWriteAlarm
														.getAlarmLevel()
														.toInt())),
										new VariableBinding(
												new OID(
														EpcglobalReaderMib.oidTrapVarEpcgReadPointName
																+ "." + index),
												new OctetString(
														failedWriteAlarm
																.getReadPointName())),
										new VariableBinding(
												new OID(
														EpcglobalReaderMib.oidTrapVarEpcgAntRdPntWriteFailures
																+ "." + index),
												new Gauge32(failedWriteAlarm
														.getFailedWriteCount())),
										new VariableBinding(
												new OID(
														EpcglobalReaderMib.oidTrapVarEpcgAntRdPntNoiseLevel
																+ "." + index),
												new Integer32(failedWriteAlarm
														.getNoiseLevel())) });
			} else if (alarm instanceof FailedKillAlarm) {
				FailedKillAlarm failedKillAlarm = (FailedKillAlarm) alarm;

⌨️ 快捷键说明

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