/** @return */ private RowType[] getTableData(TableType table, BigInteger[] cids) { final RowType[] tableData = new RowType[table.getRow().size()]; for (int i = 0; i < tableData.length; i++) { final RowType row = table.getRow().get(i); tableData[i] = new RowType(); if (row.getOid() != null) { tableData[i].setOid(row.getOid()); } for (final BigInteger cid : cids) { boolean exists = false; for (final CellType cell : row.getCell()) { if (cell.getCid().equals(cid)) { tableData[i].getCell().add(cell); exists = true; break; } } if (!exists) { final CellType newCell = new CellType(); newCell.setCid(cid); newCell.setValue(ILMLCoreConstants.QM); tableData[i].getCell().add(newCell); } } } return tableData; }
/** * Get the table with color information added * * @param gid ID of the table layout * @return rows with color information added */ public Row[] getTableDataWithColor(String gid, boolean addColor) { final BigInteger[] cids = getCids(gid); final TableType table = getTable(gid); if (table == null) { return new Row[0]; } final List<Row> tableData = new ArrayList<Row>(); for (int i = 0; i < table.getRow().size(); i++) { final RowType rowType = table.getRow().get(i); final Row row = new Row(); row.setOid(rowType.getOid()); if (addColor) { row.setColor(lguiItem.getOIDToObject().getColorById(rowType.getOid())); } final BigInteger jobIdIndex = getColumnIndex(table, ILguiItem.JOB_ID); final Cell[] tableDataRow = new Cell[cids.length]; String jobId = null; for (int j = 0; j < cids.length; j++) { for (final CellType cell : rowType.getCell()) { if (cell.getCid() != null && cell.getCid().equals(cids[j])) { tableDataRow[j] = new Cell(cell.getValue(), row); break; } } if (tableDataRow[j] == null) { tableDataRow[j] = new Cell(ILMLCoreConstants.QM, row); } if (cids[j].equals(jobIdIndex)) { jobId = tableDataRow[j].value; } } row.setCells(tableDataRow); if (jobId != null) { JobStatusData status = lguiItem.getUserJob(jobId); if (status == null) { final String queueName = getCellValue(table, rowType, ILguiItem.JOB_QUEUE_NAME); final String owner = getCellValue(table, rowType, ILguiItem.JOB_OWNER); final String state = getCellValue(table, rowType, ILguiItem.JOB_STATUS); final String[][] attrs = { {JobStatusData.MONITOR_ID_ATTR, lguiItem.getName()}, {JobStatusData.QUEUE_NAME_ATTR, queueName}, {JobStatusData.OWNER_ATTR, owner}, {JobStatusData.STATE_ATTR, state} }; status = new JobStatusData(jobId, attrs); } else if (status.isRemoved()) { /* * Skip rows that have been marked as "removed" */ continue; } row.setJobStatusData(status); } tableData.add(row); } return tableData.toArray(new Row[tableData.size()]); }
/** * Forwards new information for the jobs to the jobstatus instances, which are afterwards saved * via Memento within the monitor.core plug-in. This function stores all additional information * provided by lml_da in each jobStatusData instance. */ public void forwardRowToJobData() { final JobStatusData[] userJobs = lguiItem.getUserJobs(); final Set<String> userNames = new HashSet<String>(); for (final JobStatusData jobStatus : userJobs) { userNames.add(jobStatus.getString(JobStatusData.OWNER_ATTR)); } // Traverse all tables for (final TableType table : getTables()) { // Get extended rows with attached jobStatusData final Row[] rows = getTableDataWithColor( table.getId(), false); // Contains extended rows with additional data for (int i = 0; i < rows.length; i++) { if (rows[i].status == null) { // If there is no jobstatusdata, do not add additional data continue; } if (!userNames.contains(rows[i].status.getString(JobStatusData.OWNER_ATTR))) { continue; } final RowType rawRow = table.getRow().get(i); // The actual row from LML data // Iterate over all columns and save their key value pairs // into the jobstatus instances for (final ColumnType column : table.getColumn()) { final String columnName = column.getName(); final String value = getCellValue(table, rawRow, columnName); if (value != null) { rows[i].status.putString(columnName, value); } } } } }
/** * Sorting of the data which should be displayed in a table. * * @param gid ID of the table * @param sortDirectionComparator Should always be the int value of ascending sorting. * @param sortIndex * @param sortDirection */ public void sort(String gid, int sortDirectionComparator, int sortIndex, int sortDirection) { final TableType table = getTable(gid); if (table != null && sortIndex != -1) { final BigInteger[] cids = getCids(gid); if (cids.length > sortIndex) { final RowType[] jobTableData = getTableData(table, cids); Arrays.sort( jobTableData, new TableSorter( getColumnSortProperty(table, cids, sortIndex), sortDirectionComparator, sortIndex, sortDirection)); table.getRow().clear(); for (final RowType element : jobTableData) { table.getRow().add(element); } } } }