/**
 * Copyright (c) 2011, 2015 - Lunifera GmbH (Gross Enzersdorf, Austria), Loetz GmbH&Co.KG (69115 Heidelberg, Germany)
 * 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:
 *         Florian Pirchner - Initial implementation
 */
package org.eclipse.osbp.vaaclipse.ui.preferences.model.validation;

import org.eclipse.emf.common.util.EList;

import org.eclipse.osbp.vaaclipse.ui.preferences.model.PreferencesCategory;
import org.eclipse.osbp.vaaclipse.ui.preferences.model.PreferencesPage;

/**
 * A sample validator interface for
 * {@link org.eclipse.osbp.vaaclipse.ui.preferences.model.PreferencesCategory}. This
 * doesn't really do anything, and it's not a real EMF artifact. It was
 * generated by the org.eclipse.emf.examples.generator.validator plug-in to
 * illustrate how EMF's code generator can be extended. This can be disabled
 * with -vmargs -Dorg.eclipse.emf.examples.generator.validator=false.
 */
public interface PreferencesCategoryValidator {
	boolean validate();

	boolean validateName(String value);

	boolean validateChildCategories(EList<PreferencesCategory> value);

	boolean validateParentCategory(PreferencesCategory value);

	boolean validatePage(PreferencesPage value);

	boolean validateId(String value);
}
