View Javadoc

1   /*
2    * Copyright 2004-2008 the Seasar Foundation and the Others.
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, 
13   * either express or implied. See the License for the specific language
14   * governing permissions and limitations under the License.
15   */
16  package org.seasar.uruma.debug.action;
17  
18  import java.lang.reflect.Field;
19  import java.util.Date;
20  import java.util.Dictionary;
21  import java.util.Enumeration;
22  import java.util.List;
23  
24  import org.eclipse.jface.action.MenuManager;
25  import org.eclipse.jface.viewers.StructuredViewer;
26  import org.eclipse.swt.browser.Browser;
27  import org.eclipse.swt.widgets.Control;
28  import org.eclipse.swt.widgets.Widget;
29  import org.osgi.framework.Bundle;
30  import org.seasar.framework.beans.BeanDesc;
31  import org.seasar.framework.beans.PropertyDesc;
32  import org.seasar.framework.beans.factory.BeanDescFactory;
33  import org.seasar.uruma.annotation.EventListener;
34  import org.seasar.uruma.annotation.EventListenerType;
35  import org.seasar.uruma.annotation.ExportValue;
36  import org.seasar.uruma.annotation.InitializeMethod;
37  import org.seasar.uruma.binding.context.ApplicationContextDef;
38  import org.seasar.uruma.binding.enables.EnablesDependingDef;
39  import org.seasar.uruma.binding.method.EventListenerDef;
40  import org.seasar.uruma.binding.method.GenericAction;
41  import org.seasar.uruma.binding.value.BindingCommand;
42  import org.seasar.uruma.binding.value.command.ExportSelectionCommand;
43  import org.seasar.uruma.binding.value.command.ExportValueCommand;
44  import org.seasar.uruma.binding.value.command.ImportSelectionCommand;
45  import org.seasar.uruma.binding.value.command.ImportValueCommand;
46  import org.seasar.uruma.component.Template;
47  import org.seasar.uruma.component.UIComponent;
48  import org.seasar.uruma.component.UIComponentContainer;
49  import org.seasar.uruma.component.UIElement;
50  import org.seasar.uruma.component.jface.MenuComponent;
51  import org.seasar.uruma.component.jface.MenuItemComponent;
52  import org.seasar.uruma.component.rcp.PartComponent;
53  import org.seasar.uruma.component.rcp.PerspectiveComponent;
54  import org.seasar.uruma.component.rcp.ViewPartComponent;
55  import org.seasar.uruma.component.rcp.WorkbenchComponent;
56  import org.seasar.uruma.context.ApplicationContext;
57  import org.seasar.uruma.context.PartContext;
58  import org.seasar.uruma.context.WidgetHandle;
59  import org.seasar.uruma.context.WindowContext;
60  import org.seasar.uruma.core.TemplateManager;
61  import org.seasar.uruma.core.UrumaMessageCodes;
62  import org.seasar.uruma.desc.FormDesc;
63  import org.seasar.uruma.desc.PartActionDesc;
64  import org.seasar.uruma.exception.BindingException;
65  import org.seasar.uruma.rcp.configuration.ContributionBuilder;
66  import org.seasar.uruma.rcp.util.BundleUtil;
67  import org.seasar.uruma.rcp.util.UrumaServiceUtil;
68  import org.seasar.uruma.ui.UrumaApplicationWindow;
69  import org.seasar.uruma.util.HtmlTagUtil;
70  import org.seasar.uruma.util.S2ContainerListToHtmlUtil;
71  
72  /**
73   * デバッグビュー用のアクションクラスです。<br />
74   * 
75   * @author y.sugigami
76   */
77  public class UrumaDebugViewAction {
78  
79      /* IMPORT EXPORT */
80      @ExportValue(id = "debugBrowser")
81      public String html;
82  
83      public Browser debugBrowser;
84  
85      /**
86       * 初期化処理
87       */
88      @InitializeMethod
89      public void initialize() {
90          doS2Container();
91      }
92  
93      /**
94       * s2container <br />
95       */
96      @EventListener(id = "s2container", type = EventListenerType.SELECTION)
97      public void doS2Container() {
98          html = S2ContainerListToHtmlUtil.list("");
99      }
100 
101     /**
102      * bundle <br />
103      */
104     @EventListener(id = "bundle", type = EventListenerType.SELECTION)
105     public void doBundle() {
106         html = HtmlTagUtil.createHeader();
107         html += HtmlTagUtil.createH1("Workspace Path");
108 
109         // TODO 要実装
110 
111         // bundles
112         String symbolicName = UrumaServiceUtil.getService().getPluginId();
113         Bundle urumaBundle = BundleUtil.getBundle(symbolicName);
114         Bundle[] bundles = urumaBundle.getBundleContext().getBundles();
115         for (Bundle bundle : bundles) {
116             html += HtmlTagUtil.createH1("[" + convertStatus(bundle.getState())
117                     + "][" + bundle.getBundleId() + "] "
118                     + bundle.getSymbolicName());
119             Date date = new Date(bundle.getLastModified());
120             html += HtmlTagUtil.createTable("[" + date + "]", "["
121                     + bundle.getLocation() + "]");
122             Dictionary headers = bundle.getHeaders();
123             Enumeration elements = headers.keys();
124             while (elements.hasMoreElements()) {
125                 String key = (String) elements.nextElement();
126                 String value = (String) headers.get(key);
127                 html += HtmlTagUtil.createTr(key, value);
128             }
129             html += HtmlTagUtil.closeTable();
130         }
131         html += HtmlTagUtil.closeHeader();
132     }
133 
134     private String convertStatus(final int i) {
135         String result = "";
136         switch (i) {
137         case 32:
138             result = "ACTIVE";
139             break;
140 
141         case 8:
142             result = "LAZY";
143             break;
144 
145         case 4:
146             result = "RESOLVED";
147             break;
148 
149         default:
150             result = String.valueOf(i);
151             break;
152         }
153         return result;
154     }
155 
156     /**
157      * component <br />
158      */
159     @EventListener(id = "component", type = EventListenerType.SELECTION)
160     public void doComponent() {
161         html = HtmlTagUtil.createHeader();
162 
163         //
164         // WorkbenchComponent
165         //
166         WorkbenchComponent workbenchComponent = UrumaServiceUtil.getService()
167                 .getWorkbenchComponent();
168 
169         html += HtmlTagUtil.createH1("WorkbenchComponent");
170 
171         html += HtmlTagUtil.createTable();
172         html += HtmlTagUtil.createTr("id", workbenchComponent.getId());
173         html += HtmlTagUtil.createTr("ClassName", workbenchComponent.getClass()
174                 .getName());
175         html += HtmlTagUtil.createTr("basePath", workbenchComponent
176                 .getBasePath());
177         html += HtmlTagUtil.createTr("Location", workbenchComponent
178                 .getLocation());
179         html += HtmlTagUtil.createTr("Path", workbenchComponent.getPath());
180         html += HtmlTagUtil.createTr("Renderer", workbenchComponent
181                 .getRenderer().getClass().getName());
182 
183         html += HtmlTagUtil.createTr("title", workbenchComponent.title);
184         html += HtmlTagUtil.createTr("image", workbenchComponent.image);
185         html += HtmlTagUtil.createTr("initHeight",
186                 workbenchComponent.initHeight);
187         html += HtmlTagUtil.createTr("initWidth", workbenchComponent.initWidth);
188         html += HtmlTagUtil.createTr("initialPerspectiveId",
189                 workbenchComponent.initialPerspectiveId);
190         html += HtmlTagUtil.createTr("menu", workbenchComponent.menu);
191         html += HtmlTagUtil.createTr("statusLine",
192                 workbenchComponent.statusLine);
193         html += HtmlTagUtil.createTr("style", workbenchComponent.style);
194 
195         html += HtmlTagUtil.closeTable();
196 
197         List<UIElement> list = workbenchComponent.getChildren();
198         for (UIElement element : list) {
199             createUIElement(element);
200         }
201 
202         html += HtmlTagUtil.closeHeader();
203     }
204 
205     private void createUIElement(final UIElement element) {
206         if (MenuComponent.class.isAssignableFrom(element.getClass())) {
207             MenuComponent c = (MenuComponent) element;
208             html += HtmlTagUtil.createH2("MenuComponent");
209             html += HtmlTagUtil.createTable();
210             html += HtmlTagUtil.createTr("id", c.getId());
211             html += HtmlTagUtil.createTr("ClassName", c.getClass().getName());
212 
213             html += HtmlTagUtil.createTr("BasePath", c.getBasePath());
214             html += HtmlTagUtil.createTr("Location", c.getLocation());
215             html += HtmlTagUtil.createTr("Path", c.getPath());
216 
217             html += HtmlTagUtil.createTr("BasePath", c.getBasePath());
218             html += HtmlTagUtil.createTr("Location", c.getLocation());
219             html += HtmlTagUtil.createTr("Path", c.getPath());
220 
221             html += HtmlTagUtil.createTr("accelerator", c.accelerator);
222             html += HtmlTagUtil.createTr("defaultItemId", c.defaultItemId);
223             html += HtmlTagUtil.createTr("description", c.description);
224             html += HtmlTagUtil.createTr("disabledImage", c.disabledImage);
225             html += HtmlTagUtil.createTr("enabled", c.enabled);
226             html += HtmlTagUtil.createTr("enablesDependingId",
227                     c.enablesDependingId);
228             html += HtmlTagUtil.createTr("enablesFor", c.enablesFor);
229             html += HtmlTagUtil.createTr("hoverImage", c.hoverImage);
230             html += HtmlTagUtil.createTr("image", c.image);
231             html += HtmlTagUtil.createTr("selection", c.selection);
232             html += HtmlTagUtil.createTr("text", c.text);
233             html += HtmlTagUtil.createTr("visible", c.visible);
234             html += HtmlTagUtil.createTr("Renderer", c.getRenderer().getClass()
235                     .getName());
236             html += HtmlTagUtil.closeTable();
237 
238             for (UIElement elementChild : c.getChildren()) {
239                 createUIElement(elementChild);
240             }
241 
242         } else if (MenuItemComponent.class.isAssignableFrom(element.getClass())) {
243             MenuItemComponent c = (MenuItemComponent) element;
244             html += HtmlTagUtil.createH2("MenuItemComponent");
245             html += HtmlTagUtil.createTable();
246             html += HtmlTagUtil.createTr("id", c.getId());
247             html += HtmlTagUtil.createTr("ClassName", c.getClass().getName());
248 
249             html += HtmlTagUtil.createTr("BasePath", c.getBasePath());
250             html += HtmlTagUtil.createTr("Location", c.getLocation());
251             html += HtmlTagUtil.createTr("Path", c.getPath());
252 
253             html += HtmlTagUtil.createTr("accelerator", c.accelerator);
254             html += HtmlTagUtil.createTr("description", c.description);
255             html += HtmlTagUtil.createTr("disabledImage", c.disabledImage);
256             html += HtmlTagUtil.createTr("enabled", c.enabled);
257             html += HtmlTagUtil.createTr("enablesDependingId",
258                     c.enablesDependingId);
259             html += HtmlTagUtil.createTr("enablesFor", c.enablesFor);
260             html += HtmlTagUtil.createTr("hoverImage", c.hoverImage);
261             html += HtmlTagUtil.createTr("image", c.image);
262             html += HtmlTagUtil.createTr("selection", c.selection);
263             html += HtmlTagUtil.createTr("text", c.text);
264             html += HtmlTagUtil.createTr("Renderer", c.getRenderer().getClass()
265                     .getName());
266             html += HtmlTagUtil.closeTable();
267 
268         } else if (PerspectiveComponent.class.isAssignableFrom(element
269                 .getClass())) {
270             PerspectiveComponent c = (PerspectiveComponent) element;
271 
272             html += HtmlTagUtil.createH2("PerspectiveComponent");
273             html += HtmlTagUtil.createTable();
274             html += HtmlTagUtil.createTr("id", c.id);
275             html += HtmlTagUtil.createTr("ClassName", c.getClass().getName());
276 
277             html += HtmlTagUtil.createTr("BasePath", c.getBasePath());
278             html += HtmlTagUtil.createTr("Location", c.getLocation());
279             html += HtmlTagUtil.createTr("Path", c.getPath());
280 
281             html += HtmlTagUtil.createTr("name", c.name);
282             html += HtmlTagUtil.createTr("fixed", c.fixed);
283             html += HtmlTagUtil.createTr("iconicon", c.icon);
284             html += HtmlTagUtil.createTr("clazz", c.clazz);
285             html += HtmlTagUtil.closeTable();
286             for (UIElement elementChild : c.getChildren()) {
287                 createUIElement(elementChild);
288             }
289 
290         } else if (PartComponent.class.isAssignableFrom(element.getClass())) {
291             PartComponent c = (PartComponent) element;
292 
293             html += HtmlTagUtil.createH3("PartComponent");
294             html += HtmlTagUtil.createTable();
295             html += HtmlTagUtil.createTr("ClassName", c.getClass().getName());
296             html += HtmlTagUtil.createTr("BasePath", c.getBasePath());
297             html += HtmlTagUtil.createTr("Location", c.getLocation());
298             html += HtmlTagUtil.createTr("Path", c.getPath());
299 
300             html += HtmlTagUtil.createTr("ref", c.ref);
301             html += HtmlTagUtil.createTr("position", c.position);
302             html += HtmlTagUtil.createTr("ratio", c.ratio);
303             html += HtmlTagUtil.closeTable();
304 
305         } else if (ViewPartComponent.class.isAssignableFrom(element.getClass())) {
306             ViewPartComponent c = (ViewPartComponent) element;
307 
308             html += HtmlTagUtil.createH3("ViewPartComponent");
309             html += HtmlTagUtil.createTable();
310             html += HtmlTagUtil.createTr("id", c.getId());
311             html += HtmlTagUtil.createTr("ClassName", c.getClass().getName());
312             html += HtmlTagUtil.createTr("BasePath", c.getBasePath());
313             html += HtmlTagUtil.createTr("Location", c.getLocation());
314             html += HtmlTagUtil.createTr("Path", c.getPath());
315             html += HtmlTagUtil.createTr("Renderer", c.getRenderer().getClass()
316                     .getName());
317 
318             html += HtmlTagUtil.createTr("position", c.allowMultiple);
319             html += HtmlTagUtil.createTr("background", c.background);
320             html += HtmlTagUtil.createTr("backgroundImage", c.backgroundImage);
321             html += HtmlTagUtil.createTr("category", c.category);
322             html += HtmlTagUtil.createTr("enabled", c.enabled);
323             html += HtmlTagUtil.createTr("enablesDependingId",
324                     c.enablesDependingId);
325             html += HtmlTagUtil.createTr("enablesFor", c.enablesFor);
326             html += HtmlTagUtil.createTr("fontHeight", c.fontHeight);
327             html += HtmlTagUtil.createTr("fontName", c.fontName);
328             html += HtmlTagUtil.createTr("fontStyle", c.fontStyle);
329             html += HtmlTagUtil.createTr("foreground", c.foreground);
330             html += HtmlTagUtil.createTr("height", c.height);
331             html += HtmlTagUtil.createTr("image", c.image);
332             html += HtmlTagUtil.createTr("menu", c.menu);
333             html += HtmlTagUtil.createTr("title", c.title);
334             html += HtmlTagUtil.createTr("toolTipText", c.toolTipText);
335             html += HtmlTagUtil.createTr("visible", c.visible);
336             html += HtmlTagUtil.createTr("width", c.width);
337             html += HtmlTagUtil.createTr("x", c.x);
338             html += HtmlTagUtil.createTr("y", c.y);
339             html += HtmlTagUtil.closeTable();
340             for (UIElement elementChild : c.getChildren()) {
341                 createUIElement(elementChild);
342             }
343         } else {
344             html += element.getClass().getName() + "<br />";
345         }
346     }
347 
348     private static final ImportValueCommand IMPORT_VALUE_COMMAND = new ImportValueCommand();
349 
350     private static final ExportValueCommand EXPORT_VALUE_COMMAND = new ExportValueCommand();
351 
352     private static final ImportSelectionCommand IMPORT_SELECTION_COMMAND = new ImportSelectionCommand();
353 
354     private static final ExportSelectionCommand EXPORT_SELECTION_COMMAND = new ExportSelectionCommand();
355 
356     /**
357      * context <br />
358      */
359     @EventListener(id = "context", type = EventListenerType.SELECTION)
360     public void doCcontext() {
361         html = HtmlTagUtil.createHeader();
362         //
363         // ApplicationContext
364         //
365         WindowContext wc = UrumaServiceUtil.getService()
366                 .getWorkbenchWindowContext();
367         ApplicationContext ac = wc.getApplicationContext();
368 
369         html += HtmlTagUtil.createH1("ApplicationContext");
370         html += HtmlTagUtil.createTable();
371         html += HtmlTagUtil.createTr("ClassName", ac.getClass().getName());
372         html += HtmlTagUtil.closeTable();
373 
374         //
375         // WindowContext
376         //
377         html += HtmlTagUtil.createH1("WindowContext");
378         html += HtmlTagUtil.createTable("Name", wc.getName());
379         html += HtmlTagUtil.createTr("ClassName", wc.getClass().getName());
380         html += HtmlTagUtil.createTr("WorkbenchActionObject", wc
381                 .getPartActionObject().getClass().getName());
382 
383         // PartContext
384         for (PartContext pc : wc.getPartContextList()) {
385             html += HtmlTagUtil.createTr("PartContext Name", pc.getName());
386         }
387 
388         html += HtmlTagUtil.closeTable();
389 
390         // EnablesDependingDef
391         for (EnablesDependingDef ed : wc.getEnablesDependingDefList()) {
392             html += HtmlTagUtil.createH1("EnablesDependingDef");
393             html += HtmlTagUtil.createTable();
394             html += HtmlTagUtil.createTr("ClassName", ed.getClass().getName());
395             html += HtmlTagUtil.createTr("targetId", ed.getTargetId());
396             html += HtmlTagUtil.createTr("type", ed.getType().name());
397 
398             // WidgetHandle
399             createWidgetHandle(ed.getWidgetHandle());
400 
401             html += HtmlTagUtil.closeTable();
402         }
403 
404         // PartContext
405         for (PartContext pc : wc.getPartContextList()) {
406             PartActionDesc partActionDesc = pc.getPartActionDesc();
407             FormDesc formDesc = pc.getFormDesc();
408             html += HtmlTagUtil.createH1("PartContext");
409             html += HtmlTagUtil.createTable("Name", pc.getName());
410             html += HtmlTagUtil.createTr("ClassName", pc.getClass().getName());
411 
412             html += HtmlTagUtil.createTrSub1("PartActionClass Name",
413                     partActionDesc.getPartActionClass().getSimpleName());
414             html += HtmlTagUtil.createTr("partActionObject", pc
415                     .getPartActionObject().getClass().getSimpleName());
416             String initializeMethodName = " ";
417             if (partActionDesc.getInitializeMethod() != null) {
418                 initializeMethodName = partActionDesc.getInitializeMethod()
419                         .getName()
420                         + "()";
421             }
422             html += HtmlTagUtil.createTr("InitializeMethodName",
423                     initializeMethodName);
424 
425             String postOpenMethodName = " ";
426             if (partActionDesc.getPostOpenMethod() != null) {
427                 postOpenMethodName = partActionDesc.getPostOpenMethod()
428                         .getName()
429                         + "()";
430             }
431             html += HtmlTagUtil.createTr("PostOpenMethodName",
432                     postOpenMethodName);
433 
434             for (EventListenerDef eld : partActionDesc
435                     .getEventListenerDefList()) {
436                 html += HtmlTagUtil.createTrSub1(
437                         "EventListenerDef TargetMethodName", eld
438                                 .getTargetMethod().getName());
439                 html += HtmlTagUtil.createTr("Type", eld.getType().getName());
440                 html += HtmlTagUtil.createTr("isSWTEvent", String.valueOf(eld
441                         .getType().isSWTEvent()));
442             }
443 
444             for (ApplicationContextDef acd : partActionDesc
445                     .getApplicationContextDefList()) {
446                 html += HtmlTagUtil.createTrSub1("ApplicationContextDef Name",
447                         acd.getName());
448                 html += HtmlTagUtil.createTr("PropertyName", acd
449                         .getPropertyDesc().getPropertyName());
450             }
451 
452             html += HtmlTagUtil.createTrSub1("FormClass Name", formDesc
453                     .getFormClass().getSimpleName());
454             html += HtmlTagUtil.createTr("formObject", pc.getFormObject()
455                     .getClass().getSimpleName());
456 
457             dealFields(pc, IMPORT_VALUE_COMMAND);
458             dealFields(pc, EXPORT_VALUE_COMMAND);
459             dealFields(pc, IMPORT_SELECTION_COMMAND);
460             dealFields(pc, EXPORT_SELECTION_COMMAND);
461 
462             for (WidgetHandle wh : pc.getWidgetHandles()) {
463                 // WidgetHandle
464                 createWidgetHandle(wh);
465             }
466 
467             html += HtmlTagUtil.closeTable();
468         }
469 
470         html += HtmlTagUtil.closeHeader();
471     }
472 
473     private void dealFields(final PartContext context,
474             final BindingCommand command) {
475         Object form = context.getFormObject();
476         FormDesc formDesc = context.getFormDesc();
477         if (form == null || formDesc == null) {
478             return;
479         }
480         html += HtmlTagUtil.createTrSub1("BindingCommand Class Name", command
481                 .getClass().getSimpleName());
482 
483         List<PropertyDesc> targetProperties = command
484                 .getTargetPropertyDescs(formDesc);
485         for (PropertyDesc pd : targetProperties) {
486             String id = command.getId(pd.getField());
487 
488             WidgetHandle handle = context.getWidgetHandle(id);
489             if (handle != null) {
490                 Object widget = handle.getWidget();
491 
492                 html += HtmlTagUtil.createTrSub2("PropertyName", pd
493                         .getPropertyName());
494                 html += HtmlTagUtil.createTr("WidgetName", widget.getClass()
495                         .getSimpleName());
496             } else {
497                 throw new BindingException(UrumaMessageCodes.WIDGET_NOT_FOUND,
498                         id, form.getClass(), pd.getField());
499             }
500         }
501     }
502 
503     private void createWidgetHandle(final WidgetHandle wh) {
504         html += HtmlTagUtil.createTrSub1("WidgetHandle Id", wh.getId());
505         html += HtmlTagUtil.createTr("Class Name", wh.getClass().getName());
506         html += HtmlTagUtil.createTr("widgetClass", wh.getWidgetClass()
507                 .getName());
508 
509         if (StructuredViewer.class.isAssignableFrom(wh.getWidgetClass())) {
510             StructuredViewer viewer = wh.<StructuredViewer> getCastWidget();
511             html += HtmlTagUtil.createTr("LabelProvider", getSimpleName(viewer
512                     .getLabelProvider()));
513             html += HtmlTagUtil.createTr("ContentProvider",
514                     getSimpleName(viewer.getContentProvider()));
515             html += HtmlTagUtil.createTr("Comparator", getSimpleName(viewer
516                     .getComparator()));
517             html += HtmlTagUtil.createTr("Sorter", getSimpleName(viewer
518                     .getSorter()));
519 
520         } else if (GenericAction.class.isAssignableFrom(wh.getWidgetClass())) {
521             // TODO 要実装
522         } else if (UrumaApplicationWindow.class.isAssignableFrom(wh
523                 .getWidgetClass())) {
524             // TODO 要実装
525         } else if (Widget.class.isAssignableFrom(wh.getWidgetClass())) {
526             // TODO 要実装
527         } else if (MenuManager.class.isAssignableFrom(wh.getWidgetClass())) {
528             // TODO 要実装
529         } else if (Control.class.isAssignableFrom(wh.getWidgetClass())) {
530             // TODO 要実装
531         }
532 
533         UIComponent uc = wh.getUiComponent();
534         if (uc != null) {
535             html += HtmlTagUtil.createTrSub2("UIComponent id", uc.getId());
536             html += HtmlTagUtil.createTr("Class Name", uc.getClass().getName());
537             html += HtmlTagUtil.createTr("BasePath", uc.getBasePath());
538             html += HtmlTagUtil.createTr("Location", uc.getLocation());
539             html += HtmlTagUtil.createTr("Path", uc.getPath());
540             html += HtmlTagUtil.createTr("style", uc.getStyle());
541             html += HtmlTagUtil.createTr("renderer", uc.getRenderer()
542                     .getClass().getName());
543         }
544     }
545 
546     private String getSimpleName(final Object obj) {
547         if (obj != null) {
548             return obj.getClass().getSimpleName();
549         }
550         return " ";
551     }
552 
553     /**
554      * template <br />
555      */
556     @EventListener(id = "template", type = EventListenerType.SELECTION)
557     public void doTemplate() {
558 
559         //
560         // TemplateManager
561         //
562         html = HtmlTagUtil.createHeader();
563         html += HtmlTagUtil.createH1("TemplateManager");
564 
565         html += HtmlTagUtil.createTable();
566 
567         TemplateManager templateManager = (TemplateManager) UrumaServiceUtil
568                 .getService().getContainer()
569                 .getComponent(TemplateManager.class);
570         List<Template> viewTemplates = templateManager
571                 .getTemplates(ViewPartComponent.class);
572 
573         for (Template template : viewTemplates) {
574             html += HtmlTagUtil.createTrSub1("Path", template.getPath());
575             html += HtmlTagUtil.createTr("Location", template.getLocation());
576             html += HtmlTagUtil.createTr("BasePath", template.getBasePath());
577             html += HtmlTagUtil.createTr("Extends", template.getExtends());
578 
579             UIComponentContainer uic = template.getRootComponent();
580             createChildTemplateManager(uic);
581         }
582 
583         html += HtmlTagUtil.closeTable();
584         html += HtmlTagUtil.closeTable();
585     }
586 
587     private void createChildTemplateManager(final Object uic) {
588         BeanDesc beanDesc = BeanDescFactory.getBeanDesc(uic.getClass());
589         html += HtmlTagUtil.createTrSub2("ClassName", uic.getClass()
590                 .getSimpleName());
591         for (int i = 0; i < beanDesc.getFieldSize(); i++) {
592             Field filed = beanDesc.getField(i);
593 
594             String value = "";
595             Object obj = null;
596             if (filed.isAccessible()) {
597                 try {
598                     obj = filed.get(uic);
599                     if (obj != null) {
600                         value = obj.getClass().getSimpleName();
601                         value += ": " + obj.toString();
602                     } else {
603                         value = "null";
604                     }
605                 } catch (IllegalArgumentException ignore) {
606                 } catch (IllegalAccessException ignore) {
607                 }
608             }
609 
610             html += HtmlTagUtil.createTr(filed.getName(), value);
611             if (obj instanceof List<?>) {
612                 List<?> list = (List<?>) obj;
613                 for (int j = 0; j < list.size(); j++) {
614                     Object array_element = list.get(j);
615 
616                     html += HtmlTagUtil.createTr("array_element", array_element
617                             .toString());
618                     createChildTemplateManager(array_element);
619                 }
620             }
621         }
622     }
623 
624     /**
625      * plugin <br />
626      */
627     @EventListener(id = "plugin", type = EventListenerType.SELECTION)
628     public void doPlugin() {
629         html = HtmlTagUtil.createHeader();
630         html += "<pre>";
631         html += ContributionBuilder.getContent().replaceAll("<", "&lt;")
632                 .replaceAll(">", "&gt;");
633         html += "</pre>";
634         html += HtmlTagUtil.closeHeader();
635     }
636 
637 }