Skip to content

Commit cf8c147

Browse files
committed
Lazy loading for TypeId
1 parent 70deb3a commit cf8c147

1 file changed

Lines changed: 21 additions & 8 deletions

File tree

  • apis/api-area001-v003-mal/src/main/java/org/ccsds/moims/mo/mal

apis/api-area001-v003-mal/src/main/java/org/ccsds/moims/mo/mal/TypeId.java

Lines changed: 21 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -45,22 +45,22 @@ public class TypeId {
4545
/**
4646
* Area number (defined as UShort by the MAL).
4747
*/
48-
private final short areaNumber;
48+
private Short areaNumber = null;
4949

5050
/**
5151
* Area version (defined as UShort by the MAL).
5252
*/
53-
private final short areaVersion;
53+
private short areaVersion;
5454

5555
/**
5656
* Service number (defined as UShort by the MAL).
5757
*/
58-
private final short serviceNumber;
58+
private short serviceNumber;
5959

6060
/**
6161
* Short Form Part number (defined as Short by the MAL).
6262
*/
63-
private final short sfp;
63+
private short sfp;
6464

6565
private Long typeId = null;
6666

@@ -71,10 +71,6 @@ public class TypeId {
7171
*/
7272
public TypeId(final Long typeId) {
7373
this.typeId = typeId;
74-
this.areaNumber = (short) ((typeId >> AREA_BIT_SHIFT) & MASK_16);
75-
this.areaVersion = (short) ((typeId >> VERSION_BIT_SHIFT) & MASK_08);
76-
this.serviceNumber = (short) ((typeId >> SERVICE_BIT_SHIFT) & MASK_16);
77-
this.sfp = (short) (typeId & MASK_24);
7874
}
7975

8076
/**
@@ -108,12 +104,22 @@ public TypeId(final int areaNumber, final int areaVersion,
108104
this((short) areaNumber, (short) areaVersion, (short) serviceNumber, (short) sfp);
109105
}
110106

107+
private void calculateIfNeeded() {
108+
if (areaNumber == null) {
109+
areaNumber = (short) ((typeId >> AREA_BIT_SHIFT) & MASK_16);
110+
areaVersion = (short) ((typeId >> VERSION_BIT_SHIFT) & MASK_08);
111+
serviceNumber = (short) ((typeId >> SERVICE_BIT_SHIFT) & MASK_16);
112+
sfp = (short) (typeId & MASK_24);
113+
}
114+
}
115+
111116
/**
112117
* Returns the area number of the service.
113118
*
114119
* @return The area number of the service.
115120
*/
116121
public int getAreaNumber() {
122+
calculateIfNeeded();
117123
return areaNumber;
118124
}
119125

@@ -123,6 +129,7 @@ public int getAreaNumber() {
123129
* @return The area version of the service.
124130
*/
125131
public int getAreaVersion() {
132+
calculateIfNeeded();
126133
return areaVersion;
127134
}
128135

@@ -132,6 +139,7 @@ public int getAreaVersion() {
132139
* @return The service number of the service.
133140
*/
134141
public int getServiceNumber() {
142+
calculateIfNeeded();
135143
return serviceNumber;
136144
}
137145

@@ -141,6 +149,7 @@ public int getServiceNumber() {
141149
* @return True if this TypeId is from the old MAL, otherwise false.
142150
*/
143151
public boolean isOldMAL() {
152+
calculateIfNeeded();
144153
return (areaNumber == 1 && areaVersion < 3);
145154
}
146155

@@ -150,6 +159,7 @@ public boolean isOldMAL() {
150159
* @return The short form part number.
151160
*/
152161
public int getSFP() {
162+
calculateIfNeeded();
153163
return sfp;
154164
}
155165

@@ -159,6 +169,7 @@ public int getSFP() {
159169
* @return True if it represents a list type.
160170
*/
161171
public boolean isList() {
172+
calculateIfNeeded();
162173
return (sfp <= 0);
163174
}
164175

@@ -190,12 +201,14 @@ public long getTypeId() {
190201
}
191202

192203
public TypeId generateTypeIdPositive() {
204+
calculateIfNeeded();
193205
int newSPF = (sfp > 0) ? sfp : (-1) * sfp;
194206
return new TypeId(areaNumber, areaVersion, serviceNumber, newSPF);
195207
}
196208

197209
@Override
198210
public String toString() {
211+
calculateIfNeeded();
199212
StringBuilder buf = new StringBuilder();
200213
buf.append("(TypeId: ");
201214
buf.append(" areaNumber=").append(areaNumber);

0 commit comments

Comments
 (0)