View Javadoc

1   package net.sf.snmpadaptor4j.object;
2   
3   import java.io.Serializable;
4   import java.util.Collections;
5   import java.util.HashMap;
6   import java.util.Map;
7   import org.apache.log4j.Logger;
8   
9   /**
10   * Object representing a specific or generic SNMP trap.
11   * @author <a href="http://fr.linkedin.com/in/jpminetti/">Jean-Philippe MINETTI</a>
12   */
13  public abstract class SnmpTrap
14  		implements Serializable {
15  
16  	/**
17  	 * Serial number.
18  	 */
19  	private static final long serialVersionUID = -2950288105650647983L;
20  
21  	/**
22  	 * Elapsed time in <b>100th of second</b> since the application launch.
23  	 */
24  	private final long timeStamp;
25  
26  	/**
27  	 * OID indexing the source of the trap.
28  	 */
29  	private final SnmpOid source;
30  
31  	/**
32  	 * Map of "interesting" information.
33  	 */
34  	private final Map<SnmpOid, SnmpTrapData> dataMap;
35  
36  	/**
37  	 * Creates and returns an object representing a specific SNMP trap.
38  	 * @param timeStamp Elapsed time in <b>100th of second</b> since the application launch.
39  	 * @param source OID indexing the source of the trap (must not be <code>NULL</code>).
40  	 * @param type Trap type.
41  	 * @param dataMap Map of "interesting" information.
42  	 * @return Object representing a specific SNMP trap.
43  	 */
44  	public static SpecificSnmpTrap newInstance (final long timeStamp, final SnmpOid source, final int type, final Map<SnmpOid, SnmpTrapData> dataMap) {
45  		return new SpecificSnmpTrap(timeStamp, source, type, dataMap);
46  	}
47  
48  	/**
49  	 * Creates and returns an object representing a generic SNMP trap.
50  	 * @param timeStamp Elapsed time in <b>100th of second</b> since the application launch.
51  	 * @param source OID indexing the source of the trap (must not be <code>NULL</code>).
52  	 * @param type Trap type (must not be <code>NULL</code>).
53  	 * @param dataMap Map of "interesting" information.
54  	 * @return Object representing a generic SNMP trap.
55  	 */
56  	public static GenericSnmpTrap newInstance (final long timeStamp, final SnmpOid source, final GenericSnmpTrapType type, final Map<SnmpOid, SnmpTrapData> dataMap) {
57  		return new GenericSnmpTrap(timeStamp, source, type, dataMap);
58  	}
59  
60  	/**
61  	 * Hidden constructor (abstract class).
62  	 * @param timeStamp Elapsed time in <b>100th of second</b> since the application launch.
63  	 * @param source OID indexing the source of the trap.
64  	 * @param dataMap Map of "interesting" information.
65  	 */
66  	protected SnmpTrap (final long timeStamp, final SnmpOid source, final Map<SnmpOid, SnmpTrapData> dataMap) {
67  		super();
68  		this.timeStamp = timeStamp;
69  		this.source = source;
70  		this.dataMap = Collections.unmodifiableMap(dataMap != null ? dataMap : new HashMap<SnmpOid, SnmpTrapData>());
71  	}
72  
73  	/**
74  	 * Returns the elapsed time in <b>100th of second</b> since the application launch.
75  	 * @return Elapsed time in <b>100th of second</b> since the application launch.
76  	 */
77  	public final long getTimeStamp () {
78  		return this.timeStamp;
79  	}
80  
81  	/**
82  	 * Returns the OID indexing the source of the trap.
83  	 * @return OID indexing the source of the trap.
84  	 */
85  	public final SnmpOid getSource () {
86  		return this.source;
87  	}
88  
89  	/**
90  	 * Returns the map of "interesting" information.
91  	 * @return Map of "interesting" information (never <code>NULL</code>).
92  	 */
93  	public final Map<SnmpOid, SnmpTrapData> getDataMap () {
94  		return this.dataMap;
95  	}
96  
97  	/**
98  	 * Traces the content of SNMP trap to logs.
99  	 * @param logger Logger (must not be <code>NULL</code>).
100 	 */
101 	public abstract void traceTo (Logger logger);
102 
103 	/*
104 	 * {@inheritDoc}
105 	 * @see java.lang.Object#hashCode()
106 	 */
107 	@Override
108 	public int hashCode () {
109 		final int prime = 31;
110 		int result = 1;
111 		result = prime * result + this.dataMap.hashCode();
112 		result = prime * result + ((this.source == null) ? 0 : this.source.hashCode());
113 		result = prime * result + (int) (this.timeStamp ^ (this.timeStamp >>> 32));
114 		return result;
115 	}
116 
117 	/*
118 	 * {@inheritDoc}
119 	 * @see java.lang.Object#equals(java.lang.Object)
120 	 */
121 	@Override
122 	public boolean equals (final Object obj) {
123 		boolean result = false;
124 		if ((obj != null) && getClass().equals(obj.getClass())) {
125 			final SnmpTrap other = (SnmpTrap) obj;
126 			result = (this.timeStamp == other.timeStamp);
127 			if (result) {
128 				result = (this.source != null ? this.source.equals(other.source) : (other.source == null));
129 			}
130 			if (result) {
131 				result = this.dataMap.equals(other.dataMap);
132 			}
133 		}
134 		return result;
135 	}
136 
137 }