/*******************************************************************************
* Copyright 2017 Capital One Services, LLC and Bitwise, Inc.
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
* http://www.apache.org/licenses/LICENSE-2.0
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*******************************************************************************/
package hydrograph.ui.dataviewer.viewloders;
import hydrograph.ui.dataviewer.adapters.DataViewerAdapter;
import hydrograph.ui.dataviewer.constants.Views;
import hydrograph.ui.dataviewer.datastructures.RowData;
import hydrograph.ui.dataviewer.datastructures.RowField;
import java.util.ArrayList;
import java.util.List;
import org.eclipse.jface.viewers.TableViewer;
import org.eclipse.swt.custom.CTabFolder;
import org.eclipse.swt.custom.CTabItem;
import org.eclipse.swt.custom.StyledText;
/**
* The Class DataViewLoader.
* Used for reloading Data Watcher Window.
*
*
* @author Bitwise
*/
public class DataViewLoader {
private static final String RECORD = "Record: ";
private static final String RECORD_SEPARATOR = "----------------------------------\n";
private StyledText unformattedViewTextarea;
private StyledText formattedViewTextarea;
private TableViewer horizontalViewTableViewer;
private TableViewer gridViewTableViewer;
private List<RowData> gridViewData;
private List<RowData> formattedViewData;
private List<RowData> unformattedViewData;
private DataViewerAdapter dataViewerAdapter;
private CTabFolder tabFolder;
/**
* Instantiates a new data view loader.
*
* @param unformattedViewTextarea
* the unformatted view textarea
* @param formattedViewTextarea
* the formatted view textarea
* @param horizontalViewTableViewer
* the horizontal view table viewer
* @param gridViewTableViewer
* the grid view table viewer
* @param gridViewData
* the grid view data
* @param formattedViewData
* the formatted view data
* @param unformattedViewData
* the unformatted view data
* @param dataViewerAdapter
* the data viewer adapter
* @param tabFolder
* the tab folder
*/
public DataViewLoader(StyledText unformattedViewTextarea, StyledText formattedViewTextarea,
TableViewer horizontalViewTableViewer, TableViewer gridViewTableViewer, List<RowData> gridViewData,
List<RowData> formattedViewData, List<RowData> unformattedViewData, DataViewerAdapter dataViewerAdapter, CTabFolder tabFolder) {
this.unformattedViewTextarea = unformattedViewTextarea;
this.formattedViewTextarea = formattedViewTextarea;
this.horizontalViewTableViewer = horizontalViewTableViewer;
this.gridViewTableViewer = gridViewTableViewer;
this.gridViewData = gridViewData;
this.formattedViewData = formattedViewData;
this.unformattedViewData = unformattedViewData;
this.dataViewerAdapter = dataViewerAdapter;
this.tabFolder = tabFolder;
}
/**
*
* Set unformattedViewTextarea
*
* @param unformattedViewTextarea
*/
public void setUnformattedViewTextarea(StyledText unformattedViewTextarea) {
this.unformattedViewTextarea = unformattedViewTextarea;
}
/**
* Set gridViewTableViewer
*
* @param gridViewTableViewer
*/
public void setGridViewTableViewer(TableViewer gridViewTableViewer) {
this.gridViewTableViewer = gridViewTableViewer;
}
/**
*
* Set formattedViewTextarea
*
* @param formattedViewTextarea
*/
public void setFormattedViewTextarea(StyledText formattedViewTextarea) {
this.formattedViewTextarea = formattedViewTextarea;
}
/**
*
* Update data view list
*
*/
public void updateDataViewLists() {
gridViewData.clear();
formattedViewData.clear();
gridViewData.addAll(dataViewerAdapter.getFileData());
formattedViewData.addAll(gridViewData);
unformattedViewData = dataViewerAdapter.getFileData();
}
/**
*
* Synchronizes other views data with grid view data.
* This method generally called when user sorts data in grid view.
*
*/
public void syncOtherViewsDataWithGridViewData(){
formattedViewData.clear();
formattedViewData.addAll(gridViewData);
}
private int getMaxLengthColumn() {
int lenght = 0;
for (String columnName : dataViewerAdapter.getColumnList()) {
if (columnName.length() > lenght) {
lenght = columnName.length();
}
}
return lenght;
}
/**
*
* reload visible view with data
*
*/
public void reloadloadViews() {
CTabItem tabItem = tabFolder.getSelection();
if (tabItem.getData("VIEW_NAME").equals(Views.GRID_VIEW_NAME)) {
gridViewTableViewer.refresh();
} else if (tabItem.getData("VIEW_NAME").equals(Views.HORIZONTAL_VIEW_NAME)) {
//TODO - add horizontal view reload code
} else if (tabItem.getData("VIEW_NAME").equals(Views.FORMATTED_VIEW_NAME)) {
reloadFormattedView();
} else if (tabItem.getData("VIEW_NAME").equals(Views.UNFORMATTED_VIEW_NAME)) {
reloadUnformattedView();
}
}
private void reloadFormattedView() {
formattedViewTextarea.setText("");
StringBuilder stringBuilder = new StringBuilder();
int maxLenghtColumn = getMaxLengthColumn();
maxLenghtColumn += 5;
String format = "\t\t%-" + maxLenghtColumn + "s: %s\n";
for (RowData rowData : new ArrayList<>(formattedViewData)) {
stringBuilder.append(RECORD + rowData.getRowNumber() + "\n\n");
stringBuilder.append("{\n");
for (String columnName : dataViewerAdapter.getColumnList()) {
RowField columnData = rowData.getRowFields().get((int)dataViewerAdapter.getAllColumnsMap().get(columnName));
String tempString = String.format(format, columnName, columnData.getValue());
stringBuilder.append(tempString);
}
stringBuilder.append("}\n");
stringBuilder.append(RECORD_SEPARATOR);
}
formattedViewTextarea.setText(stringBuilder.toString());
}
private void reloadUnformattedView() {
unformattedViewTextarea.setText("");
StringBuilder stringBuilder = new StringBuilder();
addHeaderLineToUnformattedViewTextArea(stringBuilder);
for (RowData rowData : unformattedViewData) {
String row = "";
for (RowField columnData : rowData.getRowFields()) {
row = row + columnData.getValue() + ",";
}
stringBuilder.append(row.substring(0, row.length() - 1) + "\n");
}
unformattedViewTextarea.setText(stringBuilder.toString());
}
private void addHeaderLineToUnformattedViewTextArea(StringBuilder stringBuilder) {
String header = "";
for (String columnName : new ArrayList<String>(dataViewerAdapter.getAllColumnsMap().keySet())) {
header = header + columnName + ",";
}
stringBuilder.append(header.substring(0, header.length() - 1) + "\n");
unformattedViewTextarea.setText(stringBuilder.toString());
}
}