mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-09-27 10:03:11 +07:00
Project Templates: initial
This commit is contained in:
@@ -0,0 +1,58 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<form xmlns="http://www.intellij.com/uidesigner/form/" version="1" bind-to-class="com.intellij.ide.util.newProjectWizard.SelectTemplateStep">
|
||||
<grid id="27dc6" binding="myPanel" layout-manager="GridLayoutManager" row-count="2" column-count="3" same-size-horizontally="false" same-size-vertically="false" hgap="-1" vgap="-1">
|
||||
<margin top="0" left="0" bottom="0" right="0"/>
|
||||
<constraints>
|
||||
<xy x="20" y="20" width="470" height="400"/>
|
||||
</constraints>
|
||||
<properties/>
|
||||
<border type="none"/>
|
||||
<children>
|
||||
<grid id="ac540" layout-manager="BorderLayout" hgap="0" vgap="0">
|
||||
<constraints>
|
||||
<grid row="1" column="0" row-span="1" col-span="1" vsize-policy="3" hsize-policy="3" anchor="8" fill="2" indent="0" use-parent-layout="false"/>
|
||||
</constraints>
|
||||
<properties/>
|
||||
<border type="none"/>
|
||||
<children>
|
||||
<component id="3580d" class="com.intellij.ui.SearchTextField" binding="mySearchField">
|
||||
<constraints border-constraint="North"/>
|
||||
<properties/>
|
||||
</component>
|
||||
<scrollpane id="474de" class="com.intellij.ui.components.JBScrollPane">
|
||||
<constraints border-constraint="Center"/>
|
||||
<properties/>
|
||||
<border type="none"/>
|
||||
<children>
|
||||
<component id="9dad" class="com.intellij.ui.components.JBList" binding="myTemplatesList">
|
||||
<constraints/>
|
||||
<properties/>
|
||||
</component>
|
||||
</children>
|
||||
</scrollpane>
|
||||
</children>
|
||||
</grid>
|
||||
<grid id="caf4" binding="mySettingsPanel" layout-manager="BorderLayout" hgap="0" vgap="0">
|
||||
<constraints>
|
||||
<grid row="1" column="1" row-span="1" col-span="1" vsize-policy="3" hsize-policy="3" anchor="0" fill="3" indent="0" use-parent-layout="false"/>
|
||||
</constraints>
|
||||
<properties/>
|
||||
<border type="none"/>
|
||||
<children/>
|
||||
</grid>
|
||||
<hspacer id="fc0b6">
|
||||
<constraints>
|
||||
<grid row="1" column="2" row-span="1" col-span="1" vsize-policy="1" hsize-policy="6" anchor="0" fill="1" indent="0" use-parent-layout="false"/>
|
||||
</constraints>
|
||||
</hspacer>
|
||||
<component id="dafde" class="com.intellij.ui.components.JBLabel">
|
||||
<constraints>
|
||||
<grid row="0" column="0" row-span="1" col-span="3" vsize-policy="0" hsize-policy="0" anchor="8" fill="0" indent="0" use-parent-layout="false"/>
|
||||
</constraints>
|
||||
<properties>
|
||||
<text value="Please select desired template from the list"/>
|
||||
</properties>
|
||||
</component>
|
||||
</children>
|
||||
</grid>
|
||||
</form>
|
||||
@@ -0,0 +1,134 @@
|
||||
/*
|
||||
* Copyright 2000-2012 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.newProjectWizard;
|
||||
|
||||
import com.intellij.ide.util.projectWizard.ModuleWizardStep;
|
||||
import com.intellij.openapi.util.Condition;
|
||||
import com.intellij.platform.DirectoryProjectGenerator;
|
||||
import com.intellij.platform.WebProjectGenerator;
|
||||
import com.intellij.psi.codeStyle.MinusculeMatcher;
|
||||
import com.intellij.psi.codeStyle.NameUtil;
|
||||
import com.intellij.ui.CollectionListModel;
|
||||
import com.intellij.ui.ColoredListCellRenderer;
|
||||
import com.intellij.ui.DocumentAdapter;
|
||||
import com.intellij.ui.SearchTextField;
|
||||
import com.intellij.ui.components.JBList;
|
||||
import com.intellij.util.containers.ContainerUtil;
|
||||
import com.intellij.util.containers.FactoryMap;
|
||||
import org.jetbrains.annotations.Nullable;
|
||||
|
||||
import javax.swing.*;
|
||||
import javax.swing.event.DocumentEvent;
|
||||
import javax.swing.event.ListSelectionEvent;
|
||||
import javax.swing.event.ListSelectionListener;
|
||||
import java.awt.*;
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* @author Dmitry Avdeev
|
||||
* Date: 9/26/12
|
||||
*/
|
||||
public class SelectTemplateStep extends ModuleWizardStep {
|
||||
|
||||
private JPanel myPanel;
|
||||
private JBList myTemplatesList;
|
||||
private JPanel mySettingsPanel;
|
||||
private SearchTextField mySearchField;
|
||||
private FactoryMap<WebProjectGenerator, WebProjectGenerator.GeneratorPeer> myPeers = new FactoryMap<WebProjectGenerator, WebProjectGenerator.GeneratorPeer>() {
|
||||
@Nullable
|
||||
@Override
|
||||
protected WebProjectGenerator.GeneratorPeer create(WebProjectGenerator key) {
|
||||
return key.createPeer();
|
||||
}
|
||||
};
|
||||
|
||||
public SelectTemplateStep() {
|
||||
final DirectoryProjectGenerator[] extensions = DirectoryProjectGenerator.EP_NAME.getExtensions();
|
||||
myTemplatesList.setModel(new CollectionListModel<DirectoryProjectGenerator>(extensions));
|
||||
myTemplatesList.setCellRenderer(new ColoredListCellRenderer() {
|
||||
@Override
|
||||
protected void customizeCellRenderer(JList list, Object value, int index, boolean selected, boolean hasFocus) {
|
||||
append(((DirectoryProjectGenerator)value).getName());
|
||||
}
|
||||
});
|
||||
myTemplatesList.getSelectionModel().addListSelectionListener(new ListSelectionListener() {
|
||||
@Override
|
||||
public void valueChanged(ListSelectionEvent e) {
|
||||
if (mySettingsPanel.getComponentCount() > 0) {
|
||||
mySettingsPanel.remove(0);
|
||||
}
|
||||
DirectoryProjectGenerator generator = getSelectedGenerator();
|
||||
if (generator instanceof WebProjectGenerator) {
|
||||
WebProjectGenerator.GeneratorPeer peer = myPeers.get(generator);
|
||||
mySettingsPanel.add(peer.getComponent(), BorderLayout.NORTH);
|
||||
}
|
||||
mySettingsPanel.revalidate();
|
||||
}
|
||||
});
|
||||
if (myTemplatesList.getModel().getSize() > 0) {
|
||||
myTemplatesList.setSelectedIndex(0);
|
||||
}
|
||||
mySearchField.addDocumentListener(new DocumentAdapter() {
|
||||
@Override
|
||||
protected void textChanged(DocumentEvent e) {
|
||||
final MinusculeMatcher matcher = NameUtil.buildMatcher(mySearchField.getText(), NameUtil.MatchingCaseSensitivity.NONE);
|
||||
DirectoryProjectGenerator generator = getSelectedGenerator();
|
||||
List<DirectoryProjectGenerator> list = ContainerUtil.filter(extensions, new Condition<DirectoryProjectGenerator>() {
|
||||
@Override
|
||||
public boolean value(DirectoryProjectGenerator generator) {
|
||||
String name = generator.getName();
|
||||
String[] words = NameUtil.nameToWords(name);
|
||||
for (String word : words) {
|
||||
if (matcher.matches(word)) return true;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
});
|
||||
myTemplatesList.setModel(new CollectionListModel<DirectoryProjectGenerator>(list));
|
||||
if (!list.isEmpty()) {
|
||||
if (list.contains(generator)) {
|
||||
myTemplatesList.setSelectedValue(generator, true);
|
||||
}
|
||||
else {
|
||||
myTemplatesList.setSelectedIndex(0);
|
||||
}
|
||||
}
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
public DirectoryProjectGenerator getSelectedGenerator() {
|
||||
return (DirectoryProjectGenerator)myTemplatesList.getSelectedValue();
|
||||
}
|
||||
|
||||
public WebProjectGenerator.GeneratorPeer getPeer(DirectoryProjectGenerator generator) {
|
||||
return myPeers.get(generator);
|
||||
}
|
||||
|
||||
@Override
|
||||
public JComponent getComponent() {
|
||||
return myPanel;
|
||||
}
|
||||
|
||||
@Override
|
||||
public JComponent getPreferredFocusedComponent() {
|
||||
return mySearchField;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void updateDataModel() {
|
||||
}
|
||||
}
|
||||
@@ -36,6 +36,10 @@ public class StepSequence {
|
||||
@NonNls private List<String> myTypes = new ArrayList<String>();
|
||||
private List<ModuleWizardStep> mySelectedSteps;
|
||||
|
||||
public StepSequence(ModuleWizardStep... commonSteps) {
|
||||
myCommonSteps.addAll(Arrays.asList(commonSteps));
|
||||
}
|
||||
|
||||
public void addCommonStep(@NotNull ModuleWizardStep step){
|
||||
myCommonSteps.add(step);
|
||||
}
|
||||
|
||||
+89
@@ -0,0 +1,89 @@
|
||||
/*
|
||||
* Copyright 2000-2012 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.newProjectWizard.modes;
|
||||
|
||||
import com.intellij.ide.util.newProjectWizard.ProjectNameStep;
|
||||
import com.intellij.ide.util.newProjectWizard.SelectTemplateStep;
|
||||
import com.intellij.ide.util.newProjectWizard.StepSequence;
|
||||
import com.intellij.ide.util.projectWizard.ProjectBuilder;
|
||||
import com.intellij.ide.util.projectWizard.WizardContext;
|
||||
import com.intellij.openapi.module.ModifiableModuleModel;
|
||||
import com.intellij.openapi.module.Module;
|
||||
import com.intellij.openapi.module.WebModuleBuilder;
|
||||
import com.intellij.openapi.project.Project;
|
||||
import com.intellij.openapi.project.ProjectBundle;
|
||||
import com.intellij.openapi.roots.ui.configuration.ModulesProvider;
|
||||
import com.intellij.platform.DirectoryProjectGenerator;
|
||||
import com.intellij.platform.WebProjectGenerator;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
import org.jetbrains.annotations.Nullable;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* @author Dmitry Avdeev
|
||||
* Date: 9/26/12
|
||||
*/
|
||||
public class CreateFromTemplateMode extends WizardMode {
|
||||
|
||||
private final SelectTemplateStep mySelectTemplateStep = new SelectTemplateStep();
|
||||
|
||||
@NotNull
|
||||
@Override
|
||||
public String getDisplayName(WizardContext context) {
|
||||
return ProjectBundle.message("project.new.wizard.from.template.title", context.getPresentationName());
|
||||
}
|
||||
|
||||
@NotNull
|
||||
@Override
|
||||
public String getDescription(WizardContext context) {
|
||||
return ProjectBundle.message("project.new.wizard.from.template.description", context.getPresentationName());
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean isAvailable(WizardContext context) {
|
||||
return true;
|
||||
}
|
||||
|
||||
@Nullable
|
||||
@Override
|
||||
protected StepSequence createSteps(WizardContext context, @NotNull ModulesProvider modulesProvider) {
|
||||
return new StepSequence(mySelectTemplateStep, new ProjectNameStep(context, this));
|
||||
}
|
||||
|
||||
@Nullable
|
||||
@Override
|
||||
public ProjectBuilder getModuleBuilder() {
|
||||
return new WebModuleBuilder() {
|
||||
@Nullable
|
||||
@Override
|
||||
public List<Module> commit(Project project, ModifiableModuleModel model, ModulesProvider modulesProvider) {
|
||||
List<Module> modules = super.commit(project, model, modulesProvider);
|
||||
if (modules != null && modules.size() == 1) {
|
||||
Module module = modules.get(0);
|
||||
DirectoryProjectGenerator generator = mySelectTemplateStep.getSelectedGenerator();
|
||||
WebProjectGenerator.GeneratorPeer peer = mySelectTemplateStep.getPeer(generator);
|
||||
generator.generateProject(project, project.getBaseDir(), peer.getSettings(), module);
|
||||
}
|
||||
return modules;
|
||||
}
|
||||
};
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onChosen(boolean enabled) {
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,36 @@
|
||||
/*
|
||||
* Copyright 2000-2012 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.openapi.module;
|
||||
|
||||
import com.intellij.ide.util.projectWizard.ModuleBuilder;
|
||||
import com.intellij.openapi.options.ConfigurationException;
|
||||
import com.intellij.openapi.roots.ModifiableRootModel;
|
||||
|
||||
/**
|
||||
* @author Dmitry Avdeev
|
||||
* Date: 9/27/12
|
||||
*/
|
||||
public class WebModuleBuilder extends ModuleBuilder {
|
||||
@Override
|
||||
public void setupRootModel(ModifiableRootModel modifiableRootModel) throws ConfigurationException {
|
||||
doAddContentEntry(modifiableRootModel);
|
||||
}
|
||||
|
||||
@Override
|
||||
public ModuleType getModuleType() {
|
||||
return WebModuleType.getInstance();
|
||||
}
|
||||
}
|
||||
@@ -4,8 +4,6 @@ import com.intellij.ide.util.projectWizard.ModuleBuilder;
|
||||
import com.intellij.ide.util.projectWizard.ModuleWizardStep;
|
||||
import com.intellij.ide.util.projectWizard.WebModuleGenerationStep;
|
||||
import com.intellij.ide.util.projectWizard.WizardContext;
|
||||
import com.intellij.openapi.options.ConfigurationException;
|
||||
import com.intellij.openapi.roots.ModifiableRootModel;
|
||||
import com.intellij.openapi.roots.ui.configuration.ModulesProvider;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
|
||||
@@ -29,16 +27,6 @@ public class WebModuleType extends WebModuleTypeBase<ModuleBuilder> {
|
||||
}
|
||||
|
||||
public ModuleBuilder createModuleBuilder() {
|
||||
return new ModuleBuilder() {
|
||||
@Override
|
||||
public void setupRootModel(ModifiableRootModel modifiableRootModel) throws ConfigurationException {
|
||||
doAddContentEntry(modifiableRootModel);
|
||||
}
|
||||
|
||||
@Override
|
||||
public ModuleType getModuleType() {
|
||||
return getInstance();
|
||||
}
|
||||
};
|
||||
return new WebModuleBuilder();
|
||||
}
|
||||
}
|
||||
|
||||
@@ -402,6 +402,9 @@ project.new.wizard.import.title=Import {0} from external &model
|
||||
project.new.wizard.import.description=<html>Create {0} {1} from external model ({2})</html>
|
||||
project.new.wizard.from.existent.sources.title=Create {0} from &existing sources
|
||||
project.new.wizard.from.existent.sources.description=<html>Create {0} {1} structure over existing sources</html>
|
||||
project.new.wizard.from.template.title=Create {0} from &template
|
||||
project.new.wizard.from.template.description=<html>Create {0} with pre-defined support for your favourite framework/technology</html>
|
||||
|
||||
project.new.wizard.module.name.title=Module na&me:
|
||||
project.new.wizard.module.root.title=Content &root:
|
||||
project.new.wizard.module.file.title=Module &file location:
|
||||
|
||||
@@ -1310,9 +1310,12 @@
|
||||
<projectService serviceImplementation="com.intellij.openapi.roots.ui.configuration.ProjectStructureConfigurable"/>
|
||||
<projectService serviceInterface="com.intellij.openapi.roots.ui.configuration.ProjectSettingsService"
|
||||
serviceImplementation="com.intellij.openapi.roots.ui.configuration.IdeaProjectSettingsService"/>
|
||||
|
||||
<wizardMode implementation="com.intellij.ide.util.newProjectWizard.modes.CreateFromScratchMode" id="CreateFromScratchMode" order="first"/>
|
||||
<wizardMode implementation="com.intellij.ide.util.newProjectWizard.modes.CreateProjectFromSourcesMode" id="CreateProjectFromSourcesMode" order="after CreateFromScratchMode"/>
|
||||
<wizardMode implementation="com.intellij.ide.util.newProjectWizard.modes.CreateModuleFromSourcesMode" id="CreateModuleFromSourcesMode" order="after CreateProjectFromSourcesMode"/>
|
||||
<wizardMode implementation="com.intellij.ide.util.newProjectWizard.modes.CreateFromTemplateMode" id="CreateFromTemplateMode" order="last"/>
|
||||
|
||||
<projectStructureDetector implementation="com.intellij.ide.util.projectWizard.importSources.impl.JavaProjectStructureDetector" order="first"/>
|
||||
|
||||
<applicationService serviceImplementation="com.intellij.execution.JavaRunConfigurationExtensionManager"/>
|
||||
|
||||
Reference in New Issue
Block a user