CCL File Deconstruction

The SDK contains several different resources and methods to read, analyze, and output the contents of a CCL file.

The walkModel method below opens a CCL file and deconstructs it by iterating through each CCL statement and printing information on any affected CCL elements. The method then calls the prettyPrint procedure to print the statements themselves to System.out in CCL plain text.
public void walkModel(String theFile)
{
	XtextResourceSet myResourceSet = new XtextResourceSet();
	URI uri = URI.createFileURI(theFile);
	Resource resource = myResourceSet.getResource(uri, true);
	EcoreUtil.resolveAll(resource);

	Statements root = (Statements)resource.getContents().get(0);
	List <TopStatement> stmnts = root.getStmts();
	for(TopStatement d: stmnts)
	{
		printCclName(d);
	}
	prettyPrint(root);
}

void prettyPrint(EObject theEO)
{
	try
	{
	    ISerializer serializer = getSerializer();
		if(serializer==null)
		{
			System.out.println("Injection bug");
		}
		else
		{
			System.out.println(serializer.serialize(theEO));
		}
	}
	catch(Exception e)
	{
		System.out.println(e.getMessage());
	}
}
Below is a sample CCL file containing several statements.
DECLARE 
	PARAMETER integer the_integer := 1; PARAMETER boolean the_boolean := FALSE;
END;
CREATE SCHEMA NewSchema ( col_0 integer , col_1 integer , col_2 integer , col_3 integer , col_4 integer , col_5 integer , col_6 integer ,
col_7 integer , col_8 integer , col_9 integer );
CREATE SCHEMA NewSchema2 ( AAAAA integer );
CREATE INPUT STREAM NewInputStream SCHEMA NewSchema;
CREATE INPUT WINDOW NewInputWindowWithInlineSchema SCHEMA ( c_key integer , c_1 integer , c_2 long , c_3 string ) PRIMARY KEY ( c_key );
CREATE INPUT WINDOW NewInputWindow SCHEMA NewSchema PRIMARY KEY ( col_0 ) KEEP ALL ROWS;
CREATE OUTPUT WINDOW NewDerivedWindow PRIMARY KEY DEDUCED AS SELECT * FROM NewInputWindow IN1;
CREATE OUTPUT STREAM NewDerivedStream AS SELECT * FROM NewInputStream IN1;
CREATE FLEX NewFlex IN NewInputStream OUT OUTPUT WINDOW NewFlex SCHEMA NewSchema PRIMARY KEY ( col_0 )
BEGIN
	ON NewInputStream {
	};
END;
CREATE OUTPUT SPLITTER NewSplitter AS WHEN 1 THEN NewSplitter_Output SELECT * FROM NewInputWindow;
CREATE INPUT WINDOW JoinInputWindow1 SCHEMA NewSchema PRIMARY KEY ( col_0 ) KEEP ALL ROWS;
CREATE INPUT WINDOW JoinInputWindow2 SCHEMA NewSchema2 PRIMARY KEY ( AAAAA ) KEEP ALL ROWS;
CREATE OUTPUT WINDOW NewJoinWindow PRIMARY KEY ( AAAAA ) AS SELECT * FROM JoinInputWindow1 J1 INNER JOIN JoinInputWindow2 J2 ON J1.col_0 =
J2.AAAAA;
CREATE INPUT STREAM NewInputStream1 SCHEMA NewSchema2;
CREATE INPUT STREAM NewInputStream2 SCHEMA NewSchema2;
CREATE OUTPUT STREAM NewUnionStream AS SELECT * FROM NewInputStream1 U1 UNION SELECT * FROM NewInputStream2 U2;
CREATE OUTPUT ERROR STREAM NewErrorStream ON NewUnionStream;
CREATE OUTPUT STREAM NewDerivedStreamSelective AS SELECT IN1.col_0 , IN1.col_1 , IN1.col_2 , IN1.col_3 , IN1.col_4 , IN1.col_5 , IN1.col_6
, IN1.col_7 , IN1.col_8 , IN1.col_9 FROM NewInputStream IN1;
CREATE OUTPUT STREAM NewDeriveStreamWithPattern AS SELECT * FROM NewInputStream IN1 MATCHING [ 1 SECOND : IN1 ];
CREATE OUTPUT WINDOW NewCommaJoinWindowWithInputs PRIMARY KEY DEDUCED AS SELECT * FROM JoinInputWindow1 input_1 , JoinInputWindow2 input_2;
After calling the walkModel method with the above CCL file as the argument, the information outputted by the printCclName procedure is as follows:
NewSchema kind = Schema
	col_0	integer
	col_1	integer
	col_2	integer
	col_3	integer
	col_4	integer
	col_5	integer
	col_6	integer
	col_7	integer
	col_8	integer
	col_9	integer
NewSchema2 kind = Schema
	AAAAA	integer
NewInputStream kind = InputStream
NewInputWindowWithInlineSchema kind = InputWindow
NewInputWindow kind = InputWindow
NewDerivedWindow kind = Window
NewDerivedStream kind = Stream
NewFlex kind = FlexOperator
NewSplitter kind = Splitter
JoinInputWindow1 kind = InputWindow
JoinInputWindow2 kind = InputWindow
NewJoinWindow kind = Window
NewInputStream1 kind = InputStream
NewInputStream2 kind = InputStream
NewUnionStream kind = Stream
NewErrorStream kind = ErrorStream
NewDerivedStreamSelective kind = Stream
NewDeriveStreamWithPattern kind = Stream
NewCommaJoinWindowWithInputs kind = Window
NewDerivedWindowWithWhere kind = Window