Hello Folks,

here are my ideas. At first, I never had the idea to contribute to a casetool.


0. I started seeing the unsufficient WWW concepts for the design of CGI scripts 
(bad performance, bad persistence concepts and a programming language not 
designed for team software projects). A little bit better is PHP/FI, however, 
another language without objects.

So I designed a apache-corba interface, the Corba Commander, called coco. At this
time I read about Mico, bought a new computer, tried to buy software 
(it is very hard to spend more than 100$ for Linux + Mico + Staroffice :-))

So I decided to make a study to link corba to apache, having in mind, that it 
should be possible to exchange the whole data without shutting down the website,
with a staging area etc. All I needed has been found on the SUSE 5.2 Linux CD + 
the Mico CD.

1. I wrote an apache module, 

	mod_coco.c 

derived from the example coming with the server. The httpd.conf file maps everything
in /coco to the corba interfaceS (an arbitrary number can be given in the conf file)   

2. This module calls some c++/c mixture located in 

	coco.cc 

where the apache server is a client to corba. The example has been derived from 
the micoc basic account* examples. Look there, it is a little thing.
The c++ compiler complained about some lines of c code with the simple naming 
convention like

alloc.h : typedef struct pool pool

fixed by renaming the typename

alloc.h:  typedef struct pool poolt

See alloc.h in this directory, which should replace ~apache/src/alloc.h. 

3. The Makefile.apache contains the changes for the apache (I use 1.2.5) I hope,
it will work with 1.3, too. 

4. The webpage.idl file is a very raw interface for the apache-corba interaction

interface WebPage {

	unsigned long getContentType(out any type); // At the moment only text/html
  
	unsigned long setContent(in any content, in long length); 
	// push works somehow, try it!
  	
	unsigned long getContent(in string args, out any content); 
	// like a cgi call, you pass the param string as it is. 
	// Not even the basic http special char replacements done at the moment 

  	string getName(); 
	// internal: tells the name of the object

	void getTag(in string tagName, out string tagContent); 
	// container: the website is a container, you can read out the 
	// named containees this way


	string getRelation(in string toWhom);
 	void setRelation(in string toWhom, in string name);
	// get and set for a relation, see below
};

5. What the hell makes me believe it could be interesting for freeCase ????

In my current major project we use a case tool by aonix (software through pictures)
which is quite slow and uncomfortable. But it seems to be the best one to work in a team.
So I draw the following conclusion:

Everything I talk about is managing containment relation ships. 

a. A package contains classes.

b. A class contains an interface and an implementation or in a different view
attributes, methods etc.

c. A method contains an interface, the args and the return value, the code body etc.
d. The body in a subtile way contains relations to other objects.

Same idea for diagrams
a. The interclass relations are which are modeled inheritance diagrams.
b. The subtile relations within the bodies are modeled by interaction diagrams.

So the diagram are brackets, that keep together all those things. 
In UML I also can draw this, so somehow geometric relations (the view) come into
the game. Thus, the basic design pattern is to manage the appropriate containers and relations!

Thus we have the following view: 
a. the SW designer generates UML diagrams or edits class tables. 
b. The diagrams are mapped to container relations amongs packages, classes objects and 
code fragments.
c. The code is automatically generated mapping the relationships to idl, 
c++, java, smalltalk etc.

6. The specific example
a. start the modified apache server
b. start both servers in the coco dir with start
c. view the whole stuff in a browser ( I use the free Linux Netscape)
d. create some objects in each server, notice the process ID indicating the server
e. A helper map class has been created by genclass
f. The String class in libg++ is used to do the hard work
 
7. So I offer my piece of work. 
a. I would proceed to generate a minimal example (generating a complex 
class from the basetypes) without any practical use.
b. I would make the corba interface stable, doing the crash tests etc...
c. I would introduce a concept for persistent objects, probably with a PostGres db 
(or anyone knowing a better free and STABLE OODB?)
d. support the container classes needed for the UML diagrams if anyone defines the idl 
interface to the java (applet?) viewer.
e. I would offer a support for the basic java viewer, however, I do not much experience
with java corba.

8. RFC
If someone has a better idea, we can replace the repository by any peace of 
free software.  Unfortunately, all Java - database connections, I have seen are
very poor (slow and unstable), so corba is unavoidable. There is a destributed
successor of postgres announced as Mariposa, which can fulfill this task much better. 
As I (anyone else?) have not seen any comparable free db, I would decide for postgres.

9. The holy war
All sw mentioned (apache, mico, postgres, g++) are free available for unix and NT.
I only will make tests on my pentium/linux System.

10. Things to do

a. We should put the pieces together
b. produce some simple code examples
c. invite other to participate, especially for reengineering, given code
