diff --git a/.idea/compiler.xml b/.idea/compiler.xml index 76fcf38..a38cb43 100644 --- a/.idea/compiler.xml +++ b/.idea/compiler.xml @@ -32,6 +32,26 @@ + + + + + + + + + + + + + + + + + + + + diff --git a/.idea/gradle.xml b/.idea/gradle.xml index 611e7c8..f0a3acf 100644 --- a/.idea/gradle.xml +++ b/.idea/gradle.xml @@ -4,8 +4,8 @@ \ No newline at end of file diff --git a/.idea/modules.xml b/.idea/modules.xml index 7ffebf6..7d583ac 100644 --- a/.idea/modules.xml +++ b/.idea/modules.xml @@ -3,6 +3,9 @@ + + + diff --git a/build.gradle b/build.gradle index d640ba4..a7934ee 100644 --- a/build.gradle +++ b/build.gradle @@ -35,6 +35,8 @@ repositories { dependencies { implementation 'javax.servlet:javax.servlet-api:3.1.0' testCompileClasspath 'org.junit.jupiter:junit-jupiter:5.8.2' + testImplementation 'org.apache.tomcat.embed:tomcat-embed-core:9.0.76' + testImplementation 'org.apache.tomcat.embed:tomcat-embed-jasper:9.0.76' runtimeClasspath files(ncoreGenerateControlDataJar) runtimeClasspath files(genJar) annotationProcessor 'biz.redsoft.ncore:ncoreAnnotationProcessor:1.0.+' diff --git a/src/main/java/biz/redsoft/sample/MainForm.java b/src/main/java/biz/redsoft/sample/MainForm.java deleted file mode 100644 index 97ff2b8..0000000 --- a/src/main/java/biz/redsoft/sample/MainForm.java +++ /dev/null @@ -1,45 +0,0 @@ -/* - * Copyright (C) 2023 Red Soft Corporation. - * - * This file is part of Red nCore. - * - * Red nCore is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2, or (at your option) - * any later version. - * - * Red nCore is distributed in the hope that it will be useful, but - * WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with Red nCore; see the file COPYING. If not, write to the - * Red Soft Corporation, 117105, Russia, Moscow, Nagornyy proyezd, 5. - * - * Linking this library statically or dynamically with other modules is - * making a combined work based on this library. Thus, the terms and - * conditions of the GNU General Public License cover the whole - * combination. - * - * As a special exception, the copyright holders of this library give you - * permission to link this library with independent modules to produce an - * executable, regardless of the license terms of these independent - * modules, and to copy and distribute the resulting executable under - * terms of your choice, provided that you also meet, for each linked - * independent module, the terms and conditions of the license of that - * module. An independent module is a module which is not derived from - * or based on this library. If you modify this library, you may extend - * this exception to your version of the library, but you are not - * obligated to do so. If you do not wish to do so, delete this - * exception statement from your version. - */ - -package biz.redsoft.sample; - -public class MainForm extends biz.redsoft.ncore.client.MainForm { - - public static void main(String[] args) throws Throwable { - biz.redsoft.ncore.client.MainForm.main(args); - } -} diff --git a/src/main/resources/META-INF/resources/VAADIN/themes/img/page_white_delete.png b/src/main/resources/META-INF/resources/VAADIN/themes/img/page_white_delete.png new file mode 100644 index 0000000..644935f Binary files /dev/null and b/src/main/resources/META-INF/resources/VAADIN/themes/img/page_white_delete.png differ diff --git a/src/main/resources/META-INF/resources/VAADIN/themes/img/upload_file.gif b/src/main/resources/META-INF/resources/VAADIN/themes/img/upload_file.gif new file mode 100644 index 0000000..9bffce7 Binary files /dev/null and b/src/main/resources/META-INF/resources/VAADIN/themes/img/upload_file.gif differ diff --git a/src/test/java/biz/redsoft/sample/TomcatStarter.java b/src/test/java/biz/redsoft/sample/TomcatStarter.java new file mode 100644 index 0000000..49006e6 --- /dev/null +++ b/src/test/java/biz/redsoft/sample/TomcatStarter.java @@ -0,0 +1,122 @@ +/* + * Copyright (C) 2017 Red Soft Corporation. + * + * This file is part of Red nCore. + * + * Red nCore is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2, or (at your option) + * any later version. + * + * Red nCore is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with Red nCore; see the file COPYING. If not, write to the + * Red Soft Corporation, 117105, Russia, Moscow, Nagornyy proyezd, 5. + * + * Linking this library statically or dynamically with other modules is + * making a combined work based on this library. Thus, the terms and + * conditions of the GNU General Public License cover the whole + * combination. + * + * As a special exception, the copyright holders of this library give you + * permission to link this library with independent modules to produce an + * executable, regardless of the license terms of these independent + * modules, and to copy and distribute the resulting executable under + * terms of your choice, provided that you also meet, for each linked + * independent module, the terms and conditions of the license of that + * module. An independent module is a module which is not derived from + * or based on this library. If you modify this library, you may extend + * this exception to your version of the library, but you are not + * obligated to do so. If you do not wish to do so, delete this + * exception statement from your version. + */ + +package biz.redsoft.sample; + +import java.io.File; +import java.io.IOException; +import java.io.OutputStream; +import java.net.InetAddress; +import java.net.Socket; + +import javax.servlet.ServletException; + +import org.apache.catalina.LifecycleException; +import org.apache.catalina.Server; +import org.apache.catalina.WebResourceRoot; +import org.apache.catalina.core.StandardContext; +import org.apache.catalina.startup.Tomcat; +import org.apache.catalina.webresources.DirResourceSet; +import org.apache.catalina.webresources.FileResourceSet; +import org.apache.catalina.webresources.StandardRoot; +import org.apache.tomcat.util.scan.StandardJarScanner; + +/** + * @author Victor Bellavin + */ +public class TomcatStarter { + private String contextPath = "/ncore"; + private int port = 8080; + + private int shutdownPort = 8020; + private String shutdownCommand = "SHUTDOWN"; + + public void start() throws ServletException, LifecycleException { + System.setProperty("catalina.home", new File(".").getAbsolutePath()); + final Tomcat tomcat = new Tomcat(); + tomcat.setPort(port); + tomcat.setBaseDir("."); + tomcat.getHost().setAppBase("."); + tomcat.getConnector(); // initialize standard HTTP 1.1 connector + tomcat.enableNaming(); + final Server server = tomcat.getServer(); + server.setPort(shutdownPort); + server.setShutdown(shutdownCommand); + final StandardContext webContext = (StandardContext) tomcat.addWebapp(contextPath, "src/main/webapp"); + webContext.setUseNaming(true); + final WebResourceRoot resources = new StandardRoot(webContext); + //aliases to resources + final String base = ap(""); + resources.addPreResources(new DirResourceSet(resources, "/META-INF/resources", ap("src/main/resources"), "/META-INF/resources")); + //resources.addPreResources(new DirResourceSet(resources, "/WEB-INF/classes/export_templates", base, "/export_templates")); + if (new File(base, "ncore-properties-local.xml").exists()) + resources.addPreResources(new FileResourceSet(resources, "/WEB-INF/ncore-properties-local.xml", base, "/ncore-properties-local.xml")); + //resources.addPreResources(new FileResourceSet(resources, "/WEB-INF/ncore-properties-local-openid.xml", base, "/ncore-properties-local-openid.xml")); + resources.addPreResources(new FileResourceSet(resources, "/WEB-INF/logback.xml", base, "/logback.xml")); + webContext.setResources(resources); + // IDEA не всегда корректно формирует пути. Отключим проверку ресурсов. + ((StandardJarScanner)webContext.getJarScanner()).setScanClassPath(false); + webContext.setWorkDir("build/tomcat/work"); + tomcat.start(); + server.await(); + tomcat.stop(); + } + + private String ap(String s) { + return new File(s).getAbsolutePath(); + } + + public void stop() throws IOException { + final InetAddress serverAddress = InetAddress.getByName("localhost"); + final Socket socket = new Socket(serverAddress, shutdownPort); + try (OutputStream os = socket.getOutputStream()) { + final byte[] buffer = shutdownCommand.getBytes(); + os.write(buffer, 0, buffer.length); + os.flush(); + } + } + + public static void main(String[] args) throws ServletException, LifecycleException, IOException { + if (args.length > 0) { + String command = args[0]; + if ("start".equals(command)) + new TomcatStarter().start(); + else if ("stop".equals(command)) + new TomcatStarter().stop(); + } + } +}