com.facebook.buck.apple.simulator.SimctlListOutputParsing.java Source code

Java tutorial

Introduction

Here is the source code for com.facebook.buck.apple.simulator.SimctlListOutputParsing.java

Source

/*
 * Copyright 2015-present Facebook, Inc.
 *
 * Licensed under the Apache License, Version 2.0 (the "License"); you may
 * not use this file except in compliance with the License. You may obtain
 * a copy of the License at
 *
 *     http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
 * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
 * License for the specific language governing permissions and limitations
 * under the License.
 */

package com.facebook.buck.apple.simulator;

import com.facebook.buck.log.Logger;

import com.google.common.collect.ImmutableSet;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.Reader;

import java.util.regex.Matcher;
import java.util.regex.Pattern;

/**
 * Utility class to parse the output of `xcrun simctl list`.
 */
public class SimctlListOutputParsing {
    private static final Logger LOG = Logger.get(SimctlListOutputParsing.class);

    private static final String DEVICE_NAME_GROUP = "name";
    private static final String DEVICE_UDID_GROUP = "udid";
    private static final String DEVICE_STATE_GROUP = "state";
    private static final String DEVICE_UNAVAILABLE_GROUP = "unavailable";

    private static final Pattern SIMCTL_LIST_DEVICES_PATTERN = Pattern
            .compile(" *(?<" + DEVICE_NAME_GROUP + ">.+) " + "\\((?<" + DEVICE_UDID_GROUP + ">[0-9A-F-]+)\\) "
                    + "\\((?<" + DEVICE_STATE_GROUP + ">Creating|Booting|Shutting Down|Shutdown|Booted)\\)" + "(?<"
                    + DEVICE_UNAVAILABLE_GROUP + ">\\(unavailable, .*\\))?");

    // Utility class; do not instantiate.
    private SimctlListOutputParsing() {
    }

    /**
     * Parses each line of input from {@code reader}, adding any available simulators to
     * {@code simulatorsBuilder}.
     */
    public static void parseOutputFromReader(Reader reader, ImmutableSet.Builder<AppleSimulator> simulatorsBuilder)
            throws IOException {
        try (BufferedReader br = new BufferedReader(reader)) {
            String line;
            while ((line = br.readLine()) != null) {
                parseLine(line, simulatorsBuilder);
            }
        }
    }

    private static void parseLine(String line, ImmutableSet.Builder<AppleSimulator> simulatorsBuilder) {
        LOG.debug("Parsing simctl list output line: %s", line);
        Matcher matcher = SIMCTL_LIST_DEVICES_PATTERN.matcher(line);
        if (matcher.matches() && matcher.group(DEVICE_UNAVAILABLE_GROUP) == null) {
            AppleSimulator simulator = AppleSimulator.builder().setName(matcher.group(DEVICE_NAME_GROUP))
                    .setUdid(matcher.group(DEVICE_UDID_GROUP))
                    .setSimulatorState(AppleSimulatorState.fromString(matcher.group(DEVICE_STATE_GROUP))).build();
            LOG.debug("Got simulator: %s", simulator);
            simulatorsBuilder.add(simulator);
        }
    }
}