1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24 package org.modeshape.rhq.plugin;
25
26 import java.util.Collection;
27 import java.util.HashSet;
28 import java.util.Set;
29
30 import org.apache.commons.logging.Log;
31 import org.apache.commons.logging.LogFactory;
32 import org.jboss.managed.api.ComponentType;
33 import org.jboss.managed.api.ManagedComponent;
34 import org.jboss.metatype.api.types.EnumMetaType;
35 import org.jboss.metatype.api.values.CollectionValueSupport;
36 import org.jboss.metatype.api.values.CompositeValueSupport;
37 import org.jboss.metatype.api.values.EnumValueSupport;
38 import org.jboss.metatype.api.values.MetaValue;
39 import org.modeshape.jboss.managed.ManagedEngine;
40 import org.modeshape.rhq.plugin.util.ModeShapeManagementView;
41 import org.modeshape.rhq.plugin.util.PluginConstants;
42 import org.modeshape.rhq.plugin.util.ProfileServiceUtil;
43 import org.rhq.core.domain.configuration.Configuration;
44 import org.rhq.core.domain.configuration.PropertyList;
45 import org.rhq.core.domain.configuration.PropertyMap;
46 import org.rhq.core.domain.configuration.PropertySimple;
47 import org.rhq.core.pluginapi.inventory.DiscoveredResourceDetails;
48 import org.rhq.core.pluginapi.inventory.InvalidPluginConfigurationException;
49 import org.rhq.core.pluginapi.inventory.ResourceDiscoveryComponent;
50 import org.rhq.core.pluginapi.inventory.ResourceDiscoveryContext;
51
52
53
54
55 public class SequencerDiscoveryComponent implements
56 ResourceDiscoveryComponent<SequencerComponent> {
57
58 private final Log log = LogFactory
59 .getLog(PluginConstants.DEFAULT_LOGGER_CATEGORY);
60
61
62
63
64
65
66 public Set<DiscoveredResourceDetails> discoverResources(
67 ResourceDiscoveryContext discoveryContext)
68 throws InvalidPluginConfigurationException, Exception {
69
70 Set<DiscoveredResourceDetails> discoveredResources = new HashSet<DiscoveredResourceDetails>();
71
72 ManagedComponent mc = ProfileServiceUtil
73 .getManagedComponent(
74 ((EngineComponent) discoveryContext
75 .getParentResourceComponent()).getConnection(),
76 new ComponentType(
77 PluginConstants.ComponentType.SequencingService.MODESHAPE_TYPE,
78 PluginConstants.ComponentType.SequencingService.MODESHAPE_SUB_TYPE),
79 PluginConstants.ComponentType.SequencingService.NAME);
80
81 if (mc == null) {
82 return discoveredResources;
83 }
84
85 String operation = "getSequencers";
86
87 MetaValue sequencers = ModeShapeManagementView.executeManagedOperation(
88 mc, operation, new MetaValue[] { null });
89
90 if (sequencers == null) {
91 return discoveredResources;
92 }
93
94 Collection<MetaValue> sequencerCollection = ModeShapeManagementView
95 .getSequencerCollectionValue(sequencers);
96
97 for (MetaValue managedSequencer : sequencerCollection) {
98
99 MetaValue name = ((CompositeValueSupport)managedSequencer).get("name");
100 MetaValue description = ((CompositeValueSupport)managedSequencer).get("description");
101
102
103
104
105
106
107 DiscoveredResourceDetails detail = new DiscoveredResourceDetails(
108 discoveryContext.getResourceType(),
109 ProfileServiceUtil.stringValue(name),
110 ProfileServiceUtil.stringValue(name),
111 null,
112 ProfileServiceUtil.stringValue(description),
113 discoveryContext.getDefaultPluginConfiguration(),
114 null
115 );
116
117 Configuration c = detail.getPluginConfiguration();
118
119 operation = "getProperties";
120
121 EnumValueSupport enumVs = new EnumValueSupport(new EnumMetaType(ManagedEngine.Component.values()), ManagedEngine.Component.SEQUENCER);
122
123 MetaValue[] args = new MetaValue[] {
124 name,
125 enumVs };
126
127 MetaValue properties = ModeShapeManagementView
128 .executeManagedOperation(mc, operation, args);
129
130 MetaValue[] propertyArray = ((CollectionValueSupport) properties)
131 .getElements();
132
133 PropertyList list = new PropertyList("propertyList");
134 PropertyMap propMap = null;
135 c.put(list);
136
137 for (MetaValue property : propertyArray) {
138
139 CompositeValueSupport proCvs = (CompositeValueSupport) property;
140 propMap = new PropertyMap("map");
141 propMap.put(new PropertySimple("label", ProfileServiceUtil
142 .stringValue(proCvs.get("label"))));
143 propMap.put(new PropertySimple("value", ProfileServiceUtil
144 .stringValue(proCvs.get("value"))));
145 propMap.put(new PropertySimple("description", ProfileServiceUtil
146 .stringValue(proCvs.get("description"))));
147 list.add(propMap);
148 }
149
150
151
152 discoveredResources.add(detail);
153 log.debug("Discovered ModeShape Sequencer: " + name);
154 }
155
156 return discoveredResources;
157
158 }
159 }