JDeveloper 플러그인 개발
11944 단어 pluginJDeveloper
첫 번째 단계는 메뉴 상하문 감청기를 실현하는 것이다.
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 += "
Webservice , 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,
<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>
4단계, 플러그인으로 발표.
우선, 프로젝트를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>
축하합니다. 성공하셨습니다. 어서 jdeveloper의 check for update에서 이 로컬 플러그인을 설치하십시오.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
플러그인을 사용하여 관리자 측에 탭을 추가하는 방법 nopCommerce 4.3이 문서에서는 플러그인을 사용하여 관리 측 에 탭을 추가하는 방법을 설명합니다. 다음은 nopCommerce 4.3에서 플러그인을 사용하여 관리자 측에 탭을 추가하는 단계입니다. 이 글에서는 관리자 주문 편집 페이지...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.