source: AE/installer2/src/net/oni2/aeinstaller/backend/oni/OniSplit.java@ 699

Last change on this file since 699 was 699, checked in by alloc, 12 years ago

AEI2 0.99t:

  • Access to files/folders which can be different in case because of user interaction are now case insensitive
  • Few cleanups
File size: 6.1 KB
RevLine 
[596]1package net.oni2.aeinstaller.backend.oni;
2
3import java.io.File;
4import java.io.IOException;
5import java.util.Vector;
6
[699]7import net.oni2.aeinstaller.backend.AppExecution;
8import net.oni2.aeinstaller.backend.CaseInsensitiveFile;
[672]9import net.oni2.aeinstaller.backend.DotNet;
[596]10import net.oni2.aeinstaller.backend.Paths;
11import net.oni2.aeinstaller.backend.Settings;
12import net.oni2.aeinstaller.backend.Settings.Platform;
13
14/**
15 * @author Christian Illy
16 */
17public class OniSplit {
18
19 /**
[602]20 * @return Is Onisplit installed?
21 */
22 public static boolean isOniSplitInstalled() {
23 return getProgramFile().exists();
24 }
25
26 /**
[596]27 * Export given dat-file to target folder
28 *
29 * @param targetFolder
30 * Target folder
31 * @param input
32 * Dat file
[600]33 * @return OniSplit output
[596]34 */
[600]35 public static Vector<String> export(File targetFolder, File input) {
[698]36 return export(targetFolder, input, null);
37 }
38
39 /**
40 * Export named resources from given dat-file to target folder
41 *
42 * @param targetFolder
43 * Target folder
44 * @param input
45 * Dat file
46 * @param pattern
47 * Filename pattern for files to export
48 * @return OniSplit output
49 */
50 public static Vector<String> export(File targetFolder, File input,
51 String pattern) {
[596]52 if (!targetFolder.exists())
53 targetFolder.mkdir();
54
55 Vector<String> cmdLine = getProgramInvocation();
[698]56 if (pattern == null)
57 cmdLine.add("-export");
58 else
59 cmdLine.add("-export:" + pattern);
[596]60 cmdLine.add(targetFolder.getPath());
61 cmdLine.add(input.getPath());
62 Vector<String> res = null;
63 try {
[624]64 res = AppExecution.executeAndWait(cmdLine);
[596]65 } catch (IOException e) {
66 e.printStackTrace();
67 }
[600]68 return res;
[596]69 }
70
[597]71 /**
72 * Import given folder to a .dat-file
[598]73 *
74 * @param sourceFolders
75 * Folders containing .oni-files
76 * @param targetFile
77 * Target .dat-file
[600]78 * @return OniSplit output
[597]79 */
[602]80 public static Vector<String> importLevel(Vector<File> sourceFolders,
81 File targetFile) {
[597]82 Vector<String> cmdLine = getProgramInvocation();
83 cmdLine.add(getImportParam());
[598]84 for (File f : sourceFolders)
85 cmdLine.add(f.getPath());
[597]86 cmdLine.add(targetFile.getPath());
87 Vector<String> res = null;
88 try {
[624]89 res = AppExecution.executeAndWait(cmdLine);
[597]90 } catch (IOException e) {
91 e.printStackTrace();
92 }
[600]93 return res;
94 }
95
96 /**
97 * Pack a level to a .dat-file. More powerful variant which allows
98 * specifying single .oni/.dat files
99 *
100 * @param sourceFoldersFiles
101 * Folders (for recursive .oni import) or files (.dat and single
102 * .oni) to import
103 * @param targetFile
104 * Target .dat-file
105 * @return OniSplit output
106 */
107 public static Vector<String> packLevel(Vector<File> sourceFoldersFiles,
108 File targetFile) {
109 Vector<String> cmdLine = getProgramInvocation();
110 cmdLine.add(getPackParam());
111 cmdLine.add(getPackTypeParam());
112 cmdLine.add("-out");
113 cmdLine.add(targetFile.getPath());
114 for (File f : sourceFoldersFiles)
115 cmdLine.add(f.getPath());
116 Vector<String> res = null;
117 try {
[624]118 res = AppExecution.executeAndWait(cmdLine);
[600]119 } catch (IOException e) {
120 e.printStackTrace();
[597]121 }
[600]122 return res;
[596]123 }
124
[597]125 /**
126 * Move files from one location to another using OniSplit so relations are
127 * handled
128 *
129 * @param targetFolder
130 * Target folder for files
131 * @param input
132 * Files to move, can contain wildcards
133 * @param moveParameter
134 * e.g. overwrite, delete
[600]135 * @return OniSplit output
[597]136 */
[600]137 public static Vector<String> move(File targetFolder, String input,
[597]138 String moveParameter) {
139 if (!targetFolder.exists())
140 targetFolder.mkdir();
141
142 Vector<String> cmdLine = getProgramInvocation();
143 cmdLine.add("-move"
144 + (moveParameter != null ? ":" + moveParameter : ""));
145 cmdLine.add(targetFolder.getPath());
146 cmdLine.add(input);
147 Vector<String> res = null;
148 try {
[624]149 res = AppExecution.executeAndWait(cmdLine);
[597]150 } catch (IOException e) {
151 e.printStackTrace();
152 }
[600]153 return res;
[597]154 }
155
[698]156 /**
157 * Convert given .oni-files to XML and put them in target folder
158 *
159 * @param targetFolder
160 * Target folder
161 * @param inputFiles
162 * .oni files
163 * @return OniSplit output
164 */
165 public static Vector<String> convertOniToXML(File targetFolder,
166 Vector<File> inputFiles) {
167 if (!targetFolder.exists())
168 targetFolder.mkdirs();
169
170 Vector<String> cmdLine = getProgramInvocation();
171 cmdLine.add("-extract:xml");
172 cmdLine.add(targetFolder.getPath());
173 for (File f : inputFiles) {
174 cmdLine.add(f.getPath());
175 }
176 Vector<String> res = null;
177 try {
178 res = AppExecution.executeAndWait(cmdLine);
179 } catch (IOException e) {
180 e.printStackTrace();
181 }
182 return res;
183 }
184
185 /**
186 * Convert given XML-files to .oni and put them in target folder
187 *
188 * @param targetFolder
189 * Target folder
190 * @param inputFiles
191 * XML-files
192 * @return OniSplit output
193 */
194 public static Vector<String> convertXMLtoOni(File targetFolder,
195 Vector<File> inputFiles) {
196 if (!targetFolder.exists())
197 targetFolder.mkdirs();
198
199 Vector<String> cmdLine = getProgramInvocation();
200 cmdLine.add("-create");
201 cmdLine.add(targetFolder.getPath());
202 for (File f : inputFiles) {
203 cmdLine.add(f.getPath());
204 }
205 Vector<String> res = null;
206 try {
207 res = AppExecution.executeAndWait(cmdLine);
208 } catch (IOException e) {
209 e.printStackTrace();
210 }
211 return res;
212 }
213
[596]214 private static String getImportParam() {
215 if (Settings.getPlatform() == Platform.MACOS)
216 return "-import:sep";
217 else
218 return "-import:nosep";
219 }
220
[600]221 private static String getPackParam() {
222 return "pack";
223 }
224
225 private static String getPackTypeParam() {
226 if (Settings.getPlatform() == Platform.MACOS)
227 return "-type:macintel";
228 else
229 return "-type:pc";
230 }
231
[596]232 private static Vector<String> getProgramInvocation() {
233 Vector<String> res = new Vector<String>();
[672]234 if (DotNet.getRuntimeExe().length() > 0)
235 res.add(DotNet.getRuntimeExe());
[602]236 res.add(getProgramFile().getPath());
[596]237 return res;
238 }
[602]239
240 private static File getProgramFile() {
[699]241 File toolsPath = CaseInsensitiveFile.getCaseInsensitiveFile(Paths.getEditionBasePath(), "Tools");
242 return CaseInsensitiveFile.getCaseInsensitiveFile(toolsPath, "Onisplit.exe");
[602]243 }
[596]244}
Note: See TracBrowser for help on using the repository browser.