ВЫВОД
В результате решения поставленной задачи была получена программа, управляющая уровнями секретности папок в файловой системе, и контролирующую информационные потоки между ними. Основные функции программы— работа с уровнями секретности и копирование файлов были успешно реализованы.
14
СПИСОК ИСПОЛЬЗОВАННЫХ ИСТОЧНИКОВ
1.ГОСТ Р 7.0.97-2016. Система стандартов по информации, библиотечному и издательскому делу. Организационно-распорядительная документация. Требования к оформлению документов от 01.07.2018
2.ГОСТ 7.32-2017. Система стандартов по информации, библиотечному и издательскому делу. Отчет о научно-исследовательской работе. Структура и правила оформления от 01.07.2018
3. Информация |
с |
сайта. |
URL: |
https://www.oracle.com/java/technologies/javase/javafx-docs.html. Дата обращения: 5.11.2025
15
ПРИЛОЖЕНИЯ Приложение А. исходный код программы
import java.io.File;
public class Main{
public static void main(String[] args) { Interface.show();
}
}
import javafx.application.Application; import javafx.event.ActionEvent; import javafx.event.EventHandler; import javafx.scene.Group;
import javafx.scene.Scene; import javafx.scene.control.*; import javafx.scene.paint.Color; import javafx.stage.Stage; import javafx.scene.shape.Line;
public class Interface extends Application {
@Override
public void start(Stage stage){ Group group = new Group();
final Stage[] secondWindowStage = new Stage[1];
Button createSecrecyButton = new Button("Create secrecy"); createSecrecyButton.setLayoutX(10); createSecrecyButton.setLayoutY(10); createSecrecyButton.setPrefSize(120,20); createSecrecyButton.setOnAction(new EventHandler<ActionEvent>() {
@Override
public void handle(ActionEvent actionEvent) { try {
secondWindowStage[0].close(); } catch (Exception e) {
System.out.println("No secondary window to close (Interface.java)");
}
try {
Backend b = new Backend(); secondWindowStage[0] = b.createSecrecy();
}catch (Exception e){
Alert alert = new Alert(Alert.AlertType.ERROR); alert.setTitle("Error!"); alert.setHeaderText("Error!"); alert.setContentText(String.valueOf(e)); alert.showAndWait().ifPresent(rs -> {
if (rs == ButtonType.OK) { System.out.println("Pressed OK.");
}
});
}
}
}); group.getChildren().add(createSecrecyButton);
Button changeSecrecyButton = new Button("Change secrecy"); changeSecrecyButton.setLayoutX(10); changeSecrecyButton.setLayoutY(10+20+10); changeSecrecyButton.setPrefSize(120,20); changeSecrecyButton.setOnAction(new EventHandler<ActionEvent>() {
@Override
public void handle(ActionEvent actionEvent) { try {
secondWindowStage[0].close(); } catch (Exception e) {
16
System.out.println("No secondary window to close (Interface.java)");
}
try {
Backend b = new Backend(); secondWindowStage[0] = b.changeSecrecy();
}catch (Exception e){
Alert alert = new Alert(Alert.AlertType.ERROR); alert.setTitle("Error!"); alert.setHeaderText("Error!"); alert.setContentText(String.valueOf(e)); alert.showAndWait().ifPresent(rs -> {
if (rs == ButtonType.OK) { System.out.println("Pressed OK.");
}
});
}
}
}); group.getChildren().add(changeSecrecyButton);
Button removeSecrecyButton = new Button("Remove secrecy"); removeSecrecyButton.setLayoutX(10); removeSecrecyButton.setLayoutY(40+20+10); removeSecrecyButton.setPrefSize(120,20); removeSecrecyButton.setOnAction(new EventHandler<ActionEvent>() {
@Override
public void handle(ActionEvent actionEvent) { try {
secondWindowStage[0].close(); } catch (Exception e) {
System.out.println("No secondary window to close (Interface.java)");
}
try {
Backend b = new Backend(); secondWindowStage[0] = b.removeSecrecy();
}catch (Exception e){
Alert alert = new Alert(Alert.AlertType.ERROR); alert.setTitle("Error!"); alert.setHeaderText("Error!"); alert.setContentText(String.valueOf(e)); alert.showAndWait().ifPresent(rs -> {
if (rs == ButtonType.OK) { System.out.println("Pressed OK.");
}
});
}
}
}); group.getChildren().add(removeSecrecyButton);
Button createFolderButton = new Button("Create folder"); createFolderButton.setLayoutX(150); createFolderButton.setLayoutY(10); createFolderButton.setPrefSize(120,20); createFolderButton.setOnAction(new EventHandler<ActionEvent>() {
@Override
public void handle(ActionEvent actionEvent) { try {
secondWindowStage[0].close(); } catch (Exception e) {
System.out.println("No secondary window to close (Interface.java)");
}
try {
Backend b = new Backend(); secondWindowStage[0] = b.createFolder();
}catch (Exception e){
Alert alert = new Alert(Alert.AlertType.ERROR); alert.setTitle("Error!"); alert.setHeaderText("Error!"); alert.setContentText(String.valueOf(e));
17
alert.showAndWait().ifPresent(rs -> { if (rs == ButtonType.OK) {
System.out.println("Pressed OK.");
}
});
}
}
}); group.getChildren().add(createFolderButton);
Button changeFolderButton = new Button("Change folder"); changeFolderButton.setLayoutX(150); changeFolderButton.setLayoutY(40); changeFolderButton.setPrefSize(120,20); changeFolderButton.setOnAction(new EventHandler<ActionEvent>() {
@Override
public void handle(ActionEvent actionEvent) { try {
secondWindowStage[0].close(); } catch (Exception e) {
System.out.println("No secondary window to close (Interface.java)");
}
try {
Backend b = new Backend(); secondWindowStage[0] = b.changeFolder();
}catch (Exception e){
Alert alert = new Alert(Alert.AlertType.ERROR); alert.setTitle("Error!"); alert.setHeaderText("Error!"); alert.setContentText(String.valueOf(e)); alert.showAndWait().ifPresent(rs -> {
if (rs == ButtonType.OK) { System.out.println("Pressed OK.");
}
});
}
}
}); group.getChildren().add(changeFolderButton);
Button removeFolderButton = new Button("Remove folder"); removeFolderButton.setLayoutX(150); removeFolderButton.setLayoutY(70); removeFolderButton.setPrefSize(120,20); removeFolderButton.setOnAction(new EventHandler<ActionEvent>() {
@Override
public void handle(ActionEvent actionEvent) { try {
secondWindowStage[0].close(); } catch (Exception e) {
System.out.println("No secondary window to close (Interface.java)");
}
try {
Backend b = new Backend(); secondWindowStage[0] = b.removeFolder();
}catch (Exception e){
Alert alert = new Alert(Alert.AlertType.ERROR); alert.setTitle("Error!"); alert.setHeaderText("Error!"); alert.setContentText(String.valueOf(e)); alert.showAndWait().ifPresent(rs -> {
if (rs == ButtonType.OK) { System.out.println("Pressed OK.");
}
});
}
}
}); group.getChildren().add(removeFolderButton);
18
Button changeFolderLevelButton = new Button("Change folder secrecy level"); changeFolderLevelButton.setLayoutX(290); changeFolderLevelButton.setLayoutY(10); changeFolderLevelButton.setPrefSize(200,20); changeFolderLevelButton.setOnAction(new EventHandler<ActionEvent>() {
@Override
public void handle(ActionEvent actionEvent) { try {
secondWindowStage[0].close(); } catch (Exception e) {
System.out.println("No secondary window to close (Interface.java)");
}
try {
Backend b = new Backend(); secondWindowStage[0] = b.changeFolderLevel();
}catch (Exception e){
Alert alert = new Alert(Alert.AlertType.ERROR); alert.setTitle("Error!"); alert.setHeaderText("Error!"); alert.setContentText(String.valueOf(e)); alert.showAndWait().ifPresent(rs -> {
if (rs == ButtonType.OK) { System.out.println("Pressed OK.");
}
});
}
}
}); group.getChildren().add(changeFolderLevelButton);
Button showInfoButton = new Button("Show info"); showInfoButton.setLayoutX(10); showInfoButton.setLayoutY(100); showInfoButton.setPrefSize(480,20); showInfoButton.setOnAction(new EventHandler<ActionEvent>() {
@Override
public void handle(ActionEvent actionEvent) { try {
secondWindowStage[0].close(); } catch (Exception e) {
System.out.println("No secondary window to close (Interface.java)");
}
try {
Backend b = new Backend(); secondWindowStage[0] = b.showInfo();
}catch (Exception e){
Alert alert = new Alert(Alert.AlertType.ERROR); alert.setTitle("Error!"); alert.setHeaderText("Error!"); alert.setContentText(String.valueOf(e)); alert.showAndWait().ifPresent(rs -> {
if (rs == ButtonType.OK) { System.out.println("Pressed OK.");
}
});
}
}
}); group.getChildren().add(showInfoButton);
Button copyContentsButton = new Button("Copy"); copyContentsButton.setLayoutX(290); copyContentsButton.setLayoutY(40); copyContentsButton.setPrefSize(200,55); copyContentsButton.setOnAction(new EventHandler<ActionEvent>() {
@Override
public void handle(ActionEvent actionEvent) { try {
secondWindowStage[0].close(); } catch (Exception e) {
19
System.out.println("No secondary window to close (Interface.java)");
}
try {
Backend b = new Backend(); secondWindowStage[0] = b.copyContents();
}catch (Exception e){
Alert alert = new Alert(Alert.AlertType.ERROR); alert.setTitle("Error!"); alert.setHeaderText("Error!"); alert.setContentText(String.valueOf(e)); alert.showAndWait().ifPresent(rs -> {
if (rs == ButtonType.OK) { System.out.println("Pressed OK.");
}
});
}
}
}); group.getChildren().add(copyContentsButton);
Backend init = new Backend(); init.initialParse();
Scene scene = new Scene(group, Color.rgb(245,245,245)); stage.setScene(scene);
stage.setTitle("MBKS4");
stage.setWidth(800);
stage.setHeight(600);
stage.setResizable(false);
stage.show();
}
public static void show(){ Application.launch();
}
}
import javafx.collections.FXCollections; import javafx.collections.ObservableList; import javafx.event.ActionEvent;
import javafx.event.EventHandler; import javafx.geometry.Insets; import javafx.scene.Group;
import javafx.scene.Scene; import javafx.scene.control.*;
import javafx.scene.layout.GridPane; import javafx.scene.paint.Color; import javafx.stage.Stage;
import java.io.File; import java.util.*;
public class Backend extends Interface{
private static ArrayList<Secrecy> secrecies = new ArrayList<>(); private static ArrayList<Folder> folders = new ArrayList<>();
private void createSecrecyHandler(String name, int level){ FileWorker fw = new FileWorker();
if(level<0) level=0;
boolean isExist=false;
for(int i = 0; i< secrecies.size(); i++){
if(Objects.equals(secrecies.get(i).getName(),name) || Objects.equals(secrecies.get(i).getLevel(),level)){ isExist=true;
System.out.println("One of the subjects already exists!");
}
}
20
if(!isExist){
secrecies.add(new Secrecy(name,level)); fw.writeSecrecy(secrecies);
}
for(int i = 0; i< secrecies.size(); i++){ System.out.println(secrecies.get(i).getName()+" "+ secrecies.get(i).getLevel());
}
System.out.println("=========================");
}
private void changeSecrecyHandler(int mode, String oldName, String newName){ //mode==0 names; mode==1 levels;
FileWorker fw = new FileWorker(); try{
oldName = oldName.split(" ")[0]; newName = newName.split(" ")[0];
}catch (Exception e){ System.out.println("Nothing to split.");
}
System.out.println("oldname: "+oldName+"; newname: "+newName);
if(mode==0){
for(int i=0;i<secrecies.size();i++){ if(Objects.equals(secrecies.get(i).getName(),oldName)){
secrecies.get(i).setName(newName); fw.writeSecrecy(secrecies);
}
}
}else{
for(int i=0;i<secrecies.size();i++){ if(Objects.equals(secrecies.get(i).getLevel(),Integer.parseInt(oldName))){
secrecies.get(i).setLevel(Integer.parseInt(newName)); fw.writeSecrecy(secrecies);
}
}
for(int i=0;i<folders.size();i++){ if(folders.get(i).getSecrecyLevel()==Integer.parseInt(oldName)){
folders.get(i).setSecrecyLevel(Integer.parseInt(newName));
}
}
fw.writeFolder(folders);
}
//if level changed, change it in folders.txt
}
private void removeSecrecyHandler(int mode, String value){ //mode==0 names; mode==1 levels;
FileWorker fw = new FileWorker(); try{
value = value.split(" ")[0]; }catch (Exception e){
System.out.println("Nothing to split.");
}
System.out.println("value: "+value+"; mode: "+mode);
if(mode==0){
for(int i=0;i<secrecies.size();i++){ if(Objects.equals(secrecies.get(i).getName(),value)){
int secrecyLevel = secrecies.get(i).getLevel(); secrecies.remove(i);
for(int n=folders.size()-1;n>=0;n--){ if(Objects.equals(folders.get(n).getSecrecyLevel(),secrecyLevel)){
removeFolderHandler(folders.get(n).getName(),folders.get(n).getPath()); folders.remove(n);
}
}
21
fw.writeFolder(folders);
fw.writeSecrecy(secrecies);
}
}
}else{
for(int i=0;i<secrecies.size();i++){ if(Objects.equals(secrecies.get(i).getLevel(),Integer.parseInt(value))){
secrecies.remove(i);
for(int n=folders.size()-1;n>=0;n--){ if(folders.get(n).getSecrecyLevel()==Integer.parseInt(value)){
removeFolderHandler(folders.get(n).getName(),folders.get(n).getPath()); folders.remove(n);
}
}
fw.writeFolder(folders);
fw.writeSecrecy(secrecies);
}
}
}
//if level removed, remove all folders with this level
}
private void createFolderHandler(String name,int secrecyLevel,String path){ FileWorker fw = new FileWorker();
if(!path.endsWith("\\")) path+="\\";
//check if folder exists try {
String[] folderNames = path.split("\\\\"); //System.out.println(Arrays.toString(folderNames)); for (int i = 1; i < folderNames.length; i++) {
if(!Objects.equals(folderNames[i],null) || !Objects.equals(folderNames[i],"")) { //System.out.println(folderNames[i]);
boolean exists = false;
for (int n = 0; n < folders.size(); n++) {
if (Objects.equals(folderNames[i], folders.get(n).getName())) { exists = true;
break;
}
}
if (!exists) {
createFolderHandler(folderNames[i], secrecyLevel, path.split(folderNames[i])[0]);
}
}
}
}catch (Exception e){ System.out.println(e);
}
String folderPath = path+name;
File folder = new File(folderPath);
if (folder.mkdirs()) {
System.out.println("Folder created successfully at: " + folderPath); folders.add(new Folder(name,secrecyLevel,path)); fw.writeFolder(folders);
} else {
System.out.println("Failed to create folder or folder already exists at: " + folderPath);
}
}
private void changeFolderHandler(String oldName,String newName,String path){ FileWorker fw = new FileWorker();
if(!path.endsWith("\\")) path+="\\";
File oldDir = new File(path+oldName);
File newDir = new File(path+newName);
22
try{
oldDir.renameTo(newDir);
System.out.println("Folder successfully renamed from \""+oldDir.getName()+"\" to " + newDir.getName()); for(int i=0;i<folders.size();i++) {
if((folders.get(i).getPath()).contains(oldName)){
String[] temp = folders.get(i).getPath().split(oldName); folders.get(i).setPath(temp[0]+newName+temp[1]);
}
}
for(int i=0;i<folders.size();i++){
if(Objects.equals(folders.get(i).getName(),oldName) && Objects.equals(folders.get(i).getPath(),path)){ folders.get(i).setName(newName);
}
}
fw.writeFolder(folders); }catch (Exception e) {
System.out.println("Failed to rename");
}
}
private void removeFolderHandler(String name,String path){ FileWorker fw = new FileWorker();
String folderPath = path+name; File folder = new File(folderPath);
try{
deleteDirectory(folder);
System.out.println("Folder (and subfolders) removed successfully at: " + folderPath); for(int i=0;i<folders.size();i++) {
//delete root folder
if (Objects.equals(name, folders.get(i).getName()) && Objects.equals(path, folders.get(i).getPath())) { folders.remove(i);
}
}
for(int i=folders.size()-1;i>=0;i--){
//if abs path of folder in other abs path - remove if(folders.get(i).getPath().contains(folderPath)){
folders.remove(i);
}
}
fw.writeFolder(folders); }catch (Exception e) {
System.out.println(e);
System.out.println("Failed to remove folder or folder already removed at: " + folderPath);
}
}
private void changeFolderLevelHandler(String path, int newLevel){ FileWorker fw = new FileWorker();
for(int i=0;i<folders.size();i++){ if((folders.get(i).getPath()+folders.get(i).getName()).contains(path)){
folders.get(i).setSecrecyLevel(newLevel);
}
}
fw.writeFolder(folders);
}
private void copyContentsHandler(int level, String source, String target){ boolean canCopyTo=false;
boolean canReadFrom=false; int targetLevel=0;
for(int i=0;i<folders.size();i++){
System.out.println("write: "+folders.get(i).getPath()+folders.get(i).getName()+"; target: "+target); if(Objects.equals(folders.get(i).getPath()+folders.get(i).getName(),target)){
targetLevel=folders.get(i).getSecrecyLevel(); if(targetLevel>=level){
canCopyTo=true;
break;
}
}
23
}
System.out.println("bool:"+canReadFrom+" "+canCopyTo);
ArrayList<String> filePaths = new ArrayList<>(); if(canCopyTo) {
File directory = new File(source); File[] files = directory.listFiles(); if (files != null) {
for (File file : files) { if (file.isFile()) {
filePaths.add(file.getPath());//getting file paths System.out.println(file.getPath());
}
}
}
for (int i = 0; i < filePaths.size(); i++) { try {
Runtime rs = Runtime.getRuntime();
rs.exec("xcopy " + filePaths.get(i) + " " + target + " /I"); } catch (Exception e) {
System.out.println(e);
}
}
}
File directory = new File(source);
if (directory.exists() && directory.isDirectory()) {
File[] subdirectories = directory.listFiles(File::isDirectory);
if (subdirectories != null) {
for (File subdir : subdirectories) { System.out.println(subdir.getPath()); System.out.println(target + "\\" + subdir.getName()); int currentLevel=level+1;
for(int i=0;i<folders.size();i++){
System.out.println("AAAA " + subdir.getPath()+" " + folders.get(i).getPath()+folders.get(i).getName()); if(Objects.equals(subdir.getPath(),folders.get(i).getPath()+folders.get(i).getName())){
currentLevel=folders.get(i).getSecrecyLevel();//? break;
}
}
System.out.println(currentLevel+" "+targetLevel); if(currentLevel<=targetLevel) {
createFolderHandler(subdir.getName(), currentLevel, target); copyContentsHandler(currentLevel, subdir.getPath(), target + "\\" + subdir.getName());
}
}
}
} else {
System.out.println("Folder does not exist");
}
}
public Stage createSecrecy(){ Stage newStage = new Stage(); newStage.setWidth(300); newStage.setHeight(100);
Group group = new Group(); newStage.setTitle("CreateSecrecy");
Label label = new Label("Create secrecy:"); label.setLayoutX(10);
label.setLayoutY(5); group.getChildren().add(label);
TextField nameTF = new TextField(); nameTF.setLayoutX(10); nameTF.setLayoutY(30); nameTF.setPromptText("Name...");
24
nameTF.setPrefSize(90,20);
nameTF.setFocusTraversable(false); group.getChildren().add(nameTF);
TextField levelTF = new TextField(); levelTF.setLayoutX(110); levelTF.setLayoutY(30); levelTF.setPromptText("Level..."); levelTF.setPrefSize(90,20); levelTF.setFocusTraversable(false); group.getChildren().add(levelTF);
Button enterButton = new Button("Enter"); enterButton.setLayoutX(210); enterButton.setLayoutY(30); enterButton.setPrefSize(60,20);
enterButton.setOnAction(new EventHandler<ActionEvent>() { @Override
public void handle(ActionEvent actionEvent) { try {
createSecrecyHandler(nameTF.getText(), Integer.parseInt(levelTF.getText())); }catch (Exception e){
Alert alert = new Alert(Alert.AlertType.ERROR); alert.setTitle("Error!"); alert.setHeaderText("Error!"); alert.setContentText(String.valueOf(e)); alert.showAndWait().ifPresent(rs -> {
if (rs == ButtonType.OK) { System.out.println("Pressed OK.");
}
});
}
}
}); group.getChildren().add(enterButton);
Scene newScene = new Scene(group, Color.rgb(245,245,245)); newStage.setScene(newScene); newStage.setResizable(false);
newStage.show();
return newStage;
}
public Stage changeSecrecy(){ Stage newStage = new Stage(); newStage.setWidth(400); newStage.setHeight(100);
Group group = new Group(); newStage.setTitle("ChangeSecrecy");
Label label = new Label("Change secrecy values:"); label.setLayoutX(10);
label.setLayoutY(5); group.getChildren().add(label);
ObservableList<String> observableList = FXCollections.observableArrayList("Name","Level"); ComboBox<String> choiceCB = new ComboBox<>(observableList);
choiceCB.setLayoutX(10);
choiceCB.setLayoutY(30);
choiceCB.setPrefWidth(90);
choiceCB.setVisibleRowCount(5);
choiceCB.setValue(observableList.get(0)); group.getChildren().add(choiceCB);
TextField oldNameTF = new TextField(); oldNameTF.setLayoutX(110); oldNameTF.setLayoutY(30); oldNameTF.setPromptText("Old value...");
25
oldNameTF.setPrefSize(90,20);
oldNameTF.setFocusTraversable(false); group.getChildren().add(oldNameTF);
TextField newNameTF = new TextField(); newNameTF.setLayoutX(210); newNameTF.setLayoutY(30); newNameTF.setPromptText("New value..."); newNameTF.setPrefSize(90,20); newNameTF.setFocusTraversable(false); group.getChildren().add(newNameTF);
Button enterButton = new Button("Change"); enterButton.setLayoutX(310); enterButton.setLayoutY(30); enterButton.setPrefSize(60,20);
enterButton.setOnAction(new EventHandler<ActionEvent>() { @Override
public void handle(ActionEvent actionEvent) { try {
int mode;
String userChoice = choiceCB.getValue(); if(Objects.equals(userChoice,"Name")){
mode=0;
}else{
mode=1;
}
changeSecrecyHandler(mode,oldNameTF.getText(),newNameTF.getText()); }catch (Exception e){
Alert alert = new Alert(Alert.AlertType.ERROR); alert.setTitle("Error!"); alert.setHeaderText("Error!"); alert.setContentText(String.valueOf(e)); alert.showAndWait().ifPresent(rs -> {
if (rs == ButtonType.OK) { System.out.println("Pressed OK.");
}
});
}
}
}); group.getChildren().add(enterButton);
Scene newScene = new Scene(group, Color.rgb(245,245,245)); newStage.setScene(newScene); newStage.setResizable(false);
newStage.show();
return newStage;
}
public Stage removeSecrecy(){ Stage newStage = new Stage(); newStage.setWidth(300); newStage.setHeight(100);
Group group = new Group(); newStage.setTitle("RemoveSecrecy");
Label label = new Label("Remove secrecy by value:"); label.setLayoutX(10);
label.setLayoutY(5); group.getChildren().add(label);
ObservableList<String> observableList = FXCollections.observableArrayList("Name","Level"); ComboBox<String> choiceCB = new ComboBox<>(observableList);
choiceCB.setLayoutX(10);
choiceCB.setLayoutY(30);
choiceCB.setPrefWidth(90);
choiceCB.setVisibleRowCount(5);
26
choiceCB.setValue(observableList.get(0)); group.getChildren().add(choiceCB);
TextField valueTF = new TextField(); valueTF.setLayoutX(110); valueTF.setLayoutY(30); valueTF.setPromptText("Value..."); valueTF.setPrefSize(90,20); valueTF.setFocusTraversable(false); group.getChildren().add(valueTF);
Button enterButton = new Button("Remove"); enterButton.setLayoutX(210); enterButton.setLayoutY(30); enterButton.setPrefSize(60,20);
enterButton.setOnAction(new EventHandler<ActionEvent>() { @Override
public void handle(ActionEvent actionEvent) { try {
int mode;
String userChoice = choiceCB.getValue(); if(Objects.equals(userChoice,"Name")){
mode=0;
}else{
mode=1;
}
removeSecrecyHandler(mode,valueTF.getText()); }catch (Exception e){
Alert alert = new Alert(Alert.AlertType.ERROR); alert.setTitle("Error!"); alert.setHeaderText("Error!"); alert.setContentText(String.valueOf(e)); alert.showAndWait().ifPresent(rs -> {
if (rs == ButtonType.OK) { System.out.println("Pressed OK.");
}
});
}
}
}); group.getChildren().add(enterButton);
Scene newScene = new Scene(group, Color.rgb(245,245,245)); newStage.setScene(newScene); newStage.setResizable(false);
newStage.show();
return newStage;
}
public Stage createFolder(){ Stage newStage = new Stage(); newStage.setWidth(300); newStage.setHeight(100);
Group group = new Group(); newStage.setTitle("CreateFolder");
Label label = new Label("Create folder: (please use \" \\\" in path)"); label.setLayoutX(10);
label.setLayoutY(5); group.getChildren().add(label);
TextField nameTF = new TextField(); nameTF.setLayoutX(10); nameTF.setLayoutY(30); nameTF.setPromptText("Name..."); nameTF.setPrefSize(90,20); nameTF.setFocusTraversable(false); group.getChildren().add(nameTF);
27
TextField pathTF = new TextField(); pathTF.setLayoutX(110); pathTF.setLayoutY(30); pathTF.setPromptText("Path..."); pathTF.setPrefSize(90,20); pathTF.setFocusTraversable(false); group.getChildren().add(pathTF);
Button enterButton = new Button("Create"); enterButton.setLayoutX(210); enterButton.setLayoutY(30); enterButton.setPrefSize(60,20);
enterButton.setOnAction(new EventHandler<ActionEvent>() { @Override
public void handle(ActionEvent actionEvent) { try {
String path;
if(Objects.equals(pathTF.getText(),null) || Objects.equals(pathTF.getText(),"")){ path=".\\";
}else{
path=pathTF.getText();
}
int minLevel= (int) (Math.pow(2,31)-1);
for(int i=0;i<secrecies.size();i++){ System.out.println(secrecies.get(i).getLevel()); if(secrecies.get(i).getLevel()<=minLevel){
minLevel=secrecies.get(i).getLevel();
}
}
if(minLevel==(int) (Math.pow(2,31)-1)) throw new Exception("No secrecy levels");
createFolderHandler(nameTF.getText(),minLevel,path); }catch (Exception e){
Alert alert = new Alert(Alert.AlertType.ERROR); alert.setTitle("Error!"); alert.setHeaderText("Error!"); alert.setContentText(String.valueOf(e)); alert.showAndWait().ifPresent(rs -> {
if (rs == ButtonType.OK) { System.out.println("Pressed OK.");
}
});
}
}
}); group.getChildren().add(enterButton);
Scene newScene = new Scene(group, Color.rgb(245,245,245)); newStage.setScene(newScene); newStage.setResizable(false);
newStage.show();
return newStage;
}
public Stage changeFolder(){ Stage newStage = new Stage(); newStage.setWidth(400); newStage.setHeight(100);
Group group = new Group(); newStage.setTitle("ChangeFolder");
Label label = new Label("Change folder: (please use \" \\\" in path)"); label.setLayoutX(10);
label.setLayoutY(5);
28
group.getChildren().add(label);
TextField pathTF = new TextField(); pathTF.setLayoutX(10); pathTF.setLayoutY(30); pathTF.setPromptText("Path..."); pathTF.setPrefSize(90,20); pathTF.setFocusTraversable(false); group.getChildren().add(pathTF);
TextField oldNameTF = new TextField(); oldNameTF.setLayoutX(110); oldNameTF.setLayoutY(30); oldNameTF.setPromptText("Old name..."); oldNameTF.setPrefSize(90,20); oldNameTF.setFocusTraversable(false); group.getChildren().add(oldNameTF);
TextField newNameTF = new TextField(); newNameTF.setLayoutX(210); newNameTF.setLayoutY(30); newNameTF.setPromptText("New name..."); newNameTF.setPrefSize(90,20); newNameTF.setFocusTraversable(false); group.getChildren().add(newNameTF);
Button enterButton = new Button("Change"); enterButton.setLayoutX(310); enterButton.setLayoutY(30); enterButton.setPrefSize(60,20);
enterButton.setOnAction(new EventHandler<ActionEvent>() { @Override
public void handle(ActionEvent actionEvent) { try {
String path;
if(Objects.equals(pathTF.getText(),null) || Objects.equals(pathTF.getText(),"")){ path=".\\";
}else{
path=pathTF.getText();
}
changeFolderHandler(oldNameTF.getText(),newNameTF.getText(),path); }catch (Exception e){
Alert alert = new Alert(Alert.AlertType.ERROR); alert.setTitle("Error!"); alert.setHeaderText("Error!"); alert.setContentText(String.valueOf(e)); alert.showAndWait().ifPresent(rs -> {
if (rs == ButtonType.OK) { System.out.println("Pressed OK.");
}
});
}
}
}); group.getChildren().add(enterButton);
Scene newScene = new Scene(group, Color.rgb(245,245,245)); newStage.setScene(newScene); newStage.setResizable(false);
newStage.show();
return newStage;
}
public Stage removeFolder(){ Stage newStage = new Stage(); newStage.setWidth(300); newStage.setHeight(100);
Group group = new Group();
29
newStage.setTitle("RemoveFolder");
Label label = new Label("Remove folder: (please use \" \\\" in path)"); label.setLayoutX(10);
label.setLayoutY(5); group.getChildren().add(label);
TextField pathTF = new TextField(); pathTF.setLayoutX(10); pathTF.setLayoutY(30); pathTF.setPromptText("Path..."); pathTF.setPrefSize(90,20); pathTF.setFocusTraversable(false); group.getChildren().add(pathTF);
TextField nameTF = new TextField(); nameTF.setLayoutX(110); nameTF.setLayoutY(30); nameTF.setPromptText("Name..."); nameTF.setPrefSize(90,20); nameTF.setFocusTraversable(false); group.getChildren().add(nameTF);
Button enterButton = new Button("Remove"); enterButton.setLayoutX(210); enterButton.setLayoutY(30); enterButton.setPrefSize(60,20);
enterButton.setOnAction(new EventHandler<ActionEvent>() { @Override
public void handle(ActionEvent actionEvent) { try {
String path;
if(Objects.equals(pathTF.getText(),null) || Objects.equals(pathTF.getText(),"")){ path=".\\";
}else{
path=pathTF.getText();
}
removeFolderHandler(nameTF.getText(),path); }catch (Exception e){
Alert alert = new Alert(Alert.AlertType.ERROR); alert.setTitle("Error!"); alert.setHeaderText("Error!"); alert.setContentText(String.valueOf(e)); alert.showAndWait().ifPresent(rs -> {
if (rs == ButtonType.OK) { System.out.println("Pressed OK.");
}
});
}
}
}); group.getChildren().add(enterButton);
Scene newScene = new Scene(group, Color.rgb(245,245,245)); newStage.setScene(newScene); newStage.setResizable(false);
newStage.show();
return newStage;
}
public Stage changeFolderLevel(){ Stage newStage = new Stage(); newStage.setWidth(300); newStage.setHeight(100);
Group group = new Group(); newStage.setTitle("ChangeFolderLevel");
Label label = new Label("Change folder level: (please use \" \\\" in path)");
30
label.setLayoutX(10);
label.setLayoutY(5); group.getChildren().add(label);
TextField pathTF = new TextField(); pathTF.setLayoutX(10); pathTF.setLayoutY(30); pathTF.setPromptText("Path..."); pathTF.setPrefSize(90,20); pathTF.setFocusTraversable(false); group.getChildren().add(pathTF);
ArrayList<Integer> levels = new ArrayList<>(); for(int i=0;i<secrecies.size();i++){
levels.add(secrecies.get(i).getLevel());
}
ObservableList<Integer> observableList = FXCollections.observableArrayList(levels); ComboBox<Integer> choiceCB = new ComboBox<>(observableList); choiceCB.setLayoutX(110);
choiceCB.setLayoutY(30);
choiceCB.setPrefWidth(90);
choiceCB.setVisibleRowCount(5);
choiceCB.setValue(observableList.get(0)); group.getChildren().add(choiceCB);
Button enterButton = new Button("Change"); enterButton.setLayoutX(210); enterButton.setLayoutY(30); enterButton.setPrefSize(60,20);
enterButton.setOnAction(new EventHandler<ActionEvent>() { @Override
public void handle(ActionEvent actionEvent) { try {
String path;
if(Objects.equals(pathTF.getText(),null) || Objects.equals(pathTF.getText(),"")){ throw new Exception();
}else{
path=pathTF.getText();
}
changeFolderLevelHandler(path,choiceCB.getValue()); }catch (Exception e){
Alert alert = new Alert(Alert.AlertType.ERROR); alert.setTitle("Error!"); alert.setHeaderText("Error!"); alert.setContentText(String.valueOf(e)); alert.showAndWait().ifPresent(rs -> {
if (rs == ButtonType.OK) { System.out.println("Pressed OK.");
}
});
}
}
}); group.getChildren().add(enterButton);
Scene newScene = new Scene(group, Color.rgb(245,245,245)); newStage.setScene(newScene); newStage.setResizable(false);
newStage.show();
return newStage;
}
public Stage showInfo(){
Stage newStage = new Stage(); newStage.setWidth(750); newStage.setHeight(550);
Group group = new Group();
31
newStage.setTitle("Info");
GridPane gridPane = new GridPane(); //gridPane.getColumnConstraints().add(new ColumnConstraints(80)); gridPane.setGridLinesVisible(true);
Label emptyLabel = new Label(" ");
Label[] rowNames = new Label[secrecies.size()];
Label[] columnNames = new Label[folders.size()];
gridPane.getChildren().add(emptyLabel); GridPane.setMargin(emptyLabel,new Insets(15)); GridPane.setConstraints(emptyLabel,0,0);
for(int i=0;i<rowNames.length;i++){
rowNames[i] = new Label(" "+secrecies.get(i).getName()+" (Level "+secrecies.get(i).getLevel()+")"); gridPane.getChildren().add(rowNames[i]);
GridPane.setConstraints(rowNames[i],0,i+1); GridPane.setMargin(rowNames[i],new Insets(15));
}
for(int i=0;i<columnNames.length;i++){
columnNames[i] = new Label(folders.get(i).getPath()+folders.get(i).getName()); gridPane.getChildren().add(columnNames[i]); GridPane.setConstraints(columnNames[i],i+1,0); GridPane.setMargin(columnNames[i],new Insets(15));
}
Label[][] cross = new Label[secrecies.size()][folders.size()]; for(int i=0;i<secrecies.size();i++){
for(int n=0;n<folders.size();n++){ if(folders.get(n).getSecrecyLevel()==secrecies.get(i).getLevel()){
cross[i][n] = new Label("+"); gridPane.getChildren().add(cross[i][n]); GridPane.setConstraints(cross[i][n], n + 1, i + 1); GridPane.setMargin(cross[i][n], new Insets(5));
}
}
}
ScrollPane scrollPane = new ScrollPane(gridPane); scrollPane.setLayoutX(5); scrollPane.setLayoutY(5); scrollPane.setPrefSize(723,500);
scrollPane.setStyle("-fx-background: rgb(255,255,255)"); group.getChildren().add(scrollPane);
Scene newScene = new Scene(group, Color.rgb(245,245,245)); newStage.setScene(newScene); newStage.setResizable(false);
newStage.show();
return newStage;
}
public Stage copyContents(){ Stage newStage = new Stage(); newStage.setWidth(400); newStage.setHeight(100);
Group group = new Group(); newStage.setTitle("CopyContents");
Label label = new Label("Copy folder content: (please use \" \\\" in path)"); label.setLayoutX(10);
label.setLayoutY(5); group.getChildren().add(label);
ArrayList<Integer> levels = new ArrayList<>(); for(int i=0;i<secrecies.size();i++){
32
levels.add(secrecies.get(i).getLevel());
}
ObservableList<Integer> observableLevelList = FXCollections.observableArrayList(levels); ComboBox<Integer> levelChoiceCB = new ComboBox<>(observableLevelList); levelChoiceCB.setLayoutX(10);
levelChoiceCB.setLayoutY(30);
levelChoiceCB.setPrefWidth(90);
levelChoiceCB.setVisibleRowCount(5);
levelChoiceCB.setValue(observableLevelList.get(0));
ObservableList<String> suitableSourceFolders = FXCollections.observableArrayList();
ComboBox<String> sourceFolderChoiceCB = new ComboBox<>(suitableSourceFolders); sourceFolderChoiceCB.setLayoutX(110);
sourceFolderChoiceCB.setLayoutY(30);
sourceFolderChoiceCB.setPrefWidth(90);
sourceFolderChoiceCB.setVisibleRowCount(5); group.getChildren().add(sourceFolderChoiceCB);
// Метод для обновления списка папок
Runnable updateSourceFolders = () -> { suitableSourceFolders.clear();
Integer selectedLevel = levelChoiceCB.getValue(); if (selectedLevel != null) {
for(int i=0;i<folders.size();i++){ if(folders.get(i).getSecrecyLevel() == selectedLevel){
suitableSourceFolders.add(folders.get(i).getPath() + folders.get(i).getName());
}
}
}
// Устанавливаем первое значение если список не пуст if (!suitableSourceFolders.isEmpty()) {
sourceFolderChoiceCB.setValue(suitableSourceFolders.get(0));
}
};
ObservableList<String> suitableTargetFolders = FXCollections.observableArrayList();
ComboBox<String> targetFolderChoiceCB = new ComboBox<>(suitableTargetFolders); targetFolderChoiceCB.setLayoutX(210);
targetFolderChoiceCB.setLayoutY(30);
targetFolderChoiceCB.setPrefWidth(90);
targetFolderChoiceCB.setVisibleRowCount(5); group.getChildren().add(targetFolderChoiceCB);
// Метод для обновления списка папок
Runnable updateTargetFolders = () -> { try {
suitableTargetFolders.clear();
Integer selectedLevel = levelChoiceCB.getValue(); String tempPath;
ArrayList<String> a = new ArrayList<>();
for (int i = 0; i < folders.size(); i++) {
tempPath = folders.get(i).getPath() + folders.get(i).getName(); System.out.println("tempPath"+tempPath);
if ((folders.get(i).getSecrecyLevel() >= selectedLevel)) { for(int n=0;n<a.size();n++){
System.out.println("AAAAA "+a.get(n)); if(tempPath.contains(a.get(n))){
System.out.println(tempPath);
break;
}else{
suitableTargetFolders.add(tempPath);
break;
}
}
if(a.size()==0){
33
suitableTargetFolders.add(tempPath);
}
}else{
a.add(tempPath); System.out.println("added "+tempPath);
}
}
// Устанавливаем первое значение если список не пуст if (!suitableTargetFolders.isEmpty()) {
targetFolderChoiceCB.setValue(suitableTargetFolders.get(0));
}
}catch (Exception e){ System.out.println(e);
}
};
//Инициализируем список папок при старте updateSourceFolders.run(); updateTargetFolders.run();
//Обработчик изменения выбора уровня levelChoiceCB.setOnAction(new EventHandler<ActionEvent>() {
@Override
public void handle(ActionEvent actionEvent) { updateSourceFolders.run();
}
}); group.getChildren().add(levelChoiceCB);
sourceFolderChoiceCB.setOnAction(new EventHandler<ActionEvent>() { @Override
public void handle(ActionEvent actionEvent) { updateTargetFolders.run();
}
});
Button enterButton = new Button("Copy"); enterButton.setLayoutX(310); enterButton.setLayoutY(30); enterButton.setPrefSize(60,20);
enterButton.setOnAction(new EventHandler<ActionEvent>() { @Override
public void handle(ActionEvent actionEvent) { try {
String path; System.out.println(targetFolderChoiceCB.getValue()); if(Objects.equals(targetFolderChoiceCB.getValue(),null) ||
Objects.equals(targetFolderChoiceCB.getValue(),"")){ throw new Exception();
}else{
path=targetFolderChoiceCB.getValue();
}
copyContentsHandler(levelChoiceCB.getValue(),sourceFolderChoiceCB.getValue(),targetFolderChoiceCB.getValue()); }catch (Exception e){
Alert alert = new Alert(Alert.AlertType.ERROR); alert.setTitle("Error!"); alert.setHeaderText("Error!"); alert.setContentText(String.valueOf(e)); alert.showAndWait().ifPresent(rs -> {
if (rs == ButtonType.OK) { System.out.println("Pressed OK.");
}
});
}
}
}); group.getChildren().add(enterButton);
Scene newScene = new Scene(group, Color.rgb(245,245,245));
34
newStage.setScene(newScene);
newStage.setResizable(false);
newStage.show();
return newStage;
}
public void initialParse(){ FileWorker fw = new FileWorker();
ArrayList<Secrecy> temp1 = fw.parseSecrecies("secrecies.txt"); ArrayList<Folder> temp2 = fw.parseFolders("folders.txt");
if(Objects.equals(temp1,null)) return;
for(int i=0;i<temp1.size();i++){
secrecies.add(new Secrecy(temp1.get(i).getName(),temp1.get(i).getLevel()));
}
if(Objects.equals(temp2,null)) return;
for(int i=0;i< temp2.size();i++){
folders.add(new Folder(temp2.get(i).getName(),temp2.get(i).getSecrecyLevel(),temp2.get(i).getPath()));
}
}
public static int rng(int low, int high) { Random r = new Random();
return r.nextInt(high - low) + low;
}
public static void deleteDirectory(File dir) { if (dir.isDirectory()) {
File[] files = dir.listFiles(); if (files != null) {
for (File file : files) { deleteDirectory(file);
}
}
}
dir.delete();
}
}
public class Secrecy { private String name; private int level;
public Secrecy(String name,int level){ this.name=name;
this.level=level;
}
public String getName(){ return this.name;
}
public int getLevel(){ return this.level;
}
public void setName(String name){ this.name=name;
}
public void setLevel(int level){ this.level=level;
}
}
public class Folder { private String name;
35
private int secrecyLevel; private String path;
public Folder(String name,int secrecyLevel,String path){ this.name=name;
this.secrecyLevel=secrecyLevel;
this.path=path;
}
public String getName(){ return this.name;
}
public int getSecrecyLevel(){ return this.secrecyLevel;
}
public String getPath(){ return this.path;
}
public void setPath(String path){ this.path=path;
}
public void setName(String name){ this.name=name;
}
public void setSecrecyLevel(int level){ this.secrecyLevel=level;
}
}
import java.io.BufferedReader; import java.io.FileReader; import java.io.FileWriter; import java.io.IOException; import java.util.ArrayList;
public class FileWorker {
public void writeSecrecy(ArrayList<Secrecy> secrecies){ try(FileWriter writer = new FileWriter("secrecies.txt", false))
{
for(int i=0;i<secrecies.size();i++){
String text = secrecies.get(i).getName()+"-"+secrecies.get(i).getLevel(); writer.write(text);
writer.append('\n');
writer.flush();
}
}
catch(IOException e){ System.out.println(e.getMessage());
}
}
public ArrayList<Secrecy> parseSecrecies(String path){ ArrayList<Secrecy> result = new ArrayList<>(); try(BufferedReader br = new BufferedReader(new FileReader(path)))
{
//чтение построчно
String s; while((s=br.readLine())!=null){
String name = s.split("-")[0];
int level = Integer.parseInt(s.split("-")[1]); result.add(new Secrecy(name,level));
}
}
catch(IOException ex){ System.out.println(ex.getMessage()); return null;
}
return result;
36
}
public void writeFolder(ArrayList<Folder> folders){ try(FileWriter writer = new FileWriter("folders.txt", false))
{
for(int i=0;i<folders.size();i++){
String text = folders.get(i).getName()+"-"+folders.get(i).getSecrecyLevel()+"-"+folders.get(i).getPath(); writer.write(text);
writer.append('\n');
writer.flush();
}
}
catch(IOException e){ System.out.println(e.getMessage());
}
}
public ArrayList<Folder> parseFolders(String path){ ArrayList<Folder> result = new ArrayList<>();
try(BufferedReader br = new BufferedReader(new FileReader(path)))
{
//чтение построчно
String s; while((s=br.readLine())!=null){
String name = s.split("-")[0];
int secrecyLevel = Integer.parseInt(s.split("-")[1]); String folderPath = s.split("-")[2];
result.add(new Folder(name,secrecyLevel,folderPath));
}
}
catch(IOException ex){ System.out.println(ex.getMessage()); return null;
}
return result;
}
}
37
