package com.iambookmaster.server.logic; import java.io.UnsupportedEncodingException; import java.util.ArrayList; import com.iambookmaster.client.beans.Greeting; import com.iambookmaster.client.beans.Paragraph; import com.iambookmaster.client.beans.ParagraphConnection; import com.iambookmaster.client.common.ColorProvider; import com.iambookmaster.client.locale.AppConstants; import com.iambookmaster.client.locale.AppMessages; import com.iambookmaster.client.model.Model; import com.iambookmaster.client.model.ParagraphParsingHandler; import com.iambookmaster.client.paragraph.BookDecorator; public class HTMLBookDecrator implements BookDecorator { public static final String ENCODING = "UTF-8"; private StringBuffer buffer; private final AppConstants appConstants; private final AppMessages appMessages; private final Model model; public HTMLBookDecrator(Model mod,AppConstants appConstants,AppMessages appMessages) { this.model = mod; this.appConstants = appConstants; this.appMessages = appMessages; buffer = new StringBuffer(); buffer.append("<html><head>\n"); buffer.append("<meta http-equiv=\"content-type\" content=\"text/html;charset=utf-8\" />\n"); buffer.append("<title>"); buffer.append(model.getSettings().getBookTitle()); buffer.append(' '); buffer.append(model.getSettings().getBookAuthors()); buffer.append("</title>\n"); buffer.append("<style type=\"text/css\">\n);"); buffer.append("body {\n"); buffer.append("background: "); if (model.getSettings().getTextBackground()==0) { buffer.append("white"); } else { buffer.append(ColorProvider.getColorName(model.getSettings().getTextBackground())); } buffer.append(";\n"); buffer.append("color: "); buffer.append(ColorProvider.getColorName(model.getSettings().getTextColor())); buffer.append(";\n"); buffer.append("}\n"); buffer.append(".title {\n"); buffer.append("font-size: 2em;\n"); buffer.append("font-weight: bold;\n"); buffer.append("}\n"); buffer.append(".authors {\n"); buffer.append("font-size: 1.3em;\n"); buffer.append("font-weight: bold;\n"); buffer.append("}\n"); buffer.append(".description {\n"); buffer.append("font-size: 1em;\n"); buffer.append("}\n"); buffer.append(".paragraph {\n"); buffer.append("font-size: 1em;\n"); buffer.append("}\n"); buffer.append(".paragraphNumber {\n"); buffer.append("font-weight: bold;\n"); buffer.append("}\n"); buffer.append(".paragraphIncomeNumbers {\n"); buffer.append("}\n"); buffer.append(".paragraphLink {\n"); buffer.append("}\n"); buffer.append(".greetingBox {\n"); buffer.append("}\n"); buffer.append(".greeting {\n"); buffer.append("}\n"); buffer.append(".greetingText {\n"); buffer.append("}\n"); buffer.append(".iambm {font-size: smaller;\n"); buffer.append("}\n"); buffer.append(".rulesBox {\n"); buffer.append("}\n"); buffer.append("</style></head><body>\n"); buffer.append("<div class=\"title\">"); buffer.append(model.getSettings().getBookTitle()); buffer.append("</div>\n"); buffer.append("<div class=\"authors\">"); buffer.append(model.getSettings().getBookAuthors()); buffer.append("</div>\n"); buffer.append("<p class=\"description\">"); buffer.append(model.getSettings().getBookDescription()); buffer.append("</p>\n"); buffer.append("<p class=\"iambm\">"); buffer.append(appConstants.bookCreatedBy()); buffer.append("</p>\n"); if (model.getBookRules().length()>0) { buffer.append("<p class=\"rulesBox\">"); buffer.append(model.getBookRules().replace("\n", "<br/>\n")); buffer.append("</p>\n"); } } public void appendParagraph(int number,String text,Paragraph paragraph,ArrayList<ParagraphConnection> connections,ArrayList<ParagraphConnection> incomeConnections) { buffer.append("<p class=\"paragraph\"><a name=\"par"); buffer.append(number); buffer.append("\"><span class=\"paragraphNumber\">"); buffer.append(number); buffer.append("</span> </a>"); if (model.getSettings().isHiddenUsingObjects() && incomeConnections != null && incomeConnections.size()>0){ boolean first=true; for (ParagraphConnection connection : incomeConnections) { if (connection.getType()==ParagraphConnection.TYPE_NORMAL && connection.getObject() != null) { if (first) { buffer.append("<span class=\"paragraphIncomeNumbers\">["); first = false; } else { buffer.append(','); } if (connection.getTo()==paragraph) { buffer.append(connection.getFrom().getNumber()); } else { buffer.append(connection.getTo().getNumber()); } } } if (first==false) { buffer.append("]</span> "); } } buffer.append(text.replace("\n", "<br/>\n")); buffer.append("</p>\n"); } public String decorateNumber(int number,Paragraph from,Paragraph to, ParagraphConnection connection) { StringBuffer buffer = new StringBuffer(" <a href=\"#par"); buffer.append(number); buffer.append("\" class=\"paragraphLink\">"); buffer.append(number); buffer.append("</a> "); return buffer.toString(); } public void setStartParagraph(Paragraph paragraph) { buffer.append("<p class=\"paragraph\"><a href=\"#par"); buffer.append(paragraph.getNumber()); buffer.append("\">"); buffer.append(appConstants.decoratorStart()); buffer.append("</a></p>"); } public void endBook() { buffer.append("<body></html>\n"); } public void startBook() { } public byte[] toBytes() { try { return buffer.toString().getBytes(ENCODING); } catch (UnsupportedEncodingException e) { throw new RuntimeException(e); } } public void addGreeting(Greeting greeting) { buffer.append("<p class=\"greeting\">"); if (greeting.getImageUrl() != null && greeting.getImageUrl().length()>0) { buffer.append("<img src=\""); buffer.append(greeting.getImageUrl()); buffer.append("\"/>"); } if (greeting.getUrl() != null && greeting.getUrl().length()>0) { buffer.append("<a href=\""); buffer.append(greeting.getUrl()); buffer.append("\">"); buffer.append(greeting.getName()); buffer.append("</a>"); } else { buffer.append(greeting.getName()); } if (greeting.getText() != null && greeting.getText().length()>0) { buffer.append("<p class=\"greetingText\">"); buffer.append(greeting.getText()); buffer.append("</p>"); } buffer.append("</p>"); } public void endGreeting() { buffer.append("</p>"); } public void startGreeting() { buffer.append("<p class=\"greetingBox\">"); buffer.append(appConstants.decoratorStartGreetings()); } public boolean isPlayerMode() { return false; } public ParagraphParsingHandler getParagraphParsingHandler() { return null; } public boolean isHideAbsoluteModificators() { return true; } }