/*******************************************************************************
 * Copyright (c) 2004-2011 Abel Hegedus and Daniel Varro
 * 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:
 *    Abel Hegedus - initial API and implementation
 *******************************************************************************/
package org.eclipse.viatra2.framework.properties.providers;

import org.eclipse.viatra2.framework.properties.VIATRAPropertyKind;

/**
 * @author Abel Hegedus
 *
 */
public class VPMCorePropertyProvider extends DefaultPropertyProvider {

	public static final String VPM_CORE_PROVIDER_NAME = "Core";
	public static final String VPM_CORE_PROVIDER_SIMPLE_VALUE = "simple";
	public static final String VPM_CORE_PROVIDER_TRACEBASED_VALUE = "tracebased";
	public static final String VPM_CORE_PROVIDER_MANAGER_PROPERTY = "manager";

	public VPMCorePropertyProvider() {
		super(VPM_CORE_PROVIDER_NAME);
	}

	/* (non-Javadoc)
	 * @see org.eclipse.viatra2.framework.properties.IViatraPropertyProvider#isActive()
	 */
	@Override
	public boolean isActive() {
		return true;
	}

	/* (non-Javadoc)
	 * @see org.eclipse.viatra2.framework.properties.IViatraPropertyProvider#getPropertyKind(java.lang.String)
	 */
	@Override
	public VIATRAPropertyKind getPropertyKind(String id) {
		if(id.equals(VPM_CORE_PROVIDER_MANAGER_PROPERTY)) {
			return VIATRAPropertyKind.STRING;
		}
		return null;
	}

	/* (non-Javadoc)
	 * @see org.eclipse.viatra2.framework.properties.IViatraPropertyProvider#getDefaultPropertyValue(java.lang.String)
	 */
	@Override
	public String getDefaultPropertyValue(String id) {
		if(id.equals(VPM_CORE_PROVIDER_MANAGER_PROPERTY)) {
			return VPM_CORE_PROVIDER_SIMPLE_VALUE;
		}
		// TODO Auto-generated method stub
		return null;
	}

	/* (non-Javadoc)
	 * @see org.eclipse.viatra2.framework.properties.providers.DefaultPropertyProvider#init()
	 */
	@Override
	public void init() {
		allids.add(VPM_CORE_PROVIDER_MANAGER_PROPERTY);
	}
}
