Skip to content

Commit

Permalink
Use dedicated radio buttons for managed and env
Browse files Browse the repository at this point in the history
  • Loading branch information
brian-mcnamara committed Aug 31, 2023
1 parent 50a65cf commit 26dcf49
Show file tree
Hide file tree
Showing 3 changed files with 97 additions and 39 deletions.
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<>();

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(projectViewFromEnvFile));
}
}
if (workspaceRoot.absolutePathFor(AutoImportProjectOpenProcessor.MANAGED_PROJECT_RELATIVE_PATH).toFile().exists()) {
options.add(UseKnownProjectViewOption.fromManagedProject(workspaceRoot));
}
}

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

return options.build();
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -16,8 +16,6 @@
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.projectview.ProjectViewStorageManager;
import com.google.idea.blaze.base.sync.workspace.WorkspacePathResolver;
import com.google.idea.blaze.base.ui.UiUtil;
Expand All @@ -33,7 +31,6 @@
import com.intellij.ui.TextFieldWithStoredHistory;
import java.awt.Dimension;
import java.io.File;
import java.util.List;
import javax.annotation.Nullable;
import javax.swing.JButton;
import javax.swing.JComponent;
Expand All @@ -58,37 +55,6 @@ public ImportFromWorkspaceProjectViewOption(BlazeNewProjectBuilder builder) {
projectViewPathField.setText(userSettings.get(LAST_WORKSPACE_PATH, ""));
projectViewPathField.setMinimumAndPreferredWidth(MINIMUM_FIELD_WIDTH);

String projectViewFromEnv = System.getenv(AutoImportProjectOpenProcessor.PROJECT_VIEW_FROM_ENV);
WorkspaceRoot workspaceRoot = builder.getWorkspaceData() != null ? builder.getWorkspaceData().workspaceRoot() : null;
//Add the project view passed in from the environment and/or managed project view to the projectViewPath field if they exist
if (workspaceRoot != null) {
if (projectViewFromEnv != null) {
File projectViewFromEnvFile = new File(projectViewFromEnv);
if (projectViewFromEnvFile.exists()) {
String relativeProjectViewPath = workspaceRoot.path().relativize(projectViewFromEnvFile.toPath()).toString();
if (projectViewPathField.getText().isEmpty()) {
projectViewPathField.setTextAndAddToHistory(relativeProjectViewPath);
} else {
List<String> history = projectViewPathField.getHistory();
if (!history.contains(relativeProjectViewPath)) {
history.add(0, relativeProjectViewPath);
projectViewPathField.setHistory(history);
}
}
}
}
if (projectViewPathField.getText().isEmpty()) {
projectViewPathField.setTextAndAddToHistory(AutoImportProjectOpenProcessor.MANAGED_PROJECT_RELATIVE_PATH);
} else {
List<String> history = projectViewPathField.getHistory();
if (!history.contains(AutoImportProjectOpenProcessor.MANAGED_PROJECT_RELATIVE_PATH)) {
history.add(0, AutoImportProjectOpenProcessor.MANAGED_PROJECT_RELATIVE_PATH);
projectViewPathField.setHistory(history);
}
}
}


JButton button = new JButton("...");
button.addActionListener(action -> chooseWorkspacePath());
int buttonSize = projectViewPathField.getPreferredSize().height;
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,70 @@
package com.google.idea.blaze.base.wizard2;

import com.google.idea.blaze.base.model.primitives.WorkspaceRoot;
import com.google.idea.blaze.base.project.AutoImportProjectOpenProcessor;
import com.intellij.openapi.options.ConfigurationException;
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 UseKnownProjectViewOption(String optionName, String description, File projectView) {
this.optionName = optionName;
this.description = description;
this.projectView = projectView;
}

@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 null;
}

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());
}

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

0 comments on commit 26dcf49

Please sign in to comment.