package org.eclipse.epf.publishing.services;

import java.util.List;

import org.eclipse.epf.library.layout.Bookmark;
import org.eclipse.epf.library.layout.HtmlBuilder;

public interface ISiteGenerator {
			
	public void prePublish() throws Exception;
	public void postPublish() throws Exception;

	public void writePublishedBookmarks(List bookmarks, Bookmark defaultView) throws Exception;

	public HtmlBuilder getHtmlBuilder();
	public PublishOptions getPublishOptions();
	public String getIndexFilePath();
	public String getNodeIconPath(); 
	
}
