From 2b0ba4c40d5633d37578f5ee292f978205f2d0b2 Mon Sep 17 00:00:00 2001 From: Yanglin Date: Thu, 12 Dec 2013 10:14:36 +0800 Subject: [PATCH 01/85] Prepare for new release --- META-INF/plugin.xml | 6 +++++- src/com/seventh7/mybatis/action/MybatisTypedHandler.java | 7 +++++-- .../seventh7/mybatis/contributor/TestParamContributor.java | 7 ++++++- 3 files changed, 16 insertions(+), 4 deletions(-) diff --git a/META-INF/plugin.xml b/META-INF/plugin.xml index e2c31f1..583f833 100644 --- a/META-INF/plugin.xml +++ b/META-INF/plugin.xml @@ -1,7 +1,7 @@ com.seventh7.plugin.mybatis MyBatis plugin - 2.01 + 2.02 Yanglin 2.02 +
    +
  • Fix bug
  • +

2.01

  • Improvement for intellij 13
  • diff --git a/src/com/seventh7/mybatis/action/MybatisTypedHandler.java b/src/com/seventh7/mybatis/action/MybatisTypedHandler.java index 34a762c..96d7227 100644 --- a/src/com/seventh7/mybatis/action/MybatisTypedHandler.java +++ b/src/com/seventh7/mybatis/action/MybatisTypedHandler.java @@ -4,6 +4,7 @@ import com.intellij.codeInsight.completion.CompletionType; import com.intellij.codeInsight.editorActions.CompletionAutoPopupHandler; import com.intellij.codeInsight.editorActions.TypedHandlerDelegate; +import com.intellij.openapi.editor.Document; import com.intellij.openapi.editor.Editor; import com.intellij.openapi.project.Project; import com.intellij.psi.PsiDocumentManager; @@ -45,10 +46,12 @@ public Result charTyped(char c, final Project project, @NotNull final Editor edi } private static void autoPopupParameter(final Project project, final Editor editor) { - CompletionAutoPopupHandler.runLaterWithCommitted(project, editor.getDocument(), new Runnable() { + final Document document = editor.getDocument(); + CompletionAutoPopupHandler.runLaterWithCommitted(project, document, new Runnable() { @Override public void run() { - if (PsiDocumentManager.getInstance(project).isCommitted(editor.getDocument())) { + PsiDocumentManager psiDocumentManager = PsiDocumentManager.getInstance(project); + if (psiDocumentManager.isCommitted(document)) { new CodeCompletionHandlerBase(CompletionType.BASIC).invokeCompletion(project, editor, 1); } } diff --git a/src/com/seventh7/mybatis/contributor/TestParamContributor.java b/src/com/seventh7/mybatis/contributor/TestParamContributor.java index 8feb444..2453d61 100644 --- a/src/com/seventh7/mybatis/contributor/TestParamContributor.java +++ b/src/com/seventh7/mybatis/contributor/TestParamContributor.java @@ -12,6 +12,7 @@ import com.intellij.openapi.project.Project; import com.intellij.patterns.XmlPatterns; import com.intellij.psi.PsiElement; +import com.intellij.psi.PsiMethod; import com.intellij.psi.PsiParameter; import com.intellij.util.ProcessingContext; import com.seventh7.mybatis.annotation.Annotation; @@ -46,7 +47,11 @@ public static void addElementForPsiParameter(@NotNull Project project, @NotNull if (null == element) { return; } - for (PsiParameter parameter : JavaUtils.findMethod(project, element).get().getParameterList().getParameters()) { + Optional method = JavaUtils.findMethod(project, element); + if (!method.isPresent()) { + return; + } + for (PsiParameter parameter : method.get().getParameterList().getParameters()) { Optional valueText = JavaUtils.getAnnotationValueText(parameter, Annotation.PARAM); if (valueText.isPresent()) { LookupElementBuilder builder = LookupElementBuilder.create(valueText.get()).withIcon(Icons.PARAM_COMPLETION_ICON); From c1a7d1a8062d4788ef57088cea12bf663269c69e Mon Sep 17 00:00:00 2001 From: Yanglin Date: Mon, 16 Dec 2013 00:17:07 +0800 Subject: [PATCH 02/85] Model and primitive parameter type support --- META-INF/plugin.xml | 2 +- .../contributor/TestParamContributor.java | 94 ++++++++++++++++++- 2 files changed, 92 insertions(+), 4 deletions(-) diff --git a/META-INF/plugin.xml b/META-INF/plugin.xml index 583f833..ad87667 100644 --- a/META-INF/plugin.xml +++ b/META-INF/plugin.xml @@ -12,7 +12,7 @@ 2.02
      -
    • Fix bug
    • +
    • Model and primitive parameter type support

    2.01

      diff --git a/src/com/seventh7/mybatis/contributor/TestParamContributor.java b/src/com/seventh7/mybatis/contributor/TestParamContributor.java index 2453d61..2811e1b 100644 --- a/src/com/seventh7/mybatis/contributor/TestParamContributor.java +++ b/src/com/seventh7/mybatis/contributor/TestParamContributor.java @@ -1,6 +1,9 @@ package com.seventh7.mybatis.contributor; import com.google.common.base.Optional; +import com.google.common.collect.ImmutableSet; +import com.google.common.collect.Lists; +import com.google.common.collect.Sets; import com.intellij.codeInsight.completion.CompletionContributor; import com.intellij.codeInsight.completion.CompletionParameters; @@ -11,12 +14,17 @@ import com.intellij.codeInsight.lookup.LookupElementBuilder; import com.intellij.openapi.project.Project; import com.intellij.patterns.XmlPatterns; +import com.intellij.psi.PsiClass; import com.intellij.psi.PsiElement; +import com.intellij.psi.PsiField; import com.intellij.psi.PsiMethod; import com.intellij.psi.PsiParameter; +import com.intellij.psi.PsiType; +import com.intellij.psi.impl.source.PsiClassReferenceType; import com.intellij.util.ProcessingContext; import com.seventh7.mybatis.annotation.Annotation; import com.seventh7.mybatis.dom.model.IdDomElement; +import com.seventh7.mybatis.util.CollectionUtils; import com.seventh7.mybatis.util.Icons; import com.seventh7.mybatis.util.JavaUtils; import com.seventh7.mybatis.util.MapperUtils; @@ -25,11 +33,21 @@ import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; +import java.util.Collection; +import java.util.Collections; +import java.util.HashSet; + /** * @author yanglin */ public class TestParamContributor extends CompletionContributor { + private final static Collection HANDLER_CHAIN = ImmutableSet.of( + new AnnotationParameterLookupHandler(), + new ModelParameterLookupHandler(), + new PrimitiveParameterLookupHandler() + ); + @SuppressWarnings("unchecked") public TestParamContributor() { extend(CompletionType.BASIC, @@ -52,11 +70,81 @@ public static void addElementForPsiParameter(@NotNull Project project, @NotNull return; } for (PsiParameter parameter : method.get().getParameterList().getParameters()) { - Optional valueText = JavaUtils.getAnnotationValueText(parameter, Annotation.PARAM); - if (valueText.isPresent()) { - LookupElementBuilder builder = LookupElementBuilder.create(valueText.get()).withIcon(Icons.PARAM_COMPLETION_ICON); + for (SimpleParameterLookupHandler handler : HANDLER_CHAIN) { + handler.handle(result, parameter); + } + } + } + + private abstract static class SimpleParameterLookupHandler { + + public void handle(@NotNull CompletionResultSet result, @NotNull PsiParameter parameter) { + Collection parameterStrings = getParameterString(parameter); + if (CollectionUtils.isEmpty(parameterStrings)) { + return; + } + for (String parameterString : parameterStrings) { + LookupElementBuilder builder = LookupElementBuilder.create(parameterString).withIcon(Icons.PARAM_COMPLETION_ICON); result.addElement(PrioritizedLookupElement.withPriority(builder, MybatisConstants.PRIORITY)); } } + + @NotNull + public abstract Collection getParameterString(@NotNull PsiParameter parameter); + } + + private final static class AnnotationParameterLookupHandler extends SimpleParameterLookupHandler { + + @NotNull + @Override + public Collection getParameterString(@NotNull PsiParameter parameter) { + Optional valueText = JavaUtils.getAnnotationValueText(parameter, Annotation.PARAM); + return valueText.isPresent() ? Lists.newArrayList(valueText.get()) : Collections.emptyList(); + } + + } + + private abstract static class NoParamAnnotationPresentParameterLookupHandler extends SimpleParameterLookupHandler { + + @NotNull + @Override + public Collection getParameterString(@NotNull PsiParameter parameter) { + Optional valueText = JavaUtils.getAnnotationValueText(parameter, Annotation.PARAM); + return valueText.isPresent() ? Collections.emptyList() : doHandle(parameter); + } + + @NotNull + public abstract Collection doHandle(@NotNull PsiParameter parameter); + } + + private final static class PrimitiveParameterLookupHandler extends NoParamAnnotationPresentParameterLookupHandler { + + @NotNull + @Override + public Collection doHandle(@NotNull PsiParameter parameter) { + return Lists.newArrayList(parameter.getName()); + } + } + + private final static class ModelParameterLookupHandler extends NoParamAnnotationPresentParameterLookupHandler { + + @NotNull + @Override + public Collection doHandle(@NotNull PsiParameter parameter) { + PsiType type = parameter.getType(); + if (!(type instanceof PsiClassReferenceType)) { return Collections.emptyList(); } + + PsiClass clazz = ((PsiClassReferenceType) type).resolve(); + if (null == clazz) { return Collections.emptyList(); } + + HashSet res = Sets.newHashSet(); + for (PsiField field : JavaUtils.findSettablePsiFields(clazz)) { + res.add(field.getName()); + } + + return res; + } + } + } From e2ab1a97cfecef9148e6b1f0f7b06511e4191e3e Mon Sep 17 00:00:00 2001 From: Yanglin Date: Mon, 16 Dec 2013 00:52:08 +0800 Subject: [PATCH 03/85] Change the way to show parameter in mapper xml --- .../contributor/TestParamContributor.java | 44 ++++++++++++------- 1 file changed, 28 insertions(+), 16 deletions(-) diff --git a/src/com/seventh7/mybatis/contributor/TestParamContributor.java b/src/com/seventh7/mybatis/contributor/TestParamContributor.java index 2811e1b..c232daf 100644 --- a/src/com/seventh7/mybatis/contributor/TestParamContributor.java +++ b/src/com/seventh7/mybatis/contributor/TestParamContributor.java @@ -18,9 +18,12 @@ import com.intellij.psi.PsiElement; import com.intellij.psi.PsiField; import com.intellij.psi.PsiMethod; +import com.intellij.psi.PsiNamedElement; import com.intellij.psi.PsiParameter; +import com.intellij.psi.PsiPrimitiveType; import com.intellij.psi.PsiType; import com.intellij.psi.impl.source.PsiClassReferenceType; +import com.intellij.util.PlatformIcons; import com.intellij.util.ProcessingContext; import com.seventh7.mybatis.annotation.Annotation; import com.seventh7.mybatis.dom.model.IdDomElement; @@ -79,27 +82,34 @@ public static void addElementForPsiParameter(@NotNull Project project, @NotNull private abstract static class SimpleParameterLookupHandler { public void handle(@NotNull CompletionResultSet result, @NotNull PsiParameter parameter) { - Collection parameterStrings = getParameterString(parameter); - if (CollectionUtils.isEmpty(parameterStrings)) { + Collection lookupElements = getParameterLookupElements(parameter); + if (CollectionUtils.isEmpty(lookupElements)) { return; } - for (String parameterString : parameterStrings) { - LookupElementBuilder builder = LookupElementBuilder.create(parameterString).withIcon(Icons.PARAM_COMPLETION_ICON); - result.addElement(PrioritizedLookupElement.withPriority(builder, MybatisConstants.PRIORITY)); + for (Object lookupElement : lookupElements) { + LookupElementBuilder builder = null; + if (lookupElement instanceof String) { + builder = LookupElementBuilder.create((String) lookupElement).withIcon(Icons.PARAM_COMPLETION_ICON); + } else if (lookupElement instanceof PsiNamedElement) { + builder = LookupElementBuilder.create((PsiNamedElement) lookupElement).withIcon(PlatformIcons.FIELD_ICON); + } + if (null != builder) { + result.addElement(PrioritizedLookupElement.withPriority(builder, MybatisConstants.PRIORITY)); + } } } @NotNull - public abstract Collection getParameterString(@NotNull PsiParameter parameter); + public abstract Collection getParameterLookupElements(@NotNull PsiParameter parameter); } private final static class AnnotationParameterLookupHandler extends SimpleParameterLookupHandler { @NotNull @Override - public Collection getParameterString(@NotNull PsiParameter parameter) { + public Collection getParameterLookupElements(@NotNull PsiParameter parameter) { Optional valueText = JavaUtils.getAnnotationValueText(parameter, Annotation.PARAM); - return valueText.isPresent() ? Lists.newArrayList(valueText.get()) : Collections.emptyList(); + return valueText.isPresent() ? Lists.newArrayList(valueText.get()) : Collections.emptyList(); } } @@ -108,21 +118,23 @@ private abstract static class NoParamAnnotationPresentParameterLookupHandler ext @NotNull @Override - public Collection getParameterString(@NotNull PsiParameter parameter) { + public Collection getParameterLookupElements(@NotNull PsiParameter parameter) { Optional valueText = JavaUtils.getAnnotationValueText(parameter, Annotation.PARAM); - return valueText.isPresent() ? Collections.emptyList() : doHandle(parameter); + return valueText.isPresent() ? Collections.emptyList() : doHandle(parameter); } @NotNull - public abstract Collection doHandle(@NotNull PsiParameter parameter); + public abstract Collection doHandle(@NotNull PsiParameter parameter); } private final static class PrimitiveParameterLookupHandler extends NoParamAnnotationPresentParameterLookupHandler { @NotNull @Override - public Collection doHandle(@NotNull PsiParameter parameter) { - return Lists.newArrayList(parameter.getName()); + public Collection doHandle(@NotNull PsiParameter parameter) { + return parameter.getType() instanceof PsiPrimitiveType + ? Lists.newArrayList(parameter.getName()) + : Collections.emptyList(); } } @@ -130,16 +142,16 @@ private final static class ModelParameterLookupHandler extends NoParamAnnotation @NotNull @Override - public Collection doHandle(@NotNull PsiParameter parameter) { + public Collection doHandle(@NotNull PsiParameter parameter) { PsiType type = parameter.getType(); if (!(type instanceof PsiClassReferenceType)) { return Collections.emptyList(); } PsiClass clazz = ((PsiClassReferenceType) type).resolve(); if (null == clazz) { return Collections.emptyList(); } - HashSet res = Sets.newHashSet(); + HashSet res = Sets.newHashSet(); for (PsiField field : JavaUtils.findSettablePsiFields(clazz)) { - res.add(field.getName()); + res.add(field); } return res; From 4795eb6b1f72c1e31a8d272e9852d5ff92cceba3 Mon Sep 17 00:00:00 2001 From: Yanglin Date: Mon, 16 Dec 2013 09:45:44 +0800 Subject: [PATCH 04/85] Fix typo --- .../seventh7/mybatis/contributor/TestParamContributor.java | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/src/com/seventh7/mybatis/contributor/TestParamContributor.java b/src/com/seventh7/mybatis/contributor/TestParamContributor.java index c232daf..688eed2 100644 --- a/src/com/seventh7/mybatis/contributor/TestParamContributor.java +++ b/src/com/seventh7/mybatis/contributor/TestParamContributor.java @@ -18,7 +18,6 @@ import com.intellij.psi.PsiElement; import com.intellij.psi.PsiField; import com.intellij.psi.PsiMethod; -import com.intellij.psi.PsiNamedElement; import com.intellij.psi.PsiParameter; import com.intellij.psi.PsiPrimitiveType; import com.intellij.psi.PsiType; @@ -90,8 +89,8 @@ public void handle(@NotNull CompletionResultSet result, @NotNull PsiParameter pa LookupElementBuilder builder = null; if (lookupElement instanceof String) { builder = LookupElementBuilder.create((String) lookupElement).withIcon(Icons.PARAM_COMPLETION_ICON); - } else if (lookupElement instanceof PsiNamedElement) { - builder = LookupElementBuilder.create((PsiNamedElement) lookupElement).withIcon(PlatformIcons.FIELD_ICON); + } else if (lookupElement instanceof PsiField) { + builder = LookupElementBuilder.create((PsiField) lookupElement).withIcon(PlatformIcons.FIELD_ICON); } if (null != builder) { result.addElement(PrioritizedLookupElement.withPriority(builder, MybatisConstants.PRIORITY)); From f5621a650499148439312d6a498097c85303097a Mon Sep 17 00:00:00 2001 From: Yanglin Date: Sun, 22 Dec 2013 01:24:16 +0800 Subject: [PATCH 05/85] Finish switching between java type and alias --- META-INF/plugin.xml | 9 ++- .../mybatis/alias/AliasClassReference.java | 4 +- .../mybatis/intention/AliasSwitchChooser.java | 25 ++++++ .../intention/AliasSwitchIntentionAction.java | 80 +++++++++++++++++++ 4 files changed, 113 insertions(+), 5 deletions(-) create mode 100644 src/com/seventh7/mybatis/intention/AliasSwitchChooser.java create mode 100644 src/com/seventh7/mybatis/intention/AliasSwitchIntentionAction.java diff --git a/META-INF/plugin.xml b/META-INF/plugin.xml index ad87667..9f82beb 100644 --- a/META-INF/plugin.xml +++ b/META-INF/plugin.xml @@ -1,7 +1,7 @@ com.seventh7.plugin.mybatis MyBatis plugin - 2.02 + 2.03 Yanglin 2.02 +

      2.03

        -
      • Model and primitive parameter type support
      • +
      • Support switching between java type and alias

      2.01

        @@ -85,5 +85,8 @@ com.seventh7.mybatis.intention.GenerateMapperIntention + + com.seventh7.mybatis.intention.AliasSwitchIntentionAction + \ No newline at end of file diff --git a/src/com/seventh7/mybatis/alias/AliasClassReference.java b/src/com/seventh7/mybatis/alias/AliasClassReference.java index 143ccdc..ea71113 100644 --- a/src/com/seventh7/mybatis/alias/AliasClassReference.java +++ b/src/com/seventh7/mybatis/alias/AliasClassReference.java @@ -3,7 +3,7 @@ import com.google.common.base.Function; import com.google.common.collect.Collections2; -import com.intellij.psi.PsiElement; +import com.intellij.psi.PsiClass; import com.intellij.psi.PsiReferenceBase; import com.intellij.psi.xml.XmlAttributeValue; @@ -29,7 +29,7 @@ public AliasClassReference(@NotNull XmlAttributeValue element) { } @Nullable @Override - public PsiElement resolve() { + public PsiClass resolve() { XmlAttributeValue attributeValue = getElement(); return AliasFacade.getInstance(attributeValue.getProject()).findPsiClass(attributeValue, attributeValue.getValue()).orNull(); } diff --git a/src/com/seventh7/mybatis/intention/AliasSwitchChooser.java b/src/com/seventh7/mybatis/intention/AliasSwitchChooser.java new file mode 100644 index 0000000..5514677 --- /dev/null +++ b/src/com/seventh7/mybatis/intention/AliasSwitchChooser.java @@ -0,0 +1,25 @@ +package com.seventh7.mybatis.intention; + +import com.intellij.openapi.editor.Editor; +import com.intellij.openapi.project.Project; +import com.intellij.psi.PsiFile; +import com.intellij.psi.PsiReference; +import com.intellij.psi.impl.source.resolve.reference.impl.providers.JavaClassReference; +import com.seventh7.mybatis.alias.AliasClassReference; + +import org.jetbrains.annotations.NotNull; + +/** + * @author yanglin + */ +public class AliasSwitchChooser implements IntentionChooser{ + + public static final AliasSwitchChooser INSTANCE = new AliasSwitchChooser(); + + @Override + public boolean isAvailable(@NotNull Project project, Editor editor, PsiFile file) { + PsiReference reference = file.findReferenceAt(editor.getCaretModel().getOffset()); + return reference instanceof JavaClassReference || reference instanceof AliasClassReference; + } + +} diff --git a/src/com/seventh7/mybatis/intention/AliasSwitchIntentionAction.java b/src/com/seventh7/mybatis/intention/AliasSwitchIntentionAction.java new file mode 100644 index 0000000..a32e825 --- /dev/null +++ b/src/com/seventh7/mybatis/intention/AliasSwitchIntentionAction.java @@ -0,0 +1,80 @@ +package com.seventh7.mybatis.intention; + +import com.google.common.base.Optional; + +import com.intellij.codeInsight.hint.HintManager; +import com.intellij.openapi.editor.Editor; +import com.intellij.openapi.project.Project; +import com.intellij.psi.PsiClass; +import com.intellij.psi.PsiElement; +import com.intellij.psi.PsiFile; +import com.intellij.psi.PsiReference; +import com.intellij.psi.impl.source.resolve.reference.impl.providers.JavaClassReference; +import com.intellij.psi.impl.source.resolve.reference.impl.providers.JavaClassReferenceSet; +import com.intellij.psi.util.PsiTreeUtil; +import com.intellij.psi.xml.XmlAttribute; +import com.intellij.util.IncorrectOperationException; +import com.seventh7.mybatis.alias.AliasClassReference; +import com.seventh7.mybatis.alias.AliasDesc; +import com.seventh7.mybatis.alias.AliasFacade; + +import org.jetbrains.annotations.NotNull; + +/** + * @author yanglin + */ +public class AliasSwitchIntentionAction extends GenericIntention { + + public AliasSwitchIntentionAction() { + super(AliasSwitchChooser.INSTANCE); + } + + @NotNull @Override + public String getText() { + return "[Mybatis] Switch between java type and alias"; + } + + @Override + public void invoke(@NotNull Project project, Editor editor, PsiFile file) + throws IncorrectOperationException { + + int offset = editor.getCaretModel().getOffset(); + PsiElement element = file.findElementAt(offset); + XmlAttribute attribute = PsiTreeUtil.getParentOfType(element, XmlAttribute.class); + if (attribute == null) { return; } + + PsiReference reference = file.findReferenceAt(offset); + + if (reference instanceof JavaClassReference) { + boolean success = setupAlias(project, attribute, (JavaClassReference) reference); + if (!success) { + HintManager.getInstance().showErrorHint(editor, "No alias found"); + } + } else if (reference instanceof AliasClassReference) { + PsiClass psiClass = ((AliasClassReference) reference).resolve(); + if (psiClass != null) { + attribute.setValue(psiClass.getQualifiedName()); + } else { + HintManager.getInstance().showErrorHint(editor, "No alias found"); + } + } + } + + private boolean setupAlias(Project project, XmlAttribute attribute, JavaClassReference reference) { + JavaClassReferenceSet set = reference.getJavaClassReferenceSet(); + if (set == null) { return false; } + PsiReference[] references = set.getReferences(); + if (references == null) { return false; } + + PsiElement ele = references[references.length - 1].resolve(); + if (ele instanceof PsiClass) { + Optional aliasDesc = AliasFacade.getInstance(project).findAliasDesc((PsiClass) ele); + if (aliasDesc.isPresent()) { + attribute.setValue(aliasDesc.get().getAlias()); + return true; + } + } + return false; + } + +} From cf1433ce1e5fc70a2590ee32ff7ed77f4592daf3 Mon Sep 17 00:00:00 2001 From: Yanglin Date: Sun, 22 Dec 2013 14:51:20 +0800 Subject: [PATCH 06/85] Update plugin.xml --- META-INF/plugin.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/META-INF/plugin.xml b/META-INF/plugin.xml index 9f82beb..493cc43 100644 --- a/META-INF/plugin.xml +++ b/META-INF/plugin.xml @@ -12,7 +12,7 @@ 2.03
          -
        • Support switching between java type and alias
        • +
        • Support switching between java type and alias in mapper xml using intention keystroke

        2.01

          From 27684a691aecc52a070ce8e125e84632423fac73 Mon Sep 17 00:00:00 2001 From: Yanglin Date: Sun, 22 Dec 2013 15:12:42 +0800 Subject: [PATCH 07/85] Usage --- META-INF/plugin.xml | 4 +++ .../intention/GeneratePropertyChooser.java | 34 +++++++++++++++++++ .../intention/GeneratePropertyIntention.java | 30 ++++++++++++++++ .../mybatis/ui/ListSelectionListener.java | 8 +++-- .../mybatis/ui/UiComponentFacade.java | 16 +++++++++ 5 files changed, 90 insertions(+), 2 deletions(-) create mode 100644 src/com/seventh7/mybatis/intention/GeneratePropertyChooser.java create mode 100644 src/com/seventh7/mybatis/intention/GeneratePropertyIntention.java diff --git a/META-INF/plugin.xml b/META-INF/plugin.xml index 493cc43..be9d571 100644 --- a/META-INF/plugin.xml +++ b/META-INF/plugin.xml @@ -50,6 +50,7 @@ com.intellij.sql com.intellij.spring + com.intellij.persistence.database @@ -88,5 +89,8 @@ com.seventh7.mybatis.intention.AliasSwitchIntentionAction + + com.seventh7.mybatis.intention.GeneratePropertyIntention + \ No newline at end of file diff --git a/src/com/seventh7/mybatis/intention/GeneratePropertyChooser.java b/src/com/seventh7/mybatis/intention/GeneratePropertyChooser.java new file mode 100644 index 0000000..0f31fff --- /dev/null +++ b/src/com/seventh7/mybatis/intention/GeneratePropertyChooser.java @@ -0,0 +1,34 @@ +package com.seventh7.mybatis.intention; + +import com.google.common.base.Optional; + +import com.intellij.openapi.editor.Editor; +import com.intellij.openapi.project.Project; +import com.intellij.psi.PsiElement; +import com.intellij.psi.PsiFile; +import com.intellij.psi.util.PsiTreeUtil; +import com.intellij.psi.xml.XmlText; +import com.seventh7.mybatis.dom.model.IdDomElement; +import com.seventh7.mybatis.dom.model.ResultMap; +import com.seventh7.mybatis.util.MapperUtils; + +import org.jetbrains.annotations.NotNull; + +/** + * @author yanglin + */ +public class GeneratePropertyChooser implements IntentionChooser { + + public static final GeneratePropertyChooser INSTANCE = new GeneratePropertyChooser(); + + @Override + public boolean isAvailable(@NotNull Project project, Editor editor, PsiFile file) { + PsiElement element = file.findElementAt(editor.getCaretModel().getOffset()); + XmlText text = PsiTreeUtil.getParentOfType(element, XmlText.class); + if (text == null) { return false; } + + Optional idDomElement = MapperUtils.findParentIdDomElement(element); + return idDomElement.isPresent() && idDomElement.get() instanceof ResultMap; + } + +} diff --git a/src/com/seventh7/mybatis/intention/GeneratePropertyIntention.java b/src/com/seventh7/mybatis/intention/GeneratePropertyIntention.java new file mode 100644 index 0000000..9a739e1 --- /dev/null +++ b/src/com/seventh7/mybatis/intention/GeneratePropertyIntention.java @@ -0,0 +1,30 @@ +package com.seventh7.mybatis.intention; + +import com.intellij.openapi.editor.Editor; +import com.intellij.openapi.project.Project; +import com.intellij.psi.PsiFile; +import com.intellij.util.IncorrectOperationException; + +import org.jetbrains.annotations.NotNull; + +/** + * @author yanglin + */ +public class GeneratePropertyIntention extends GenericIntention { + + public GeneratePropertyIntention() { + super(GeneratePropertyChooser.INSTANCE); + } + + @NotNull @Override + public String getText() { + return "[Mybatis] Generate properties"; + } + + @Override + public void invoke(@NotNull final Project project, Editor editor, PsiFile file) + throws IncorrectOperationException { + + } + +} diff --git a/src/com/seventh7/mybatis/ui/ListSelectionListener.java b/src/com/seventh7/mybatis/ui/ListSelectionListener.java index 0995b55..d75ce06 100644 --- a/src/com/seventh7/mybatis/ui/ListSelectionListener.java +++ b/src/com/seventh7/mybatis/ui/ListSelectionListener.java @@ -3,8 +3,12 @@ /** * @author yanglin */ -public interface ListSelectionListener extends ExecutableListener { +public abstract class ListSelectionListener implements ExecutableListener { - public void selected(int index); + public void selected(int index) { + } + + public void selected(int[] indexes) { + } } \ No newline at end of file diff --git a/src/com/seventh7/mybatis/ui/UiComponentFacade.java b/src/com/seventh7/mybatis/ui/UiComponentFacade.java index 36da2d3..2a0163b 100644 --- a/src/com/seventh7/mybatis/ui/UiComponentFacade.java +++ b/src/com/seventh7/mybatis/ui/UiComponentFacade.java @@ -1,5 +1,8 @@ package com.seventh7.mybatis.ui; +import com.google.common.base.Function; +import com.google.common.collect.Collections2; + import com.intellij.openapi.application.Application; import com.intellij.openapi.application.ApplicationManager; import com.intellij.openapi.editor.Editor; @@ -19,6 +22,7 @@ import java.awt.event.ActionEvent; import java.awt.event.ActionListener; +import java.util.Collection; /** * @author yanglin @@ -86,6 +90,17 @@ public JBPopup showListPopup(@NotNull String title, return popup; } + public JBPopup showListPopup(@NotNull String title, + @Nullable final ListSelectionListener listener, + @NotNull Collection objs, + @NotNull Function fun) { + Collection info = Collections2.transform(objs, fun); + PopupChooserBuilder builder = createListPopupBuilder(title, listener, info.toArray(new String[info.size()])); + JBPopup popup = builder.createPopup(); + setPositionForShown(popup); + return popup; + } + private void setPositionForShown(JBPopup popup) { Editor editor = fileEditorManager.getSelectedTextEditor(); if (null != editor) { @@ -115,6 +130,7 @@ public PopupChooserBuilder createListPopupBuilder(@NotNull String title, @Override public void run() { listener.selected(list.getSelectedIndex()); + listener.selected(list.getSelectedIndices()); } }; builder.setItemChoosenCallback(new Runnable() { From 7da75309b657dc0e3b1480981d698c4e5b12b472 Mon Sep 17 00:00:00 2001 From: Yanglin Date: Sun, 22 Dec 2013 18:40:15 +0800 Subject: [PATCH 08/85] Update AliasSwitchIntentionAction --- .../intention/AliasSwitchIntentionAction.java | 14 ++++++++------ 1 file changed, 8 insertions(+), 6 deletions(-) diff --git a/src/com/seventh7/mybatis/intention/AliasSwitchIntentionAction.java b/src/com/seventh7/mybatis/intention/AliasSwitchIntentionAction.java index a32e825..38c49b9 100644 --- a/src/com/seventh7/mybatis/intention/AliasSwitchIntentionAction.java +++ b/src/com/seventh7/mybatis/intention/AliasSwitchIntentionAction.java @@ -45,19 +45,21 @@ public void invoke(@NotNull Project project, Editor editor, PsiFile file) PsiReference reference = file.findReferenceAt(offset); + boolean success = false; + if (reference instanceof JavaClassReference) { - boolean success = setupAlias(project, attribute, (JavaClassReference) reference); - if (!success) { - HintManager.getInstance().showErrorHint(editor, "No alias found"); - } + success = setupAlias(project, attribute, (JavaClassReference) reference); } else if (reference instanceof AliasClassReference) { PsiClass psiClass = ((AliasClassReference) reference).resolve(); if (psiClass != null) { attribute.setValue(psiClass.getQualifiedName()); - } else { - HintManager.getInstance().showErrorHint(editor, "No alias found"); + success = true; } } + + if (!success) { + HintManager.getInstance().showErrorHint(editor, "No alias found"); + } } private boolean setupAlias(Project project, XmlAttribute attribute, JavaClassReference reference) { From a945710e46c189ffcf77f871d1deca5d59689dd6 Mon Sep 17 00:00:00 2001 From: Yanglin Date: Sun, 22 Dec 2013 20:03:21 +0800 Subject: [PATCH 09/85] Support jdbc type completion --- META-INF/plugin.xml | 6 +- .../dom/converter/JdbcTypeConverter.java | 54 +++++++++ .../seventh7/mybatis/dom/model/GroupFour.java | 6 + .../mybatis/dom/model/PropertyGroup.java | 13 ++ .../intention/GeneratePropertyChooser.java | 5 +- .../intention/GeneratePropertyIntention.java | 111 ++++++++++++++++++ .../mybatis/setting/MybatisConfigurable.java | 17 ++- .../mybatis/setting/MybatisSetting.java | 13 +- .../mybatis/setting/MybatisSettingForm.form | 12 +- .../mybatis/setting/MybatisSettingForm.java | 1 + .../mybatis/ui/ClickableListener.java | 6 +- .../mybatis/ui/ExecutableListener.java | 6 +- .../mybatis/ui/ListSelectionListener.java | 2 +- 13 files changed, 239 insertions(+), 13 deletions(-) create mode 100644 src/com/seventh7/mybatis/dom/converter/JdbcTypeConverter.java diff --git a/META-INF/plugin.xml b/META-INF/plugin.xml index be9d571..2c55ccc 100644 --- a/META-INF/plugin.xml +++ b/META-INF/plugin.xml @@ -1,7 +1,7 @@ com.seventh7.plugin.mybatis MyBatis plugin - 2.03 + 2.1 Yanglin 2.03 +

          2.1

          • Support switching between java type and alias in mapper xml using intention keystroke
          • +
          • Support completion of jdbc type in mapper xml
          • +
          • Support generating properties for result map, association, collection etc.

          2.01

            diff --git a/src/com/seventh7/mybatis/dom/converter/JdbcTypeConverter.java b/src/com/seventh7/mybatis/dom/converter/JdbcTypeConverter.java new file mode 100644 index 0000000..7bc1443 --- /dev/null +++ b/src/com/seventh7/mybatis/dom/converter/JdbcTypeConverter.java @@ -0,0 +1,54 @@ +package com.seventh7.mybatis.dom.converter; + +import com.google.common.collect.Sets; + +import com.intellij.javaee.dataSource.SQLUtil; +import com.intellij.util.xml.ConvertContext; + +import org.jetbrains.annotations.NonNls; +import org.jetbrains.annotations.NotNull; +import org.jetbrains.annotations.Nullable; + +import java.sql.Types; +import java.util.Collection; +import java.util.Set; + +/** + * @author yanglin + */ +public class JdbcTypeConverter extends ConverterAdaptor { + + private static final Set TYPE_NAMES = Sets.newHashSet(); + + private static final int[] TYPES = { + Types.BIT, Types.TINYINT, Types.SMALLINT, Types.INTEGER, Types.BIGINT, + Types.FLOAT, Types.REAL, Types.DOUBLE, Types.NUMERIC, Types.DECIMAL, + Types.CHAR, Types.VARCHAR, Types.LONGVARCHAR, Types.DATE, Types.TIME, + Types.TIMESTAMP, Types.BINARY, Types.VARBINARY, Types.LONGVARBINARY, Types.NULL, + Types.OTHER, Types.JAVA_OBJECT, Types.DISTINCT, Types.STRUCT, Types.ARRAY, + Types.BLOB, Types.CLOB, Types.REF, Types.DATALINK, Types.BOOLEAN, + Types.ROWID, Types.NCHAR, Types.NVARCHAR, Types.LONGNVARCHAR, Types.NCLOB, + Types.SQLXML + }; + + static { + for (int type : TYPES) { + TYPE_NAMES.add(SQLUtil.getJdbcTypeName(type)); + } + } + + @NotNull @Override + public Collection getVariants(ConvertContext context) { + return TYPE_NAMES; + } + + @Nullable @Override + public String toString(@Nullable String s, ConvertContext context) { + return s; + } + + @Nullable @Override + public String fromString(@Nullable @NonNls String s, ConvertContext context) { + return s; + } +} diff --git a/src/com/seventh7/mybatis/dom/model/GroupFour.java b/src/com/seventh7/mybatis/dom/model/GroupFour.java index 8a7cd65..215d188 100644 --- a/src/com/seventh7/mybatis/dom/model/GroupFour.java +++ b/src/com/seventh7/mybatis/dom/model/GroupFour.java @@ -28,4 +28,10 @@ public interface GroupFour extends DomElement { @SubTag("discriminator") public Discriminator getDiscriminator(); + + @SubTagList("id") + public Id addId(); + + @SubTagList("result") + public Result addResult(); } diff --git a/src/com/seventh7/mybatis/dom/model/PropertyGroup.java b/src/com/seventh7/mybatis/dom/model/PropertyGroup.java index f44dac5..07663e2 100644 --- a/src/com/seventh7/mybatis/dom/model/PropertyGroup.java +++ b/src/com/seventh7/mybatis/dom/model/PropertyGroup.java @@ -1,12 +1,16 @@ package com.seventh7.mybatis.dom.model; +import com.intellij.psi.PsiClass; import com.intellij.psi.xml.XmlAttributeValue; import com.intellij.util.xml.Attribute; import com.intellij.util.xml.Convert; import com.intellij.util.xml.DomElement; import com.intellij.util.xml.GenericAttributeValue; +import com.seventh7.mybatis.dom.converter.JdbcTypeConverter; import com.seventh7.mybatis.dom.converter.PropertyConverter; +import org.jetbrains.annotations.NotNull; + /** * @author yanglin */ @@ -15,4 +19,13 @@ public interface PropertyGroup extends DomElement { @Attribute("property") @Convert(PropertyConverter.class) GenericAttributeValue getProperty(); + + @NotNull + @Attribute("jdbcType") + @Convert(JdbcTypeConverter.class) + public GenericAttributeValue getJdbcType(); + + @NotNull + @Attribute("column") + public GenericAttributeValue getColumn(); } diff --git a/src/com/seventh7/mybatis/intention/GeneratePropertyChooser.java b/src/com/seventh7/mybatis/intention/GeneratePropertyChooser.java index 0f31fff..245d6f6 100644 --- a/src/com/seventh7/mybatis/intention/GeneratePropertyChooser.java +++ b/src/com/seventh7/mybatis/intention/GeneratePropertyChooser.java @@ -2,6 +2,7 @@ import com.google.common.base.Optional; +import com.intellij.javaee.dataSource.DataSourceManager; import com.intellij.openapi.editor.Editor; import com.intellij.openapi.project.Project; import com.intellij.psi.PsiElement; @@ -28,7 +29,9 @@ public boolean isAvailable(@NotNull Project project, Editor editor, PsiFile file if (text == null) { return false; } Optional idDomElement = MapperUtils.findParentIdDomElement(element); - return idDomElement.isPresent() && idDomElement.get() instanceof ResultMap; + return idDomElement.isPresent() && + idDomElement.get() instanceof ResultMap && + !DataSourceManager.getInstance(project).getDataSources().isEmpty(); } } diff --git a/src/com/seventh7/mybatis/intention/GeneratePropertyIntention.java b/src/com/seventh7/mybatis/intention/GeneratePropertyIntention.java index 9a739e1..12d5722 100644 --- a/src/com/seventh7/mybatis/intention/GeneratePropertyIntention.java +++ b/src/com/seventh7/mybatis/intention/GeneratePropertyIntention.java @@ -1,12 +1,31 @@ package com.seventh7.mybatis.intention; +import com.google.common.base.Function; + +import com.intellij.javaee.dataSource.DataSource; +import com.intellij.javaee.dataSource.DataSourceManager; +import com.intellij.javaee.dataSource.DatabaseTableData; +import com.intellij.javaee.dataSource.DatabaseTableFieldData; +import com.intellij.javaee.dataSource.SQLUtil; import com.intellij.openapi.editor.Editor; import com.intellij.openapi.project.Project; +import com.intellij.psi.PsiElement; import com.intellij.psi.PsiFile; import com.intellij.util.IncorrectOperationException; +import com.intellij.util.xml.DomElement; +import com.intellij.util.xml.DomUtil; +import com.seventh7.mybatis.dom.model.GroupFour; +import com.seventh7.mybatis.dom.model.PropertyGroup; +import com.seventh7.mybatis.service.EditorService; +import com.seventh7.mybatis.setting.MybatisSetting; +import com.seventh7.mybatis.ui.ListSelectionListener; +import com.seventh7.mybatis.ui.UiComponentFacade; import org.jetbrains.annotations.NotNull; +import java.util.List; + + /** * @author yanglin */ @@ -25,6 +44,98 @@ public String getText() { public void invoke(@NotNull final Project project, Editor editor, PsiFile file) throws IncorrectOperationException { + final PsiElement element = file.findElementAt(editor.getCaretModel().getOffset()); + final DomElement domElement = DomUtil.getDomElement(element); + if (!(domElement instanceof GroupFour)) { + return; + } + + DataSourceManager dataSourceManager = DataSourceManager.getInstance(project); + + String dlftDataSourceId = MybatisSetting.getInstance().getDlftDataSourceId(); + DataSource defaultDataSource = dataSourceManager.getDataSourceByID(dlftDataSourceId); + if (defaultDataSource == null) { + selectDataSource(project, file, dataSourceManager.getDataSources(), (GroupFour)domElement); + } else { + selectTable(project, file, defaultDataSource, (GroupFour)domElement); + } + } + + private void selectColumns(final Project project, final PsiFile file, final List columns, final GroupFour groupFour) { + final UiComponentFacade uiFacade = UiComponentFacade.getInstance(project); + uiFacade.showListPopup("[Select columns to generate]", new ListSelectionListener() { + @Override public void selected(int[] indexes) { + for (int index : indexes) { + final DatabaseTableFieldData column = columns.get(index); + PropertyGroup property = null; + if (column.isPrimary()) { + property = groupFour.addId(); + } else { + property = groupFour.addResult(); + } + property.getJdbcType().setStringValue(SQLUtil.getJdbcTypeName(column.getJdbcType())); + property.getProperty().setStringValue("aaaaa"); + property.getColumn().setStringValue(column.getName()); + } + EditorService.getInstance(project).format(file, groupFour.getXmlElement()); + } + + @Override public boolean isWriteAction() { + return true; + } + }, columns, new Function() { + @Override + public String apply(DatabaseTableFieldData column) { + final String name = column.getName(); + if (column.isPrimary()) { + return name + " [primary key]"; + } else if (column.isForeign()) { + return name + " [foreign key]"; + } else if (column.isNullable()) { + return name + " [not null]"; + } else { + return name; + } + } + } + ); + } + + public void selectTable(final Project project, + final PsiFile file, + DataSource dataSource, + final GroupFour groupFour) { + final UiComponentFacade uiFacade = UiComponentFacade.getInstance(project); + final List tables = dataSource.getTables(); + uiFacade.showListPopup("[Select Table]", new ListSelectionListener() { + @Override public void selected(int index) { + selectColumns(project, file, tables.get(index).getColumns(), groupFour); + } + }, tables, new Function() { + @Override public String apply(DatabaseTableData table) { + return table.getName(); + } + } + ); + } + + private void selectDataSource(final Project project, + final PsiFile file, + final List dataSources, + final GroupFour groupFour) { + final UiComponentFacade uiFacade = UiComponentFacade.getInstance(project); + uiFacade.showListPopup("[Select Data Source]", new ListSelectionListener() { + @Override public void selected(int index) { + DataSource dataSource = dataSources.get(index); + selectTable(project, file, dataSource, groupFour); + MybatisSetting.getInstance().setDlftDataSourceId(dataSource.getUniqueId()); + } + }, dataSources, new Function() { + @Override public String apply(DataSource dataSource) { + return dataSource.getName(); + } + } + ); } } diff --git a/src/com/seventh7/mybatis/setting/MybatisConfigurable.java b/src/com/seventh7/mybatis/setting/MybatisConfigurable.java index e44851e..afaf61d 100644 --- a/src/com/seventh7/mybatis/setting/MybatisConfigurable.java +++ b/src/com/seventh7/mybatis/setting/MybatisConfigurable.java @@ -6,11 +6,14 @@ import com.intellij.openapi.options.ConfigurationException; import com.intellij.openapi.options.SearchableConfigurable; +import com.intellij.openapi.ui.Messages; import com.seventh7.mybatis.generate.GenerateModel; import org.jetbrains.annotations.Nls; import org.jetbrains.annotations.Nullable; +import java.awt.event.ActionEvent; + import javax.swing.*; import static com.seventh7.mybatis.generate.StatementGenerator.DELETE_GENERATOR; @@ -33,6 +36,8 @@ public class MybatisConfigurable implements SearchableConfigurable { private Joiner joiner = Joiner.on(separator); + private boolean clearDefaultDataSource = false; + public MybatisConfigurable() { mybatisSetting = MybatisSetting.getInstance(); } @@ -65,16 +70,24 @@ public JComponent createComponent() { if (null == mybatisSettingForm) { this.mybatisSettingForm = new MybatisSettingForm(); } + this.mybatisSettingForm.clearDefaultDataSourceButton.addActionListener(new AbstractAction() { + @Override public void actionPerformed(ActionEvent e) { + mybatisSetting.setDlftDataSourceId(""); + clearDefaultDataSource = true; + Messages.showInfoMessage("Action done", "Tip"); + } + }); return mybatisSettingForm.mainPanel; } @Override public boolean isModified() { - return mybatisSetting.getStatementGenerateModel().getIdentifier() != mybatisSettingForm.modelComboBox.getSelectedIndex() + return (mybatisSetting.getStatementGenerateModel().getIdentifier() != mybatisSettingForm.modelComboBox.getSelectedIndex() || !joiner.join(INSERT_GENERATOR.getPatterns()).equals(mybatisSettingForm.insertPatternTextField.getText()) || !joiner.join(DELETE_GENERATOR.getPatterns()).equals(mybatisSettingForm.deletePatternTextField.getText()) || !joiner.join(UPDATE_GENERATOR.getPatterns()).equals(mybatisSettingForm.updatePatternTextField.getText()) - || !joiner.join(SELECT_GENERATOR.getPatterns()).equals(mybatisSettingForm.selectPatternTextField.getText()); + || !joiner.join(SELECT_GENERATOR.getPatterns()).equals(mybatisSettingForm.selectPatternTextField.getText())) + && !clearDefaultDataSource; } @Override diff --git a/src/com/seventh7/mybatis/setting/MybatisSetting.java b/src/com/seventh7/mybatis/setting/MybatisSetting.java index bdaaa36..34075d7 100644 --- a/src/com/seventh7/mybatis/setting/MybatisSetting.java +++ b/src/com/seventh7/mybatis/setting/MybatisSetting.java @@ -1,7 +1,6 @@ package com.seventh7.mybatis.setting; import com.google.gson.Gson; -import com.google.gson.GsonBuilder; import com.google.gson.reflect.TypeToken; import com.intellij.openapi.components.PersistentStateComponent; @@ -36,6 +35,8 @@ public class MybatisSetting implements PersistentStateComponent { private Type gsonTypeToken = new TypeToken>() {}.getType(); + private String dlftDataSourceId = ""; + public MybatisSetting() { statementGenerateModel = GenerateModel.START_WITH_MODEL; } @@ -52,6 +53,7 @@ public Element getState() { element.setAttribute(UPDATE_GENERATOR.getId(), gson.toJson(UPDATE_GENERATOR.getPatterns())); element.setAttribute(SELECT_GENERATOR.getId(), gson.toJson(SELECT_GENERATOR.getPatterns())); element.setAttribute("statementGenerateModel", String.valueOf(statementGenerateModel.getIdentifier())); + element.setAttribute("DefaultDataSourceId", dlftDataSourceId); return element; } @@ -62,6 +64,15 @@ public void loadState(Element state) { loadState(state, UPDATE_GENERATOR); loadState(state, SELECT_GENERATOR); statementGenerateModel = GenerateModel.getInstance(state.getAttributeValue("statementGenerateModel")); + this.dlftDataSourceId = state.getAttributeValue("DefaultDataSourceId"); + } + + public String getDlftDataSourceId() { + return dlftDataSourceId; + } + + public void setDlftDataSourceId(String dlftDataSourceId) { + this.dlftDataSourceId = dlftDataSourceId; } private void loadState(Element state, StatementGenerator generator) { diff --git a/src/com/seventh7/mybatis/setting/MybatisSettingForm.form b/src/com/seventh7/mybatis/setting/MybatisSettingForm.form index 4d4054f..5fbf272 100644 --- a/src/com/seventh7/mybatis/setting/MybatisSettingForm.form +++ b/src/com/seventh7/mybatis/setting/MybatisSettingForm.form @@ -8,7 +8,7 @@ - + @@ -102,7 +102,7 @@ - + @@ -113,6 +113,14 @@ + + + + + + + + diff --git a/src/com/seventh7/mybatis/setting/MybatisSettingForm.java b/src/com/seventh7/mybatis/setting/MybatisSettingForm.java index e1da521..ed383f7 100644 --- a/src/com/seventh7/mybatis/setting/MybatisSettingForm.java +++ b/src/com/seventh7/mybatis/setting/MybatisSettingForm.java @@ -18,5 +18,6 @@ public class MybatisSettingForm { public JPanel mainPanel; public JComboBox modelComboBox; + public JButton clearDefaultDataSourceButton; } diff --git a/src/com/seventh7/mybatis/ui/ClickableListener.java b/src/com/seventh7/mybatis/ui/ClickableListener.java index 320fa8c..4bbf52f 100644 --- a/src/com/seventh7/mybatis/ui/ClickableListener.java +++ b/src/com/seventh7/mybatis/ui/ClickableListener.java @@ -3,8 +3,10 @@ /** * @author yanglin */ -public interface ClickableListener extends ExecutableListener { +public abstract class ClickableListener extends ExecutableListener { - public void clicked(); + public void clicked() { + + } } diff --git a/src/com/seventh7/mybatis/ui/ExecutableListener.java b/src/com/seventh7/mybatis/ui/ExecutableListener.java index 38f85e1..782e299 100644 --- a/src/com/seventh7/mybatis/ui/ExecutableListener.java +++ b/src/com/seventh7/mybatis/ui/ExecutableListener.java @@ -3,8 +3,10 @@ /** * @author yanglin */ -public interface ExecutableListener { +public abstract class ExecutableListener { - public boolean isWriteAction(); + public boolean isWriteAction() { + return false; + } } diff --git a/src/com/seventh7/mybatis/ui/ListSelectionListener.java b/src/com/seventh7/mybatis/ui/ListSelectionListener.java index d75ce06..0e3e763 100644 --- a/src/com/seventh7/mybatis/ui/ListSelectionListener.java +++ b/src/com/seventh7/mybatis/ui/ListSelectionListener.java @@ -3,7 +3,7 @@ /** * @author yanglin */ -public abstract class ListSelectionListener implements ExecutableListener { +public abstract class ListSelectionListener extends ExecutableListener { public void selected(int index) { } From 8ca7da0ea869f251f137d9ece07aeae2652b6267 Mon Sep 17 00:00:00 2001 From: Yanglin Date: Sun, 22 Dec 2013 23:03:18 +0800 Subject: [PATCH 10/85] Support generating properties for result map --- META-INF/plugin.xml | 2 +- .../mybatis/generate/PropertyGenerator.java | 67 ++++++++ .../intention/GeneratePropertyIntention.java | 147 +++++++++--------- .../mybatis/ui/ListSelectionItemListener.java | 16 ++ .../mybatis/ui/UiComponentFacade.java | 32 ++++ 5 files changed, 187 insertions(+), 77 deletions(-) create mode 100644 src/com/seventh7/mybatis/generate/PropertyGenerator.java create mode 100644 src/com/seventh7/mybatis/ui/ListSelectionItemListener.java diff --git a/META-INF/plugin.xml b/META-INF/plugin.xml index 2c55ccc..8b44171 100644 --- a/META-INF/plugin.xml +++ b/META-INF/plugin.xml @@ -13,8 +13,8 @@

            2.1

            • Support switching between java type and alias in mapper xml using intention keystroke
            • +
            • Support generating properties for elements of result map using intention keystroke[DataSource of intellij is required]
            • Support completion of jdbc type in mapper xml
            • -
            • Support generating properties for result map, association, collection etc.

            2.01

              diff --git a/src/com/seventh7/mybatis/generate/PropertyGenerator.java b/src/com/seventh7/mybatis/generate/PropertyGenerator.java new file mode 100644 index 0000000..30e2dc0 --- /dev/null +++ b/src/com/seventh7/mybatis/generate/PropertyGenerator.java @@ -0,0 +1,67 @@ +package com.seventh7.mybatis.generate; + +import com.intellij.javaee.dataSource.DatabaseTableFieldData; +import com.intellij.javaee.dataSource.SQLUtil; +import com.intellij.psi.xml.XmlElement; +import com.seventh7.mybatis.dom.model.GroupFour; +import com.seventh7.mybatis.dom.model.PropertyGroup; +import com.seventh7.mybatis.service.EditorService; + +import org.apache.commons.lang.WordUtils; +import org.jetbrains.annotations.NotNull; + +import java.util.Collection; + +/** + * @author yanglin + */ +public class PropertyGenerator { + + public static final PropertyNameStrategy PROPERTY_NAME_STRATEGY = new HumpStrategy(); + + public static void generateProperties(@NotNull Collection columns, + @NotNull GroupFour groupFour) { + final XmlElement element = groupFour.getXmlElement(); + if (element == null) { return; } + + for (DatabaseTableFieldData column : columns) { + PropertyGroup property; + if (column.isPrimary()) { + property = groupFour.addId(); + } else { + property = groupFour.addResult(); + } + setupProperties(column, property); + } + EditorService.getInstance(element.getProject()).format(element.getContainingFile(), groupFour.getXmlElement()); + } + + private static void setupProperties(DatabaseTableFieldData column, PropertyGroup property) { + property.getJdbcType().setStringValue(SQLUtil.getJdbcTypeName(column.getJdbcType())); + final String columnName = column.getName(); + property.getProperty().setStringValue(PROPERTY_NAME_STRATEGY.apply(columnName)); + property.getColumn().setStringValue(columnName); + } + + interface PropertyNameStrategy { + String apply(String columnName); + } + + public static class HumpStrategy implements PropertyNameStrategy { + + @Override public String apply(String columnName) { + StringBuilder sb = new StringBuilder(); + final String[] split = columnName.split("_"); + for (int i = 0; i < split.length; i++) { + if (i == 0) { + sb.append(WordUtils.uncapitalize(split[i].toLowerCase())); + } else { + sb.append(WordUtils.capitalize(split[i].toLowerCase())); + } + } + return sb.toString(); + } + + } + +} diff --git a/src/com/seventh7/mybatis/intention/GeneratePropertyIntention.java b/src/com/seventh7/mybatis/intention/GeneratePropertyIntention.java index 12d5722..bcf27cc 100644 --- a/src/com/seventh7/mybatis/intention/GeneratePropertyIntention.java +++ b/src/com/seventh7/mybatis/intention/GeneratePropertyIntention.java @@ -6,7 +6,6 @@ import com.intellij.javaee.dataSource.DataSourceManager; import com.intellij.javaee.dataSource.DatabaseTableData; import com.intellij.javaee.dataSource.DatabaseTableFieldData; -import com.intellij.javaee.dataSource.SQLUtil; import com.intellij.openapi.editor.Editor; import com.intellij.openapi.project.Project; import com.intellij.psi.PsiElement; @@ -15,14 +14,14 @@ import com.intellij.util.xml.DomElement; import com.intellij.util.xml.DomUtil; import com.seventh7.mybatis.dom.model.GroupFour; -import com.seventh7.mybatis.dom.model.PropertyGroup; -import com.seventh7.mybatis.service.EditorService; +import com.seventh7.mybatis.generate.PropertyGenerator; import com.seventh7.mybatis.setting.MybatisSetting; -import com.seventh7.mybatis.ui.ListSelectionListener; +import com.seventh7.mybatis.ui.ListSelectionItemListener; import com.seventh7.mybatis.ui.UiComponentFacade; import org.jetbrains.annotations.NotNull; +import java.util.Collection; import java.util.List; @@ -41,8 +40,9 @@ public String getText() { } @Override - public void invoke(@NotNull final Project project, Editor editor, PsiFile file) - throws IncorrectOperationException { + public void invoke(@NotNull final Project project, + Editor editor, + PsiFile file) throws IncorrectOperationException { final PsiElement element = file.findElementAt(editor.getCaretModel().getOffset()); final DomElement domElement = DomUtil.getDomElement(element); @@ -54,88 +54,83 @@ public void invoke(@NotNull final Project project, Editor editor, PsiFile file) String dlftDataSourceId = MybatisSetting.getInstance().getDlftDataSourceId(); DataSource defaultDataSource = dataSourceManager.getDataSourceByID(dlftDataSourceId); + final UiComponentFacade uiFacade = UiComponentFacade.getInstance(project); if (defaultDataSource == null) { - selectDataSource(project, file, dataSourceManager.getDataSources(), (GroupFour)domElement); + selectDataSourceAndGenerate((GroupFour) domElement, dataSourceManager, uiFacade); } else { - selectTable(project, file, defaultDataSource, (GroupFour)domElement); + selectTableAndGenerate(uiFacade, defaultDataSource.getTables(), (GroupFour) domElement); } } - private void selectColumns(final Project project, final PsiFile file, final List columns, final GroupFour groupFour) { - final UiComponentFacade uiFacade = UiComponentFacade.getInstance(project); - uiFacade.showListPopup("[Select columns to generate]", new ListSelectionListener() { - @Override public void selected(int[] indexes) { - for (int index : indexes) { - final DatabaseTableFieldData column = columns.get(index); - PropertyGroup property = null; - if (column.isPrimary()) { - property = groupFour.addId(); - } else { - property = groupFour.addResult(); - } - property.getJdbcType().setStringValue(SQLUtil.getJdbcTypeName(column.getJdbcType())); - property.getProperty().setStringValue("aaaaa"); - property.getColumn().setStringValue(column.getName()); - } - EditorService.getInstance(project).format(file, groupFour.getXmlElement()); - } - - @Override public boolean isWriteAction() { - return true; - } - }, columns, new Function() { - @Override - public String apply(DatabaseTableFieldData column) { - final String name = column.getName(); - if (column.isPrimary()) { - return name + " [primary key]"; - } else if (column.isForeign()) { - return name + " [foreign key]"; - } else if (column.isNullable()) { - return name + " [not null]"; - } else { - return name; - } - } - } + private void selectDataSourceAndGenerate(final GroupFour domElement, + DataSourceManager dataSourceManager, + final UiComponentFacade uiFacade) { + uiFacade.selectElements("[Select Data Source]", + dataSourceManager.getDataSources(), + new ListSelectionItemListener() { + @Override public void apply(DataSource dataSource) { + MybatisSetting.getInstance().setDlftDataSourceId(dataSource.getUniqueId()); + selectTableAndGenerate(uiFacade, dataSource.getTables(), domElement); + } + }, new Function() { + @Override public String apply(DataSource dataSource) { + return dataSource.getName(); + } + } ); } - public void selectTable(final Project project, - final PsiFile file, - DataSource dataSource, - final GroupFour groupFour) { - final UiComponentFacade uiFacade = UiComponentFacade.getInstance(project); - final List tables = dataSource.getTables(); - uiFacade.showListPopup("[Select Table]", new ListSelectionListener() { - @Override public void selected(int index) { - selectColumns(project, file, tables.get(index).getColumns(), groupFour); - } - }, tables, new Function() { - @Override public String apply(DatabaseTableData table) { - return table.getName(); - } - } + private void selectTableAndGenerate(final UiComponentFacade uiFacade, + List table, + final GroupFour groupFour) { + uiFacade.selectElements("[Select Table]", + table, + new ListSelectionItemListener() { + @Override public void apply(DatabaseTableData databaseTableData) { + selectColumnsAndGenerate(uiFacade, databaseTableData.getColumns(), groupFour); + } + + }, new Function() { + @Override public String apply(DatabaseTableData table) { + return table.getName(); + } + } ); } - private void selectDataSource(final Project project, - final PsiFile file, - final List dataSources, - final GroupFour groupFour) { - final UiComponentFacade uiFacade = UiComponentFacade.getInstance(project); - uiFacade.showListPopup("[Select Data Source]", new ListSelectionListener() { - @Override public void selected(int index) { - DataSource dataSource = dataSources.get(index); - selectTable(project, file, dataSource, groupFour); - MybatisSetting.getInstance().setDlftDataSourceId(dataSource.getUniqueId()); - } - }, dataSources, new Function() { - @Override public String apply(DataSource dataSource) { - return dataSource.getName(); - } - } + private void selectColumnsAndGenerate(UiComponentFacade uiFacade, + List columns, + final GroupFour groupFour) { + uiFacade.selectElements("[Select Columns]", + columns, + new ListSelectionItemListener() { + @Override + public void apply(Collection columns) { + PropertyGenerator.generateProperties(columns, groupFour); + } + + @Override public boolean isWriteAction() { + return true; + } + }, new Function() { + @Override + public String apply(DatabaseTableFieldData column) { + return getColumnText(column); + } + } ); } + private static String getColumnText(DatabaseTableFieldData column) { + final String name = column.getName(); + if (column.isPrimary()) { + return name + " [primary key]"; + } else if (column.isForeign()) { + return name + " [foreign key]"; + } else if (!column.isNullable()) { + return name + " [not null]"; + } else { + return name; + } + } } diff --git a/src/com/seventh7/mybatis/ui/ListSelectionItemListener.java b/src/com/seventh7/mybatis/ui/ListSelectionItemListener.java new file mode 100644 index 0000000..8187136 --- /dev/null +++ b/src/com/seventh7/mybatis/ui/ListSelectionItemListener.java @@ -0,0 +1,16 @@ +package com.seventh7.mybatis.ui; + +import java.util.Collection; + +/** + * @author yanglin + */ +public abstract class ListSelectionItemListener extends ExecutableListener { + + public void apply(T t) { + } + + public void apply(Collection ts) { + } + +} diff --git a/src/com/seventh7/mybatis/ui/UiComponentFacade.java b/src/com/seventh7/mybatis/ui/UiComponentFacade.java index 2a0163b..3c28a43 100644 --- a/src/com/seventh7/mybatis/ui/UiComponentFacade.java +++ b/src/com/seventh7/mybatis/ui/UiComponentFacade.java @@ -2,6 +2,8 @@ import com.google.common.base.Function; import com.google.common.collect.Collections2; +import com.google.common.collect.Iterables; +import com.google.common.collect.Lists; import com.intellij.openapi.application.Application; import com.intellij.openapi.application.ApplicationManager; @@ -22,7 +24,9 @@ import java.awt.event.ActionEvent; import java.awt.event.ActionListener; +import java.util.ArrayList; import java.util.Collection; +import java.util.List; /** * @author yanglin @@ -143,4 +147,32 @@ public void run() { return builder; } + public void selectElements(@NotNull String title, + @NotNull final List objects, + @NotNull final ListSelectionItemListener listener, + @NotNull final Function function) { + if (objects.size() == 1) { + final T onlyElement = Iterables.getOnlyElement(objects, null); + listener.apply(onlyElement); + return; + } + + showListPopup(title, new ListSelectionListener() { + @Override public void selected(int[] indexes) { + final ArrayList res = Lists.newArrayList(); + for (int index : indexes) { + res.add(objects.get(index)); + } + listener.apply(res); + } + + @Override public void selected(int index) { + listener.apply(objects.get(index)); + } + + @Override public boolean isWriteAction() { + return listener.isWriteAction(); + } + }, objects, function); + } } From 60832d8c7985f1af3087c36b646cc09878516f81 Mon Sep 17 00:00:00 2001 From: Yanglin Date: Mon, 23 Dec 2013 09:48:06 +0800 Subject: [PATCH 11/85] Reformat --- .../converter/AcrossMapperXmlConverter.java | 43 +++++++++++++++++++ .../mybatis/ui/UiComponentFacade.java | 12 +++--- 2 files changed, 49 insertions(+), 6 deletions(-) create mode 100644 src/com/seventh7/mybatis/dom/converter/AcrossMapperXmlConverter.java diff --git a/src/com/seventh7/mybatis/dom/converter/AcrossMapperXmlConverter.java b/src/com/seventh7/mybatis/dom/converter/AcrossMapperXmlConverter.java new file mode 100644 index 0000000..05c2c96 --- /dev/null +++ b/src/com/seventh7/mybatis/dom/converter/AcrossMapperXmlConverter.java @@ -0,0 +1,43 @@ +package com.seventh7.mybatis.dom.converter; + +import com.google.common.base.Predicate; +import com.google.common.collect.Collections2; + +import com.intellij.util.xml.ConvertContext; +import com.seventh7.mybatis.dom.model.IdDomElement; +import com.seventh7.mybatis.dom.model.Mapper; +import com.seventh7.mybatis.util.MapperUtils; + +import org.jetbrains.annotations.NotNull; +import org.jetbrains.annotations.Nullable; + +import java.util.Collection; +import java.util.Collections; + +/** + * @author yanglin + */ +public abstract class AcrossMapperXmlConverter extends IdBasedTagConverter { + + @NotNull @Override + public Collection getComparisons(@Nullable Mapper mapper, ConvertContext context) { + if (mapper == null) { + return Collections.emptyList(); + } +// return isContextElement(mapper, context) ? doFilterResultMapItself(mapper, ) + return Collections.emptyList(); + } + + public abstract Collection doGetComparisons(@NotNull Mapper mapper); + + public abstract boolean isContextElement(Mapper mapper, ConvertContext convert); + + private Collection doFilterResultMapItself(Mapper mapper, final T element) { + return Collections2.filter(doGetComparisons(mapper), new Predicate() { + @Override public boolean apply(IdDomElement input) { + return !MapperUtils.getId(input).equals(MapperUtils.getId(element)); + } + }); + } + +} diff --git a/src/com/seventh7/mybatis/ui/UiComponentFacade.java b/src/com/seventh7/mybatis/ui/UiComponentFacade.java index 3c28a43..4ea2ac2 100644 --- a/src/com/seventh7/mybatis/ui/UiComponentFacade.java +++ b/src/com/seventh7/mybatis/ui/UiComponentFacade.java @@ -95,9 +95,9 @@ public JBPopup showListPopup(@NotNull String title, } public JBPopup showListPopup(@NotNull String title, - @Nullable final ListSelectionListener listener, - @NotNull Collection objs, - @NotNull Function fun) { + @Nullable final ListSelectionListener listener, + @NotNull Collection objs, + @NotNull Function fun) { Collection info = Collections2.transform(objs, fun); PopupChooserBuilder builder = createListPopupBuilder(title, listener, info.toArray(new String[info.size()])); JBPopup popup = builder.createPopup(); @@ -148,9 +148,9 @@ public void run() { } public void selectElements(@NotNull String title, - @NotNull final List objects, - @NotNull final ListSelectionItemListener listener, - @NotNull final Function function) { + @NotNull final List objects, + @NotNull final ListSelectionItemListener listener, + @NotNull final Function function) { if (objects.size() == 1) { final T onlyElement = Iterables.getOnlyElement(objects, null); listener.apply(onlyElement); From d00223b9b91281b6f689da6991b8f68f8f678db0 Mon Sep 17 00:00:00 2001 From: Yanglin Date: Mon, 23 Dec 2013 20:44:21 +0800 Subject: [PATCH 12/85] Support according to select statement completion --- META-INF/plugin.xml | 5 +++-- .../converter/AccordingToSelectConverter.java | 22 +++++++++++++++++++ .../dom/model/AccordingToSelectGroup.java | 22 +++++++++++++++++++ src/com/seventh7/mybatis/dom/model/Arg.java | 4 +--- .../mybatis/dom/model/Association.java | 2 +- .../mybatis/dom/model/Collection.java | 2 +- src/com/seventh7/mybatis/dom/model/IdArg.java | 4 +--- 7 files changed, 51 insertions(+), 10 deletions(-) create mode 100644 src/com/seventh7/mybatis/dom/converter/AccordingToSelectConverter.java create mode 100644 src/com/seventh7/mybatis/dom/model/AccordingToSelectGroup.java diff --git a/META-INF/plugin.xml b/META-INF/plugin.xml index 8b44171..564edbe 100644 --- a/META-INF/plugin.xml +++ b/META-INF/plugin.xml @@ -1,7 +1,7 @@ com.seventh7.plugin.mybatis MyBatis plugin - 2.1 + 2.11 Yanglin 2.1 +

              2.11

              • Support switching between java type and alias in mapper xml using intention keystroke
              • Support generating properties for elements of result map using intention keystroke[DataSource of intellij is required]
              • Support completion of jdbc type in mapper xml
              • +
              • Support according to select statement completion in mapper xml

              2.01

                diff --git a/src/com/seventh7/mybatis/dom/converter/AccordingToSelectConverter.java b/src/com/seventh7/mybatis/dom/converter/AccordingToSelectConverter.java new file mode 100644 index 0000000..7729edc --- /dev/null +++ b/src/com/seventh7/mybatis/dom/converter/AccordingToSelectConverter.java @@ -0,0 +1,22 @@ +package com.seventh7.mybatis.dom.converter; + +import com.intellij.util.xml.ConvertContext; +import com.seventh7.mybatis.dom.model.IdDomElement; +import com.seventh7.mybatis.dom.model.Mapper; + +import org.jetbrains.annotations.NotNull; +import org.jetbrains.annotations.Nullable; + +import java.util.Collection; + +/** + * @author yanglin + */ +public class AccordingToSelectConverter extends IdBasedTagConverter { + + @NotNull @Override + public Collection getComparisons(@Nullable Mapper mapper, ConvertContext context) { + return mapper.getSelects(); + } + +} diff --git a/src/com/seventh7/mybatis/dom/model/AccordingToSelectGroup.java b/src/com/seventh7/mybatis/dom/model/AccordingToSelectGroup.java new file mode 100644 index 0000000..d03b0a1 --- /dev/null +++ b/src/com/seventh7/mybatis/dom/model/AccordingToSelectGroup.java @@ -0,0 +1,22 @@ +package com.seventh7.mybatis.dom.model; + +import com.intellij.psi.xml.XmlAttributeValue; +import com.intellij.util.xml.Attribute; +import com.intellij.util.xml.Convert; +import com.intellij.util.xml.DomElement; +import com.intellij.util.xml.GenericAttributeValue; +import com.seventh7.mybatis.dom.converter.AccordingToSelectConverter; + +import org.jetbrains.annotations.NotNull; + +/** + * @author yanglin + */ +public interface AccordingToSelectGroup extends DomElement{ + + @NotNull + @Attribute("select") + @Convert(AccordingToSelectConverter.class) + public GenericAttributeValue getExtends(); + +} diff --git a/src/com/seventh7/mybatis/dom/model/Arg.java b/src/com/seventh7/mybatis/dom/model/Arg.java index 9b26a94..a9e6d9c 100644 --- a/src/com/seventh7/mybatis/dom/model/Arg.java +++ b/src/com/seventh7/mybatis/dom/model/Arg.java @@ -1,10 +1,8 @@ package com.seventh7.mybatis.dom.model; -import com.intellij.util.xml.DomElement; - /** * @author yanglin */ -public interface Arg extends DomElement { +public interface Arg extends AccordingToSelectGroup { } diff --git a/src/com/seventh7/mybatis/dom/model/Association.java b/src/com/seventh7/mybatis/dom/model/Association.java index 3e7bba1..79ccf81 100644 --- a/src/com/seventh7/mybatis/dom/model/Association.java +++ b/src/com/seventh7/mybatis/dom/model/Association.java @@ -11,7 +11,7 @@ /** * @author yanglin */ -public interface Association extends GroupFour, ResultMapGroup, PropertyGroup { +public interface Association extends GroupFour, ResultMapGroup, PropertyGroup, AccordingToSelectGroup { @NotNull @Attribute("javaType") diff --git a/src/com/seventh7/mybatis/dom/model/Collection.java b/src/com/seventh7/mybatis/dom/model/Collection.java index a557fa4..0bc63fd 100644 --- a/src/com/seventh7/mybatis/dom/model/Collection.java +++ b/src/com/seventh7/mybatis/dom/model/Collection.java @@ -11,7 +11,7 @@ /** * @author yanglin */ -public interface Collection extends GroupFour, ResultMapGroup, PropertyGroup { +public interface Collection extends GroupFour, ResultMapGroup, PropertyGroup, AccordingToSelectGroup { @NotNull @Attribute("ofType") diff --git a/src/com/seventh7/mybatis/dom/model/IdArg.java b/src/com/seventh7/mybatis/dom/model/IdArg.java index c263064..4c13e9e 100644 --- a/src/com/seventh7/mybatis/dom/model/IdArg.java +++ b/src/com/seventh7/mybatis/dom/model/IdArg.java @@ -1,10 +1,8 @@ package com.seventh7.mybatis.dom.model; -import com.intellij.util.xml.DomElement; - /** * @author yanglin */ -public interface IdArg extends DomElement { +public interface IdArg extends AccordingToSelectGroup { } From a6ec184ecc95ec452c0e0513486cb9e8df4c6edb Mon Sep 17 00:00:00 2001 From: Yanglin Date: Mon, 23 Dec 2013 20:49:57 +0800 Subject: [PATCH 13/85] Update plugin.xml --- META-INF/plugin.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/META-INF/plugin.xml b/META-INF/plugin.xml index 564edbe..33da235 100644 --- a/META-INF/plugin.xml +++ b/META-INF/plugin.xml @@ -15,7 +15,7 @@
              • Support switching between java type and alias in mapper xml using intention keystroke
              • Support generating properties for elements of result map using intention keystroke[DataSource of intellij is required]
              • Support completion of jdbc type in mapper xml
              • -
              • Support according to select statement completion in mapper xml
              • +
              • Support completion of according to select statement in mapper xml

              2.01

                From c84d42bcf083e2dcb61a2beb6edadf7bed0b03c1 Mon Sep 17 00:00:00 2001 From: Yanglin Date: Mon, 23 Dec 2013 21:44:23 +0800 Subject: [PATCH 14/85] Delete useless class --- .../converter/AcrossMapperXmlConverter.java | 43 ------------------- 1 file changed, 43 deletions(-) delete mode 100644 src/com/seventh7/mybatis/dom/converter/AcrossMapperXmlConverter.java diff --git a/src/com/seventh7/mybatis/dom/converter/AcrossMapperXmlConverter.java b/src/com/seventh7/mybatis/dom/converter/AcrossMapperXmlConverter.java deleted file mode 100644 index 05c2c96..0000000 --- a/src/com/seventh7/mybatis/dom/converter/AcrossMapperXmlConverter.java +++ /dev/null @@ -1,43 +0,0 @@ -package com.seventh7.mybatis.dom.converter; - -import com.google.common.base.Predicate; -import com.google.common.collect.Collections2; - -import com.intellij.util.xml.ConvertContext; -import com.seventh7.mybatis.dom.model.IdDomElement; -import com.seventh7.mybatis.dom.model.Mapper; -import com.seventh7.mybatis.util.MapperUtils; - -import org.jetbrains.annotations.NotNull; -import org.jetbrains.annotations.Nullable; - -import java.util.Collection; -import java.util.Collections; - -/** - * @author yanglin - */ -public abstract class AcrossMapperXmlConverter extends IdBasedTagConverter { - - @NotNull @Override - public Collection getComparisons(@Nullable Mapper mapper, ConvertContext context) { - if (mapper == null) { - return Collections.emptyList(); - } -// return isContextElement(mapper, context) ? doFilterResultMapItself(mapper, ) - return Collections.emptyList(); - } - - public abstract Collection doGetComparisons(@NotNull Mapper mapper); - - public abstract boolean isContextElement(Mapper mapper, ConvertContext convert); - - private Collection doFilterResultMapItself(Mapper mapper, final T element) { - return Collections2.filter(doGetComparisons(mapper), new Predicate() { - @Override public boolean apply(IdDomElement input) { - return !MapperUtils.getId(input).equals(MapperUtils.getId(element)); - } - }); - } - -} From 03fb64e1716f3e53a0da92182705b2a7689de926 Mon Sep 17 00:00:00 2001 From: Yanglin Date: Mon, 23 Dec 2013 21:50:42 +0800 Subject: [PATCH 15/85] Update some classes --- .../intention/GenerateMapperIntention.java | 5 -- .../intention/GeneratePropertyIntention.java | 82 +++++++++---------- .../mybatis/ui/UiComponentFacade.java | 9 +- 3 files changed, 46 insertions(+), 50 deletions(-) diff --git a/src/com/seventh7/mybatis/intention/GenerateMapperIntention.java b/src/com/seventh7/mybatis/intention/GenerateMapperIntention.java index 2837f16..864213f 100644 --- a/src/com/seventh7/mybatis/intention/GenerateMapperIntention.java +++ b/src/com/seventh7/mybatis/intention/GenerateMapperIntention.java @@ -100,11 +100,6 @@ private ClickableListener getChooseFolderListener(final Editor editor, final Psi public void clicked() { handleChooseNewFolder(project, editor, clazz); } - - @Override - public boolean isWriteAction() { - return false; - } }; } diff --git a/src/com/seventh7/mybatis/intention/GeneratePropertyIntention.java b/src/com/seventh7/mybatis/intention/GeneratePropertyIntention.java index bcf27cc..7c1954f 100644 --- a/src/com/seventh7/mybatis/intention/GeneratePropertyIntention.java +++ b/src/com/seventh7/mybatis/intention/GeneratePropertyIntention.java @@ -65,59 +65,59 @@ public void invoke(@NotNull final Project project, private void selectDataSourceAndGenerate(final GroupFour domElement, DataSourceManager dataSourceManager, final UiComponentFacade uiFacade) { - uiFacade.selectElements("[Select Data Source]", - dataSourceManager.getDataSources(), - new ListSelectionItemListener() { - @Override public void apply(DataSource dataSource) { - MybatisSetting.getInstance().setDlftDataSourceId(dataSource.getUniqueId()); - selectTableAndGenerate(uiFacade, dataSource.getTables(), domElement); - } - }, new Function() { - @Override public String apply(DataSource dataSource) { - return dataSource.getName(); - } - } + uiFacade.selectItems("[Select Data Source]", + dataSourceManager.getDataSources(), + new ListSelectionItemListener() { + @Override public void apply(DataSource dataSource) { + MybatisSetting.getInstance().setDlftDataSourceId(dataSource.getUniqueId()); + selectTableAndGenerate(uiFacade, dataSource.getTables(), domElement); + } + }, new Function() { + @Override public String apply(DataSource dataSource) { + return dataSource.getName(); + } + } ); } private void selectTableAndGenerate(final UiComponentFacade uiFacade, List table, final GroupFour groupFour) { - uiFacade.selectElements("[Select Table]", - table, - new ListSelectionItemListener() { - @Override public void apply(DatabaseTableData databaseTableData) { - selectColumnsAndGenerate(uiFacade, databaseTableData.getColumns(), groupFour); - } - - }, new Function() { - @Override public String apply(DatabaseTableData table) { - return table.getName(); - } - } + uiFacade.selectItems("[Select Table]", + table, + new ListSelectionItemListener() { + @Override public void apply(DatabaseTableData databaseTableData) { + selectColumnsAndGenerate(uiFacade, databaseTableData.getColumns(), groupFour); + } + + }, new Function() { + @Override public String apply(DatabaseTableData table) { + return table.getName(); + } + } ); } private void selectColumnsAndGenerate(UiComponentFacade uiFacade, List columns, final GroupFour groupFour) { - uiFacade.selectElements("[Select Columns]", - columns, - new ListSelectionItemListener() { - @Override - public void apply(Collection columns) { - PropertyGenerator.generateProperties(columns, groupFour); - } - - @Override public boolean isWriteAction() { - return true; - } - }, new Function() { - @Override - public String apply(DatabaseTableFieldData column) { - return getColumnText(column); - } - } + uiFacade.selectItems("[Select Columns]", + columns, + new ListSelectionItemListener() { + @Override + public void apply(Collection columns) { + PropertyGenerator.generateProperties(columns, groupFour); + } + + @Override public boolean isWriteAction() { + return true; + } + }, new Function() { + @Override + public String apply(DatabaseTableFieldData column) { + return getColumnText(column); + } + } ); } diff --git a/src/com/seventh7/mybatis/ui/UiComponentFacade.java b/src/com/seventh7/mybatis/ui/UiComponentFacade.java index 4ea2ac2..1818e27 100644 --- a/src/com/seventh7/mybatis/ui/UiComponentFacade.java +++ b/src/com/seventh7/mybatis/ui/UiComponentFacade.java @@ -147,13 +147,14 @@ public void run() { return builder; } - public void selectElements(@NotNull String title, - @NotNull final List objects, - @NotNull final ListSelectionItemListener listener, - @NotNull final Function function) { + public void selectItems(@NotNull String title, + @NotNull final List objects, + @NotNull final ListSelectionItemListener listener, + @NotNull final Function function) { if (objects.size() == 1) { final T onlyElement = Iterables.getOnlyElement(objects, null); listener.apply(onlyElement); + listener.apply(Lists.newArrayList(onlyElement)); return; } From 66bb8ce6ad82de7d6b5d5108c23289a1c3a5436c Mon Sep 17 00:00:00 2001 From: Yanglin Date: Mon, 23 Dec 2013 21:59:08 +0800 Subject: [PATCH 16/85] Repackage some classes --- .../mybatis/intention/AliasSwitchIntentionAction.java | 1 + .../seventh7/mybatis/intention/GenerateMapperIntention.java | 1 + .../mybatis/intention/GenerateParamAnnotationIntention.java | 1 + .../seventh7/mybatis/intention/GeneratePropertyIntention.java | 1 + .../mybatis/intention/GenerateStatementIntention.java | 1 + src/com/seventh7/mybatis/intention/GenericIntention.java | 1 + .../mybatis/intention/{ => chooser}/AliasSwitchChooser.java | 2 +- .../intention/{ => chooser}/GenerateMapperChooser.java | 4 ++-- .../mybatis/intention/{ => chooser}/GenerateParamChooser.java | 4 ++-- .../intention/{ => chooser}/GeneratePropertyChooser.java | 2 +- .../intention/{ => chooser}/GenerateStatementChooser.java | 4 ++-- .../mybatis/intention/{ => chooser}/IntentionChooser.java | 2 +- .../intention/{ => chooser}/JavaFileIntentionChooser.java | 3 ++- 13 files changed, 17 insertions(+), 10 deletions(-) rename src/com/seventh7/mybatis/intention/{ => chooser}/AliasSwitchChooser.java (94%) rename src/com/seventh7/mybatis/intention/{ => chooser}/GenerateMapperChooser.java (92%) rename src/com/seventh7/mybatis/intention/{ => chooser}/GenerateParamChooser.java (94%) rename src/com/seventh7/mybatis/intention/{ => chooser}/GeneratePropertyChooser.java (96%) rename src/com/seventh7/mybatis/intention/{ => chooser}/GenerateStatementChooser.java (94%) rename src/com/seventh7/mybatis/intention/{ => chooser}/IntentionChooser.java (86%) rename src/com/seventh7/mybatis/intention/{ => chooser}/JavaFileIntentionChooser.java (93%) diff --git a/src/com/seventh7/mybatis/intention/AliasSwitchIntentionAction.java b/src/com/seventh7/mybatis/intention/AliasSwitchIntentionAction.java index 38c49b9..e7f2a2e 100644 --- a/src/com/seventh7/mybatis/intention/AliasSwitchIntentionAction.java +++ b/src/com/seventh7/mybatis/intention/AliasSwitchIntentionAction.java @@ -17,6 +17,7 @@ import com.seventh7.mybatis.alias.AliasClassReference; import com.seventh7.mybatis.alias.AliasDesc; import com.seventh7.mybatis.alias.AliasFacade; +import com.seventh7.mybatis.intention.chooser.AliasSwitchChooser; import org.jetbrains.annotations.NotNull; diff --git a/src/com/seventh7/mybatis/intention/GenerateMapperIntention.java b/src/com/seventh7/mybatis/intention/GenerateMapperIntention.java index 864213f..fa3eadc 100644 --- a/src/com/seventh7/mybatis/intention/GenerateMapperIntention.java +++ b/src/com/seventh7/mybatis/intention/GenerateMapperIntention.java @@ -19,6 +19,7 @@ import com.intellij.psi.PsiManager; import com.intellij.psi.util.PsiTreeUtil; import com.intellij.util.IncorrectOperationException; +import com.seventh7.mybatis.intention.chooser.GenerateMapperChooser; import com.seventh7.mybatis.service.EditorService; import com.seventh7.mybatis.template.MybatisFileTemplateDescriptorFactory; import com.seventh7.mybatis.ui.ClickableListener; diff --git a/src/com/seventh7/mybatis/intention/GenerateParamAnnotationIntention.java b/src/com/seventh7/mybatis/intention/GenerateParamAnnotationIntention.java index b4ae4d8..bb8335a 100644 --- a/src/com/seventh7/mybatis/intention/GenerateParamAnnotationIntention.java +++ b/src/com/seventh7/mybatis/intention/GenerateParamAnnotationIntention.java @@ -8,6 +8,7 @@ import com.intellij.psi.PsiParameter; import com.intellij.psi.util.PsiTreeUtil; import com.intellij.util.IncorrectOperationException; +import com.seventh7.mybatis.intention.chooser.GenerateParamChooser; import com.seventh7.mybatis.service.AnnotationService; import org.jetbrains.annotations.NotNull; diff --git a/src/com/seventh7/mybatis/intention/GeneratePropertyIntention.java b/src/com/seventh7/mybatis/intention/GeneratePropertyIntention.java index 7c1954f..df99237 100644 --- a/src/com/seventh7/mybatis/intention/GeneratePropertyIntention.java +++ b/src/com/seventh7/mybatis/intention/GeneratePropertyIntention.java @@ -15,6 +15,7 @@ import com.intellij.util.xml.DomUtil; import com.seventh7.mybatis.dom.model.GroupFour; import com.seventh7.mybatis.generate.PropertyGenerator; +import com.seventh7.mybatis.intention.chooser.GeneratePropertyChooser; import com.seventh7.mybatis.setting.MybatisSetting; import com.seventh7.mybatis.ui.ListSelectionItemListener; import com.seventh7.mybatis.ui.UiComponentFacade; diff --git a/src/com/seventh7/mybatis/intention/GenerateStatementIntention.java b/src/com/seventh7/mybatis/intention/GenerateStatementIntention.java index d0ffad3..f57895d 100644 --- a/src/com/seventh7/mybatis/intention/GenerateStatementIntention.java +++ b/src/com/seventh7/mybatis/intention/GenerateStatementIntention.java @@ -8,6 +8,7 @@ import com.intellij.psi.util.PsiTreeUtil; import com.intellij.util.IncorrectOperationException; import com.seventh7.mybatis.generate.StatementGenerator; +import com.seventh7.mybatis.intention.chooser.GenerateStatementChooser; import org.jetbrains.annotations.NotNull; diff --git a/src/com/seventh7/mybatis/intention/GenericIntention.java b/src/com/seventh7/mybatis/intention/GenericIntention.java index 5c32a87..4bb56fd 100644 --- a/src/com/seventh7/mybatis/intention/GenericIntention.java +++ b/src/com/seventh7/mybatis/intention/GenericIntention.java @@ -4,6 +4,7 @@ import com.intellij.openapi.editor.Editor; import com.intellij.openapi.project.Project; import com.intellij.psi.PsiFile; +import com.seventh7.mybatis.intention.chooser.IntentionChooser; import org.jetbrains.annotations.NotNull; diff --git a/src/com/seventh7/mybatis/intention/AliasSwitchChooser.java b/src/com/seventh7/mybatis/intention/chooser/AliasSwitchChooser.java similarity index 94% rename from src/com/seventh7/mybatis/intention/AliasSwitchChooser.java rename to src/com/seventh7/mybatis/intention/chooser/AliasSwitchChooser.java index 5514677..99d916c 100644 --- a/src/com/seventh7/mybatis/intention/AliasSwitchChooser.java +++ b/src/com/seventh7/mybatis/intention/chooser/AliasSwitchChooser.java @@ -1,4 +1,4 @@ -package com.seventh7.mybatis.intention; +package com.seventh7.mybatis.intention.chooser; import com.intellij.openapi.editor.Editor; import com.intellij.openapi.project.Project; diff --git a/src/com/seventh7/mybatis/intention/GenerateMapperChooser.java b/src/com/seventh7/mybatis/intention/chooser/GenerateMapperChooser.java similarity index 92% rename from src/com/seventh7/mybatis/intention/GenerateMapperChooser.java rename to src/com/seventh7/mybatis/intention/chooser/GenerateMapperChooser.java index 019d38e..8e38233 100644 --- a/src/com/seventh7/mybatis/intention/GenerateMapperChooser.java +++ b/src/com/seventh7/mybatis/intention/chooser/GenerateMapperChooser.java @@ -1,4 +1,4 @@ -package com.seventh7.mybatis.intention; +package com.seventh7.mybatis.intention.chooser; import com.intellij.psi.PsiClass; import com.intellij.psi.PsiElement; @@ -9,7 +9,7 @@ /** * @author yanglin */ -public class GenerateMapperChooser extends JavaFileIntentionChooser{ +public class GenerateMapperChooser extends JavaFileIntentionChooser { public static final JavaFileIntentionChooser INSTANCE = new GenerateMapperChooser(); diff --git a/src/com/seventh7/mybatis/intention/GenerateParamChooser.java b/src/com/seventh7/mybatis/intention/chooser/GenerateParamChooser.java similarity index 94% rename from src/com/seventh7/mybatis/intention/GenerateParamChooser.java rename to src/com/seventh7/mybatis/intention/chooser/GenerateParamChooser.java index a44a465..cff2df7 100644 --- a/src/com/seventh7/mybatis/intention/GenerateParamChooser.java +++ b/src/com/seventh7/mybatis/intention/chooser/GenerateParamChooser.java @@ -1,4 +1,4 @@ -package com.seventh7.mybatis.intention; +package com.seventh7.mybatis.intention.chooser; import com.intellij.psi.PsiElement; import com.intellij.psi.PsiMethod; @@ -12,7 +12,7 @@ /** * @author yanglin */ -public class GenerateParamChooser extends JavaFileIntentionChooser{ +public class GenerateParamChooser extends JavaFileIntentionChooser { public static final JavaFileIntentionChooser INSTANCE = new GenerateParamChooser(); diff --git a/src/com/seventh7/mybatis/intention/GeneratePropertyChooser.java b/src/com/seventh7/mybatis/intention/chooser/GeneratePropertyChooser.java similarity index 96% rename from src/com/seventh7/mybatis/intention/GeneratePropertyChooser.java rename to src/com/seventh7/mybatis/intention/chooser/GeneratePropertyChooser.java index 245d6f6..b739e01 100644 --- a/src/com/seventh7/mybatis/intention/GeneratePropertyChooser.java +++ b/src/com/seventh7/mybatis/intention/chooser/GeneratePropertyChooser.java @@ -1,4 +1,4 @@ -package com.seventh7.mybatis.intention; +package com.seventh7.mybatis.intention.chooser; import com.google.common.base.Optional; diff --git a/src/com/seventh7/mybatis/intention/GenerateStatementChooser.java b/src/com/seventh7/mybatis/intention/chooser/GenerateStatementChooser.java similarity index 94% rename from src/com/seventh7/mybatis/intention/GenerateStatementChooser.java rename to src/com/seventh7/mybatis/intention/chooser/GenerateStatementChooser.java index fbc8109..4016672 100644 --- a/src/com/seventh7/mybatis/intention/GenerateStatementChooser.java +++ b/src/com/seventh7/mybatis/intention/chooser/GenerateStatementChooser.java @@ -1,4 +1,4 @@ -package com.seventh7.mybatis.intention; +package com.seventh7.mybatis.intention.chooser; import com.intellij.psi.PsiClass; import com.intellij.psi.PsiElement; @@ -12,7 +12,7 @@ /** * @author yanglin */ -public class GenerateStatementChooser extends JavaFileIntentionChooser{ +public class GenerateStatementChooser extends JavaFileIntentionChooser { public static final JavaFileIntentionChooser INSTANCE = new GenerateStatementChooser(); diff --git a/src/com/seventh7/mybatis/intention/IntentionChooser.java b/src/com/seventh7/mybatis/intention/chooser/IntentionChooser.java similarity index 86% rename from src/com/seventh7/mybatis/intention/IntentionChooser.java rename to src/com/seventh7/mybatis/intention/chooser/IntentionChooser.java index 7946d83..0e284af 100644 --- a/src/com/seventh7/mybatis/intention/IntentionChooser.java +++ b/src/com/seventh7/mybatis/intention/chooser/IntentionChooser.java @@ -1,4 +1,4 @@ -package com.seventh7.mybatis.intention; +package com.seventh7.mybatis.intention.chooser; import com.intellij.openapi.editor.Editor; import com.intellij.openapi.project.Project; diff --git a/src/com/seventh7/mybatis/intention/JavaFileIntentionChooser.java b/src/com/seventh7/mybatis/intention/chooser/JavaFileIntentionChooser.java similarity index 93% rename from src/com/seventh7/mybatis/intention/JavaFileIntentionChooser.java rename to src/com/seventh7/mybatis/intention/chooser/JavaFileIntentionChooser.java index 06a2b31..91654fa 100644 --- a/src/com/seventh7/mybatis/intention/JavaFileIntentionChooser.java +++ b/src/com/seventh7/mybatis/intention/chooser/JavaFileIntentionChooser.java @@ -1,4 +1,4 @@ -package com.seventh7.mybatis.intention; +package com.seventh7.mybatis.intention.chooser; import com.intellij.openapi.editor.Editor; import com.intellij.openapi.project.Project; @@ -8,6 +8,7 @@ import com.intellij.psi.PsiJavaFile; import com.intellij.psi.PsiMethod; import com.intellij.psi.PsiParameter; +import com.seventh7.mybatis.intention.chooser.IntentionChooser; import com.seventh7.mybatis.service.JavaService; import com.seventh7.mybatis.util.JavaUtils; From 81ef04c0da606dc4cd3cfcd8ba4a8e4e0646e366 Mon Sep 17 00:00:00 2001 From: Yanglin Date: Mon, 23 Dec 2013 23:02:46 +0800 Subject: [PATCH 17/85] Update Annotation --- .../mybatis/annotation/Annotation.java | 19 ++++++++----------- 1 file changed, 8 insertions(+), 11 deletions(-) diff --git a/src/com/seventh7/mybatis/annotation/Annotation.java b/src/com/seventh7/mybatis/annotation/Annotation.java index 8569f49..c66b489 100644 --- a/src/com/seventh7/mybatis/annotation/Annotation.java +++ b/src/com/seventh7/mybatis/annotation/Annotation.java @@ -1,9 +1,9 @@ package com.seventh7.mybatis.annotation; import com.google.common.base.Optional; +import com.google.common.collect.ImmutableMap; import com.google.common.collect.ImmutableSet; import com.google.common.collect.Iterables; -import com.google.common.collect.Maps; import com.intellij.openapi.project.Project; import com.intellij.psi.JavaPsiFacade; @@ -12,7 +12,6 @@ import org.jetbrains.annotations.NotNull; -import java.util.Map; import java.util.Set; /** @@ -43,7 +42,7 @@ public class Annotation implements Cloneable{ private final String qualifiedName; - private Map attributePairs; + private ImmutableMap attributePairs; public interface AnnotationValue { } @@ -66,18 +65,16 @@ public String toString() { public Annotation(@NotNull String label, @NotNull String qualifiedName) { this.label = label; this.qualifiedName = qualifiedName; - attributePairs = Maps.newHashMap(); - } - - private Annotation addAttribute(String key, AnnotationValue value) { - this.attributePairs.put(key, value); - return this; + this.attributePairs = ImmutableMap.of(); } public Annotation withAttribute(@NotNull String key, @NotNull AnnotationValue value) { Annotation copy = this.clone(); - copy.attributePairs = Maps.newHashMap(this.attributePairs); - return copy.addAttribute(key, value); + copy.attributePairs = ImmutableMap.builder() + .putAll(this.attributePairs) + .put(key, value) + .build(); + return copy; } public Annotation withValue(@NotNull AnnotationValue value) { From 3a0eae432480a7bf7bba726dbd8c892b9572ae24 Mon Sep 17 00:00:00 2001 From: Yanglin Date: Mon, 23 Dec 2013 23:46:42 +0800 Subject: [PATCH 18/85] Update GeneratePropertyIntention --- .../seventh7/mybatis/intention/GeneratePropertyIntention.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/com/seventh7/mybatis/intention/GeneratePropertyIntention.java b/src/com/seventh7/mybatis/intention/GeneratePropertyIntention.java index df99237..9738a5e 100644 --- a/src/com/seventh7/mybatis/intention/GeneratePropertyIntention.java +++ b/src/com/seventh7/mybatis/intention/GeneratePropertyIntention.java @@ -87,8 +87,8 @@ private void selectTableAndGenerate(final UiComponentFacade uiFacade, uiFacade.selectItems("[Select Table]", table, new ListSelectionItemListener() { - @Override public void apply(DatabaseTableData databaseTableData) { - selectColumnsAndGenerate(uiFacade, databaseTableData.getColumns(), groupFour); + @Override public void apply(DatabaseTableData dataSource) { + selectColumnsAndGenerate(uiFacade, dataSource.getColumns(), groupFour); } }, new Function() { From a5ff9576582a9cd7730d8a7fa81ade4200be451d Mon Sep 17 00:00:00 2001 From: Yanglin Date: Tue, 24 Dec 2013 10:38:22 +0800 Subject: [PATCH 19/85] Update plugin.xml --- README.md | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index c999bc3..c275b79 100644 --- a/README.md +++ b/README.md @@ -14,10 +14,15 @@ * Support find usage of mapper interface and mapper xml element * Highlight conflicting element of mapper xml as errors * Auto register mapper as spring bean -* Mapper parameter auto completion in xml while editting sql +* Support completion of jdbc type in mapper xml +* Support completion of referencing to select statement in mapper xml +* Support switching between java type and alias in mapper xml using intention keystroke +* Mapper parameter auto completion in xml while editing sql * \#{yourParameter} * @Param annotation based * Association is supported +* Support generating properties for elements of result map using intention keystroke + * DataSource of intellij is required #Generate From 8b15b2766f8ef7489b848aa8071d61f5df272de3 Mon Sep 17 00:00:00 2001 From: Yanglin Date: Tue, 24 Dec 2013 19:55:07 +0800 Subject: [PATCH 20/85] Fix bug of saving settings --- META-INF/plugin.xml | 4 +-- .../intention/GeneratePropertyIntention.java | 4 +-- .../mybatis/setting/MybatisConfigurable.java | 8 ++--- .../mybatis/setting/MybatisSetting.java | 29 ++++++++++--------- 4 files changed, 21 insertions(+), 24 deletions(-) diff --git a/META-INF/plugin.xml b/META-INF/plugin.xml index 33da235..7ed6836 100644 --- a/META-INF/plugin.xml +++ b/META-INF/plugin.xml @@ -1,7 +1,7 @@ com.seventh7.plugin.mybatis MyBatis plugin - 2.11 + 2.111 Yanglin 2.11 +

                2.111

                • Support switching between java type and alias in mapper xml using intention keystroke
                • Support generating properties for elements of result map using intention keystroke[DataSource of intellij is required]
                • diff --git a/src/com/seventh7/mybatis/intention/GeneratePropertyIntention.java b/src/com/seventh7/mybatis/intention/GeneratePropertyIntention.java index 9738a5e..8f45d27 100644 --- a/src/com/seventh7/mybatis/intention/GeneratePropertyIntention.java +++ b/src/com/seventh7/mybatis/intention/GeneratePropertyIntention.java @@ -53,7 +53,7 @@ public void invoke(@NotNull final Project project, DataSourceManager dataSourceManager = DataSourceManager.getInstance(project); - String dlftDataSourceId = MybatisSetting.getInstance().getDlftDataSourceId(); + String dlftDataSourceId = MybatisSetting.getInstance().getDefaultDataSourceId(); DataSource defaultDataSource = dataSourceManager.getDataSourceByID(dlftDataSourceId); final UiComponentFacade uiFacade = UiComponentFacade.getInstance(project); if (defaultDataSource == null) { @@ -70,7 +70,7 @@ private void selectDataSourceAndGenerate(final GroupFour domElement, dataSourceManager.getDataSources(), new ListSelectionItemListener() { @Override public void apply(DataSource dataSource) { - MybatisSetting.getInstance().setDlftDataSourceId(dataSource.getUniqueId()); + MybatisSetting.getInstance().setDefaultDataSourceId(dataSource.getUniqueId()); selectTableAndGenerate(uiFacade, dataSource.getTables(), domElement); } }, new Function() { diff --git a/src/com/seventh7/mybatis/setting/MybatisConfigurable.java b/src/com/seventh7/mybatis/setting/MybatisConfigurable.java index afaf61d..6d7c939 100644 --- a/src/com/seventh7/mybatis/setting/MybatisConfigurable.java +++ b/src/com/seventh7/mybatis/setting/MybatisConfigurable.java @@ -36,8 +36,6 @@ public class MybatisConfigurable implements SearchableConfigurable { private Joiner joiner = Joiner.on(separator); - private boolean clearDefaultDataSource = false; - public MybatisConfigurable() { mybatisSetting = MybatisSetting.getInstance(); } @@ -72,8 +70,7 @@ public JComponent createComponent() { } this.mybatisSettingForm.clearDefaultDataSourceButton.addActionListener(new AbstractAction() { @Override public void actionPerformed(ActionEvent e) { - mybatisSetting.setDlftDataSourceId(""); - clearDefaultDataSource = true; + mybatisSetting.setDefaultDataSourceId(""); Messages.showInfoMessage("Action done", "Tip"); } }); @@ -86,8 +83,7 @@ public boolean isModified() { || !joiner.join(INSERT_GENERATOR.getPatterns()).equals(mybatisSettingForm.insertPatternTextField.getText()) || !joiner.join(DELETE_GENERATOR.getPatterns()).equals(mybatisSettingForm.deletePatternTextField.getText()) || !joiner.join(UPDATE_GENERATOR.getPatterns()).equals(mybatisSettingForm.updatePatternTextField.getText()) - || !joiner.join(SELECT_GENERATOR.getPatterns()).equals(mybatisSettingForm.selectPatternTextField.getText())) - && !clearDefaultDataSource; + || !joiner.join(SELECT_GENERATOR.getPatterns()).equals(mybatisSettingForm.selectPatternTextField.getText())); } @Override diff --git a/src/com/seventh7/mybatis/setting/MybatisSetting.java b/src/com/seventh7/mybatis/setting/MybatisSetting.java index 34075d7..dbf48c1 100644 --- a/src/com/seventh7/mybatis/setting/MybatisSetting.java +++ b/src/com/seventh7/mybatis/setting/MybatisSetting.java @@ -29,14 +29,14 @@ storages = @Storage(id = "other", file = "$APP_CONFIG$/mybatis.xml")) public class MybatisSetting implements PersistentStateComponent { - private GenerateModel statementGenerateModel; + private static final String STATEMENT_GENERATE_MODEL_SETTING_ID = "StatementGenerateModel"; + private static final String DEFAULT_SOURCE_SETTING_ID = "DefaultDataSourceId"; + private static final Type SETTING_TYPE_TOKEN = new TypeToken>() {}.getType(); + private GenerateModel statementGenerateModel; + private String defaultDataSourceId = ""; private Gson gson = new Gson(); - private Type gsonTypeToken = new TypeToken>() {}.getType(); - - private String dlftDataSourceId = ""; - public MybatisSetting() { statementGenerateModel = GenerateModel.START_WITH_MODEL; } @@ -52,8 +52,8 @@ public Element getState() { element.setAttribute(DELETE_GENERATOR.getId(), gson.toJson(DELETE_GENERATOR.getPatterns())); element.setAttribute(UPDATE_GENERATOR.getId(), gson.toJson(UPDATE_GENERATOR.getPatterns())); element.setAttribute(SELECT_GENERATOR.getId(), gson.toJson(SELECT_GENERATOR.getPatterns())); - element.setAttribute("statementGenerateModel", String.valueOf(statementGenerateModel.getIdentifier())); - element.setAttribute("DefaultDataSourceId", dlftDataSourceId); + element.setAttribute(STATEMENT_GENERATE_MODEL_SETTING_ID, String.valueOf(statementGenerateModel.getIdentifier())); + element.setAttribute(DEFAULT_SOURCE_SETTING_ID, defaultDataSourceId); return element; } @@ -63,22 +63,23 @@ public void loadState(Element state) { loadState(state, DELETE_GENERATOR); loadState(state, UPDATE_GENERATOR); loadState(state, SELECT_GENERATOR); - statementGenerateModel = GenerateModel.getInstance(state.getAttributeValue("statementGenerateModel")); - this.dlftDataSourceId = state.getAttributeValue("DefaultDataSourceId"); + final String model = state.getAttributeValue(STATEMENT_GENERATE_MODEL_SETTING_ID); + statementGenerateModel = GenerateModel.getInstance(model); + this.defaultDataSourceId = state.getAttributeValue(DEFAULT_SOURCE_SETTING_ID); } - public String getDlftDataSourceId() { - return dlftDataSourceId; + public String getDefaultDataSourceId() { + return defaultDataSourceId; } - public void setDlftDataSourceId(String dlftDataSourceId) { - this.dlftDataSourceId = dlftDataSourceId; + public void setDefaultDataSourceId(String defaultDataSourceId) { + this.defaultDataSourceId = defaultDataSourceId; } private void loadState(Element state, StatementGenerator generator) { String attribute = state.getAttributeValue(generator.getId()); if (null != attribute) { - generator.setPatterns((Set) gson.fromJson(attribute, gsonTypeToken)); + generator.setPatterns((Set) gson.fromJson(attribute, SETTING_TYPE_TOKEN)); } } From de42bb07c80705b1b38e3f0387d3630cd783f7ff Mon Sep 17 00:00:00 2001 From: Yanglin Date: Thu, 26 Dec 2013 09:44:38 +0800 Subject: [PATCH 21/85] Rebuild mapper model --- META-INF/plugin.xml | 8 ++-- .../contributor/TestParamContributor.java | 20 ++++---- .../converter/CacheRefNamespaceConverter.java | 46 +++++++++++++++++++ .../dom/converter/JdbcTypeConverter.java | 13 +----- .../dom/converter/PlainTextConverter.java | 22 +++++++++ ...r.java => ReferenceToSelectConverter.java} | 2 +- .../dom/converter/ResultSetTypeConverter.java | 24 ++++++++++ .../dom/converter/StatementTypeConverter.java | 24 ++++++++++ src/com/seventh7/mybatis/dom/model/Arg.java | 2 +- .../mybatis/dom/model/Association.java | 14 +----- src/com/seventh7/mybatis/dom/model/Cache.java | 40 ++++++++++++++++ .../seventh7/mybatis/dom/model/CacheRef.java | 12 +++++ src/com/seventh7/mybatis/dom/model/Case.java | 15 +++++- .../mybatis/dom/model/Collection.java | 2 +- .../mybatis/dom/model/Discriminator.java | 3 +- .../seventh7/mybatis/dom/model/Foreach.java | 26 +++++++++++ .../seventh7/mybatis/dom/model/GroupTwo.java | 4 +- src/com/seventh7/mybatis/dom/model/IdArg.java | 2 +- .../mybatis/dom/model/JavaTypeGroup.java | 22 +++++++++ .../seventh7/mybatis/dom/model/JdbcGroup.java | 22 +++++++++ .../seventh7/mybatis/dom/model/LangGroup.java | 36 +++++++++++++++ .../seventh7/mybatis/dom/model/Mapper.java | 8 ++++ .../mybatis/dom/model/PropertyGroup.java | 11 +---- ...Group.java => ReferenceToSelectGroup.java} | 6 +-- .../mybatis/dom/model/ResultTypeGroup.java | 22 +++++++++ .../seventh7/mybatis/dom/model/Select.java | 14 +----- .../seventh7/mybatis/dom/model/SelectKey.java | 2 +- src/com/seventh7/mybatis/dom/model/Sql.java | 2 +- 28 files changed, 352 insertions(+), 72 deletions(-) create mode 100644 src/com/seventh7/mybatis/dom/converter/CacheRefNamespaceConverter.java create mode 100644 src/com/seventh7/mybatis/dom/converter/PlainTextConverter.java rename src/com/seventh7/mybatis/dom/converter/{AccordingToSelectConverter.java => ReferenceToSelectConverter.java} (88%) create mode 100644 src/com/seventh7/mybatis/dom/converter/ResultSetTypeConverter.java create mode 100644 src/com/seventh7/mybatis/dom/converter/StatementTypeConverter.java create mode 100644 src/com/seventh7/mybatis/dom/model/JavaTypeGroup.java create mode 100644 src/com/seventh7/mybatis/dom/model/JdbcGroup.java create mode 100644 src/com/seventh7/mybatis/dom/model/LangGroup.java rename src/com/seventh7/mybatis/dom/model/{AccordingToSelectGroup.java => ReferenceToSelectGroup.java} (72%) create mode 100644 src/com/seventh7/mybatis/dom/model/ResultTypeGroup.java diff --git a/META-INF/plugin.xml b/META-INF/plugin.xml index 7ed6836..e22a212 100644 --- a/META-INF/plugin.xml +++ b/META-INF/plugin.xml @@ -1,7 +1,7 @@ com.seventh7.plugin.mybatis MyBatis plugin - 2.111 + 2.2 Yanglin 2.111 +

                  2.2

                    +
                  • Rebuild mapper model
                  • +
                  • Support more completion popup
                  • Support switching between java type and alias in mapper xml using intention keystroke
                  • Support generating properties for elements of result map using intention keystroke[DataSource of intellij is required]
                  • Support completion of jdbc type in mapper xml
                  • -
                  • Support completion of according to select statement in mapper xml
                  • +
                  • Support completion of referencing to select statement in mapper xml

                  2.01

                    diff --git a/src/com/seventh7/mybatis/contributor/TestParamContributor.java b/src/com/seventh7/mybatis/contributor/TestParamContributor.java index 688eed2..2a492c8 100644 --- a/src/com/seventh7/mybatis/contributor/TestParamContributor.java +++ b/src/com/seventh7/mybatis/contributor/TestParamContributor.java @@ -52,15 +52,19 @@ public class TestParamContributor extends CompletionContributor { @SuppressWarnings("unchecked") public TestParamContributor() { + final CompletionProvider provider = new CompletionProvider() { + @Override + protected void addCompletions(@NotNull CompletionParameters parameters, + ProcessingContext context, + @NotNull CompletionResultSet result) { + PsiElement position = parameters.getPosition(); + addElementForPsiParameter(position.getProject(), result, MapperUtils.findParentIdDomElement(position).orNull()); + } + }; + extend(CompletionType.BASIC, + XmlPatterns.psiElement().inside(XmlPatterns.xmlAttributeValue().inside(XmlPatterns.xmlAttribute().withName("test"))), provider); extend(CompletionType.BASIC, - XmlPatterns.psiElement().inside(XmlPatterns.xmlAttributeValue().inside(XmlPatterns.xmlAttribute().withName("test"))), - new CompletionProvider() { - @Override - protected void addCompletions(@NotNull CompletionParameters parameters, ProcessingContext context, @NotNull CompletionResultSet result) { - PsiElement position = parameters.getPosition(); - addElementForPsiParameter(position.getProject(), result, MapperUtils.findParentIdDomElement(position).orNull()); - } - }); + XmlPatterns.psiElement().inside(XmlPatterns.xmlAttributeValue().inside(XmlPatterns.xmlAttribute().withName("item"))), provider); } public static void addElementForPsiParameter(@NotNull Project project, @NotNull CompletionResultSet result, @Nullable IdDomElement element) { diff --git a/src/com/seventh7/mybatis/dom/converter/CacheRefNamespaceConverter.java b/src/com/seventh7/mybatis/dom/converter/CacheRefNamespaceConverter.java new file mode 100644 index 0000000..adfd1a1 --- /dev/null +++ b/src/com/seventh7/mybatis/dom/converter/CacheRefNamespaceConverter.java @@ -0,0 +1,46 @@ +package com.seventh7.mybatis.dom.converter; + +import com.google.common.base.Function; +import com.google.common.collect.Collections2; + +import com.intellij.openapi.project.Project; +import com.intellij.psi.PsiClass; +import com.intellij.util.xml.ConvertContext; +import com.seventh7.mybatis.dom.model.Mapper; +import com.seventh7.mybatis.util.JavaUtils; +import com.seventh7.mybatis.util.MapperUtils; + +import org.jetbrains.annotations.NonNls; +import org.jetbrains.annotations.NotNull; +import org.jetbrains.annotations.Nullable; + +import java.util.Collection; + +/** + * @author yanglin + */ +public class CacheRefNamespaceConverter extends ConverterAdaptor { + + @NotNull @Override + public Collection getVariants(ConvertContext context) { + final Project project = context.getProject(); + final Collection mappers = MapperUtils.findMappers(project); + return Collections2.transform(mappers, new Function() { + @Override + public PsiClass apply(Mapper input) { + return JavaUtils.findClazz(project, input.getNamespace().getStringValue()).orNull(); + } + }); + } + + @Nullable @Override + public String toString(@Nullable PsiClass psiClass, ConvertContext context) { + return psiClass == null ? null : psiClass.getQualifiedName(); + } + + @Nullable @Override + public PsiClass fromString(@Nullable @NonNls String s, ConvertContext context) { + return JavaUtils.findClazz(context.getProject(), s).orNull(); + } + +} diff --git a/src/com/seventh7/mybatis/dom/converter/JdbcTypeConverter.java b/src/com/seventh7/mybatis/dom/converter/JdbcTypeConverter.java index 7bc1443..7ccf05c 100644 --- a/src/com/seventh7/mybatis/dom/converter/JdbcTypeConverter.java +++ b/src/com/seventh7/mybatis/dom/converter/JdbcTypeConverter.java @@ -5,9 +5,7 @@ import com.intellij.javaee.dataSource.SQLUtil; import com.intellij.util.xml.ConvertContext; -import org.jetbrains.annotations.NonNls; import org.jetbrains.annotations.NotNull; -import org.jetbrains.annotations.Nullable; import java.sql.Types; import java.util.Collection; @@ -16,7 +14,7 @@ /** * @author yanglin */ -public class JdbcTypeConverter extends ConverterAdaptor { +public class JdbcTypeConverter extends PlainTextConverter { private static final Set TYPE_NAMES = Sets.newHashSet(); @@ -42,13 +40,4 @@ public Collection getVariants(ConvertContext context) { return TYPE_NAMES; } - @Nullable @Override - public String toString(@Nullable String s, ConvertContext context) { - return s; - } - - @Nullable @Override - public String fromString(@Nullable @NonNls String s, ConvertContext context) { - return s; - } } diff --git a/src/com/seventh7/mybatis/dom/converter/PlainTextConverter.java b/src/com/seventh7/mybatis/dom/converter/PlainTextConverter.java new file mode 100644 index 0000000..2106ed9 --- /dev/null +++ b/src/com/seventh7/mybatis/dom/converter/PlainTextConverter.java @@ -0,0 +1,22 @@ +package com.seventh7.mybatis.dom.converter; + +import com.intellij.util.xml.ConvertContext; + +import org.jetbrains.annotations.NonNls; +import org.jetbrains.annotations.Nullable; + +/** + * @author yanglin + */ +public abstract class PlainTextConverter extends ConverterAdaptor { + + @Nullable @Override + public String toString(@Nullable String s, ConvertContext context) { + return s; + } + + @Nullable @Override + public String fromString(@Nullable @NonNls String s, ConvertContext context) { + return s; + } +} diff --git a/src/com/seventh7/mybatis/dom/converter/AccordingToSelectConverter.java b/src/com/seventh7/mybatis/dom/converter/ReferenceToSelectConverter.java similarity index 88% rename from src/com/seventh7/mybatis/dom/converter/AccordingToSelectConverter.java rename to src/com/seventh7/mybatis/dom/converter/ReferenceToSelectConverter.java index 7729edc..1e39c88 100644 --- a/src/com/seventh7/mybatis/dom/converter/AccordingToSelectConverter.java +++ b/src/com/seventh7/mybatis/dom/converter/ReferenceToSelectConverter.java @@ -12,7 +12,7 @@ /** * @author yanglin */ -public class AccordingToSelectConverter extends IdBasedTagConverter { +public class ReferenceToSelectConverter extends IdBasedTagConverter { @NotNull @Override public Collection getComparisons(@Nullable Mapper mapper, ConvertContext context) { diff --git a/src/com/seventh7/mybatis/dom/converter/ResultSetTypeConverter.java b/src/com/seventh7/mybatis/dom/converter/ResultSetTypeConverter.java new file mode 100644 index 0000000..1bc0f89 --- /dev/null +++ b/src/com/seventh7/mybatis/dom/converter/ResultSetTypeConverter.java @@ -0,0 +1,24 @@ +package com.seventh7.mybatis.dom.converter; + +import com.google.common.collect.ImmutableSet; + +import com.intellij.util.xml.ConvertContext; + +import org.jetbrains.annotations.NotNull; + +import java.util.Collection; +import java.util.Set; + +/** + * @author yanglin + */ +public class ResultSetTypeConverter extends PlainTextConverter { + + private static final Set TYPES = ImmutableSet.of("FORWARD_ONLY", "SCROLL_SENSITIVE", "SCROLL_INSENSITIVE"); + + @NotNull @Override + public Collection getVariants(ConvertContext context) { + return TYPES; + } + +} diff --git a/src/com/seventh7/mybatis/dom/converter/StatementTypeConverter.java b/src/com/seventh7/mybatis/dom/converter/StatementTypeConverter.java new file mode 100644 index 0000000..bc58697 --- /dev/null +++ b/src/com/seventh7/mybatis/dom/converter/StatementTypeConverter.java @@ -0,0 +1,24 @@ +package com.seventh7.mybatis.dom.converter; + +import com.google.common.collect.ImmutableSet; + +import com.intellij.util.xml.ConvertContext; + +import org.jetbrains.annotations.NotNull; + +import java.util.Collection; +import java.util.Set; + +/** + * @author yanglin + */ +public class StatementTypeConverter extends PlainTextConverter { + + private static final Set TYPES = ImmutableSet.of("STATEMENT", "PREPARED", "CALLABLE"); + + @NotNull @Override + public Collection getVariants(ConvertContext context) { + return TYPES; + } + +} diff --git a/src/com/seventh7/mybatis/dom/model/Arg.java b/src/com/seventh7/mybatis/dom/model/Arg.java index a9e6d9c..456af38 100644 --- a/src/com/seventh7/mybatis/dom/model/Arg.java +++ b/src/com/seventh7/mybatis/dom/model/Arg.java @@ -3,6 +3,6 @@ /** * @author yanglin */ -public interface Arg extends AccordingToSelectGroup { +public interface Arg extends ReferenceToSelectGroup, JavaTypeGroup, JdbcGroup, ResultMapGroup { } diff --git a/src/com/seventh7/mybatis/dom/model/Association.java b/src/com/seventh7/mybatis/dom/model/Association.java index 79ccf81..861b87d 100644 --- a/src/com/seventh7/mybatis/dom/model/Association.java +++ b/src/com/seventh7/mybatis/dom/model/Association.java @@ -1,20 +1,8 @@ package com.seventh7.mybatis.dom.model; -import com.intellij.psi.PsiClass; -import com.intellij.util.xml.Attribute; -import com.intellij.util.xml.Convert; -import com.intellij.util.xml.GenericAttributeValue; -import com.seventh7.mybatis.dom.converter.AliasConverter; - -import org.jetbrains.annotations.NotNull; - /** * @author yanglin */ -public interface Association extends GroupFour, ResultMapGroup, PropertyGroup, AccordingToSelectGroup { +public interface Association extends GroupFour, ResultMapGroup, PropertyGroup, ReferenceToSelectGroup, JavaTypeGroup { - @NotNull - @Attribute("javaType") - @Convert(AliasConverter.class) - public GenericAttributeValue getJavaType(); } diff --git a/src/com/seventh7/mybatis/dom/model/Cache.java b/src/com/seventh7/mybatis/dom/model/Cache.java index bf687b0..a29172c 100644 --- a/src/com/seventh7/mybatis/dom/model/Cache.java +++ b/src/com/seventh7/mybatis/dom/model/Cache.java @@ -1,7 +1,16 @@ package com.seventh7.mybatis.dom.model; +import com.google.common.collect.ImmutableSet; + +import com.intellij.util.xml.Attribute; +import com.intellij.util.xml.Convert; +import com.intellij.util.xml.ConvertContext; import com.intellij.util.xml.DomElement; +import com.intellij.util.xml.GenericAttributeValue; import com.intellij.util.xml.SubTagList; +import com.seventh7.mybatis.dom.converter.PlainTextConverter; + +import org.jetbrains.annotations.NotNull; import java.util.List; @@ -13,4 +22,35 @@ public interface Cache extends DomElement { @SubTagList("property") public List getProperties(); + @NotNull + @Attribute("eviction") + @Convert(CacheEvictionConverter.class) + public GenericAttributeValue getEviction(); + + @NotNull + @Attribute("readOnly") + @Convert(ReadOnlyConverter.class) + public GenericAttributeValue getReadOnly(); + + public static class CacheEvictionConverter extends PlainTextConverter{ + + private static final java.util.Set EVICTIONS = ImmutableSet.of("LRU", "FIFO", "SOFT", "WEAK"); + + @NotNull @Override + public java.util.Collection getVariants(ConvertContext context) { + return EVICTIONS; + } + + } + + public static class ReadOnlyConverter extends PlainTextConverter { + + private static final java.util.Set RESULTS = ImmutableSet.of("true", "false"); + + @NotNull + @Override + public java.util.Collection getVariants(ConvertContext context) { + return RESULTS; + } + } } diff --git a/src/com/seventh7/mybatis/dom/model/CacheRef.java b/src/com/seventh7/mybatis/dom/model/CacheRef.java index 1a4d5c3..3e23614 100644 --- a/src/com/seventh7/mybatis/dom/model/CacheRef.java +++ b/src/com/seventh7/mybatis/dom/model/CacheRef.java @@ -1,10 +1,22 @@ package com.seventh7.mybatis.dom.model; +import com.intellij.psi.PsiClass; +import com.intellij.util.xml.Attribute; +import com.intellij.util.xml.Convert; import com.intellij.util.xml.DomElement; +import com.intellij.util.xml.GenericAttributeValue; +import com.seventh7.mybatis.dom.converter.CacheRefNamespaceConverter; + +import org.jetbrains.annotations.NotNull; /** * @author yanglin */ public interface CacheRef extends DomElement { + @NotNull + @Attribute("namespace") + @Convert(CacheRefNamespaceConverter.class) + public GenericAttributeValue getNamespace(); + } diff --git a/src/com/seventh7/mybatis/dom/model/Case.java b/src/com/seventh7/mybatis/dom/model/Case.java index eb1e61f..7654015 100644 --- a/src/com/seventh7/mybatis/dom/model/Case.java +++ b/src/com/seventh7/mybatis/dom/model/Case.java @@ -1,8 +1,21 @@ package com.seventh7.mybatis.dom.model; +import com.intellij.psi.xml.XmlAttributeValue; +import com.intellij.util.xml.Attribute; +import com.intellij.util.xml.Convert; +import com.intellij.util.xml.GenericAttributeValue; +import com.seventh7.mybatis.dom.converter.ResultMapConverter; + +import org.jetbrains.annotations.NotNull; + /** * @author yanglin */ -public interface Case extends GroupFour{ +public interface Case extends GroupFour, ResultTypeGroup{ + + @NotNull + @Attribute("resultMap") + @Convert(ResultMapConverter.class) + public GenericAttributeValue getResultMap(); } diff --git a/src/com/seventh7/mybatis/dom/model/Collection.java b/src/com/seventh7/mybatis/dom/model/Collection.java index 0bc63fd..3a67158 100644 --- a/src/com/seventh7/mybatis/dom/model/Collection.java +++ b/src/com/seventh7/mybatis/dom/model/Collection.java @@ -11,7 +11,7 @@ /** * @author yanglin */ -public interface Collection extends GroupFour, ResultMapGroup, PropertyGroup, AccordingToSelectGroup { +public interface Collection extends Association { @NotNull @Attribute("ofType") diff --git a/src/com/seventh7/mybatis/dom/model/Discriminator.java b/src/com/seventh7/mybatis/dom/model/Discriminator.java index cd7b1a3..71c4441 100644 --- a/src/com/seventh7/mybatis/dom/model/Discriminator.java +++ b/src/com/seventh7/mybatis/dom/model/Discriminator.java @@ -1,6 +1,5 @@ package com.seventh7.mybatis.dom.model; -import com.intellij.util.xml.DomElement; import com.intellij.util.xml.Required; import com.intellij.util.xml.SubTagList; @@ -9,7 +8,7 @@ /** * @author yanglin */ -public interface Discriminator extends DomElement { +public interface Discriminator extends JavaTypeGroup, JdbcGroup { @Required @SubTagList("case") diff --git a/src/com/seventh7/mybatis/dom/model/Foreach.java b/src/com/seventh7/mybatis/dom/model/Foreach.java index 564c974..b6d1124 100644 --- a/src/com/seventh7/mybatis/dom/model/Foreach.java +++ b/src/com/seventh7/mybatis/dom/model/Foreach.java @@ -1,8 +1,34 @@ package com.seventh7.mybatis.dom.model; +import com.google.common.collect.ImmutableSet; + +import com.intellij.util.xml.Attribute; +import com.intellij.util.xml.Convert; +import com.intellij.util.xml.ConvertContext; +import com.intellij.util.xml.GenericAttributeValue; +import com.seventh7.mybatis.dom.converter.PlainTextConverter; + +import org.jetbrains.annotations.NotNull; + +import java.util.Collection; + /** * @author yanglin */ public interface Foreach extends GroupOne { + @NotNull + @Attribute("collection") + @Convert(ForEachCollectionConverter.class) + public GenericAttributeValue getCollection(); + + public static class ForEachCollectionConverter extends PlainTextConverter { + + private static final java.util.Set TYPES_KNOWN = ImmutableSet.of("list", "array"); + + @NotNull @Override + public Collection getVariants(ConvertContext context) { + return TYPES_KNOWN; + } + } } diff --git a/src/com/seventh7/mybatis/dom/model/GroupTwo.java b/src/com/seventh7/mybatis/dom/model/GroupTwo.java index e971f64..0a00df2 100644 --- a/src/com/seventh7/mybatis/dom/model/GroupTwo.java +++ b/src/com/seventh7/mybatis/dom/model/GroupTwo.java @@ -5,7 +5,6 @@ import com.intellij.util.xml.Attribute; import com.intellij.util.xml.Convert; import com.intellij.util.xml.GenericAttributeValue; -import com.intellij.util.xml.Required; import com.intellij.util.xml.SubTagList; import com.seventh7.mybatis.dom.converter.AliasConverter; import com.seventh7.mybatis.dom.converter.DaoMethodConverter; @@ -18,7 +17,7 @@ /** * @author yanglin */ -public interface GroupTwo extends GroupOne, IdDomElement{ +public interface GroupTwo extends GroupOne, IdDomElement, LangGroup{ @SubTagList("bind") public List getBinds(); @@ -36,4 +35,5 @@ public interface GroupTwo extends GroupOne, IdDomElement{ @Attribute("parameterType") @Convert(AliasConverter.class) public GenericAttributeValue getParameterType(); + } diff --git a/src/com/seventh7/mybatis/dom/model/IdArg.java b/src/com/seventh7/mybatis/dom/model/IdArg.java index 4c13e9e..a2344c8 100644 --- a/src/com/seventh7/mybatis/dom/model/IdArg.java +++ b/src/com/seventh7/mybatis/dom/model/IdArg.java @@ -3,6 +3,6 @@ /** * @author yanglin */ -public interface IdArg extends AccordingToSelectGroup { +public interface IdArg extends Arg { } diff --git a/src/com/seventh7/mybatis/dom/model/JavaTypeGroup.java b/src/com/seventh7/mybatis/dom/model/JavaTypeGroup.java new file mode 100644 index 0000000..7898850 --- /dev/null +++ b/src/com/seventh7/mybatis/dom/model/JavaTypeGroup.java @@ -0,0 +1,22 @@ +package com.seventh7.mybatis.dom.model; + +import com.intellij.psi.PsiClass; +import com.intellij.util.xml.Attribute; +import com.intellij.util.xml.Convert; +import com.intellij.util.xml.DomElement; +import com.intellij.util.xml.GenericAttributeValue; +import com.seventh7.mybatis.dom.converter.AliasConverter; + +import org.jetbrains.annotations.NotNull; + +/** + * @author yanglin + */ +public interface JavaTypeGroup extends DomElement { + + @NotNull + @Attribute("javaType") + @Convert(AliasConverter.class) + public GenericAttributeValue getJavaType(); + +} diff --git a/src/com/seventh7/mybatis/dom/model/JdbcGroup.java b/src/com/seventh7/mybatis/dom/model/JdbcGroup.java new file mode 100644 index 0000000..b288f49 --- /dev/null +++ b/src/com/seventh7/mybatis/dom/model/JdbcGroup.java @@ -0,0 +1,22 @@ +package com.seventh7.mybatis.dom.model; + +import com.intellij.psi.PsiClass; +import com.intellij.util.xml.Attribute; +import com.intellij.util.xml.Convert; +import com.intellij.util.xml.DomElement; +import com.intellij.util.xml.GenericAttributeValue; +import com.seventh7.mybatis.dom.converter.JdbcTypeConverter; + +import org.jetbrains.annotations.NotNull; + +/** + * @author yanglin + */ +public interface JdbcGroup extends DomElement { + + @NotNull + @Attribute("jdbcType") + @Convert(JdbcTypeConverter.class) + public GenericAttributeValue getJdbcType(); + +} diff --git a/src/com/seventh7/mybatis/dom/model/LangGroup.java b/src/com/seventh7/mybatis/dom/model/LangGroup.java new file mode 100644 index 0000000..380e791 --- /dev/null +++ b/src/com/seventh7/mybatis/dom/model/LangGroup.java @@ -0,0 +1,36 @@ +package com.seventh7.mybatis.dom.model; + +import com.google.common.collect.ImmutableSet; + +import com.intellij.util.xml.Attribute; +import com.intellij.util.xml.Convert; +import com.intellij.util.xml.ConvertContext; +import com.intellij.util.xml.DomElement; +import com.intellij.util.xml.GenericAttributeValue; +import com.seventh7.mybatis.dom.converter.PlainTextConverter; + +import org.jetbrains.annotations.NotNull; + +import java.util.Collection; + +/** + * @author yanglin + */ +public interface LangGroup extends DomElement { + + @NotNull + @Attribute("lang") + @Convert(LangConverter.class) + public GenericAttributeValue getLang(); + + public static class LangConverter extends PlainTextConverter { + + private static final java.util.Set RAW_KNOWN = ImmutableSet.of("xml", "raw"); + + @NotNull @Override + public Collection getVariants(ConvertContext context) { + return RAW_KNOWN; + } + + } +} diff --git a/src/com/seventh7/mybatis/dom/model/Mapper.java b/src/com/seventh7/mybatis/dom/model/Mapper.java index e1a3e10..ff84cbe 100644 --- a/src/com/seventh7/mybatis/dom/model/Mapper.java +++ b/src/com/seventh7/mybatis/dom/model/Mapper.java @@ -55,6 +55,14 @@ public interface Mapper extends DomElement { @SubTagList("select") public List