org.xpect.ui.services.XtResourceValidator.java Source code

Java tutorial

Introduction

Here is the source code for org.xpect.ui.services.XtResourceValidator.java

Source

/*******************************************************************************
 * Copyright (c) 2012 itemis AG (http://www.itemis.eu) 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.xpect.ui.services;

import static org.xpect.runner.TestExecutor.createFileConfiguration;

import java.util.List;

import org.eclipse.emf.ecore.resource.Resource;
import org.eclipse.xtext.resource.XtextResource;
import org.eclipse.xtext.util.CancelIndicator;
import org.eclipse.xtext.validation.CheckMode;
import org.eclipse.xtext.validation.IResourceValidator;
import org.eclipse.xtext.validation.Issue;
import org.xpect.Environment;
import org.xpect.XpectFile;
import org.xpect.registry.DefaultBinding;
import org.xpect.state.Configuration;
import org.xpect.ui.util.XpectFileAccess;
import org.xpect.util.EnvironmentUtil;

import com.google.common.collect.Lists;
import com.google.inject.Inject;
import com.google.inject.Injector;

/**
 * @author Moritz Eysholdt - Initial contribution and API
 */
public class XtResourceValidator implements IResourceValidator {

    @Inject
    @DefaultBinding
    private IResourceValidator delegate;

    @Inject
    private Injector injector;

    public IResourceValidator getDelegate() {
        return delegate;
    }

    public List<Issue> validate(Resource resource, CheckMode mode, CancelIndicator indicator) {
        XpectFile xpectFile = XpectFileAccess.getXpectFile(resource);
        Configuration fileConfig = createFileConfiguration(xpectFile);
        List<Issue> issues = Lists.newArrayList();
        List<Issue> delegateIssues = validateDelegate(resource, mode, indicator, fileConfig);
        if (delegateIssues != null) {
            issues.addAll(delegateIssues);
        }
        List<Issue> xpectIssues = validateXpect(resource, mode, indicator, fileConfig);
        if (xpectIssues != null) {
            issues.addAll(xpectIssues);
        }
        if (EnvironmentUtil.ENVIRONMENT == Environment.WORKBENCH) {
            LiveTestRunner runner = injector.getInstance(LiveTestRunner.class);
            List<Issue> testResultIssues = runner.validateTests(resource, mode, indicator, fileConfig);
            issues.addAll(testResultIssues);
        }
        return issues;
    }

    public List<Issue> validateDelegate(Resource resource, CheckMode mode, CancelIndicator indicator,
            Configuration fileConfig) {
        List<Issue> issues = delegate.validate(resource, mode, indicator);
        List<Issue> result = Lists.newArrayListWithExpectedSize(issues.size());
        for (Issue issue : issues)
            if (issue != null)
                result.add(issue);
        return result;
    }

    public List<Issue> validateXpect(Resource resource, CheckMode mode, CancelIndicator indicator,
            Configuration fileConfig) {
        XtextResource xpectResource = XpectFileAccess.getXpectResource(resource);
        IResourceValidator validator = xpectResource.getResourceServiceProvider().getResourceValidator();
        return validator.validate(xpectResource, mode, indicator);
    }

}