package com.lexisnexis.ui.dataprofiling;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import java.util.Set;
import java.util.Map.Entry;
import org.eclipse.swt.SWT;
import org.eclipse.swt.graphics.Point;
import org.eclipse.swt.layout.FillLayout;
import org.eclipse.swt.widgets.Dialog;
import org.eclipse.swt.widgets.Display;
import org.eclipse.swt.widgets.Shell;
import org.eclipse.swt.widgets.Table;
import org.eclipse.swt.widgets.TableColumn;
import org.eclipse.swt.widgets.TableItem;
import com.lexisnexis.ui.constants.Constants;
public class CreatePopUpDialog extends Dialog{
public CreatePopUpDialog(Shell parent) {
this(parent, SWT.RESIZE | SWT.DIALOG_TRIM | SWT.APPLICATION_MODAL);
}
public CreatePopUpDialog(Shell parent, int style) {
super(parent, style);
}
public void open(int rowCount, String columnName, DataProfileRecordsList datalist, String isRow) {
// Create the dialog window
Shell shell = new Shell(getParent(), getStyle());
Point pt = Display.getCurrent().getCursorLocation ();
shell.setLocation (pt.x, pt.y);
shell.setLayout(new FillLayout());
if(Constants.ISROW.equals(isRow)) {
shell.setSize(600,300);
shell.setText("Row Details");
createContentsForRow(shell, rowCount, columnName, datalist);
}
else if (Constants.ISCOL.equals(isRow)){
shell.setSize(200,200);
shell.setText(columnName + " Count");
createContents(shell, rowCount, columnName, datalist);
}
shell.open();
Display display = getParent().getDisplay();
while (!shell.isDisposed()) {
if (!display.readAndDispatch()) {
display.sleep();
}
}
}
private void createContents(final Shell shell, int rowCount, String columnName, DataProfileRecordsList datalist) {
Table tblDialog = new Table(shell, SWT.NONE);
tblDialog.setLinesVisible(true);
tblDialog.setHeaderVisible(true);
String[] titles = null;
if(columnName.equals(Constants.KEY_LENGTH)){
titles = new String[]{Constants.TABLE_HEADER_LENGTH, Constants.TABLE_HEADER_COUNT};
} else if(columnName.equals(Constants.KEY_WORDS)) {
titles = new String[]{Constants.TABLE_HEADER_WORDS, Constants.TABLE_HEADER_COUNT};
} else if(columnName.equals(Constants.KEY_CHARACTERS)) {
titles = new String[]{Constants.TABLE_HEADER_CHAR, Constants.TABLE_HEADER_COUNT};
} else if(columnName.equals(Constants.KEY_PATTERNS)) {
titles = new String[]{Constants.TABLE_HEADER_DATA_PATTERN, Constants.TABLE_HEADER_COUNT};
} else if(columnName.equals(Constants.KEY_FREQUENT_TERMS)) {
titles = new String[]{Constants.TABLE_HEADER_VALUE, Constants.TABLE_HEADER_COUNT};
} else if(columnName.equals(Constants.KEY_FIELDNAME)) {
titles = new String[]{Constants.KEY_FIELDNUMBER, Constants.KEY_FIELDNAME, Constants.KEY_CARDINALITY,
Constants.KEY_LENGTH, Constants.TABLE_HEADER_COUNT, Constants.KEY_WORDS, Constants.TABLE_HEADER_COUNT,
Constants.KEY_CHARACTERS, Constants.TABLE_HEADER_COUNT, Constants.TABLE_HEADER_DATA_PATTERN, Constants.TABLE_HEADER_COUNT,
Constants.KEY_FREQUENT_TERMS, Constants.TABLE_HEADER_COUNT};
}
for (int i = 0; i < titles.length; i++) {
TableColumn column = new TableColumn(tblDialog, SWT.NONE);
column.setText(titles[i]);
}
TableItem item = null;
List<DataProlifeRow> arlDataProfileRecords = datalist.getDataProfileRecordsList();
if(arlDataProfileRecords!= null && arlDataProfileRecords.size() > 0) {
DataProlifeRow dataProlifeRow = arlDataProfileRecords.get(rowCount);
Map<String, String> mapRecordRow = (Map<String, String>)dataProlifeRow.getMapRowDetails().get(columnName);
Iterator<String> iter = mapRecordRow.keySet().iterator();
while(iter.hasNext()) {
String key = iter.next();
String val = mapRecordRow.get(key);
item = new TableItem(tblDialog, SWT.NONE);
item.setText(0, key);
item.setText(1, val);
}
}
for (int i=0; i<titles.length; i++) {
tblDialog.getColumn (i).pack ();
}
}
private void createContentsForRow(final Shell shell, int rowCount, String columnName, DataProfileRecordsList datalist) {
Table tblDialog = new Table(shell, SWT.NONE);
String[] titles = {Constants.KEY_FIELDNUMBER, Constants.KEY_FIELDNAME, Constants.KEY_CARDINALITY,
Constants.KEY_LENGTH, Constants.TABLE_HEADER_COUNT, Constants.KEY_WORDS, Constants.TABLE_HEADER_COUNT,
Constants.KEY_CHARACTERS, Constants.TABLE_HEADER_COUNT, Constants.TABLE_HEADER_DATA_PATTERN, Constants.TABLE_HEADER_COUNT,
Constants.KEY_FREQUENT_TERMS, Constants.TABLE_HEADER_COUNT};
for (int i = 0; i < titles.length; i++) {
TableColumn column = new TableColumn (tblDialog, SWT.NONE);
column.setText(titles[i]);
column.setWidth(100);
}
TableItem item = null;
List<DataProlifeRow> arlDataProfileRecords = datalist.getDataProfileRecordsList();
if(arlDataProfileRecords!= null && arlDataProfileRecords.size() > 0) {
DataProlifeRow dataProlifeRow = arlDataProfileRecords.get(rowCount);
String[] arrLen = null;
String[] arrLenCount = null;
String[] arrWords = null;
String[] arrWordsCount = null;
String[] arrChars = null;
String[] arrCharsCount = null;
String[] arrPatterns = null;
String[] arrPatternsCount = null;
String[] arrFreqTerms = null;
String[] arrFreqTermsCount = null;
Map<String, Map<String, String>> map = dataProlifeRow.getMapRowDetails();
Set<Entry<String, Map<String, String>>> setEntry = map.entrySet();
Iterator<Entry<String, Map<String, String>>> itr = setEntry.iterator();
while(itr.hasNext()){
Entry<String, Map<String, String>> entry = itr.next();
if((entry.getKey().equals(Constants.KEY_LENGTH))){
Map<String, String> mapInner = (Map<String, String>)entry.getValue();
arrLen = new String[mapInner.size()];
arrLenCount = new String[mapInner.size()];
int count = 0;
Set<Entry<String, String>> entrySetInnerMap = (Set<Entry<String, String>>)mapInner.entrySet();
Iterator<Entry<String, String>> itrInner = entrySetInnerMap.iterator();
while(itrInner.hasNext()) {
Entry<String, String> entryInner = itrInner.next();
arrLen[count] = entryInner.getKey();
arrLenCount[count] = entryInner.getValue();
count++;
}
} else if((entry.getKey().equals(Constants.KEY_WORDS))){
Map<String, String> mapInner = (Map<String, String>)entry.getValue();
arrWords = new String[mapInner.size()];
arrWordsCount = new String[mapInner.size()];
int count = 0;
Set<Entry<String, String>> entrySetInnerMap = (Set<Entry<String, String>>)mapInner.entrySet();
Iterator<Entry<String, String>> itrInner = entrySetInnerMap.iterator();
while(itrInner.hasNext()) {
Entry<String, String> entryInner = itrInner.next();
arrWords[count] = entryInner.getKey();
arrWordsCount[count] = entryInner.getValue();
count++;
}
} else if((entry.getKey().equals(Constants.KEY_CHARACTERS))){
Map<String, String> mapInner = (Map<String, String>)entry.getValue();
arrChars = new String[mapInner.size()];
arrCharsCount = new String[mapInner.size()];
int count = 0;
Set<Entry<String, String>> entrySetInnerMap = (Set<Entry<String, String>>)mapInner.entrySet();
Iterator<Entry<String, String>> itrInner = entrySetInnerMap.iterator();
while(itrInner.hasNext()) {
Entry<String, String> entryInner = itrInner.next();
arrChars[count] = entryInner.getKey();
arrCharsCount[count] = entryInner.getValue();
count++;
}
} else if((entry.getKey().equals(Constants.KEY_PATTERNS))){
Map<String, String> mapInner = (Map<String, String>)entry.getValue();
arrPatterns = new String[mapInner.size()];
arrPatternsCount = new String[mapInner.size()];
int count = 0;
Set<Entry<String, String>> entrySetInnerMap = (Set<Entry<String, String>>)mapInner.entrySet();
Iterator<Entry<String, String>> itrInner = entrySetInnerMap.iterator();
while(itrInner.hasNext()) {
Entry<String, String> entryInner = itrInner.next();
arrPatterns[count] = entryInner.getKey();
arrPatternsCount[count] = entryInner.getValue();
count++;
}
} else if((entry.getKey().equals(Constants.KEY_FREQUENT_TERMS))){
Map<String, String> mapInner = (Map<String, String>)entry.getValue();
arrFreqTerms = new String[mapInner.size()];
arrFreqTermsCount = new String[mapInner.size()];
int count = 0;
Set<Entry<String, String>> entrySetInnerMap = (Set<Entry<String, String>>)mapInner.entrySet();
Iterator<Entry<String, String>> itrInner = entrySetInnerMap.iterator();
while(itrInner.hasNext()) {
Entry<String, String> entryInner = itrInner.next();
arrFreqTerms[count] = entryInner.getKey();
arrFreqTermsCount[count] = entryInner.getValue();
count++;
}
}
}
int[] arrVal = {arrLenCount.length, arrWordsCount.length, arrCharsCount.length, arrPatterns.length, arrFreqTerms.length};
int maxValue = max(arrVal);
for (int i = 0; i < maxValue; i++) {
item = new TableItem(tblDialog, SWT.NONE);
if(i == 0){
item.setText(0, String.valueOf(dataProlifeRow.getFieldNumber()));
item.setText(1, dataProlifeRow.getFieldName());
item.setText(2, String.valueOf(dataProlifeRow.getCardinality()));
}
item.setText(3, i < arrLen.length ? arrLen[i]: "");
item.setText(4, i < arrLenCount.length ? arrLenCount[i]: "");
item.setText(5, i < arrWords.length ? arrWords[i]: "");
item.setText(6, i < arrWordsCount.length ? arrWordsCount[i]: "");
item.setText(7, i < arrChars.length ? arrChars[i]: "");
item.setText(8, i < arrCharsCount.length ? arrCharsCount[i]: "");
item.setText(9, i < arrPatterns.length ? arrPatterns[i]: "");
item.setText(10, i < arrPatternsCount.length ? arrPatternsCount[i]: "");
item.setText(11, i < arrFreqTerms.length ? arrFreqTerms[i]: "");
item.setText(12, i < arrFreqTermsCount.length ? arrFreqTermsCount[i]: "");
}
}
tblDialog.setHeaderVisible(true);
tblDialog.setLinesVisible(true);
for (int i=0; i<titles.length; i++) {
tblDialog.getColumn (i).pack ();
}
}
public int max(int[] t) {
int maximum = t[0]; // start with the first value
for (int i=1; i<t.length; i++) {
if (t[i] > maximum) {
maximum = t[i]; // new maximum
}
}
return maximum;
}//end method max
}