package org.korsakow.ide.resources; import java.util.HashMap; import java.util.Map; import org.apache.log4j.Logger; import org.korsakow.ide.lang.LanguageBundle; import org.korsakow.ide.resources.media.AudioInfo; import org.korsakow.ide.resources.widget.WidgetModel; import org.korsakow.ide.ui.interfacebuilder.widget.Comments; import org.korsakow.ide.ui.interfacebuilder.widget.FullscreenButton; import org.korsakow.ide.ui.interfacebuilder.widget.GetHistory; import org.korsakow.ide.ui.interfacebuilder.widget.History; import org.korsakow.ide.ui.interfacebuilder.widget.InsertText; import org.korsakow.ide.ui.interfacebuilder.widget.MainMedia; import org.korsakow.ide.ui.interfacebuilder.widget.MasterVolume; import org.korsakow.ide.ui.interfacebuilder.widget.MediaArea; import org.korsakow.ide.ui.interfacebuilder.widget.MediaControls; import org.korsakow.ide.ui.interfacebuilder.widget.PlayButton; import org.korsakow.ide.ui.interfacebuilder.widget.PlayTime; import org.korsakow.ide.ui.interfacebuilder.widget.Scrubber; import org.korsakow.ide.ui.interfacebuilder.widget.SnuAutoLink; import org.korsakow.ide.ui.interfacebuilder.widget.SnuAutoMultiLink; import org.korsakow.ide.ui.interfacebuilder.widget.SnuFixedLink; import org.korsakow.ide.ui.interfacebuilder.widget.Subtitles; import org.korsakow.ide.ui.interfacebuilder.widget.TotalTime; public enum WidgetType { MainMedia("org.korsakow.widget.MainMedia", LanguageBundle.getString("widget.mainmedia.label"), MainMedia.class), SnuAutoLink("org.korsakow.widget.SnuAutoLink", LanguageBundle.getString("widget.snuautolink.label"), SnuAutoLink.class), SnuAutoMultiLink("org.korsakow.widget.SnuAutoMultiLink", LanguageBundle.getString("widget.snuautomultilink.label"), SnuAutoMultiLink.class), SnuFixedLink("org.korsakow.widget.SnuFixedLink", LanguageBundle.getString("widget.snufixedlink.label"), SnuFixedLink.class), MasterVolume("org.korsakow.widget.MasterVolume", LanguageBundle.getString("widget.mastervolume.label"), MasterVolume.class), MediaArea("org.korsakow.widget.MediaArea", LanguageBundle.getString("widget.mediaarea.label"), MediaArea.class), History("org.korsakow.widget.History", LanguageBundle.getString("widget.history.label"), History.class), GetHistory("org.korsakow.widget.GetHistory", LanguageBundle.getString("widget.gethistory.label"), GetHistory.class), InsertText("org.korsakow.widget.InsertText", LanguageBundle.getString("widget.inserttext.label"), InsertText.class), // PreviewText("org.korsakow.widget.PreviewText", LanguageBundle.getString("widget.previewtext.label"), PreviewText.class), Comments("org.korsakow.widget.Comments", LanguageBundle.getString("widget.comments.label"), Comments.class), Subtitles("org.korsakow.widget.Subtitles", LanguageBundle.getString("widget.subtitles.label"), Subtitles.class), Scrubber("org.korsakow.widget.Scrubber", LanguageBundle.getString("widget.scrubber.label"), Scrubber.class), MediaControls("org.korsakow.widget.MediaControls", LanguageBundle.getString("widget.mediacontrols.label"), MediaControls.class), PlayButton("org.korsakow.widget.PlayButton", LanguageBundle.getString("widget.playbutton.label"), PlayButton.class), FullscreenButton("org.korsakow.widget.FullscreenButton", LanguageBundle.getString("widget.fullscreenbutton.label"), FullscreenButton.class), TotalTime("org.korsakow.widget.TotalTime", LanguageBundle.getString("widget.totaltime.label"), TotalTime.class), PlayTime("org.korsakow.widget.PlayTime", LanguageBundle.getString("widget.playtime.label"), PlayTime.class) ; private static Map<String, WidgetType> byId = new HashMap<String, WidgetType>(); public static WidgetType forId(String id) { if (id == null) throw new NullPointerException(); if (byId.isEmpty()) { for (WidgetType type : WidgetType.values()) byId.put(type.getId(), type); } if (byId.get(id)==null) throw new IllegalArgumentException("Invalid widget type: " + id); return byId.get(id); } private String id; private Class<? extends WidgetModel> clazz; private String displayName; WidgetType(String id, String displayName, Class<? extends WidgetModel> clazz) { this.id = id; this.displayName = displayName; this.clazz = clazz; } public String getId() { return id; } public String getDisplayName() { return displayName; } public WidgetModel newInstance() { try { return clazz.newInstance(); } catch (InstantiationException e) { // should never happen Logger.getLogger(AudioInfo.class).fatal(e); throw new RuntimeException(e); } catch (IllegalAccessException e) { // should never happen Logger.getLogger(AudioInfo.class).fatal(e); throw new RuntimeException(e); } } }