/******************************************************************************* * Copyright (c) 2004, 2017 IBM Corporation and others. * * This program and the accompanying materials * are made available under the terms of the Eclipse Public License 2.0 * which accompanies this distribution, and is available at * https://www.eclipse.org/legal/epl-2.0/ * * SPDX-License-Identifier: EPL-2.0 * * Contributors: * IBM Corporation - initial API and implementation *******************************************************************************/ package org.eclipse.ua.tests.intro.util; import java.util.Arrays; import java.util.Map; import java.util.Set; import org.eclipse.ui.internal.intro.impl.model.AbstractIntroContainer; import org.eclipse.ui.internal.intro.impl.model.AbstractIntroElement; import org.eclipse.ui.internal.intro.impl.model.AbstractIntroPage; import org.eclipse.ui.internal.intro.impl.model.IntroAnchor; import org.eclipse.ui.internal.intro.impl.model.IntroContentProvider; import org.eclipse.ui.internal.intro.impl.model.IntroGroup; import org.eclipse.ui.internal.intro.impl.model.IntroHTML; import org.eclipse.ui.internal.intro.impl.model.IntroHead; import org.eclipse.ui.internal.intro.impl.model.IntroHomePage; import org.eclipse.ui.internal.intro.impl.model.IntroImage; import org.eclipse.ui.internal.intro.impl.model.IntroInclude; import org.eclipse.ui.internal.intro.impl.model.IntroLink; import org.eclipse.ui.internal.intro.impl.model.IntroModelRoot; import org.eclipse.ui.internal.intro.impl.model.IntroPage; import org.eclipse.ui.internal.intro.impl.model.IntroPageTitle; import org.eclipse.ui.internal.intro.impl.model.IntroText; import org.osgi.framework.Bundle; public class IntroModelSerializer { private StringBuilder buffer; public IntroModelSerializer(IntroModelRoot root) { this.buffer = new StringBuilder(); printModelRootInfo(root, buffer); // Root Page IntroHomePage rootPage = root.getRootPage(); printHomePage(rootPage, buffer); printPageChildren(rootPage, buffer); IntroPage[] pages = root.getPages(); printPages(pages, buffer); buffer.append("\n\n"); //$NON-NLS-1$ printModelFlagTests(root, buffer); } /* * Removes any platform/machine-specific paths from the given URL. This is * used to remove absolute paths from the serialized model in order to compare * results in automated tests. */ private String filterURL(String url) { if (url != null && url.startsWith("file:/")) { return "file:/" + "" + url.substring(url.lastIndexOf('/')); } return url; } private void printModelRootInfo(IntroModelRoot model, StringBuilder text) { text.append("Intro Model Content:"); //$NON-NLS-1$ text.append("\n======================"); //$NON-NLS-1$ text.append("\n\nModel has valid config = " + model.hasValidConfig()); //$NON-NLS-1$ text.append("\nPresentation type = " //$NON-NLS-1$ + model.getPresentation().getType()); text.append("\nHome page id = " //$NON-NLS-1$ + model.getPresentation().getHomePageId()); IntroHead headContent = model.getPresentation().getHead(); if (headContent != null) text.append("\nPresentation Shared Head = " + headContent.getSrc()); //$NON-NLS-1$ text.append("\nNumber of pages (not including Root Page) = " //$NON-NLS-1$ + model.getPages().length); text.append("\nNumber of shared groups = " //$NON-NLS-1$ + model.getChildrenOfType(AbstractIntroElement.GROUP).length); text .append("\nNumber of unresolved extensions = " //$NON-NLS-1$ + model .getChildrenOfType(AbstractIntroElement.CONTAINER_EXTENSION).length); } /** * @param text * @param root */ private void printHomePage(AbstractIntroPage rootPage, StringBuilder text) { text.append("\n\nHOME PAGE: "); //$NON-NLS-1$ text.append("\n--------------"); //$NON-NLS-1$ text .append("\n\tis dynamic= " + ((IntroModelRoot) rootPage.getParent()).isDynamic()); //$NON-NLS-1$ text.append("\n\tid = " + rootPage.getId()); //$NON-NLS-1$ text.append("\n\ttitle = " + rootPage.getTitle()); //$NON-NLS-1$ text.append("\n\tstyle = " + filterURL(rootPage.getStyle())); //$NON-NLS-1$ text.append("\n\talt-style = " + filterURL(rootPage.getAltStyle())); //$NON-NLS-1$ text.append("\n\turl = " + filterURL(rootPage.getUrl())); //$NON-NLS-1$ text.append("\n\tstyle-id = " + rootPage.getStyleId()); //$NON-NLS-1$ printPageStyles(rootPage, text); } private void printPageStyles(AbstractIntroPage page, StringBuilder text) { text.append("\n\tpage styles are = "); //$NON-NLS-1$ String[] styles = page.getStyles(); for (String style : styles) text.append(filterURL(style + "\n\t\t\t")); //$NON-NLS-1$ text.append("\n\tpage alt-styles are = "); //$NON-NLS-1$ final Map altStylesHashtable = page.getAltStyles(); if (altStylesHashtable == null) return; Set set = altStylesHashtable.keySet(); String[] sorted = new String[set.size()]; set.toArray(sorted); for (int i=0;i