forked from fanruan/design
Browse Source
* commit 'b2a8e3cdaf6c1c00e2fba5bd7c3aa5edc4c35e31': REPORT-47694 海外弹窗尺寸统一管理 REPORT-48228 插件实现的插件管理不受shouldShowPlugin限制 REPORT-47901 填报-导入excel-双向扩展是,表头部分扩展,多行导入数据丢失 REPORT-48228 【10.0.15】国际化接口-插件jar包不匹配弹窗接口feature/10.0
superman
4 years ago
12 changed files with 245 additions and 11 deletions
@ -0,0 +1,20 @@
|
||||
package com.fr.design.fun; |
||||
|
||||
import com.fr.design.actions.UpdateAction; |
||||
import com.fr.stable.fun.mark.Selectable; |
||||
|
||||
/** |
||||
* 替换插件管理入口 |
||||
* @author Lucian.Chen |
||||
* @version 10.0 |
||||
* Created by Lucian.Chen on 2021/2/20 |
||||
*/ |
||||
public interface PluginManagerProvider extends Selectable { |
||||
|
||||
String MARK_STRING = "PluginManagerProvider"; |
||||
|
||||
int CURRENT_LEVEL = 1; |
||||
|
||||
// 插件管理
|
||||
UpdateAction pluginManagerAction(); |
||||
} |
@ -0,0 +1,30 @@
|
||||
package com.fr.design.fun.impl; |
||||
|
||||
import com.fr.design.fun.PluginManagerProvider; |
||||
import com.fr.stable.fun.assist.Selector; |
||||
import com.fr.stable.fun.impl.AbstractProvider; |
||||
import com.fr.stable.fun.mark.API; |
||||
|
||||
/** |
||||
* @author Lucian.Chen |
||||
* @version 10.0 |
||||
* Created by Lucian.Chen on 2021/2/20 |
||||
*/ |
||||
@API(level = PluginManagerProvider.CURRENT_LEVEL) |
||||
public abstract class AbstractPluginManagerProvider extends AbstractProvider implements PluginManagerProvider { |
||||
|
||||
public int currentAPILevel() { |
||||
return CURRENT_LEVEL; |
||||
} |
||||
|
||||
@Override |
||||
public String mark4Provider() { |
||||
return getClass().getName(); |
||||
} |
||||
|
||||
@Override |
||||
public Selector selector() { |
||||
return Selector.ALWAYS; |
||||
} |
||||
|
||||
} |
@ -0,0 +1,57 @@
|
||||
package com.fr.design.i18n; |
||||
|
||||
import com.fr.design.dialog.BasicDialog; |
||||
import com.fr.general.GeneralContext; |
||||
import com.fr.locale.LocaleManager; |
||||
import com.fr.locale.impl.FineLocaleManager; |
||||
|
||||
import java.awt.Dimension; |
||||
import java.util.Map; |
||||
|
||||
/** |
||||
* Created by kerry on 2/23/21 |
||||
*/ |
||||
public class DesignSizeI18nManager { |
||||
private static final String I18N_DIMENSION_PATH = "com/fr/design/i18n/dimension"; |
||||
private static final String DIMENSION_REGEX = "^[1-9]\\d*\\*[1-9]\\d*$"; |
||||
private static final String SEPARATOR_REGEX = "\\*"; |
||||
private static final int WIDTH_INDEX = 0; |
||||
private static final int HEIGHT_INDEX = 1; |
||||
private static final int SPLIT_LENGTH = 2; |
||||
|
||||
private static DesignSizeI18nManager instance = new DesignSizeI18nManager(); |
||||
|
||||
public static DesignSizeI18nManager getInstance() { |
||||
return instance; |
||||
} |
||||
|
||||
private LocaleManager localeManager = FineLocaleManager.create(); |
||||
|
||||
private DesignSizeI18nManager() { |
||||
localeManager.addResource(I18N_DIMENSION_PATH); |
||||
} |
||||
|
||||
public Dimension i18nDimension(String key) { |
||||
if (!containKey(key)) { |
||||
return BasicDialog.DEFAULT; |
||||
} |
||||
String dimension = localeManager.getLocalBundle(GeneralContext.getLocale()).getText(localeManager, key); |
||||
return parseDimensionFromText(dimension); |
||||
} |
||||
|
||||
private boolean containKey(String key) { |
||||
Map<String, String> localeKV = localeManager.getLocalBundle(GeneralContext.getLocale()).getKV(localeManager); |
||||
return localeKV != null && localeKV.containsKey(key); |
||||
} |
||||
|
||||
private Dimension parseDimensionFromText(String dimensionText) { |
||||
if (!dimensionText.matches(DIMENSION_REGEX)) { |
||||
return BasicDialog.DEFAULT; |
||||
} |
||||
String[] arr = dimensionText.split(SEPARATOR_REGEX); |
||||
if (arr.length < SPLIT_LENGTH) { |
||||
return BasicDialog.DEFAULT; |
||||
} |
||||
return new Dimension(Integer.parseInt(arr[WIDTH_INDEX]), Integer.parseInt(arr[HEIGHT_INDEX])); |
||||
} |
||||
} |
@ -0,0 +1 @@
|
||||
com.fr.design.report.ReportColumnsPane=800*600 |
@ -0,0 +1 @@
|
||||
# \u9ED8\u8BA4\u4E3A\u7C7B\u7684\u5168\u9650\u5B9A\u540D\uFF08\u53EF\u81EA\u5B9A\u4E49key\uFF09= width * height |
@ -0,0 +1,80 @@
|
||||
package com.fr.design.i18n; |
||||
|
||||
import com.fr.general.GeneralContext; |
||||
import com.fr.invoke.Reflect; |
||||
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.awt.Dimension; |
||||
import java.util.Locale; |
||||
|
||||
/** |
||||
* Created by kerry on 2/24/21 |
||||
*/ |
||||
@RunWith(PowerMockRunner.class) |
||||
@PrepareForTest(GeneralContext.class) |
||||
public class DesignSizeI18nManagerTest { |
||||
@Test |
||||
public void testI18nDimension() { |
||||
Dimension dimension = DesignSizeI18nManager.getInstance().i18nDimension("com.fr.design.report.ReportColumnsPane"); |
||||
validDimension(dimension, 660, 600); |
||||
|
||||
PowerMock.mockStatic(GeneralContext.class); |
||||
EasyMock.expect(GeneralContext.getLocale()).andReturn(Locale.ENGLISH).times(3); |
||||
PowerMock.replayAll(); |
||||
|
||||
dimension = DesignSizeI18nManager.getInstance().i18nDimension("com.fr.design.report.ReportColumnsPane"); |
||||
validDimension(dimension, 800, 600); |
||||
} |
||||
|
||||
@Test |
||||
public void testContainKey() { |
||||
PowerMock.mockStatic(GeneralContext.class); |
||||
EasyMock.expect(GeneralContext.getLocale()).andReturn(Locale.ENGLISH).times(3); |
||||
PowerMock.replayAll(); |
||||
|
||||
boolean result = Reflect.on(DesignSizeI18nManager.getInstance()).call("containKey", "testKey").get(); |
||||
Assert.assertFalse(result); |
||||
|
||||
result = Reflect.on(DesignSizeI18nManager.getInstance()).call("containKey", "com.fr.design.report.ReportColumnsPane").get(); |
||||
Assert.assertTrue(result); |
||||
|
||||
} |
||||
|
||||
@Test |
||||
public void testParseDimensionFromText() { |
||||
String dimensionText = "800*600"; |
||||
Dimension result = Reflect.on(DesignSizeI18nManager.getInstance()).call("parseDimensionFromText", dimensionText).get(); |
||||
validDimension(result, 800, 600); |
||||
|
||||
dimensionText = "800* 600"; |
||||
result = Reflect.on(DesignSizeI18nManager.getInstance()).call("parseDimensionFromText", dimensionText).get(); |
||||
validDimension(result, 660, 600); |
||||
|
||||
dimensionText = " 800*600"; |
||||
result = Reflect.on(DesignSizeI18nManager.getInstance()).call("parseDimensionFromText", dimensionText).get(); |
||||
validDimension(result, 660, 600); |
||||
|
||||
dimensionText = "800*600s"; |
||||
result = Reflect.on(DesignSizeI18nManager.getInstance()).call("parseDimensionFromText", dimensionText).get(); |
||||
validDimension(result, 660, 600); |
||||
|
||||
dimensionText = "800s*600"; |
||||
result = Reflect.on(DesignSizeI18nManager.getInstance()).call("parseDimensionFromText", dimensionText).get(); |
||||
validDimension(result, 660, 600); |
||||
|
||||
dimensionText = "800-600"; |
||||
result = Reflect.on(DesignSizeI18nManager.getInstance()).call("parseDimensionFromText", dimensionText).get(); |
||||
validDimension(result, 660, 600); |
||||
} |
||||
|
||||
private void validDimension(Dimension dimension, int width, int height) { |
||||
Assert.assertEquals(width, dimension.width); |
||||
Assert.assertEquals(height, dimension.height); |
||||
} |
||||
} |
Loading…
Reference in new issue