com.lp.server.system.ejbfac.PanelFacBean.java Source code

Java tutorial

Introduction

Here is the source code for com.lp.server.system.ejbfac.PanelFacBean.java

Source

/*******************************************************************************
 * HELIUM V, Open Source ERP software for sustained success
 * at small and medium-sized enterprises.
 * Copyright (C) 2004 - 2014 HELIUM V IT-Solutions GmbH
 * 
 * This program is free software: you can redistribute it and/or modify
 * it under the terms of the GNU Affero General Public License as published 
 * by the Free Software Foundation, either version 3 of theLicense, or 
 * (at your option) any later version.
 * 
 * According to sec. 7 of the GNU Affero General Public License, version 3, 
 * the terms of the AGPL are supplemented with the following terms:
 * 
 * "HELIUM V" and "HELIUM 5" are registered trademarks of 
 * HELIUM V IT-Solutions GmbH. The licensing of the program under the 
 * AGPL does not imply a trademark license. Therefore any rights, title and
 * interest in our trademarks remain entirely with us. If you want to propagate
 * modified versions of the Program under the name "HELIUM V" or "HELIUM 5",
 * you may only do so if you have a written permission by HELIUM V IT-Solutions 
 * GmbH (to acquire a permission please contact HELIUM V IT-Solutions
 * at trademark@heliumv.com).
 * 
 * This program is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 * GNU Affero General Public License for more details.
 * 
 * You should have received a copy of the GNU Affero General Public License
 * along with this program.  If not, see <http://www.gnu.org/licenses/>.
 * 
 * Contact: developers@heliumv.com
 ******************************************************************************/
package com.lp.server.system.ejbfac;

import java.util.ArrayList;
import java.util.Collection;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;

import javax.ejb.Stateless;
import javax.persistence.EntityExistsException;
import javax.persistence.EntityManager;
import javax.persistence.NoResultException;
import javax.persistence.NonUniqueResultException;
import javax.persistence.PersistenceContext;
import javax.persistence.Query;

import net.sf.jasperreports.engine.JRDataSource;
import net.sf.jasperreports.engine.JRException;
import net.sf.jasperreports.engine.JRField;

import org.hibernate.Session;
import org.hibernate.criterion.Restrictions;

import com.lp.server.system.ejb.Panel;
import com.lp.server.system.ejb.Panelbeschreibung;
import com.lp.server.system.ejb.Paneldaten;
import com.lp.server.system.fastlanereader.generated.FLRPanelbeschreibung;
import com.lp.server.system.pkgenerator.PKConst;
import com.lp.server.system.pkgenerator.bl.PKGeneratorObj;
import com.lp.server.system.service.PanelDto;
import com.lp.server.system.service.PanelDtoAssembler;
import com.lp.server.system.service.PanelFac;
import com.lp.server.system.service.PanelbeschreibungDto;
import com.lp.server.system.service.PanelbeschreibungDtoAssembler;
import com.lp.server.system.service.PaneldatenDto;
import com.lp.server.system.service.PaneldatenDtoAssembler;
import com.lp.server.system.service.TheClientDto;
import com.lp.server.util.LPReport;
import com.lp.server.util.fastlanereader.FLRSessionFactory;
import com.lp.server.util.report.JasperPrintLP;
import com.lp.util.EJBExceptionLP;

@Stateless
public class PanelFacBean extends LPReport implements PanelFac, JRDataSource {
    @PersistenceContext
    private EntityManager em;

    private int index = -1; // bei jedem Druck zuruecksetzen!!!
    private Object[][] data = null;

    private String[] felder = new String[0];

    public boolean next() throws JRException {
        index++;
        return (index < data.length);
    }

    public Object getFieldValue(JRField jRField) throws JRException {
        Object value = null;
        String fieldName = jRField.getName();

        for (int i = 0; i < felder.length; i++) {
            if (felder[i].equals(fieldName)) {
                value = data[index][i];
            }
        }
        return value;
    }

    public Integer createPanelbeschreibung(PanelbeschreibungDto panelbeschreibungDto,
            boolean bFuegeNeuePositionVorDerSelektiertenEin) throws EJBExceptionLP {
        if (panelbeschreibungDto == null) {
            throw new EJBExceptionLP(EJBExceptionLP.FEHLER_DTO_IS_NULL, new Exception("paneldatenDto == null"));
        }
        if (panelbeschreibungDto.getCName() == null || panelbeschreibungDto.getCTyp() == null
                || panelbeschreibungDto.getPanelCNr() == null) {
            throw new EJBExceptionLP(EJBExceptionLP.FEHLER_FELD_DARF_NICHT_NULL_SEIN, new Exception(
                    "panelbeschreibungDto.getCName() == null || panelbeschreibungDto.getCTyp() == null || panelbeschreibungDto.getPanelCNr() == null"));
        }

        if (bFuegeNeuePositionVorDerSelektiertenEin) {
            Query query = em.createNamedQuery("PanelbeschreibungfindByPanelCNrMandantCNrIGridy");
            query.setParameter(1, panelbeschreibungDto.getPanelCNr());
            query.setParameter(2, panelbeschreibungDto.getMandantCNr());
            query.setParameter(3, panelbeschreibungDto.getIGridy());
            Collection c = query.getResultList();
            Iterator it = c.iterator();
            while (it.hasNext()) {
                Panelbeschreibung p = (Panelbeschreibung) it.next();
                p.setIGridy(p.getIGridy() + 1);
                em.merge(p);
                em.flush();
            }

        }

        try {
            Query query = em.createNamedQuery("PanelbeschreibungfindByPanelCNrMandantCNrCName");
            query.setParameter(1, panelbeschreibungDto.getPanelCNr());
            query.setParameter(2, panelbeschreibungDto.getMandantCNr());
            query.setParameter(3, panelbeschreibungDto.getCName());
            Panelbeschreibung panelbeschreibung = (Panelbeschreibung) query.getSingleResult();
            if (panelbeschreibung != null) {
                throw new EJBExceptionLP(EJBExceptionLP.FEHLER_DUPLICATE_UNIQUE,
                        new Exception("LP_PANELBESCHREIBUNG.UK"));
            }
        } catch (NoResultException ex) {
            //
        }
        try {

            PKGeneratorObj pkGen = new PKGeneratorObj(); // PKGEN
            Integer pk = pkGen.getNextPrimaryKey(PKConst.PK_PANELBESCHREIBUNG);
            panelbeschreibungDto.setIId(pk);

            Panelbeschreibung panelbeschreibung = new Panelbeschreibung(panelbeschreibungDto.getIId(),
                    panelbeschreibungDto.getPanelCNr(), panelbeschreibungDto.getMandantCNr(),
                    panelbeschreibungDto.getCName(), panelbeschreibungDto.getCTyp(),
                    panelbeschreibungDto.getIGridx(), panelbeschreibungDto.getIGridy(),
                    panelbeschreibungDto.getIGridwidth(), panelbeschreibungDto.getIGridheigth(),
                    panelbeschreibungDto.getCFill(), panelbeschreibungDto.getCAnchor(),
                    panelbeschreibungDto.getIInsetsleft(), panelbeschreibungDto.getIInsetsright(),
                    panelbeschreibungDto.getIInsetstop(), panelbeschreibungDto.getIInsetsbottom(),
                    panelbeschreibungDto.getIIpadx(), panelbeschreibungDto.getIIpady(),
                    panelbeschreibungDto.getBMandatory(), panelbeschreibungDto.getFWeighty(),
                    panelbeschreibungDto.getFWeightx(), panelbeschreibungDto.getCDruckname(),
                    panelbeschreibungDto.getArtgruIId());
            em.persist(panelbeschreibung);
            em.flush();
            setPanelbeschreibungFromPanelbeschreibungDto(panelbeschreibung, panelbeschreibungDto);
            return panelbeschreibungDto.getIId();
        } catch (EntityExistsException e) {
            throw new EJBExceptionLP(EJBExceptionLP.FEHLER_BEIM_ANLEGEN, e);
        }
    }

    public void removePanelbeschreibung(Integer iId) throws EJBExceptionLP {
        Panelbeschreibung toRemove = em.find(Panelbeschreibung.class, iId);
        if (toRemove == null) {
            throw new EJBExceptionLP(EJBExceptionLP.FEHLER_BEI_FINDBYPRIMARYKEY, "");
        }
        try {
            em.remove(toRemove);
            em.flush();
        } catch (EntityExistsException er) {
            throw new EJBExceptionLP(EJBExceptionLP.FEHLER_BEIM_LOESCHEN, er);
        }
    }

    public void removePanelbeschreibung(PanelbeschreibungDto panelbeschreibungDto) throws EJBExceptionLP {
        if (panelbeschreibungDto != null) {
            Integer iId = panelbeschreibungDto.getIId();
            removePanelbeschreibung(iId);
        }
    }

    public void updatePanelbeschreibung(PanelbeschreibungDto panelbeschreibungDto) throws EJBExceptionLP {
        if (panelbeschreibungDto != null) {
            Integer iId = panelbeschreibungDto.getIId();
            // try {
            Panelbeschreibung panelbeschreibung = em.find(Panelbeschreibung.class, iId);
            if (panelbeschreibung == null) {
                throw new EJBExceptionLP(EJBExceptionLP.FEHLER_BEI_FINDBYPRIMARYKEY, "");
            }

            try {
                Query query = em.createNamedQuery("PanelbeschreibungfindByPanelCNrMandantCNrCName");
                query.setParameter(1, panelbeschreibungDto.getPanelCNr());
                query.setParameter(2, panelbeschreibungDto.getMandantCNr());
                query.setParameter(3, panelbeschreibungDto.getCName());
                Panelbeschreibung duplicateHelper = (Panelbeschreibung) query.getSingleResult();
                Integer iIdVorhanden = duplicateHelper.getIId();
                if (iId.equals(iIdVorhanden) == false) {
                    throw new EJBExceptionLP(EJBExceptionLP.FEHLER_DUPLICATE_UNIQUE,
                            new Exception("LP_PANELBESCHREIBUNG.UK"));
                }

            } catch (NoResultException ex) {
                //
            }

            setPanelbeschreibungFromPanelbeschreibungDto(panelbeschreibung, panelbeschreibungDto);
            // }
            // catch (FinderException e) {
            // throw new
            // EJBExceptionLP(EJBExceptionLP.FEHLER_BEI_FINDBYPRIMARYKEY, e);
            // }
        }
    }

    public PanelbeschreibungDto panelbeschreibungFindByPrimaryKey(Integer iId) throws EJBExceptionLP {
        // try {
        Panelbeschreibung panelbeschreibung = em.find(Panelbeschreibung.class, iId);
        if (panelbeschreibung == null) {
            throw new EJBExceptionLP(EJBExceptionLP.FEHLER_BEI_FINDBYPRIMARYKEY, "");
        }
        return assemblePanelbeschreibungDto(panelbeschreibung);

        // }
        // catch (FinderException e) {
        // throw new EJBExceptionLP(EJBExceptionLP.FEHLER_BEI_FINDBYPRIMARYKEY,
        // e);
        // }
    }

    public PanelbeschreibungDto[] panelbeschreibungFindByPanelCNrMandantCNr(String panelCNr, String mandantCNr,
            Integer artgruIId) throws EJBExceptionLP {
        // try {
        Query query = em.createNamedQuery("PanelbeschreibungfindByPanelCNrMandantCNr");
        query.setParameter(1, panelCNr);
        query.setParameter(2, mandantCNr);
        Collection<?> cl = query.getResultList();
        List<PanelbeschreibungDto> list = new ArrayList<PanelbeschreibungDto>();
        if (cl != null) {
            Iterator<?> iterator = cl.iterator();
            while (iterator.hasNext()) {

                Panelbeschreibung panelbeschreibung = (Panelbeschreibung) iterator.next();

                if (panelbeschreibung.getCTyp().startsWith("WrapperComboBox")) {
                    int u = 0;
                }

                if (artgruIId != null && panelbeschreibung.getArtgruIId() != null
                        && !artgruIId.equals(panelbeschreibung.getArtgruIId())) {
                    continue;
                }

                if (artgruIId == null && panelbeschreibung.getArtgruIId() != null) {
                    continue;
                }

                list.add(assemblePanelbeschreibungDto(panelbeschreibung));
            }
        }
        PanelbeschreibungDto[] returnArray = new PanelbeschreibungDto[list.size()];
        return (PanelbeschreibungDto[]) list.toArray(returnArray);
    }

    public PanelbeschreibungDto[] panelbeschreibungFindByPanelCNrMandantCNrPartnerklasseIId(String panelCNr,
            String mandantCNr, Integer partnerklasseIId) {
        // try {
        Query query = em.createNamedQuery("PanelbeschreibungfindByPanelCNrMandantCNr");
        query.setParameter(1, panelCNr);
        query.setParameter(2, mandantCNr);
        Collection<?> cl = query.getResultList();
        List<PanelbeschreibungDto> list = new ArrayList<PanelbeschreibungDto>();
        if (cl != null) {
            Iterator<?> iterator = cl.iterator();
            while (iterator.hasNext()) {

                Panelbeschreibung panelbeschreibung = (Panelbeschreibung) iterator.next();

                if (panelbeschreibung.getCTyp().startsWith("WrapperComboBox")) {
                    int u = 0;
                }

                if (partnerklasseIId != null && panelbeschreibung.getPartnerklasseIId() != null
                        && !partnerklasseIId.equals(panelbeschreibung.getPartnerklasseIId())) {
                    continue;
                }

                if (partnerklasseIId == null && panelbeschreibung.getPartnerklasseIId() != null) {
                    continue;
                }

                list.add(assemblePanelbeschreibungDto(panelbeschreibung));
            }
        }
        PanelbeschreibungDto[] returnArray = new PanelbeschreibungDto[list.size()];
        return (PanelbeschreibungDto[]) list.toArray(returnArray);
    }

    public boolean panelbeschreibungVorhanden(String panelCNr, String mandantCNr) throws EJBExceptionLP {

        Query query = em.createNamedQuery("PanelbeschreibungfindByPanelCNrMandantCNr");
        query.setParameter(1, panelCNr);
        query.setParameter(2, mandantCNr);
        Collection<?> cl = query.getResultList();
        if (cl.size() > 0) {
            return true;
        } else {
            return false;
        }
    }

    public JasperPrintLP printPanel(String panelCNr, String report, String cKey, TheClientDto theClientDto) {
        HashMap<String, Object> parameter = new HashMap<String, Object>();
        index = -1;

        Session session = FLRSessionFactory.getFactory().openSession();

        String[] typen = new String[3];
        typen[0] = PanelFac.TYP_WRAPPERCHECKBOX;
        typen[1] = PanelFac.TYP_WRAPPEREDITOR;
        typen[2] = PanelFac.TYP_WRAPPERTEXTFIELD;

        org.hibernate.Criteria crit = session.createCriteria(FLRPanelbeschreibung.class);
        crit.add(Restrictions.in(PanelFac.FLR_PANELBESCHREIBUNG_C_TYP, typen));
        crit.add(Restrictions.eq(PanelFac.FLR_PANELBESCHREIBUNG_PANEL_C_NR, panelCNr));
        crit.add(Restrictions.eq("mandant_c_nr", theClientDto.getMandant()));
        List<?> results = crit.list();
        Iterator<?> resultListIterator = results.iterator();

        felder = new String[results.size()];
        data = new Object[1][results.size()];

        int row = 0;
        while (resultListIterator.hasNext()) {
            FLRPanelbeschreibung flrPanelbeschreibung = (FLRPanelbeschreibung) resultListIterator.next();
            felder[row] = flrPanelbeschreibung.getC_name();

            // try {
            Query query = em.createNamedQuery("PaneldatenfindByPanelCNrPanelbeschreibungIIdCKey");
            query.setParameter(1, panelCNr);
            query.setParameter(2, flrPanelbeschreibung.getI_id());
            query.setParameter(3, cKey);
            Paneldaten paneldaten = (Paneldaten) query.getSingleResult();
            if (paneldaten == null) {
                data[0][row] = null;
            } else {
                data[0][row] = new String(paneldaten.getOInhalt());
            }

            // }
            // catch (FinderException ex) {
            // data[0][row] = null;
            // }
            row++;
        }
        session.close();

        initJRDS(parameter, PanelFac.REPORT_MODUL, report, theClientDto.getMandant(), theClientDto.getLocUi(),
                theClientDto);

        return getReportPrint();
    }

    private void setPanelbeschreibungFromPanelbeschreibungDto(Panelbeschreibung panelbeschreibung,
            PanelbeschreibungDto panelbeschreibungDto) {
        panelbeschreibung.setPanelCNr(panelbeschreibungDto.getPanelCNr());
        panelbeschreibung.setCName(panelbeschreibungDto.getCName());
        panelbeschreibung.setCTyp(panelbeschreibungDto.getCTyp());
        panelbeschreibung.setCTokeninresourcebundle(panelbeschreibungDto.getCTokeninresourcebundle());
        panelbeschreibung.setIGridx(panelbeschreibungDto.getIGridx());
        panelbeschreibung.setIGridy(panelbeschreibungDto.getIGridy());
        panelbeschreibung.setIGridwidth(panelbeschreibungDto.getIGridwidth());
        panelbeschreibung.setIGridheigth(panelbeschreibungDto.getIGridheigth());
        panelbeschreibung.setCFill(panelbeschreibungDto.getCFill());
        panelbeschreibung.setCAnchor(panelbeschreibungDto.getCAnchor());
        panelbeschreibung.setIInsetsleft(panelbeschreibungDto.getIInsetsleft());
        panelbeschreibung.setIInsetsright(panelbeschreibungDto.getIInsetsright());
        panelbeschreibung.setIInsetstop(panelbeschreibungDto.getIInsetstop());
        panelbeschreibung.setIInsetsbottom(panelbeschreibungDto.getIInsetsbottom());
        panelbeschreibung.setIIpadx(panelbeschreibungDto.getIIpadx());
        panelbeschreibung.setIIpady(panelbeschreibungDto.getIIpady());
        panelbeschreibung.setFWeightx(panelbeschreibungDto.getFWeightx());
        panelbeschreibung.setFWeighty(panelbeschreibungDto.getFWeighty());
        panelbeschreibung.setBMandatory(panelbeschreibungDto.getBMandatory());
        panelbeschreibung.setMandantCNr(panelbeschreibungDto.getMandantCNr());
        panelbeschreibung.setArtgruIId(panelbeschreibungDto.getArtgruIId());
        panelbeschreibung.setCDruckname(panelbeschreibungDto.getCDruckname());
        panelbeschreibung.setPartnerklasseIId(panelbeschreibungDto.getPartnerklasseIId());
        em.merge(panelbeschreibung);
        em.flush();
    }

    private PanelbeschreibungDto assemblePanelbeschreibungDto(Panelbeschreibung panelbeschreibung) {
        return PanelbeschreibungDtoAssembler.createDto(panelbeschreibung);
    }

    private PanelbeschreibungDto[] assemblePanelbeschreibungDtos(Collection<?> panelbeschreibungs) {
        List<PanelbeschreibungDto> list = new ArrayList<PanelbeschreibungDto>();
        if (panelbeschreibungs != null) {
            Iterator<?> iterator = panelbeschreibungs.iterator();
            while (iterator.hasNext()) {
                Panelbeschreibung panelbeschreibung = (Panelbeschreibung) iterator.next();
                list.add(assemblePanelbeschreibungDto(panelbeschreibung));
            }
        }
        PanelbeschreibungDto[] returnArray = new PanelbeschreibungDto[list.size()];
        return (PanelbeschreibungDto[]) list.toArray(returnArray);
    }

    public void createPaneldaten(PaneldatenDto[] paneldatenDto) throws EJBExceptionLP {
        if (paneldatenDto == null) {
            throw new EJBExceptionLP(EJBExceptionLP.FEHLER_DTO_IS_NULL, new Exception("paneldatenDto == null"));
        }

        // Zuerst alle loeschen
        if (paneldatenDto.length > 0) {
            Query query = em.createNamedQuery("PaneldatenfindByPanelCNrCKey");
            query.setParameter(1, paneldatenDto[0].getPanelCNr());
            query.setParameter(2, paneldatenDto[0].getCKey());
            Collection<?> cl = query.getResultList();
            Iterator it = cl.iterator();

            while (it.hasNext()) {
                Paneldaten p = (Paneldaten) it.next();
                em.remove(p);
                em.flush();
            }
        }

        for (int i = 0; i < paneldatenDto.length; i++) {
            if (paneldatenDto[i].getPanelbeschreibungIId() != null) {

                try {
                    Paneldaten paneldaten;
                    try {
                        Query query = em.createNamedQuery("PaneldatenfindByPanelCNrPanelbeschreibungIIdCKey");
                        query.setParameter(1, paneldatenDto[i].getPanelCNr());
                        query.setParameter(2, paneldatenDto[i].getPanelbeschreibungIId());
                        query.setParameter(3, paneldatenDto[i].getCKey());
                        paneldaten = (Paneldaten) query.getSingleResult();
                        setPaneldatenFromPaneldatenDto(paneldaten, paneldatenDto[i]);
                    } catch (NoResultException e) {
                        PKGeneratorObj pkGen = new PKGeneratorObj(); // PKGEN
                        Integer pk = pkGen.getNextPrimaryKey(PKConst.PK_PANELDATEN);
                        paneldatenDto[i].setIId(pk);
                        paneldaten = new Paneldaten(paneldatenDto[i].getIId(), paneldatenDto[i].getPanelCNr(),
                                paneldatenDto[i].getPanelbeschreibungIId(), paneldatenDto[i].getCKey(),
                                paneldatenDto[i].getCDatentypkey());
                        em.persist(paneldaten);
                        em.flush();
                        setPaneldatenFromPaneldatenDto(paneldaten, paneldatenDto[i]);
                    } catch (NonUniqueResultException ex1) {
                        throw new EJBExceptionLP(EJBExceptionLP.FEHLER_NO_UNIQUE_RESULT, ex1);
                    }

                } catch (EntityExistsException e) {
                    throw new EJBExceptionLP(EJBExceptionLP.FEHLER_BEIM_ANLEGEN, e);
                }
            }
        }
    }

    public void removePaneldaten(Integer iId) throws EJBExceptionLP {
        Paneldaten toRemove = em.find(Paneldaten.class, iId);
        if (toRemove == null) {
            throw new EJBExceptionLP(EJBExceptionLP.FEHLER_BEI_FINDBYPRIMARYKEY, "");
        }
        try {
            em.remove(toRemove);
            em.flush();
        } catch (EntityExistsException er) {
            throw new EJBExceptionLP(EJBExceptionLP.FEHLER_BEIM_LOESCHEN, er);
        }
    }

    public void removePaneldaten(PaneldatenDto paneldatenDto) throws EJBExceptionLP {
        if (paneldatenDto != null) {
            Integer iId = paneldatenDto.getIId();
            removePaneldaten(iId);
        }
    }

    public void updatePaneldaten(PaneldatenDto paneldatenDto) throws EJBExceptionLP {
        if (paneldatenDto != null) {
            Integer iId = paneldatenDto.getIId();
            // try {
            Paneldaten paneldaten = em.find(Paneldaten.class, iId);
            if (paneldaten == null) {
                throw new EJBExceptionLP(EJBExceptionLP.FEHLER_BEI_FINDBYPRIMARYKEY, "");
            }
            setPaneldatenFromPaneldatenDto(paneldaten, paneldatenDto);
            // }
            // catch (FinderException e) {
            // throw new
            // EJBExceptionLP(EJBExceptionLP.FEHLER_BEI_FINDBYPRIMARYKEY, e);
            // }
        }
    }

    public PaneldatenDto paneldatenFindByPrimaryKey(Integer iId) throws EJBExceptionLP {
        // try {
        Paneldaten paneldaten = em.find(Paneldaten.class, iId);
        if (paneldaten == null) {
            throw new EJBExceptionLP(EJBExceptionLP.FEHLER_BEI_FINDBYPRIMARYKEY, "");
        }
        return assemblePaneldatenDto(paneldaten);
        // }
        // catch (FinderException e) {
        // throw new EJBExceptionLP(EJBExceptionLP.FEHLER_BEI_FINDBYPRIMARYKEY,
        // e);
        // }
    }

    public PaneldatenDto findByPanelCNrPanelbeschreibungIIdCKey(String panelCNr, Integer panelbeschreibungIId,
            String cKey) throws EJBExceptionLP {
        // try {
        Query query = em.createNamedQuery("PaneldatenfindByPanelCNrPanelbeschreibungIIdCKey");
        query.setParameter(1, panelCNr);
        query.setParameter(2, panelbeschreibungIId);
        query.setParameter(3, cKey);
        Paneldaten paneldaten = (Paneldaten) query.getSingleResult();
        if (paneldaten == null) { // @ToDo null Pruefung?
            throw new EJBExceptionLP(EJBExceptionLP.FEHLER_BEI_FINDBYPRIMARYKEY, "");
        }
        return assemblePaneldatenDto(paneldaten);

        // }
        // catch (FinderException e) {
        // throw new EJBExceptionLP(EJBExceptionLP.FEHLER_BEI_FINDBYPRIMARYKEY,
        // e);
        // }
    }

    public PaneldatenDto[] paneldatenFindByPanelCNrCKey(String panelCNr, String cKey) throws EJBExceptionLP {
        // try {
        Query query = em.createNamedQuery("PaneldatenfindByPanelCNrCKey");
        query.setParameter(1, panelCNr);
        query.setParameter(2, cKey);
        Collection<?> cl = query.getResultList();
        // if(cl.isEmpty()){ // @ToDo null Pruefung?
        // throw new EJBExceptionLP(EJBExceptionLP.FEHLER_BEI_FINDBYPRIMARYKEY,
        // null);
        // }
        return assemblePaneldatenDtos(cl);

        // }
        // catch (FinderException e) {
        // throw new EJBExceptionLP(EJBExceptionLP.FEHLER_BEI_FINDBYPRIMARYKEY,
        // e);
        // }
    }

    private void setPaneldatenFromPaneldatenDto(Paneldaten paneldaten, PaneldatenDto paneldatenDto) {
        paneldaten.setPanelCNr(paneldatenDto.getPanelCNr());
        paneldaten.setPanelbeschreibungIId(paneldatenDto.getPanelbeschreibungIId());
        paneldaten.setCKey(paneldatenDto.getCKey());
        paneldaten.setCDatentypkey(paneldatenDto.getCDatentypkey());
        paneldaten.setOInhalt(paneldatenDto.getOInhalt());
        paneldaten.setXInhalt(paneldatenDto.getXInhalt());
        em.merge(paneldaten);
        em.flush();
    }

    private PaneldatenDto assemblePaneldatenDto(Paneldaten paneldaten) {
        return PaneldatenDtoAssembler.createDto(paneldaten);
    }

    private PaneldatenDto[] assemblePaneldatenDtos(Collection<?> paneldatens) {
        List<PaneldatenDto> list = new ArrayList<PaneldatenDto>();
        if (paneldatens != null) {
            Iterator<?> iterator = paneldatens.iterator();
            while (iterator.hasNext()) {
                Paneldaten paneldaten = (Paneldaten) iterator.next();
                list.add(assemblePaneldatenDto(paneldaten));
            }
        }
        PaneldatenDto[] returnArray = new PaneldatenDto[list.size()];
        return (PaneldatenDto[]) list.toArray(returnArray);
    }

    public void createPanel(PanelDto panelDto) throws EJBExceptionLP {
        if (panelDto == null) {
            return;
        }
        try {
            Panel panel = new Panel(panelDto.getCNr());
            em.persist(panel);
            em.flush();
            setPanelFromPanelDto(panel, panelDto);
        } catch (EntityExistsException e) {
            throw new EJBExceptionLP(EJBExceptionLP.FEHLER_BEIM_ANLEGEN, e);
        }
    }

    public void removePanel(String cNr) throws EJBExceptionLP {
        Panel toRemove = em.find(Panel.class, cNr);
        if (toRemove == null) {
            throw new EJBExceptionLP(EJBExceptionLP.FEHLER_BEI_FINDBYPRIMARYKEY, "");
        }
        try {
            em.remove(toRemove);
            em.flush();
        } catch (EntityExistsException er) {
            throw new EJBExceptionLP(EJBExceptionLP.FEHLER_BEIM_LOESCHEN, er);
        }
    }

    public void removePanel(PanelDto panelDto) throws EJBExceptionLP {
        if (panelDto != null) {
            String cNr = panelDto.getCNr();
            removePanel(cNr);
        }
    }

    public void updatePanel(PanelDto panelDto) throws EJBExceptionLP {
        if (panelDto != null) {
            String cNr = panelDto.getCNr();
            // try {
            Panel panel = em.find(Panel.class, cNr);
            if (panel == null) {
                throw new EJBExceptionLP(EJBExceptionLP.FEHLER_BEI_FINDBYPRIMARYKEY, "");
            }
            setPanelFromPanelDto(panel, panelDto);
            // }
            // catch (FinderException e) {
            // throw new
            // EJBExceptionLP(EJBExceptionLP.FEHLER_BEI_FINDBYPRIMARYKEY, e);
            // }
        }
    }

    public PanelDto panelFindByPrimaryKey(String cNr) throws EJBExceptionLP {
        // try {
        Panel panel = em.find(Panel.class, cNr);
        if (panel == null) {
            throw new EJBExceptionLP(EJBExceptionLP.FEHLER_BEI_FINDBYPRIMARYKEY, "");
        }
        return assemblePanelDto(panel);

        // }
        // catch (FinderException e) {
        // throw new EJBExceptionLP(EJBExceptionLP.FEHLER_BEI_FINDBYPRIMARYKEY,
        // e);
        // }
    }

    private void setPanelFromPanelDto(Panel panel, PanelDto panelDto) {
        panel.setCBez(panelDto.getCBez());
        em.merge(panel);
        em.flush();
    }

    private PanelDto assemblePanelDto(Panel panel) {
        return PanelDtoAssembler.createDto(panel);
    }

    private PanelDto[] assemblePanelDtos(Collection<?> panels) {
        List<PanelDto> list = new ArrayList<PanelDto>();
        if (panels != null) {
            Iterator<?> iterator = panels.iterator();
            while (iterator.hasNext()) {
                Panel panel = (Panel) iterator.next();
                list.add(assemblePanelDto(panel));
            }
        }
        PanelDto[] returnArray = new PanelDto[list.size()];
        return (PanelDto[]) list.toArray(returnArray);
    }
}