com.facebook.buck.intellij.ideabuck.build.BuckQueryCommandHandler.java Source code

Java tutorial

Introduction

Here is the source code for com.facebook.buck.intellij.ideabuck.build.BuckQueryCommandHandler.java

Source

/*
 * Copyright 2016-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.intellij.ideabuck.build;

import com.google.common.base.Function;
import com.google.gson.JsonArray;
import com.google.gson.JsonElement;
import com.google.gson.JsonParser;
import com.intellij.execution.process.ProcessOutputTypes;
import com.intellij.openapi.project.Project;
import com.intellij.openapi.util.Key;
import com.intellij.openapi.vfs.VfsUtil;
import com.intellij.openapi.vfs.VirtualFile;
import java.util.LinkedList;
import java.util.List;

public class BuckQueryCommandHandler extends BuckCommandHandler {

    private Function<List<String>, Void> actionsToExecute;

    public BuckQueryCommandHandler(final Project project, final VirtualFile root, final BuckCommand command,
            Function<List<String>, Void> actionsToExecute) {
        super(project, VfsUtil.virtualToIoFile(root), command, true);
        this.actionsToExecute = actionsToExecute;
    }

    @Override
    protected void notifyLines(Key outputType, Iterable<String> lines) {
        super.notifyLines(outputType, lines);
        if (outputType == ProcessOutputTypes.STDOUT) {
            List<String> targetList = new LinkedList<String>();
            for (String outputLine : lines) {
                if (!outputLine.isEmpty()) {
                    JsonElement jsonElement = new JsonParser().parse(outputLine);
                    if (jsonElement.isJsonArray()) {
                        JsonArray targets = jsonElement.getAsJsonArray();

                        for (JsonElement target : targets) {
                            targetList.add(target.getAsString());
                        }
                    }
                }
            }
            actionsToExecute.apply(targetList);
        }
    }

    @Override
    protected boolean beforeCommand() {
        return true;
    }

    @Override
    protected void afterCommand() {
    }
}