richie
6 years ago
4 changed files with 9 additions and 411 deletions
@ -1,390 +0,0 @@ |
|||||||
package com.fr.design.upm; |
|
||||||
|
|
||||||
import com.fr.base.passport.FinePassportManager; |
|
||||||
import com.fr.config.MarketConfig; |
|
||||||
import com.fr.decision.webservice.v10.plugin.helper.category.impl.UpmResourceLoader; |
|
||||||
import com.fr.design.bridge.exec.JSBridge; |
|
||||||
import com.fr.design.bridge.exec.JSCallback; |
|
||||||
import com.fr.design.extra.PluginOperateUtils; |
|
||||||
import com.fr.design.extra.PluginUtils; |
|
||||||
import com.fr.design.extra.exe.GetInstalledPluginsExecutor; |
|
||||||
import com.fr.design.extra.exe.GetPluginCategoriesExecutor; |
|
||||||
import com.fr.design.extra.exe.GetPluginFromStoreExecutor; |
|
||||||
import com.fr.design.extra.exe.PluginLoginExecutor; |
|
||||||
import com.fr.design.extra.exe.ReadUpdateOnlineExecutor; |
|
||||||
import com.fr.design.extra.exe.SearchOnlineExecutor; |
|
||||||
import com.fr.design.i18n.Toolkit; |
|
||||||
import com.fr.design.upm.event.CertificateEvent; |
|
||||||
import com.fr.design.upm.event.DownloadEvent; |
|
||||||
import com.fr.design.upm.exec.UpmBrowserExecutor; |
|
||||||
import com.fr.design.upm.task.UpmTaskWorker; |
|
||||||
import com.fr.event.EventDispatcher; |
|
||||||
import com.fr.general.CloudCenter; |
|
||||||
import com.fr.general.GeneralUtils; |
|
||||||
import com.fr.json.JSONObject; |
|
||||||
import com.fr.log.FineLoggerFactory; |
|
||||||
import com.fr.plugin.context.PluginMarker; |
|
||||||
import com.fr.stable.ArrayUtils; |
|
||||||
import com.fr.stable.StringUtils; |
|
||||||
import com.teamdev.jxbrowser.chromium.Browser; |
|
||||||
import com.teamdev.jxbrowser.chromium.JSArray; |
|
||||||
import com.teamdev.jxbrowser.chromium.JSFunction; |
|
||||||
import com.teamdev.jxbrowser.chromium.JSObject; |
|
||||||
|
|
||||||
import javax.swing.*; |
|
||||||
import javax.swing.filechooser.FileNameExtensionFilter; |
|
||||||
import java.awt.*; |
|
||||||
import java.io.File; |
|
||||||
import java.net.URI; |
|
||||||
import java.util.ArrayList; |
|
||||||
import java.util.List; |
|
||||||
import java.util.concurrent.Callable; |
|
||||||
import java.util.concurrent.FutureTask; |
|
||||||
import java.util.concurrent.RunnableFuture; |
|
||||||
|
|
||||||
/** |
|
||||||
* @author richie |
|
||||||
* @version 10.0 |
|
||||||
* Created by richie on 2019-04-12 |
|
||||||
* 桥接Java和JavaScript的类 |
|
||||||
*/ |
|
||||||
public class UpmBridge { |
|
||||||
|
|
||||||
public static UpmBridge getBridge(Browser browser) { |
|
||||||
return new UpmBridge(browser); |
|
||||||
} |
|
||||||
|
|
||||||
private JSObject window; |
|
||||||
|
|
||||||
private UpmBridge(Browser browser) { |
|
||||||
this.window = browser.executeJavaScriptAndReturnValue("window").asObject(); |
|
||||||
} |
|
||||||
|
|
||||||
public void startDownload() { |
|
||||||
try { |
|
||||||
UpmResourceLoader.INSTANCE.download(); |
|
||||||
UpmResourceLoader.INSTANCE.install(); |
|
||||||
} catch (Exception e) { |
|
||||||
FineLoggerFactory.getLogger().error(e.getMessage(), e); |
|
||||||
} |
|
||||||
EventDispatcher.fire(DownloadEvent.FINISH, "start"); |
|
||||||
} |
|
||||||
|
|
||||||
@JSBridge |
|
||||||
public String i18nText(String key) { |
|
||||||
return Toolkit.i18nText(key); |
|
||||||
} |
|
||||||
|
|
||||||
@JSBridge |
|
||||||
public void closeWindow() { |
|
||||||
UpmFinder.closeWindow(); |
|
||||||
} |
|
||||||
|
|
||||||
|
|
||||||
@JSBridge |
|
||||||
public boolean isDesigner() { |
|
||||||
return true; |
|
||||||
} |
|
||||||
|
|
||||||
@JSBridge |
|
||||||
public void getPackInfo(final JSFunction callback) { |
|
||||||
callback.invoke(window, StringUtils.EMPTY); |
|
||||||
} |
|
||||||
|
|
||||||
/** |
|
||||||
* 在线获取插件分类 |
|
||||||
* |
|
||||||
* @param callback 回调函数 |
|
||||||
*/ |
|
||||||
@JSBridge |
|
||||||
public void getPluginCategories(final JSFunction callback) { |
|
||||||
UpmTaskWorker<Void> task = new UpmTaskWorker<>(new JSCallback(UpmBrowserExecutor.create(window, callback)), new GetPluginCategoriesExecutor()); |
|
||||||
task.execute(); |
|
||||||
} |
|
||||||
|
|
||||||
/** |
|
||||||
* 根据条件获取在线插件 |
|
||||||
* |
|
||||||
* @param info 插件信息 |
|
||||||
* @param callback 回调函数 |
|
||||||
*/ |
|
||||||
@JSBridge |
|
||||||
public void getPluginFromStoreNew(String info, final JSFunction callback) { |
|
||||||
UpmTaskWorker<Void> task = new UpmTaskWorker<>(new JSCallback(UpmBrowserExecutor.create(window, callback)), new GetPluginFromStoreExecutor(new JSONObject(info))); |
|
||||||
task.execute(); |
|
||||||
} |
|
||||||
|
|
||||||
/** |
|
||||||
* 已安装插件检查更新 |
|
||||||
*/ |
|
||||||
@JSBridge |
|
||||||
public void readUpdateOnline(final JSFunction callback) { |
|
||||||
UpmTaskWorker<Void> task = new UpmTaskWorker<>(new JSCallback(UpmBrowserExecutor.create(window, callback)), new ReadUpdateOnlineExecutor()); |
|
||||||
task.execute(); |
|
||||||
} |
|
||||||
|
|
||||||
/** |
|
||||||
* 获取已经安装的插件的数组 |
|
||||||
*/ |
|
||||||
@JSBridge |
|
||||||
public void getInstalledPlugins(final JSFunction callback) { |
|
||||||
UpmTaskWorker<Void> task = new UpmTaskWorker<>(new JSCallback(UpmBrowserExecutor.create(window, callback)), new GetInstalledPluginsExecutor()); |
|
||||||
task.execute(); |
|
||||||
} |
|
||||||
|
|
||||||
/** |
|
||||||
* 从插件服务器上更新选中的插件 |
|
||||||
* |
|
||||||
* @param pluginIDs 插件集合 |
|
||||||
*/ |
|
||||||
@JSBridge |
|
||||||
public void updatePluginOnline(Object pluginIDs, final JSFunction callback) { |
|
||||||
JSCallback jsCallback = new JSCallback(UpmBrowserExecutor.create(window, callback)); |
|
||||||
List<PluginMarker> pluginMarkerList = new ArrayList<>(); |
|
||||||
if (pluginIDs instanceof String) { |
|
||||||
pluginMarkerList.add(PluginUtils.createPluginMarker(pluginIDs.toString())); |
|
||||||
} else if (pluginIDs instanceof JSArray) { |
|
||||||
JSArray pluginInfos = (JSArray) pluginIDs; |
|
||||||
for (int i = 0, len = pluginInfos.length(); i < len; i++) { |
|
||||||
String value = pluginInfos.get(i).asString().getValue(); |
|
||||||
pluginMarkerList.add(PluginUtils.createPluginMarker(value)); |
|
||||||
} |
|
||||||
} |
|
||||||
PluginOperateUtils.updatePluginOnline(pluginMarkerList, jsCallback); |
|
||||||
} |
|
||||||
|
|
||||||
/** |
|
||||||
* 搜索在线插件 |
|
||||||
* |
|
||||||
* @param keyword 关键字 |
|
||||||
*/ |
|
||||||
@JSBridge |
|
||||||
public void searchPlugin(String keyword, final JSFunction callback) { |
|
||||||
UpmTaskWorker<Void> worker = new UpmTaskWorker<>(new JSCallback(UpmBrowserExecutor.create(window, callback)), new SearchOnlineExecutor(keyword)); |
|
||||||
worker.execute(); |
|
||||||
} |
|
||||||
|
|
||||||
/** |
|
||||||
* 从磁盘上选择插件安装包进行安装 |
|
||||||
* |
|
||||||
* @param filePath 插件包的路径 |
|
||||||
*/ |
|
||||||
@JSBridge |
|
||||||
public void installPluginFromDisk(final String filePath, final JSFunction callback) { |
|
||||||
JSCallback jsCallback = new JSCallback(UpmBrowserExecutor.create(window, callback)); |
|
||||||
File file = new File(filePath); |
|
||||||
PluginOperateUtils.installPluginFromDisk(file, jsCallback); |
|
||||||
} |
|
||||||
|
|
||||||
/** |
|
||||||
* 卸载当前选中的插件 |
|
||||||
* |
|
||||||
* @param pluginInfo 插件信息 |
|
||||||
*/ |
|
||||||
@JSBridge |
|
||||||
public void uninstallPlugin(final String pluginInfo, final boolean isForce, final JSFunction callback) { |
|
||||||
JSCallback jsCallback = new JSCallback(UpmBrowserExecutor.create(window, callback)); |
|
||||||
PluginOperateUtils.uninstallPlugin(pluginInfo, isForce, jsCallback); |
|
||||||
} |
|
||||||
|
|
||||||
/** |
|
||||||
* 从插件服务器上安装插件 |
|
||||||
* |
|
||||||
* @param pluginInfo 插件的ID |
|
||||||
* @param callback 回调函数 |
|
||||||
*/ |
|
||||||
@JSBridge |
|
||||||
public void installPluginOnline(final String pluginInfo, final JSFunction callback) { |
|
||||||
JSCallback jsCallback = new JSCallback(UpmBrowserExecutor.create(window, callback)); |
|
||||||
PluginMarker pluginMarker = PluginUtils.createPluginMarker(pluginInfo); |
|
||||||
PluginOperateUtils.installPluginOnline(pluginMarker, jsCallback); |
|
||||||
} |
|
||||||
|
|
||||||
/** |
|
||||||
* 从磁盘上选择插件安装包进行插件升级 |
|
||||||
* |
|
||||||
* @param filePath 插件包的路径 |
|
||||||
*/ |
|
||||||
public void updatePluginFromDisk(String filePath, final JSFunction callback) { |
|
||||||
JSCallback jsCallback = new JSCallback(UpmBrowserExecutor.create(window, callback)); |
|
||||||
File file = new File(filePath); |
|
||||||
PluginOperateUtils.updatePluginFromDisk(file, jsCallback); |
|
||||||
} |
|
||||||
|
|
||||||
/** |
|
||||||
* 修改选中的插件的活跃状态 |
|
||||||
* |
|
||||||
* @param pluginID 插件ID |
|
||||||
*/ |
|
||||||
@JSBridge |
|
||||||
public void setPluginActive(String pluginID, final JSFunction callback) { |
|
||||||
JSCallback jsCallback = new JSCallback(UpmBrowserExecutor.create(window, callback)); |
|
||||||
PluginOperateUtils.setPluginActive(pluginID, jsCallback); |
|
||||||
} |
|
||||||
|
|
||||||
/** |
|
||||||
* 选择文件对话框 |
|
||||||
* |
|
||||||
* @return 选择的文件的路径 |
|
||||||
*/ |
|
||||||
@JSBridge |
|
||||||
public String showFileChooser() { |
|
||||||
return showFileChooserWithFilter(StringUtils.EMPTY, StringUtils.EMPTY); |
|
||||||
} |
|
||||||
|
|
||||||
/** |
|
||||||
* 选择文件对话框 |
|
||||||
* |
|
||||||
* @param des 过滤文件描述 |
|
||||||
* @param filter 文件的后缀 |
|
||||||
* @return 选择的文件的路径 |
|
||||||
* 这里换用JFileChooser会卡死,不知道为什么 |
|
||||||
*/ |
|
||||||
@JSBridge |
|
||||||
public String showFileChooserWithFilter(final String des, final String filter) { |
|
||||||
RunnableFuture<String> future = new FutureTask<>(new Callable<String>() { |
|
||||||
@Override |
|
||||||
public String call() { |
|
||||||
JFileChooser fileChooser = new JFileChooser(); |
|
||||||
fileChooser.setFileSelectionMode(JFileChooser.FILES_ONLY); |
|
||||||
|
|
||||||
if (StringUtils.isNotEmpty(filter)) { |
|
||||||
fileChooser.setFileFilter(new FileNameExtensionFilter(des, UpmUtils.findMatchedExtension(filter))); |
|
||||||
} |
|
||||||
|
|
||||||
int result = fileChooser.showOpenDialog(UpmFinder.getDialog()); |
|
||||||
if (result == JFileChooser.APPROVE_OPTION) { |
|
||||||
return fileChooser.getSelectedFile().getAbsolutePath(); |
|
||||||
} |
|
||||||
return null; |
|
||||||
} |
|
||||||
}); |
|
||||||
SwingUtilities.invokeLater(future); |
|
||||||
try { |
|
||||||
return future.get(); |
|
||||||
} catch (Exception e) { |
|
||||||
FineLoggerFactory.getLogger().error(e.getMessage(), e); |
|
||||||
} |
|
||||||
return null; |
|
||||||
} |
|
||||||
|
|
||||||
/** |
|
||||||
* 选择文件对话框 |
|
||||||
* |
|
||||||
* @param des 过滤文件描述 |
|
||||||
* @param args 文件的后缀 |
|
||||||
* @return 选择的文件的路径 |
|
||||||
*/ |
|
||||||
@JSBridge |
|
||||||
public String showFileChooserWithFilters(final String des, final Object args) { |
|
||||||
RunnableFuture<String> future = new FutureTask<>(new Callable<String>() { |
|
||||||
@Override |
|
||||||
public String call() { |
|
||||||
JFileChooser fileChooser = new JFileChooser(); |
|
||||||
List<String> filterList = new ArrayList<>(); |
|
||||||
if (args instanceof String) { |
|
||||||
filterList.add(GeneralUtils.objectToString(args)); |
|
||||||
} else if (args instanceof JSArray) { |
|
||||||
JSArray array = (JSArray)args; |
|
||||||
for (int i = 0, len = array.length(); i < len; i ++) { |
|
||||||
filterList.add(array.get(i).getStringValue()); |
|
||||||
} |
|
||||||
} |
|
||||||
String[] filters = filterList.toArray(new String[0]); |
|
||||||
if (ArrayUtils.isNotEmpty(filters)) { |
|
||||||
FileNameExtensionFilter filter = new FileNameExtensionFilter(des, UpmUtils.findMatchedExtension(filters)); |
|
||||||
fileChooser.setFileFilter(filter); |
|
||||||
} |
|
||||||
int result = fileChooser.showOpenDialog(UpmFinder.getDialog()); |
|
||||||
if (result == JFileChooser.APPROVE_OPTION) { |
|
||||||
return fileChooser.getSelectedFile().getAbsolutePath(); |
|
||||||
} |
|
||||||
return null; |
|
||||||
} |
|
||||||
}); |
|
||||||
SwingUtilities.invokeLater(future); |
|
||||||
try { |
|
||||||
return future.get(); |
|
||||||
} catch (Exception e) { |
|
||||||
FineLoggerFactory.getLogger().error(e.getMessage(), e); |
|
||||||
} |
|
||||||
return null; |
|
||||||
} |
|
||||||
|
|
||||||
////////登录相关///////
|
|
||||||
|
|
||||||
/** |
|
||||||
* 获取系统登录的用户名 |
|
||||||
*/ |
|
||||||
@JSBridge |
|
||||||
public String getLoginInfo(final JSFunction callback) { |
|
||||||
registerLoginInfo(callback); |
|
||||||
return MarketConfig.getInstance().getBbsUsername(); |
|
||||||
} |
|
||||||
|
|
||||||
/** |
|
||||||
* 系统登录注册 |
|
||||||
* |
|
||||||
* @param callback 回调函数 |
|
||||||
*/ |
|
||||||
@JSBridge |
|
||||||
public void registerLoginInfo(final JSFunction callback) { |
|
||||||
JSCallback jsCallback = new JSCallback(UpmBrowserExecutor.create(window, callback)); |
|
||||||
String username = MarketConfig.getInstance().getBbsUsername(); |
|
||||||
if (StringUtils.isEmpty(username)) { |
|
||||||
jsCallback.execute(StringUtils.EMPTY); |
|
||||||
EventDispatcher.fire(CertificateEvent.LOGOUT, StringUtils.EMPTY); |
|
||||||
} else { |
|
||||||
jsCallback.execute(username); |
|
||||||
EventDispatcher.fire(CertificateEvent.LOGIN, username); |
|
||||||
} |
|
||||||
} |
|
||||||
|
|
||||||
|
|
||||||
/** |
|
||||||
* 设计器端的用户登录 |
|
||||||
* |
|
||||||
* @param username 用户名 |
|
||||||
* @param password 密码 |
|
||||||
* @param callback 回调函数 |
|
||||||
*/ |
|
||||||
@JSBridge |
|
||||||
public void defaultLogin(String username, String password, final JSFunction callback) { |
|
||||||
UpmTaskWorker<Void> worker = new UpmTaskWorker<>(new JSCallback(UpmBrowserExecutor.create(window, callback)), new PluginLoginExecutor(username, password)); |
|
||||||
worker.execute(); |
|
||||||
} |
|
||||||
|
|
||||||
/** |
|
||||||
* 清除用户信息 |
|
||||||
*/ |
|
||||||
public void clearUserInfo() { |
|
||||||
MarketConfig.getInstance().setInShowBBsName(StringUtils.EMPTY); |
|
||||||
FinePassportManager.getInstance().logout(); |
|
||||||
EventDispatcher.fire(CertificateEvent.LOGOUT, StringUtils.EMPTY); |
|
||||||
} |
|
||||||
|
|
||||||
/** |
|
||||||
* 打开论坛消息界面 |
|
||||||
*/ |
|
||||||
@JSBridge |
|
||||||
public void getPriviteMessage() { |
|
||||||
try { |
|
||||||
String loginUrl = CloudCenter.getInstance().acquireUrlByKind("bbs.default"); |
|
||||||
Desktop.getDesktop().browse(new URI(loginUrl)); |
|
||||||
} catch (Exception exp) { |
|
||||||
FineLoggerFactory.getLogger().info(exp.getMessage()); |
|
||||||
} |
|
||||||
} |
|
||||||
|
|
||||||
/** |
|
||||||
* 忘记密码 |
|
||||||
*/ |
|
||||||
@JSBridge |
|
||||||
public void forgetHref() { |
|
||||||
try { |
|
||||||
Desktop.getDesktop().browse(new URI(CloudCenter.getInstance().acquireUrlByKind("bbs.reset"))); |
|
||||||
} catch (Exception e) { |
|
||||||
FineLoggerFactory.getLogger().info(e.getMessage()); |
|
||||||
} |
|
||||||
} |
|
||||||
} |
|
Loading…
Reference in new issue