/*******************************************************************************
 * Copyright (c) 2006, 2015 IBM Corporation and others.
 * 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:
 *     IBM Corporation - initial API and implementation
 *******************************************************************************/
package org.eclipse.ua.tests.help.util;

import org.eclipse.help.IToc;
import org.eclipse.help.ITopic;
import org.eclipse.help.UAContentFilter;
import org.eclipse.help.internal.base.HelpEvaluationContext;

public class TocModelSerializer {

	private static final String EMPTY_STRING = "";
	
	public static String serialize(IToc toc) {
		StringBuffer buf = new StringBuffer();
		buf.append("<?xml version=\"1.0\" encoding=\"UTF-8\" ?>\n");
		buf.append(serializeAux(toc, ""));
		return buf.toString();
	}
	
	private static String serializeAux(IToc toc, String indent) {
		if (!UAContentFilter.isFiltered(toc, HelpEvaluationContext.getContext())) {
			StringBuffer buf = new StringBuffer();
			buf.append(indent + "<toc\n");
			buf.append(indent + "      label=\"" + toc.getLabel() + "\"\n");
			buf.append(indent + "      href=\"" + toc.getHref() + "\">\n");
			
			ITopic[] topics = toc.getTopics();
			for (ITopic topic : topics) {
				buf.append(serializeAux(topic, indent + "   "));
			}
			
			buf.append(indent + "</toc>");
			return buf.toString();
		}
		return EMPTY_STRING;
	}
	
	private static String serializeAux(ITopic topic, String indent) {
		if (!UAContentFilter.isFiltered(topic, HelpEvaluationContext.getContext())) {
			StringBuffer buf = new StringBuffer();
			buf.append(indent + "<topic\n");
			buf.append(indent + "      label=\"" + topic.getLabel() + "\"\n");
			buf.append(indent + "      href=\"" + topic.getHref() + "\">\n");
			
			ITopic[] subtopics = topic.getSubtopics();
			for (ITopic subtopic : subtopics) {
				buf.append(serializeAux(subtopic, indent + "   "));
			}
			
			buf.append(indent + "</topic>\n");
			return buf.toString();		
		}
		return EMPTY_STRING;
	}
}
