replaced <code></code> with more concise {@code}
[idea/community.git] / platform / platform-api / src / com / intellij / openapi / actionSystem / ActionStub.java
1 /*
2  * Copyright 2000-2009 JetBrains s.r.o.
3  *
4  * Licensed under the Apache License, Version 2.0 (the "License");
5  * you may not use this file except in compliance with the License.
6  * You may obtain a copy of the License at
7  *
8  * http://www.apache.org/licenses/LICENSE-2.0
9  *
10  * Unless required by applicable law or agreed to in writing, software
11  * distributed under the License is distributed on an "AS IS" BASIS,
12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13  * See the License for the specific language governing permissions and
14  * limitations under the License.
15  */
16 package com.intellij.openapi.actionSystem;
17
18 import com.intellij.openapi.diagnostic.Logger;
19 import com.intellij.openapi.extensions.PluginId;
20 import org.jetbrains.annotations.NotNull;
21
22 /**
23  * The main (and single) purpose of this class is provide lazy initialization
24  * of the actions. ClassLoader eats a lot of time on startup to load the actions' classes.
25  *
26  * @author Vladimir Kondratyev
27  */
28 public class ActionStub extends AnAction{
29   private static final Logger LOG=Logger.getInstance("#com.intellij.openapi.actionSystem.ActionStub");
30
31   private final String myClassName;
32   private final String myProjectType;
33   private final String myId;
34   private final String myText;
35   private final ClassLoader myLoader;
36   private final PluginId myPluginId;
37   private final String myIconPath;
38
39   public ActionStub(@NotNull String actionClass,
40                     @NotNull String id,
41                     @NotNull String text,
42                     ClassLoader loader,
43                     PluginId pluginId,
44                     String iconPath, String projectType) {
45     myLoader = loader;
46     myClassName=actionClass;
47     myProjectType = projectType;
48     LOG.assertTrue(!id.isEmpty());
49     myId=id;
50     myText=text;
51     myPluginId = pluginId;
52     myIconPath = iconPath;
53   }
54
55   @NotNull
56   public String getClassName(){
57     return myClassName;
58   }
59
60   @NotNull
61   public String getId(){
62     return myId;
63   }
64
65   @NotNull
66   public String getText(){
67     return myText;
68   }
69
70   public ClassLoader getLoader() {
71     return myLoader;
72   }
73
74   public PluginId getPluginId() {
75     return myPluginId;
76   }
77
78   public String getIconPath() {
79     return myIconPath;
80   }
81
82   @Override
83   public void actionPerformed(AnActionEvent e){
84     throw new UnsupportedOperationException();
85   }
86
87   /**
88    * Copies template presentation and shortcuts set to {@code targetAction}.
89    *
90    * @param targetAction cannot be {@code null}
91    */
92   public final void initAction(@NotNull AnAction targetAction) {
93     Presentation sourcePresentation = getTemplatePresentation();
94     Presentation targetPresentation = targetAction.getTemplatePresentation();
95     if (targetPresentation.getIcon() == null && sourcePresentation.getIcon() != null) {
96       targetPresentation.setIcon(sourcePresentation.getIcon());
97     }
98     if (targetPresentation.getText() == null && sourcePresentation.getText() != null) {
99       targetPresentation.setText(sourcePresentation.getText());
100     }
101     if (targetPresentation.getDescription() == null && sourcePresentation.getDescription() != null) {
102       targetPresentation.setDescription(sourcePresentation.getDescription());
103     }
104     targetAction.setShortcutSet(getShortcutSet());
105     targetAction.markAsGlobal();
106   }
107
108   public String getProjectType() {
109     return myProjectType;
110   }
111 }