fix TX search list implementation
This commit is contained in:
@ -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);
|
||||
}
|
||||
});
|
||||
}
|
||||
|
@ -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;
|
||||
|
@ -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[]){
|
||||
|
@ -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;
|
||||
|
@ -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;
|
||||
}
|
||||
|
Reference in New Issue
Block a user