package org.eclipse.rmf.reqif10.constraints;

import org.eclipse.core.runtime.ILog;
import org.eclipse.core.runtime.IStatus;
import org.eclipse.core.runtime.Platform;
import org.eclipse.core.runtime.Status;
import org.eclipse.emf.validation.AbstractModelConstraint;
import org.eclipse.emf.validation.IValidationContext;
import org.eclipse.emf.validation.model.ConstraintStatus;
import org.osgi.framework.Bundle;

public abstract class ReqIFModelConstraint extends AbstractModelConstraint {

	private final static String bundleId = "org.eclipse.rmf.reqif10.constraints"; //$NON-NLS-1$
	private final static String constraintPrefix = "org.eclipse.rmf.reqif10.constraints."; //$NON-NLS-1$

	@Override
	public IStatus validate(IValidationContext ctx) {
		try {
			return doValidate(ctx);
		} catch (Throwable ex) {
			ex.printStackTrace(System.err);

			Bundle bundle = Platform.getBundle(bundleId);
			ILog log = Platform.getLog(bundle);
			log.log(new Status(IStatus.ERROR, bundleId, "Exception while running Validator", ex)); //$NON-NLS-1$

			String constraintId = ctx.getCurrentConstraintId();
			constraintId = constraintId.replace(constraintPrefix, "");

			return ConstraintStatus.createStatus(ctx, null, IStatus.ERROR, Integer.MAX_VALUE, "Constraint " + constraintId
					+ " was not evaluated: An Exception occured while validating {0}: {1}", ctx.getTarget(), ex.toString());
		}
	}

	protected abstract IStatus doValidate(IValidationContext ctx);

}
