/******************************************************************************* * Copyright (c) 2009 the CHISEL group and contributors. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html * * Contributors: * the CHISEL group - initial API and implementation *******************************************************************************/ package ca.uvic.chisel.javasketch.ui.internal.presentation.properties; import java.text.DateFormat; import java.util.Date; import org.eclipse.jface.layout.GridDataFactory; import org.eclipse.swt.SWT; import org.eclipse.swt.custom.CLabel; import org.eclipse.swt.custom.StackLayout; 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.Text; import org.eclipse.ui.views.properties.tabbed.TabbedPropertySheetPage; import ca.uvic.chisel.javasketch.data.model.IActivation; import ca.uvic.chisel.javasketch.data.model.IMessage; import ca.uvic.chisel.javasketch.data.model.IOriginMessage; import ca.uvic.chisel.javasketch.data.model.ITargetMessage; import ca.uvic.chisel.javasketch.data.model.IThread; import ca.uvic.chisel.javasketch.data.model.ITrace; import ca.uvic.chisel.javasketch.data.model.ITraceClass; import ca.uvic.chisel.javasketch.data.model.ITraceClassMethod; /** * @author Del Myers * */ public class GeneralDetailsPropertySection extends TraceModelPropertySection { private Composite detailsGroup; private Control emptyDetails; private Control traceDetails; private Control activationDetails; private Control messageDetails; private Control objectDetails; private GridDataFactory labelFactory; private GridDataFactory labelTextFactory; private Text activeFromText; private Text activeTimeText; private Text originText; private Text targetText; private Text messageTimeText; private Text traceTime; private Text analysisTime; private Text threadCount; private Control threadDetails; private Text messageLineText; /** * */ public GeneralDetailsPropertySection() { labelFactory = GridDataFactory.createFrom(new GridData(SWT.FILL, SWT.FILL, false, false)); labelTextFactory = GridDataFactory.createFrom(new GridData(SWT.FILL, SWT.FILL, true, false)); } /* (non-Javadoc) * @see org.eclipse.ui.views.properties.tabbed.AbstractPropertySection#createControls(org.eclipse.swt.widgets.Composite, org.eclipse.ui.views.properties.tabbed.TabbedPropertySheetPage) */ @Override public void createControls(Composite parent, TabbedPropertySheetPage aTabbedPropertySheetPage) { super.createControls(parent, aTabbedPropertySheetPage); Composite form = getWidgetFactory().createFlatFormComposite(parent); detailsGroup = getWidgetFactory().createComposite(form); detailsGroup.setLayout(new StackLayout()); createDetailsPages(detailsGroup); } /** * @param detailsGroup2 */ private void createDetailsPages(Composite parent) { StackLayout stack = new StackLayout(); parent.setLayout(stack); this.emptyDetails = createEmptyDetails(parent); this.traceDetails = createTraceDetails(parent); this.activationDetails = createActivationDetails(parent); this.messageDetails = createMessageDetails(parent); this.objectDetails = createObjectDetails(parent); this.threadDetails = createThreadDetails(parent); } /** * @param parent * @return */ private Control createThreadDetails(Composite parent) { return createEmptyDetails(parent); } private Control createTraceDetails(Composite parent) { Composite details = getWidgetFactory().createComposite(parent); details.setLayout(new GridLayout(2, false)); CLabel timeLabel = getWidgetFactory().createCLabel(details, "Trace Time:"); timeLabel.setLayoutData(labelFactory.create()); traceTime = getWidgetFactory().createText(details, "", SWT.READ_ONLY); traceTime.setLayoutData(labelTextFactory.create()); CLabel analysisLabel = getWidgetFactory().createCLabel(details, "Analysis Time:"); analysisLabel.setLayoutData(labelFactory.create()); analysisTime = getWidgetFactory().createText(details, "", SWT.READ_ONLY); analysisTime.setLayoutData(labelTextFactory.create()); CLabel threadCountLabel = getWidgetFactory().createCLabel(details, "Threads:"); threadCountLabel.setLayoutData(labelFactory.create()); threadCount = getWidgetFactory().createText(details, "", SWT.READ_ONLY); threadCount.setLayoutData(labelTextFactory.create()); return details; } private Control createActivationDetails(Composite parent) { Composite details = getWidgetFactory().createComposite(parent); details.setLayout(new GridLayout(2, false)); CLabel activeFromLabel = getWidgetFactory().createCLabel(details, "Called From:"); activeFromLabel.setLayoutData(labelFactory.create()); activeFromText = getWidgetFactory().createText(details, "", SWT.READ_ONLY); activeFromText.setLayoutData(labelTextFactory.create()); CLabel timeLabel = getWidgetFactory().createCLabel(details, "Time:"); timeLabel.setLayoutData(labelFactory.create()); activeTimeText = getWidgetFactory().createText(details, "", SWT.READ_ONLY); activeTimeText.setLayoutData(labelTextFactory.create()); return details; } private Control createMessageDetails(Composite parent) { Composite details = getWidgetFactory().createComposite(parent); details.setLayout(new GridLayout(2, false)); CLabel originLabel = getWidgetFactory().createCLabel(details, "Source:"); originLabel.setLayoutData(labelFactory.create()); originText = getWidgetFactory().createText(details, "", SWT.READ_ONLY); originText.setLayoutData(labelTextFactory.create()); CLabel targetLabel = getWidgetFactory().createCLabel(details, "Target:"); targetLabel.setLayoutData(labelFactory.create()); targetText = getWidgetFactory().createText(details, "", SWT.READ_ONLY); targetText.setLayoutData(labelTextFactory.create()); CLabel timeLabel = getWidgetFactory().createCLabel(details, "Time:"); timeLabel.setLayoutData(labelFactory.create()); messageTimeText = getWidgetFactory().createText(details, "", SWT.READ_ONLY); messageTimeText.setLayoutData(labelTextFactory.create()); CLabel lineLabel = getWidgetFactory().createCLabel(details, "Line Number:"); lineLabel.setLayoutData(labelFactory.create()); messageLineText = getWidgetFactory().createText(details, "", SWT.READ_ONLY); messageLineText.setLayoutData(labelTextFactory.create()); return details; } private Control createObjectDetails(Composite parent) { return createEmptyDetails(parent); } private Control createEmptyDetails(Composite parent) { Label label = getWidgetFactory().createLabel(parent, "No details"); return label; } /* (non-Javadoc) * @see org.eclipse.ui.views.properties.tabbed.AbstractPropertySection#refresh() */ @Override public void refresh() { Object traceModel = getModelObject(); if (traceModel instanceof IActivation) { refreshActivation((IActivation)traceModel); } else if (traceModel instanceof IMessage) { refreshMessage((IMessage)traceModel); } else if (traceModel instanceof ITrace) { refreshTrace((ITrace)traceModel); } else if (traceModel instanceof ITraceClass) { refreshObject((ITraceClass)traceModel); } else if (traceModel instanceof IThread) { refreshThread((IThread)traceModel); } else { setTopControl(emptyDetails); } } /** * @param traceModel */ private void refreshThread(IThread traceModel) { setTopControl(threadDetails); } /** * @param traceModel */ private void refreshObject(ITraceClass traceModel) { setTopControl(objectDetails); } /** * @param traceModel */ private void refreshTrace(ITrace traceModel) { DateFormat format = DateFormat.getDateInstance(DateFormat.LONG); try { traceTime.setText(format.format(traceModel.getTraceTime())); analysisTime.setText(format.format(traceModel.getDataTime())); threadCount.setText(traceModel.getThreads().size() + ""); } catch (NullPointerException e) {} setTopControl(traceDetails); } /** * @param traceModel */ private void refreshMessage(IMessage traceModel) { String source = ""; String target = ""; String time = ""; int line = -1; IActivation sourceActivation = null; IActivation targetActivation = null; try { if (traceModel instanceof IOriginMessage) { sourceActivation = traceModel.getActivation(); targetActivation = ((IOriginMessage)traceModel).getTarget().getActivation(); line = ((IOriginMessage)traceModel).codeLine(); } else { targetActivation = traceModel.getActivation(); sourceActivation = ((ITargetMessage)traceModel).getOrigin().getActivation(); if (((ITargetMessage)traceModel).getOrigin() != null) { line = ((ITargetMessage)traceModel).getOrigin().codeLine(); } } ITraceClassMethod sm = sourceActivation.getMethod(); ITraceClassMethod tm = targetActivation.getMethod(); source = sm.getTraceClass().getName() + "." + sm.getName(); target = tm.getTraceClass().getName() + "." + tm.getName(); long tl = sourceActivation.getTime(); time = DateFormat.getTimeInstance(DateFormat.MEDIUM).format(new Date(tl)); } catch (NullPointerException e) {} originText.setText(source); targetText.setText(target); messageTimeText.setText(time); messageLineText.setText(line + ""); setTopControl(messageDetails); } /** * @param traceModel */ private void refreshActivation(IActivation traceModel) { long time = traceModel.getTime(); DateFormat format = DateFormat.getTimeInstance(DateFormat.MEDIUM); activeTimeText.setText(format.format(new Date(time))); String from = ""; try { ITraceClassMethod method = traceModel.getArrival().getOrigin().getActivation().getMethod(); ITraceClass tc = method.getTraceClass(); from = tc.getName() + "." + method.getName(); } catch (NullPointerException e) {} activeFromText.setText(from); setTopControl(activationDetails); } /** * @param activationDetails2 */ private void setTopControl(Control details) { ((StackLayout)detailsGroup.getLayout()).topControl = details; detailsGroup.layout(); } }