1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16 package org.qedeq.kernel.bo.service.unicode;
17
18 import java.io.File;
19 import java.io.FileOutputStream;
20 import java.io.IOException;
21 import java.util.Locale;
22
23 import org.qedeq.base.io.Parameters;
24 import org.qedeq.base.io.TextOutput;
25 import org.qedeq.base.trace.Trace;
26 import org.qedeq.kernel.bo.KernelContext;
27 import org.qedeq.kernel.bo.log.QedeqLog;
28 import org.qedeq.kernel.bo.module.InternalModuleServiceCall;
29 import org.qedeq.kernel.bo.module.InternalServiceJob;
30 import org.qedeq.kernel.bo.module.KernelQedeqBo;
31 import org.qedeq.kernel.bo.service.basis.ModuleServicePluginExecutor;
32 import org.qedeq.kernel.se.common.ModuleService;
33 import org.qedeq.kernel.se.common.SourceFileExceptionList;
34
35
36
37
38
39
40
41
42
43
44 public class Qedeq2Utf8Executor implements ModuleServicePluginExecutor {
45
46
47 private static final Class CLASS = Qedeq2Utf8Executor.class;
48
49
50 private TextOutput printer;
51
52
53 private File destination;
54
55
56 private final Qedeq2UnicodeVisitor visitor;
57
58
59 private int maxColumns;
60
61
62 private String[] languages;
63
64
65 private int run = 0;
66
67
68
69
70
71
72
73
74 public Qedeq2Utf8Executor(final ModuleService plugin, final KernelQedeqBo prop,
75 final Parameters parameters) {
76 final boolean info = parameters.getBoolean("info");
77
78 maxColumns = parameters.getInt("maximumColumn");
79 if (parameters.getInt("maximumColumn") != 0) {
80 maxColumns = Math.max(10, maxColumns);
81 }
82 final boolean brief = parameters.getBoolean("brief");
83 visitor = new Qedeq2UnicodeVisitor(plugin, prop, info , maxColumns, true, brief);
84 }
85
86 public Object executePlugin(final InternalModuleServiceCall call, final Object data) {
87 final String method = "executePlugin()";
88 try {
89 QedeqLog.getInstance().logRequest("Generate UTF-8", visitor.getKernelQedeqBo().getUrl());
90 languages = visitor.getKernelQedeqBo().getSupportedLanguages();
91 for (run = 0; run < languages.length; run++) {
92 final String result = generateUtf8(call.getInternalServiceProcess(), languages[run], "1");
93 if (languages[run] != null) {
94 QedeqLog.getInstance().logSuccessfulReply(
95 "UTF-8 for language \"" + languages[run]
96 + "\" was generated into \"" + result + "\"", visitor.getKernelQedeqBo().getUrl());
97 } else {
98 QedeqLog.getInstance().logSuccessfulReply(
99 "UTF-8 for default language "
100 + "was generated into \"" + result + "\"", visitor.getKernelQedeqBo().getUrl());
101 }
102 }
103 if (languages.length == 0) {
104 QedeqLog.getInstance().logMessage("no supported language found, assuming 'en'");
105 final String result = generateUtf8(call.getInternalServiceProcess(), "en", "1");
106 QedeqLog.getInstance().logSuccessfulReply(
107 "UTF-8 for language \"en"
108 + "\" was generated into \"" + result + "\"", visitor.getKernelQedeqBo().getUrl());
109 }
110 } catch (final SourceFileExceptionList e) {
111 final String msg = "Generation failed";
112 Trace.fatal(CLASS, this, method, msg, e);
113 QedeqLog.getInstance().logFailureReply(msg, visitor.getKernelQedeqBo().getUrl(), e.getMessage());
114 } catch (IOException e) {
115 final String msg = "Generation failed";
116 Trace.fatal(CLASS, this, method, msg, e);
117 QedeqLog.getInstance().logFailureReply(msg, visitor.getKernelQedeqBo().getUrl(), e.getMessage());
118 } catch (final RuntimeException e) {
119 Trace.fatal(CLASS, this, method, "unexpected problem", e);
120 QedeqLog.getInstance().logFailureReply(
121 "Generation failed", visitor.getKernelQedeqBo().getUrl(), "unexpected problem: "
122 + (e.getMessage() != null ? e.getMessage() : e.toString()));
123 }
124 return null;
125 }
126
127
128
129
130
131
132
133
134
135
136
137
138
139 public String generateUtf8(final InternalServiceJob process, final String language, final String level)
140 throws SourceFileExceptionList, IOException {
141
142
143 try {
144 visitor.getKernelQedeqBo().getKernelServices().loadRequiredModules(
145 process, visitor.getKernelQedeqBo());
146 visitor.getKernelQedeqBo().getKernelServices().checkWellFormedness(
147 process, visitor.getKernelQedeqBo());
148 } catch (Exception e) {
149
150 Trace.trace(CLASS, "generateUtf8(KernelQedeqBo, String, String)", e);
151 }
152 String lan = "en";
153 if (language != null) {
154 lan = language;
155 }
156
157
158
159
160
161 String txt = visitor.getKernelQedeqBo().getModuleAddress().getFileName();
162 if (txt.toLowerCase(Locale.US).endsWith(".xml")) {
163 txt = txt.substring(0, txt.length() - 4);
164 }
165 if (lan.length() > 0) {
166 txt = txt + "_" + lan;
167 }
168 destination = new File(KernelContext.getInstance().getConfig()
169 .getGenerationDirectory(), txt + ".txt").getCanonicalFile();
170 printer = new TextOutput(visitor.getKernelQedeqBo().getName(), new FileOutputStream(destination),
171 "UTF-8");
172
173 try {
174 visitor.generateUtf8(process, printer, lan, level);
175 } finally {
176 printer.flush();
177 printer.close();
178 }
179 if (printer.checkError()) {
180 throw printer.getError();
181 }
182 return destination.toString();
183 }
184
185 public String getLocationDescription() {
186 if (languages != null && run < languages.length) {
187 return languages[run] + " " + visitor.getLocationDescription();
188 }
189 if (languages != null && languages.length > 0) {
190 return languages[languages.length] + " " + visitor.getLocationDescription();
191 }
192 return "unknown";
193 }
194
195 public double getVisitPercentage() {
196 return visitor.getVisitPercentage() / languages.length * (run + 1);
197 }
198
199 public boolean getInterrupted() {
200 return visitor.getInterrupted();
201 }
202
203 }