Dave Jarvis' Repositories

git clone https://repo.autonoma.ca/repo/rxm.git

Revised test document to show path examples. Added divergent list class to help determine when consecutive path elements diverge.

Author Dave Jarvis <email>
Date 2015-03-26 21:51:23 GMT-0700
Commit 2ca9058fe968ebea277382edfd254c72b407d92a
Parent b992d7d
README.md
);
- System.out.println( rxm.toXML( getConnection() ) );
+ System.out.println( rxm.toDocument( getConnection() ) );
}
}
rxm.add( "root > people, import person," );
- System.out.println( rxm.toJSON( getConnection() ) );
+ System.out.println( rxm.toDocument( getConnection(), 'json' ) );
}
}
source/java/com/whitemagicsoftware/rxm/DivergentList.java
+package com.whitemagicsoftware.rxm;
+
+import java.util.LinkedList;
+
+import static java.lang.System.out;
+
+/**
+ * Provides the ability to determine the index whereat two lists begin
+ * to differ in content. Both this list and the list to comapre against
+ * must not contain null strings.
+ */
+public class DivergentList extends LinkedList<String> {
+ /**
+ * Answers the index at which the strings within this list differ from
+ * the strings in the given list.
+ *
+ * @param list The list to compare against.
+ *
+ * @return -1 if the lists have no common strings.
+ */
+ public int diverges( DivergentList list ) {
+ int index = -1;
+
+ if( valid( list ) && valid( this ) ) {
+ while( equals( list, ++index ) );
+ }
+
+ return index;
+ }
+
+ /**
+ * Answers whether the element at the given index is the same in both
+ * lists. This is not null-safe.
+ *
+ * @param list The list to compare against this list.
+ * @return true The lists have the same string at the given index.
+ */
+ private boolean equals( DivergentList list, int index ) {
+ return (index < size()) && (index < list.size()) &&
+ get( index ).equals( list.get( index ) );
+ }
+
+ /**
+ * Answers whether the given element path contains at least one
+ * string.
+ *
+ * @param list The list that must have at least one string.
+ * @return true The list has at least one element.
+ */
+ private boolean valid( DivergentList list ) {
+ return list != null && list.size() > 0;
+ }
+
+ /**
+ * Test the functionality.
+ */
+ public static void main( String args[] ) {
+ DivergentList list1 = new DivergentList();
+ list1.addLast( "name" );
+ list1.addLast( "first" );
+ list1.addLast( "middle" );
+ list1.addLast( "last" );
+ list1.addLast( "maiden" );
+
+ DivergentList list2 = new DivergentList();
+ list2.addLast( "name" );
+ list2.addLast( "middle" );
+ list2.addLast( "last" );
+
+ // Prints 1
+ out.println( list2.diverges( list1 ) );
+
+ list1.clear();
+ list1.addLast( "name" );
+ list1.addLast( "middle" );
+ list1.addLast( "last" );
+
+ list2.clear();
+ list2.addLast( "name" );
+ list2.addLast( "middle" );
+ list2.addLast( "last" );
+ list2.addLast( "maiden" );
+ list2.addLast( "honorific" );
+
+ // Prints 3
+ out.println( list2.diverges( list1 ) );
+
+ list1.clear();
+ list2.clear();
+
+ // Prints -1
+ out.println( list1.diverges( list2 ) );
+
+ list1.add( "name" );
+ list2.add( "address" );
+
+ // Prints 0
+ out.println( list1.diverges( list2 ) );
+
+ list2.addFirst( "name" );
+
+ // Prints 1
+ out.println( list1.diverges( list2 ) );
+ }
+}
+
source/java/com/whitemagicsoftware/rxm/xml/AttributeMapContext.java
* @return Token containing ",XMLATTRIBUTES(" ...
*/
+ @Override
public String getStart() {
String
* @return Token containing ")" or the empty string.
*/
+ @Override
public String getStop() {
- return hasFollowingPayload() ? "" : ")";
+ return hasFollowingPayload() ? "" : super.getStop();
}
source/java/com/whitemagicsoftware/rxm/xml/ColumnMapContext.java
* @return ",XMLELEMENT(" ...*
*/
+ @Override
public String getStart() {
return String.format( ",%s,%s.%s",
startElement( path() ),
getParentTableName(),
getColumnText()
);
}
+ @Override
public String getStop() {
return String.format( "%s%s",
stopElement( path() ),
- super.getStop().toString()
+ super.getStop()
);
}
source/java/com/whitemagicsoftware/rxm/xml/RootContext.java
* @return "SELECT XMLROOT(" ... + ",XMLELEMENT(" ...
*/
+ @Override
public String getStart() {
QueryParser.ElementContext element = getElementContext();
* Closes the XMLELEMENT and XMLROOT.
*/
+ @Override
public String getStop() {
return String.format( ")%s)", getDeclaration() );
source/java/com/whitemagicsoftware/rxm/xml/SelectTree.java
/**
- * This creates a tree capable of generating a SQL/XML SELECT clause.
+ * Helps generate a SQL/XML SELECT clause.
*/
public class SelectTree extends Tree<Context> {
source/java/com/whitemagicsoftware/rxm/xml/TableMapContext.java
* @return ",XMLELEMENT(" ...
*/
+ @Override
public String getStart() {
ParserRuleContext p = getParserRuleContext();
test/people.rxm
.birthday > @born,
.first_name > name/first,
-.middle_name > name/first/middle,
+.middle_name > name/middle,
+.middle_initial1 > name/middle/initial/i1,
+.middle_initial2 > name/middle/initial/i2,
+.middle_initial3 > name/middle/initial/i3,
.last_name > name/last,
.maiden_name > name/last/original/maiden,
+.flag > @flag,
+.gender > gender,
account > account,
account.person_id +> person.id,
Delta 124 lines added, 6 lines removed, 118-line increase