diff --git a/tutorials/framework/framework.md b/tutorials/framework/framework.md index 5d7c5899c..9856ee304 100644 --- a/tutorials/framework/framework.md +++ b/tutorials/framework/framework.md @@ -1,4 +1,108 @@ Supporting frameworks =============== -Under construction +The following tutorial meant to show how to support a custom framework type for a project and make this framework type embedded in a project wizard as a UI component. + +#Creating a new framework +In oder to make a custom framework available and configurable for a project +[FrameworkTypeEx]() +class needs to be extended: +```java +public class DemoFramework extends FrameworkTypeEx { +} +``` + +#Registering framework +The newly created framework should be registered as an extension point by putting *framework.type* attribute into ** section of +[plugin.xml]() +configuration file: +```xml + + + +``` + +#Setting up mandatory attributes +The framework component should have a unique name passed as a string literal to the constructor: + +```java +public class DemoFramework extends FrameworkTypeEx { + public static final String FRAMEWORK_ID = "Demo"; + protected DemoFramework() { + super(FRAMEWORK_ID); + } +} +``` + +*Presentable name* and *icon* define the appearance of visual components related to the framework: + +```java +public class DemoFramework extends FrameworkTypeEx { + public static final String FRAMEWORK_ID = "Demo"; + protected DemoFramework() { + super(FRAMEWORK_ID); + } + + @NotNull + @Override + public String getPresentableName() { + return "Demo Framework"; + } + + @NotNull + @Override + public Icon getIcon() { + return AllIcons.Providers.Apache; + } +} +``` + +#Creating provider for enabling framework support +To make framework set up available while executing project creating steps ```java public FrameworkSupportInModuleProvider createProvider();``` +of the +[DemoFramework]() +must be implemented: + +```java +@NotNull +@Override +public FrameworkSupportInModuleProvider createProvider() { + return new FrameworkSupportInModuleProvider() { + @NotNull + @Override + public FrameworkTypeEx getFrameworkType() { + return DemoFramework.this; + } + + @NotNull + @Override + public FrameworkSupportInModuleConfigurable createConfigurable(@NotNull FrameworkSupportModel model) { + return new FrameworkSupportInModuleConfigurable() { + @Nullable + @Override + public JComponent createComponent() { + return new JCheckBox("Extra Option"); + } + + @Override + public void addSupport(@NotNull Module module, @NotNull ModifiableRootModel model, @NotNull ModifiableModelsProvider provider) { + //do what you want here: setup a library, generate a specific file, etc + } + }; + } + + @Override + public boolean isEnabledForModuleType(@NotNull ModuleType type) { + return true; + } + }; +} +``` + +After compiling and running the code sample above an extra option for configuring the newly created custom framework should be available in the Project Wizard: +![Custom Framework Support](img/custom_framework.png) + + + + + diff --git a/tutorials/framework/img/custom_framework.png b/tutorials/framework/img/custom_framework.png new file mode 100644 index 000000000..4131d571d Binary files /dev/null and b/tutorials/framework/img/custom_framework.png differ