/* * Copyright 2000-2009 JetBrains s.r.o. * * 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.intellij.ide.util.projectWizard; import com.intellij.ide.IdeBundle; import com.intellij.ide.RecentProjectsManager; import com.intellij.openapi.Disposable; import com.intellij.openapi.application.ApplicationNamesInfo; import com.intellij.openapi.project.Project; import com.intellij.openapi.util.Disposer; import com.intellij.openapi.util.UserDataHolderBase; import com.intellij.projectImport.ProjectImportBuilder; import com.intellij.util.SystemProperties; import com.intellij.util.containers.ContainerUtil; import consulo.moduleImport.LegacyModuleImportProvider; import consulo.moduleImport.ModuleImportContext; import consulo.moduleImport.ModuleImportProvider; import gnu.trove.THashMap; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; import javax.swing.*; import java.io.File; import java.util.List; import java.util.Map; import java.util.Objects; public class WizardContext extends UserDataHolderBase implements Disposable { /** * a project where the module should be added, can be null => the wizard creates a new project */ @Nullable private final Project myProject; private String myProjectFileDirectory; private String myProjectName; private String myCompilerOutputDirectory; private ModuleImportProvider<?> myImportProvider; private final List<Listener> myListeners = ContainerUtil.createLockFreeCopyOnWriteList(); private final Map<ModuleImportProvider, ModuleImportContext> myModuleImportContexts = new THashMap<>(); public interface Listener { void buttonsUpdateRequested(); void nextStepRequested(); } public WizardContext(@Nullable Project project) { myProject = project; } @NotNull public ModuleImportContext initModuleImportContext(@NotNull ModuleImportProvider<?> provider) { ModuleImportContext context = provider.createContext(); Disposer.register(this, context); if (myModuleImportContexts.put(provider, context) != null) { throw new IllegalArgumentException(); } return context; } @NotNull public ModuleImportContext getModuleImportContext(@NotNull ModuleImportProvider<?> provider) { return Objects.requireNonNull(myModuleImportContexts.get(provider)); } @Nullable public Project getProject() { return myProject; } @NotNull public String getProjectFileDirectory() { if (myProjectFileDirectory != null) { return myProjectFileDirectory; } final String lastProjectLocation = RecentProjectsManager.getInstance().getLastProjectCreationLocation(); if (lastProjectLocation != null) { return lastProjectLocation.replace('/', File.separatorChar); } final String userHome = SystemProperties.getUserHome(); //noinspection HardCodedStringLiteral String productName = ApplicationNamesInfo.getInstance().getLowercaseProductName(); return userHome.replace('/', File.separatorChar) + File.separator + productName.replace(" ", "") + "Projects"; } public boolean isProjectFileDirectorySet() { return myProjectFileDirectory != null; } public void setProjectFileDirectory(String projectFileDirectory) { myProjectFileDirectory = projectFileDirectory; } public String getCompilerOutputDirectory() { return myCompilerOutputDirectory; } public void setCompilerOutputDirectory(final String compilerOutputDirectory) { myCompilerOutputDirectory = compilerOutputDirectory; } public String getProjectName() { return myProjectName; } public void setProjectName(String projectName) { myProjectName = projectName; } public boolean isCreatingNewProject() { return myProject == null; } public Icon getStepIcon() { return null; } public void requestWizardButtonsUpdate() { for (Listener listener : myListeners) { listener.buttonsUpdateRequested(); } } public void requestNextStep() { for (Listener listener : myListeners) { listener.nextStepRequested(); } } public void addContextListener(Listener listener) { myListeners.add(listener); } public void removeContextListener(Listener listener) { myListeners.remove(listener); } @Nullable @Deprecated public ProjectBuilder getProjectBuilder() { if (myImportProvider == null) { return null; } if (myImportProvider instanceof LegacyModuleImportProvider) { return ((LegacyModuleImportProvider)myImportProvider).getProvider().getBuilder(); } throw new IllegalArgumentException(); } @Nullable public ModuleImportProvider<?> getImportProvider() { return myImportProvider; } public void setImportProvider(@Nullable final ModuleImportProvider<?> projectBuilder) { myImportProvider = projectBuilder; } @Deprecated public void setProjectBuilder(@Nullable final ProjectImportBuilder projectBuilder) { myImportProvider = new LegacyModuleImportProvider(projectBuilder.getProvider()); } public String getPresentationName() { return myProject == null ? IdeBundle.message("project.new.wizard.project.identification") : IdeBundle.message("project.new.wizard.module.identification"); } @Override public void dispose() { myModuleImportContexts.clear(); } }