Creating Custom Records using com.microfocus.cobol.lang.CustomRecord Interface

Custom records are useful for passing group items to existing COBOL programs. You use then in conjunction with the .cobcall mechanism.

The CustomRecord interface is:

package com.microfocus.cobol.lang;
public interface CustomRecord 
{
		public Object[] getParameters();
		public void setParameters(Object[] parms); 
} 

The data item customerDetails can be defined as follows:

01 customerDetails.
					03 customerName 				pic x(30).
					03 customerAddress		pic x(30).
					03 customerRef 					pic 9(6).

A Java implementation could be:

import com.microfocus.cobol.lang.*;
import java.text.*;
public class RecordData implements
       com.microfocus.cobol.lang.CustomRecord
{ 
    private String customerName;
    private StringBuffer customerAddress;
    private int customerRef;
    RecordData(String name, String address, int ref) 
    { 
        customerName = name;
        customerAddress = new StringBuffer(address);
        customerRef = ref; 
    } 
    public String getCustomerName() 
    { 
        return this.customerName; 
    } 
    public String getCustomerAddress() 
    { 
        return this.customerAddress.toString(); 
    }
    public int getCustomerRef() 
    { 
        return this.customerRef; 
    } 
    public Object[] getParameters() 
    { 
        String strCustomerRef =
                Integer.toString(this.customerRef); 
        while(strCustomerRef.length() < 6) 
        { 
            strCustomerRef = "0"+strCustomerRef; 
        }
        customerAddress.setLength(30); 
            /* must ensure length is right! */
        customerAddress.ensureCapacity(30); 
        return new ParameterList()
            .add(new Pointer(this.customerName,30))
            .add(this.customerAddress)
            .add(strCustomerRef.getBytes()) 
            .getArguments(); 
    } 
    public void setParameters(Object[] parms) 
    { 
        Pointer ptr = (Pointer)parms[0];
        this.customerName = ptr.toString(); 
        this.customerAddress = (StringBuffer)parms[1]; 
        byte[] byteCustomerRef = (byte[])parms[2];
        this.customerRef = 
            Integer.parseInt(new String(byteCustomerRef)); 
    }
    public String toString() 
    { 
        return "Customer Name :
        "+this.customerName+"\n"+ "Customer Address :
        "+this.customerAddress+"\n"+ 
        "Customer Ref : "+this.customerRef; 
    }
}

and

package com.microfocus.cobol.lang;
public interface CustomRecord
{
   public Object[] getParameters();
   public void setParameters(Object[] parms);
}