public synchronized boolean appendDataRow(int[] data) {
        
        for (int j = 0; j < columns; j++) {
            if (data[j] == notValidNumber) return false;
        }
        
        if (row_count < rows) { // There is space for the new row
            for (int j = 0; j < columns; j++) {
                this.data[j][row_count] = data[j];
            }
            row_count++;
        }
        else { // shift all rows to make space for the new one at the end
            
            for (int i = 1; i < rows; i++) {
                for (int j = 0; j < columns; j++) {
                    this.data[j][i - 1] = this.data[j][i];
                }
            }
            for (int j = 0; j < columns; j++) {
                this.data[j][rows - 1] = data[j];
            }
        }
        return true;
    }