fix TX search list implementation

This commit is contained in:
2020-11-10 21:02:34 +01:00
parent f474e38687
commit b298a4ca6c
11 changed files with 112 additions and 56 deletions

View File

@ -1,7 +1,6 @@
package com.minres.scviewer.e4.application.parts;
import java.util.ArrayList;
import java.util.Collection;
import java.util.List;
import java.util.concurrent.ConcurrentHashMap;
import java.util.stream.Collectors;
@ -40,6 +39,8 @@ import com.minres.scviewer.database.ITxStream;
import com.minres.scviewer.database.ui.TrackEntry;
import com.minres.scviewer.e4.application.parts.txTableTree.AbstractTransactionTreeContentProvider;
import com.minres.scviewer.e4.application.parts.txTableTree.AttributeLabelProvider;
import com.minres.scviewer.e4.application.parts.txTableTree.TransactionTreeNode;
import com.minres.scviewer.e4.application.parts.txTableTree.TransactionTreeNodeType;
import com.minres.scviewer.e4.application.parts.txTableTree.TxFilter;
public class TransactionList extends Composite {
@ -115,12 +116,14 @@ public class TransactionList extends Composite {
int idx = searchPropCombo.getSelectionIndex();
AttributeNameBean sel = attrNames.get(idx);
txFilter.setSearchProp(sel.getName(), sel.getType());
treeViewer.refresh();
}
@Override
public void widgetDefaultSelected(SelectionEvent e) {
int idx = searchPropCombo.getSelectionIndex();
AttributeNameBean sel = attrNames.get(idx);
txFilter.setSearchProp(sel.getName(), sel.getType());
treeViewer.refresh();
}
});
@ -131,7 +134,6 @@ public class TransactionList extends Composite {
public void modifyText(ModifyEvent e) {
txFilter.setSearchValue(((Text) e.widget).getText());
treeViewer.refresh();
//treeViewer.expandAll(false);
}
});
@ -150,25 +152,21 @@ public class TransactionList extends Composite {
@Override
public void widgetSelected(SelectionEvent e) {
int idx = viewPropCombo.getSelectionIndex();
AttributeNameBean sel = attrNames.get(idx);
nameLabelProvider.setShowProp(sel.getName());
nameLabelProvider.setShowProp(attrNames.get(idx).getName());
treeViewer.refresh(true);
}
@Override
public void widgetDefaultSelected(SelectionEvent e) { }
});
treeViewer = new TreeViewer(this, SWT.BORDER);
treeViewer = new TreeViewer(this);
treeViewer.setContentProvider(new AbstractTransactionTreeContentProvider(waveformViewer) {
@SuppressWarnings("rawtypes")
@SuppressWarnings("unchecked")
@Override
public Object[] getElements(Object inputElement) {
if (inputElement instanceof Object[]) {
return (Object[]) inputElement;
}
if (inputElement instanceof Collection) {
return ((Collection) inputElement).toArray();
if (inputElement instanceof ArrayList<?>) {
return ((ArrayList<ITx>) inputElement).stream().map(tx-> new TransactionTreeNode(tx, TransactionTreeNodeType.TX)).collect(Collectors.toList()).toArray();
}
return new Object[0];
}
@ -181,6 +179,8 @@ public class TransactionList extends Composite {
Object selected = treeSelection.getFirstElement();
if(selected instanceof ITx){
waveformViewer.setSelection(new StructuredSelection(selected));
} else if(selected instanceof TransactionTreeNode && ((TransactionTreeNode)selected).type == TransactionTreeNodeType.TX) {
waveformViewer.setSelection(new StructuredSelection(((TransactionTreeNode)selected).element));
}
}
});
@ -242,17 +242,18 @@ public class TransactionList extends Composite {
}
public void run() {
stream.getEvents().values().parallelStream().forEach(evtLst -> {
evtLst.forEach(evt -> {
if(evt.getType()==Type.BEGIN) {
eventList.add(evt.getTransaction());
for(ITxAttribute attr: evt.getTransaction().getAttributes()) {
eventList = stream.getEvents().values().parallelStream()
.flatMap(List::stream)
.filter(evt -> evt.getType()==Type.BEGIN)
.map(evt-> {
ITx tx = evt.getTransaction();
for(ITxAttribute attr: tx.getAttributes()) {
propNames.put(attr.getName(), attr.getDataType());
}
}
});
});
eventList = eventList.parallelStream().sorted((t1, t2)-> t1.getBeginTime().compareTo(t2.getBeginTime())).collect(Collectors.toList());
return tx;
})
.sorted((t1, t2)-> t1.getBeginTime().compareTo(t2.getBeginTime()))
.collect(Collectors.toList());
getDisplay().asyncExec(new Runnable() {
@Override
public void run() {
@ -265,6 +266,7 @@ public class TransactionList extends Composite {
searchPropComboViewer.setInput(attrNames);
searchPropComboViewer.setSelection(new StructuredSelection(searchPropComboViewer.getElementAt(0)));
}
treeViewer.refresh(true);
}
});
}

View File

@ -46,38 +46,39 @@ public abstract class AbstractTransactionTreeContentProvider implements ITreeCon
@Override
public Object[] getChildren(Object element) {
if(element instanceof ITx) {
return new Object[]{
new TransactionTreeNode((ITx)element, TransactionTreeNodeType.ATTRS)
};
return new Object[]{new TransactionTreeNode((ITx)element, TransactionTreeNodeType.ATTRS)};
} else if(element instanceof TransactionTreeNode){
TransactionTreeNode propertyHolder=(TransactionTreeNode) element;
if(propertyHolder.type == TransactionTreeNodeType.PROPS){
TransactionTreeNode node=(TransactionTreeNode) element;
switch(node.type) {
case PROPS:
return new Object[][]{
{Messages.TransactionDetails_1, Messages.TransactionDetails_16, propertyHolder.element.getStream().getFullName()},
{Messages.TransactionDetails_2, Messages.TransactionDetails_16, propertyHolder.element.getGenerator().getName()},
{Messages.TransactionDetails_19, Messages.TransactionDetails_20, waveformViewerPart.getScaledTime(propertyHolder.element.getBeginTime())},
{Messages.TransactionDetails_21, Messages.TransactionDetails_20, waveformViewerPart.getScaledTime(propertyHolder.element.getEndTime())}
{Messages.TransactionDetails_1, Messages.TransactionDetails_16, node.element.getStream().getFullName()},
{Messages.TransactionDetails_2, Messages.TransactionDetails_16, node.element.getGenerator().getName()},
{Messages.TransactionDetails_19, Messages.TransactionDetails_20, waveformViewerPart.getScaledTime(node.element.getBeginTime())},
{Messages.TransactionDetails_21, Messages.TransactionDetails_20, waveformViewerPart.getScaledTime(node.element.getEndTime())}
};
}else if(propertyHolder.type == TransactionTreeNodeType.ATTRS || propertyHolder.type == TransactionTreeNodeType.HIER)
return propertyHolder.getAttributeListForHier();
else if(propertyHolder.type == TransactionTreeNodeType.IN_REL){
Vector<Object[] > res = new Vector<>();
for(ITxRelation rel:propertyHolder.element.getIncomingRelations()){
res.add(new Object[]{
case TX:
case ATTRS:
case HIER:
return node.getAttributeListForHier();
case IN_REL:
Vector<Object[] > res_in = new Vector<>();
for(ITxRelation rel:node.element.getIncomingRelations()){
res_in.add(new Object[]{
rel.getRelationType(),
rel.getSource().getGenerator().getName(),
rel.getSource()});
}
return res.toArray();
} else if(propertyHolder.type == TransactionTreeNodeType.OUT_REL){
Vector<Object[] > res = new Vector<>();
for(ITxRelation rel:propertyHolder.element.getOutgoingRelations()){
res.add(new Object[]{
return res_in.toArray();
case OUT_REL:
Vector<Object[] > res_out = new Vector<>();
for(ITxRelation rel:node.element.getOutgoingRelations()){
res_out.add(new Object[]{
rel.getRelationType(),
rel.getTarget().getGenerator().getName(),
rel.getTarget()});
}
return res.toArray();
return res_out.toArray();
}
}
return null;

View File

@ -104,9 +104,20 @@ public class AttributeLabelProvider extends LabelProvider implements IStyledLabe
}else
return new StyledString(""); //$NON-NLS-1$
case TX_TIME:
return new StyledString(""); //$NON-NLS-1$
default:
if (element instanceof ITxAttribute) {
if(element instanceof TransactionTreeNode) {
ITx iTx = ((TransactionTreeNode) element).element;
return new StyledString(waveformViewerPart.getScaledTime(iTx.getBeginTime()));
}
case VALUE:
if(element instanceof TransactionTreeNode) {
if(showProp!=null){
ITx iTx = ((TransactionTreeNode) element).element;
List<ITxAttribute> res = iTx.getAttributes().stream().filter(a -> showProp.equals(a.getName())).collect(Collectors.toList());
if(res.size()==1)
return getAttrValueAsStyledString(res.get(0));
}
return new StyledString("");
} else if (element instanceof ITxAttribute) {
ITxAttribute attribute = (ITxAttribute) element;
return getAttrValueAsStyledString(attribute);
}else if(element instanceof Object[]){

View File

@ -43,7 +43,7 @@ public class TransactionTreeNode implements Comparable<TransactionTreeNode>{
*/
public String toString(){
switch(type){
case TX: return element.toString();
case TX: return "tx#"+element.getId();
case PROPS: return Messages.TransactionDetails_10;
case ATTRS: return Messages.TransactionDetails_11;
case IN_REL: return Messages.TransactionDetails_12;

View File

@ -40,7 +40,7 @@ public class TxFilter extends ViewerFilter {
* @param s the new search text
*/
public void setSearchValue(String s) {
this.searchValue = s; //$NON-NLS-1$ //$NON-NLS-2$
this.searchValue = s;
}
/* (non-Javadoc)
@ -50,11 +50,15 @@ public class TxFilter extends ViewerFilter {
public boolean select(Viewer viewer, Object parentElement, Object element) {
if (searchValue == null || searchValue.length() == 0)
return true;
if(element instanceof ITx) {
ITx iTx = (ITx) element;
List<ITxAttribute> res = iTx.getAttributes().stream().filter(a -> searchProp.equals(a.getName())).collect(Collectors.toList());
if(res.size()==1) {
try {
ITx iTx = null;
if(element instanceof ITx)
iTx = (ITx) element;
else if(element instanceof TransactionTreeNode && ((TransactionTreeNode)element).type == TransactionTreeNodeType.TX)
iTx = ((TransactionTreeNode)element).element;
if(iTx==null) return true;
List<ITxAttribute> res = iTx.getAttributes().stream().filter(a -> searchProp.equals(a.getName())).collect(Collectors.toList());
if(res.size()==1) {
try {
ITxAttribute attr =res.get(0);
switch(searchType) {
case BOOLEAN: // bool
@ -74,11 +78,9 @@ public class TxFilter extends ViewerFilter {
default:
break;
}
} catch(RuntimeException ex) {
return false;
}
} catch(RuntimeException ex) {
return false;
}
return true;
}
return false;
}