/******************************************************************************* * 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.datasetinformation; import java.util.ArrayList; import java.util.List; import org.apache.commons.lang.StringUtils; import org.eclipse.jface.dialogs.Dialog; import org.eclipse.jface.dialogs.IDialogConstants; import org.eclipse.jface.viewers.TableViewer; import org.eclipse.jface.viewers.TableViewerColumn; import org.eclipse.swt.SWT; import org.eclipse.swt.graphics.Point; import org.eclipse.swt.layout.GridData; import org.eclipse.swt.layout.GridLayout; import org.eclipse.swt.widgets.Composite; import org.eclipse.swt.widgets.Control; import org.eclipse.swt.widgets.Label; import org.eclipse.swt.widgets.Shell; import org.eclipse.swt.widgets.Table; import org.eclipse.swt.widgets.TableColumn; import org.eclipse.swt.widgets.Text; import hydrograph.ui.common.datastructures.dataviewer.JobDetails; import hydrograph.ui.common.schema.Field; import hydrograph.ui.common.schema.Fields; import hydrograph.ui.common.util.Constants; import hydrograph.ui.datastructure.property.GridRow; import hydrograph.ui.dataviewer.constants.DatasetInformationConstants; import hydrograph.ui.dataviewer.utilities.ViewDataSchemaHelper; import hydrograph.ui.dataviewer.window.DebugDataViewer; import hydrograph.ui.propertywindow.messages.Messages; import hydrograph.ui.propertywindow.widgets.utility.GridWidgetCommonBuilder; import hydrograph.ui.propertywindow.widgets.utility.MouseWheelScrollingOnComposite; import org.eclipse.swt.events.ControlAdapter; import org.eclipse.swt.events.ControlEvent; import org.eclipse.swt.custom.CTabFolder; import org.eclipse.swt.custom.CTabItem; import org.eclipse.swt.custom.ScrolledComposite; /** * Data set Information Window * @author Bitwise */ public class DatasetInformationDialog extends Dialog { private Table table; private DatasetInformationVO datasetInformationVO; private DebugDataViewer debugDataViewer; private JobDetails jobDetails; private String debugFileLocation; private String debugFileName; private Fields dataViewerFileSchema; private String SCHEMA_FILE_EXTENTION=".xml"; private List<GridRow> gridRowList=new ArrayList<>(); private Composite genralTabDatacomposite; /** * Create the dialog. * @param parentShell */ public DatasetInformationDialog(Shell parentShell) { super(parentShell); setShellStyle(SWT.CLOSE | SWT.TITLE | SWT.WRAP | SWT.APPLICATION_MODAL | SWT.RESIZE); } /** * Configure the shell. * * @param newShell */ @Override protected void configureShell(Shell newShell) { super.configureShell(newShell); newShell.setText("Dataset Information - " + debugDataViewer.getDataViewerWindowTitle()); } /** * Create contents of the dialog. * @param parent */ @Override protected Control createDialogArea(Composite parent) { final Composite container = (Composite) super.createDialogArea(parent); container.setLayout(new GridLayout(1, false)); container.getShell().setMinimumSize(700, 300); Composite composite = new Composite(container, SWT.NONE); composite.setLayout(new GridLayout(1, false)); composite.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true, 1, 1)); CTabFolder tabFolder = new CTabFolder(composite, SWT.NONE); tabFolder.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true, 1, 1)); CTabItem tbtmGeneral = new CTabItem(tabFolder, SWT.NONE); tbtmGeneral.setText(DatasetInformationConstants.GENERAL); ScrolledComposite scrolledComposite = new ScrolledComposite(tabFolder, SWT.BORDER | SWT.H_SCROLL | SWT.V_SCROLL); tbtmGeneral.setControl(scrolledComposite); scrolledComposite.setExpandHorizontal(true); scrolledComposite.setExpandVertical(true); genralTabDatacomposite = new Composite(scrolledComposite, SWT.NONE); genralTabDatacomposite.setLayout(new GridLayout(2, false)); createLabel(genralTabDatacomposite,DatasetInformationConstants.VIEW_DATA_FILE); setLabelValue(genralTabDatacomposite,datasetInformationVO.getViewDataFilePath()); createLabel(genralTabDatacomposite,DatasetInformationConstants.EDGE_NODE); setLabelValue(genralTabDatacomposite,datasetInformationVO.getEdgeNode()); if(jobDetails.isRemote()){ createLabel(genralTabDatacomposite,DatasetInformationConstants.USERNAME); setLabelValue(genralTabDatacomposite,datasetInformationVO.getUserName()); } createLabel(genralTabDatacomposite,DatasetInformationConstants.LOCAL_CHUNK_DATA); setLabelValue(genralTabDatacomposite,datasetInformationVO.getChunkFilePath()); createLabel(genralTabDatacomposite,DatasetInformationConstants.ORIGINAL_FILE_SIZE); setLabelValue(genralTabDatacomposite,datasetInformationVO.getAcctualFileSize()); createLabel(genralTabDatacomposite,DatasetInformationConstants.FILE_SIZE); setLabelValue(genralTabDatacomposite,datasetInformationVO.getSizeOfData()); createLabel(genralTabDatacomposite,DatasetInformationConstants.NUMBER_OF_RECORDS); setLabelValue(genralTabDatacomposite,datasetInformationVO.getNoOfRecords()); createLabel(genralTabDatacomposite,DatasetInformationConstants.PAGE_SIZE); setLabelValue(genralTabDatacomposite,datasetInformationVO.getPageSize()); createLabel(genralTabDatacomposite,DatasetInformationConstants.DELIMETER); setLabelValue(genralTabDatacomposite,datasetInformationVO.getDelimeter()); createLabel(genralTabDatacomposite,DatasetInformationConstants.QUOTE); setLabelValue(genralTabDatacomposite,datasetInformationVO.getQuote()); createLabel(genralTabDatacomposite,DatasetInformationConstants.DOWNLOADED_FILTER_CONDITION); setLabelValue(genralTabDatacomposite,datasetInformationVO.getLocalFilter()); createLabel(genralTabDatacomposite,DatasetInformationConstants.ORIGINAL_FILTER_CONDITION); setLabelValue(genralTabDatacomposite,datasetInformationVO.getRemoteFilter()); CTabItem tbtmSchema = new CTabItem(tabFolder, SWT.NONE); tbtmSchema.setText(DatasetInformationConstants.SCHEMA); ScrolledComposite scrolledComposite1 = new ScrolledComposite(tabFolder, SWT.BORDER | SWT.H_SCROLL | SWT.V_SCROLL); tbtmSchema.setControl(scrolledComposite1); scrolledComposite1.setExpandHorizontal(true); scrolledComposite1.setExpandVertical(true); Composite composite_3 = new Composite(scrolledComposite1, SWT.NONE); composite_3.setLayout(new GridLayout(1, false)); TableViewer tableViewer = new TableViewer(composite_3, SWT.BORDER | SWT.FULL_SELECTION); table = tableViewer.getTable(); table.setLinesVisible(true); table.setHeaderVisible(true); table.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true, 1, 1)); createTableViewerColumns(tableViewer,DatasetInformationConstants.FEILD_NAME); createTableViewerColumns(tableViewer,DatasetInformationConstants.DATA_TYPE); createTableViewerColumns(tableViewer,DatasetInformationConstants.DATE_FORMAT); createTableViewerColumns(tableViewer,DatasetInformationConstants.PRECISION); createTableViewerColumns(tableViewer,DatasetInformationConstants.SCALE); createTableViewerColumns(tableViewer,DatasetInformationConstants.SCALE_TYPE); final TableViewerColumn tableViewerColumn=createTableViewerColumns(tableViewer,DatasetInformationConstants.DESCRIPTION); container.addControlListener(new ControlAdapter() { @Override public void controlResized(ControlEvent e) { tableViewerColumn.getColumn().setWidth(container.getSize().x-642); } }); loadSchemaData(); tableViewer.setContentProvider(new DatasetContentProvider()); tableViewer.setLabelProvider(new DatasetLabelProvider()); tableViewer.setInput(gridRowList); tableViewer.refresh(); scrolledComposite.setContent(genralTabDatacomposite); scrolledComposite.setMinSize(genralTabDatacomposite.computeSize(SWT.DEFAULT, SWT.DEFAULT)); MouseWheelScrollingOnComposite.installMouseWheelScrollRecursively(scrolledComposite); scrolledComposite1.setContent(composite_3); scrolledComposite1.setMinSize(composite_3.computeSize(SWT.DEFAULT, SWT.DEFAULT)); MouseWheelScrollingOnComposite.installMouseWheelScrollRecursively(scrolledComposite1); return container; } /** * Creates columns for the Schema Grid * @param tableViewer */ public TableViewerColumn createTableViewerColumns(TableViewer tableViewer, String columnName) { TableViewerColumn tableViewerColumn = new TableViewerColumn(tableViewer, SWT.NONE); TableColumn tblclmnItem = tableViewerColumn.getColumn(); tblclmnItem.setWidth(100); tblclmnItem.setText(columnName); return tableViewerColumn; } /** * Set the values of the dataset information window for the respective labels * @param composite_2 */ public void setLabelValue(Composite composite_2, String value) { Text textValue= new Text(composite_2, SWT.NONE |SWT.READ_ONLY); textValue.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, false, 1, 1)); textValue.setEditable(false); textValue.setText(value); } /** * Creates the label for dataset information window * @param composite_2 */ public void createLabel(Composite composite_2, String windowLabelName) { Label lblName = new Label(composite_2, SWT.NONE); lblName.setLayoutData(new GridData(SWT.RIGHT, SWT.CENTER, true, false, 1, 1)); lblName.setText(windowLabelName); lblName.setAlignment(SWT.RIGHT); } /** * Set the values of schema file in schema grid */ public void loadSchemaData() { jobDetails = debugDataViewer.getJobDetails(); debugFileName = debugDataViewer.getDebugFileName(); debugFileLocation = debugDataViewer.getDebugFileLocation(); dataViewerFileSchema = ViewDataSchemaHelper.INSTANCE.getFieldsFromSchema(debugFileLocation + debugFileName +SCHEMA_FILE_EXTENTION); for(Field field : dataViewerFileSchema.getField()){ GridRow gridRow=new GridRow(); gridRow.setFieldName(field.getName()); gridRow.setDataType(GridWidgetCommonBuilder.getDataTypeByValue(field.getType().value())); gridRow.setDataTypeValue(field.getType().value()); if(StringUtils.isNotEmpty(field.getFormat())){ gridRow.setDateFormat(field.getFormat()); }else{ gridRow.setDateFormat(""); } if(field.getPrecision()!= null){ gridRow.setPrecision(String.valueOf(field.getPrecision())); } else{ gridRow.setPrecision(""); } if(field.getScale()!= null){ gridRow.setScale(Integer.toString(field.getScale())); } else{ gridRow.setScale(""); } if(StringUtils.isNotEmpty(field.getDescription())) gridRow.setDescription(field.getDescription()); else{ gridRow.setDescription(""); } if(field.getScaleType()!=null){ gridRow.setScaleType(GridWidgetCommonBuilder.getScaleTypeByValue(field.getScaleType().value())); gridRow.setScaleTypeValue(GridWidgetCommonBuilder.getScaleTypeValue()[GridWidgetCommonBuilder.getScaleTypeByValue(field.getScaleType().value())]); }else{ gridRow.setScaleType(GridWidgetCommonBuilder.getScaleTypeByValue(Messages.SCALE_TYPE_NONE)); gridRow.setScaleTypeValue(GridWidgetCommonBuilder.getScaleTypeValue()[Integer.valueOf(Constants.DEFAULT_INDEX_VALUE_FOR_COMBOBOX)]); } gridRowList.add(gridRow); } } /** * Create contents of the button bar. * @param parent */ @Override protected void createButtonsForButtonBar(Composite parent) { createButton(parent, IDialogConstants.OK_ID, IDialogConstants.OK_LABEL, true); } /** * Return the initial size of the dialog. */ @Override protected Point getInitialSize() { return new Point(721, 323); } /** * Set the objects for the dataset information window * @param datasetInformationVO,debugDataViewer,jobDetails */ public void setData(DatasetInformationVO datasetInformationVO,DebugDataViewer debugDataViewer,JobDetails jobDetails) { this.debugDataViewer = debugDataViewer; this.datasetInformationVO=datasetInformationVO; this.jobDetails = jobDetails; } }