package op.care.med.prodassistant;
import com.jidesoft.dialog.*;
import com.jidesoft.wizard.*;
import entity.prescription.*;
import op.OPDE;
import op.threads.DisplayMessage;
import op.tools.SYSConst;
import op.tools.SYSTools;
import org.apache.commons.collections.Closure;
import javax.persistence.EntityManager;
import javax.swing.*;
import javax.swing.border.LineBorder;
import java.awt.*;
import java.awt.event.ActionEvent;
/**
* Created by IntelliJ IDEA.
* User: tloehr
* Date: 30.04.12
* Time: 14:53
* To change this template use File | Settings | File Templates.
*/
public class MedProductWizard {
public static final String internalClassID = "opde.medication.medproduct.wizard";
private WizardDialog wizard;
private MedProducts product;
private TradeForm tradeform;
private MedPackage aPackage;
private ACME acme;
private Closure finishAction;
private String pzntemplate = null, prodtemplate = null;
private final int PAGE_WELCOME = 0;
private final int PAGE_PRODUCT = 1;
private final int PAGE_SUBTEXT = 2;
private final int PAGE_PACKAGE = 3;
private final int PAGE_ACME = 4;
private final int PAGE_COMPLETION = 5;
public MedProductWizard(Closure finishAction) {
this.finishAction = finishAction;
//
// if (template != null) {
// pzntemplate = MedPackageTools.parsePZN(template);
// if (pzntemplate == null) {
// prodtemplate = template.trim();
// }
// }
createWizard();
}
private void createWizard() {
wizard = new WizardDialog(OPDE.getMainframe(), false);
PageList model = new PageList();
AbstractWizardPage page1 = new WelcomePage(SYSTools.xx("opde.medication.medproduct.wizard.page1.title"),
SYSTools.xx("opde.medication.medproduct.wizard.page1.description"));
AbstractWizardPage page2 = new ProductPage(SYSTools.xx("opde.medication.medproduct.wizard.page2.title"),
SYSTools.xx("opde.medication.medproduct.wizard.page2.description"));
AbstractWizardPage page3 = new SubtextPage(SYSTools.xx("opde.medication.medproduct.wizard.page3.title"),
SYSTools.xx("opde.medication.medproduct.wizard.page3.description"));
AbstractWizardPage page4 = new PackagePage(SYSTools.xx("opde.medication.medproduct.wizard.page4.title"),
SYSTools.xx("opde.medication.medproduct.wizard.page4.description"));
AbstractWizardPage page5 = new ACMEPage(SYSTools.xx("opde.medication.medproduct.wizard.page5.title"),
SYSTools.xx("opde.medication.medproduct.wizard.page5.description"));
AbstractWizardPage page6 = new CompletionPage(SYSTools.xx("opde.medication.medproduct.wizard.page6.title"),
SYSTools.xx("opde.medication.medproduct.wizard.page6.description"));
model.append(page1);
model.append(page2);
model.append(page3);
model.append(page4);
model.append(page5);
model.append(page6);
wizard.setPageList(model);
wizard.setFinishAction(new AbstractAction("Finish") {
public void actionPerformed(ActionEvent e) {
if (wizard.closeCurrentPage(wizard.getButtonPanel().getButtonByName(ButtonNames.FINISH))) {
save();
}
}
});
wizard.setCancelAction(new AbstractAction("Cancel") {
public void actionPerformed(ActionEvent e) {
if (wizard.closeCurrentPage(wizard.getButtonPanel().getButtonByName(ButtonNames.FINISH))) {
finishAction.execute(null);
}
}
});
((JPanel) wizard.getContentPane()).setBorder(new LineBorder(Color.BLACK, 1));
wizard.pack();
}
public WizardDialog getWizard() {
return wizard;
}
private void save() {
EntityManager em = OPDE.createEM();
try {
em.getTransaction().begin();
product = em.merge(product);
tradeform = em.merge(tradeform);
aPackage = em.merge(aPackage);
if (acme != null) {
acme = em.merge(acme);
}
if (!product.getTradeforms().contains(tradeform)) {
product.getTradeforms().add(tradeform);
}
tradeform.getPackages().add(aPackage);
em.getTransaction().commit();
OPDE.getDisplayManager().addSubMessage(new DisplayMessage(product.getText() + ", " + TradeFormTools.toPrettyString(tradeform) + ", " + MedPackageTools.toPrettyString(aPackage) + " " + SYSTools.xx("misc.msg.entrysuccessful")));
finishAction.execute(aPackage);
} catch (Exception e) {
if (em.getTransaction().isActive()) {
em.getTransaction().rollback();
}
OPDE.fatal(e);
} finally {
em.close();
}
}
private class WelcomePage extends WelcomeWizardPage {
public WelcomePage(String title, String description) {
super(title, description);
setLeftPaneItems(LEFTPANE_EMPTY);
}
@Override
protected void initContentPane() {
super.initContentPane();
JPanel main = new JPanel(new BorderLayout(5, 5));
JTextPane txt = new JTextPane();
txt.setEditable(false);
txt.setContentType("text/html");
txt.setOpaque(false);
txt.setText("<html>" + SYSConst.html_fontface +
SYSTools.xx("opde.medication.medproduct.wizard.welcome") +
"</font></html>");
main.add(BorderLayout.CENTER, txt);
JLabel gfx = new JLabel(SYSConst.gfx259x203medic0);
main.add(BorderLayout.EAST, gfx);
addComponent(main, true);
addText(SYSTools.xx("opde.wizards.buttontext.letsgo"), SYSConst.ARIAL14);
}
@Override
public void setupWizardButtons() {
super.setupWizardButtons();
fireButtonEvent(ButtonEvent.CHANGE_BUTTON_TEXT, ButtonNames.BACK, SYSTools.xx("opde.wizards.buttontext.back"));
fireButtonEvent(ButtonEvent.CHANGE_BUTTON_TEXT, ButtonNames.NEXT, SYSTools.xx("opde.wizards.buttontext.next"));
fireButtonEvent(ButtonEvent.CHANGE_BUTTON_TEXT, ButtonNames.FINISH, SYSTools.xx("opde.wizards.buttontext.finish"));
fireButtonEvent(ButtonEvent.CHANGE_BUTTON_TEXT, ButtonNames.CANCEL, SYSTools.xx("opde.wizards.buttontext.cancel"));
fireButtonEvent(ButtonEvent.HIDE_BUTTON, ButtonNames.BACK);
fireButtonEvent(ButtonEvent.HIDE_BUTTON, ButtonNames.FINISH);
fireButtonEvent(ButtonEvent.SHOW_BUTTON, ButtonNames.CANCEL);
}
}
private class ProductPage extends DefaultWizardPage {
public ProductPage(String title, String description) {
super(title, description);
setLeftPaneItems(LEFTPANE_STEPS);
}
@Override
public void setupWizardButtons() {
super.setupWizardButtons();
fireButtonEvent(ButtonEvent.ENABLE_BUTTON, ButtonNames.BACK);
fireButtonEvent(product == null ? ButtonEvent.DISABLE_BUTTON : ButtonEvent.ENABLE_BUTTON, ButtonNames.NEXT);
fireButtonEvent(ButtonEvent.HIDE_BUTTON, ButtonNames.FINISH);
fireButtonEvent(ButtonEvent.SHOW_BUTTON, ButtonNames.CANCEL);
}
@Override
protected void initContentPane() {
super.initContentPane();
addComponent(new PnlProduct(o -> {
product = (MedProducts) o;
setupWizardButtons();
}, prodtemplate), true);
}
}
private class SubtextPage extends DefaultWizardPage {
private PnlTradeForm pnlTradeForm;
public SubtextPage(String title, String description) {
super(title, description);
setLeftPaneItems(LEFTPANE_STEPS);
addPageListener(pageEvent -> {
if (pageEvent.getID() == PageEvent.PAGE_CLOSING) {
OPDE.debug(pageEvent.getSource());
} else if (pageEvent.getID() == PageEvent.PAGE_OPENED) {
OPDE.debug("SubtextPage OPENDED");
// tradeform = null;
pnlTradeForm.setProduct(product);
}
});
}
@Override
public void setupWizardButtons() {
super.setupWizardButtons();
fireButtonEvent(ButtonEvent.ENABLE_BUTTON, ButtonNames.BACK);
fireButtonEvent(tradeform == null ? ButtonEvent.DISABLE_BUTTON : ButtonEvent.ENABLE_BUTTON, ButtonNames.NEXT);
fireButtonEvent(ButtonEvent.HIDE_BUTTON, ButtonNames.FINISH);
fireButtonEvent(ButtonEvent.SHOW_BUTTON, ButtonNames.CANCEL);
}
@Override
protected void initContentPane() {
super.initContentPane();
pnlTradeForm = new PnlTradeForm(o -> {
tradeform = (TradeForm) o;
OPDE.debug(SYSTools.catchNull(tradeform.getID(), "null") + ": " + TradeFormTools.toPrettyString(tradeform));
setupWizardButtons();
}, product);
addComponent(pnlTradeForm, true);
}
}
private class PackagePage extends DefaultWizardPage {
private PnlPackage pnlPackage;
public PackagePage(String title, String description) {
super(title, description);
pnlPackage = new PnlPackage(o -> {
aPackage = (MedPackage) o;
setupWizardButtons();
}, pzntemplate);
setLeftPaneItems(LEFTPANE_STEPS);
addPageListener(pageEvent -> {
if (pageEvent.getID() == PageEvent.PAGE_CLOSING) {
OPDE.debug(pageEvent.getSource());
} else if (pageEvent.getID() == PageEvent.PAGE_OPENED) {
OPDE.debug("PackagePage OPENDED");
// aPackage = null;
pnlPackage.setLabelEinheit(DosageFormTools.getPackageText(tradeform.getDosageForm()));
pnlPackage.setDarreichung(tradeform);
}
});
}
@Override
public void setupWizardButtons() {
super.setupWizardButtons();
fireButtonEvent(ButtonEvent.ENABLE_BUTTON, ButtonNames.BACK);
fireButtonEvent(aPackage == null ? ButtonEvent.DISABLE_BUTTON : ButtonEvent.ENABLE_BUTTON, ButtonNames.NEXT);
fireButtonEvent(ButtonEvent.HIDE_BUTTON, ButtonNames.FINISH);
fireButtonEvent(ButtonEvent.SHOW_BUTTON, ButtonNames.CANCEL);
updateNextPage();
}
@Override
protected void initContentPane() {
super.initContentPane();
addComponent(pnlPackage, true);
}
private void updateNextPage() {
if (product.getACME() != null) {
getOwner().setNextPage(getOwner().getPageList().getPage(PAGE_COMPLETION));
} else {
getOwner().setNextPage(getOwner().getPageList().getPage(PAGE_ACME));
}
}
}
private class ACMEPage extends DefaultWizardPage {
private PnlACME pnlACME;
public ACMEPage(String title, String description) {
super(title, description);
setLeftPaneItems(LEFTPANE_GRAPHIC);
addPageListener(pageEvent -> {
if (pageEvent.getID() == PageEvent.PAGE_CLOSING) {
OPDE.debug(pageEvent.getSource());
} else if (pageEvent.getID() == PageEvent.PAGE_OPENED) {
OPDE.debug("ACMEPage OPENDED");
// acme = null;
pnlACME.setProdukt(product);
// setupWizardButtons();
}
});
}
@Override
public void setupWizardButtons() {
super.setupWizardButtons();
fireButtonEvent(ButtonEvent.ENABLE_BUTTON, ButtonNames.BACK);
fireButtonEvent(acme == null ? ButtonEvent.DISABLE_BUTTON : ButtonEvent.ENABLE_BUTTON, ButtonNames.NEXT);
fireButtonEvent(ButtonEvent.HIDE_BUTTON, ButtonNames.FINISH);
fireButtonEvent(ButtonEvent.SHOW_BUTTON, ButtonNames.CANCEL);
}
@Override
protected void initContentPane() {
super.initContentPane();
pnlACME = new PnlACME(o -> {
acme = (ACME) o;
setupWizardButtons();
}, product, wizard);
addComponent(pnlACME, true);
}
}
private class CompletionPage extends CompletionWizardPage {
JTextPane txt;
public CompletionPage(String title, String description) {
super(title, description);
setLeftPaneItems(LEFTPANE_GRAPHIC);
addPageListener(pageEvent -> {
if (pageEvent.getID() == PageEvent.PAGE_OPENED) {
txt.setText("<html>" + SYSConst.html_fontface +
check() +
"</font></html>");
}
});
}
@Override
protected void initContentPane() {
super.initContentPane();
txt = new JTextPane();
txt.setEditable(false);
txt.setContentType("text/html");
txt.setOpaque(false);
addComponent(txt, true);
addSpace();
addText(SYSTools.xx("opde.wizards.buttontext.letsgo"), SYSConst.ARIAL14);
}
@Override
public void setupWizardButtons() {
super.setupWizardButtons();
fireButtonEvent(ButtonEvent.SHOW_BUTTON, ButtonNames.CANCEL);
}
private String check() {
String result = "<b>" + SYSTools.xx("opde.medication.medproduct.wizard.page6.summaryline1") + "</b><br/>";
result += SYSTools.xx("opde.medication.medproduct.wizard.page6.summaryline2") + "<br/>";
result += "<ul>";
result += "<li>" + SYSTools.xx("misc.msg.drug") + ": <b>" + product.getText() + "</b>" + (product.getMedPID() == null ? " <i>" + SYSTools.xx("misc.msg.willBeCreated") + "</i>" : " <i>" + SYSTools.xx("misc.msg.alreadyExits") + "</i>") + "</li>";
result += "<li>" + SYSTools.xx("opde.medication.medproduct.wizard.page3.title") + ": <b>" + TradeFormTools.toPrettyStringMediumWithExpiry(tradeform) + "</b>" + (tradeform.getID() == null ? " <i>" + SYSTools.xx("misc.msg.willBeCreated") + "</i>" : " <i>" + SYSTools.xx("misc.msg.alreadyExits") + "</i>") + "</li>";
if (tradeform.getDosageForm().getUPRState() == DosageFormTools.STATE_UPRn) {
result += "<li>" + SYSTools.xx("misc.msg.upr") + ": <b>";
result += (tradeform.getConstantUPRn() == null ? SYSTools.xx("opde.medication.medproduct.wizard.page6.calcUPR") : SYSTools.xx("opde.medication.medproduct.wizard.page6.setUPR") + SYSConst.UNITS[tradeform.getDosageForm().getUsageUnit()] + " " + tradeform.getDosageForm().getUsageText() + " " + SYSTools.xx("misc.msg.to1") + " " + SYSConst.UNITS[tradeform.getDosageForm().getPackUnit()]) + "</b>" + "</li>";
}
result += "<li>" + SYSTools.xx("opde.medication.medproduct.wizard.page6.newPackageWillBeCreated") + ": <b>" + MedPackageTools.toPrettyString(aPackage) + "</b></li>";
ACME displayFactory = acme == null ? product.getACME() : acme;
result += "<li>" + SYSTools.xx("opde.medication.medproduct.wizard.page5.title") + ": <b>" + displayFactory.getName() + ", " + displayFactory.getCity() + "</b>" + (displayFactory.getMphid() == null ? " <i>" + SYSTools.xx("misc.msg.willBeCreated") + "</i>" : " <i>" + SYSTools.xx("misc.msg.alreadyExits") + "</i>") + "</li>";
result += "</ul>";
result += "<p>" + SYSTools.xx("opde.medication.medproduct.wizard.page6.summaryline1") + "</p>" +
"</font>";
return result;
}
}
}