diff --git a/build.gradle b/build.gradle new file mode 100644 index 000000000..633739a74 --- /dev/null +++ b/build.gradle @@ -0,0 +1,86 @@ +apply plugin: "java" +tasks.withType(JavaCompile){ + options.encoding = "UTF-8" +} + +def basicDir="../../" +def libDir="${basicDir}/finereport-lib-stable" +//获取什么分支名 +FileTree files =fileTree(dir:"./",include:"build.gradle") +def buildDir=files[0].path.substring(0,files[0].path.lastIndexOf ("\\")) +def branchName=buildDir.substring(buildDir.lastIndexOf ("\\")+1) + +task appletJar<<{ + + ant{ + mkdir(dir:"${libDir}/tmp-${branchName}") + mkdir(dir:"build/classes/") + copy(todir:"build/classes/"){ + fileset(dir:"${basicDir}/finereport-core-stable/${branchName}/build/classes/main") + + fileset(dir:"${basicDir}/finereport-chart-stable/${branchName}/build/classes/main") + + fileset(dir:"${basicDir}/finereport-report-stable/${branchName}/build/classes/main") + + fileset(dir:"${basicDir}/finereport-platform-stable/${branchName}/build/classes/main") + + fileset(dir:"${basicDir}/finereport-performance-stable/${branchName}/build/classes/main") + + } + unjar(src:"${libDir}/3rd.jar",dest:"${libDir}/tmp-${branchName}") + unjar(src:"${libDir}/servlet-api.jar",dest:"${libDir}/tmp-${branchName}") + jar(jarfile:"build/libs/fr-applet-8.0.jar"){ + fileset(dir:"build/classes"){ + exclude(name:"*.*") + exclude(name:"bin/*.*") + exclude(name:"classes/**") + exclude(name:"com/fr/schedule/**") + exclude(name:"com/fr/cell/**") + exclude(name:"com/fr/dialog/**") + exclude(name:"com/fr/view/**") + exclude(name:"com/fr/web/**") + exclude(name:"com/fr/fs/**") + exclude(name:"com/fr/design/**") + exclude(name:"com/fr/start/**") + exclude(name:"com/fr/process/**") + } + fileset(dir:"${libDir}/tmp-${branchName}"){ + include(name:"javax/mail/**") + include(name:"javax/servlet/**") + include(name:"org/freehep/**") + include(name:"com/fr/third/JAI/**") + include(name:"com/fr/third/antlr/**") + include(name:"com/fr/third/javax/**") + include(name:"com/sun/xml/**") + include(name:"javax/xml/**") + + } + fileset(dir:"build/classes"){ + include(name:"com/fr/web/*.class") + include(name:"com/fr/web/attr/*.class") + } + } + delete(dir:"${libDir}/tmp-${branchName}") + def jdk6home= "D:/FineReport/develop/java/jdk1.6u35" + def keystore="frapplet.store" + def keycert="fr.cert" + def keypassword="123456" + def keyalias="fr" + + exec(executable:"${jdk6home}/bin/keytool"){ + arg(line:"-genkey -dname "CN=FineReport L=NanJing C=China" -keystore ${keystore} -alias ${keyalias} -validity 3650 -storepass ${keypassword}") + } + exec(executable:"${jdk6home}/bin/keytool"){ + arg(line:"-export -keystore ${keystore} -alias ${keyalias} -file ${keycert} -storepass ${keypassword}") + } + + exec(executable:"${jdk6home}/bin/jarsigner"){ + arg(line:"-keystore ${keystore} -storepass ${keypassword} 'build/libs/fr-applet-8.0.jar' ${keyalias}") + } + delete(file:"${keystore}") + delete(file:"${keycert}") + delete(dir:"build/classes") + + } + +} \ No newline at end of file diff --git a/designer_base/build.gradle b/designer_base/build.gradle index 319cc17f2..a48a4d2c5 100644 --- a/designer_base/build.gradle +++ b/designer_base/build.gradle @@ -3,36 +3,45 @@ apply plugin: 'java' tasks.withType(JavaCompile){ options.encoding = 'UTF-8' } +//指定构建的jdk版本 +sourceCompatibility=1.8 +//指定生成jar包版本 version='8.0' - +//生成jar包重命名 jar{ baseName='fr-designer-core' } -def srcDir="${System.getenv()['JENKINS_HOME']}/workspace/design" -def libDir="${System.getenv()['JENKINS_HOME']}/workspace/lib" +def srcDir="." +//指定源码路径 sourceSets{ main{ java{ - srcDirs=["${srcDir}/designer_base/src"] + srcDirs=["${srcDir}/src"] } } } +//获取什么分支名 +FileTree files =fileTree(dir:'./',include:'build.gradle') +def buildDir=files[0].path.substring(0,files[0].path.lastIndexOf ('\\')) +buildDir=buildDir.substring(0,buildDir.lastIndexOf ('\\')) +def branchName=buildDir.substring(buildDir.lastIndexOf ('\\')+1) - +//声明外部依赖 dependencies{ -compile fileTree(dir:'../../',include:'**/*.jar') -compile fileTree(dir:libDir,include:'*.jar') -compile fileTree(dir:"${libDir}/jetty",include:'*.jar') + +compile fileTree(dir:'../../../finereport-lib-stable',include:'**/*.jar') +compile fileTree(dir:'../../../',include:"finereport-*-stable/${branchName}/**/*.jar") + testCompile 'junit:junit:4.12' } - +//复制非.java文件到classes文件夹下参与打包 task copyFile(type:Copy,dependsOn:compileJava){ copy{ - from ("${srcDir}/designer_base/src"){ - exclude '**/*.java' + from ("${srcDir}/src"){ + exclude '**/.setting/**','.classpath','.project','**/*.java','**/*.db','**/*.g','**/package.html' } into 'build/classes/main' } @@ -44,13 +53,13 @@ task copyFile(type:Copy,dependsOn:compileJava){ task compressJS{ ant.taskdef(name:'yuicompress',classname:'com.yahoo.platform.yui.compressor.YUICompressTask'){ classpath { - fileset(dir:'../../lib',includes:'*.jar') + fileset(dir:'../../../finereport-lib4build-stable',includes:'**/*.jar') } } ant.yuicompress(linebreak:"500",warn:"false", munge:"yes",preserveallsemicolons:"false", , charset:"utf-8",encoding:"utf-8",outputfolder:'build/classes/main'){ - fileset (dir:"${srcDir}/designer_base/src"){ + fileset (dir:"${srcDir}/src"){ include (name:'**/*.js') - + include (name:'**/*.css') } } diff --git a/designer_base/src/com/fr/design/RestartHelper.java b/designer_base/src/com/fr/design/RestartHelper.java index 4dff98615..53aa5e56b 100644 --- a/designer_base/src/com/fr/design/RestartHelper.java +++ b/designer_base/src/com/fr/design/RestartHelper.java @@ -4,15 +4,11 @@ import com.fr.design.mainframe.DesignerContext; import com.fr.general.ComparatorUtils; import com.fr.general.FRLogger; import com.fr.general.GeneralUtils; -import com.fr.stable.ArrayUtils; -import com.fr.stable.OperatingSystem; -import com.fr.stable.StableUtils; -import com.fr.stable.StringUtils; - -import java.io.File; -import java.io.FileInputStream; -import java.io.FileOutputStream; -import java.io.IOException; +import com.fr.stable.*; + +import java.io.*; +import java.nio.channels.FileChannel; +import java.nio.channels.FileLock; import java.util.ArrayList; import java.util.List; import java.util.Map; @@ -153,6 +149,18 @@ public class RestartHelper { } try { + try { + File restartLockFile = new File(StableUtils.pathJoin(StableUtils.getInstallHome(), "restart.lock")); + StableUtils.makesureFileExist(restartLockFile); + RandomAccessFile randomAccessFile = new RandomAccessFile(restartLockFile,"rw"); + FileChannel restartLockFC = randomAccessFile.getChannel(); + FileLock restartLock = restartLockFC.tryLock(); + if(restartLock == null) { + FRLogger.getLogger().error("restart lock null!"); + } + }catch (Exception e){ + FRLogger.getLogger().error(e.getMessage()); + } if (OperatingSystem.isMacOS()) { restartInMacOS(installHome, filesToBeDelete); } else { diff --git a/designer_base/src/com/fr/design/beans/location/MoveUtils.java b/designer_base/src/com/fr/design/beans/location/MoveUtils.java index 18c282cdc..fe80b463a 100644 --- a/designer_base/src/com/fr/design/beans/location/MoveUtils.java +++ b/designer_base/src/com/fr/design/beans/location/MoveUtils.java @@ -300,11 +300,13 @@ public class MoveUtils { findX(px, bounds, left, right, width); findY(py, bounds, top, bottom, height); - if(isIntersects && !isParameterLayout){ - isWidgetsIntersects = true; - } - else{ - findEquidistantLine(bounds, left, top, height, width); + if(!isParameterLayout){ + if(isIntersects) { + isWidgetsIntersects = true; + } + else{ + findEquidistantLine(bounds, left, top, height, width); + } } } showForbiddenWindow(designer, x, y, isWidgetsIntersects); diff --git a/designer_base/src/com/fr/design/widget/btn/ButtonWithHotkeysDetailPane.java b/designer_base/src/com/fr/design/widget/btn/ButtonWithHotkeysDetailPane.java index 46245560a..9d278d048 100644 --- a/designer_base/src/com/fr/design/widget/btn/ButtonWithHotkeysDetailPane.java +++ b/designer_base/src/com/fr/design/widget/btn/ButtonWithHotkeysDetailPane.java @@ -32,7 +32,7 @@ public abstract class ButtonWithHotkeysDetailPane extends Butt private void initComponents() { JPanel advancedPane = FRGUIPaneFactory.createTitledBorderPane(Inter.getLocText("FR-Designer_Advanced")); - advancedPane.setPreferredSize(new Dimension(600,300)); + advancedPane.setPreferredSize(new Dimension(600, 341)); JPanel attrPane = FRGUIPaneFactory.createBorderLayout_S_Pane(); attrPane.setBorder(BorderFactory.createEmptyBorder(0, 4, 0, 4)); this.add(advancedPane); diff --git a/designer_chart/build.gradle b/designer_chart/build.gradle index 2a667bf82..2b465eca9 100644 --- a/designer_chart/build.gradle +++ b/designer_chart/build.gradle @@ -3,12 +3,14 @@ apply plugin: 'java' tasks.withType(JavaCompile){ options.encoding = 'UTF-8' } - +//指定构建的jdk版本 +sourceCompatibility=1.8 +//指定生成jar包的版本 version='8.0' -def srcDir="${System.getenv()['JENKINS_HOME']}/workspace/design" -def libDir="${System.getenv()['JENKINS_HOME']}/workspace/lib" +def srcDir="." +//对生成的jar包进行重命名 jar{ baseName='fr-designer-chart' @@ -17,21 +19,28 @@ jar{ sourceSets{ main{ java{ - srcDirs=["${srcDir}/designer_chart/src"] + srcDirs=["${srcDir}/src"] } } } +FileTree files =fileTree(dir:'./',include:'build.gradle') +def buildDir=files[0].path.substring(0,files[0].path.lastIndexOf ('\\')) +buildDir=buildDir.substring(0,buildDir.lastIndexOf ('\\')) +def branchName=buildDir.substring(buildDir.lastIndexOf ('\\')+1) + +//指定外部依赖 dependencies{ -compile fileTree(dir:'../../',include:'**/*.jar') -compile fileTree(dir:libDir,include:'*.jar') -compile fileTree(dir:"${libDir}/jetty",include:'*.jar') +compile fileTree(dir:'../../../finereport-lib-stable',include:'**/*.jar') +compile fileTree(dir:'../../../',include:"finereport-*-stable/${branchName}/**/*.jar") + testCompile 'junit:junit:4.12' } - +//将非.java 文件复制到classes文件夹下参与打包 task copyFile(type:Copy,dependsOn:compileJava){ copy{ - from ("${srcDir}/designer_chart/src"){ - exclude '**/*.java' + from ("${srcDir}/src"){ + exclude '**/.setting/**','.classpath','.project','**/*.java','**/*.db','**/*.g','**/package.html' + } into 'build/classes/main' } @@ -42,13 +51,13 @@ task copyFile(type:Copy,dependsOn:compileJava){ task compressJS{ ant.taskdef(name:'yuicompress',classname:'com.yahoo.platform.yui.compressor.YUICompressTask'){ classpath { - fileset(dir:'../../lib',includes:'*.jar') + fileset(dir:'../../../finereport-lib4build-stable',includes:'**/*.jar') } } ant.yuicompress(linebreak:"500",warn:"false", munge:"yes",preserveallsemicolons:"false", , charset:"utf-8",encoding:"utf-8",outputfolder:'build/classes/main'){ - fileset (dir:"${srcDir}/designer_chart/src"){ + fileset (dir:"${srcDir}/src"){ include (name:'**/*.js') - + include (name:'**/*.css') } } diff --git a/designer_form/build.gradle b/designer_form/build.gradle index 1a87cbf95..9b4b7eb21 100644 --- a/designer_form/build.gradle +++ b/designer_form/build.gradle @@ -3,39 +3,56 @@ apply plugin: 'java' tasks.withType(JavaCompile){ options.encoding = 'UTF-8' } - +//指定构建的jdk版本 +sourceCompatibility=1.8 +//指定生成的jar包版本 version='8.0' -def srcDir="${System.getenv()['JENKINS_HOME']}/workspace/design" -def libDir="${System.getenv()['JENKINS_HOME']}/workspace/lib" +def srcDir="." +//指明生成jar包的名字 jar{ baseName='fr-designer-report' } - +//源码所在位置 sourceSets{ main{ java{ - srcDirs=["${srcDir}/designer/src", -"${srcDir}/designer_form/src"] + srcDirs=["${srcDir}/src", +"${srcDir}/../designer/src"] } } } + +//获取什么分支名 +FileTree files =fileTree(dir:'./',include:'build.gradle') +def buildDir=files[0].path.substring(0,files[0].path.lastIndexOf ('\\')) +buildDir=buildDir.substring(0,buildDir.lastIndexOf ('\\')) +def branchName=buildDir.substring(buildDir.lastIndexOf ('\\')+1) + +//声明外部依赖 dependencies{ -compile fileTree(dir:'../../',include:'**/*.jar') -compile fileTree(dir:libDir,include:'*.jar') -compile fileTree(dir:"${libDir}/jetty",include:'*.jar') +compile fileTree(dir:'../../../finereport-lib-stable',include:'**/*.jar') +compile fileTree(dir:'../../../',include:"finereport-*-stable/${branchName}/**/*.jar") + testCompile 'junit:junit:4.12' } +//指明无法编译文件所在路径 +def dataContent ={def dir -> + copySpec{ + from ("${dir}"){ + exclude '**/.setting/**','.classpath','.project','**/*.java','**/*.db','**/*.g','**/package.html' + } + } +} +//将非.java文件复制到classes文件夹下 参与打包 task copyFile(type:Copy,dependsOn:compileJava){ copy{ - from ("${srcDir}/designer/src"){ - exclude '**/*.java' - } - from ("${srcDir}/designer_form/src") + with dataContent.call("${srcDir}/src") + with dataContent.call("${srcDir}/../designer/src") into ('build/classes/main') } @@ -46,17 +63,18 @@ task copyFile(type:Copy,dependsOn:compileJava){ task compressJS{ ant.taskdef(name:'yuicompress',classname:'com.yahoo.platform.yui.compressor.YUICompressTask'){ classpath { - fileset(dir:'../../lib',includes:'*.jar') + fileset(dir:'../../../finereport-lib4build-stable',includes:'**/*.jar') } } - ant.yuicompress(linebreak:"500",warn:"false", munge:"yes",preserveallsemicolons:"false", , charset:"utf-8",encoding:"utf-8",outputfolder:'build/classes/main'){ - fileset (dir:"${srcDir}/designer/src"){ + ant.yuicompress(linebreak:"500",warn:"false", munge:"yes",preserveallsemicolons:"false", charset:"utf-8",encoding:"utf-8",outputfolder:'build/classes/main'){ + fileset (dir:"${srcDir}/src"){ include (name:'**/*.js') + include (name:'**/*.css') } - fileset (dir:"${srcDir}/designer_form/src"){ + fileset (dir:"${srcDir}/../designer/src"){ include (name:'**/*.js') - + include (name:'**/*.css') } } diff --git a/designer_form/src/com/fr/design/gui/core/FormWidgetOption.java b/designer_form/src/com/fr/design/gui/core/FormWidgetOption.java index 76287c30f..e99888c72 100644 --- a/designer_form/src/com/fr/design/gui/core/FormWidgetOption.java +++ b/designer_form/src/com/fr/design/gui/core/FormWidgetOption.java @@ -1 +1 @@ -package com.fr.design.gui.core; import javax.swing.Icon; import com.fr.base.BaseUtils; import com.fr.form.ui.ElementCaseEditor; import com.fr.form.ui.Widget; import com.fr.form.ui.container.WAbsoluteLayout; import com.fr.form.ui.container.WBorderLayout; import com.fr.form.ui.container.WCardLayout; import com.fr.form.ui.container.WFitLayout; import com.fr.form.ui.container.WHorizontalBoxLayout; import com.fr.form.ui.container.WParameterLayout; import com.fr.form.ui.container.WVerticalBoxLayout; import com.fr.general.Inter; /** * Author : Shockway * Date: 13-6-17 * Time: 涓婂崍10:40 */ public class FormWidgetOption extends WidgetOption { /** * 杩斿洖鍚嶅瓧 * @return 鍚嶅瓧 */ @Override public String optionName() { return null; } /** * 杩斿洖鍥炬爣 * @return 鍥炬爣 */ @Override public Icon optionIcon() { return null; } /** * 缁勪欢绫 * @return 绫 */ @Override public Class widgetClass() { return null; } /** * 杩斿洖缁勪欢 * @return 鎺т欢 */ @Override public Widget createWidget() { return null; } /* * 琛ㄥ崟瀹瑰櫒 */ public static WidgetOption[] getFormContainerInstance() { return new WidgetOption[] { ABSOLUTELAYOUTCONTAINER, BORDERLAYOUTCONTAINER, HORIZONTALBOXLAYOUTCONTAINER, VERTICALBOXLAYOUTCONTAINER, CARDLAYOUTCONTAINER, FITLAYOUTCONTAINER }; } /** * 琛ㄥ崟宸ュ叿鏍忎笂鐨勫竷灞 * @return 鎺т欢 */ public static WidgetOption[] getFormLayoutInstance() { return new WidgetOption[] {CARDLAYOUTCONTAINER, ABSOLUTELAYOUTCONTAINER}; } public static final WidgetOption ABSOLUTELAYOUTCONTAINER = WidgetOptionFactory.createByWidgetClass(Inter .getLocText("FR-Designer_AbsoluteLayout"), BaseUtils.readIcon("/com/fr/web/images/form/resources/layout_absolute.png"), WAbsoluteLayout.class); public static final WidgetOption BORDERLAYOUTCONTAINER = WidgetOptionFactory.createByWidgetClass(Inter .getLocText("FR-Designer_BorderLayout"), BaseUtils.readIcon("/com/fr/web/images/form/resources/layout_border.png"), WBorderLayout.class); public static final WidgetOption CARDLAYOUTCONTAINER = WidgetOptionFactory.createByWidgetClass(Inter .getLocText("FR-Designer_CardLayout"), BaseUtils.readIcon("/com/fr/web/images/form/resources/card_layout_16.png"), WCardLayout.class); public static final WidgetOption HORIZONTALBOXLAYOUTCONTAINER = WidgetOptionFactory.createByWidgetClass(Inter .getLocText("FR-Designer_Layout-HBox"), BaseUtils.readIcon("/com/fr/web/images/form/resources/boxlayout_h_16.png"), WHorizontalBoxLayout.class); public static final WidgetOption VERTICALBOXLAYOUTCONTAINER = WidgetOptionFactory.createByWidgetClass(Inter .getLocText("FR-Designer_VerticalBoxLayout"), BaseUtils.readIcon("/com/fr/web/images/form/resources/boxlayout_v_16.png"), WVerticalBoxLayout.class); public static final WidgetOption FITLAYOUTCONTAINER = WidgetOptionFactory.createByWidgetClass(Inter.getLocText("FR-Designer-Layout_Adaptive_Layout"), BaseUtils.readIcon("/com/fr/web/images/form/resources/boxlayout_v_16.png"), WFitLayout.class); public static final WidgetOption PARAMETERCONTAINER = WidgetOptionFactory.createByWidgetClass(Inter .getLocText("FR-Designer_Para-Body"), BaseUtils.readIcon("/com/fr/web/images/form/resources/layout_parameter.png"), WParameterLayout.class); public static final WidgetOption ELEMENTCASE = WidgetOptionFactory.createByWidgetClass(Inter .getLocText("FR-Designer_Form-Report"), BaseUtils.readIcon("/com/fr/web/images/form/resources/report_16.png"), ElementCaseEditor.class); } \ No newline at end of file +package com.fr.design.gui.core; import javax.swing.Icon; import com.fr.base.BaseUtils; import com.fr.form.ui.ElementCaseEditor; import com.fr.form.ui.Widget; import com.fr.form.ui.container.WAbsoluteLayout; import com.fr.form.ui.container.WBorderLayout; import com.fr.form.ui.container.WCardLayout; import com.fr.form.ui.container.WFitLayout; import com.fr.form.ui.container.WHorizontalBoxLayout; import com.fr.form.ui.container.WParameterLayout; import com.fr.form.ui.container.WVerticalBoxLayout; import com.fr.general.Inter; /** * Author : Shockway * Date: 13-6-17 * Time: 涓婂崍10:40 */ public class FormWidgetOption extends WidgetOption { /** * 杩斿洖鍚嶅瓧 * @return 鍚嶅瓧 */ @Override public String optionName() { return null; } /** * 杩斿洖鍥炬爣 * @return 鍥炬爣 */ @Override public Icon optionIcon() { return null; } /** * 缁勪欢绫 * @return 绫 */ @Override public Class widgetClass() { return null; } /** * 杩斿洖缁勪欢 * @return 鎺т欢 */ @Override public Widget createWidget() { return null; } /* * 琛ㄥ崟瀹瑰櫒 */ public static WidgetOption[] getFormContainerInstance() { return new WidgetOption[] { ABSOLUTELAYOUTCONTAINER, BORDERLAYOUTCONTAINER, HORIZONTALBOXLAYOUTCONTAINER, VERTICALBOXLAYOUTCONTAINER, CARDLAYOUTCONTAINER, FITLAYOUTCONTAINER }; } /** * 琛ㄥ崟宸ュ叿鏍忎笂鐨勫竷灞 * @return 鎺т欢 */ public static WidgetOption[] getFormLayoutInstance() { return new WidgetOption[] {CARDLAYOUTCONTAINER/*, ABSOLUTELAYOUTCONTAINER*/}; } public static final WidgetOption ABSOLUTELAYOUTCONTAINER = WidgetOptionFactory.createByWidgetClass(Inter .getLocText("FR-Designer_AbsoluteLayout"), BaseUtils.readIcon("/com/fr/web/images/form/resources/layout_absolute.png"), WAbsoluteLayout.class); public static final WidgetOption BORDERLAYOUTCONTAINER = WidgetOptionFactory.createByWidgetClass(Inter .getLocText("FR-Designer_BorderLayout"), BaseUtils.readIcon("/com/fr/web/images/form/resources/layout_border.png"), WBorderLayout.class); public static final WidgetOption CARDLAYOUTCONTAINER = WidgetOptionFactory.createByWidgetClass(Inter .getLocText("FR-Designer_CardLayout"), BaseUtils.readIcon("/com/fr/web/images/form/resources/card_layout_16.png"), WCardLayout.class); public static final WidgetOption HORIZONTALBOXLAYOUTCONTAINER = WidgetOptionFactory.createByWidgetClass(Inter .getLocText("FR-Designer_Layout-HBox"), BaseUtils.readIcon("/com/fr/web/images/form/resources/boxlayout_h_16.png"), WHorizontalBoxLayout.class); public static final WidgetOption VERTICALBOXLAYOUTCONTAINER = WidgetOptionFactory.createByWidgetClass(Inter .getLocText("FR-Designer_VerticalBoxLayout"), BaseUtils.readIcon("/com/fr/web/images/form/resources/boxlayout_v_16.png"), WVerticalBoxLayout.class); public static final WidgetOption FITLAYOUTCONTAINER = WidgetOptionFactory.createByWidgetClass(Inter.getLocText("FR-Designer-Layout_Adaptive_Layout"), BaseUtils.readIcon("/com/fr/web/images/form/resources/boxlayout_v_16.png"), WFitLayout.class); public static final WidgetOption PARAMETERCONTAINER = WidgetOptionFactory.createByWidgetClass(Inter .getLocText("FR-Designer_Para-Body"), BaseUtils.readIcon("/com/fr/web/images/form/resources/layout_parameter.png"), WParameterLayout.class); public static final WidgetOption ELEMENTCASE = WidgetOptionFactory.createByWidgetClass(Inter .getLocText("FR-Designer_Form-Report"), BaseUtils.readIcon("/com/fr/web/images/form/resources/report_16.png"), ElementCaseEditor.class); } \ No newline at end of file