Download
Getting Started
Members
Projects
Community
Marketplace
Events
Planet Eclipse
Newsletter
Videos
Participate
Report a Bug
Forums
Mailing Lists
Wiki
IRC
How to Contribute
Working Groups
Automotive
Internet of Things
LocationTech
Long-Term Support
PolarSys
Science
OpenMDM
More
Community
Marketplace
Events
Planet Eclipse
Newsletter
Videos
Participate
Report a Bug
Forums
Mailing Lists
Wiki
IRC
How to Contribute
Working Groups
Automotive
Internet of Things
LocationTech
Long-Term Support
PolarSys
Science
OpenMDM
Toggle navigation
Bugzilla – Attachment 83056 Details for
Bug 207344
[logview] implement Group By
Home
|
New
|
Browse
|
Search
|
[?]
|
Reports
|
Requests
|
Help
|
Log In
[x]
|
Terms of Use
|
Copyright Agent
[patch]
first try
patch.txt (text/plain), 35.93 KB, created by
Jacek Pospychala
on 2007-11-16 06:21:00 EST
(
hide
)
Description:
first try
Filename:
MIME Type:
Creator:
Jacek Pospychala
Created:
2007-11-16 06:21:00 EST
Size:
35.93 KB
patch
obsolete
>### Eclipse Workspace Patch 1.0 >#P org.eclipse.ui.views.log >Index: src/org/eclipse/ui/internal/views/log/LogSession.java >=================================================================== >RCS file: /cvsroot/eclipse/org.eclipse.ui.views.log/src/org/eclipse/ui/internal/views/log/LogSession.java,v >retrieving revision 1.2 >diff -u -r1.2 LogSession.java >--- src/org/eclipse/ui/internal/views/log/LogSession.java 22 Oct 2007 15:18:42 -0000 1.2 >+++ src/org/eclipse/ui/internal/views/log/LogSession.java 16 Nov 2007 11:17:14 -0000 >@@ -11,22 +11,16 @@ > *******************************************************************************/ > package org.eclipse.ui.internal.views.log; > >+import java.io.PrintWriter; > import java.text.ParseException; >-import java.util.ArrayList; > import java.util.Date; >-import java.util.List; >- >-import org.eclipse.core.runtime.PlatformObject; >-import org.eclipse.jface.resource.ImageDescriptor; >-import org.eclipse.ui.model.IWorkbenchAdapter; > > import com.ibm.icu.text.SimpleDateFormat; > >-public class LogSession extends PlatformObject implements IWorkbenchAdapter { >+public class LogSession extends AbstractEntry { > private String sessionData; > private Date date; >- private List entries = new ArrayList(); >- >+ > /** > * Constructor for LogSession. > */ >@@ -63,24 +57,12 @@ > String dateBuffer = line.substring(0, delim).trim(); > setDate(dateBuffer); > } >- >- public List getEntries() { >- return entries; >- } > >- public Object[] getChildren(Object o) { >- return getEntries().toArray(new LogEntry[getEntries().size()]); >+ public void write(PrintWriter writer) { >+ writer.write(sessionData); > } >- >- public ImageDescriptor getImageDescriptor(Object object) { >- return null; >- } >- >- public String getLabel(Object o) { >- return null; >- } >- >- public Object getParent(Object o) { >- return null; >+ >+ public String toString() { >+ return Messages.LogViewLabelProvider_Session; // TODO maybe toString is not the best place for static... > } > } >Index: src/org/eclipse/ui/internal/views/log/LogViewLabelProvider.java >=================================================================== >RCS file: /cvsroot/eclipse/org.eclipse.ui.views.log/src/org/eclipse/ui/internal/views/log/LogViewLabelProvider.java,v >retrieving revision 1.4 >diff -u -r1.4 LogViewLabelProvider.java >--- src/org/eclipse/ui/internal/views/log/LogViewLabelProvider.java 22 Oct 2007 15:18:42 -0000 1.4 >+++ src/org/eclipse/ui/internal/views/log/LogViewLabelProvider.java 16 Nov 2007 11:17:16 -0000 >@@ -18,9 +18,6 @@ > import org.eclipse.jface.viewers.LabelProvider; > import org.eclipse.swt.graphics.Image; > >-import com.ibm.icu.text.DateFormat; >-import com.ibm.icu.text.SimpleDateFormat; >- > public class LogViewLabelProvider > extends LabelProvider > implements ITableLabelProvider { >@@ -49,7 +46,7 @@ > } > } > public Image getColumnImage(Object element, int columnIndex) { >- if (element instanceof LogSession) { >+ if (element instanceof Group) { > return (columnIndex == 0) ? hierarchicalImage : null; > } > >@@ -70,38 +67,41 @@ > } > > public String getColumnText(Object element, int columnIndex) { >- if (element instanceof LogSession) { >- LogSession entry = (LogSession) element; >+ if (element instanceof Group) { >+ Group entry = (Group) element; > if (columnIndex == 0) { >- return Messages.LogViewLabelProvider_Session; >+ return entry.toString(); > } else if (columnIndex == 2) { >- if (entry.getDate() != null) { >+ /*if (entry.getDate() != null) { TODO Get date if Group > DateFormat formatter = new SimpleDateFormat(LogEntry.F_DATE_FORMAT); > return formatter.format(entry.getDate()); >- } >+ }*/ > } > return null; > } > >- LogEntry entry = (LogEntry) element; >- switch (columnIndex) { >- case 0: >- if (entry.getMessage() != null) { >- String message = entry.getMessage(); >- if (message.length() > MAX_LABEL_LENGTH) { >- String warning = Messages.LogViewLabelProvider_truncatedMessage; >- StringBuffer sb = new StringBuffer(message.substring(0, MAX_LABEL_LENGTH - warning.length())); >- sb.append(warning); >- return sb.toString(); >+ if (element instanceof LogEntry) { >+ LogEntry entry = (LogEntry) element; >+ switch (columnIndex) { >+ case 0: >+ if (entry.getMessage() != null) { >+ String message = entry.getMessage(); >+ if (message.length() > MAX_LABEL_LENGTH) { >+ String warning = Messages.LogViewLabelProvider_truncatedMessage; >+ StringBuffer sb = new StringBuffer(message.substring(0, MAX_LABEL_LENGTH - warning.length())); >+ sb.append(warning); >+ return sb.toString(); >+ } >+ return entry.getMessage(); > } >- return entry.getMessage(); >+ case 1: >+ if (entry.getPluginId() != null) >+ return entry.getPluginId(); >+ case 2: >+ return entry.getFormattedDate(); > } >- case 1: >- if (entry.getPluginId() != null) >- return entry.getPluginId(); >- case 2: >- return entry.getFormattedDate(); > } >+ > return ""; //$NON-NLS-1$ > } > >Index: src/org/eclipse/ui/internal/views/log/LogView.java >=================================================================== >RCS file: /cvsroot/eclipse/org.eclipse.ui.views.log/src/org/eclipse/ui/internal/views/log/LogView.java,v >retrieving revision 1.11 >diff -u -r1.11 LogView.java >--- src/org/eclipse/ui/internal/views/log/LogView.java 8 Nov 2007 01:23:43 -0000 1.11 >+++ src/org/eclipse/ui/internal/views/log/LogView.java 16 Nov 2007 11:17:16 -0000 >@@ -27,6 +27,10 @@ > import java.lang.reflect.InvocationTargetException; > import java.util.ArrayList; > import java.util.Comparator; >+import java.util.HashMap; >+import java.util.Iterator; >+import java.util.List; >+import java.util.Map; > > import org.eclipse.core.runtime.ILogListener; > import org.eclipse.core.runtime.IProgressMonitor; >@@ -116,6 +120,7 @@ > public static final String P_SHOW_FILTER_TEXT = "show_filter_text"; //$NON-NLS-1$ > public static final String P_ORDER_TYPE = "orderType"; //$NON-NLS-1$ > public static final String P_ORDER_VALUE = "orderValue"; //$NON-NLS-1$ >+ public static final String P_GROUP_BY = "groupBy"; //$NON-NLS-1$ > > private int MESSAGE_ORDER; > private int PLUGIN_ORDER; >@@ -127,7 +132,11 @@ > public static int ASCENDING = 1; > public static int DESCENDING = -1; > >- private ArrayList fLogs; >+ public static final int GROUP_BY_NONE = 0; >+ public static final int GROUP_BY_SESSION = 1; >+ public static final int GROUP_BY_PLUGIN = 2; >+ >+ private List fLogs; > > private Clipboard fClipboard; > >@@ -664,8 +673,8 @@ > public void fillContextMenu(IMenuManager manager) { > } > >- public LogSession[] getLogs() { >- return (LogSession[]) fLogs.toArray(new LogSession[fLogs.size()]); >+ public AbstractEntry[] getLogs() { // TODO rename to getElements, reconsider this method! >+ return (AbstractEntry[]) fLogs.toArray(new AbstractEntry[fLogs.size()]); > } > > protected void handleClear() { >@@ -703,7 +712,65 @@ > fLogs.clear(); > if (!fInputFile.exists()) > return; >- LogReader.parseLogFile(fInputFile, fLogs, fMemento); >+ >+ List result = new ArrayList(); >+ LogReader.parseLogFile(fInputFile, result, fMemento); >+ group(result); // TODO make parseLogFile a function and have loa local var >+ } >+ >+ private void group(List entries) { >+ fLogs.clear(); >+ >+ if (fMemento.getInteger(P_GROUP_BY).intValue() == GROUP_BY_NONE) { >+ fLogs.addAll(entries); >+ } else { >+ Map groups = new HashMap(); >+ >+ for (Iterator i = entries.iterator(); i.hasNext(); ) { >+ LogEntry entry = (LogEntry) i.next(); >+ Group group = getGroup(groups, entry); >+ group.addChild(entry); >+ } >+ } >+ } >+ >+ /** >+ * Returns group appropriate for the entry. Group depends on P_GROUP_BY >+ * preference, or is null if grouping is disabled (GROUP_BY_NONE), or group >+ * could not be determined. May create group if it haven't existed before. >+ * >+ * @param entry entry to be grouped >+ * @return group or null if grouping is disabled >+ */ >+ protected Group getGroup(Map groups, LogEntry entry) { >+ >+ Object elementGroupId = null; >+ >+ switch (fMemento.getInteger(P_GROUP_BY).intValue()) { >+ case GROUP_BY_PLUGIN: >+ elementGroupId = entry.getPluginId(); >+ break; >+ >+ case GROUP_BY_SESSION: >+ elementGroupId = entry.getSession(); >+ break; >+ >+ default: // grouping is disabled >+ return null; >+ } >+ >+ if (elementGroupId == null) { // could not determine group >+ return null; >+ } >+ >+ Group group = (Group) groups.get(elementGroupId); >+ if (group == null) { >+ group = new Group(elementGroupId); >+ groups.put(elementGroupId, group); >+ fLogs.add(group); >+ } >+ >+ return group; > } > > public void logging(IStatus status, String plugin) { >@@ -723,7 +790,7 @@ > if (fLogs.isEmpty()) { > fLogs.add(new LogSession()); > } >- LogReader.addEntry(entry, ((LogSession)fLogs.get(fLogs.size() - 1)).getEntries(), fMemento, true); >+ LogReader.addEntry(entry, getCurrentSession(), fMemento, true); > asyncRefresh(); > } > >@@ -875,6 +942,9 @@ > } > fMemento.putInteger(P_ORDER_VALUE, DESCENDING); > fMemento.putInteger(P_ORDER_TYPE, DATE); >+ if (fMemento.getInteger(P_GROUP_BY) == null) { >+ fMemento.putInteger(P_GROUP_BY, GROUP_BY_NONE); >+ } > } > > public void saveState(IMemento memento) { >@@ -1017,8 +1087,8 @@ > } > } > >- private int getNumberOfParents(LogEntry entry){ >- LogEntry parent = (LogEntry)entry.getParent(entry); >+ private int getNumberOfParents(AbstractEntry entry){ >+ AbstractEntry parent = (AbstractEntry)entry.getParent(entry); > if (parent ==null) > return 0; > return 1 + getNumberOfParents(parent); >@@ -1176,6 +1246,7 @@ > fMemento.putInteger(P_ORDER_VALUE, order == 0 ? DESCENDING : order); > fMemento.putInteger(P_ORDER_TYPE, p.getInt(P_ORDER_TYPE)); > fMemento.putBoolean(P_SHOW_FILTER_TEXT, p.getBoolean(P_SHOW_FILTER_TEXT)); >+ fMemento.putInteger(P_GROUP_BY, p.getInt(P_GROUP_BY)); > } catch (NumberFormatException e) { > fMemento.putInteger(P_LOG_LIMIT, 50); > fMemento.putInteger(P_COLUMN_1, 300); >@@ -1183,6 +1254,7 @@ > fMemento.putInteger(P_COLUMN_3, 150); > fMemento.putInteger(P_ORDER_TYPE, DATE); > fMemento.putInteger(P_ORDER_VALUE, DESCENDING); >+ fMemento.putInteger(P_GROUP_BY, GROUP_BY_NONE); > } > } > >@@ -1251,4 +1323,8 @@ > protected File getLogFile() { > return fInputFile; > } >+ >+ private LogSession getCurrentSession() { >+ return ((LogSession)fLogs.get(fLogs.size() - 1)); // TODO If in grouping, it may be not a LogSession, but Group >+ } > } >Index: src/org/eclipse/ui/internal/views/log/LogEntry.java >=================================================================== >RCS file: /cvsroot/eclipse/org.eclipse.ui.views.log/src/org/eclipse/ui/internal/views/log/LogEntry.java,v >retrieving revision 1.2 >diff -u -r1.2 LogEntry.java >--- src/org/eclipse/ui/internal/views/log/LogEntry.java 1 Oct 2007 20:47:08 -0000 1.2 >+++ src/org/eclipse/ui/internal/views/log/LogEntry.java 16 Nov 2007 11:17:14 -0000 >@@ -13,24 +13,20 @@ > import java.io.PrintWriter; > import java.io.StringWriter; > import java.text.ParseException; >-import java.util.ArrayList; > import java.util.Date; > import java.util.StringTokenizer; > > import org.eclipse.core.runtime.IStatus; >-import org.eclipse.core.runtime.PlatformObject; > import org.eclipse.jface.resource.ImageDescriptor; > import org.eclipse.ui.model.IWorkbenchAdapter; > > import com.ibm.icu.text.SimpleDateFormat; > >-public class LogEntry extends PlatformObject implements IWorkbenchAdapter { >+public class LogEntry extends AbstractEntry { > > public static final String F_DATE_FORMAT = "yyyy-MM-dd HH:mm:ss.SSS"; //$NON-NLS-1$ > private static final SimpleDateFormat F_SDF = new SimpleDateFormat(F_DATE_FORMAT); > >- private ArrayList children; >- private LogEntry parent; > private String pluginId; > private int severity; > private int code; >@@ -85,21 +81,11 @@ > public String getSeverityText() { > return getSeverityText(severity); > } >- public boolean hasChildren() { >- return children != null && children.size() > 0; >- } >+ > public String toString() { > return getSeverityText(); > } >- /** >- * @see IWorkbenchAdapter#getChildren(Object) >- */ >- public Object[] getChildren(Object parent) { >- if (children == null) >- return new Object[0]; >- return children.toArray(); >- } >- >+ > /** > * @see IWorkbenchAdapter#getImageDescriptor(Object) > */ >@@ -114,17 +100,6 @@ > return getSeverityText(); > } > >- /** >- * @see IWorkbenchAdapter#getParent(Object) >- */ >- public Object getParent(Object obj) { >- return parent; >- } >- >- void setParent(LogEntry parent) { >- this.parent = parent; >- } >- > private String getSeverityText(int severity) { > switch (severity) { > case IStatus.ERROR : >@@ -279,19 +254,13 @@ > } > IStatus[] schildren = status.getChildren(); > if (schildren.length > 0) { >- children = new ArrayList(); > for (int i = 0; i < schildren.length; i++) { > LogEntry child = new LogEntry(schildren[i]); > addChild(child); > } > } > } >- void addChild(LogEntry child) { >- if (children == null) >- children = new ArrayList(); >- children.add(child); >- child.setParent(this); >- } >+ > public void write(PrintWriter writer) { > if (session != null) > writer.println(session.getSessionData()); >Index: src/org/eclipse/ui/internal/views/log/EventDetailsDialogAction.java >=================================================================== >RCS file: /cvsroot/eclipse/org.eclipse.ui.views.log/src/org/eclipse/ui/internal/views/log/EventDetailsDialogAction.java,v >retrieving revision 1.2 >diff -u -r1.2 EventDetailsDialogAction.java >--- src/org/eclipse/ui/internal/views/log/EventDetailsDialogAction.java 22 Oct 2007 15:18:42 -0000 1.2 >+++ src/org/eclipse/ui/internal/views/log/EventDetailsDialogAction.java 16 Nov 2007 11:17:14 -0000 >@@ -81,7 +81,7 @@ > > //get initial selection > IAdaptable element = (IAdaptable) getStructuredSelection().getFirstElement(); >- if ((element == null) || (element instanceof LogSession)) >+ if ((element == null) || (! (element instanceof AbstractEntry))) > return; > > propertyDialog = new EventDetailsDialog(shell, element, provider, comparator); >Index: src/org/eclipse/ui/internal/views/log/LogViewContentProvider.java >=================================================================== >RCS file: /cvsroot/eclipse/org.eclipse.ui.views.log/src/org/eclipse/ui/internal/views/log/LogViewContentProvider.java,v >retrieving revision 1.2 >diff -u -r1.2 LogViewContentProvider.java >--- src/org/eclipse/ui/internal/views/log/LogViewContentProvider.java 22 Oct 2007 15:18:42 -0000 1.2 >+++ src/org/eclipse/ui/internal/views/log/LogViewContentProvider.java 16 Nov 2007 11:17:16 -0000 >@@ -11,8 +11,6 @@ > *******************************************************************************/ > package org.eclipse.ui.internal.views.log; > >-import java.util.List; >- > import org.eclipse.jface.viewers.ITreeContentProvider; > import org.eclipse.jface.viewers.Viewer; > >@@ -25,11 +23,7 @@ > public void dispose() { > } > public Object[] getChildren(Object element) { >- if (element instanceof LogSession) { >- List entries = ((LogSession) element).getEntries(); >- return entries.toArray(new LogEntry[entries.size()]); >- } >- return ((LogEntry) element).getChildren(element); >+ return ((AbstractEntry) element).getChildren(element); > } > public Object[] getElements(Object element) { > return logView.getLogs(); >@@ -41,10 +35,7 @@ > return ((LogEntry) element).getParent(element); > } > public boolean hasChildren(Object element) { >- if (element instanceof LogSession) { >- return ((LogSession) element).getEntries().size() > 0; >- } >- return ((LogEntry) element).hasChildren(); >+ return ((AbstractEntry) element).getChildren(element).length > 0; > } > public void inputChanged(Viewer viewer, Object oldInput, Object newInput) { > } >Index: src/org/eclipse/ui/internal/views/log/EventDetailsDialog.java >=================================================================== >RCS file: /cvsroot/eclipse/org.eclipse.ui.views.log/src/org/eclipse/ui/internal/views/log/EventDetailsDialog.java,v >retrieving revision 1.5 >diff -u -r1.5 EventDetailsDialog.java >--- src/org/eclipse/ui/internal/views/log/EventDetailsDialog.java 25 Oct 2007 15:54:49 -0000 1.5 >+++ src/org/eclipse/ui/internal/views/log/EventDetailsDialog.java 16 Nov 2007 11:17:11 -0000 >@@ -15,8 +15,8 @@ > import java.io.PrintWriter; > import java.io.StringWriter; > import java.text.Collator; >+import java.util.ArrayList; > import java.util.Arrays; >-import java.util.Collections; > import java.util.Comparator; > import java.util.Date; > import java.util.List; >@@ -29,6 +29,7 @@ > import org.eclipse.jface.viewers.ISelection; > import org.eclipse.jface.viewers.ISelectionProvider; > import org.eclipse.jface.viewers.IStructuredSelection; >+import org.eclipse.jface.viewers.ITreeContentProvider; > import org.eclipse.jface.viewers.StructuredSelection; > import org.eclipse.jface.viewers.TreeViewer; > import org.eclipse.swt.SWT; >@@ -49,12 +50,18 @@ > import org.eclipse.ui.PlatformUI; > > public class EventDetailsDialog extends TrayDialog { >- private LogEntry entry, parentEntry; >+ private AbstractEntry entry; >+ private AbstractEntry parentEntry; // parent of the entry >+ private AbstractEntry[] entryChildren; // children of the entry >+ > private LogViewLabelProvider labelProvider; >- private static int COPY_ID = 22; > private TreeViewer provider; >- private int elementNum, totalElementCount; >- private LogEntry[] entryChildren; >+ >+ private static int COPY_ID = 22; >+ >+ private int elementNum; // number of selected element >+ private int totalElementCount; // number of all elements >+ > private int childIndex = 0; > private boolean isOpen; > private boolean isLastChild; >@@ -93,7 +100,7 @@ > this.provider = (TreeViewer) provider; > labelProvider = (LogViewLabelProvider)this.provider.getLabelProvider(); > labelProvider.connect(this); >- this.entry = (LogEntry)selection; >+ this.entry = (AbstractEntry)selection; > this.comparator = comparator; > setShellStyle(SWT.MODELESS | SWT.MIN | SWT.MAX | SWT.RESIZE | SWT.CLOSE | SWT.BORDER | SWT.TITLE); > clipboard = new Clipboard(parentShell.getDisplay()); >@@ -107,7 +114,7 @@ > private void initialize() { > elementNum = getParentElementNum(); > resetTotalElementCount(); >- parentEntry = (LogEntry) entry.getParent(entry); >+ parentEntry = (AbstractEntry) entry.getParent(entry); > if (isChild(entry)){ > setEntryChildren(parentEntry); > resetChildIndex(); >@@ -117,16 +124,30 @@ > } > > private void resetChildIndex() { >+ if (! (entry instanceof AbstractEntry)) { >+ return; >+ } >+ >+ if (entryChildren == null) >+ return; >+ >+ LogEntry thisEntry = (LogEntry) entry; >+ > for (int i = 0; i < entryChildren.length; i++) { >- if (equal(entryChildren[i].getMessage(), entry.getMessage()) >- && equal(entryChildren[i].getDate(), entry.getDate()) >- && equal(entryChildren[i].getPluginId(), entry >- .getPluginId()) >- && entryChildren[i].getSeverity() == entry.getSeverity() >- && equal(entryChildren[i].getSeverityText(), entry >- .getSeverityText())) { >- childIndex = i; >- break; >+ if (entryChildren[i] instanceof LogEntry) { >+ >+ LogEntry logEntry = (LogEntry) entryChildren[i]; >+ >+ if (equal(logEntry.getMessage(), thisEntry.getMessage()) >+ && equal(logEntry.getDate(), thisEntry.getDate()) >+ && equal(logEntry.getPluginId(), thisEntry >+ .getPluginId()) >+ && logEntry.getSeverity() == thisEntry.getSeverity() >+ && equal(logEntry.getSeverityText(), thisEntry >+ .getSeverityText())) { >+ childIndex = i; >+ break; >+ } > } > } > } >@@ -144,7 +165,7 @@ > return d1.equals(d2); > } > >- private boolean isChild(LogEntry entry) { >+ private boolean isChild(AbstractEntry entry) { > return entry.getParent(entry) != null; > } > >@@ -306,8 +327,8 @@ > updateProperties(); > return; > } >- if (selectedEntry instanceof LogEntry) { >- entry = (LogEntry)selectedEntry; >+ if (selectedEntry instanceof AbstractEntry) { >+ entry = (AbstractEntry)selectedEntry; > initialize(); > updateProperties(); > } >@@ -325,7 +346,7 @@ > > public void updateProperties() { > if (isChild(entry)){ >- parentEntry = (LogEntry) entry.getParent(entry); >+ parentEntry = (AbstractEntry) entry.getParent(entry); > setEntryChildren(parentEntry); > resetChildIndex(); > if (childIndex == entryChildren.length - 1) >@@ -334,21 +355,37 @@ > > resetTotalElementCount(); > >- String strDate = entry.getFormattedDate(); >- dateLabel.setText(strDate); >- severityImageLabel.setImage(labelProvider.getColumnImage(entry, 0)); >- severityLabel.setText(entry.getSeverityText()); >- msgText.setText(entry.getMessage() != null ? entry.getMessage() : ""); //$NON-NLS-1$ >- String stack = entry.getStack(); >- if (stack != null) { >- stackTraceText.setText(stack); >- } else { >- stackTraceText.setText(Messages.EventDetailsDialog_noStack); >+ LogSession session = null; >+ >+ if (entry instanceof LogEntry) { >+ LogEntry logEntry = (LogEntry) entry; >+ >+ String strDate = logEntry.getFormattedDate(); >+ dateLabel.setText(strDate); >+ severityImageLabel.setImage(labelProvider.getColumnImage(entry, 0)); >+ severityLabel.setText(logEntry.getSeverityText()); >+ msgText.setText(logEntry.getMessage() != null ? logEntry.getMessage() : ""); //$NON-NLS-1$ >+ String stack = logEntry.getStack(); >+ if (stack != null) { >+ stackTraceText.setText(stack); >+ } else { >+ stackTraceText.setText(Messages.EventDetailsDialog_noStack); >+ } >+ session = logEntry.getSession(); >+ >+ } else if (entry instanceof LogSession) { >+ session = (LogSession) entry; >+ >+ dateLabel.setText(""); //$NON-NLS-1$ >+ severityImageLabel.setImage(null); >+ severityLabel.setText(""); //$NON-NLS-1$ >+ msgText.setText(""); //$NON-NLS-1$ >+ stackTraceText.setText(""); //$NON-NLS-1$ > } >- LogSession session = entry.getSession(); >+ > if (session != null && session.getSessionData() != null) > sessionDataText.setText(session.getSessionData()); >- >+ > updateButtons(); > } > >@@ -363,15 +400,15 @@ > } > } > >- private void findNextSelectedChild(LogEntry originalEntry){ >+ private void findNextSelectedChild(AbstractEntry originalEntry){ > if (isChild (parentEntry)){ > // we're at the end of the child list; find next parent > // to select. If the parent is a child at the end of the child > // list, find its next parent entry to select, etc. > > entry = parentEntry; >- setEntryChildren((LogEntry)parentEntry.getParent(parentEntry)); >- parentEntry = (LogEntry)parentEntry.getParent(parentEntry); >+ setEntryChildren((AbstractEntry)parentEntry.getParent(parentEntry)); >+ parentEntry = (AbstractEntry)parentEntry.getParent(parentEntry); > resetChildIndex(); > isLastChild = childIndex == entryChildren.length-1; > if (isLastChild){ >@@ -386,15 +423,15 @@ > } > } > >- private boolean nextChildExists(LogEntry originalEntry, LogEntry originalParent, LogEntry[] originalEntries){ >+ private boolean nextChildExists(AbstractEntry originalEntry, AbstractEntry originalParent, AbstractEntry[] originalEntries){ > if (isChild (parentEntry)){ > // we're at the end of the child list; find next parent > // to select. If the parent is a child at the end of the child > // list, find its next parent entry to select, etc. > > entry = parentEntry; >- setEntryChildren((LogEntry)parentEntry.getParent(parentEntry)); >- parentEntry = (LogEntry)parentEntry.getParent(parentEntry); >+ setEntryChildren((AbstractEntry)parentEntry.getParent(parentEntry)); >+ parentEntry = (AbstractEntry)parentEntry.getParent(parentEntry); > resetChildIndex(); > if (childIndex == entryChildren.length-1){ > nextChildExists(originalEntry, originalParent, originalEntries); >@@ -413,39 +450,67 @@ > return false; > > } >+ >+ /** >+ * Sets entry children (Prev-Next navigable) to top-level elements >+ */ > private void setEntryChildren(){ >- Object[] children = ((LogViewContentProvider)provider.getContentProvider()).getElements(null); >+ AbstractEntry[] children = getElements(); > > if (comparator != null) > Arrays.sort(children, comparator); >- entryChildren = new LogEntry[children.length]; >+ entryChildren = new AbstractEntry[children.length]; > > System.arraycopy(children,0,entryChildren,0,children.length); > } > > private void resetTotalElementCount(){ >- totalElementCount = entry.getSession().getEntries().size(); >+ AbstractEntry parent = ((AbstractEntry)entry.getParent(entry)); >+ if (parent == null) { >+ totalElementCount = getElements().length; >+ } else { >+ totalElementCount = parent.getChildren(parent).length; >+ } > } > >- private void setEntryChildren(LogEntry entry){ >- LogSession session = entry.getSession(); >- if (session == null) >- return; >+ /** >+ * Sets entry children (Prev-Next navigable) to children of given entry >+ */ >+ private void setEntryChildren(AbstractEntry entry){ >+ Object[] children = entry.getChildren(entry); > >- List children = session.getEntries(); > if (comparator != null) >- Collections.sort(children, comparator); >- entryChildren = (LogEntry[])children.toArray(new LogEntry[children.size()]); >+ Arrays.sort(children, comparator); >+ >+ List result = new ArrayList(); >+ for (int i = 0; i < children.length; i++) { >+ if (children[i] instanceof AbstractEntry) { >+ result.add(children[i]); >+ } >+ } >+ >+ entryChildren = (AbstractEntry[])result.toArray(new AbstractEntry[result.size()]); > } >- >+ >+ /** >+ * Returns number of children of current parent node. >+ * @return >+ */ > private int getParentElementNum(){ >- LogEntry itemEntry = (LogEntry)((IStructuredSelection)provider.getSelection()).getFirstElement(); >- itemEntry = getRootEntry(itemEntry); >+ AbstractEntry itemEntry = (AbstractEntry)((IStructuredSelection)provider.getSelection()).getFirstElement(); >+ >+ //itemEntry = getRootEntry(itemEntry); >+ >+ AbstractEntry itemParent = (AbstractEntry) itemEntry.getParent(itemEntry); >+ if (itemParent != null) { >+ setEntryChildren(itemEntry); >+ } else { >+ setEntryChildren(); // if at top level, the children are top-level >+ } > >- setEntryChildren(itemEntry); > for (int i = 0; i<entryChildren.length; i++){ > try { >- LogEntry littleEntry = entryChildren[i]; >+ AbstractEntry littleEntry = entryChildren[i]; > if (itemEntry.equals(littleEntry)){ > return i; > } >@@ -456,12 +521,6 @@ > return 0; > } > >- private LogEntry getRootEntry(LogEntry entry){ >- if (!isChild(entry)) >- return entry; >- return getRootEntry((LogEntry)entry.getParent(entry)); >- } >- > public SashForm getSashForm(){ > return sashForm; > } >@@ -696,4 +755,12 @@ > s.put("sashWidth1", sashWeights[0]); //$NON-NLS-1$ > s.put("sashWidth2", sashWeights[1]); //$NON-NLS-1$ > } >+ >+ /** >+ * Utility method to get all top level elements of the Log View >+ * @return top level elements of the Log View >+ */ >+ private AbstractEntry[] getElements() { >+ return (AbstractEntry[])((ITreeContentProvider)provider.getContentProvider()).getElements(null); >+ } > } >Index: src/org/eclipse/ui/internal/views/log/LogReader.java >=================================================================== >RCS file: /cvsroot/eclipse/org.eclipse.ui.views.log/src/org/eclipse/ui/internal/views/log/LogReader.java,v >retrieving revision 1.4 >diff -u -r1.4 LogReader.java >--- src/org/eclipse/ui/internal/views/log/LogReader.java 24 Oct 2007 20:02:28 -0000 1.4 >+++ src/org/eclipse/ui/internal/views/log/LogReader.java 16 Nov 2007 11:17:14 -0000 >@@ -38,7 +38,7 @@ > > private static LogSession currentSession; > >- public static void parseLogFile(File file, ArrayList sessions, IMemento memento) { >+ public static void parseLogFile(File file, List entries, IMemento memento) { > if (memento.getString(LogView.P_USE_LIMIT).equals("true") //$NON-NLS-1$ > && memento.getInteger(LogView.P_LOG_LIMIT).intValue() == 0) > return; >@@ -112,19 +112,17 @@ > updateCurrentSession(session); > // if current session is most recent and not showing all sessions > if (currentSession.equals(session) && !memento.getString(LogView.P_SHOW_ALL_SESSIONS).equals("true")) //$NON-NLS-1$ >- sessions.clear(); >- sessions.add(currentSession); >+ entries.clear(); > } else if (state == ENTRY_STATE) { > if (currentSession == null) { // create fake session if there was no any > currentSession = new LogSession(); >- sessions.add(currentSession); > } > LogEntry entry = new LogEntry(); > entry.setSession(currentSession); > entry.processEntry(line); > setNewParent(parents, entry, 0); > current = entry; >- addEntry(current, currentSession.getEntries(), memento, false); >+ addEntry(current, entries, memento, false); > } else if (state == SUBENTRY_STATE) { > if (parents.size() > 0) { > LogEntry entry = new LogEntry(); >@@ -199,11 +197,44 @@ > if (doAdd) { > if (useCurrentSession) > current.setSession(currentSession); >+ > entries.add(0, current); > >- if (memento.getString(LogView.P_USE_LIMIT).equals("true") //$NON-NLS-1$ >- && entries.size() > memento.getInteger(LogView.P_LOG_LIMIT).intValue()) >- entries.remove(entries.size() - 1); >+ if (memento.getString(LogView.P_USE_LIMIT).equals("true")) {//$NON-NLS-1$ >+ int limit = memento.getInteger(LogView.P_LOG_LIMIT).intValue(); >+ if (entries.size() > limit) { >+ entries.remove(entries.size() - 1); >+ } >+ } >+ } >+ } >+ >+ // TODO Merge two addEntry methods into one >+ public synchronized static void addEntry(LogEntry current, LogSession session, IMemento memento, boolean useCurrentSession) { >+ int severity = current.getSeverity(); >+ boolean doAdd = true; >+ switch(severity) { >+ case IStatus.INFO: >+ doAdd = memento.getString(LogView.P_LOG_INFO).equals("true"); //$NON-NLS-1$ >+ break; >+ case IStatus.WARNING: >+ doAdd = memento.getString(LogView.P_LOG_WARNING).equals("true"); //$NON-NLS-1$ >+ break; >+ case IStatus.ERROR: >+ doAdd = memento.getString(LogView.P_LOG_ERROR).equals("true"); //$NON-NLS-1$ >+ break; >+ } >+ if (doAdd) { >+ if (useCurrentSession) >+ current.setSession(currentSession); >+ >+ >+ session.addChild(current); >+ >+ if (memento.getString(LogView.P_USE_LIMIT).equals("true")) {//$NON-NLS-1$ >+ int limit = memento.getInteger(LogView.P_LOG_LIMIT).intValue(); >+ session.addChild(current, limit); >+ } > } > } > >Index: src/org/eclipse/ui/internal/views/log/FilterDialog.java >=================================================================== >RCS file: /cvsroot/eclipse/org.eclipse.ui.views.log/src/org/eclipse/ui/internal/views/log/FilterDialog.java,v >retrieving revision 1.1 >diff -u -r1.1 FilterDialog.java >--- src/org/eclipse/ui/internal/views/log/FilterDialog.java 1 Oct 2007 20:39:31 -0000 1.1 >+++ src/org/eclipse/ui/internal/views/log/FilterDialog.java 16 Nov 2007 11:17:14 -0000 >@@ -21,6 +21,7 @@ > import org.eclipse.swt.layout.GridData; > import org.eclipse.swt.layout.GridLayout; > import org.eclipse.swt.widgets.Button; >+import org.eclipse.swt.widgets.Combo; > import org.eclipse.swt.widgets.Composite; > import org.eclipse.swt.widgets.Control; > import org.eclipse.swt.widgets.Group; >@@ -39,6 +40,11 @@ > private Button infoButton; > private Button showAllButton; > private IMemento memento; >+ private Combo groupByCombo; >+ >+ private static final String[] groupByItems = new String[] { // groupByItems must have the same order as their respective LogView.GROUP_BY_* consts >+ "None", "Session", "Plug-in" //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ // TODO EXTERNALIZE >+ }; > > public FilterDialog(Shell parentShell, IMemento memento) { > super(parentShell); >@@ -50,6 +56,7 @@ > createEventTypesGroup(container); > createLimitSection(container); > createSessionSection(container); >+ createGroupBySection(container); > > Dialog.applyDialogFont(container); > return container; >@@ -136,6 +143,22 @@ > } > } > >+ protected void createGroupBySection(Composite parent) { >+ Composite container = new Composite(parent, SWT.NONE); >+ container.setLayout(new GridLayout()); >+ container.setLayoutData(new GridData(GridData.FILL_HORIZONTAL)); >+ >+ Label label = new Label(container, SWT.NONE); >+ label.setText("Group by"); //$NON-NLS-1$ //TODO EXTERNALIZE >+ >+ groupByCombo = new Combo(container, SWT.NONE); >+ groupByCombo.setItems(groupByItems); >+ >+ Integer value = memento.getInteger(LogView.P_GROUP_BY); >+ groupByCombo.select(value == null ? LogView.GROUP_BY_NONE : value >+ .intValue()); >+ } >+ > protected void createButtonsForButtonBar(Composite parent) { > okButton = createButton( > parent, >@@ -156,6 +179,7 @@ > memento.putString(LogView.P_LOG_LIMIT, limitText.getText()); > memento.putString(LogView.P_USE_LIMIT, limit.getSelection() ? "true" : "false"); //$NON-NLS-1$ //$NON-NLS-2$ > memento.putString(LogView.P_SHOW_ALL_SESSIONS, showAllButton.getSelection() ? "true" : "false"); //$NON-NLS-1$ //$NON-NLS-2$ >+ memento.putInteger(LogView.P_GROUP_BY, groupByCombo.getSelectionIndex()); > super.okPressed(); > } > >Index: src/org/eclipse/ui/internal/views/log/AbstractEntry.java >=================================================================== >RCS file: src/org/eclipse/ui/internal/views/log/AbstractEntry.java >diff -N src/org/eclipse/ui/internal/views/log/AbstractEntry.java >--- /dev/null 1 Jan 1970 00:00:00 -0000 >+++ src/org/eclipse/ui/internal/views/log/AbstractEntry.java 1 Jan 1970 00:00:00 -0000 >@@ -0,0 +1,74 @@ >+package org.eclipse.ui.internal.views.log; >+ >+import java.io.PrintWriter; >+import java.util.ArrayList; >+import java.util.List; >+ >+import org.eclipse.core.runtime.PlatformObject; >+import org.eclipse.jface.resource.ImageDescriptor; >+import org.eclipse.ui.model.IWorkbenchAdapter; >+ >+/** >+ * >+ * >+ */ >+public abstract class AbstractEntry extends PlatformObject implements IWorkbenchAdapter { >+ >+ private List children; >+ private Object parent; >+ >+ public void addChild(AbstractEntry child) { >+ if (children == null) { >+ children = new ArrayList(); >+ } >+ children.add(0, child); >+ child.setParent(this); >+ } >+ >+ public void addChild(AbstractEntry child, int limit) { >+ addChild(child); >+ if (children.size() > limit) { >+ children.remove(children.size() - 1); >+ } >+ } >+ >+ /** >+ * @see IWorkbenchAdapter#getChildren(Object) >+ */ >+ public Object[] getChildren(Object parent) { >+ if (children == null) >+ return new Object[0]; >+ return children.toArray(); >+ } >+ >+ public boolean hasChildren() { >+ return children != null && children.size() > 0; >+ } >+ >+ /** >+ * @see IWorkbenchAdapter#getImageDescriptor(Object) >+ */ >+ public ImageDescriptor getImageDescriptor(Object object) { >+ return null; >+ } >+ >+ /** >+ * @see IWorkbenchAdapter#getLabel(Object) >+ */ >+ public String getLabel(Object o) { >+ return null; >+ } >+ >+ /** >+ * @see IWorkbenchAdapter#getParent(Object) >+ */ >+ public Object getParent(Object o) { >+ return parent; >+ } >+ >+ public void setParent(AbstractEntry parent) { >+ this.parent = parent; >+ } >+ >+ public abstract void write(PrintWriter writer); >+} >Index: src/org/eclipse/ui/internal/views/log/Group.java >=================================================================== >RCS file: src/org/eclipse/ui/internal/views/log/Group.java >diff -N src/org/eclipse/ui/internal/views/log/Group.java >--- /dev/null 1 Jan 1970 00:00:00 -0000 >+++ src/org/eclipse/ui/internal/views/log/Group.java 1 Jan 1970 00:00:00 -0000 >@@ -0,0 +1,28 @@ >+package org.eclipse.ui.internal.views.log; >+ >+import java.io.PrintWriter; >+ >+public class Group extends AbstractEntry { >+ >+ private Object groupId; >+ >+ public Group(Object groupId) { >+ this.groupId = groupId; >+ } >+ >+ public void write(PrintWriter writer) { >+ // empty >+ } >+ >+ public int hashCode() { >+ return groupId.hashCode(); >+ } >+ >+ public boolean equals(Object o) { >+ return groupId.equals(o); >+ } >+ >+ public String toString() { >+ return groupId.toString(); >+ } >+}
You cannot view the attachment while viewing its details because your browser does not support IFRAMEs.
View the attachment on a separate page
.
View Attachment As Diff
View Attachment As Raw
Actions:
View
|
Diff
Attachments on
bug 207344
:
82406
|
82979
|
83056
|
83136
|
84099
|
84161
|
84162
|
84261
|
84273