org.obeonetwork.dsl.environment.design.services.ReferencesService.java Source code

Java tutorial

Introduction

Here is the source code for org.obeonetwork.dsl.environment.design.services.ReferencesService.java

Source

/*******************************************************************************
 * Copyright (c) 2014 Obeo.
 * 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:
 *     Obeo - initial API and implementation
 *******************************************************************************/
package org.obeonetwork.dsl.environment.design.services;

import java.util.ArrayList;
import java.util.Collection;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Set;

import org.eclipse.sirius.diagram.DSemanticDiagram;
import org.obeonetwork.dsl.environment.Reference;
import org.obeonetwork.dsl.environment.StructuredType;

import com.google.common.collect.Sets;

public class ReferencesService {

    public List<Reference> getReferencesBetweenTypes(Collection<StructuredType> structuredTypes) {
        List<Reference> references = new ArrayList<Reference>();

        for (StructuredType structuredType : structuredTypes) {
            for (Reference reference : structuredType.getOwnedReferences()) {
                if (structuredTypes.contains(reference.getReferencedType())) {
                    references.add(reference);
                }
            }
        }
        return references;
    }

    public List<Reference> getReferences(DSemanticDiagram diagram) {
        Set<StructuredType> types = DesignServices.getDisplayedStructuredTypes(diagram);
        List<Reference> references = new ArrayList<Reference>();
        for (StructuredType type : types) {
            references.addAll(type.getOwnedReferences());
        }
        return references;
    }

    public List<Reference> getOppositeReferences(DSemanticDiagram diagram) {
        Collection<StructuredType> structuredTypes = DesignServices.getDisplayedStructuredTypes(diagram);
        Set<Reference> references = Sets.newLinkedHashSet();
        for (StructuredType structuredType : structuredTypes) {
            references.addAll(structuredType.getOwnedReferences());
        }
        Map<String, Reference> map = new HashMap<String, Reference>();
        for (Reference ref : references) {
            if (ref.getOppositeOf() != null) {
                String key1 = ref.getOppositeOf().hashCode() + "" + ref.hashCode();
                String key2 = ref.hashCode() + "" + ref.getOppositeOf().hashCode();
                if (map.get(key1) == null && map.get(key2) == null) {
                    map.put(key1, ref);
                }
            }
        }
        return new ArrayList<Reference>(map.values());
    }

    public Reference reconnectBidiReferenceTarget(Reference reference, StructuredType source,
            StructuredType target) {
        Reference oppositeOf = reference.getOppositeOf();

        reference.setReferencedType(target);
        oppositeOf.setContainingType(target);

        reference.setOppositeOf(oppositeOf);

        return reference;
    }

    public Reference reconnectBidiReferenceSource(Reference reference, StructuredType source,
            StructuredType target) {
        Reference oppositeOf = reference.getOppositeOf();

        // Change container of reference
        reference.setContainingType(target);
        // Change referencedType for opposite reference
        oppositeOf.setReferencedType(target);

        reference.setOppositeOf(oppositeOf);

        return reference;
    }

}