1 package com
.intellij
.util
.xml
.actions
.generate
;
3 import com
.intellij
.openapi
.editor
.Editor
;
4 import com
.intellij
.openapi
.project
.Project
;
5 import com
.intellij
.openapi
.util
.text
.StringUtil
;
6 import com
.intellij
.psi
.PsiFile
;
7 import com
.intellij
.psi
.codeStyle
.NameUtil
;
8 import com
.intellij
.util
.xml
.DomElement
;
9 import com
.intellij
.util
.xml
.DomElementNavigationProvider
;
10 import org
.jetbrains
.annotations
.Nullable
;
12 import java
.util
.Arrays
;
14 public abstract class AbstractDomGenerateProvider
<T
extends DomElement
> extends DefaultGenerateElementProvider
<T
> {
16 @Nullable private final String myMappingId
;
18 public AbstractDomGenerateProvider(final String description
, final Class
<T
> aClass
) {
19 this(description
, aClass
, null);
22 public AbstractDomGenerateProvider(final String description
, final Class
<T
> aClass
, String mappingId
) {
23 super(description
, aClass
);
24 myMappingId
= mappingId
;
27 public T
generate(final Project project
, final Editor editor
, final PsiFile file
) {
28 final T t
= super.generate(project
, editor
, file
);
30 runTemplate(editor
, file
, t
);
35 protected void runTemplate(final Editor editor
, final PsiFile file
, final T t
) {
36 DomTemplateRunner
.getInstance(file
.getProject()).runTemplate(t
, myMappingId
, editor
);
39 protected abstract DomElement
getParentDomElement(final Project project
, final Editor editor
, final PsiFile file
);
41 protected void doNavigate(final DomElementNavigationProvider navigateProvider
, final DomElement copy
) {
42 final DomElement element
= getElementToNavigate((T
)copy
);
43 if (element
!= null) {
44 super.doNavigate(navigateProvider
, element
);
49 protected DomElement
getElementToNavigate(final T t
) {
53 protected static String
getDescription(final Class
<?
extends DomElement
> aClass
) {
54 return StringUtil
.join(Arrays
.asList(NameUtil
.nameToWords(aClass
.getSimpleName())), " ");