Skip to main content
summaryrefslogtreecommitdiffstats
blob: 0c2eae0a5b53bb972b7aa97dfb6bfd45464f5312 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
/**
 * Copyright (c) 2011 protos software gmbh (http://www.protos.de).
 * 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:
 * 		Juergen Haug (initial contribution)
 */
package org.eclipse.etrice.ui.behavior.fsm.provider;

import com.google.common.base.Objects;
import com.google.common.collect.ArrayListMultimap;
import com.google.common.collect.Iterables;
import com.google.common.collect.Multimap;
import com.google.inject.Injector;
import java.util.ArrayList;
import java.util.Collection;
import java.util.List;
import java.util.Map;
import java.util.function.BiConsumer;
import java.util.function.Consumer;
import org.eclipse.emf.common.util.EList;
import org.eclipse.emf.ecore.EObject;
import org.eclipse.emf.ecore.EStructuralFeature;
import org.eclipse.emf.ecore.resource.Resource;
import org.eclipse.emf.ecore.resource.ResourceSet;
import org.eclipse.emf.ecore.util.EcoreUtil;
import org.eclipse.etrice.core.fsm.fSM.ModelComponent;
import org.eclipse.etrice.ui.behavior.fsm.editor.AbstractFSMDiagramTypeProvider;
import org.eclipse.etrice.ui.common.base.support.DiagramAccessBase;
import org.eclipse.graphiti.mm.pictograms.Diagram;
import org.eclipse.graphiti.mm.pictograms.PictogramElement;
import org.eclipse.graphiti.mm.pictograms.PictogramLink;
import org.eclipse.graphiti.services.Graphiti;
import org.eclipse.graphiti.services.ILinkService;
import org.eclipse.xtext.xbase.lib.CollectionLiterals;
import org.eclipse.xtext.xbase.lib.Functions.Function1;
import org.eclipse.xtext.xbase.lib.IterableExtensions;
import org.eclipse.xtext.xbase.lib.ListExtensions;
import org.eclipse.xtext.xbase.lib.ObjectExtensions;
import org.eclipse.xtext.xbase.lib.Procedures.Procedure1;

/**
 * Provides the {@linkplain PictogramElement} objects of the base class diagram.
 *  This is a reverse mapping from room business objects to linked base diagram pictograms.
 * 
 *  TODO: use fsmgenmodel instead
 */
@SuppressWarnings("all")
public class BaseDiagramProvider {
  private final Multimap<EObject, PictogramElement> baseDiagramBusinessObjs = ArrayListMultimap.<EObject, PictogramElement>create();
  
  public BaseDiagramProvider(final AbstractFSMDiagramTypeProvider diagramTypeProvider) {
    Injector _injector = diagramTypeProvider.getInjector();
    final DiagramAccessBase diagramAccess = _injector.<DiagramAccessBase>getInstance(DiagramAccessBase.class);
    ILinkService _linkService = Graphiti.getLinkService();
    Diagram _diagram = diagramTypeProvider.getDiagram();
    EObject _businessObjectForLinkedPictogramElement = _linkService.getBusinessObjectForLinkedPictogramElement(_diagram);
    final ModelComponent mc = ((ModelComponent) _businessObjectForLinkedPictogramElement);
    Diagram _diagram_1 = diagramTypeProvider.getDiagram();
    Resource _eResource = _diagram_1.eResource();
    final ResourceSet rs = _eResource.getResourceSet();
    ArrayList<ModelComponent> _newArrayList = CollectionLiterals.<ModelComponent>newArrayList();
    final Procedure1<ArrayList<ModelComponent>> _function = new Procedure1<ArrayList<ModelComponent>>() {
      @Override
      public void apply(final ArrayList<ModelComponent> it) {
        ModelComponent base = mc.getBase();
        while (((base != null) && it.add(base))) {
          ModelComponent _base = base.getBase();
          base = _base;
        }
      }
    };
    final ArrayList<ModelComponent> baseClasses = ObjectExtensions.<ArrayList<ModelComponent>>operator_doubleArrow(_newArrayList, _function);
    List<ModelComponent> _reverseView = ListExtensions.<ModelComponent>reverseView(baseClasses);
    final Consumer<ModelComponent> _function_1 = new Consumer<ModelComponent>() {
      @Override
      public void accept(final ModelComponent base) {
        final Diagram baseDiagram = diagramAccess.getDiagram(base, rs);
        boolean _notEquals = (!Objects.equal(baseDiagram, null));
        if (_notEquals) {
          Map<EObject, Collection<EStructuralFeature.Setting>> _find = EcoreUtil.ExternalCrossReferencer.find(baseDiagram);
          final BiConsumer<EObject, Collection<EStructuralFeature.Setting>> _function = new BiConsumer<EObject, Collection<EStructuralFeature.Setting>>() {
            @Override
            public void accept(final EObject targetEObj, final Collection<EStructuralFeature.Setting> eFeatureSetting) {
              final Function1<EStructuralFeature.Setting, EObject> _function = new Function1<EStructuralFeature.Setting, EObject>() {
                @Override
                public EObject apply(final EStructuralFeature.Setting it) {
                  return it.getEObject();
                }
              };
              Iterable<EObject> _map = IterableExtensions.<EStructuralFeature.Setting, EObject>map(eFeatureSetting, _function);
              Iterable<PictogramLink> _filter = Iterables.<PictogramLink>filter(_map, PictogramLink.class);
              final Function1<PictogramLink, PictogramElement> _function_1 = new Function1<PictogramLink, PictogramElement>() {
                @Override
                public PictogramElement apply(final PictogramLink it) {
                  return it.getPictogramElement();
                }
              };
              Iterable<PictogramElement> _map_1 = IterableExtensions.<PictogramLink, PictogramElement>map(_filter, _function_1);
              final Consumer<PictogramElement> _function_2 = new Consumer<PictogramElement>() {
                @Override
                public void accept(final PictogramElement pe) {
                  BaseDiagramProvider.this.baseDiagramBusinessObjs.put(targetEObj, pe);
                }
              };
              _map_1.forEach(_function_2);
            }
          };
          _find.forEach(_function);
          EList<Resource> _resources = rs.getResources();
          Resource _eResource = baseDiagram.eResource();
          _resources.remove(_eResource);
        }
      }
    };
    _reverseView.forEach(_function_1);
  }
  
  public Collection<PictogramElement> getPictograms(final EObject roomObj) {
    Collection<PictogramElement> _xifexpression = null;
    boolean _equals = Objects.equal(roomObj, null);
    if (_equals) {
      _xifexpression = CollectionLiterals.<PictogramElement>emptyList();
    } else {
      _xifexpression = this.baseDiagramBusinessObjs.get(roomObj);
    }
    return _xifexpression;
  }
}

Back to the top