Search in sources :

Example 1 with GagoyleParentOnLoaded

use of com.kyj.fx.voeditor.visual.framework.GagoyleParentOnLoaded in project Gargoyle by callakrsos.

the class DefaultPluginLoader method load.

/**
	 * 불러들인 플러그인에서 노드위치정보를 로드해온다.
	 *
	 * @return
	 *
	 * @작성자 : KYJ
	 * @작성일 : 2015. 12. 18.
	 */
@Override
public List<JarWrapper> load() {
    File[] pluginFiles = searchPlugins();
    if (pluginFiles == null)
        return Collections.emptyList();
    return Stream.of(pluginFiles).map(file -> {
        try {
            @SuppressWarnings("resource") JarFile jarFile = new JarFile(file);
            ZipEntry entry = jarFile.getEntry(PLUGIN_INI);
            Properties properties = new Properties();
            properties.load(jarFile.getInputStream(entry));
            JarWrapper zipWrapper = new JarWrapper();
            zipWrapper.location = file;
            zipWrapper.jarFile = jarFile;
            zipWrapper.prop = properties;
            return zipWrapper;
        } catch (Exception e) {
            LOGGER.error(String.format("is not jar file \n%s", ValueUtil.toString(e)));
        }
        return null;
    }).filter(/* jar파일이라면 로드됨. */
    zipWrapper -> zipWrapper != null).map(/* 클래스정보 노출 */
    zipWrapper -> {
        String clazz = zipWrapper.prop.getProperty(KEY_DISPLAY_JAVAFX_NODE_CLASS);
        String diplayMenuName = zipWrapper.prop.getProperty(KEY_DISPLAY_MENU_NAME);
        String menuPath = zipWrapper.prop.getProperty(KEY_DISPLAY_MENU_PATH);
        String configNodeClass = zipWrapper.prop.getProperty(KEY_DISPLAY_CONFIG_JAVAFX_NODE_CLASS);
        String configNodeName = zipWrapper.prop.getProperty(KEY_DISPLAY_CONFIG_NAME);
        String addOnParentLoadedListener = zipWrapper.prop.getProperty(ADD_ON_PARENT_LOADED_LISTENER);
        String setOnParentBeforeLoadedListener = zipWrapper.prop.getProperty(SET_ON_PARENT_BEFORE_LOADED_LISTENER);
        String classpath = zipWrapper.prop.getProperty(KEY_CLASSPATH);
        String openType = zipWrapper.prop.getProperty(OPEN_TYPE);
        if (clazz != null && !clazz.isEmpty()) {
            zipWrapper.clazz = clazz;
            zipWrapper.displayMenuName = diplayMenuName;
            zipWrapper.menuPath = menuPath;
            zipWrapper.configNodeClass = configNodeClass;
            zipWrapper.configNodeName = configNodeName;
            zipWrapper.addOnParentLoadedListener = addOnParentLoadedListener;
            zipWrapper.setOnParentBeforeLoadedListener = setOnParentBeforeLoadedListener;
            zipWrapper.openType = ValueUtil.isEmpty(openType) ? "INNER" : openType;
            zipWrapper.classpath = classpath;
            return zipWrapper;
        }
        return null;
    }).filter(/* 유효한 정보만 다시 필터링하고 클래스 로딩 */
    zipWrapper -> {
        try {
            URLClassLoader createLoader = DynamicClassLoader.createLoader(zipWrapper.location, zipWrapper.classpath);
            zipWrapper.loader = createLoader;
            Class<?> loadFromJarFile = createLoader.loadClass(zipWrapper.clazz);
            if (Parent.class.isAssignableFrom(loadFromJarFile) || CloseableParent.class.isAssignableFrom(loadFromJarFile)) {
                zipWrapper.nodeClass = loadFromJarFile;
                LOGGER.debug(String.format("valide plugin class info : %s ", loadFromJarFile.getName()));
            } else {
                return false;
            }
            if (ValueUtil.isNotEmpty(zipWrapper.addOnParentLoadedListener)) {
                try {
                    Class<?> addOnParentLoadedListenerClass = DynamicClassLoader.loadFromJarFile(zipWrapper.location, zipWrapper.addOnParentLoadedListener);
                    if (GagoyleParentOnLoaded.class.isAssignableFrom(addOnParentLoadedListenerClass)) {
                        zipWrapper.addOnParentLoadedListenerClass = (Class<GagoyleParentOnLoaded>) addOnParentLoadedListenerClass;
                        LOGGER.debug(String.format("added plugin listener ::  class info : %s ", zipWrapper.addOnParentLoadedListener));
                    }
                } catch (Exception e) {
                    LOGGER.error(ValueUtil.toString(e));
                }
            }
            if (ValueUtil.isNotEmpty(zipWrapper.setOnParentBeforeLoadedListener)) {
                try {
                    Class<?> setOnParentBeforeLoadedListenerClass = DynamicClassLoader.loadFromJarFile(zipWrapper.location, zipWrapper.setOnParentBeforeLoadedListener);
                    if (setOnParentBeforeLoadedListenerClass != null) {
                        if (GagoyleParentBeforeLoad.class.isAssignableFrom(setOnParentBeforeLoadedListenerClass)) {
                            zipWrapper.setOnParentBeforeLoadedListenerClass = (Class<GagoyleParentBeforeLoad>) setOnParentBeforeLoadedListenerClass;
                            LOGGER.debug(String.format("added plugin listener ::  class info : %s ", zipWrapper.setOnParentBeforeLoadedListener));
                        }
                    }
                } catch (Exception e) {
                    LOGGER.error(ValueUtil.toString(e));
                }
            }
        } catch (Exception e) {
            LOGGER.error(ValueUtil.toString(e));
            return false;
        }
        return true;
    }).collect(Collectors.toList());
}
Also used : FilenameFilter(java.io.FilenameFilter) Properties(java.util.Properties) Logger(org.slf4j.Logger) CloseableParent(com.kyj.fx.voeditor.visual.main.layout.CloseableParent) LoggerFactory(org.slf4j.LoggerFactory) JarFile(java.util.jar.JarFile) ValueUtil(com.kyj.fx.voeditor.visual.util.ValueUtil) Collectors(java.util.stream.Collectors) File(java.io.File) Parent(javafx.scene.Parent) URLClassLoader(java.net.URLClassLoader) List(java.util.List) GagoyleParentBeforeLoad(com.kyj.fx.voeditor.visual.framework.GagoyleParentBeforeLoad) Stream(java.util.stream.Stream) GagoyleParentOnLoaded(com.kyj.fx.voeditor.visual.framework.GagoyleParentOnLoaded) Collections(java.util.Collections) ZipEntry(java.util.zip.ZipEntry) ZipEntry(java.util.zip.ZipEntry) GagoyleParentBeforeLoad(com.kyj.fx.voeditor.visual.framework.GagoyleParentBeforeLoad) JarFile(java.util.jar.JarFile) Properties(java.util.Properties) GagoyleParentOnLoaded(com.kyj.fx.voeditor.visual.framework.GagoyleParentOnLoaded) URLClassLoader(java.net.URLClassLoader) JarFile(java.util.jar.JarFile) File(java.io.File)

Example 2 with GagoyleParentOnLoaded

use of com.kyj.fx.voeditor.visual.framework.GagoyleParentOnLoaded in project Gargoyle by callakrsos.

the class SystemLayoutViewController method initialize.

@FXML
public void initialize() {
    // 쿼리 리스너를 등록
    DbUtil.registQuertyListener(this);
    try {
        FXMLLoader loader = FxUtil.createNewFxmlLoader();
        loader.setLocation(SystemLayoutViewController.class.getResource("DAOLoaderView.fxml"));
        TitledPane titledPane = loader.load();
        VBox.setVgrow(titledPane, Priority.ALWAYS);
        accordionItems.getChildren().add(titledPane);
        DAOLoaderController controller = loader.getController();
        controller.setSystemLayoutViewController(this);
    } catch (IOException e1) {
        e1.printStackTrace();
    }
    SharedMemory.setSystemLayoutView(this);
    SharedMemory.setWorkspaceTab(tabPanWorkspace);
    // tab key에 대한 이벤트 처리 등록....
    SharedMemory.getPrimaryStage().addEventHandler(KeyEvent.ANY, event -> {
        boolean isCloseALLtabKeyCode = event.isControlDown() && event.isShiftDown() && KeyCode.W == event.getCode();
        boolean isTabMoveCode = event.isControlDown() && isNumberCode(event.getCode());
        ObservableList<DockTab> tabs = tabPanWorkspace.getTabs();
        if (isCloseALLtabKeyCode) {
            LOGGER.debug("CLOSE ALL TABS...");
            for (int i = tabs.size() - 1; i > 0; i--) {
                tabs.remove(i);
            }
        } else if (isTabMoveCode) {
            int tabIndex = Integer.parseInt(event.getCode().getName());
            if (tabIndex > 0 && tabs.size() < tabIndex)
                return;
            LOGGER.debug("MOVE TAB" + event.getCode().getName());
            tabPanWorkspace.getSelectionModel().select(tabIndex - 1);
        }
    });
    String baseDir = ResourceLoader.getInstance().get(ResourceLoader.BASE_DIR);
    selectDirFile = new File(baseDir);
    createNewTreeViewMenuItems();
    webvWelcome.getEngine().setJavaScriptEnabled(true);
    webvWelcome.getEngine().load(HOME_URL);
    txtUrl.addEventHandler(KeyEvent.KEY_PRESSED, event -> {
        if (KeyCode.ENTER == event.getCode()) {
            webvWelcome.getEngine().load(txtUrl.getText());
        }
    });
    btnUrlSearch.addEventHandler(MouseEvent.MOUSE_CLICKED, event -> {
        if (event.getClickCount() >= 1) {
            webvWelcome.getEngine().load(txtUrl.getText());
        }
    });
    webvWelcome.setOnKeyPressed(key -> {
        if (key.getCode() == KeyCode.F12) {
            FxUtil.createStageAndShow("Simple Web Console", new WebViewConsole(webvWelcome));
        }
    });
    treeProjectFile.setRoot(createNewTree(selectDirFile));
    treeProjectFile.setShowRoot(false);
    // 트리 컨테스트 요청 이벤트
    treeProjectFile.setOnContextMenuRequested(this::treeProjectFileOnContextMenuRequested);
    // 트리 마우스 이벤트
    treeProjectFile.setOnMouseClicked(this::treeProjectFileOnMouseClick);
    // 트리 키 이벤트
    treeProjectFile.addEventHandler(KeyEvent.KEY_PRESSED, this::treeProjectFileOnKeyPressed);
    /** 플러그인들을 로드함. **/
    Platform.runLater(new Runnable() {

        @Override
        public void run() {
            List<JarWrapper> load = PluginLoader.getInstance().load();
            load.stream().forEach(jarWrapper -> {
                try {
                    String displayMenuName = jarWrapper.getDisplayMenuName();
                    MenuItem pluginMenu = new MenuItem(displayMenuName);
                    pluginMenu.setUserData(jarWrapper);
                    pluginMenu.setOnAction(event -> {
                        JarWrapper jar = (JarWrapper) pluginMenu.getUserData();
                        try {
                            Class<?> nodeClass = jar.getNodeClass();
                            Object newInstance = jar.loader.loadClass(nodeClass.getName()).newInstance();
                            if (newInstance instanceof CloseableParent<?>) {
                                loadNewSystemTab(jar.getDisplayMenuName(), (CloseableParent<?>) newInstance);
                            } else {
                                loadNewSystemTab(jar.getDisplayMenuName(), (Parent) newInstance, SkinManager.getInstance().getJavafxDefaultSkin());
                            }
                        } catch (Exception e) {
                            LOGGER.error("regist fail plugin.");
                            LOGGER.error(ValueUtil.toString(e));
                        }
                    });
                    try {
                        Class<GagoyleParentBeforeLoad> setBeforeParentLoadListenerClass = jarWrapper.getSetOnParentBeforeLoadedListenerClass();
                        if (setBeforeParentLoadListenerClass != null)
                            setOnbeforeParentLoad(setBeforeParentLoadListenerClass.newInstance());
                    } catch (Exception e) {
                        LOGGER.error("regist fail 'GagoyleParentBeforeLoad' listener.");
                    }
                    try {
                        Class<GagoyleParentOnLoaded> addOnParentLoadedListenerClass = jarWrapper.getAddOnParentLoadedListenerClass();
                        if (addOnParentLoadedListenerClass != null)
                            addOnParentLoadedListener(addOnParentLoadedListenerClass.newInstance());
                    } catch (Exception e) {
                        LOGGER.error("regist fail 'GagoyleParentOnLoaded' listener.");
                    }
                    menuPlugins.getItems().add(pluginMenu);
                } catch (Exception e) {
                    LOGGER.debug(ValueUtil.toString(e));
                }
            });
        }
    });
    //tab image 아이콘 처리
    try (InputStream is = getClass().getResourceAsStream("/META-INF/images/eclipse/eview16/packages.gif")) {
        tabPackageExplorer.setGraphic(new ImageView(new Image(is)));
    } catch (IOException e) {
        e.printStackTrace();
    }
    tabPanWorkspace.getTabs().addListener(dockTabCloseListener);
}
Also used : Arrays(java.util.Arrays) StringUtils(org.apache.commons.lang.StringUtils) MultipleSelectionModel(javafx.scene.control.MultipleSelectionModel) ListChangeListener(javafx.collections.ListChangeListener) JavaProjectFileTreeItem(com.kyj.fx.voeditor.visual.component.JavaProjectFileTreeItem) FileUtil(com.kyj.fx.voeditor.visual.util.FileUtil) Path(java.nio.file.Path) SystemUtils(org.apache.commons.lang.SystemUtils) SplitPane(javafx.scene.control.SplitPane) Pair(javafx.util.Pair) Event(javafx.event.Event) KeyEvent(javafx.scene.input.KeyEvent) PluginLoader(com.kyj.fx.voeditor.visual.loder.PluginLoader) Platform(javafx.application.Platform) FxUtil(com.kyj.fx.voeditor.visual.util.FxUtil) ResourceLoader(com.kyj.fx.voeditor.visual.momory.ResourceLoader) XMLTextView(com.kyj.fx.voeditor.visual.component.popup.XMLTextView) ObservableList(javafx.collections.ObservableList) BorderPane(javafx.scene.layout.BorderPane) CodeAnalysisJavaTextArea(com.kyj.fx.voeditor.visual.component.text.CodeAnalysisJavaTextArea) DbExecListener(com.kyj.fx.voeditor.visual.util.DbExecListener) SVNViewer(com.kyj.fx.voeditor.visual.component.scm.SVNViewer) TreeItem(javafx.scene.control.TreeItem) FXCollections(javafx.collections.FXCollections) DialogUtil(com.kyj.fx.voeditor.visual.util.DialogUtil) FilePropertiesComposite(com.kyj.fx.voeditor.visual.component.file.FilePropertiesComposite) FXMLLoader(javafx.fxml.FXMLLoader) SpecResource(com.kyj.fx.voeditor.visual.words.spec.auto.msword.ui.model.SpecResource) UtubeDownloaderComposite(com.kyj.fx.voeditor.visual.component.utube.UtubeDownloaderComposite) Properties(java.util.Properties) ImageViewPane(com.kyj.fx.voeditor.visual.component.ImageViewPane) TitledPane(javafx.scene.control.TitledPane) Node(javafx.scene.Node) IOException(java.io.IOException) FileUtils(org.apache.commons.io.FileUtils) RuntimeClassUtil(com.kyj.fx.voeditor.visual.util.RuntimeClassUtil) File(java.io.File) ReadOnlySingletonConsole(com.kyj.fx.voeditor.visual.component.console.ReadOnlySingletonConsole) GoogleTrendComposite(com.kyj.fx.voeditor.visual.component.google.trend.GoogleTrendComposite) Menu(javafx.scene.control.Menu) ContextMenuEvent(javafx.scene.input.ContextMenuEvent) KeyCodeCombination(javafx.scene.input.KeyCodeCombination) NrchRealtimeSrchFlowComposite(com.kyj.fx.voeditor.visual.component.nrch.realtime.NrchRealtimeSrchFlowComposite) SimpleObjectProperty(javafx.beans.property.SimpleObjectProperty) Tab(javafx.scene.control.Tab) ImageView(javafx.scene.image.ImageView) ResultDialog(com.kyj.fx.voeditor.visual.component.ResultDialog) SkinManager(com.kyj.fx.voeditor.visual.momory.SkinManager) Image(javafx.scene.image.Image) EventHandler(javafx.event.EventHandler) Button(javafx.scene.control.Button) DbUtil(com.kyj.fx.voeditor.visual.util.DbUtil) LoggerFactory(org.slf4j.LoggerFactory) NullExpresion(com.kyj.fx.voeditor.visual.util.NullExpresion) JavaSVNManager(com.kyj.scm.manager.svn.java.JavaSVNManager) SVNWcDbClient(com.kyj.scm.manager.svn.java.SVNWcDbClient) PDFImageBasePane(com.kyj.fx.voeditor.visual.component.PDFImageBasePane) VBox(javafx.scene.layout.VBox) SelectWorkspaceView(com.kyj.fx.voeditor.visual.component.popup.SelectWorkspaceView) PMDCheckedListComposite(com.kyj.fx.voeditor.visual.component.pmd.PMDCheckedListComposite) Parent(javafx.scene.Parent) JavaProjectMemberFileTreeItem(com.kyj.fx.voeditor.visual.component.JavaProjectMemberFileTreeItem) ContextMenu(javafx.scene.control.ContextMenu) GargoyleExtensionFilters(com.kyj.fx.voeditor.visual.util.GargoyleExtensionFilters) CommonsSqllPan(com.kyj.fx.voeditor.visual.component.sql.view.CommonsSqllPan) WindowEvent(javafx.stage.WindowEvent) FXMLTextView(com.kyj.fx.voeditor.visual.component.popup.FXMLTextView) GagoyleWorkspaceOpenResourceView(com.kyj.fx.voeditor.visual.component.popup.GagoyleWorkspaceOpenResourceView) TextField(javafx.scene.control.TextField) Main(com.kyj.fx.voeditor.visual.main.Main) MenuItem(javafx.scene.control.MenuItem) PMDUtil(com.kyj.fx.voeditor.visual.util.PMDUtil) SimpleTextView(com.kyj.fx.voeditor.visual.component.text.SimpleTextView) ConfigResourceLoader(com.kyj.fx.voeditor.visual.momory.ConfigResourceLoader) DockTab(com.kyj.fx.voeditor.visual.component.dock.tab.DockTab) TreeView(javafx.scene.control.TreeView) JarWrapper(com.kyj.fx.voeditor.visual.loder.JarWrapper) FXML(javafx.fxml.FXML) SeparatorMenuItem(javafx.scene.control.SeparatorMenuItem) Priority(javafx.scene.layout.Priority) List(java.util.List) GagoyleParentBeforeLoad(com.kyj.fx.voeditor.visual.framework.GagoyleParentBeforeLoad) SpecTabPane(com.kyj.fx.voeditor.visual.words.spec.auto.msword.ui.tabs.SpecTabPane) GagoyleParentOnLoaded(com.kyj.fx.voeditor.visual.framework.GagoyleParentOnLoaded) Optional(java.util.Optional) LogViewComposite(com.kyj.fx.voeditor.visual.component.text.LogViewComposite) DateUtil(com.kyj.fx.voeditor.visual.util.DateUtil) ReadOnlyConsole(com.kyj.fx.voeditor.visual.component.console.ReadOnlyConsole) Scene(javafx.scene.Scene) DockTabPane(com.kyj.fx.voeditor.visual.component.dock.tab.DockTabPane) DesignerFxComposite(com.kyj.fx.voeditor.visual.component.pmd.DesignerFxComposite) BigTextView(com.kyj.fx.voeditor.visual.component.popup.BigTextView) JavaProcessMonitor(com.kyj.fx.voeditor.visual.component.bci.view.JavaProcessMonitor) MouseEvent(javafx.scene.input.MouseEvent) WebViewConsole(com.kyj.fx.voeditor.visual.component.console.WebViewConsole) FileWrapper(com.kyj.fx.voeditor.visual.component.FileWrapper) ProgramSpecUtil(com.kyj.fx.voeditor.visual.words.spec.auto.msword.util.ProgramSpecUtil) JavaTextView(com.kyj.fx.voeditor.visual.component.popup.JavaTextView) Tooltip(javafx.scene.control.Tooltip) GargoyleException(com.kyj.fx.voeditor.visual.exceptions.GargoyleException) KeyCode(javafx.scene.input.KeyCode) WebView(javafx.scene.web.WebView) ObjectProperty(javafx.beans.property.ObjectProperty) Logger(org.slf4j.Logger) CaptureScreenComposite(com.kyj.fx.voeditor.visual.component.capture.CaptureScreenComposite) ProxyServerComposite(com.kyj.fx.voeditor.visual.component.proxy.ProxyServerComposite) ValueUtil(com.kyj.fx.voeditor.visual.util.ValueUtil) FileInputStream(java.io.FileInputStream) ProjectFileTreeItemCreator(com.kyj.fx.voeditor.visual.component.ProjectFileTreeItemCreator) ActionEvent(javafx.event.ActionEvent) SystemConsole(com.kyj.fx.voeditor.visual.component.console.SystemConsole) Stage(javafx.stage.Stage) Closeable(java.io.Closeable) ExtensionFilter(javafx.stage.FileChooser.ExtensionFilter) InputStream(java.io.InputStream) SharedMemory(com.kyj.fx.voeditor.visual.momory.SharedMemory) Parent(javafx.scene.Parent) Image(javafx.scene.image.Image) FXMLLoader(javafx.fxml.FXMLLoader) JarWrapper(com.kyj.fx.voeditor.visual.loder.JarWrapper) ObservableList(javafx.collections.ObservableList) List(java.util.List) ImageView(javafx.scene.image.ImageView) TitledPane(javafx.scene.control.TitledPane) FileInputStream(java.io.FileInputStream) InputStream(java.io.InputStream) MenuItem(javafx.scene.control.MenuItem) SeparatorMenuItem(javafx.scene.control.SeparatorMenuItem) IOException(java.io.IOException) IOException(java.io.IOException) GargoyleException(com.kyj.fx.voeditor.visual.exceptions.GargoyleException) DockTab(com.kyj.fx.voeditor.visual.component.dock.tab.DockTab) File(java.io.File) WebViewConsole(com.kyj.fx.voeditor.visual.component.console.WebViewConsole) FXML(javafx.fxml.FXML)

Aggregations

GagoyleParentBeforeLoad (com.kyj.fx.voeditor.visual.framework.GagoyleParentBeforeLoad)2 GagoyleParentOnLoaded (com.kyj.fx.voeditor.visual.framework.GagoyleParentOnLoaded)2 ValueUtil (com.kyj.fx.voeditor.visual.util.ValueUtil)2 File (java.io.File)2 List (java.util.List)2 Properties (java.util.Properties)2 Parent (javafx.scene.Parent)2 Logger (org.slf4j.Logger)2 LoggerFactory (org.slf4j.LoggerFactory)2 FileWrapper (com.kyj.fx.voeditor.visual.component.FileWrapper)1 ImageViewPane (com.kyj.fx.voeditor.visual.component.ImageViewPane)1 JavaProjectFileTreeItem (com.kyj.fx.voeditor.visual.component.JavaProjectFileTreeItem)1 JavaProjectMemberFileTreeItem (com.kyj.fx.voeditor.visual.component.JavaProjectMemberFileTreeItem)1 PDFImageBasePane (com.kyj.fx.voeditor.visual.component.PDFImageBasePane)1 ProjectFileTreeItemCreator (com.kyj.fx.voeditor.visual.component.ProjectFileTreeItemCreator)1 ResultDialog (com.kyj.fx.voeditor.visual.component.ResultDialog)1 JavaProcessMonitor (com.kyj.fx.voeditor.visual.component.bci.view.JavaProcessMonitor)1 CaptureScreenComposite (com.kyj.fx.voeditor.visual.component.capture.CaptureScreenComposite)1 ReadOnlyConsole (com.kyj.fx.voeditor.visual.component.console.ReadOnlyConsole)1 ReadOnlySingletonConsole (com.kyj.fx.voeditor.visual.component.console.ReadOnlySingletonConsole)1