You are on page 1of 4

EGL - Enterprise Generation Language (Now in EDT Development Tools) by IBM.

EGL (Enterprise Generation Language), originally developed by IBM and now available as the EDT (EGL Development Tools) Open Source project under the EPL (Eclipse Public License) , is a programming technology designed to meet the challenges of modern, multiplatform application development by providing a common language and programming model across languages, frameworks, and runtime platforms. The language borrows concepts familiar to anyone using statically typed languages like Java, COBOL, C, etc. However, it borrows the concept of Stereotype from UML (Universal Modeling Language) that is not typically found in statically typed programming languages. In a nutshell, EGL is a higher-level, universal application development language. EGL is similar in syntax to other common languages so it can be learned by application developers with similar previous programming background. EGL application development abstractions shield programmers from the technical interfaces of systems and middleware allowing them to focus on building business functionality. EGL applications and services are written, tested and debugged at the EGL source level, and once they are satisfactorily functionally tested they can be compiled into COBOL, Java, or JavaScript code to support deployment of business applications that can run in any of the following environments:

Microsoft Windows, Linux, UNIX running JVM, for example in the context of a Java EE servlet container (IBM WebSphere Application Server, Apache Tomcat, GlassFish) IBM System z: CICS Transaction Server, IMS, z/OS Batch, UNIX System Services, WebSphere Application Server, z/VSE, Linux IBM System i: IBM i5/OS, IBM WebSphere Application Server, Apache Tomcat Internet Explorer, Firefox, Safari browsers for Ajax rich web applications

Code examples
Program An EGL Program part is a generatable logic part with one entry point. Each Program part contains a main() function, which represents the logic that runs at program start up. A program can include other functions and can access functions that are outside of the program. The function main() can invoke those other functions. Programs functions are composed of a set of EGL statements, variables, and constants.

Program HelloWorld const GREETING string = "Hello, "; function main() myName string = "John"; sayHello(myName); end function sayHello(name String in) SysLib.writeStdOut(GREETING + name + "!"); end end Record An EGL Record part defines a set of data elements. In this example, a record with the name CustomerRecord is defined with 6 fields. Record CustomerRecord type BasicRecord customerNumber INT; customerName STRING; customerAddr1 STRING; customerAddr2 STRING; customerAddr3 STRING; customerBalance MONEY; end EGL has a specialized type of record called SQLRecord that is used to exchange data with a relational database. record Employee type sqlRecord { tableNames =[["Employee"] ], keyItems =[EMPNO]} EMPNUMBER string{ column = "EMPNO", maxLen = 6}; FIRSTNME string{ sqlVariableLen = yes, maxLen = 12}; MIDINIT string{ isSqlNullable = yes, maxLen = 1}; LASTNAME string{ sqlVariableLen = yes, maxLen = 15}; DEPT string{ column = "WORKDEPT", isSqlNullable = yes, maxLen = 3}; PHONENO string{ isSqlNullable = yes, maxLen = 4}; HIREDATE date{ isSqlNullable = yes}; end

In this example, the record Employee is bound to a table (or view) named Employee.

Service An EGL Service part contains public functions meant to be accessed from other applications or systems. In this example, a service with two functions is defined. package; service EmployeeService function getEmployees() returns(Employee[]) records Employee[0]; // define an empty array of records get records; // retrieve records from the database return (records); // return the records end function addEmployee(emp Employee in) returns (boolean) try add remp; return (true); onException (ex AnyException) return (false); end end end

In EGL, code is organized in packages (like Java (programming language)) The first function, getEmployees, returns an array of records populated from the records in a database. The second function, addEmployee adds a new record to the database and returns a true or false depending on whether the record was added successfully.

RUIHandler The main component of a Rich UI application is a Rich UI handler part. These parts are generated into JavaScript. package com.mycompany.ui; import import import import;; dojo.widgets.DojoGrid; dojo.widgets.DojoGridColumn;

handler EmployeeView type RUIhandler { initialUI = [ grid ], onConstructionFunction = start, cssFile = "main.css}

grid DojoGrid { behaviors = [ ], headerBehaviors = [ ], columns = [ new DojoGridColumn { displayName = "First Name", name = "FIRSTNAME" }, new DojoGridColumn { displayName = "Last Name", name = "LASTNAME" }, new DojoGridColumn { displayName = "Salary", name = "SALARY" } ] }; function start() svc EmployeeService { }; call svc.getEmployees () returning to displayEmployees; end function displayEmployees(retResult Employee [ ] in) = retResult as any [ ]; end end

Commercial Products
EGL programming tools are available as an Eclipse-based commercial product, the Rational Business Developer and also in the EGL edition of Rational Developer for Systems. EGL is a target language for modernization of legacy applications because of the language semantics affinity with procedural languages and legacy 4th generation languages:

a set of conversion tools available within the Rational Business Developer product provide automated the conversion from older and stabilized IBM and Informix 4th generation languages a set of IBM service offerings and complementary products (Rational Migration Extension for Natural, Rational Migration Extension for System) provide the ability to convert from Software AG Natural and from IBM RPG to EGL

Tools for searching large EGL code bases, comparing individual EGL files for changes, and detecting duplicated code are available from Semantic Designs The Katana-EGL Rich UI Framework from ClearBlade delivers a jump start and rapid prototyping for EGL Web 2.0 and Mobile applications.