Intelligent, Custom and Highly Automated Cross Platform Database and Application Migration

Progress 4GL to Java Conversion

Ispirer MnMTK is the application migration tool, which supports Progress 4GL to Java conversion of any complexity.


Progress 4GL to Java Migration Overview

We develop Ispirer MnMTK using a customer-oriented approach so as we do our best in order to satisfy all your project requirements. Our technical experts have great experience in application migrations and always find innovative solutions even to complicated problems.

This demo shows how Ispirer MnMTK 2015 can convert Progress 4GL to Java.



Why Ispirer MnMTK?

Ispirer MnMTK automates the entire migration process of your current OpenEdge application to Java. Moreover, choosing our conversion tool - Ispirer MnMTK - you eliminate most of associated risks and considerably reduce internal efforts. All these benefits are available at very reasonable and competitive costs, which makes Ispirer MnMTK even more attractive converter for this project type.

Our conversion technology ensures:

  • Readable and Maintainable Code
    Generating readable and maintainable code with manual conversion quality
  • Code Transformation and Refactoring
    Transforming code implementing best practices of Oracle PL/SQL rather than emulating old technology on the new platform
  • Latest Technologies
  • Pure Java Code
    No any Ispirer libraries or IP used after conversion

Ispirer MnMTK is effective to convert large scripts containing thousands or millions lines of code:

  • Automatically Resolves Dependencies
    Can extract information from dependent files; database etc. to automatically resolve dependencies and conflicts
  • Configurations
    Can read information from various configuration and projects files (SQLWays configuration files, .xml files)
  • Fast and Powerful Customization
    Abstract layers, re-usable conversion templates, internal conversion language and tools allow fast customization and complex code transformations.

  • Assessment Process

    The assessment of your migration project could definitely help to weigh up efforts and the approximate cost of your migration. In order to facilitate the process, you're welcome to fill in our:

    For ISV companies Ispirer offers comprehensive Engagement model to convert applications with millions lines of code.


Live Presentation

Ispirer Migration Solution

Progress 4GL to Java Conversion

Request

Request a Quote

Ispirer Migration Solution

Progress 4GL to Java Conversion

Service Toolkit

Conversion Features

Progress databases to Oracle/PostgreSQL/MySQL databases


Migrate Progress databases to Oracle/PostgreSQL/MySQL databases

  • Converts Progress tables/view/sequences to Oracle/PostgreSQL/MySQL tables/views/sequences

For example,

Progress 4GL:

  1.  
  2. ADD TABLE "TB_DATATYPES"
  3. AREA "Schema Area"
  4. DUMP-NAME "tb_datat"
  5.  
  6. ADD FIELD "c1" OF "TB_DATATYPES" AS CHARACTER
  7. FORMAT "X(8)"
  8. INITIAL ""
  9. POSITION 2
  10. SQL-WIDTH 16
  11. ORDER 10
  12.  
  13. ADD FIELD "c4" OF "TB_DATATYPES" AS INTEGER
  14. FORMAT "->,>>>,>>9"
  15. INITIAL "0"
  16. POSITION 5
  17. SQL-WIDTH 4
  18. ORDER 20
  19.  
  20. ADD FIELD "c5" OF "TB_DATATYPES" AS logical
  21. FORMAT "yes/no"
  22. INITIAL "no"
  23. POSITION 6
  24. SQL-WIDTH 1
  25. ORDER 30
  26.  
  27. .
  28. PSC
  29. cpstream=ISO8859-1
  30. .
  31. 0000000976
  32.  

Oracle:

  1.  
  2. CREATE TABLE TB_DATATYPES
  3. (
  4. c1 CHAR(16),
  5. c4 NUMBER(10,0),
  6. c5 NUMBER(1,0)
  7. );
  8.  
  • Converts Progress 4GL triggers to Oracle/PostgreSQL/MySQL triggers/procedures or Java classes:

Progress 4GL:

  1.  
  2. TRIGGER PROCEDURE FOR DELETE OF gsinvhd.
  3. FIND distribution
  4. WHERE distribution.company = gsinvhd.company NO-LOCK NO-ERROR.
  5.  

Oracle:

  1.  
  2. CREATE OR REPLACE TRIGGER SWT_Delete_gsinvhd
  3. AFTER DELETE
  4. ON gsinvhd
  5. DECLARE
  6. v_distribution_company VARCHAR2(255);
  7. BEGIN
  8. SELECT company INTO v_distribution_company FROM distribution
  9. WHERE (distribution.company = gsinvhd.company) AND ROWNUM <=1;
  10. EXCEPTION
  11. WHEN NO_DATA_FOUND THEN
  12. NULL;
  13. END;
  14.  

For more details, please refer to the articles:

Progress to Oracle Database Migration

Progress to PostgreSQL Database Migration

Progress to MySQL Database Migration


Convert Progress 4GL code to Java code


Convert Progress 4GL code to Java code

  • Converts Progress 4GL Procedure Files (*.p) to Java packages with classes

Progress 4GL:

  1.  
  2. DEF VAR w_ail AS CHAR NO-UNDO.
  3. PROCEDURE act_InitValues.
  4. IF w_ ail EQ "ac21" OR w_ ail EQ "first"
  5. THEN DO:
  6. ASSIGN w_ ail ="first".
  7. END.
  8. ELSE IF w_ ail EQ "ac50"
  9. THEN DO:
  10. ASSIGN w_ ail ="second".
  11. END.
  12. ELSE DO:
  13. ASSIGN w_ ail ="third"
  14. END.
  15. END PROCEDURE.
  16.  

Java:

  1.  
  2. package ispirer;
  3. public class If_statement
  4. {
  5. private String w_ ail = null;
  6. public void act_InitValues()
  7. {
  8. if((w_ ail.equals("ac21")) ||( w_ ail.equals("first")))
  9. {
  10. w_ ail = "first";
  11. }
  12. else if(w_ ail.equals("ac50"))
  13. {
  14. w_ ail = "second";
  15. }
  16. else
  17. {
  18. w_ ail = "third";
  19. }
  20. }
  21. }
  22.  
  • Converts Progress 4GL Include Files (*.i) to Java packages with classes

Progress 4GL:

  1.  
  2. FUNCTION days-in-MONTH RETURNS INTEGER
  3. ( INPUT pmonth AS INTEGER, INPUT pyear AS INTEGER ) :
  4.  
  5. DEFINE VARIABLE idays AS INTEGER
  6. EXTENT 12 INITIAL [31,28,31,30,31,30,31,31,30,31,30,31].
  7.  
  8. IF pmonth NE 2 THEN DO:
  9. RETURN idays[pmonth].
  10. END.
  11. ELSE DO:
  12. IF INTEGER(pyear / 4) * 4 = pyear THEN DO:
  13. IF INTEGER(pyear / 100) * 100 = pyear THEN DO:
  14. IF INTEGER(pyear / 400) * 400 = pyear
  15. THEN RETURN 29.
  16. ELSE RETURN 28.
  17. END.
  18. ELSE RETURN 29.
  19. END.
  20. ELSE RETURN 28.
  21. END.
  22. END FUNCTION.
  23.  

Java:

  1.  
  2. package ispirer;
  3. public class Daymonth
  4. {
  5. public final int Days_in_month(int pmonth, int pyear)
  6. {
  7. int[] idays = new int[] {31,28,31,30,31,30,31,31,30,31,30,31};
  8. if (pmonth != 2)
  9. {
  10. return idays[pmonth - 1];
  11. }
  12. else
  13. {
  14. if ((int)(pyear / 4) * 4 == pyear)
  15. {
  16. if ((int)(pyear / 100) * 100 == pyear)
  17. {
  18. if ((int)(pyear / 400) * 400 == pyear)
  19. {
  20. return 29;
  21. }
  22. else
  23. {
  24. return 28;
  25. }
  26. }
  27. else
  28. {
  29. return 29;
  30. }
  31. }
  32. else
  33. {
  34. return 28;
  35. }
  36. }
  37. }
  38. }
  39.  
  • Converts Progress 4GL Window Procedure (*.w) Files to Java UI Frameworks (Swing, SWT, Java FX, etc.)
  • Converts Progress ABL reports to Java Jasper reports or Crystal reports
  • Converts Data Access to Java Database Access Frameworks (JDBC, Hibernate, Torque, etc.)

Ispirer MnMTK can automatically generate Hibernate, Torque XML maps according to database tables.

For example, Progress 4GL:

  1.  
  2. DEF BUFFER buf_LogOverview FOR test_table.
  3. PROCEDURE test_proc.
  4. FIND FIRST buf_LogOverview NO-LOCK
  5. WHERE buf_LogOverview.col1 EQ "1"
  6. AND buf_LogOverview.col2 EQ 2
  7. NO-ERROR.
  8. END PROCEDURE.
  9.  
  10. CREATE TABLE test_table
  11. (
  12. col1 VARCHAR,
  13. col2 INTEGER PRIMARY KEY
  14.  
  15. );
  16.  

Java:

  1.  
  2. package buffer_migration;
  3. import java.util.List;
  4. import org.hibernate.Session;
  5. import org.hibernate.Transaction;
  6. import util.HibernateUtil;
  7. public class Find_stmt
  8. {
  9. private Test_table buf_LogOverview;
  10. public void test_proc()
  11. {
  12. Session session = HibernateUtil.getSessionFactory().openSession();
  13. session.beginTransaction();
  14. buf_LogOverview =((List< Test_table >)
  15. session.createQuery("from Test_table WHERE col1 = '1' "+
  16. " AND col2 = 2").list()).get(0);
  17. session.getTransaction().commit();
  18. }
  19. }
  20.  
  21. import java.util.Set;
  22. import java.util.HashSet;
  23.  
  24. public class Test_table
  25. {
  26. private String col1;
  27. private Integer col2;
  28. private Set test_tables = new HashSet();
  29.  
  30. public Test_table()
  31. {
  32. }
  33.  
  34. public void setCol1(String col1)
  35. {
  36. this.col1=col1;
  37. }
  38.  
  39. public String getCol1()
  40. {
  41. return col1;
  42. }
  43.  
  44. public void setCol2(Integer col2)
  45. {
  46. this.col2=col2;
  47. }
  48.  
  49. public Integer getCol2()
  50. {
  51. return col2;
  52. }
  53. }
  54.  
  55. <?xml version="1.0" encoding="UTF-8"?>
  56. <!DOCTYPE hibernate-mapping
  57. PUBLIC "-//Hibernate/Hibernate Mapping DTD//EN"
  58. "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
  59. <hibernate-mapping>
  60. <class name="Test_table" table="test_table">
  61. <property column="col1" name="col1" type="java.lang.String"/>
  62. <id column="col2" name="col2" type="java.lang.Integer"/>
  63. </class>
  64. </hibernate-mapping>
  65.  

You are welcome to contact us for more information.

 
Testimonials
December 3, 2012Epicor Software Corporation, United States
Progress 4GL to C#.Net Migration

"Epicor has engaged with the Ispirer team to create and refine prototype techniques for migrating certain parts of the Epicor Progress ABL code to well...

...

Case Studies
May 26, 2014COBOL to .NET Conversion, United States

Our client was a major player in market-driven innovation and science. For more than two hundred years, it has been presenting world-class science and engineering to the global marketplace...

...

September 12, 2014Delphi to C# .NET, United States

Our client was a U.S.-based health insurance company providing care services since six decades through its extensive network of hospitals and other institutions.

...

Feedback

Testing for demo version has been successfully done, migrated all tables and data with total 2Gb.

Read more
Industry Events