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