blob: 28fc2b5a1a33eaf8c6f6591ee8f4eae92e3169fb [file] [log] [blame]
/*******************************************************************************
* <copyright>
*
* Copyright (c) 2005, 2012 SAP AG.
* 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:
* SAP AG - initial API, implementation and documentation
* cbrand - Bug 377783 - Dump for figures in connection layer needed
*
* </copyright>
*
*******************************************************************************/
package org.eclipse.graphiti.ui.internal.services.impl;
import java.io.PrintWriter;
import java.io.StringWriter;
import java.util.Collection;
import java.util.List;
import org.eclipse.draw2d.FreeformLayeredPane;
import org.eclipse.draw2d.IFigure;
import org.eclipse.draw2d.Label;
import org.eclipse.emf.ecore.EObject;
import org.eclipse.gef.EditPart;
import org.eclipse.graphiti.datatypes.IDimension;
import org.eclipse.graphiti.mm.algorithms.GraphicsAlgorithm;
import org.eclipse.graphiti.mm.algorithms.styles.Style;
import org.eclipse.graphiti.mm.pictograms.PictogramElement;
import org.eclipse.graphiti.services.Graphiti;
import org.eclipse.graphiti.ui.internal.figures.GFMultilineText;
import org.eclipse.graphiti.ui.internal.services.GraphitiUiInternal;
import org.eclipse.graphiti.ui.internal.services.ITraceService;
/**
* @noinstantiate This class is not intended to be instantiated by clients.
* @noextend This class is not intended to be subclassed by clients.
*/
public class TraceService implements ITraceService {
private final boolean FULL_QUALIFIED = false;
private final boolean ADD_OBJECT_INFO = false;
private final boolean ADD_STYLE_INFO = false;
public String getStacktrace(Throwable t) {
if (t == null)
return null;
StringWriter writer = new StringWriter();
t.printStackTrace(new PrintWriter(writer));
return writer.toString();
}
public void dumpFigureTree(IFigure figure) {
System.out.println("\nFigure Tree"); //$NON-NLS-1$
dumpFigureTree(figure, 0);
}
public void dumpFigureTree(IFigure figure, int indent) {
String indentString = createIndentString(indent);
String additional = ""; //$NON-NLS-1$
if (figure instanceof Label) {
Label label = (Label) figure;
additional = " (text: " + label.getText() + ")"; //$NON-NLS-1$ //$NON-NLS-2$
}
if (figure instanceof GFMultilineText) {
GFMultilineText mlt = (GFMultilineText) figure;
additional = additional + " (text: " + mlt.getText() + ")"; //$NON-NLS-1$ //$NON-NLS-2$
}
if (!figure.isVisible()) {
additional = additional + " (NOT visible)"; //$NON-NLS-1$
}
additional = additional + " (" + figure.getBounds() + ")"; //$NON-NLS-1$ //$NON-NLS-2$
if (ADD_OBJECT_INFO) {
additional = additional + " (" + getObjectInfo(figure) + ")"; //$NON-NLS-1$ //$NON-NLS-2$
}
System.out.println(indentString + getClassName(figure, FULL_QUALIFIED) + additional);
@SuppressWarnings("unchecked")
List<IFigure> children = figure.getChildren();
for (IFigure childFigure : children) {
dumpFigureTree(childFigure, indent + 2);
}
}
public void dumpFigureTreeWithConnectionLayer(IFigure figure) {
IFigure dumpRoot = figure;
FreeformLayeredPane root = findFreeformLayeredPane(dumpRoot);
if (root != null) {
dumpRoot = root;
}
dumpFigureTree(dumpRoot);
}
private FreeformLayeredPane findFreeformLayeredPane(IFigure figure) {
IFigure parentFigure = figure.getParent();
if (parentFigure instanceof FreeformLayeredPane) {
return (FreeformLayeredPane) parentFigure;
}
if (parentFigure != null) {
return findFreeformLayeredPane(parentFigure);
}
return null;
}
public void dumpEditPartTree(EditPart editPart) {
System.out.println("\nEdit Part Tree()"); //$NON-NLS-1$
dumpEditPartTree(editPart, 0);
}
public void dumpEditPartTree(EditPart editPart, int indent) {
String indentString = createIndentString(indent);
Object m = editPart.getModel();
String additional = ""; //$NON-NLS-1$
if (m instanceof PictogramElement) {
PictogramElement pe = (PictogramElement) m;
GraphicsAlgorithm ga = pe.getGraphicsAlgorithm();
if (ga != null) {
additional = additional + " (" + getClassName(ga, FULL_QUALIFIED) + ")"; //$NON-NLS-1$ //$NON-NLS-2$
if (ADD_OBJECT_INFO) {
additional = additional + " (" + getObjectInfo(ga) + ")"; //$NON-NLS-1$ //$NON-NLS-2$
}
}
}
System.out.println(indentString + getClassName(editPart, FULL_QUALIFIED) + additional);
List<EditPart> ch = GraphitiUiInternal.getGefService().getEditPartChildren(editPart);
for (EditPart epChild : ch) {
dumpEditPartTree(epChild, indent + 2);
}
}
public void dumpPictogramModelTree(PictogramElement pe) {
System.out.println("\nPictogram Model Tree()"); //$NON-NLS-1$
dumpPictogramModelTree(pe, 0);
}
public void dumpPictogramModelTree(PictogramElement pe, int indent) {
String indentString = createIndentString(indent);
String additional = ""; //$NON-NLS-1$
additional = additional + " (" + (pe.isActive() ? "active" : "inactive") + ")"; //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ //$NON-NLS-4$
additional = additional + " (" + (pe.isVisible() ? "visible" : "invisible") + ")"; //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ //$NON-NLS-4$
System.out.println(indentString + GefService.PE + getClassName(pe, FULL_QUALIFIED) + additional);
dumpGATree(pe.getGraphicsAlgorithm(), indent + 2);
Collection<PictogramElement> peChildren = Graphiti.getPeService().getPictogramElementChildren(pe);
for (PictogramElement peChild : peChildren) {
dumpPictogramModelTree(peChild, indent + 2);
}
}
public void dumpGATree(GraphicsAlgorithm ga) {
dumpGATree(ga, 0);
}
public void dumpGATree(GraphicsAlgorithm ga, int indent) {
String indentString = createIndentString(indent);
if (ga == null) {
return;
}
String additional = ""; //$NON-NLS-1$
IDimension size = Graphiti.getGaService().calculateSize(ga);
additional = additional
+ " (" + ga.getX() + ", " + ga.getY() + ", " + size.getWidth() + ", " + size.getHeight() + ")"; //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ //$NON-NLS-4$ //$NON-NLS-5$
if (ADD_OBJECT_INFO) {
additional = additional + " (" + getObjectInfo(ga) + ")"; //$NON-NLS-1$ //$NON-NLS-2$
}
System.out.println(indentString + getClassName(ga, FULL_QUALIFIED) + additional);
if (ADD_STYLE_INFO) {
if (ga.getStyle() != null) {
Style style = ga.getStyle();
dumpStyleTree(style, indent + 2);
}
}
List<GraphicsAlgorithm> gaChildren = ga.getGraphicsAlgorithmChildren();
for (GraphicsAlgorithm gaChild : gaChildren) {
dumpGATree(gaChild, indent + 2);
}
}
public void dumpStyleTree(Style style) {
dumpStyleTree(style, 0);
}
public void dumpStyleTree(Style style, int indent) {
String indentString = createIndentString(indent);
if (style == null) {
return;
}
String additional = ""; //$NON-NLS-1$
String styleId = style.getId();
if (styleId != null) {
additional = additional + " (" + styleId + ")";
}
if (ADD_OBJECT_INFO) {
additional = additional + " (" + getObjectInfo(style) + ")"; //$NON-NLS-1$ //$NON-NLS-2$
}
System.out.println(indentString + getClassName(style, FULL_QUALIFIED) + additional);
EObject eC = style.eContainer();
if (eC instanceof Style) {
Style parentStyle = (Style) eC;
dumpStyleTree(parentStyle, indent + 2);
}
}
private String getClassName(Object o, boolean fullQualified) {
if (fullQualified) {
return o.getClass().getName();
} else {
return o.getClass().getSimpleName();
}
}
private String createIndentString(int indent) {
int s = 0;
String indentString = ""; //$NON-NLS-1$
while (s < indent) {
indentString = indentString + " "; //$NON-NLS-1$
s++;
}
return indentString;
}
private String getObjectInfo(Object o) {
return o.toString();
}
}