blob: b76bf3ef5322676d239bcc5e1003b1a81680c411 (
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
|
/*****************************************************************************
* Copyright (c) 2010 CEA LIST.
*
* 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:
* Camille Letavernier (CEA LIST) camille.letavernier@cea.fr - Initial API and implementation
*****************************************************************************/
package org.eclipse.papyrus.views.properties.toolsmiths.providers;
import java.util.Iterator;
import java.util.LinkedList;
import java.util.List;
import org.eclipse.emf.ecore.EObject;
import org.eclipse.papyrus.views.properties.toolsmiths.providers.AbstractContextualContentProvider;
import org.eclipse.papyrus.infra.properties.contexts.Context;
import org.eclipse.papyrus.infra.properties.contexts.DataContextElement;
import org.eclipse.papyrus.infra.properties.contexts.DataContextPackage;
import org.eclipse.papyrus.infra.properties.contexts.Property;
import org.eclipse.papyrus.infra.widgets.providers.IHierarchicContentProvider;
/**
* A Content provider to retrieve all available properties in the current
* contexts
*
* @author Camille Letavernier
*/
public class PropertyContentProvider extends AbstractContextualContentProvider implements IHierarchicContentProvider {
/**
* Constructor.
*
* @param source
* The source from which the contexts will be retrieved
*/
public PropertyContentProvider(EObject source) {
super(source);
}
@Override
public Object[] getElements() {
return contexts.toArray();
}
@Override
public Object[] getElements(Object inputElement) {
return getElements();
}
@Override
@SuppressWarnings({ "rawtypes", "unchecked" })
public Object[] getChildren(Object parentElement) {
if (parentElement instanceof Context) {
Context parent = (Context) parentElement;
return parent.getDataContexts().toArray();
} else if (parentElement instanceof DataContextElement) {
List result = new LinkedList();
if (parentElement instanceof DataContextPackage) {
DataContextPackage contextPackage = (DataContextPackage) parentElement;
result.addAll(contextPackage.getElements());
}
DataContextElement element = (DataContextElement) parentElement;
result.addAll(element.getProperties());
Iterator<?> it = result.iterator();
while (it.hasNext()) {
Object value = it.next();
if (isEmpty(value)) {
it.remove();
}
}
return result.toArray();
} else {
return new Object[0];
}
}
protected boolean isEmpty(Object element) {
if (element instanceof DataContextPackage) {
DataContextPackage dcPackage = (DataContextPackage) element;
return dcPackage.getElements().isEmpty() && dcPackage.getProperties().isEmpty();
} else if (element instanceof DataContextElement) {
return ((DataContextElement) element).getProperties().isEmpty();
} else if (element instanceof Context) {
return ((Context) element).getDataContexts().isEmpty();
}
return false;
}
@Override
public Object getParent(Object element) {
if (element instanceof Property) {
return ((Property) element).getContextElement();
} else if (element instanceof DataContextElement) {
return ((DataContextElement) element).getPackage();
} else {
return null;
}
}
@Override
public boolean hasChildren(Object element) {
return getChildren(element).length > 0;
}
@Override
public boolean isValidValue(Object element) {
return element instanceof Property;
}
}
|