Skip to content

Commit 6ba21f5

Browse files
committed
реализован конвертер blend -> j3o
1 parent e8f8b53 commit 6ba21f5

15 files changed

+575
-4
lines changed

resources/messages/messages.properties

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@ AssetComponentResourceTreeContextMenuCopyFile=Copy
99
AssetComponentResourceTreeContextMenuCutFile=Cut
1010
AssetComponentResourceTreeContextMenuPasteFile=Paste
1111
AssetComponentResourceTreeContextMenuDeleteFile=Delete
12+
AssetComponentResourceTreeContextMenuConvertFile=Convert
1213

1314
FileEditorActionSave=Save
1415

@@ -67,3 +68,5 @@ GraphicsDialogAnisotropy=Anisotropy
6768
GraphicsDialogButtonOk=Apply
6869
GraphicsDialogButtonCancel=Cancel
6970
GraphicsDialogMessage=To apply the settings restart required.
71+
72+
BlendToJ3oFileConverterDescription=Convert from .blend to .j3o

resources/messages/messages_ru.properties

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@ AssetComponentResourceTreeContextMenuCopyFile=Копировать
99
AssetComponentResourceTreeContextMenuCutFile=Вырезать
1010
AssetComponentResourceTreeContextMenuPasteFile=Вставить
1111
AssetComponentResourceTreeContextMenuDeleteFile=Удаить
12+
AssetComponentResourceTreeContextMenuConvertFile=Конвертировать
1213

1314
FileEditorActionSave=Сохранить
1415

@@ -67,3 +68,5 @@ GraphicsDialogAnisotropy=Анизатропная фильтрация
6768
GraphicsDialogButtonOk=Применить
6869
GraphicsDialogButtonCancel=Отменить
6970
GraphicsDialogMessage=Для применения настроек необходим рестарт.
71+
72+
BlendToJ3oFileConverterDescription=Конверитровать .blend в .j3o

src/com/ss/editor/FileExtensions.java

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@ public interface FileExtensions {
99

1010
public static final String JME_MATERIAL = "j3m";
1111
public static final String JME_MATERIAL_DEFINITION = "j3md";
12+
public static final String JME_OBJECT = "j3o";
1213

1314
public static final String POST_FILTER_VIEW = "pfv";
1415

@@ -20,4 +21,6 @@ public interface FileExtensions {
2021
public static final String IMAGE_BMP = "bmp";
2122
public static final String IMAGE_TIFF = "tiff";
2223
public static final String IMAGE_DDS = "dds";
24+
25+
public static final String BLENDER = "blend";
2326
}

src/com/ss/editor/Messages.java

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,7 @@ public class Messages {
2424
public static final String ASSET_COMPONENT_RESOURCE_TREE_CONTEXT_MENU_CUT_FILE;
2525
public static final String ASSET_COMPONENT_RESOURCE_TREE_CONTEXT_MENU_PASTE_FILE;
2626
public static final String ASSET_COMPONENT_RESOURCE_TREE_CONTEXT_MENU_DELETE_FILE;
27+
public static final String ASSET_COMPONENT_RESOURCE_TREE_CONTEXT_MENU_CONVERT_FILE;
2728

2829
public static final String FILE_EDITOR_ACTION_SAVE;
2930

@@ -80,6 +81,7 @@ public class Messages {
8081
public static final String GRAPHICS_DIALOG_BUTTON_CANCEL;
8182
public static final String GRAPHICS_DIALOG_MESSAGE;
8283

84+
public static final String BLEND_TO_J3O_FILE_CONVERTER_DESCRIPTION;
8385

8486
static {
8587

@@ -99,6 +101,7 @@ public class Messages {
99101
ASSET_COMPONENT_RESOURCE_TREE_CONTEXT_MENU_CUT_FILE = bundle.getString("AssetComponentResourceTreeContextMenuCutFile");
100102
ASSET_COMPONENT_RESOURCE_TREE_CONTEXT_MENU_PASTE_FILE = bundle.getString("AssetComponentResourceTreeContextMenuPasteFile");
101103
ASSET_COMPONENT_RESOURCE_TREE_CONTEXT_MENU_DELETE_FILE = bundle.getString("AssetComponentResourceTreeContextMenuDeleteFile");
104+
ASSET_COMPONENT_RESOURCE_TREE_CONTEXT_MENU_CONVERT_FILE = bundle.getString("AssetComponentResourceTreeContextMenuConvertFile");
102105

103106
FILE_EDITOR_ACTION_SAVE = bundle.getString("FileEditorActionSave");
104107

@@ -154,5 +157,7 @@ public class Messages {
154157
GRAPHICS_DIALOG_BUTTON_OK = bundle.getString("GraphicsDialogButtonOk");
155158
GRAPHICS_DIALOG_BUTTON_CANCEL = bundle.getString("GraphicsDialogButtonCancel");
156159
GRAPHICS_DIALOG_MESSAGE = bundle.getString("GraphicsDialogMessage");
160+
161+
BLEND_TO_J3O_FILE_CONVERTER_DESCRIPTION = bundle.getString("BlendToJ3oFileConverterDescription");
157162
}
158163
}
Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,32 @@
1+
package com.ss.editor.file.converter;
2+
3+
import java.nio.file.Path;
4+
5+
/**
6+
* Интерфейс для реализации конвертера файлов.
7+
*
8+
* @author Ronn
9+
*/
10+
public interface FileConverter {
11+
12+
/**
13+
* Конвертация указанного файла.
14+
*
15+
* @param source исходный файл для конвертации.
16+
*/
17+
public void convert(Path source);
18+
19+
/**
20+
* Конвертация указанного файла и запись в другой указанный файл.
21+
*
22+
* @param source исходный файл для конвертации.
23+
* @param destination файл для записи результата.
24+
*/
25+
public void convert(Path source, Path destination);
26+
27+
28+
/**
29+
* @return итоговый формат.
30+
*/
31+
public String getTargetExtension();
32+
}
Lines changed: 78 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,78 @@
1+
package com.ss.editor.file.converter;
2+
3+
import java.util.concurrent.Callable;
4+
5+
import rlib.util.array.Array;
6+
7+
/**
8+
* Класс для описания конвертера файлов.
9+
*
10+
* @author Ronn
11+
*/
12+
public class FileConverterDescription {
13+
14+
/**
15+
* Описание конвертера.
16+
*/
17+
private String description;
18+
19+
/**
20+
* Конструктор конвертера.
21+
*/
22+
private Callable<FileConverter> constructor;
23+
24+
/**
25+
* Список поддерживаемых расширений.
26+
*/
27+
private Array<String> extensions;
28+
29+
/**
30+
* @return список поддерживаемых расширений.
31+
*/
32+
public Array<String> getExtensions() {
33+
return extensions;
34+
}
35+
36+
/**
37+
* @param extensions список поддерживаемых расширений.
38+
*/
39+
public void setExtensions(final Array<String> extensions) {
40+
this.extensions = extensions;
41+
}
42+
43+
/**
44+
* @return конструктор конвертера.
45+
*/
46+
public Callable<FileConverter> getConstructor() {
47+
return constructor;
48+
}
49+
50+
/**
51+
* @param constructor конструктор конвертера.
52+
*/
53+
public void setConstructor(final Callable<FileConverter> constructor) {
54+
this.constructor = constructor;
55+
}
56+
57+
/**
58+
* @return описание конвертера.
59+
*/
60+
public String getDescription() {
61+
return description;
62+
}
63+
64+
/**
65+
* @param description описание конвертера.
66+
*/
67+
public void setDescription(final String description) {
68+
this.description = description;
69+
}
70+
71+
@Override
72+
public String toString() {
73+
return "FileConverterDescription{" +
74+
"extensions=" + extensions +
75+
", description='" + description + '\'' +
76+
'}';
77+
}
78+
}
Lines changed: 91 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,91 @@
1+
package com.ss.editor.file.converter;
2+
3+
import com.ss.editor.file.converter.impl.BlendToJ3oFileConverter;
4+
5+
import java.nio.file.Path;
6+
import java.util.concurrent.Callable;
7+
8+
import rlib.logging.Logger;
9+
import rlib.logging.LoggerManager;
10+
import rlib.util.FileUtils;
11+
import rlib.util.array.Array;
12+
import rlib.util.array.ArrayFactory;
13+
14+
/**
15+
* Реестр конвертеров файлов.
16+
*
17+
* @author Ronn
18+
*/
19+
public class FileConverterRegistry {
20+
21+
private static final Logger LOGGER = LoggerManager.getLogger(FileConverterRegistry.class);
22+
23+
private static final FileConverterRegistry INSTANCE = new FileConverterRegistry();
24+
25+
public static FileConverterRegistry getInstance() {
26+
return INSTANCE;
27+
}
28+
29+
/**
30+
* Список описаний конвертеров файлов.
31+
*/
32+
private final Array<FileConverterDescription> descriptions;
33+
34+
public FileConverterRegistry() {
35+
this.descriptions = ArrayFactory.newArray(FileConverterDescription.class);
36+
addDescription(BlendToJ3oFileConverter.DESCRIPTION);
37+
}
38+
39+
/**
40+
* Добавление нового описания конвертера.
41+
*/
42+
private void addDescription(final FileConverterDescription description) {
43+
this.descriptions.add(description);
44+
}
45+
46+
/**
47+
* @return список описаний конвертеров файлов.
48+
*/
49+
public Array<FileConverterDescription> getDescriptions() {
50+
return descriptions;
51+
}
52+
53+
/**
54+
* @return список описаний конвертеров файлов подходящих под этот.
55+
*/
56+
public Array<FileConverterDescription> getDescriptions(final Path path) {
57+
58+
final Array<FileConverterDescription> result = ArrayFactory.newArray(FileConverterDescription.class);
59+
final Array<FileConverterDescription> descriptions = getDescriptions();
60+
descriptions.forEach(description -> {
61+
62+
final Array<String> extensions = description.getExtensions();
63+
64+
if (FileUtils.containsExtensions(extensions.array(), path)) {
65+
result.add(description);
66+
}
67+
});
68+
69+
return result;
70+
}
71+
72+
/**
73+
* Создание нового конвертера файлов по указанному описанию.
74+
*
75+
* @param description описание конвертера файлов.
76+
* @param file файл который надо конвертировать.
77+
* @return новый конвертер.
78+
*/
79+
public FileConverter newCreator(final FileConverterDescription description, final Path file) {
80+
81+
final Callable<FileConverter> constructor = description.getConstructor();
82+
83+
try {
84+
return constructor.call();
85+
} catch (Exception e) {
86+
LOGGER.warning(e);
87+
}
88+
89+
return null;
90+
}
91+
}
Lines changed: 104 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,104 @@
1+
package com.ss.editor.file.converter.impl;
2+
3+
import com.ss.editor.Editor;
4+
import com.ss.editor.file.converter.FileConverter;
5+
import com.ss.editor.ui.event.FXEventManager;
6+
import com.ss.editor.ui.event.impl.CreatedFileEvent;
7+
import com.ss.editor.ui.event.impl.FileChangedEvent;
8+
9+
import java.nio.file.Files;
10+
import java.nio.file.Path;
11+
12+
import rlib.logging.Logger;
13+
import rlib.logging.LoggerManager;
14+
import rlib.util.FileUtils;
15+
import rlib.util.array.Array;
16+
import rlib.util.array.ArrayFactory;
17+
18+
import static rlib.util.FileUtils.containsExtensions;
19+
20+
/**
21+
* Базовая реализация конвертера файлов.
22+
*
23+
* @author Ronn
24+
*/
25+
public abstract class AbstractFileConverter implements FileConverter {
26+
27+
protected static final Logger LOGGER = LoggerManager.getLogger(FileConverter.class);
28+
29+
private static final Array<String> EMPTY_ARRAY = ArrayFactory.newArray(String.class);
30+
31+
protected static final FXEventManager FX_EVENT_MANAGER = FXEventManager.getInstance();
32+
protected static final Editor EDITOR = Editor.getInstance();
33+
34+
@Override
35+
public void convert(final Path source) {
36+
37+
final String targetFileName = FileUtils.getNameWithoutExtension(source) + "." + getTargetExtension();
38+
39+
final Path parent = source.getParent();
40+
final Path targetFile = parent.resolve(targetFileName);
41+
42+
convert(source, targetFile);
43+
}
44+
45+
@Override
46+
public void convert(final Path source, final Path destination) {
47+
48+
if (source == null || destination == null) {
49+
throw new IllegalArgumentException("source or destination is null.");
50+
} else if (Files.isDirectory(source) || Files.isDirectory(destination)) {
51+
throw new IllegalArgumentException("source or destination is folder.");
52+
}
53+
54+
final Array<String> extensions = getAvailableExtensions();
55+
extensions.trimToSize();
56+
57+
if (!extensions.isEmpty() && !containsExtensions(extensions.array(), source)) {
58+
throw new IllegalArgumentException("incorrect extension of file " + source);
59+
}
60+
61+
convertImpl(source, destination, Files.exists(destination));
62+
}
63+
64+
protected void convertImpl(final Path source, final Path destination, final boolean overwrite) {
65+
}
66+
67+
/**
68+
* @return список доступных расширений для конвертации.
69+
*/
70+
protected Array<String> getAvailableExtensions() {
71+
return EMPTY_ARRAY;
72+
}
73+
74+
@Override
75+
public String getTargetExtension() {
76+
return "";
77+
}
78+
79+
/**
80+
* Уведомление всех об изменении файла.
81+
*
82+
* @param file изменяемый файл.
83+
*/
84+
protected void notifyFileChanged(final Path file) {
85+
86+
final FileChangedEvent event = new FileChangedEvent();
87+
event.setFile(file);
88+
89+
FX_EVENT_MANAGER.notify(event);
90+
}
91+
92+
/**
93+
* Уведомление всех об создании файла.
94+
*
95+
* @param file созданный файл.
96+
*/
97+
protected void notifyFileCreated(final Path file) {
98+
99+
final CreatedFileEvent event = new CreatedFileEvent();
100+
event.setFile(file);
101+
102+
FX_EVENT_MANAGER.notify(event);
103+
}
104+
}

0 commit comments

Comments
 (0)