package org.eclipse.iee.web.renderer;
import java.awt.image.BufferedImage;
import java.io.IOException;
import java.io.OutputStream;
import java.io.Writer;
import java.util.HashMap;
import javax.imageio.ImageIO;
import org.eclipse.iee.pad.formula.SymbolicEngine;
import org.eclipse.iee.pad.formula.SymbolicPart;
import org.eclipse.iee.pad.formula.image.FormulaImageRenderer;
import org.osgi.service.component.annotations.Component;
import org.osgi.service.component.annotations.Reference;
import org.osgi.service.component.annotations.ReferencePolicy;
@Component
public class SymbolicHTMLRenderer implements IHTMLRenderer<SymbolicPart> {
private SymbolicEngine symbolicEngine;
private FormulaImageRenderer formulaImageRenderer;
@Override
public void renderPad(SymbolicPart pad,
IHTMLRendererContext context) throws IOException {
Writer writer = context.getWriter();
writer.append("<img src='").append(context.createResourceURL(pad.getId(), "formula", new HashMap<String, String>())).append("' />");
HashMap<String, String> params = new HashMap<String, String>();
writer.append("<img src='").append(context.createResourceURL(pad.getId(), "result", params)).append("' />");
}
@Override
public void renderResource(SymbolicPart pad, String resourceId, IResourceRenderContext context)
throws IOException {
String text;
if (!"result".equals(resourceId)) {
text = pad.getFormula();
} else {
String variable = pad.getFormula();
char lastVariable = variable.charAt(variable.length() - 1);
if (lastVariable == '=')
variable = variable.substring(0, variable.lastIndexOf('='));
String result = symbolicEngine.getOutput(variable);
if (result == null) {
result = "";
}
text = result;
}
BufferedImage image = formulaImageRenderer.getFormulaImage(text, new java.awt.Color(63, 127, 95), null);
context.setContentType("image/png");
OutputStream outputStream = context.getOutputStream();
ImageIO.write(image, "png", outputStream);
}
@Reference(unbind = "unbindFormulaImageRenderer", policy = ReferencePolicy.DYNAMIC)
public void bindFormulaImageRenderer(FormulaImageRenderer renderer) {
formulaImageRenderer = renderer;
}
public void unbindFormulaImageRenderer(FormulaImageRenderer renderer) {
formulaImageRenderer = null;
}
@Reference(unbind = "unbindSymbolicEngine", policy = ReferencePolicy.DYNAMIC)
public void bindSymbolicEngine(SymbolicEngine engine) {
symbolicEngine = engine;
}
public void unbindSymbolicEngine(SymbolicEngine engine) {
symbolicEngine = null;
}
}