+ protected IDomainInfo parseDomain(Node rawDomain) throws ExecutionException {
+ IDomainInfo domain = null;
+ // Get the type
+ Node rawType = getFirstOf(rawDomain.getChildNodes(), MIStrings.TYPE);
+ if (rawType == null) {
+ throw new ExecutionException(Messages.TraceControl_MiMissingRequiredError);
+ }
+ String rawTypeString = rawType.getTextContent().toLowerCase();
+ TraceDomainType domainType = TraceDomainType.valueOfString(rawTypeString);
+ switch (domainType) {
+ case KERNEL:
+ domain = new DomainInfo(Messages.TraceControl_KernelProviderDisplayName);
+ domain.setIsKernel(true);
+ break;
+ case UST:
+ domain = new DomainInfo(Messages.TraceControl_UstGlobalDomainDisplayName);
+ domain.setIsKernel(false);
+ break;
+ case JUL:
+ /**
+ * TODO: Support for JUL JUL substructure and semantic is not the
+ * same as a regular UST or Kernel Domain There is no channel under
+ * JUL domain only events. The channel is activated in UST Channel
+ */
+ domain = new DomainInfo(Messages.TraceControl_JULDomainDisplayName);
+ domain.setIsKernel(false);
+ break;
+ case UNKNOWN:
+ domain = new DomainInfo(Messages.TraceControl_UnknownDomainDisplayName);
+ domain.setIsKernel(false);
+ break;
+ default:
+ throw new ExecutionException(Messages.TraceControl_MiInvalidElementError);
+ }
+
+ NodeList rawInfos = rawDomain.getChildNodes();
+ for (int i = 0; i < rawInfos.getLength(); i++) {
+ Node rawInfo = rawInfos.item(i);
+ switch (rawInfo.getNodeName()) {
+ case MIStrings.BUFFER_TYPE:
+ BufferType bufferType = BufferType.valueOfString(rawInfo.getTextContent());
+ domain.setBufferType(bufferType);
+ break;
+ case MIStrings.CHANNELS:
+ ArrayList<IChannelInfo> channels = new ArrayList<>();
+ parseChannels(rawInfo.getChildNodes(), channels);
+ if (channels.size() > 0) {
+ domain.setChannels(channels);
+ }
+ break;
+ default:
+ break;
+ }
+ }
+
+ return domain;
+ }
+
+ /**
+ * Parse a list of raw channel XML node into an ArrayList of IChannelInfo
+ *
+ * @param rawChannes
+ * List of raw channel XML node
+ * @param channels
+ * the parsed channels list
+ * @throws ExecutionException
+ * when missing required xml element (type)
+ */
+ private static void parseChannels(NodeList rawChannels, ArrayList<IChannelInfo> channels) throws ExecutionException {
+ IChannelInfo channel = null;
+ for (int i = 0; i < rawChannels.getLength(); i++) {
+ Node rawChannel = rawChannels.item(i);
+ if (rawChannel.getNodeName().equalsIgnoreCase(MIStrings.CHANNEL)) {
+ channel = new ChannelInfo(""); //$NON-NLS-1$
+
+ // Populate the channel
+ NodeList rawInfos = rawChannel.getChildNodes();
+ Node rawInfo = null;
+ for (int j = 0; j < rawInfos.getLength(); j++) {
+ rawInfo = rawInfos.item(j);
+ switch (rawInfo.getNodeName()) {
+ case MIStrings.NAME:
+ channel.setName(rawInfo.getTextContent());
+ break;
+ case MIStrings.ENABLED:
+ channel.setState(TraceEnablement.valueOfString(rawInfo.getTextContent()));
+ break;
+ case MIStrings.EVENTS:
+ List<IEventInfo> events = new ArrayList<>();
+ getEventInfo(rawInfo.getChildNodes(), events);
+ channel.setEvents(events);
+ break;
+ case MIStrings.ATTRIBUTES:
+ NodeList rawAttributes = rawInfo.getChildNodes();
+ for (int k = 0; k < rawAttributes.getLength(); k++) {
+ Node attribute = rawAttributes.item(k);
+ switch (attribute.getNodeName()) {
+ case MIStrings.OVERWRITE_MODE:
+ channel.setOverwriteMode(!LTTngControlServiceConstants.OVERWRITE_MODE_ATTRIBUTE_FALSE_MI.equalsIgnoreCase(attribute.getTextContent()));
+ break;
+ case MIStrings.SUBBUF_SIZE:
+ channel.setSubBufferSize(Long.valueOf(attribute.getTextContent()));
+ break;
+ case MIStrings.NUM_SUBBUF:
+ channel.setNumberOfSubBuffers(Integer.valueOf(attribute.getTextContent()));
+ break;
+ case MIStrings.SWITCH_TIMER_INTERVAL:
+ channel.setSwitchTimer(Long.valueOf(attribute.getTextContent()));
+ break;
+ case MIStrings.READ_TIMER_INTERVAL:
+ channel.setReadTimer(Long.valueOf(attribute.getTextContent()));
+ break;
+ case MIStrings.OUTPUT_TYPE:
+ channel.setOutputType(attribute.getTextContent());
+ break;
+ case MIStrings.TRACEFILE_SIZE:
+ channel.setMaxSizeTraceFiles(Integer.parseInt(attribute.getTextContent()));
+ break;
+ case MIStrings.TRACEFILE_COUNT:
+ channel.setMaxNumberTraceFiles(Integer.parseInt(attribute.getTextContent()));
+ break;
+ case MIStrings.LIVE_TIMER_INTERVAL:
+ // TODO: currently not supported by tmf
+ break;
+ default:
+ break;
+ }
+ }
+ break;
+ default:
+ break;
+ }
+ }
+ channels.add(channel);
+ }
+ }
+