KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > org > snmp4j > agent > agentx > master > AgentXPendingSet


1 /*_############################################################################
2   _##
3   _## SNMP4J-AgentX - AgentXPendingSet.java
4   _##
5   _## Copyright (C) 2005-2007 Frank Fock (SNMP4J.org)
6   _##
7   _## This program is free software; you can redistribute it and/or modify
8   _## it under the terms of the GNU General Public License version 2 as
9   _## published by the Free Software Foundation.
10   _##
11   _## This program is distributed in the hope that it will be useful,
12   _## but WITHOUT ANY WARRANTY; without even the implied warranty of
13   _## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14   _## GNU General Public License for more details.
15   _##
16   _## You should have received a copy of the GNU General Public License
17   _## along with this program; if not, write to the Free Software
18   _## Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
19   _## MA 02110-1301 USA
20   _##
21   _##########################################################################*/

22
23 package org.snmp4j.agent.agentx.master;
24
25 import org.snmp4j.agent.agentx.AgentXPDU;
26 import java.util.LinkedList JavaDoc;
27 import org.snmp4j.smi.VariableBinding;
28 import org.snmp4j.agent.request.SnmpSubRequest;
29 import java.util.List JavaDoc;
30 import org.snmp4j.agent.request.SnmpRequest;
31 import org.snmp4j.agent.request.Request;
32 import org.snmp4j.agent.agentx.AgentXTestSetPDU;
33 import org.snmp4j.agent.agentx.AgentXCommitSetPDU;
34 import org.snmp4j.agent.agentx.AgentXCleanupSetPDU;
35 import org.snmp4j.agent.agentx.AgentXUndoSetPDU;
36 import org.snmp4j.agent.request.SubRequest;
37 import org.snmp4j.agent.request.SubRequestIterator;
38 import org.snmp4j.agent.request.SubRequestIteratorSupport;
39
40 public class AgentXPendingSet extends AbstractAgentXPending {
41
42   private AgentXMasterSession session;
43   private List JavaDoc vbs = new LinkedList JavaDoc();
44   private AgentXPDU requestPDU;
45
46   public AgentXPendingSet(AgentXRegEntry regEntry, SnmpRequest request) {
47     super(regEntry, request);
48     this.session = regEntry.getSession();
49   }
50
51   public synchronized void add(SnmpSubRequest reference, VariableBinding vb) {
52     vbs.add(new AgentXSetVB(vb, reference));
53     // invalidate pdu
54
requestPDU = null;
55   }
56
57   public AgentXPDU getAgentXPDU() {
58     if (requestPDU == null) {
59       createRequestPDU();
60     }
61     return requestPDU;
62   }
63
64   private void createRequestPDU() {
65     AgentXPDU reqPDU = null;
66     SnmpRequest request = (SnmpRequest)
67         ((AgentXSetVB)vbs.get(0)).getReferenceSubRequest().getRequest();
68     switch (request.getPhase()) {
69       case Request.PHASE_INIT:
70       case Request.PHASE_1PC:
71       case Request.PHASE_2PC_PREPARE: {
72         reqPDU =
73             new AgentXTestSetPDU(request.getContext(), (VariableBinding[])
74                                  vbs.toArray(new VariableBinding[vbs.size()]));
75         break;
76       }
77       case Request.PHASE_2PC_COMMIT: {
78         reqPDU = new AgentXCommitSetPDU();
79         break;
80       }
81       case Request.PHASE_2PC_CLEANUP: {
82         reqPDU = new AgentXCleanupSetPDU();
83         break;
84       }
85       default: {
86         reqPDU = new AgentXUndoSetPDU();
87         break;
88       }
89     }
90     reqPDU.setSessionID(session.getSessionID());
91     reqPDU.setTransactionID(request.getTransactionID());
92     this.requestPDU = reqPDU;
93   }
94
95   public AgentXMasterSession getSession() {
96     return session;
97   }
98
99   public SubRequestIterator getReferences() {
100     return new SetSubRequestIterator();
101   }
102
103   public String JavaDoc toString() {
104     return getClass().getName()+"["+super.toStringMembers()+",vbs="+vbs+"]";
105   }
106
107   public class AgentXSetVB extends VariableBinding {
108     private SnmpSubRequest referenceSubRequest;
109
110     public AgentXSetVB(VariableBinding vb, SnmpSubRequest reference) {
111       super(vb.getOid(), vb.getVariable());
112       this.referenceSubRequest = reference;
113     }
114
115     public SnmpSubRequest getReferenceSubRequest() {
116       return referenceSubRequest;
117     }
118   }
119
120   class SetSubRequestIterator extends SubRequestIteratorSupport {
121     protected SetSubRequestIterator() {
122       super(AgentXPendingSet.this.vbs.iterator());
123     }
124
125     protected SubRequest mapToSubRequest(Object JavaDoc element) {
126       return ((AgentXSetVB)element).getReferenceSubRequest();
127     }
128   }
129
130
131 }
132
Popular Tags