Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Add managed project to import wizard project view field #5227

Merged
merged 4 commits into from
Sep 1, 2023
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -55,6 +55,9 @@
*/
public class AutoImportProjectOpenProcessor extends ProjectOpenProcessor {

public static final String MANAGED_PROJECT_RELATIVE_PATH = "tools/intellij/.managed.bazelproject";
public static final String PROJECT_VIEW_FROM_ENV = "INTELLIJ_BAZEL_PROJECT_VIEW_TEMPLATE";

static final Key<Boolean> PROJECT_AUTO_IMPORTED = Key.create("bazel.project.auto_imported");

private static final Logger LOG = Logger.getInstance(AutoImportProjectOpenProcessor.class);
Expand Down Expand Up @@ -216,16 +219,15 @@ private ProjectView createProjectView(VirtualFile workspaceRoot,
WorkspacePathResolver pathResolver) {

// first check env for project view template
String projectViewFileFromEnv = System.getenv(
"INTELLIJ_BAZEL_PROJECT_VIEW_TEMPLATE");
String projectViewFileFromEnv = System.getenv(PROJECT_VIEW_FROM_ENV);

if (projectViewFileFromEnv != null) {
return fromFileProjectView(Paths.get(projectViewFileFromEnv), pathResolver);
}

// second check managed project view template
Path managedProjectViewFilePath = workspaceRoot.toNioPath()
.resolve("tools/intellij/.managed.bazelproject");
.resolve(MANAGED_PROJECT_RELATIVE_PATH);
if (managedProjectViewFilePath.toFile().exists()) {
return fromFileProjectView(managedProjectViewFilePath, pathResolver);
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -16,8 +16,12 @@
package com.google.idea.blaze.base.wizard2;

import com.google.common.collect.ImmutableList;
import com.google.idea.blaze.base.model.primitives.WorkspaceRoot;
import com.google.idea.blaze.base.project.AutoImportProjectOpenProcessor;
import com.intellij.openapi.Disposable;

import java.io.File;

/** Provides bazel options for the wizard. */
public class BazelWizardOptionProvider implements BlazeWizardOptionProvider {

Expand All @@ -30,10 +34,28 @@ public ImmutableList<TopLevelSelectWorkspaceOption> getSelectWorkspaceOptions(
@Override
public ImmutableList<BlazeSelectProjectViewOption> getSelectProjectViewOptions(
BlazeNewProjectBuilder builder) {
return ImmutableList.of(
new CreateFromScratchProjectViewOption(),
new ImportFromWorkspaceProjectViewOption(builder),
new GenerateFromBuildFileSelectProjectViewOption(builder),
new CopyExternalProjectViewOption(builder));
ImmutableList.Builder<BlazeSelectProjectViewOption> options = new ImmutableList.Builder<>();

options.add(new CreateFromScratchProjectViewOption());
options.add(new ImportFromWorkspaceProjectViewOption(builder));
options.add(new GenerateFromBuildFileSelectProjectViewOption(builder));
options.add(new CopyExternalProjectViewOption(builder));

String projectViewFromEnv = System.getenv(AutoImportProjectOpenProcessor.PROJECT_VIEW_FROM_ENV);
WorkspaceRoot workspaceRoot = builder.getWorkspaceData() != null ? builder.getWorkspaceData().workspaceRoot() : null;

if (workspaceRoot != null) {
if (projectViewFromEnv != null) {
File projectViewFromEnvFile = new File(projectViewFromEnv);
if (projectViewFromEnvFile.exists()) {
options.add(UseKnownProjectViewOption.fromEnvironmentVariable(workspaceRoot, projectViewFromEnvFile));
}
}
if (workspaceRoot.absolutePathFor(AutoImportProjectOpenProcessor.MANAGED_PROJECT_RELATIVE_PATH).toFile().exists()) {
options.add(UseKnownProjectViewOption.fromManagedProject(workspaceRoot));
}
}

return options.build();
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,84 @@
package com.google.idea.blaze.base.wizard2;

import com.google.idea.blaze.base.model.primitives.WorkspacePath;
import com.google.idea.blaze.base.model.primitives.WorkspaceRoot;
import com.google.idea.blaze.base.project.AutoImportProjectOpenProcessor;
import com.google.idea.blaze.base.ui.UiUtil;
import com.intellij.openapi.options.ConfigurationException;
import com.intellij.ui.components.JBLabel;
import org.jetbrains.annotations.Nullable;

import javax.swing.*;
import java.io.File;
import java.io.IOException;
import java.nio.charset.StandardCharsets;
import java.nio.file.Files;

public class UseKnownProjectViewOption implements BlazeSelectProjectViewOption {

private final String optionName;
private final String description;
private final File projectView;
private final JComponent component;

private UseKnownProjectViewOption(String optionName, String description, File projectView, WorkspaceRoot workspaceRoot) {
this.optionName = optionName;
this.description = description;
this.projectView = projectView;
WorkspacePath workspacePath = workspaceRoot.workspacePathForSafe(projectView);
this.component = UiUtil.createHorizontalBox(
HORIZONTAL_LAYOUT_GAP, new JBLabel("Project view:"),
new JBLabel(workspacePath != null ? workspacePath.relativePath() : projectView.getAbsolutePath()));
}

@Override
public String getOptionName() {
return optionName;
}

@Override
public String getDescription() {
return description;
}

@Nullable
@Override
public String getInitialProjectViewText() {
try {
byte[] bytes = Files.readAllBytes(projectView.toPath());
return new String(bytes, StandardCharsets.UTF_8);
} catch (IOException e) {
return null;
}
}

@Override
public void validateAndUpdateBuilder(BlazeNewProjectBuilder builder) throws ConfigurationException {

}

@Override
public void commit() throws BlazeProjectCommitException {

}

@Nullable
@Override
public JComponent getUiComponent() {
return component;
}

public static UseKnownProjectViewOption fromManagedProject(WorkspaceRoot root) {
return new UseKnownProjectViewOption("use-managed-view",
"Clone project's default view",
root.absolutePathFor(AutoImportProjectOpenProcessor.MANAGED_PROJECT_RELATIVE_PATH).toFile(),
root);
}

public static UseKnownProjectViewOption fromEnvironmentVariable(WorkspaceRoot root, File file) {
return new UseKnownProjectViewOption("use-view-from-env",
"Clone project view provided from environment",
file,
root);
}
}
Loading