diff --git a/build_files/pom.xml b/build_files/pom.xml index e9c1973..8236080 100644 --- a/build_files/pom.xml +++ b/build_files/pom.xml @@ -1,6 +1,6 @@ - arcadexsystem diff --git a/configuration/pom.xml b/configuration/pom.xml index c23a663..93a3806 100644 --- a/configuration/pom.xml +++ b/configuration/pom.xml @@ -1,6 +1,6 @@ - arcadexsystem diff --git a/database/pom.xml b/database/pom.xml index 51929bc..bed81fa 100644 --- a/database/pom.xml +++ b/database/pom.xml @@ -1,6 +1,6 @@ - arcadexsystem diff --git a/filesystem/pom.xml b/filesystem/pom.xml index 61263c8..f9fe83c 100644 --- a/filesystem/pom.xml +++ b/filesystem/pom.xml @@ -1,6 +1,6 @@ - arcadexsystem diff --git a/filesystem/src/main/java/FileSystemLib.java b/filesystem/src/main/java/FileSystemLib.java new file mode 100644 index 0000000..ba9bfdc --- /dev/null +++ b/filesystem/src/main/java/FileSystemLib.java @@ -0,0 +1,145 @@ +import java.io.*; +import java.nio.file.Files; +import java.nio.file.Path; +import java.nio.file.StandardCopyOption; + +/** + * File System proxy lib + *

+ * Created by daniil on 02.04.16. + */ +public class FileSystemLib { + /** + * Copy data from InputStream to OutputStream + * + * @param from Input Stream + * @param to Output Stream + * @return size of copied data + * @throws IOException + */ + protected static long copy(InputStream from, OutputStream to) throws IOException { + assert from != null; + assert to != null; + byte[] buf = new byte[4096]; + long total = 0L; + + while (true) { + int r = from.read(buf); + if (r == -1) { + return total; + } + + to.write(buf, 0, r); + total += (long) r; + } + } + + /** + * Copy file or directory from one direction to another + * + * @param from File to copy + * @param to Destination + * @param replace replace the destination file if present? + * @throws IOException + */ + public void copy(Path from, Path to, boolean replace) throws IOException { + assert from != null; + assert to != null; + + if (!replace) + Files.copy(from, to); + else + Files.copy(from, to, StandardCopyOption.REPLACE_EXISTING); + } + + /** + * Delete file + * + * @param file file to delete + * @throws IOException, FileNotFoundException + */ + public void delete(File file) throws IOException { + assert file != null; + + if (!file.exists()) + throw new FileNotFoundException("Unable to delete nonexistent file"); + if (!file.delete()) + throw new IOException("Unable to delete this file"); + } + + /** + * Create a symlink + * + * @param linkFile Where symlink should be created + * @param actualFile Where should it point to + * @throws IOException + */ + public void createSymlink(Path linkFile, Path actualFile) throws IOException { + assert linkFile != null; + assert actualFile != null; + + if (!actualFile.toFile().exists()) + throw new FileNotFoundException("Couldn't find symlink destination"); + + Files.createSymbolicLink(linkFile, actualFile); + } + + public void restoreFromResources(String resourceName, File destination, boolean replace) throws IOException { + assert resourceName != null; + assert destination != null; + + if (destination.exists() && !replace) + return; + try { + if (!destination.createNewFile()) + throw new IOException("Unable to create new file"); + + try (InputStream is = this.getClass().getClassLoader().getResourceAsStream(resourceName); + OutputStream os = new FileOutputStream(destination)) { + copy(is, os); + } + } catch (IOException e) { + throw new IOException("Unable to restore file from resource"); + } + } + + /** + * Get FileReader for the file + *

+ * We need this to make the code testable + * + * @param file file to read + * @return FileReader + * @throws FileNotFoundException + */ + public Reader getReader(File file) throws FileNotFoundException { + assert file != null; + + return new FileReader(file); + } + + /** + * Get FileWriter for the file + *

+ * We need this to make the code testable + * + * @param file file to write to + * @return FileWriter + * @throws IOException + */ + public Writer getWriter(File file) throws IOException { + return new FileWriter(file); + } + + /** + * Unzip archive to directory + * + * @param archive archive to extract + * @param directory destination + * @throws IOException + */ + public void unzip(String archive, String directory) throws IOException { + UnzipUtility zip = new UnzipUtility(); + zip.unzip(archive, directory); + } +} diff --git a/netty_api/pom.xml b/netty_api/pom.xml index fad51d3..6578653 100644 --- a/netty_api/pom.xml +++ b/netty_api/pom.xml @@ -1,6 +1,6 @@ - arcadexsystem diff --git a/screen/pom.xml b/screen/pom.xml index 8927e21..2bd99c6 100644 --- a/screen/pom.xml +++ b/screen/pom.xml @@ -1,6 +1,6 @@ - arcadexsystem diff --git a/screen/src/main/java/ScreenLib.java b/screen/src/main/java/ScreenLib.java new file mode 100644 index 0000000..9405982 --- /dev/null +++ b/screen/src/main/java/ScreenLib.java @@ -0,0 +1,65 @@ +import java.io.IOException; +import java.nio.file.Path; + +/** + * Realization of class dedicated to the control + * of GNU Screen sessions + *

+ * Created by daniil on 02.04.16. + */ +public class ScreenLib { + + /** + * Start a screen with certain ID + * and execute a command inside it + * + * @param screenName Screen ID + * @param runPath Home path of started screen + * @param command Command [+args] to execute inside the screen + * @throws IOException + */ + public void startScreen(String screenName, Path runPath, String... command) throws IOException { + assert screenName != null && screenName.length() != 0; + assert runPath != null; + + // Merge two arrays + String[] commandBase = new String[command.length + 3]; + commandBase[0] = "screen"; + commandBase[1] = "-dmS"; + commandBase[2] = screenName; + + System.arraycopy(command, 0, commandBase, 3, command.length); + + ProcessBuilder processBuilder = new ProcessBuilder(commandBase); + processBuilder.directory(runPath.toFile()); + processBuilder.start(); + } + + /** + * Send command to specific screen + * + * @param screenName Screen ID + * @param command Command to send + * @throws IOException + */ + public void sendCommand(String screenName, String command) throws IOException { + assert screenName != null; + assert command != null; + + ProcessBuilder processBuilder = new ProcessBuilder("screen", "-S", screenName, "-p", "0", "-X", "stuff", String.format(command + "%n")); + processBuilder.start(); + } + + /** + * Force terminate a screen session + * + * @param screenName Screen ID + * @throws IOException + */ + public void killScreen(String screenName) throws IOException { + assert screenName != null; + + ProcessBuilder processBuilder = new ProcessBuilder("screen", "-X", "-S", screenName, "quit"); + processBuilder.start(); + } +} diff --git a/server_manager/pom.xml b/server_manager/pom.xml index 03e8009..94c769b 100644 --- a/server_manager/pom.xml +++ b/server_manager/pom.xml @@ -1,6 +1,6 @@ - arcadexsystem diff --git a/web_api/pom.xml b/web_api/pom.xml index a50fd2a..bb5d46c 100644 --- a/web_api/pom.xml +++ b/web_api/pom.xml @@ -1,6 +1,6 @@ - arcadexsystem