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 package info.magnolia.ui.framework.field.nodetype;
35
36 import info.magnolia.context.Context;
37 import info.magnolia.objectfactory.Components;
38 import info.magnolia.repository.RepositoryConstants;
39 import info.magnolia.ui.api.context.UiContext;
40 import info.magnolia.ui.api.i18n.I18NAuthoringSupport;
41 import info.magnolia.ui.form.field.definition.SelectFieldOptionDefinition;
42 import info.magnolia.ui.form.field.factory.SelectFieldFactory;
43
44 import java.util.Collections;
45 import java.util.List;
46
47 import javax.inject.Inject;
48 import javax.jcr.RepositoryException;
49 import javax.jcr.nodetype.NodeType;
50 import javax.jcr.nodetype.NodeTypeIterator;
51 import javax.jcr.nodetype.NodeTypeManager;
52
53 import org.slf4j.Logger;
54 import org.slf4j.LoggerFactory;
55
56 import com.google.common.collect.Lists;
57 import com.vaadin.v7.data.Item;
58 import com.vaadin.v7.data.Property;
59
60
61
62
63
64
65
66 public class NodeTypeSelectFieldFactory extends SelectFieldFactory<NodeTypeSelectFieldDefinition> {
67
68 private static final Logger log = LoggerFactory.getLogger(NodeTypeSelectFieldFactory.class);
69
70 private final Context context;
71
72 @Inject
73 public NodeTypeSelectFieldFactory(NodeTypeSelectFieldDefinition definition, Item relatedFieldItem, UiContext uiContext, I18NAuthoringSupport i18nAuthoringSupport, Context context) {
74 super(definition, relatedFieldItem, uiContext, i18nAuthoringSupport);
75 this.context = context;
76 }
77
78
79
80
81 @Deprecated
82 public NodeTypeSelectFieldFactory(NodeTypeSelectFieldDefinition definition, Item relatedFieldItem, Context context) {
83 this(definition, relatedFieldItem, null, Components.getComponent(I18NAuthoringSupport.class), context);
84 }
85
86 @Override
87 public List<SelectFieldOptionDefinition> getOptions() {
88 try {
89 final NodeTypeManager nodeTypeManager = context.getJCRSession(RepositoryConstants.CONFIG).getWorkspace().getNodeTypeManager();
90 final NodeTypeIterator nodeTypes = nodeTypeManager.getPrimaryNodeTypes();
91 final List<SelectFieldOptionDefinition> options = Lists.newArrayListWithCapacity(Long.valueOf(nodeTypes.getSize()).intValue());
92
93 while (nodeTypes.hasNext()) {
94 final NodeType nodeType = nodeTypes.nextNodeType();
95 SelectFieldOptionDefinition option = new SelectFieldOptionDefinition();
96
97 final String nodeTypeName = nodeType.getName();
98
99 option.setName(nodeTypeName);
100 option.setLabel(nodeTypeName);
101 option.setValue(nodeTypeName);
102 option.setSelected(nodeTypeName.equals(definition.getDefaultValue()));
103
104 options.add(option);
105 }
106
107 return options;
108 } catch (RepositoryException e) {
109 log.warn(String.format("Failed to populate a list of available node types due to: [%s], returning empty collection.", e.getMessage()));
110 return Collections.emptyList();
111 }
112 }
113
114 @Override
115 protected String createDefaultValue(Property dataSource) {
116 return definition.getDefaultValue();
117 }
118 }