Uploaded image for project: 'Grouper'
  1. Grouper
  2. GRP-3852

add a helper method for syncing data to a SQL table

    XMLWordPrintable

Details

    • Improvement
    • Resolution: Fixed
    • Minor
    • 2.6.8
    • None
    • None
    • None

    Description

      Sync data in list of object[] to a SQL table

        /**
         * sync data from a list of object arrays to a SQL table
         * @param theDebugMap optional debug map
         * @param debugMapPrefix prefix for main entries.  note nested entries will be additive
         * @param connectionName DB conenction name for database
         * @param tableName table name (could be qualified by schema)
         * @param columnNames columns of table
         * @param columnNamesPrimaryKey which columns are the primary key
         * @param data list of object arrays must be in same order as columnNames
         */
        public static void syncDataToSqlTable(Map<String, Object> theDebugMap, String debugMapPrefix, 
            String connectionName, String tableName, List<String> columnNames, List<String> columnNamesPrimaryKey, List<Object[]> data) {
       

      Note before 2.6.8 you can make a GSH function

       

      import edu.internet2.middleware.grouperClient.jdbc.tableSync.*;
      import edu.internet2.middleware.grouperClient.util.GrouperClientUtils;
       
       
        /**
         * sync data from a list of object arrays to a SQL table
         * @param theDebugMap optional debug map
         * @param debugMapPrefix prefix for main entries.  note nested entries will be additive
         * @param connectionName DB conenction name for database
         * @param tableName table name (could be qualified by schema)
         * @param columnNames columns of table
         * @param columnNamesPrimaryKey which columns are the primary key
         * @param data list of object arrays must be in same order as columnNames
         */
        public static void syncDataToSqlTable(Map<String, Object> theDebugMap, String debugMapPrefix, 
            String connectionName, String tableName, List<String> columnNames, List<String> columnNamesPrimaryKey, List<Object[]> data) {
          
          if (theDebugMap == null) {
            theDebugMap = new LinkedHashMap<String, Object>();
          }
          debugMapPrefix = GrouperClientUtils.defaultString(debugMapPrefix);
          String columnsCommaSeparated = GrouperClientUtils.join(columnNames.iterator(), ",");
          // setup the table sync
          GcTableSync gcTableSync = new GcTableSync();
          gcTableSync.setGcTableSyncConfiguration(new GcTableSyncConfiguration());
          gcTableSync.setGcTableSyncOutput(new GcTableSyncOutput());    // setup the data from the database
          GcTableSyncTableBean gcTableSyncTableBeanSql = new GcTableSyncTableBean(gcTableSync);
          gcTableSyncTableBeanSql.configureMetadata(connectionName, tableName);
          gcTableSync.setDataBeanTo(gcTableSyncTableBeanSql);    GcTableSyncTableMetadata gcTableSyncTableMetadata = gcTableSyncTableBeanSql.getTableMetadata();
          gcTableSyncTableMetadata.assignColumns(columnsCommaSeparated);
          gcTableSyncTableMetadata.assignPrimaryKeyColumns(GrouperClientUtils.join(columnNamesPrimaryKey.iterator(), ","));    String sql = "select " + gcTableSyncTableMetadata.columnListAll() + " from " + gcTableSyncTableMetadata.getTableName();
          long nowNanos = System.nanoTime();
          
          List<Object[]> sqlResults = new GcDbAccess().connectionName(connectionName).sql(sql).selectList(Object[].class);    theDebugMap.put(debugMapPrefix+"dbRows", GrouperClientUtils.length(sqlResults));
          theDebugMap.put(debugMapPrefix+"sqlSelectMillis", (System.nanoTime() - nowNanos)/1000000);    GcTableSyncTableData gcTableSyncTableDataSql = new GcTableSyncTableData();
          gcTableSyncTableDataSql.init(gcTableSyncTableBeanSql, gcTableSyncTableMetadata.lookupColumns(columnsCommaSeparated), sqlResults);
          gcTableSyncTableDataSql.indexData();    gcTableSyncTableBeanSql.setDataInitialQuery(gcTableSyncTableDataSql);
          gcTableSyncTableBeanSql.setGcTableSync(gcTableSync);    // setup the data from the WS
          GcTableSyncTableBean gcTableSyncTableBeanWs = new GcTableSyncTableBean();
          gcTableSync.setDataBeanFrom(gcTableSyncTableBeanWs);
          gcTableSyncTableBeanWs.setTableMetadata(gcTableSyncTableBeanSql.getTableMetadata());
          gcTableSyncTableBeanWs.setGcTableSync(gcTableSync);
          
          GcTableSyncTableData gcTableSyncTableDataWs = new GcTableSyncTableData();
          gcTableSync.getDataBeanFrom().setDataInitialQuery(gcTableSyncTableDataWs);    gcTableSyncTableDataWs.setColumnMetadata(gcTableSyncTableDataSql.getColumnMetadata());    gcTableSyncTableDataWs.setGcTableSyncTableBean(gcTableSyncTableDataSql.getGcTableSyncTableBean());    gcTableSyncTableDataWs.init(gcTableSyncTableBeanSql, gcTableSyncTableMetadata.lookupColumns(columnsCommaSeparated), data);
          gcTableSyncTableDataWs.indexData();    GcTableSyncSubtype.fullSyncFull.syncData(theDebugMap, gcTableSync);
      }
        
       

      Attachments

        Activity

          People

            chris.hyzer@at.internet2.edu Chris Hyzer (upenn.edu)
            chris.hyzer@at.internet2.edu Chris Hyzer (upenn.edu)
            Votes:
            0 Vote for this issue
            Watchers:
            1 Start watching this issue

            Dates

              Created:
              Updated:
              Resolved: