/*******************************************************************************
 * Copyright (c) 2005, 2017 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
 *
 *******************************************************************************/
package org.eclipse.dltk.core.tests.model;

import org.eclipse.core.resources.IResource;
import org.eclipse.core.runtime.IPath;
import org.eclipse.core.runtime.IStatus;
import org.eclipse.core.runtime.Status;
import org.eclipse.dltk.core.AbstractLanguageToolkit;
import org.eclipse.dltk.core.IDLTKLanguageToolkit;
import org.eclipse.dltk.core.IModelStatus;
import org.eclipse.dltk.core.environment.IEnvironment;
import org.eclipse.dltk.internal.core.util.Messages;
import org.eclipse.osgi.util.NLS;

public class TestLanguageToolkit extends AbstractLanguageToolkit {
	private static TestLanguageToolkit toolkit = new TestLanguageToolkit();

	private IStatus validateSourceModule(String name) {
		if (isScriptLikeFileName(name)) {
			return IModelStatus.VERIFIED_OK;
		}
		return new Status(IStatus.ERROR, "TEST", -1,
				NLS.bind(Messages.convention_unit_notScriptName, "txt", "Test"),
				null);
	}

	@Override
	public boolean languageSupportZIPBuildpath() {
		return true;
	}

	@Override
	public boolean validateSourcePackage(IPath path, IEnvironment env) {
		return true;
	}

	@Override
	public String getNatureId() {
		return ModelTestsPlugin.TEST_NATURE;
	}

	@Override
	public IStatus validateSourceModule(IResource resource) {
		return validateSourceModule(resource.getName());
	}

	public static IDLTKLanguageToolkit getDefault() {
		return toolkit;
	}

	@Override
	public String getLanguageName() {
		return "Test";
	}

	private boolean isScriptLikeFileName(String name) {
		return name.endsWith(".txt");
	}

	@Override
	public String getLanguageContentType() {
		return "org.eclipse.dltk.core.test.testContentType";
	}
}
