package org.apache.haox.asn1;
import org.apache.haox.asn1.EncodingOption;
import org.apache.haox.asn1.type.*;
/**
* Ref. X.690-0207(http://www.itu.int/ITU-T/studygroups/com17/languages/X.690-0207.pdf),
* Annex A, A.1 ASN.1 description of the record structure
*/
public class PersonnelRecord extends TaggingSet {
private static int NAME = 0;
private static int TITLE = 1;
private static int NUMBER = 2;
private static int DATEOFHIRE= 3;
private static int NAMEOFSPOUSE = 4;
private static int CHILDREN = 5;
static Asn1FieldInfo[] fieldInfos = new Asn1FieldInfo[] {
new Asn1FieldInfo(NAME, -1, Name.class),
new Asn1FieldInfo(TITLE, 0, Asn1VisibleString.class),
new Asn1FieldInfo(NUMBER, -1, EmployeeNumber.class),
new Asn1FieldInfo(DATEOFHIRE, 1, Date.class),
new Asn1FieldInfo(NAMEOFSPOUSE, 2, Name.class),
new Asn1FieldInfo(CHILDREN, 3, Children.class, true)
};
public PersonnelRecord() {
super(0, fieldInfos, true);
setEncodingOption(EncodingOption.IMPLICIT);
}
public void setName(Name name) {
setFieldAs(NAME, name);
}
public Name getName() {
return getFieldAs(NAME, Name.class);
}
public void setTitle(String title) {
setFieldAs(TITLE, new Asn1VisibleString(title));
}
public String getTitle() {
return getFieldAsString(TITLE);
}
public void setEmployeeNumber(EmployeeNumber employeeNumber) {
setFieldAs(NUMBER, employeeNumber);
}
public EmployeeNumber getEmployeeNumber() {
return getFieldAs(NUMBER, EmployeeNumber.class);
}
public void setDateOfHire(Date dateOfHire) {
setFieldAs(DATEOFHIRE, dateOfHire);
}
public Date getDateOfHire() {
return getFieldAs(DATEOFHIRE, Date.class);
}
public void setNameOfSpouse(Name spouse) {
setFieldAs(NAMEOFSPOUSE, spouse);
}
public Name getNameOfSpouse() {
return getFieldAs(NAMEOFSPOUSE, Name.class);
}
public void setChildren(Children children) {
setFieldAs(CHILDREN, children);
}
public Children getChildren() {
return getFieldAs(CHILDREN, Children.class);
}
public static class Children extends Asn1SequenceOf<ChildInformation> {
public Children(ChildInformation ... children) {
super();
for (ChildInformation child : children) {
addElement(child);
}
}
public Children() {
super();
}
}
public static class ChildInformation extends Asn1SetType {
private static int NAME = 0;
private static int DATEOFBIRTH = 1;
static Asn1FieldInfo[] tags = new Asn1FieldInfo[] {
new Asn1FieldInfo(NAME, -1, Name.class),
new Asn1FieldInfo(DATEOFBIRTH, 0, Date.class)
};
public ChildInformation() {
super(tags);
}
public void setName(Name name) {
setFieldAs(NAME, name);
}
public Name getName() {
return getFieldAs(NAME, Name.class);
}
public void setDateOfBirth(Date date) {
setFieldAs(DATEOFBIRTH, date);
}
public Date getDateOfBirth() {
return getFieldAs(DATEOFBIRTH, Date.class);
}
}
public static class Name extends TaggingSequence {
private static int GIVENNAME = 0;
private static int INITIAL = 1;
private static int FAMILYNAME = 2;
static Asn1FieldInfo[] tags = new Asn1FieldInfo[] {
new Asn1FieldInfo(GIVENNAME, -1, Asn1VisibleString.class),
new Asn1FieldInfo(INITIAL, -1, Asn1VisibleString.class),
new Asn1FieldInfo(FAMILYNAME, -1, Asn1VisibleString.class)
};
public Name() {
super(1, tags, true);
setEncodingOption(EncodingOption.IMPLICIT);
}
public Name(String givenName, String initial, String familyName) {
this();
setGivenName(givenName);
setInitial(initial);
setFamilyName(familyName);
}
public void setGivenName(String givenName) {
setFieldAs(GIVENNAME, new Asn1VisibleString(givenName));
}
public String getGivenName() {
return getFieldAsString(GIVENNAME);
}
public void setInitial(String initial) {
setFieldAs(INITIAL, new Asn1VisibleString(initial));
}
public String getInitial() {
return getFieldAsString(INITIAL);
}
public void setFamilyName(String familyName) {
setFieldAs(FAMILYNAME, new Asn1VisibleString(familyName));
}
public String getFamilyName() {
return getFieldAsString(FAMILYNAME);
}
}
public static class EmployeeNumber extends Asn1Tagging<Asn1Integer> {
public EmployeeNumber(Integer value) {
super(2, new Asn1Integer(value), true);
setEncodingOption(EncodingOption.IMPLICIT);
}
public EmployeeNumber() {
this(null);
}
}
public static class Date extends Asn1Tagging<Asn1VisibleString> {
public Date(String value) {
super(3, new Asn1VisibleString(value), true);
setEncodingOption(EncodingOption.IMPLICIT);
}
public Date() {
this(null);
}
}
}