0630a9f7e6634bf3e96af3b56d8369092220ec9e
[packetcable.git] / packetcable-driver / src / main / java / org / pcmm / gates / impl / PCMMGateReq.java
1 /**
2  @header@
3  */
4 package org.pcmm.gates.impl;
5
6 import java.util.Arrays;
7
8 import org.pcmm.base.IPCMMBaseObject;
9 import org.pcmm.gates.IAMID;
10 import org.pcmm.gates.IClassifier;
11 import org.pcmm.gates.IGateID;
12 import org.pcmm.gates.IGateSpec;
13 import org.pcmm.gates.IPCMMError;
14 import org.pcmm.gates.IPCMMGate;
15 import org.pcmm.gates.ISubscriberID;
16 import org.pcmm.gates.ITrafficProfile;
17 import org.pcmm.gates.ITransactionID;
18
19 /**
20  * <p>
21  * <Gate-set>=<Decision Header><TransactionID><AMID> <SubscriberID> [<GateI>]
22  * <GateSpec> <Traffic Profile> <classifier>
23  * </p>
24  */
25 public class PCMMGateReq implements IPCMMGate {
26
27     private boolean multicast;
28     private IGateID gateID;
29     private IAMID iamid;
30     private IPCMMError error;
31     private ISubscriberID subscriberID;
32     private ITransactionID transactionID;
33     private IGateSpec gateSpec;
34     private ITrafficProfile trafficProfile;
35     private IClassifier classifier;
36
37     public PCMMGateReq() {
38     }
39
40     public PCMMGateReq(byte[] data) {
41         short len, offset;
42         byte sNum, sType;
43         len = offset = 0;
44         sNum = sType = (byte) 0;
45         while (offset + 5 < data.length) {
46             len = 0;
47             len |= ((short) data[offset]) << 8;
48             len |= ((short) data[offset + 1]) & 0xFF;
49             sNum = data[offset + 2];
50             sType = data[offset + 3];
51             byte[] dataBuffer = Arrays.copyOfRange(data, offset, offset + len);
52             switch (sNum) {
53             case IGateID.SNUM:
54                 setGateID(new GateID(dataBuffer));
55                 break;
56             case IAMID.SNUM:
57                 setAMID(new AMID(dataBuffer));
58                 break;
59             case ISubscriberID.SNUM:
60                 setSubscriberID(new SubscriberID(dataBuffer));
61                 break;
62             case ITransactionID.SNUM:
63                 setTransactionID(new TransactionID(dataBuffer));
64                 break;
65             case IGateSpec.SNUM:
66                 setGateSpec(new GateSpec(dataBuffer));
67                 break;
68             case ITrafficProfile.SNUM:
69                 setTrafficProfile(new BestEffortService(dataBuffer));
70                 break;
71             case IClassifier.SNUM:
72                 setClassifier(new Classifier(dataBuffer));
73                 break;
74             case IPCMMError.SNUM:
75                 error = new PCMMError(dataBuffer);
76                 break;
77             default:
78                 System.out.println("unhandled Object skept : S-NUM=" + sNum
79                                    + "  S-TYPE=" + sType + "  LEN=" + len);
80             }
81             offset += len;
82         }
83     }
84
85     /*
86      * (non-Javadoc)
87      *
88      * @see org.pcmm.gates.IPCMMGate#isMulticast()
89      */
90     @Override
91     public boolean isMulticast() {
92         // TODO Auto-generated method stub
93         return multicast;
94     }
95
96     /*
97      * (non-Javadoc)
98      *
99      * @see org.pcmm.gates.IPCMMGate#setGateID(short)
100      */
101     @Override
102     public void setGateID(IGateID gateid) {
103         this.gateID = gateid;
104
105     }
106
107     /*
108      * (non-Javadoc)
109      *
110      * @see org.pcmm.gates.IPCMMGate#setAMID(org.pcmm.gates.IAMID)
111      */
112     @Override
113     public void setAMID(IAMID iamid) {
114         this.iamid = iamid;
115     }
116
117     /*
118      * (non-Javadoc)
119      *
120      * @see
121      * org.pcmm.gates.IPCMMGate#getSubscriberID(org.pcmm.gates.ISubscriberID)
122      */
123     @Override
124     public void setSubscriberID(ISubscriberID subscriberID) {
125         this.subscriberID = subscriberID;
126     }
127
128     /*
129      * (non-Javadoc)
130      *
131      * @see org.pcmm.gates.IPCMMGate#getGateSpec(org.pcmm.gates.IGateSpec)
132      */
133     @Override
134     public void setGateSpec(IGateSpec gateSpec) {
135         this.gateSpec = gateSpec;
136     }
137
138     /*
139      * (non-Javadoc)
140      *
141      * @see org.pcmm.gates.IPCMMGate#getClassifier(org.pcmm.gates.IClassifier)
142      */
143     @Override
144     public void setClassifier(IClassifier classifier) {
145         this.classifier = classifier;
146     }
147
148     /*
149      * (non-Javadoc)
150      *
151      * @see
152      * org.pcmm.gates.IPCMMGate#getTrafficProfile(org.pcmm.gates.ITrafficProfile
153      * )
154      */
155     @Override
156     public void setTrafficProfile(ITrafficProfile profile) {
157         this.trafficProfile = profile;
158     }
159
160     /*
161      * (non-Javadoc)
162      *
163      * @see org.pcmm.gates.IPCMMGate#getGateID()
164      */
165     @Override
166     public IGateID getGateID() {
167         return gateID;
168     }
169
170     /*
171      * (non-Javadoc)
172      *
173      * @see org.pcmm.gates.IPCMMGate#getAMID()
174      */
175     @Override
176     public IAMID getAMID() {
177         return iamid;
178     }
179
180     /*
181      * (non-Javadoc)
182      *
183      * @see org.pcmm.gates.IPCMMGate#getSubscriberID()
184      */
185     @Override
186     public ISubscriberID getSubscriberID() {
187         return subscriberID;
188     }
189
190     /*
191      * (non-Javadoc)
192      *
193      * @see org.pcmm.gates.IPCMMGate#getGateSpec()
194      */
195     @Override
196     public IGateSpec getGateSpec() {
197         return gateSpec;
198     }
199
200     /*
201      * (non-Javadoc)
202      *
203      * @see org.pcmm.gates.IPCMMGate#getClassifier()
204      */
205     @Override
206     public IClassifier getClassifier() {
207         return classifier;
208     }
209
210     /*
211      * (non-Javadoc)
212      *
213      * @see org.pcmm.gates.IPCMMGate#getTrafficProfile()
214      */
215     @Override
216     public ITrafficProfile getTrafficProfile() {
217         return trafficProfile;
218     }
219
220     @Override
221     public void setTransactionID(ITransactionID transactionID) {
222         this.transactionID = transactionID;
223     }
224
225     @Override
226     public ITransactionID getTransactionID() {
227         return transactionID;
228     }
229
230     public IPCMMError getError() {
231         return error;
232     }
233
234     public void setError(IPCMMError error) {
235         this.error = error;
236     }
237
238     @Override
239     public byte[] getData() {
240         byte[] array = new byte[0];
241         if (getTransactionID() != null) {
242             array = fill(array, getTransactionID());
243         }
244         if (getGateID() != null) {
245             array = fill(array, getGateID());
246         }
247         if (getAMID() != null) {
248             array = fill(array, getAMID());
249
250         }
251         if (getSubscriberID() != null) {
252             array = fill(array, getSubscriberID());
253         }
254         if (getGateSpec() != null) {
255             array = fill(array, getGateSpec());
256         }
257         if (getTrafficProfile() != null) {
258             array = fill(array, getTrafficProfile());
259         }
260         if (getClassifier() != null) {
261             array = fill(array, getClassifier());
262         }
263         return array;
264     }
265
266     private byte[] fill(byte[] array, IPCMMBaseObject obj) {
267         byte[] a = obj.getAsBinaryArray();
268         int offset = array.length;
269         array = Arrays.copyOf(array, offset + a.length);
270         System.arraycopy(a, 0, array, offset, a.length);
271         return array;
272     }
273 }