package org.eclipse.platform.discovery.compatibility.internal.readers.impl;

import static java.text.MessageFormat.format;

import org.eclipse.platform.discovery.compatibility.internal.readers.ISearchResultPageDescription;
import org.eclipse.search.ui.ISearchResultPage;

public class SearchResultPageDescription implements
		ISearchResultPageDescription {

	private final String id;
	private final String label;
	private final String resultClassFqName;
	private final ISearchResultPage page;

	public SearchResultPageDescription(String id, String label, String resultClassFqName, ISearchResultPage page) {
		this.id = id;
		this.label = label;
		this.resultClassFqName = resultClassFqName;
		this.page = page;
	}

	@Override
	public String getId() {
		return id;
	}

	@Override
	public String getDisplayName() {
		return label;
	}

	@Override
	public String getSearchResultClassName() {
		return resultClassFqName;
	}

	@Override
	public ISearchResultPage getPage() {
		return page;
	}
	
	@Override
	public String toString() {
		
		return format("Search result page. Id:{0} ; label: {1}", id, label);
	}

}
