diff --git a/app.platform.scheduler.executor/build-common.gradle b/app.platform.scheduler.executor/build-common.gradle new file mode 100644 index 00000000..f6cfe3d5 --- /dev/null +++ b/app.platform.scheduler.executor/build-common.gradle @@ -0,0 +1,19 @@ +/** + * 设置打包文件的运行时目标环境(target) + * 设置方式: 通过命令行 -D 传入目标环境参数 + * 打包命令如下: + * 1. gradle bootwar # 默认, target=tomcat + * 2. gradle bootwar -Dtarget=undertow # undertow, target=undertow + * 3. gradle bootwar -Dtarget=jetty # jetty, target=jetty + */ +def target =System.getProperty("target") ?: "undertow"; +System.setProperty('target',target); + +// 根据 targetRuntime 变量的值执行实际的 build.gradle +apply from: "build-${target}.gradle" + +// 应用启动项目无需发布到仓库中 +publishPublicationPublicationToMavenRepository.enabled=false + +// 开启 docker 镜像生成任务 +jibBuildTar.enabled =true \ No newline at end of file diff --git a/app.platform.scheduler.executor/build-jetty.gradle b/app.platform.scheduler.executor/build-jetty.gradle new file mode 100644 index 00000000..6cf02057 --- /dev/null +++ b/app.platform.scheduler.executor/build-jetty.gradle @@ -0,0 +1,15 @@ +println "[Jetty] 环境 ......" + +configurations { + all*.exclude group: "org.springframework.boot", module: "spring-boot-starter-tomcat" + all*.exclude group: "org.apache.tomcat.embed", module: "tomcat-embed-core" + all*.exclude group: "org.apache.tomcat.embed", module: "tomcat-embed-websocket" +} + +dependencies { + implementation("org.springframework.boot:spring-boot-starter-jetty") + + providedRuntime( + "org.springframework.boot:spring-boot-starter-jetty", + ) +} diff --git a/app.platform.scheduler.executor/build-tomcat.gradle b/app.platform.scheduler.executor/build-tomcat.gradle new file mode 100644 index 00000000..a9d85e43 --- /dev/null +++ b/app.platform.scheduler.executor/build-tomcat.gradle @@ -0,0 +1,7 @@ +println "[Tomcat] 环境 ......" + +dependencies { + providedRuntime( + "org.springframework.boot:spring-boot-starter-tomcat", + ) +} diff --git a/app.platform.scheduler.executor/build-undertow.gradle b/app.platform.scheduler.executor/build-undertow.gradle new file mode 100644 index 00000000..00d3b492 --- /dev/null +++ b/app.platform.scheduler.executor/build-undertow.gradle @@ -0,0 +1,15 @@ +println "[Undertow] 环境 ......" + +configurations { + all*.exclude group: "org.springframework.boot", module: "spring-boot-starter-tomcat" + all*.exclude group: "org.apache.tomcat.embed", module: "tomcat-embed-core" + all*.exclude group: "org.apache.tomcat.embed", module: "tomcat-embed-websocket" +} + +dependencies { + implementation("org.springframework.boot:spring-boot-starter-undertow") + + providedRuntime( + "org.springframework.boot:spring-boot-starter-undertow", + ) +} diff --git a/app.platform.scheduler.executor/build.gradle b/app.platform.scheduler.executor/build.gradle new file mode 100644 index 00000000..4bcea942 --- /dev/null +++ b/app.platform.scheduler.executor/build.gradle @@ -0,0 +1,99 @@ +apply plugin: 'war' +apply plugin: 'com.google.cloud.tools.jib' + +apply from: "build-common.gradle" + +dependencies { + implementation("org.springframework.boot:spring-boot-starter-web"){ + exclude group: "org.springframework.boot", module: "spring-boot-starter-tomcat" + } +} + +dependencies { + implementation ( + project(":io.sc.platform.scheduler.executor"), + ) +} + +/** + * replace [application.version] in i18n message file + */ +processResources { + filesMatching('**/messages*.properties') { + println 'replace ${version} in [' + it + ']' + filteringCharset = 'iso8859-1' + filter(org.apache.tools.ant.filters.ReplaceTokens, beginToken: '$version', endToken: '',tokens: [version: '' + project.version]) + } + + doLast{ + // 为了能够兼容 eclipse 和 idea 两种开发环境,调整如下: + // 1. 将 environment.properties 文件放在了 src/main/resources 目录中 + // 2. 在打包时,将该文件删除 + delete "$buildDir/resources/main/running-mode.properties" + } + +} + +bootWar{ + mainClass = "${project.name}.Application" + //launchScript() + manifest { + attributes 'Implementation-Version': archiveVersion, + 'Implementation-Title': project.name + } +} + +bootJar{ + mainClass = "${project.name}.Application" + //launchScript() + manifest { + attributes 'Implementation-Version': archiveVersion, + 'Implementation-Title': project.name + } +} + + +jib { + outputPaths { + tar = "build/libs/${project.name}-${project.version}-image.tar" + } + from { + image = "openjdk:8u342-slim" + //image = "eclipse-temurin:8u382-b05-jdk-focal" + platforms { + platform { + architecture ="arm64" + os ="linux" + } + } + } + to { + image = "${project.name}:${project.version}" + } + extraDirectories { + paths { + path { + from = "build/libs/" + into = "/opt/${project.name}/" + includes = ["${project.name}-${project.version}.war"] + } + } + } + container { + /** + * 设置jvm的启动参数 + * user.timezone - 解决Java程序的时区问题 + */ + jvmFlags = ["-Duser.timezone=Asia/Shanghai"] + creationTime = "USE_CURRENT_TIMESTAMP" + ports = ["8080"] + entrypoint = [ + "java", + "-jar", + "/opt/" + project.name + "/" + project.name + "-" + project.version + ".war", + "--" + project.name + ".home.dir=" + "/opt/" + project.name + ] + //entrypoint = "java -version" + //appRoot = "/usr/local/tomcat/webapps/ROOT" + } +} diff --git a/app.platform.scheduler.executor/src/main/resources/public/configure.js b/app.platform.scheduler.executor/src/main/resources/public/configure.js new file mode 100644 index 00000000..9bc75ad4 --- /dev/null +++ b/app.platform.scheduler.executor/src/main/resources/public/configure.js @@ -0,0 +1,11 @@ +// 在浏览器 window 对象中新建名为 APP 的容器变量, 用于存放平台的全局变量 +window.APP = {}; +// 全局配置 +window.APP.configure ={ + // 应用上下文路径 + webContextPath: '[(@{/})]'.startsWith('[')? '/' : '[(@{/})]', + // 默认后端 API 请求的服务地址前缀 + apiContextPaths: { + DEFAULT: '[(@{/})]'.startsWith('[') ? 'http://localhost:8080/' : '[(@{/})]' + } +}; \ No newline at end of file diff --git a/app.platform.scheduler.manager/build-common.gradle b/app.platform.scheduler.manager/build-common.gradle new file mode 100644 index 00000000..f6cfe3d5 --- /dev/null +++ b/app.platform.scheduler.manager/build-common.gradle @@ -0,0 +1,19 @@ +/** + * 设置打包文件的运行时目标环境(target) + * 设置方式: 通过命令行 -D 传入目标环境参数 + * 打包命令如下: + * 1. gradle bootwar # 默认, target=tomcat + * 2. gradle bootwar -Dtarget=undertow # undertow, target=undertow + * 3. gradle bootwar -Dtarget=jetty # jetty, target=jetty + */ +def target =System.getProperty("target") ?: "undertow"; +System.setProperty('target',target); + +// 根据 targetRuntime 变量的值执行实际的 build.gradle +apply from: "build-${target}.gradle" + +// 应用启动项目无需发布到仓库中 +publishPublicationPublicationToMavenRepository.enabled=false + +// 开启 docker 镜像生成任务 +jibBuildTar.enabled =true \ No newline at end of file diff --git a/app.platform.scheduler.manager/build-jetty.gradle b/app.platform.scheduler.manager/build-jetty.gradle new file mode 100644 index 00000000..6cf02057 --- /dev/null +++ b/app.platform.scheduler.manager/build-jetty.gradle @@ -0,0 +1,15 @@ +println "[Jetty] 环境 ......" + +configurations { + all*.exclude group: "org.springframework.boot", module: "spring-boot-starter-tomcat" + all*.exclude group: "org.apache.tomcat.embed", module: "tomcat-embed-core" + all*.exclude group: "org.apache.tomcat.embed", module: "tomcat-embed-websocket" +} + +dependencies { + implementation("org.springframework.boot:spring-boot-starter-jetty") + + providedRuntime( + "org.springframework.boot:spring-boot-starter-jetty", + ) +} diff --git a/app.platform.scheduler.manager/build-tomcat.gradle b/app.platform.scheduler.manager/build-tomcat.gradle new file mode 100644 index 00000000..a9d85e43 --- /dev/null +++ b/app.platform.scheduler.manager/build-tomcat.gradle @@ -0,0 +1,7 @@ +println "[Tomcat] 环境 ......" + +dependencies { + providedRuntime( + "org.springframework.boot:spring-boot-starter-tomcat", + ) +} diff --git a/app.platform.scheduler.manager/build-undertow.gradle b/app.platform.scheduler.manager/build-undertow.gradle new file mode 100644 index 00000000..00d3b492 --- /dev/null +++ b/app.platform.scheduler.manager/build-undertow.gradle @@ -0,0 +1,15 @@ +println "[Undertow] 环境 ......" + +configurations { + all*.exclude group: "org.springframework.boot", module: "spring-boot-starter-tomcat" + all*.exclude group: "org.apache.tomcat.embed", module: "tomcat-embed-core" + all*.exclude group: "org.apache.tomcat.embed", module: "tomcat-embed-websocket" +} + +dependencies { + implementation("org.springframework.boot:spring-boot-starter-undertow") + + providedRuntime( + "org.springframework.boot:spring-boot-starter-undertow", + ) +} diff --git a/app.platform.scheduler.manager/src/main/resources/public/configure.js b/app.platform.scheduler.manager/src/main/resources/public/configure.js new file mode 100644 index 00000000..9bc75ad4 --- /dev/null +++ b/app.platform.scheduler.manager/src/main/resources/public/configure.js @@ -0,0 +1,11 @@ +// 在浏览器 window 对象中新建名为 APP 的容器变量, 用于存放平台的全局变量 +window.APP = {}; +// 全局配置 +window.APP.configure ={ + // 应用上下文路径 + webContextPath: '[(@{/})]'.startsWith('[')? '/' : '[(@{/})]', + // 默认后端 API 请求的服务地址前缀 + apiContextPaths: { + DEFAULT: '[(@{/})]'.startsWith('[') ? 'http://localhost:8080/' : '[(@{/})]' + } +}; \ No newline at end of file diff --git a/app.platform/build.gradle b/app.platform/build.gradle index 6a811fd4..a1f3f53b 100644 --- a/app.platform/build.gradle +++ b/app.platform/build.gradle @@ -15,6 +15,10 @@ dependencies { project(":io.sc.platform.developer"), project(":io.sc.platform.security.loginform"), + project(":io.sc.platform.scheduler.manager"), + project(":io.sc.platform.scheduler.executor"), + + /* project(":io.sc.engine.mv"), project(":io.sc.engine.mv.frontend"), project(":io.sc.engine.mv.sample"), @@ -30,8 +34,7 @@ dependencies { project(":erm"), project(":erm.frontend"), - - project(":io.sc.platform.scheduler.manager"), + */ ) } diff --git a/erm.frontend/public/webjars/mathfonts/1.0.0/Asana/Asana-Math.woff2 b/erm.frontend/public/webjars/mathfonts/1.0.0/Asana/Asana-Math.woff2 new file mode 100644 index 00000000..3eaca1ac Binary files /dev/null and b/erm.frontend/public/webjars/mathfonts/1.0.0/Asana/Asana-Math.woff2 differ diff --git a/io.sc.platform.core.frontend/public/webjars/mathfonts/1.0.0/DejaVu/DejaVuMathTeXGyre.woff2 b/erm.frontend/public/webjars/mathfonts/1.0.0/DejaVu/DejaVuMathTeXGyre.woff2 similarity index 100% rename from io.sc.platform.core.frontend/public/webjars/mathfonts/1.0.0/DejaVu/DejaVuMathTeXGyre.woff2 rename to erm.frontend/public/webjars/mathfonts/1.0.0/DejaVu/DejaVuMathTeXGyre.woff2 diff --git a/io.sc.engine.mv.frontend/public/webjars/mathfonts/1.0.0/DejaVu/DejaVuMathTeXGyre.woff2 b/io.sc.engine.mv.frontend/public/webjars/mathfonts/1.0.0/DejaVu/DejaVuMathTeXGyre.woff2 new file mode 100644 index 00000000..c74b7517 Binary files /dev/null and b/io.sc.engine.mv.frontend/public/webjars/mathfonts/1.0.0/DejaVu/DejaVuMathTeXGyre.woff2 differ diff --git a/io.sc.engine.mv.frontend/public/webjars/mathfonts/1.0.0/DejaVu/DejaVuSerif.woff2 b/io.sc.engine.mv.frontend/public/webjars/mathfonts/1.0.0/DejaVu/DejaVuSerif.woff2 new file mode 100644 index 00000000..51776932 Binary files /dev/null and b/io.sc.engine.mv.frontend/public/webjars/mathfonts/1.0.0/DejaVu/DejaVuSerif.woff2 differ diff --git a/io.sc.engine.rule.frontend/public/webjars/mathfonts/1.0.0/DejaVu/DejaVuMathTeXGyre.woff2 b/io.sc.engine.rule.frontend/public/webjars/mathfonts/1.0.0/DejaVu/DejaVuMathTeXGyre.woff2 new file mode 100644 index 00000000..c74b7517 Binary files /dev/null and b/io.sc.engine.rule.frontend/public/webjars/mathfonts/1.0.0/DejaVu/DejaVuMathTeXGyre.woff2 differ diff --git a/io.sc.engine.rule.frontend/public/webjars/mathfonts/1.0.0/DejaVu/DejaVuSerif.woff2 b/io.sc.engine.rule.frontend/public/webjars/mathfonts/1.0.0/DejaVu/DejaVuSerif.woff2 new file mode 100644 index 00000000..51776932 Binary files /dev/null and b/io.sc.engine.rule.frontend/public/webjars/mathfonts/1.0.0/DejaVu/DejaVuSerif.woff2 differ diff --git a/io.sc.engine.st.frontend/public/webjars/mathfonts/1.0.0/DejaVu/DejaVuMathTeXGyre.woff2 b/io.sc.engine.st.frontend/public/webjars/mathfonts/1.0.0/DejaVu/DejaVuMathTeXGyre.woff2 new file mode 100644 index 00000000..c74b7517 Binary files /dev/null and b/io.sc.engine.st.frontend/public/webjars/mathfonts/1.0.0/DejaVu/DejaVuMathTeXGyre.woff2 differ diff --git a/io.sc.platform.developer.frontend/public/webjars/mathfonts/1.0.0/Asana/Asana-Math.woff2 b/io.sc.platform.developer.frontend/public/webjars/mathfonts/1.0.0/Asana/Asana-Math.woff2 new file mode 100644 index 00000000..3eaca1ac Binary files /dev/null and b/io.sc.platform.developer.frontend/public/webjars/mathfonts/1.0.0/Asana/Asana-Math.woff2 differ diff --git a/io.sc.platform.developer.frontend/public/webjars/mathfonts/1.0.0/DejaVu/DejaVuMathTeXGyre.woff2 b/io.sc.platform.developer.frontend/public/webjars/mathfonts/1.0.0/DejaVu/DejaVuMathTeXGyre.woff2 new file mode 100644 index 00000000..c74b7517 Binary files /dev/null and b/io.sc.platform.developer.frontend/public/webjars/mathfonts/1.0.0/DejaVu/DejaVuMathTeXGyre.woff2 differ diff --git a/io.sc.platform.mvc.frontend/public/webjars/mathfonts/1.0.0/DejaVu/DejaVuMathTeXGyre.woff2 b/io.sc.platform.mvc.frontend/public/webjars/mathfonts/1.0.0/DejaVu/DejaVuMathTeXGyre.woff2 new file mode 100644 index 00000000..c74b7517 Binary files /dev/null and b/io.sc.platform.mvc.frontend/public/webjars/mathfonts/1.0.0/DejaVu/DejaVuMathTeXGyre.woff2 differ diff --git a/io.sc.platform.orm/src/main/java/io/sc/platform/orm/service/DaoService.java b/io.sc.platform.orm/src/main/java/io/sc/platform/orm/service/DaoService.java index e561a1e5..a55db9b1 100644 --- a/io.sc.platform.orm/src/main/java/io/sc/platform/orm/service/DaoService.java +++ b/io.sc.platform.orm/src/main/java/io/sc/platform/orm/service/DaoService.java @@ -1,6 +1,7 @@ package io.sc.platform.orm.service; import java.io.Serializable; +import java.util.Enumeration; import java.util.List; import java.util.Map; @@ -38,7 +39,7 @@ public interface DaoService list(Specification specification, QueryParameter queryParameter) throws Exception; public Page query(QueryParameter queryParameter) throws Exception; public Page query(Specification specification, QueryParameter queryParameter) throws Exception; - public List buildCriteriaFromEntity(E entity) throws Exception; + public List buildCriteriaFromEntity(Enumeration parameterNames, E entity) throws Exception; public List getDefaultValues() throws Exception; public void resetDefaultValues() throws Exception; } diff --git a/io.sc.platform.orm/src/main/java/io/sc/platform/orm/service/impl/DaoServiceImpl.java b/io.sc.platform.orm/src/main/java/io/sc/platform/orm/service/impl/DaoServiceImpl.java index eb1a9831..5cf816d5 100644 --- a/io.sc.platform.orm/src/main/java/io/sc/platform/orm/service/impl/DaoServiceImpl.java +++ b/io.sc.platform.orm/src/main/java/io/sc/platform/orm/service/impl/DaoServiceImpl.java @@ -4,7 +4,9 @@ import io.sc.platform.orm.repository.DaoRepository; import io.sc.platform.orm.service.DaoService; import io.sc.platform.orm.service.support.*; import io.sc.platform.orm.service.support.criteria.Criteria; +import io.sc.platform.orm.service.support.criteria.impl.Contains; import io.sc.platform.orm.service.support.criteria.impl.Equals; +import io.sc.platform.orm.service.support.criteria.impl.IContains; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.context.ApplicationContext; import org.springframework.core.convert.ConversionService; @@ -421,7 +423,7 @@ public abstract class DaoServiceImpl buildCriteriaFromEntity(E entity) throws Exception { + public List buildCriteriaFromEntity(Enumeration parameterNames,E entity) throws Exception { if(entity==null){ return Collections.emptyList(); } @@ -435,7 +437,49 @@ public abstract class DaoServiceImpl> attributes =managedTypeAttributes.getSingularAssociationAttributes(); + Map> singularAttributes =managedTypeAttributes.getSingularAttributes(); + singularAttributes.putAll(managedTypeAttributes.getSingularAssociationAttributes()); + if(parameterNames!=null){ + while(parameterNames.hasMoreElements()){ + String parameterName =parameterNames.nextElement(); + SingularAttribute singularAttribute =singularAttributes.get(parameterName); + if(singularAttribute!=null){ + Object value =wrapper.getPropertyValue(parameterName); + if(value!=null){ + if (value instanceof String) { + IContains icontains = new IContains(); + icontains.setFieldName(parameterName); + icontains.setValue(value.toString()); + result.add(icontains); + } else { + Equals equals = new Equals(); + equals.setFieldName(parameterName); + equals.setValue(value.toString()); + result.add(equals); + } + } + } + + } + } +// attributes.keySet().forEach(fieldName ->{ +// JavaTypeAndValue javaTypeAndValue =attributes.get(fieldName); +// Object value =javaTypeAndValue.getValue(); +// if(value!=null) { +// if (value instanceof String) { +// IContains icontains = new IContains(); +// icontains.setFieldName(fieldName); +// icontains.setValue(value.toString()); +// result.add(icontains); +// } else { +// Equals equals = new Equals(); +// equals.setFieldName(fieldName); +// equals.setValue(value.toString()); +// result.add(equals); +// } +// } +// }); + /* if(attributes==null || attributes.isEmpty()){ return result;} attributes.keySet().forEach(fieldName ->{ Object value =wrapper.getPropertyValue(fieldName); @@ -451,6 +495,7 @@ public abstract class DaoServiceImpl extends Criteria { protected String value; + @Override public Predicate getPredicate(Root root, CriteriaQuery query, CriteriaBuilder builder) { if(!StringUtils.hasText(value)){ @@ -35,4 +36,12 @@ public class Contains extends Criteria { condition.setWhere(where); return condition; } + + public String getValue() { + return value; + } + + public void setValue(String value) { + this.value = value; + } } diff --git a/io.sc.platform.scheduler.executor/src/main/java/io/sc/platform/scheduler/executor/util/DateUtil.java b/io.sc.platform.scheduler.executor/src/main/java/io/sc/platform/scheduler/executor/util/DateUtil.java deleted file mode 100644 index b2c5de78..00000000 --- a/io.sc.platform.scheduler.executor/src/main/java/io/sc/platform/scheduler/executor/util/DateUtil.java +++ /dev/null @@ -1,156 +0,0 @@ -package io.sc.platform.scheduler.executor.util; - -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; - -import java.text.DateFormat; -import java.text.ParseException; -import java.text.SimpleDateFormat; -import java.util.Calendar; -import java.util.Date; -import java.util.HashMap; -import java.util.Map; - -/** - * date util - * - * @author xuxueli 2018-08-19 01:24:11 - */ -public class DateUtil { - - // ---------------------- format parse ---------------------- - private static Logger logger = LoggerFactory.getLogger(DateUtil.class); - - private static final String DATE_FORMAT = "yyyy-MM-dd"; - private static final String DATETIME_FORMAT = "yyyy-MM-dd HH:mm:ss"; - - private static final ThreadLocal> dateFormatThreadLocal = new ThreadLocal>(); - private static DateFormat getDateFormat(String pattern) { - if (pattern==null || pattern.trim().length()==0) { - throw new IllegalArgumentException("pattern cannot be empty."); - } - - Map dateFormatMap = dateFormatThreadLocal.get(); - if(dateFormatMap!=null && dateFormatMap.containsKey(pattern)){ - return dateFormatMap.get(pattern); - } - - synchronized (dateFormatThreadLocal) { - if (dateFormatMap == null) { - dateFormatMap = new HashMap(); - } - dateFormatMap.put(pattern, new SimpleDateFormat(pattern)); - dateFormatThreadLocal.set(dateFormatMap); - } - - return dateFormatMap.get(pattern); - } - - /** - * format datetime. like "yyyy-MM-dd" - * - * @param date - * @return - * @throws ParseException - */ - public static String formatDate(Date date) { - return format(date, DATE_FORMAT); - } - - /** - * format date. like "yyyy-MM-dd HH:mm:ss" - * - * @param date - * @return - * @throws ParseException - */ - public static String formatDateTime(Date date) { - return format(date, DATETIME_FORMAT); - } - - /** - * format date - * - * @param date - * @param patten - * @return - * @throws ParseException - */ - public static String format(Date date, String patten) { - return getDateFormat(patten).format(date); - } - - /** - * parse date string, like "yyyy-MM-dd HH:mm:s" - * - * @param dateString - * @return - * @throws ParseException - */ - public static Date parseDate(String dateString){ - return parse(dateString, DATE_FORMAT); - } - - /** - * parse datetime string, like "yyyy-MM-dd HH:mm:ss" - * - * @param dateString - * @return - * @throws ParseException - */ - public static Date parseDateTime(String dateString) { - return parse(dateString, DATETIME_FORMAT); - } - - /** - * parse date - * - * @param dateString - * @param pattern - * @return - * @throws ParseException - */ - public static Date parse(String dateString, String pattern) { - try { - Date date = getDateFormat(pattern).parse(dateString); - return date; - } catch (Exception e) { - logger.warn("parse date error, dateString = {}, pattern={}; errorMsg = {}", dateString, pattern, e.getMessage()); - return null; - } - } - - - // ---------------------- add date ---------------------- - - public static Date addYears(final Date date, final int amount) { - return add(date, Calendar.YEAR, amount); - } - - public static Date addMonths(final Date date, final int amount) { - return add(date, Calendar.MONTH, amount); - } - - public static Date addDays(final Date date, final int amount) { - return add(date, Calendar.DAY_OF_MONTH, amount); - } - - public static Date addHours(final Date date, final int amount) { - return add(date, Calendar.HOUR_OF_DAY, amount); - } - - public static Date addMinutes(final Date date, final int amount) { - return add(date, Calendar.MINUTE, amount); - } - - private static Date add(final Date date, final int calendarField, final int amount) { - if (date == null) { - return null; - } - final Calendar c = Calendar.getInstance(); - c.setTime(date); - c.add(calendarField, amount); - return c.getTime(); - } - -} \ No newline at end of file diff --git a/io.sc.platform.scheduler.manager.frontend/public/webjars/mathfonts/1.0.0/DejaVu/DejaVuMathTeXGyre.woff2 b/io.sc.platform.scheduler.manager.frontend/public/webjars/mathfonts/1.0.0/DejaVu/DejaVuMathTeXGyre.woff2 new file mode 100644 index 00000000..c74b7517 Binary files /dev/null and b/io.sc.platform.scheduler.manager.frontend/public/webjars/mathfonts/1.0.0/DejaVu/DejaVuMathTeXGyre.woff2 differ diff --git a/io.sc.platform.system.frontend/public/webjars/mathfonts/1.0.0/DejaVu/DejaVuMathTeXGyre.woff2 b/io.sc.platform.system.frontend/public/webjars/mathfonts/1.0.0/DejaVu/DejaVuMathTeXGyre.woff2 new file mode 100644 index 00000000..c74b7517 Binary files /dev/null and b/io.sc.platform.system.frontend/public/webjars/mathfonts/1.0.0/DejaVu/DejaVuMathTeXGyre.woff2 differ diff --git a/io.sc.standard.frontend/public/webjars/mathfonts/1.0.0/DejaVu/DejaVuMathTeXGyre.woff2 b/io.sc.standard.frontend/public/webjars/mathfonts/1.0.0/DejaVu/DejaVuMathTeXGyre.woff2 new file mode 100644 index 00000000..c74b7517 Binary files /dev/null and b/io.sc.standard.frontend/public/webjars/mathfonts/1.0.0/DejaVu/DejaVuMathTeXGyre.woff2 differ