Browse Source
Merge in DESIGN/design from ~LUCIAN.CHEN/design:release/10.0 to release/10.0 * commit '8eec120925afadc3200340e0a86dc18984ef23c5': REPORT-43744 【10.0.13】插件与jar包不匹配问题优化 REPORT-43744 【10.0.13】插件与jar包不匹配问题优化 REPORT-43744 【10.0.13】插件与jar包不匹配问题优化 REPORT-43744 【10.0.13】插件与jar包不匹配问题优化 REPORT-43744 【10.0.13】插件与jar包不匹配问题优化feature/big-screen
ju|剧浩宇
4 years ago
16 changed files with 493 additions and 93 deletions
@ -0,0 +1,108 @@
|
||||
package com.fr.env; |
||||
|
||||
import com.fr.design.actions.server.PluginManagerAction; |
||||
import com.fr.design.gui.ibutton.UIButton; |
||||
import com.fr.design.i18n.Toolkit; |
||||
import com.fr.design.layout.FRGUIPaneFactory; |
||||
import com.fr.design.utils.gui.GUICoreUtils; |
||||
import com.fr.general.FRFont; |
||||
import com.fr.general.GeneralContext; |
||||
import com.fr.general.IOUtils; |
||||
|
||||
import javax.swing.BorderFactory; |
||||
import javax.swing.Icon; |
||||
import javax.swing.JDialog; |
||||
import javax.swing.JLabel; |
||||
import javax.swing.JPanel; |
||||
import javax.swing.JTextArea; |
||||
import java.awt.BorderLayout; |
||||
import java.awt.Dimension; |
||||
import java.awt.FlowLayout; |
||||
import java.awt.Frame; |
||||
import java.awt.event.ActionEvent; |
||||
import java.awt.event.ActionListener; |
||||
import java.util.Locale; |
||||
|
||||
/** |
||||
* 插件启动失败提示窗 |
||||
*/ |
||||
public class PluginErrorRemindDialog extends JDialog implements ActionListener { |
||||
|
||||
public PluginErrorRemindDialog(Frame parent, String areaText) { |
||||
super(parent, true); |
||||
//上面的标签面板
|
||||
JPanel topPanel = FRGUIPaneFactory.createBorderLayout_L_Pane(); |
||||
JPanel imagePanel = new JPanel(); |
||||
Icon icon = IOUtils.readIcon("com/fr/design/images/warnings/warning5.png"); |
||||
|
||||
JLabel imageLabel = new JLabel(); |
||||
imageLabel.setIcon(icon); |
||||
imagePanel.add(imageLabel); |
||||
imagePanel.setPreferredSize(new Dimension(130, 100)); |
||||
|
||||
JPanel verticalPanel = FRGUIPaneFactory.createVerticalFlowLayout_S_Pane(true); |
||||
|
||||
JLabel label = new JLabel(Toolkit.i18nText("Fine-Design_Plugin_Error_Remind_Title")); |
||||
label.setFont(FRFont.getInstance().applySize(18).applyStyle(1)); |
||||
label.setPreferredSize(new Dimension(650, 100)); |
||||
|
||||
verticalPanel.add(label); |
||||
|
||||
topPanel.add(imagePanel, BorderLayout.WEST); |
||||
topPanel.add(verticalPanel, BorderLayout.CENTER); |
||||
topPanel.setBorder(BorderFactory.createEmptyBorder(10, 10, 0, 10)); |
||||
|
||||
//中间的文本域面板
|
||||
JPanel centerPanel = FRGUIPaneFactory.createBorderLayout_L_Pane(); |
||||
centerPanel.setBorder(BorderFactory.createEmptyBorder(0, 10, 10, 10)); |
||||
centerPanel.setPreferredSize(new Dimension(480, 320)); |
||||
|
||||
JTextArea checkArea = new JTextArea(areaText); |
||||
checkArea.setEnabled(false); |
||||
centerPanel.add(checkArea, BorderLayout.CENTER); |
||||
|
||||
UIButton cancelButton = new UIButton(Toolkit.i18nText("Fine-Design_Plugin_Error_Remind_Not_Deal_With")); |
||||
UIButton okButton = new UIButton(Toolkit.i18nText("Fine-Design_Plugin_Error_Remind_Deal_With")); |
||||
|
||||
cancelButton.addActionListener(this); |
||||
okButton.addActionListener(new PluginManagerActionAdapter(this)); |
||||
|
||||
// 按钮
|
||||
JPanel buttonPanel = new JPanel(new FlowLayout(FlowLayout.RIGHT)); |
||||
buttonPanel.setBorder(BorderFactory.createEmptyBorder(0, 10, 10, 10)); |
||||
buttonPanel.add(cancelButton); |
||||
buttonPanel.add(okButton); |
||||
|
||||
|
||||
this.setTitle(Toolkit.i18nText("Fine-Design_Basic_Tool_Tips")); |
||||
this.setResizable(false); |
||||
|
||||
this.add(topPanel, BorderLayout.NORTH); |
||||
this.add(centerPanel, BorderLayout.CENTER); |
||||
this.add(buttonPanel, BorderLayout.SOUTH); |
||||
this.setSize(new Dimension(GeneralContext.getLocale().equals(Locale.US) ? 750 : 600, 500)); |
||||
|
||||
GUICoreUtils.centerWindow(this); |
||||
} |
||||
|
||||
@Override |
||||
public void actionPerformed(ActionEvent e) { |
||||
this.dispose(); |
||||
} |
||||
|
||||
private static class PluginManagerActionAdapter extends PluginManagerAction { |
||||
|
||||
private JDialog jDialog; |
||||
|
||||
public PluginManagerActionAdapter(JDialog jDialog) { |
||||
this.jDialog = jDialog; |
||||
} |
||||
|
||||
@Override |
||||
public void actionPerformed(ActionEvent e) { |
||||
this.jDialog.dispose(); |
||||
super.actionPerformed(e); |
||||
} |
||||
} |
||||
|
||||
} |
@ -0,0 +1,155 @@
|
||||
package com.fr.design.extra; |
||||
|
||||
import com.fr.invoke.Reflect; |
||||
import com.fr.json.JSONObject; |
||||
import com.fr.plugin.context.PluginContext; |
||||
import com.fr.plugin.context.PluginMarker; |
||||
import com.fr.plugin.context.PluginMarkerAdapter; |
||||
import com.fr.plugin.error.PluginErrorCode; |
||||
import com.fr.plugin.manage.PluginManager; |
||||
import com.fr.plugin.manage.control.PluginTask; |
||||
import com.fr.plugin.manage.control.PluginTaskResult; |
||||
import org.easymock.EasyMock; |
||||
import org.junit.Assert; |
||||
import org.junit.Test; |
||||
import org.junit.runner.RunWith; |
||||
import org.powermock.api.easymock.PowerMock; |
||||
import org.powermock.core.classloader.annotations.PrepareForTest; |
||||
import org.powermock.modules.junit4.PowerMockRunner; |
||||
|
||||
import java.util.ArrayList; |
||||
import java.util.List; |
||||
|
||||
/** |
||||
* @author Lucian.Chen |
||||
* @version 10.0 |
||||
* Created by Lucian.Chen on 2020/12/17 |
||||
*/ |
||||
@RunWith(PowerMockRunner.class) |
||||
@PrepareForTest({PluginManager.class, PluginUtils.class}) |
||||
public class PluginOperateUtilsTest { |
||||
|
||||
@Test |
||||
public void testGetSuccessInfo() { |
||||
PluginTaskResult pluginTaskResult = EasyMock.mock(PluginTaskResult.class); |
||||
PluginTaskResult pluginTaskResult1 = EasyMock.mock(PluginTaskResult.class); |
||||
PluginTaskResult pluginTaskResult2 = EasyMock.mock(PluginTaskResult.class); |
||||
|
||||
List<PluginTaskResult> pluginTaskResults1 = new ArrayList<>(); |
||||
pluginTaskResults1.add(pluginTaskResult1); |
||||
List<PluginTaskResult> pluginTaskResults2 = new ArrayList<>(); |
||||
pluginTaskResults2.add(pluginTaskResult1); |
||||
pluginTaskResults2.add(pluginTaskResult2); |
||||
|
||||
PluginMarker pluginMarker1 = PluginMarker.create("plugin-1", "1.0"); |
||||
PluginMarker pluginMarker2 = PluginMarkerAdapter.create("plugin-2", "2.0", "name-2"); |
||||
PluginTask pluginTask1 = PluginTask.installTask(pluginMarker1); |
||||
PluginTask pluginTask2 = PluginTask.installTask(pluginMarker2); |
||||
|
||||
EasyMock.expect(pluginTaskResult.asList()).andReturn(pluginTaskResults1).times(2); |
||||
EasyMock.expect(pluginTaskResult.asList()).andReturn(pluginTaskResults2).times(2); |
||||
EasyMock.expect(pluginTaskResult1.getCurrentTask()).andReturn(pluginTask1).anyTimes(); |
||||
EasyMock.expect(pluginTaskResult2.getCurrentTask()).andReturn(pluginTask2).anyTimes(); |
||||
|
||||
EasyMock.expect(pluginTaskResult1.errorCode()).andReturn(PluginErrorCode.BelowSystem).anyTimes(); |
||||
EasyMock.expect(pluginTaskResult2.errorCode()).andReturn(PluginErrorCode.BeyondSystem).anyTimes(); |
||||
|
||||
PluginContext plugin1 = EasyMock.mock(PluginContext.class); |
||||
PluginContext plugin2 = EasyMock.mock(PluginContext.class); |
||||
EasyMock.expect(plugin1.getName()).andReturn("context-1").anyTimes(); |
||||
EasyMock.expect(plugin2.getName()).andReturn("context-2").anyTimes(); |
||||
PowerMock.mockStatic(PluginManager.class); |
||||
EasyMock.expect(PluginManager.getContext(pluginMarker1.getPluginID())) |
||||
.andReturn(plugin1).once().andReturn(null).once().andReturn(plugin1).once().andReturn(null).once(); |
||||
EasyMock.expect(PluginManager.getContext(pluginMarker2.getPluginID())) |
||||
.andReturn(plugin2).once().andReturn(null).once(); |
||||
|
||||
EasyMock.replay(pluginTaskResult, pluginTaskResult1, pluginTaskResult2, plugin1, plugin2); |
||||
PowerMock.replayAll(); |
||||
|
||||
// 1个
|
||||
Assert.assertEquals(PluginOperateUtils.getSuccessInfo(pluginTaskResult), "context-1Fine-Core_Plugin_Error_BelowSystem"); |
||||
Assert.assertEquals(PluginOperateUtils.getSuccessInfo(pluginTaskResult), "plugin-1Fine-Core_Plugin_Error_BelowSystem"); |
||||
|
||||
|
||||
// 2个
|
||||
Assert.assertEquals(PluginOperateUtils.getSuccessInfo(pluginTaskResult), "context-1Fine-Core_Plugin_Error_BelowSystem\ncontext-2Fine-Core_Plugin_Error_BeyondSystem"); |
||||
Assert.assertEquals(PluginOperateUtils.getSuccessInfo(pluginTaskResult), "plugin-1Fine-Core_Plugin_Error_BelowSystem\nname-2Fine-Core_Plugin_Error_BeyondSystem"); |
||||
|
||||
EasyMock.verify(pluginTaskResult, pluginTaskResult1, pluginTaskResult2, plugin1, plugin2); |
||||
PowerMock.verifyAll(); |
||||
|
||||
} |
||||
|
||||
|
||||
@Test |
||||
public void testGetPluginName() { |
||||
PluginContext pluginContext = EasyMock.mock(PluginContext.class); |
||||
EasyMock.expect(pluginContext.getName()).andReturn("pluginContext").once(); |
||||
|
||||
PluginMarker pluginMarker1 = PluginMarker.create("id-1", "1"); |
||||
PluginMarker pluginMarker2 = PluginMarkerAdapter.create("id-2", "2", "name-2"); |
||||
|
||||
EasyMock.replay(pluginContext); |
||||
|
||||
Assert.assertEquals(Reflect.on(PluginOperateUtils.class).call("getPluginName", null, null).get(), ""); |
||||
Assert.assertEquals(Reflect.on(PluginOperateUtils.class).call("getPluginName", pluginContext, pluginMarker1).get(), "pluginContext"); |
||||
Assert.assertEquals(Reflect.on(PluginOperateUtils.class).call("getPluginName", null, pluginMarker1).get(), "id-1"); |
||||
Assert.assertEquals(Reflect.on(PluginOperateUtils.class).call("getPluginName", null, pluginMarker2).get(), "name-2"); |
||||
|
||||
EasyMock.verify(pluginContext); |
||||
} |
||||
|
||||
@Test |
||||
public void testUpdateMarker2Online() { |
||||
|
||||
try { |
||||
PluginMarker pluginMarker = PluginMarker.create("plugin-1", "1.0"); |
||||
String pluginJson = "{\"id\": plugin-1,\"name\": \"图表(新特性)\",\"version\": \"8.6.16\"}"; |
||||
JSONObject object = new JSONObject(pluginJson); |
||||
|
||||
PowerMock.mockStatic(PluginUtils.class); |
||||
EasyMock.expect(PluginUtils.getLatestPluginInfo("plugin-1")).andReturn(object).once(); |
||||
EasyMock.expect(PluginUtils.getLatestPluginInfo("plugin-1")).andThrow(new NullPointerException()).once(); |
||||
|
||||
PowerMock.replayAll(); |
||||
|
||||
PluginMarker marker1 = PluginOperateUtils.updateMarker2Online(pluginMarker); |
||||
PluginMarker marker2 = PluginOperateUtils.updateMarker2Online(pluginMarker); |
||||
|
||||
Assert.assertTrue(marker1 instanceof PluginMarkerAdapter); |
||||
Assert.assertEquals(marker1.getPluginID(), "plugin-1"); |
||||
Assert.assertEquals(marker1.getVersion(), "1.0"); |
||||
Assert.assertEquals(((PluginMarkerAdapter) marker1).getPluginName(), "图表(新特性)"); |
||||
Assert.assertEquals(marker2, pluginMarker); |
||||
|
||||
PowerMock.verifyAll(); |
||||
} catch (Exception e) { |
||||
Assert.fail(); |
||||
} |
||||
|
||||
} |
||||
|
||||
|
||||
@Test |
||||
public void testUpdatePluginOnline() { |
||||
try { |
||||
PluginMarker pluginMarker = PluginMarker.create("plugin-1", "1.0"); |
||||
String pluginJson = "{\"id\": plugin-1,\"name\": \"图表(新特性)\",\"version\": \"8.6.16\"}"; |
||||
JSONObject object = new JSONObject(pluginJson); |
||||
|
||||
PowerMock.mockStatic(PluginUtils.class); |
||||
EasyMock.expect(PluginUtils.getLatestPluginInfo("plugin-1")).andReturn(object).once(); |
||||
EasyMock.expect(PluginUtils.getInstalledPluginMarkerByID("plugin-1")).andReturn(pluginMarker).once(); |
||||
|
||||
PowerMock.replayAll(); |
||||
|
||||
PluginOperateUtils.updatePluginOnline(pluginMarker, null); |
||||
|
||||
PowerMock.verifyAll(); |
||||
} catch (Exception e) { |
||||
Assert.fail(); |
||||
} |
||||
} |
||||
|
||||
} |
@ -0,0 +1,23 @@
|
||||
package com.fr.design.extra; |
||||
|
||||
import com.fr.invoke.Reflect; |
||||
import org.junit.Assert; |
||||
import org.junit.Test; |
||||
|
||||
/** |
||||
* @author Lucian.Chen |
||||
* @version 10.0 |
||||
* Created by Lucian.Chen on 2020/12/18 |
||||
*/ |
||||
public class PluginUtilsTest { |
||||
|
||||
@Test |
||||
public void testIsCompatibleCurrentEnv() { |
||||
Assert.assertFalse(Reflect.on(PluginUtils.class).call("isCompatibleCurrentEnv", "~9.0").get()); |
||||
Assert.assertTrue(Reflect.on(PluginUtils.class).call("isCompatibleCurrentEnv", "9.0").get()); |
||||
Assert.assertTrue(Reflect.on(PluginUtils.class).call("isCompatibleCurrentEnv", "9~").get()); |
||||
Assert.assertTrue(Reflect.on(PluginUtils.class).call("isCompatibleCurrentEnv", "10").get()); |
||||
Assert.assertFalse(Reflect.on(PluginUtils.class).call("isCompatibleCurrentEnv", "11").get()); |
||||
} |
||||
|
||||
} |
@ -0,0 +1,25 @@
|
||||
package com.fr.design.mainframe.alphafine.search.manager.impl; |
||||
|
||||
|
||||
import com.fr.invoke.Reflect; |
||||
import org.junit.Assert; |
||||
import org.junit.Test; |
||||
|
||||
/** |
||||
* @author Lucian.Chen |
||||
* @version 10.0 |
||||
* Created by Lucian.Chen on 2020/12/17 |
||||
*/ |
||||
public class PluginSearchManagerTest { |
||||
|
||||
@Test |
||||
public void testIsCompatibleCurrentEnv() { |
||||
|
||||
Assert.assertFalse(Reflect.on(PluginSearchManager.class).call("isCompatibleCurrentEnv", "~9.0").get()); |
||||
Assert.assertTrue(Reflect.on(PluginSearchManager.class).call("isCompatibleCurrentEnv", "9.0").get()); |
||||
Assert.assertTrue(Reflect.on(PluginSearchManager.class).call("isCompatibleCurrentEnv", "9~").get()); |
||||
Assert.assertTrue(Reflect.on(PluginSearchManager.class).call("isCompatibleCurrentEnv", "10").get()); |
||||
Assert.assertFalse(Reflect.on(PluginSearchManager.class).call("isCompatibleCurrentEnv", "11").get()); |
||||
} |
||||
|
||||
} |
Loading…
Reference in new issue