package hu.sch.web.wicket.components.customlinks;
import com.itextpdf.text.*;
import com.itextpdf.text.pdf.BaseFont;
import com.itextpdf.text.pdf.PdfContentByte;
import com.itextpdf.text.pdf.PdfWriter;
import hu.sch.domain.enums.SvieMembershipType;
import hu.sch.domain.user.User;
import hu.sch.services.config.Configuration;
import hu.sch.web.kp.user.ShowUser;
import hu.sch.web.wicket.util.ByteArrayResourceStream;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.io.OutputStream;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Locale;
import javax.inject.Inject;
import org.apache.wicket.RestartResponseException;
import org.apache.wicket.markup.html.link.Link;
import org.apache.wicket.request.handler.resource.ResourceStreamRequestHandler;
import org.apache.wicket.util.resource.IResourceStream;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
/**
*
* @author aldaris
*/
public class SvieRegPdfLink extends LinkPanel<User> {
private static final Logger logger = LoggerFactory.getLogger(SvieRegPdfLink.class);
private static final long serialVersionUID = 1L;
private static Image schLogo;
private static Image signImage;
private static BaseFont arialUnicode;
private static Font font;
private static Paragraph firstStatement;
private static Paragraph secondStatement;
private static Paragraph thirdStatement;
private static Paragraph obeyStatement;
private static Paragraph fourthStatement;
private static Paragraph permissionStatement;
private static boolean initialized = false;
@Inject
private Configuration config;
private final User user;
private String cachedmsType;
private static void createPDF(Configuration config) {
if (initialized) {
return;
}
try {
arialUnicode =
BaseFont.createFont(config.getFontPath(), BaseFont.IDENTITY_H, BaseFont.EMBEDDED);
font = new Font(arialUnicode, 12);
StringBuilder sb = new StringBuilder(150);
sb.append("A Budapesti Műszaki Egyetem Villamosmérnöki és Informatikai ");
sb.append("Karának nappali tagozatos hallgatója vagyok, egyben tagsággal ");
sb.append("bírok egy, a Schönherz Zoltán Kollégiumban működő Egyesületi Körben.");
firstStatement = new Paragraph(sb.toString(), font);
firstStatement.setAlignment(Paragraph.ALIGN_JUSTIFIED);
firstStatement.setSpacingBefore(15f);
secondStatement = new Paragraph(
"E tagsági minőséggel kapcsolatos jogaimat illetve kötelezettségeimet megismertem.",
font);
secondStatement.setAlignment(Paragraph.ALIGN_JUSTIFIED);
secondStatement.setSpacingBefore(15f);
sb = new StringBuilder(300);
sb.append("Tudomásul veszem, hogy amennyiben az Egyesületi Kör, melyben tagsággal ");
sb.append("bírok megszűnik, és egyidejűleg más Egyesületi Körhöz nem csatlakozom, a ");
sb.append("Választmány rendes tagságomat automatikusan pártoló tagsággá minősíti.\n\n");
sb.append("Tudomásul veszem, hogy kizárólag egy Egyesületi Körben regisztráltathatom ");
sb.append("magam szavazatra jogosult rendes tagként, küldöttválasztás során, kizárólag ");
sb.append("egy Egyesületi Kör tekintetében rendelkezem szavazati jogosultsággal.");
thirdStatement = new Paragraph(sb.toString(), font);
thirdStatement.setAlignment(Paragraph.ALIGN_JUSTIFIED);
sb = new StringBuilder(300);
sb.append("Az Egyesület Alapszabályát illetve Szervezeti Működési Szabályzatát ");
sb.append("magamra nézve kötelezőnek ismerem el, azt betartom.\n\nKijelentem, hogy ");
sb.append("sem jogszabályban, sem az Egyesület Alapszabályában meghatározott kizáró ok ");
sb.append("velem szemben nem áll fenn.\n\nTudomásul veszem, hogy jelen belépési nyilatkozat ");
sb.append("aláírásán kívül az Egyesületbe való belépésem érvényességi feltétele az ");
sb.append("Egyesület Választmányának jóváhagyó döntése.");
obeyStatement = new Paragraph(sb.toString(), font);
obeyStatement.setAlignment(Paragraph.ALIGN_JUSTIFIED);
obeyStatement.setSpacingBefore(15f);
sb = new StringBuilder(300);
sb.append("Tudomásul veszem, hogy az Egyesületbe történő belépésem a Választmány jóváhagyó ");
sb.append("döntését követően a jóváhagyás időpontjában érvényes belépési tagsági díj ");
sb.append("megfizetésével válik hatályossá. Tudomásul veszem, hogy a vonatkozó jogszabályokban, ");
sb.append("és az Egyesület alapszabályában biztosított jogaimat ezen tagdíj megfizetésétől gyakorolhatom.");
fourthStatement = new Paragraph(sb.toString(), font);
fourthStatement.setAlignment(Paragraph.ALIGN_JUSTIFIED);
sb = new StringBuilder(150);
sb.append("Egyúttal hozzájárulok ahhoz, hogy jelen nyilatkozatban megadott adataimat ");
sb.append("az Egyesület, működésének keretein belül szabadon felhasználhatja, azokat ");
sb.append("kezelheti.");
permissionStatement = new Paragraph(sb.toString(), font);
permissionStatement.setAlignment(Paragraph.ALIGN_JUSTIFIED);
permissionStatement.setSpacingBefore(15f);
permissionStatement.setSpacingAfter(15f);
} catch (DocumentException ex) {
logger.warn("Error while creating static content for PDF", ex);
} catch (IOException ex) {
logger.warn("Error while creating static content for PDF", ex);
}
initialized = true;
}
public SvieRegPdfLink(String id, User user2) {
super(id, user2);
createPDF(config);
this.user = user2;
cachedmsType = user.getSvieMembershipType().toString();
try {
if (schLogo == null) {
getSchLogo();
getSigninArea();
}
} catch (Exception ex) {
getSession().error("Hiba a PDF generálása közben.");
throw new RestartResponseException(ShowUser.class);
}
add(new Link<Void>("pdfLink") {
@Override
public void onClick() {
//rendes tag és nincs elsődleges kör elmentve
if (user.getSvieMembershipType().equals(SvieMembershipType.RENDESTAG)
&& user.getSviePrimaryMembership() == null) {
getSession().error("Előbb válaszd ki és mentsd el az elsődleges köröd!");
return;
}
try {
IResourceStream resourceStream = new ByteArrayResourceStream(
((ByteArrayOutputStream) generatePdf()).toByteArray(),
"application/pdf");
getRequestCycle().scheduleRequestHandlerAfterCurrent(
new ResourceStreamRequestHandler(resourceStream, "export_" + user.getNeptunCode() + ".pdf"));
} catch (Exception ex) {
getSession().error("Hiba történt a PDF generálása közben!");
logger.error("Could not generate svieregpdf", ex);
}
}
});
}
private OutputStream generatePdf() throws DocumentException, IOException {
Document document = new Document(PageSize.A4, 72, 72, 56, 56);
final OutputStream os = new ByteArrayOutputStream();
PdfWriter pdfWriter = PdfWriter.getInstance(document, os);
document.open();
schLogo.setAlignment(Image.ALIGN_CENTER);
schLogo.scalePercent(33f);
document.add(schLogo);
font.setSize(14f);
font.setStyle(Font.BOLD);
Paragraph title = new Paragraph("Tagfelvételi kérelem\n" + cachedmsType + "sághoz", font);
title.setAlignment(Paragraph.ALIGN_CENTER);
document.add(title);
font.setSize(12f);
font.setStyle(Font.UNDEFINED);
Paragraph firstParagraph = new Paragraph(createUserInfo(), font);
firstParagraph.setAlignment(Paragraph.ALIGN_JUSTIFIED);
firstParagraph.setSpacingBefore(20f);
document.add(firstParagraph);
if (user.getSvieMembershipType().equals(SvieMembershipType.RENDESTAG)) {
Paragraph primaryGroupParagraph = new Paragraph(createPrimaryGroupInfo(), font);
primaryGroupParagraph.setAlignment(Paragraph.ALIGN_JUSTIFIED);
document.add(primaryGroupParagraph);
document.add(firstStatement);
}
document.add(secondStatement);
if (user.getSvieMembershipType().equals(SvieMembershipType.RENDESTAG)) {
document.add(thirdStatement);
}
document.add(obeyStatement);
if (user.getSvieMembershipType().equals(SvieMembershipType.RENDESTAG)) {
document.add(fourthStatement);
}
document.add(permissionStatement);
StringBuilder sb = new StringBuilder(200);
sb.append("Budapest, ");
sb.append(new SimpleDateFormat("yyyy. MMMM d.", new Locale("hu")).format(new Date()));
sb.append("\n\n");
document.add(new Paragraph(sb.toString(), font));
PdfContentByte cb = pdfWriter.getDirectContent();
float pos = pdfWriter.getVerticalPosition(true);
cb.moveTo(220, pos - 10);
cb.lineTo(380, pos - 10);
cb.stroke();
sb = new StringBuilder(130);
sb.append("Tanúsítjuk, hogy jelen belépési nyilatkozatot a Nyilatkozó jelenlétünkben ");
sb.append("írta alá, illetve aláírását a sajátjának ismerte el.");
Paragraph testify = new Paragraph(sb.toString(), font);
testify.setSpacingBefore(15f);
document.add(testify);
signImage.setAlignment(Image.ALIGN_CENTER);
signImage.scalePercent(33f);
document.add(signImage);
document.close();
return os;
}
private String createUserInfo() {
StringBuilder sb = new StringBuilder(300);
sb.append("Alulírott ").append(user.getFullName());
sb.append(" (lakcím: ").append(user.getHomeAddress());
sb.append(", anyja neve: ").append(user.getMothersName());
sb.append(", e-mail cím: ").append(user.getEmailAddress());
sb.append(") jelen nyilatkozat aláírásával kifejezem belépési szándékom ");
sb.append("a Schönherzes Villamosmérnökök és Informatikusok Egyesületébe ");
sb.append("(székhely: 1115 Budapest, Bartók Béla út 152/H. Kelen Irodaház, ");
sb.append("fszt./a., továbbiakban Egyesület). Kijelentem, hogy az Egyesületbe ");
sb.append(cachedmsType).append("ként kívánok belépni.");
return sb.toString();
}
private String createPrimaryGroupInfo() {
StringBuilder sb = new StringBuilder(100);
sb.append("Az elsődleges köröm, melyet az idp.sch.bme.hu-n adtam meg: ");
sb.append(user.getSviePrimaryMembershipText());
return sb.toString();
}
private Image getSchLogo() throws IOException, DocumentException {
if (schLogo != null) {
return schLogo;
}
schLogo = Image.getInstance(getClass().getResource("resources/schlogo.png"));
return schLogo;
}
private Image getSigninArea() throws IOException, DocumentException {
if (signImage != null) {
return signImage;
}
signImage = Image.getInstance(getClass().getResource("resources/signingarea.png"));
return signImage;
}
}