@ -19,6 +19,7 @@ import com.fr.stable.ProductConstants;
import com.fr.stable.StringUtils ;
import com.fr.workspace.WorkContext ;
import com.fr.workspace.server.lock.TplOperator ;
import org.jetbrains.annotations.Nullable ;
import javax.swing.SwingWorker ;
import java.io.OutputStream ;
@ -47,7 +48,7 @@ public class TemplateUtils {
}
/ * *
* 创建新的模板文件并打开模板 , 并在创建备份模板成功后执行doAfterCreate
* 创建新的模板文件并并判断新的模板文件是否之前已经被开打 , 如果已经打开需要reOpen
*
* @param prefix 模板文件名称前缀
* @param file 模板文件
@ -55,14 +56,39 @@ public class TemplateUtils {
* 为true时以CurrentEditingTemplate为准创建新模板
* 为false时以传入的File文件为准创建新模板 , 此文件可以不是编辑状态
* @param openNewTemplate 是否需要在创建后打开模板
* @param doAfterCreateTemplate 创建备份模板成功后调用
* /
public static void createAndOpenTemplate ( String prefix , FILE file , boolean createByEditingTemplate , boolean openNewTemplate , Runnable doAfterCreateTemplate ) {
String fileName = file . getName ( ) ;
public static void createAndReOpenTemplate ( String prefix , FILE file , boolean createByEditingTemplate , boolean openNewTemplate ) {
String oldPath = file . getPath ( ) ;
file = getSavedFile ( prefix , file ) ;
if ( file = = null ) {
return ;
}
Runnable doAfterCreateTemplate ;
//判断一下要保存的文件是否已打开
int index = HistoryTemplateListCache . getInstance ( ) . contains ( file ) ;
if ( index = = - 1 ) {
doAfterCreateTemplate = ( ) - > { } ;
} else {
JTemplate template = HistoryTemplateListCache . getInstance ( ) . getHistoryList ( ) . get ( index ) ;
doAfterCreateTemplate = ( ) - > HistoryTemplateListCache . getInstance ( ) . closeSelectedReport ( template ) ;
}
createAndOpenTemplate0 ( file , oldPath , createByEditingTemplate , openNewTemplate , doAfterCreateTemplate ) ;
}
/ * *
* 返回值可以为null , 为null表示没有点击保存按钮或者传递进来的文件file本身不满足格式要求
*
* @param prefix 模板文件名称前缀
* @param file 模板文件
* @return 最后选择的要保存的文件
* /
@Nullable
private static FILE getSavedFile ( String prefix , FILE file ) {
String fileName = file . getName ( ) ;
int indexOfLastDot = fileName . lastIndexOf ( CoreConstants . DOT ) ;
if ( indexOfLastDot < 0 ) {
return ;
return null ;
}
String suffix = fileName . substring ( indexOfLastDot + 1 ) ;
FILEChooserPane fileChooserPane = FILEChooserPane . getInstance ( true , true ) ;
@ -74,15 +100,36 @@ public class TemplateUtils {
fileChooserPane . enableFileNameTextFiled ( ) ;
if ( isCancel ( result ) ) {
return ;
return null ;
}
if ( isOk ( result ) ) {
file = fileChooserPane . getSelectedFILE ( ) ;
createAndOpenTemplate0 ( file , oldPath , createByEditingTemplate , openNewTemplate , doAfterCreateTemplate ) ;
return fileChooserPane . getSelectedFILE ( ) ;
}
return null ;
}
/ * *
* 创建新的模板文件并打开模板 , 并在创建备份模板成功后执行doAfterCreate
*
* @param prefix 模板文件名称前缀
* @param file 模板文件
* @param createByEditingTemplate 是否根据 当前编辑模板 来创建新模板
* 为true时以CurrentEditingTemplate为准创建新模板
* 为false时以传入的File文件为准创建新模板 , 此文件可以不是编辑状态
* @param openNewTemplate 是否需要在创建后打开模板
* @param doAfterCreateTemplate 创建备份模板成功后调用
* /
public static void createAndOpenTemplate ( String prefix , FILE file , boolean createByEditingTemplate , boolean openNewTemplate , Runnable doAfterCreateTemplate ) {
String oldPath = file . getPath ( ) ;
file = getSavedFile ( prefix , file ) ;
if ( file = = null ) {
return ;
}
createAndOpenTemplate0 ( file , oldPath , createByEditingTemplate , openNewTemplate , doAfterCreateTemplate ) ;
}
private static void createAndOpenTemplate0 ( FILE file , String oldPath , boolean createByEditingTemplate , boolean openNewTemplate , Runnable doAfterCreateTemplate ) {
new SwingWorker < Boolean , Void > ( ) {