diff --git a/code_samples/facet_basics/META-INF/plugin.xml b/code_samples/facet_basics/META-INF/plugin.xml
index 01841ba44..5b15982c7 100644
--- a/code_samples/facet_basics/META-INF/plugin.xml
+++ b/code_samples/facet_basics/META-INF/plugin.xml
@@ -1,43 +1,36 @@
- com.yourcompany.unique.plugin.id
- Plugin display name here
- 1.0
- YourCompany
+ com.intellij.tutorials.facet
+ Facet Demo
+ 1.0
+ JetBrains
-
- most HTML tags may be used
- ]]>
+ Basic example of working with facets
-
- most HTML tags may be used
- ]]>
-
+ Initial commit
-
-
+
+
-
-
+
+
-
-
-
+
+
+
-
-
-
+
+
+
-
-
-
+
+
+
-
-
-
+
+
+
\ No newline at end of file
diff --git a/code_samples/facet_basics/src/com/intellij/tutorials/facet/DemoFacet.java b/code_samples/facet_basics/src/com/intellij/tutorials/facet/DemoFacet.java
new file mode 100644
index 000000000..804f6d1a4
--- /dev/null
+++ b/code_samples/facet_basics/src/com/intellij/tutorials/facet/DemoFacet.java
@@ -0,0 +1,16 @@
+package com.intellij.tutorials.facet;
+
+import com.intellij.facet.Facet;
+import com.intellij.facet.FacetType;
+import com.intellij.openapi.module.Module;
+
+/**
+ * @author Anna Bulenkova
+ */
+public class DemoFacet extends Facet {
+ public static final String ID = "DEMO_FACET_ID";
+
+ public DemoFacet(FacetType facetType, Module module, String name, DemoFacetConfiguration configuration, Facet underlyingFacet) {
+ super(facetType, module, name, configuration, underlyingFacet);
+ }
+}
diff --git a/code_samples/facet_basics/src/com/intellij/tutorials/facet/DemoFacetConfiguration.java b/code_samples/facet_basics/src/com/intellij/tutorials/facet/DemoFacetConfiguration.java
new file mode 100644
index 000000000..8ba2f450b
--- /dev/null
+++ b/code_samples/facet_basics/src/com/intellij/tutorials/facet/DemoFacetConfiguration.java
@@ -0,0 +1,79 @@
+package com.intellij.tutorials.facet;
+
+import com.intellij.facet.FacetConfiguration;
+import com.intellij.facet.ui.FacetEditorContext;
+import com.intellij.facet.ui.FacetEditorTab;
+import com.intellij.facet.ui.FacetValidatorsManager;
+import com.intellij.openapi.util.InvalidDataException;
+import com.intellij.openapi.util.WriteExternalException;
+import org.jdom.Element;
+import org.jetbrains.annotations.Nls;
+import org.jetbrains.annotations.NotNull;
+
+import javax.swing.*;
+import java.awt.*;
+
+/**
+ * @author Anna Bulenkova
+ */
+public class DemoFacetConfiguration implements FacetConfiguration {
+ public static final String DEMO_FACET_TAG_NAME = "DemoFacet";
+ public static final String PATH_TO_SDK_ATTR_NAME = "pathToSdk";
+ private String myPathToSdk = "";
+ JTextField myPath = new JTextField(myPathToSdk);
+ @Override
+ public FacetEditorTab[] createEditorTabs(FacetEditorContext context, FacetValidatorsManager manager) {
+ return new FacetEditorTab[] {
+ new FacetEditorTab() {
+
+ @NotNull
+ @Override
+ public JComponent createComponent() {
+ JPanel top = new JPanel(new BorderLayout());
+ top.add(new JLabel("Path to SDK: "), BorderLayout.WEST);
+ top.add(myPath);
+ JPanel panel = new JPanel(new BorderLayout());
+ panel.add(top, BorderLayout.NORTH);
+ return panel;
+ }
+
+ @Nls
+ @Override
+ public String getDisplayName() {
+ return "Demo Framework";
+ }
+
+ @Override
+ public boolean isModified() {
+ return myPath.getText().equalsIgnoreCase(myPathToSdk);
+// return !StringUtil.equalsIgnoreWhitespaces(myPath.getText(), myPathToSdk);
+ }
+
+ @Override
+ public void reset() {
+ myPath.setText(myPathToSdk);
+ }
+
+ @Override
+ public void disposeUIResources() {
+ }
+ }
+ };
+ }
+
+ @Override
+ public void readExternal(Element element) throws InvalidDataException {
+ Element facet = element.getChild(DEMO_FACET_TAG_NAME);
+ if (facet != null) {
+ myPathToSdk = facet.getAttributeValue(PATH_TO_SDK_ATTR_NAME, "");
+ myPath.setText(myPathToSdk);
+ }
+ }
+
+ @Override
+ public void writeExternal(Element element) throws WriteExternalException {
+ Element facet = new Element(DEMO_FACET_TAG_NAME);
+ facet.setAttribute(PATH_TO_SDK_ATTR_NAME, myPathToSdk);
+ element.addContent(facet);
+ }
+}
diff --git a/code_samples/facet_basics/src/com/intellij/tutorials/facet/DemoFacetType.java b/code_samples/facet_basics/src/com/intellij/tutorials/facet/DemoFacetType.java
new file mode 100644
index 000000000..f1664fd45
--- /dev/null
+++ b/code_samples/facet_basics/src/com/intellij/tutorials/facet/DemoFacetType.java
@@ -0,0 +1,43 @@
+package com.intellij.tutorials.facet;
+
+import com.intellij.facet.Facet;
+import com.intellij.facet.FacetType;
+import com.intellij.facet.FacetTypeId;
+import com.intellij.icons.AllIcons;
+import com.intellij.openapi.module.Module;
+import com.intellij.openapi.module.ModuleType;
+import org.jetbrains.annotations.NotNull;
+import org.jetbrains.annotations.Nullable;
+
+import javax.swing.*;
+
+/**
+ * @author Anna Bulenkova
+ */
+public class DemoFacetType extends FacetType {
+ private static final FacetTypeId TYPE_ID = new FacetTypeId(DemoFacet.ID);
+ public DemoFacetType() {
+ super(TYPE_ID, DemoFacet.ID, "Demo Facet");
+ }
+
+ @Override
+ public DemoFacetConfiguration createDefaultConfiguration() {
+ return new DemoFacetConfiguration();
+ }
+
+ @Override
+ public DemoFacet createFacet(@NotNull Module module, String s, @NotNull DemoFacetConfiguration configuration, Facet facet) {
+ return new DemoFacet(this, module, s, configuration, facet);
+ }
+
+ @Override
+ public boolean isSuitableModuleType(ModuleType type) {
+ return true;
+ }
+
+ @Nullable
+ @Override
+ public Icon getIcon() {
+ return AllIcons.General.Information;
+ }
+}