Skip to main content
aboutsummaryrefslogtreecommitdiffstats
blob: 011fd350b44ab8ca6739324938deb16b1a95ea45 (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
133
134
135
136
137
138
139
140
141
142
/**
 * Copyright (c) 2012 Mia-Software.
 *
 * 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:
 *  	Alban Ménager (Soft-Maint) - Bug 387470 - [EFacet][Custom] Editors
 *  	Grégoire Dupé (Mia-Software) - Bug 387470 - [EFacet][Custom] Editors
 */
package org.eclipse.papyrus.emf.facet.efacet.sdk.ui.internal.widget.creation;

import java.util.HashMap;
import java.util.Map;

import org.eclipse.emf.common.command.Command;
import org.eclipse.emf.ecore.EPackage;
import org.eclipse.emf.edit.domain.EditingDomain;
import org.eclipse.papyrus.emf.facet.efacet.core.FacetUtils;
import org.eclipse.papyrus.emf.facet.efacet.metamodel.v0_2_0.efacet.FacetSet;
import org.eclipse.papyrus.emf.facet.efacet.sdk.ui.internal.dialog.creation.CreateFacetSetInFacetSetDialog;
import org.eclipse.papyrus.emf.facet.efacet.sdk.ui.internal.exported.widget.IENamedElementWidget;
import org.eclipse.papyrus.emf.facet.efacet.sdk.ui.internal.exported.widget.creation.IGetOrCreateFilteredFacetSetWidget;
import org.eclipse.papyrus.emf.facet.util.ui.internal.exported.dialog.IDialog;
import org.eclipse.papyrus.emf.facet.util.ui.internal.exported.util.widget.command.AbstractGetOrCreateFilteredElementCommandWidget;
import org.eclipse.papyrus.emf.facet.util.ui.internal.exported.util.widget.component.getorcreate.AbstractGetOrCreateElementWidget;
import org.eclipse.papyrus.emf.facet.util.ui.utils.PropertyElement2;
import org.eclipse.swt.widgets.Composite;

/**
 * Concrete implementation of {@link AbstractGetOrCreateElementWidget}.</p>
 *
 * This class allows to select a FacetSet or create a new one.
 */
public class GetOrCreateFiltredFacetSetWidget
		extends
		AbstractGetOrCreateFilteredElementCommandWidget<
		FacetSet,
		IENamedElementWidget<FacetSet, IGetOrCreateFilteredFacetSetWidget>
		>
		implements IGetOrCreateFilteredFacetSetWidget {

	private final EditingDomain editingDomain;
	private final PropertyElement2<FacetSet> parentFSProp;
	private final FacetSet reject;

	/**
	 * Constructor.
	 *
	 * @param parent
	 *            the parent of this widget.
	 * @param properties
	 *            the properties.
	 * @param reject
	 * @param recursiveCreation
	 *            if the creation of the FacetSet can be recursive.
	 */
	public GetOrCreateFiltredFacetSetWidget(final Composite parent,
			final EditingDomain editingDomain,
			final PropertyElement2<FacetSet> parentFSProp, final FacetSet reject) {
		super(parent);
		this.editingDomain = editingDomain;
		this.parentFSProp = parentFSProp;
		this.reject = reject;
	}

	/**
	 * @return the selected facetSet in the filtredList.
	 */
	public FacetSet getFacetSetSelected() {
		return getElementSelected();
	}

	@Override
	protected Map<String, FacetSet> getElements() {
		final FacetSet containingFS = FacetUtils
				.getRootFacetSet(this.parentFSProp.getValue2());
		final Map<String, FacetSet> allFacets = getAllFacetSets(containingFS);
		allFacets.remove(this.parentFSProp.getName());
		return allFacets;
	}

	@Override
	protected IDialog<IENamedElementWidget<FacetSet, IGetOrCreateFilteredFacetSetWidget>> createDialog() {
		return new CreateFacetSetInFacetSetDialog(
				this.parentFSProp.getValue2(), this.editingDomain);
	}

	/**
	 * Return all the facetSets parent if the element in parameter.
	 *
	 * @param element
	 *            where to begin.
	 * @return the list of facetSet.
	 */
	public Map<String, FacetSet> getAllSuperFacetSets(final FacetSet element) {
		final Map<String, FacetSet> facetSets = new HashMap<String, FacetSet>();
		facetSets.put(element.getName(), element);
		final FacetSet parent = (FacetSet) element.getESuperPackage();
		if (parent != null) {
			facetSets.putAll(getAllSuperFacetSets(parent));
		}
		return facetSets;
	}

	/**
	 * Return all the facetSets of the model.
	 *
	 * @param parent
	 *            the first FacetSet of the model.
	 * @return the list of facetSet.
	 */
	private Map<String, FacetSet> getAllFacetSets(final FacetSet parent) {
		final Map<String, FacetSet> facetSets = new HashMap<String, FacetSet>();
		if (parent != this.reject) {
			facetSets.put(parent.getName(), parent);
			for (final EPackage element : parent.getESubpackages()) {
				facetSets.putAll(getAllFacetSets((FacetSet) element));
			}
		}
		return facetSets;
	}

	@Override
	public Command getCommand() {
		// Here, this widget only return a selected element so, no command is
		// returned.
		return null;
	}

	@Override
	public void notifyChanged() {
		// No action has to be done if a change appends.
	}

	@Override
	public void onDialogValidation() {
		// Nothing.
	}
}

Back to the top