Browse Source
* commit 'f6f5da0f009caa8ee65d9545cbf2f873e2584af3': 在上层统一处理 swing 线程同步问题 line separator REPORT-13870 远程设计问题以及环境切换问题 无JIRA任务,公式编辑器显示报表参数异常 REPORT-14361 部分操作可能导致AWT EDT线程同步异常 REPORT-13202 包含插件控件的模板切换环境后存储出错bugfix/10.0
yaoh.wu
6 years ago
16 changed files with 466 additions and 279 deletions
@ -0,0 +1,63 @@
|
||||
package com.fr.design.mainframe; |
||||
|
||||
import com.fr.file.FILE; |
||||
import com.fr.stable.CoreConstants; |
||||
import com.fr.third.javax.annotation.Nonnull; |
||||
import com.fr.third.javax.annotation.Nullable; |
||||
|
||||
import java.util.ArrayList; |
||||
import java.util.List; |
||||
|
||||
public final class JTemplateFactory { |
||||
private static final List<App<?>> ALL_APP = new ArrayList<App<?>>(); |
||||
|
||||
private JTemplateFactory() { |
||||
} |
||||
|
||||
/** |
||||
* 生成设计器编辑模板对象 |
||||
* |
||||
* @param file 包含了模板名称,类型以及内容的文件 |
||||
* @return 设计器编辑的模板对象 |
||||
*/ |
||||
@Nullable |
||||
public static JTemplate<?, ?> createJTemplate(@Nonnull FILE file) { |
||||
|
||||
String fileName = file.getName(); |
||||
int indexOfLastDot = fileName.lastIndexOf(CoreConstants.DOT); |
||||
if (indexOfLastDot < 0) { |
||||
return null; |
||||
} |
||||
String fileExtension = fileName.substring(indexOfLastDot + 1); |
||||
for (App<?> app : ALL_APP) { |
||||
String[] defaultAppExtensions = app.defaultExtensions(); |
||||
for (String defaultAppExtension : defaultAppExtensions) { |
||||
if (defaultAppExtension.equalsIgnoreCase(fileExtension)) { |
||||
JTemplate<?, ?> jt = app.openTemplate(file); |
||||
if (jt != null) { |
||||
return jt; |
||||
} |
||||
} |
||||
} |
||||
} |
||||
return null; |
||||
} |
||||
|
||||
|
||||
/** |
||||
* 注册app. |
||||
* |
||||
* @param app 注册app. |
||||
*/ |
||||
public static void register(App<?> app) { |
||||
if (app != null) { |
||||
ALL_APP.add(app); |
||||
} |
||||
} |
||||
|
||||
public static void remove(App<?> app) { |
||||
if (app != null) { |
||||
ALL_APP.remove(app); |
||||
} |
||||
} |
||||
} |
@ -1 +1,24 @@
|
||||
package com.fr.design.parameter;
import com.fr.base.Parameter;
public interface ParaDefinitePane {
public Parameter[] getNoRepeatParas(Parameter[] paras);
public void setParameterArray(Parameter[] ps);
public Parameter[] getParameterArray();
public void refreshParameter();
public boolean isWithQueryButton();
public void addingParameter2Editor(Parameter p);
public void addingParameter2EditorWithQueryButton(Parameter p);
public void addingAllParameter2Editor();
} |
||||
package com.fr.design.parameter; |
||||
|
||||
import com.fr.base.Parameter; |
||||
|
||||
|
||||
public interface ParaDefinitePane { |
||||
|
||||
Parameter[] getNoRepeatParas(Parameter[] paras); |
||||
|
||||
void setParameterArray(Parameter[] ps); |
||||
|
||||
Parameter[] getParameterArray(); |
||||
|
||||
void refreshParameter(); |
||||
|
||||
boolean isWithQueryButton(); |
||||
|
||||
void addingParameter2Editor(Parameter p); |
||||
|
||||
void addingParameter2EditorWithQueryButton(Parameter p); |
||||
|
||||
void addingAllParameter2Editor(); |
||||
|
||||
} |
@ -0,0 +1,106 @@
|
||||
package com.fr.file; |
||||
|
||||
import javax.swing.Icon; |
||||
import javax.transaction.NotSupportedException; |
||||
import java.io.ByteArrayInputStream; |
||||
import java.io.InputStream; |
||||
import java.io.OutputStream; |
||||
|
||||
/** |
||||
* 切换环境用于暂存的文件类型 |
||||
*/ |
||||
public class StashedFILE implements FILE { |
||||
|
||||
private FILE file; |
||||
private byte[] content; |
||||
|
||||
public StashedFILE(FILE file, byte[] content) { |
||||
this.file = file; |
||||
this.content = content; |
||||
} |
||||
|
||||
@Override |
||||
public String prefix() { |
||||
return file.prefix(); |
||||
} |
||||
|
||||
@Override |
||||
public boolean isDirectory() { |
||||
return file.isDirectory(); |
||||
} |
||||
|
||||
@Override |
||||
public String getName() { |
||||
return file.getName(); |
||||
} |
||||
|
||||
@Override |
||||
public Icon getIcon() { |
||||
return file.getIcon(); |
||||
} |
||||
|
||||
@Override |
||||
public String getPath() { |
||||
return file.getPath(); |
||||
} |
||||
|
||||
@Override |
||||
public void setPath(String path) { |
||||
throw new UnsupportedOperationException(); |
||||
} |
||||
|
||||
@Override |
||||
public FILE getParent() { |
||||
throw new UnsupportedOperationException(); |
||||
} |
||||
|
||||
@Override |
||||
public FILE[] listFiles() { |
||||
throw new UnsupportedOperationException(); |
||||
} |
||||
|
||||
@Override |
||||
public boolean createFolder(String name) { |
||||
throw new UnsupportedOperationException(); |
||||
} |
||||
|
||||
@Override |
||||
public boolean mkfile() throws Exception { |
||||
throw new UnsupportedOperationException(); |
||||
} |
||||
|
||||
@Override |
||||
public boolean exists() { |
||||
return false; |
||||
} |
||||
|
||||
@Override |
||||
public void closeTemplate() throws Exception { |
||||
// do nothing
|
||||
} |
||||
|
||||
@Override |
||||
public InputStream asInputStream() throws Exception { |
||||
return new ByteArrayInputStream(content); |
||||
} |
||||
|
||||
@Override |
||||
public OutputStream asOutputStream() throws Exception { |
||||
throw new NotSupportedException(); |
||||
} |
||||
|
||||
@Override |
||||
public String getEnvFullName() { |
||||
return file.getEnvFullName(); |
||||
} |
||||
|
||||
@Override |
||||
public boolean isMemFile() { |
||||
return true; |
||||
} |
||||
|
||||
@Override |
||||
public boolean isEnvFile() { |
||||
return false; |
||||
} |
||||
} |
Loading…
Reference in new issue