`
cutesunshineriver
  • 浏览: 201272 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

开发JDeveloper插件

阅读更多
想要做的事很简单,就是在Project下加两个菜单,第一个是流程移植,第二个是流程设置。

第一步,实现一个菜单上下文监听器。
package bms.processdeploy;

import oracle.ide.Context;
import oracle.ide.controller.ContextMenu;
import oracle.ide.controller.ContextMenuListener;
import oracle.ide.controller.IdeAction;
import oracle.ide.model.Element;
import oracle.ide.model.Project;

public class DeployContextMenuListener implements ContextMenuListener {

    public void menuWillShow(ContextMenu contextMenu) {
        Element e = contextMenu.getContext().getElement();
        if (e instanceof Project) {
            IdeAction action = IdeAction.find(ProcessDeployCommand.actionId());
            contextMenu.add(contextMenu.createMenuItem(action));
            
            IdeAction _action = IdeAction.find(ProcessPreferenceCommand.actionId());
            contextMenu.add(contextMenu.createMenuItem(_action));
        }
    }

    public void menuWillHide(ContextMenu contextMenu) {
    }

    public boolean handleDefaultAction(Context context) {
        return false;
    }
}

代码里面涉及的两个Action稍后再补充说明,Action是指菜单项点击之后系统对应的动作。

第二步,加入流程移植和流程设置的两个Action。
右键选择New Gallery,选择Client Tier下面的Extension Development,分别创建两个Action。
流程移植的控制器代码如下:
package bms.processdeploy;

import oracle.ide.Context;
import oracle.ide.Ide;
import oracle.ide.controller.Controller;
import oracle.ide.controller.IdeAction;
import oracle.ide.extension.RegisteredByExtension;
import oracle.ide.wizard.WizardManager;


/**
 * Controller for action bms.processdeploy.processdeploy.
 */
@RegisteredByExtension("bms.processdeploy")
public final class ProcessDeployController implements Controller {

    public boolean update(IdeAction action, Context context) {
        return true;
    }

    public boolean handleEvent(IdeAction action, Context context) {
        return false;
    }
}

流程移植的命令代码如下:
package bms.processdeploy;

import example.TempConvert;
import example.TempConvertSoap;

import java.io.File;

import java.io.FileInputStream;

import java.io.FileNotFoundException;

import java.io.IOException;

import oracle.ide.Context;
import oracle.ide.Ide;
import oracle.ide.controller.Command;
import oracle.ide.extension.RegisteredByExtension;

import oracle.javatools.dialogs.MessageDialog;

/**
 * Command handler for bms.processdeploy.processdeploy.
 */
@RegisteredByExtension("bms.processdeploy")
public final class ProcessDeployCommand extends Command {
    public ProcessDeployCommand() {
        super(actionId());
    }

    public int doit() {
        String msg = "";
        String dir = context.getProject().getBaseDirectory();
        File processDir = new File(dir + "/processes");
        if (processDir.exists()) {
            for(File processFile : processDir.listFiles()) {
                msg = processFile.getAbsolutePath();
                
                try {
                    FileInputStream fis = new FileInputStream(processFile);
                    byte[] buf = new byte[1024];
                    StringBuffer sb=new StringBuffer();
                    while((fis.read(buf))!=-1) {
                        sb.append(new String(buf));   
                        buf=new byte[1024];
                    }
                    System.out.println();
                    System.out.println(sb.toString());
                    
                    msg += ",流程移植成功!";
                } catch (FileNotFoundException e) {
                    msg += ",无法找到该文件!";
                } catch (IOException e) {
                    msg += ",读写异常!";
                }
            }
        } else {
            msg = "这不是一个流程项目!";
        }
        
        showMessageBox(msg);
        return OK;
    }

    private void showMessageBox(String msg) {
        String caption = "流程移植";
        TempConvert tempConvert = new TempConvert();
        TempConvertSoap tempConvertSoap = tempConvert.getTempConvertSoap();
        msg += "\n\nWebservice调用成功,输入0,返回" + tempConvertSoap.celsiusToFahrenheit("0");
        Ide.getStatusBar().setText(caption);
        MessageDialog.information(Ide.getMainWindow(), msg, caption, null);
    }

    /**
     * Returns the id of the action this command is associated with.
     *
     * @return the id of the action this command is associated with.
     * @throws IllegalStateException if the action this command is associated
     *    with is not registered.
     */
    public static int actionId() {
        final Integer cmdId = Ide.findCmdID("bms.processdeploy.processdeploy");
        if (cmdId == null)
            throw new IllegalStateException("Action bms.processdeploy.processdeploy not found.");
        return cmdId;
    }
}

流程设置的控制器代码如下:
package bms.processdeploy;

import oracle.ide.Context;
import oracle.ide.controller.Controller;
import oracle.ide.controller.IdeAction;
import oracle.ide.extension.RegisteredByExtension;


/**
 * Controller for action bms.processdeploy.processpreference.
 */
@RegisteredByExtension("bms.processdeploy")
public final class ProcessPreferenceController implements Controller {
    
    public boolean update(IdeAction action, Context context) {
        return true;
    }

    public boolean handleEvent(IdeAction action, Context context) {
        return false;
    }
}

流程设置的命令代码如下:
package bms.processdeploy;

import java.io.IOException;

import oracle.ide.Ide;
import oracle.ide.controller.Command;
import oracle.ide.extension.RegisteredByExtension;

/**
 * Command handler for bms.processdeploy.processpreference.
 */
@RegisteredByExtension("bms.processdeploy")
public final class ProcessPreferenceCommand extends Command {
    public ProcessPreferenceCommand() {
        super(actionId());
    }

    public int doit() {
        String url ="http://www.bmsoft.com.cn/";
        try {
            Process op = Runtime.getRuntime().exec("rundll32 url.dll,FileProtocolHandler " + url);
        } catch(IOException ex) {
            System.out.println(ex);
        }
        
        return OK;
    }

    /**
     * Returns the id of the action this command is associated with.
     *
     * @return the id of the action this command is associated with.
     * @throws IllegalStateException if the action this command is associated
     *    with is not registered.
     */
    public static int actionId() {
        final Integer cmdId =
            Ide.findCmdID("bms.processdeploy.processpreference");
        if (cmdId == null)
            throw new IllegalStateException("Action bms.processdeploy.processpreference not found.");
        return cmdId;
    }
}


第三步,请修改META-INF目录下的extension.xml,加入<context-menu-listeners>元素,在插件扩展里绑定上下文菜单的监听器。
<extension id="bms.processdeploy" version="1.0" esdk-version="1.0"
           rsbundle-class="bms.processdeploy.Res"
           xmlns="http://jcp.org/jsr/198/extension-manifest">
  <name>BMS Process Deploy</name>
  <owner>BMS</owner>
  <dependencies>
    <import>oracle.ide</import>
  </dependencies>
  <hooks>
    <!-- TODO Declare functionality provided by the bms.processdeploy extension. -->
    <jdeveloper-hook xmlns="http://xmlns.oracle.com/jdeveloper/1013/extension">
      <actions>
        <action id="bms.processdeploy.processdeploy">
          <properties>
            <property name="Name">流程移植</property>
            <property name="SmallIcon">${OracleIcons.TO_REF}</property>
            <property name="LongDescription">Process Deploy</property>
          </properties>
          <controller-class>bms.processdeploy.ProcessDeployController</controller-class>
          <command-class>bms.processdeploy.ProcessDeployCommand</command-class>
        </action>
        <action id="bms.processdeploy.processpreference">
          <properties>
            <property name="Name">流程设置</property>
            <property name="SmallIcon"></property>
            <property name="LongDescription">ProcessPreference</property>
          </properties>
          <controller-class>bms.processdeploy.ProcessPreferenceController</controller-class>
          <command-class>bms.processdeploy.ProcessPreferenceCommand</command-class>
        </action>
      </actions>
      
      <!--
        Install listeners to the navigator, editor, and structure pane (explorer)
        context menus so that we can install menu items for our action.
      -->
      <context-menu-listeners>
        <site idref="navigator">
          <listener-class>bms.processdeploy.DeployContextMenuListener</listener-class>
        </site>
      </context-menu-listeners>
      
    </jdeveloper-hook>
  </hooks>
</extension>


第四步,发布成插件。
首先,把项目部署成jar包,拷贝出该jar包,在同级目录建立一个META-INF目录,在META-INF目录下,新建一个bundle.xml,代码如下:
<update-bundle version="1.0" 
               xmlns="http://xmlns.oracle.com/jdeveloper/updatebundle" 
               xmlns:u="http://xmlns.oracle.com/jdeveloper/update"> 
  <!-- The id *MUST* match exactly the id in your extension.xml. --> 
  <u:update id="bms.processdeploy"> 
    <!-- The name of your extension as you want it to appear under the check for update menu --> 
    <u:name>ProcessDeploy</u:name> 
    <!-- The version *MUST* match exactly the version in your extension.xml. --> 
    <u:version>2</u:version> 
    <u:author>Sunny Zhou</u:author> 
  </u:update> 
</update-bundle> 

<u:update id="bms.processdeploy">,这个id一定要跟extension.xml里的extension的id一致。jar包的名字用id的名称,如bms.processdeploy.jar。
恭喜你,你成功了,赶紧从jdeveloper的check for update里去安装这个本地插件吧!
分享到:
评论

相关推荐

    How to develop extension in JDeveloper?

    研究这个示例可以帮助你理解JDeveloper插件开发的具体细节,如何定义MXML组件,以及如何编写相关的Java代码。 总的来说,开发JDeveloper扩展涉及到对JDeveloper架构的理解,利用MXML和Java实现自定义功能,以及对...

    Oracle Jdeveloper 10g开发手册

    10. **插件扩展**:JDeveloper拥有丰富的插件生态系统,开发者可以根据需要安装额外的插件来扩展其功能。 在"Oracle Jdeveloper 10g开发手册"中,你将找到关于这些特性和功能的详细指导,包括如何设置项目、创建和...

    JDeveloper全部图标资源

    Oracle JDeveloper是一款强大的集成开发环境(IDE),专为构建企业级Java应用程序而设计。它包含了全方位的工具,支持从设计、编码、调试到部署的整个软件开发生命周期。这款工具的图标资源是其用户界面的重要组成...

    JDeveloper 11g Overview

    #### 关于 Oracle JDeveloper 和其开发环境 **Oracle JDeveloper** 是一款由 Oracle 公司推出的集成开发环境(IDE),它为 Java、数据库、服务导向架构(SOA)等提供了全面的支持。这款工具自 2007 年以来已经历了...

    oracle jdeveloper3使用手册.

    Oracle JDeveloper 是一款由甲骨文公司(Oracle Corporation)开发的集成开发环境(IDE),主要用于构建Java应用程序,尤其是Java EE(Enterprise Edition)应用。这款工具提供了全面的开发、调试、测试和部署功能,...

    Jdeveloper 11g(11.1.1.6.0)连接SVN2.0

    Subversion(SVN)是广泛应用的一种版本控制系统,而JDeveloper是Oracle提供的一个集成开发环境(IDE),主要用于Java、Web和企业级应用的开发。本文将详细介绍如何使用JDeveloper 11g (11.1.1.6.0) 连接并操作SVN ...

    oracle 9i jdeveloper 的安装与基本使用技巧

    1. 插件扩展:JDeveloper允许安装插件来扩展其功能,如添加对新语言的支持,或提供更专业的开发工具。 2. 版本控制:集成版本控制系统如CVS或Subversion,可以帮助团队协作,跟踪代码变更。 3. 自定义模板:创建和...

    计算机软件-编程源码-Oracle 9i JDeveloper开发指南.zip

    8. **插件扩展**:JDeveloper的开放架构允许开发者或社区创建自定义插件,扩展其功能以满足特定需求。 学习Oracle 9i JDeveloper,开发者需要掌握以下几个关键知识点: - **Java基础**:熟悉Java语言是使用...

    Oracle XML Publisher与JDeveloper 10g集成

    这通常涉及到下载并安装XML Publisher的插件,然后在JDeveloper的首选项中配置XML Publisher的服务器连接信息。 2. **创建数据源**:在JDeveloper中,你可以定义数据源,这些数据源可以来自各种数据存储,如Oracle...

    Java开发工具和集成开发环境:选择最佳工具,提升开发效率

    Eclipse、IntelliJ IDEA、NetBeans、Visual Studio Code和JDeveloper是Java开发中最常见的IDE。Eclipse是一款开源的IDE,拥有强大的编辑器和插件系统,支持多种编程语言。IntelliJ IDEA是一款功能强大的商业化IDE,...

    OracleJDeveloper3使用手册

    9. **扩展性**:通过插件机制,开发者可以扩展JDeveloper的功能,满足特定的开发需求。 10. **帮助文档和社区**:Oracle JDeveloper 3附带详细的在线帮助文档,同时有活跃的开发者社区提供支持,解答技术问题,分享...

    PlugIns插件

    例如,SQL Developer中的JDeveloper插件能提供更强大的IDE功能,而Toad的Code Xpert插件则专注于增强代码质量和性能。 在实际应用中,插件的安装和配置通常是简单的,只需在IDE的扩展市场中搜索所需插件,然后按照...

    MAF 插件模型

    1. **定义插件项目**:在Eclipse或JDeveloper等IDE中创建一个新的MAF插件项目。你需要指定插件的ID、版本、依赖项等元数据。 2. **编写插件代码**:在项目中添加所需的Java类、资源文件和配置文件。这些类可以实现...

    JDeveloper Checkstyle plugin-开源

    JDeveloper Checkstyle Plugin 是一款专门为Oracle的JDeveloper集成开发环境(IDE)设计的开源插件。这款插件引入了Checkstyle工具的功能,Checkstyle是一个著名的静态代码分析工具,用于检查Java源代码是否符合特定...

    eclipse安装activiti需装eclipse插件.7z

    当我们想要在Eclipse中进行Activiti的开发时,通常需要安装相关的插件来提供支持。本文将详细介绍如何解决在高版本Eclipse上安装Activiti插件时遇到的"requires 'org.eclipse.emf.transaction 1.4.0' but it could ...

    java常见14种开发工具

    NetBeans尤其在Web和移动应用开发方面表现出色,且具有良好的可扩展性,允许开发者通过插件定制工作环境。 4. Borland的JBuilder:JBuilder是专为Java开发设计的强大IDE,尤其适合EJB和服务器端应用开发。它支持...

    java-plugin-glassgish-jdeveloper

    Java插件Glassfish-JDeveloper是针对Java开发人员的重要工具,它允许JDeveloper 12.1.3集成Glassfish服务器,以实现更高效、无缝的开发和部署流程。Glassfish是一个开源的应用服务器,由Oracle公司维护,支持Java EE...

Global site tag (gtag.js) - Google Analytics