org.eclipse.viatra.addon.viewers.runtime.specifications.ItemQuerySpecificationDescriptor.java Source code

Java tutorial

Introduction

Here is the source code for org.eclipse.viatra.addon.viewers.runtime.specifications.ItemQuerySpecificationDescriptor.java

Source

/*******************************************************************************
 * Copyright (c) 2010-2014, Csaba Debreceni, Istvan Rath 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:
 *   Csaba Debreceni - initial API and implementation
 *******************************************************************************/
package org.eclipse.viatra.addon.viewers.runtime.specifications;

import java.util.Collections;

import org.eclipse.viatra.addon.viewers.runtime.notation.HierarchyPolicy;
import org.eclipse.viatra.addon.viewers.runtime.util.FormatParser;
import org.eclipse.viatra.query.runtime.api.IQuerySpecification;
import org.eclipse.viatra.query.runtime.matchers.ViatraQueryRuntimeException;
import org.eclipse.viatra.query.runtime.matchers.planning.QueryProcessingException;
import org.eclipse.viatra.query.runtime.matchers.psystem.annotations.PAnnotation;
import org.eclipse.viatra.query.runtime.matchers.psystem.annotations.ParameterReference;
import org.eclipse.viatra.query.runtime.matchers.psystem.queries.PParameter;
import org.eclipse.viatra.transformation.views.traceability.generic.AbstractQuerySpecificationDescriptor;

import com.google.common.collect.ArrayListMultimap;
import com.google.common.collect.Multimap;

public class ItemQuerySpecificationDescriptor extends AbstractQuerySpecificationDescriptor {

    public static final String ANNOTATION_ID = "Item";
    private static final String SOURCE_PARAMETER_NAME = "item";
    private static final String LABEL_PARAMETER_NAME = "label";
    private static final String HIERARCHY_PARAMETER_NAME = "hierarchy";

    private final String source;
    private final String label;
    private final HierarchyPolicy policy;
    private final PAnnotation formatAnnotation;

    /**
     * @throws ViatraQueryRuntimeException
     */
    public ItemQuerySpecificationDescriptor(IQuerySpecification<?> specification, PAnnotation annotation) {

        super(specification, getTraceSource(specification, annotation), ArrayListMultimap.create(),
                Collections.emptyMap());

        ParameterReference parameterName = annotation.getFirstValue(SOURCE_PARAMETER_NAME, ParameterReference.class)
                .orElseThrow(() -> new QueryProcessingException("Invalid item value", specification));
        String parameterNameValue = parameterName.getName();
        source = parameterNameValue;

        label = annotation.getFirstValue(LABEL_PARAMETER_NAME, String.class).orElse("");

        policy = annotation.getFirstValue(HIERARCHY_PARAMETER_NAME, String.class)
                .map(input -> HierarchyPolicy.valueOf(input.toUpperCase())).orElse(HierarchyPolicy.ALWAYS);

        formatAnnotation = specification.getFirstAnnotationByName(FormatParser.ANNOTATION_ID).orElse(null);

    }

    private static Multimap<PParameter, PParameter> getTraceSource(IQuerySpecification<?> specification,
            PAnnotation annotation) {
        Multimap<PParameter, PParameter> traces = ArrayListMultimap.create();
        ParameterReference parameterSource = annotation
                .getFirstValue(SOURCE_PARAMETER_NAME, ParameterReference.class)
                .orElseThrow(() -> new QueryProcessingException("Invalid source value", specification));

        SpecificationDescriptorUtilities.insertToTraces(specification, traces, parameterSource.getName());

        return traces;
    }

    public boolean isFormatted() {
        return formatAnnotation != null;
    }

    public PAnnotation getFormatAnnotation() {
        return formatAnnotation;
    }

    public String getSource() {
        return source;
    }

    public String getLabel() {
        return label;
    }

    public HierarchyPolicy getPolicy() {
        return policy;
    }
}