haul 2002/06/10 01:34:45 Modified: src/java/org/apache/cocoon/acting/modular DatabaseAction.java Log: <action dev="CH" type="update"> DatabaseActions, changed behaviour: Tables are used in order of appearance in tableset, before they were used in order of appearance in tables section. </action> Revision Changes Path 1.6 +29 -28 xml-cocoon2/src/java/org/apache/cocoon/acting/modular/DatabaseAction.java Index: DatabaseAction.java =================================================================== RCS file: /home/cvs/xml-cocoon2/src/java/org/apache/cocoon/acting/modular/DatabaseAction.java,v retrieving revision 1.5 retrieving revision 1.6 diff -u -r1.5 -r1.6 --- DatabaseAction.java 7 Jun 2002 08:50:15 -0000 1.5 +++ DatabaseAction.java 10 Jun 2002 08:34:45 -0000 1.6 @@ -141,7 +141,7 @@ * </table> * * @author <a href="mailto:[EMAIL PROTECTED]">Christian Haul</a> - * @version CVS $Id: DatabaseAction.java,v 1.5 2002/06/07 08:50:15 haul Exp $ + * @version CVS $Id: DatabaseAction.java,v 1.6 2002/06/10 08:34:45 haul Exp $ * @see org.apache.cocoon.components.modules.input * @see org.apache.cocoon.components.modules.output * @see org.apache.cocoon.components.modules.database @@ -666,8 +666,29 @@ Map modeTypes = null; - if (tablesetname != null) { + if (tablesetname == null) { + modeTypes = new HashMap(6); + modeTypes.put( MODE_AUTOINCR, "autoincr" ); + modeTypes.put( MODE_OTHERS, "others" ); + modeTypes.put( MODE_OUTPUT, outputMode ); + for (int i=0; i<tables.length; i++) { + rows += processTable( tables[i], conn, objectModel, results, modeTypes ); + } + } else { // new set based behaviour + + // create index for table names / aliases + Map tableIndex = new HashMap(2*tables.length); + String tableName = null; + Object result = null; + for (int i=0; i<tables.length; i++) { + tableName = tables[i].getAttribute("alias",tables[i].getAttribute("name","")); + result = tableIndex.put(tableName,new Integer(i)); + if (result != null) { + throw new IOException("Duplicate table entry for "+tableName+" at positions "+result+" and "+i); + } + } + Configuration[] tablesets = conf.getChildren("table-set"); String setname = null; boolean found = false; @@ -687,39 +708,19 @@ Configuration[] set = tablesets[j].getChildren("table"); - // construct a Map that contains the names of the tables - // contained in the requested tableset - set_tables = new HashMap(set.length); for (int i=0; i<set.length; i++) { // look for alternative mode types modeTypes = new HashMap(6); modeTypes.put( MODE_AUTOINCR, set[i].getAttribute( "autoincr-mode", "autoincr" ) ); modeTypes.put( MODE_OTHERS, set[i].getAttribute( "others-mode", "others" ) ); modeTypes.put( MODE_OUTPUT, outputMode ); - set_tables.put(set[i].getAttribute("name",""), modeTypes); - } - } else { - modeTypes = new HashMap(6); - modeTypes.put( MODE_AUTOINCR, "autoincr" ); - modeTypes.put( MODE_OTHERS, "others" ); - modeTypes.put( MODE_OUTPUT, outputMode ); - }; - - for (int i=0; i<tables.length; i++) { - if (set_tables == null || - set_tables.containsKey( tables[i].getAttribute( "name" ) ) || - ( tables[i].getAttribute( "alias", null ) != null && set_tables.containsKey( tables[i].getAttribute( "alias" ) ) ) - ) { - if (tablesetname != null) { - if (tables[i].getAttribute("alias", null) != null && set_tables.containsKey(tables[i].getAttribute("alias"))){ - modeTypes = (Map) set_tables.get(tables[i].getAttribute("alias")); - set_tables.remove(tables[i].getAttribute("alias")); - } else { - modeTypes = (Map) set_tables.get(tables[i].getAttribute("name")); - set_tables.remove(tables[i].getAttribute("name")); - } + tableName=set[i].getAttribute("name",""); + if (tableIndex.containsKey(tableName)) { + j = ((Integer)tableIndex.get(tableName)).intValue(); + rows += processTable( tables[j], conn, objectModel, results, modeTypes ); + } else { + throw new IOException(" given table " + tableName + " does not exists in a description file."); } - rows += processTable( tables[i], conn, objectModel, results, modeTypes ); } }
---------------------------------------------------------------------- In case of troubles, e-mail: [EMAIL PROTECTED] To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]