Ingres OpenROAD Development Sprints

From Ingres Community Wiki

Jump to: navigation, search
Image:ORBarFull.png

                                                                                                                                                                                                     

                                                                                                                                                                                                     

                                                                                                                                                                                                     

                                                                                                                                                                                                     

Ingres OpenROAD
|
the fastest way to build Ingres applications



Listed below are different project suggestions to be considered as candidates for the OpenROAD Development Sprints. This list is not meant to be the only choices, other ideas are certainly welcome. Feel free to add your sprint project idea to the list.

Contents

3GL Projects

Enhancement to the ARRAY .Find and .Sort Methods

Description: .Find Enhancement: Allow the specifying of multiple attributes to be searched for in the array. Frequently I need to find an entry in an array based on multiple attributes. Currently this cannot be done using the .Find method as it only supports 1 attribute & so I have to resort to an IF test inside a FOR or WHILE loop. This gets slow when it is having to be repeated within another FOR loop.

.Sort Enhancement: Allow an array to be sorted on an attribute of an object attribute. In my application company information is stored in a company userclass. This is used to create an attribute in another userclass-based array. In order to Sort the array by Company name, I had to process the array, copying the data into a "dummy" attribute at the array level before performing the sort. Ideally I'd like to be able to do something like:

MyArray.Sort (Source.CompanyName = AS_ASC, Component = AS_ASC); 

Comment:

Submitted By: Martin Bloomfield

Add the -l flag to the DocumentApp and DestroyApp Utilities

Description: In OR 2006 there exists a -l flag to the import and export utilities which operates on a set of files. This project will apply this same functionality to the documentapp and destroyapp utilites. Once this is accomplished the corresponding 4GL project can be implemented

Comment: This should be reasonably straightforward to implement as the code to accomplish this already exists in the import and export utilities.

Submitted By: Colin Hay


Complex Data Types Objects

Description: OpenROAD allows the calling of external API’s that can reside in dynamic link libraries on Windows platforms or shared libraries on Linux/UNIX platforms. Currently the feature is limited to API’s whose input parameters are simple scalar types. The supported data type mapping between OpenROAD and C/C++ are as follows:

  • Varchar <> char *
  • Integer <> int
  • Float <> float, double
  • Char <> char

Some external API’s have one or more input parameters that are complex data types. These represent memory storage blocks that must have a precise layout and can be linked together by references. In the C language these complex data types are structures. This project implements a new OpenROAD system class that allows the instantiation of a complex memory object such as an arbitrary C structure.

Goal: A reasonable goal is to develop a working prototype of this feature. Several Win32 API’s that require complex data types as input parameters called from a OpenROAD 4GL program would be a successful proof of concept.

Submitted By: Joseph Kronk

Trace Window Portlet

Description: The current trace window is a 3GL feature (disaster?) that can not be controlled by the 4GL application. The 3GL part of this project enables the 4GL application to receive trace information from the OpenROAD runtime. The 4GL part of this project is to enhance the IDE to use a portlet to display trace information.

Goal: TBD

Submitted By: Joseph Kronk

HashTable Class

Description: OpenROAD 4GL currently does not have a system class for storage of objects in a keyed memory table, which can be used for later quick lookup operations. Developers are therefore forced to (mis)use a 4GL ArrayObject and its Find() method, which is harder to implement and could have a huge performance impact. Some developers also use the ChoiceList for performance reasons. A HashTable class can be configured using a Setup(size, keytype, isunique) method with a configurable size and key type (e.g. varchar, integer, object) and an option if it's using unique keys. It also offers methods like: Clear(), Enter(key, elementobject), Find(key), FindAll(key), Remove(key).

Goal: A reasonable goal is to develop a working prototype of this feature. It can be used to improve the performance, e.g. within the AsoLib BPM implementation (switching contexts etc.).

Submitted By: Bodo Bergmann

FileObject Class

Description: OpenROAD 4GL currently does not have a system class that offers methods for reading and writing files, which leave the file open, e.g it's currently impossible to read in a large file (e.g. 2GB - which wouldn't fit in a StringObject) line by line. The StringObject methods WriteToFile() and AppendToFile() always open the file, then position within the file, write to it, then close it. A FileObject class will act as a wrapper to the C functions, so it will offer methods like Open(), Close(), Seek(), Read(), Write().

Goal: A reasonable goal is to develop a working prototype of this feature.

Submitted By: Bodo Bergmann

ObjectFactory Class

Description: OpenROAD 4GL currently does not have a system class that allows the creation of arbitrary objects from the varchar name of the class. For simple user or system class objects there is a workaround by getting the value from a DynExpr created from the string: classname+'.Create()'. But this has performance implications and limitations, e.g. it can't be used for creating an ARRAY of the given class. In addition we currently have no way to create an external object without using an external class library, but according to the registered name of the class, e.g. "Word.Application" (like in VB), which will create the object of the latest version installed on the current machine. Also, there should be away to get a list of installed versions before trying to create the instance. The ObjectFactory class would provide the following method CreateObject(classname, isArray, useRegisteredName).

Goal: A reasonable goal is to develop a working prototype of this feature.

Submitted By: Bodo Bergmann

FormatObject Class

Description: OpenROAD currently only allows formatted output of values by the use of an EntryField with FormatString/TextValue. Formatting is often required without the visual component (GUI), e.g. in an OpenROAD Server environment or when writing output to files or the DB. The FormatObject provides the formatting functionality of EntryFields without the GUI dependency and therefore is also a component to reduce the GUI (and therefore MainWin) dependency of OpenROAD Server applications. The class offers the attributes/methods required for formatting, e.g.: Datatype, TextValue, StringValue, FormatString, SetValue(), GetValue(), SetValueFromString(), GetValueAsString(). The implementation will mostly be a copy&paste from the EntryField code.

Goal: TBD

Submitted By: Bodo Bergmann

SysUtils Class

Description: You currently have to use "CALL SYSTEM" statements if you want to copy, rename or delete files on the harddisk. It would be nice to have a system class which implements these operations in an OS independent way with functions like "CopyFile", "RenameFile", "MoveFile" or "DeleteFile". We could also implement these functions into the "SessionObject" class, since a lot of similar functions are already in this class (e.g. "FileExists", "DirectoryExists", etc.). Here is a list of funtions that could added to improve the usability of OpenROAD (may be extended):

  • CopyFile(FileName = varchar(2000), NewFileName = varchar(2000))
  • DeleteFile(FileName = varchar(2000))
  • ExcludeTrailingPathDelimiter(FileName = varchar(2000))
  • FileAge(FileName = varchar(2000))
  • FormatStr(???)
  • GetTempDir()
  • GetTempFileName()
  • IncludeTrailingPathDelimiter()
  • MoveFile(FileName = varchar(2000), NewFileName = varchar(2000))
  • RemoveDir(Directory = varchar(2000))
  • StringReplace(S = varchar(2000), OldPattern = varchar(256), NewPattern = varchar(256))
  • StrPos(S = varchar(2000), SubStr = varchar(256))
  • TouchFile(FileName = varchar(2000))
  • WrapText(S = varchar(2000), BreakStr = varchar(8), BreakChars = varchar(8), MinLength = integer, MaxLength integer)
  • ChangeFileAttribute( FileName = varchar(2000), Attribute = integer)
  Description: Attribute can be:  READONLY, READWRITE, HIDDEN, SYSTEM

Goal: TBD

Submitted By: René Slowenski, Colin Hay

Code-hiding

Description: When components are developed, much of the code is typically scaffolding, performing programmer-validity-checks, reporting, intimate commentary that will all disappear in the production system, and which during development makes the code hard to read because you cannot visually differentiate between programmer-scaffolding and enduser-policing. It usually gets deleted when the component is nearing production (or even code review), which is most unfortunate given the testing information and capability it contains.

We could nominate a non-code character (¶, for example) that the compiler ignores (if at column 1), but uses to determine if that line should be included in the compilation (.CodeHiding=CH_INCLUDE), or ignored (.CodeHiding=CH_HIDE). The character would be at the start of the line (like the # is now) - when editing the code caused it to inset, it could be made to disappear (or to be the programmer’s responsibility to cleanup).

Advantages:

  • developers and maintainers would have the scaffolding available to them at the click of a switch whenever they needed to reopen a production component to work on a bug or enhancement.
  • Information identifying the likely weaknesses and justifications of any section of code would not be lost
  • Developers could identify and eliminate unintended dependencies of the production code on the scaffolding before they deleted it, saved, tested, screamed, and threw themselves off the nearest bridge (a daily occurrence here)

... big savings in development & maintenance costs, quality and sanity.

Goal: A working prototype.

Submitted By: Sean Thrower

FocusBehavior Improvement

Description: FocusBehavior is triggered only by click events, and this creates scenarios where changes are lost, and workarounds are incomplete at best and often complex. Focusbehavior processing is important to events such as FrameDeactivate and Terminate (needed for eclient), as well as Properties and ClickPoint. We could implement a focusbehavior attribute for frameexec, to manage responses to FrameDeactivate and Terminate. Immediate benefit – the properties sheet (and eclient) would stop losing input values ...

Goal: A full working implementation of the frameexec handling may be achievable.

Submitted By: Sean Thrower

Regular Expression Class

Description: Potential New or Modified Exisiting OpenROAD System Class. Support for regular expressions -- there are lots of regexp libraries out there that could be wrapped into a system class or incorporated into string support somehow.

Goal: TBD

Submitted By: Roger Whitcomb

Mathematical/Computational functions

Description: Support for more mathematical and computational functions: trigonometry, hyperbolics, bessel and J functions, etc., etc. New OpenROAD System Class –or- Functions.

Goal: TBD

Submitted By: Roger Whitcomb

Support New Bitmap Formats

Description: Modifications to the BitmapObject System Class to add support for more image and/or vector graphic formats (PNG, SVG come to mind) for images

Goal: TBD

Submitted By: Roger Whitcomb

Compression Class

Description: New OpenROAD System Class to add support for compression (i.e., wrapping ZLIB or something like that) to be able to create/read .ZIP, .TAR, .GZ, .JAR, .WAR, etc. format files. A follow-on from this could be importing/exporting apps from/to .ZIP format (for instance)

Goal: TBD

Submitted By: Roger Whitcomb

FTP Class

Description: An easy way to send and receive files using ftp protocol.

Goal: TBD

Submitted By: Kim Ginnerup

MAIL Class

Description: Provide an easy way to send and receive email.

Goal: TBD

Submitted By: Kim Ginnerup

HTTP Class

Description: An easy way to send and receive files using http protocol.

Goal: TBD

Submitted By: Kim Ginnerup

Localization

Description: In a non English speaking country you cannot use any of the built in popups because you cannot translate them.

Goal: TBD

Submitted By: Kim Ginnerup

DateObject Enhancement

Description: A lot of new features would be great here such as GetISOWeek(), GetYear(), month(), day(), dow(), quarter(). Also GetDateAsString() to return a date in a fixed format string that is not dependent on II_DATE_FORMAT and getXMLString() to return the date in standard xml notation. In general most if not all Ingres Date functions should also be available in the DateObject class

Goal: TBD

Submitted By: Kim Ginnerup

FloatObject Enhancement

Description: Have getString return a float in a string that is not dependent on II_DECIMAL

Goal: TBD

Submitted By: Kim Ginnerup

Object Class Enhancement

Description: In general a toString type of function on the Object class would be a good thing to have, and would make it easier to make a persistence mechanism in OpenROAD

Goal: TBD

Submitted By: Kim Ginnerup

OptionField Button Enhancement

Description: You only have limited control on the visual aspects of an OptionField. I would like to add an attribute that controls the visibility of the OptionField dropdown button. It should be possible to make the button invisible. This way you have an excellent and simple way to show foreignkeys as readonly entryfield style fields. I suggest that we add a new attribute. "Buttonbehavior". The attribute can take the following values:

  • OB_ALLWAYS: (default) this is the same behavior as today
  • OB_FOCUS: The button becomes visible when the OptionField gains focus
  • OB_INVISIBLE: The button is invisible

The attribute should be available from the Property inspector and should be changeable at runtime

Goal: TBD

Submitted By: Kim Ginnerup

OptionField outline Enhancement

Description: You only have limited control on the visual aspects of an OptionField. I would like to enhance the outlineStyle so it works as expected. Today OS_SOLID has no or limited effect on the outline. An OpenROAD OptionField always has a 3D outline. OS SOLID should work the same way as it does for Entryfields. By implementing OS_SOLID for OptionFields we bring that fieldtype in line with EntryFields outline.

Goal: TBD

Submitted By: Kim Ginnerup

OptionField Button image

Description: You only have limited control on the visual aspects of an OptionField. The OptionField drop down button image is fixed size. I would like to add an attribute that controls the image of the button. This will make it possible to give the OptionField a more modern look and adds the ability to change the size of the image. Combining this with the OptionField outline Enhancement will make it possible to make more modern and Vista like OptionFields

Goal: TBD

Submitted By: Kim Ginnerup


4GL Projects

Add the -l option to the DocumentApp and DestroyApp

Description: In OpenROAD 2006 there exists a -l option to the import and export feature which operates on a set of files. This project will apply this same functionality to the documentapp and destroyapp utilites.

Comment: This should be reasonably straightforward to implement as the code to accomplish this already exists in Workbench for the import and export feature.

Submitted By: Colin Hay


OpenROAD IDE Resizing

Description: OpenROAD 2006 Workbench is currently a fixed size window. This project implements resizing logic in the IDE to allow the top level frame to be resizable. Portlets contained by the top level frame will react proportionally to the resize action

Goal: TBD

Submitted By: Joseph Kronk


Find Component and Find Text

Description: Add a find component function to the IDE that will search across all applications in that database. Also, add a find text string function to find any text in any component for the currently connected database.

Comment: (Michael Singman-Aste) A prototype has already been written. It both searches for a component name across applications AND will find specified text across any component in the database. The problem with just using "like" is that text is broken up at the end of rows in ii_srcobj_encoded. The prototype concatenates the rows for a given entity and then performs the search.

Goal: TBD

Submitted By: Michael Singman-Aste for Adrian Williamson

Personal tools
Developing With