Example usage for org.apache.commons.beanutils PropertyUtils copyProperties

List of usage examples for org.apache.commons.beanutils PropertyUtils copyProperties

Introduction

In this page you can find the example usage for org.apache.commons.beanutils PropertyUtils copyProperties.

Prototype

public static void copyProperties(Object dest, Object orig)
        throws IllegalAccessException, InvocationTargetException, NoSuchMethodException 

Source Link

Document

Copy property values from the "origin" bean to the "destination" bean for all cases where the property names are the same (even though the actual getter and setter methods might have been customized via BeanInfo classes).

For more details see PropertyUtilsBean.

Usage

From source file:au.org.theark.report.web.component.dataextraction.filter.form.QueryFilterForm.java

/**
 * @return the listEditor of Biospecimens to aliquot
 */// www . j a  v  a 2  s .  c om
public AbstractListEditor<QueryFilterVO> buildListEditor() {
    listEditor = new AbstractListEditor<QueryFilterVO>("queryFilterVOs",
            new PropertyModel(getModelObject(), "queryFilterVOs")) {

        private static final long serialVersionUID = 1L;

        @SuppressWarnings("serial")
        @Override
        protected void onPopulateItem(final ListItem<QueryFilterVO> item) {
            item.setOutputMarkupId(true);
            item.add(new Label("row", "" + (item.getIndex() + 1)));

            if (copyQueryFilter) {
                item.getModelObject().setFieldCategory(queryFilterVoToCopy.getFieldCategory());
                item.getModelObject().setQueryFilter(queryFilterVoToCopy.getQueryFilter());
                item.getModelObject().getQueryFilter()
                        .setValue(queryFilterVoToCopy.getQueryFilter().getValue());
                item.getModelObject().getQueryFilter()
                        .setSecondValue(queryFilterVoToCopy.getQueryFilter().getSecondValue());
            }
            initFieldCategoryDdc(item);
            initFieldDdc(item);
            initOperatorDdc(item, false, null);
            // Copy button allows entire row details to be copied
            item.add(new AjaxEditorButton(Constants.COPY) {
                private static final long serialVersionUID = 1L;

                @Override
                protected void onError(AjaxRequestTarget target, Form<?> form) {
                    target.add(feedbackPanel);
                }

                @Override
                protected void onSubmit(AjaxRequestTarget target, Form<?> form) {
                    QueryFilterVO queryFilterVO = new QueryFilterVO();

                    try {
                        PropertyUtils.copyProperties(queryFilterVO, getItem().getModelObject());
                        PropertyUtils.copyProperties(queryFilterVoToCopy, getItem().getModelObject());
                        queryFilterVoToCopy.getQueryFilter().setId(null);
                        queryFilterVO.getQueryFilter().setId(null);
                        copyQueryFilter = true;
                        listEditor.addItem(queryFilterVO);
                        target.add(form);
                    } catch (IllegalAccessException e) {
                        e.printStackTrace();
                    } catch (InvocationTargetException e) {
                        e.printStackTrace();
                    } catch (NoSuchMethodException e) {
                        e.printStackTrace();
                    }
                }
            }.setDefaultFormProcessing(false));
            item.add(new AjaxEditorButton(Constants.DELETE) {
                private static final long serialVersionUID = 1L;

                @Override
                protected void onError(AjaxRequestTarget target, Form<?> form) {
                    target.add(feedbackPanel);
                }

                @Override
                protected void onSubmit(AjaxRequestTarget target, Form<?> form) {
                    iArkCommonService.deleteQueryFilter(item.getModelObject().getQueryFilter());
                    listEditor.removeItem(item);
                    listEditor.updateModel();
                    target.add(form);
                }
            }.setDefaultFormProcessing(false).setVisible(item.getIndex() >= 0));
            item.add(new AttributeModifier(Constants.CLASS, new AbstractReadOnlyModel() {

                private static final long serialVersionUID = 1L;

                @Override
                public String getObject() {
                    return (item.getIndex() % 2 == 1) ? Constants.EVEN : Constants.ODD;
                }
            }));
        }
    };
    return listEditor;
}

From source file:br.gov.jfrj.siga.vraptor.ExClassificacaoController.java

@Post("app/expediente/classificacao/gravarVia")
public void gravarVia(String acao, String codificacao, ExVia via, Long idDestino, Long idTemporalidadeArqCorr,
        Long idTemporalidadeArqInterm, Long idDestinacaoFinal) throws Exception {
    assertAcesso("DOC:Mdulo de Documentos;FE:Ferramentas;PC:Plano de Classificao");
    if (idDestino == null || idDestino <= 0) {
        throw new AplicacaoException("A destinao da via deve ser definida!");
    }/*  w ww  .  j  a v a 2s .  c om*/
    dao().iniciarTransacao();
    try {

        Date dt = dao().consultarDataEHoraDoServidor();

        ExClassificacao exClassAntiga = buscarExClassificacao(codificacao);
        if (exClassAntiga == null) {
            throw new AplicacaoException("Erro ao obter a classificao");
        }
        ExClassificacao exClassNovo = Ex.getInstance().getBL().getCopia(exClassAntiga);
        dao().gravarComHistorico(exClassNovo, exClassAntiga, dt, getIdentidadeCadastrante());

        ExVia exVia = null;
        ExVia exViaGravar = null;
        Date dtHist = null;
        Boolean removerViaAntiga = false;
        if (via.getId() == null) {
            // nova via

            exVia = new ExVia();
            exVia.setCodVia(String.valueOf(exClassAntiga.getExViaSet().size() + 1));
            exViaGravar = exVia;
            exVia = null;
            dtHist = null;
        } else {
            // alterar via existente
            exVia = dao().consultar(via.getId(), ExVia.class, false);
            ExVia exViaNova = new ExVia();
            try {
                PropertyUtils.copyProperties(exViaNova, exVia);
                // novo id
                exViaNova.setId(null);
                exViaNova.setCodVia(exVia.getCodVia());
                exViaGravar = exViaNova;
                dtHist = dt;
                removerViaAntiga = true;

            } catch (Exception e) {
                throw new AplicacaoException("Erro ao copiar as propriedades da via anterior.");
            }

        }
        ExTipoDestinacao destino = !idDestino.equals(-1L)
                ? dao().consultar(idDestino, ExTipoDestinacao.class, false)
                : null;

        ExTipoDestinacao destFinal = !idDestinacaoFinal.equals(-1L)
                ? dao().consultar(idDestinacaoFinal, ExTipoDestinacao.class, false)
                : null;

        ExTemporalidade tempCorrente = !idTemporalidadeArqCorr.equals(-1L)
                ? dao().consultar(idTemporalidadeArqCorr, ExTemporalidade.class, false)
                : null;

        ExTemporalidade tempInterm = !idTemporalidadeArqInterm.equals(-1L)
                ? dao().consultar(idTemporalidadeArqInterm, ExTemporalidade.class, false)
                : null;

        exViaGravar.setExClassificacao(exClassNovo);
        exViaGravar.setExTipoDestinacao(destino);
        exViaGravar.setExDestinacaoFinal(destFinal);
        exViaGravar.setTemporalidadeCorrente(tempCorrente);
        exViaGravar.setTemporalidadeIntermediario(tempInterm);
        exViaGravar.setObs(via.getObs());

        dao().gravarComHistorico(exViaGravar, exVia, dtHist, getIdentidadeCadastrante());

        exClassNovo.getExViaSet().add(exViaGravar);

        if (removerViaAntiga) {
            exClassAntiga.getExViaSet().remove(exVia);
        }

        Ex.getInstance().getBL().copiarReferencias(exClassNovo, exClassAntiga, dt, getIdentidadeCadastrante());
        dao().commitTransacao();
        //result.redirectTo("editar?codificacao="+codificacao+"&acao="+acao);
        result.forwardTo(this).edita(exClassNovo, codificacao, acao);
    } catch (Exception e) {
        dao().rollbackTransacao();
        throw new AplicacaoException("No foi possvel gravar via no banco de dados." + e.getMessage());
    }
}

From source file:com.glaf.base.modules.workspace.service.mybatis.MessageServiceImpl.java

@Transactional
public boolean saveSendMessageToDept(Message message, String[] recverIds) {
    boolean rst = true;

    // /*w ww.  ja  va2s.com*/
    StringBuffer recverList = new StringBuffer("");

    // ???
    for (int i = 0; i < recverIds.length; i++) {
        if (recverIds[i] == null || recverIds[i].trim().length() == 0) {
            continue;
        }

        List<SysUser> list = sysUserService.getSysUserList(Long.parseLong(recverIds[i]));

        if (list == null) {
            continue;
        }

        Iterator<SysUser> iter = list.iterator();
        int index = 0;
        while (iter.hasNext()) {
            SysUser recver = (SysUser) iter.next();
            if (index == 0) {// ???
                recverList.append(recver.getDepartment().getName()).append(",");
            }
            index++;

            Message newMessage = new Message();
            try {
                PropertyUtils.copyProperties(newMessage, message);
            } catch (Exception ex) {
                org.springframework.beans.BeanUtils.copyProperties(newMessage, message);
            }
            newMessage.setRecver(recver);
            newMessage.setRecverId(recver.getId());

            if (!saveOrUpdate(newMessage)) {
                rst = false;
            }
        }

    }

    // ???,??
    if (rst) {
        sendToSelf(message, recverList.toString());
    }

    return rst;
}

From source file:com.floreantpos.bo.ui.explorer.MenuItemExplorer.java

private TransparentPanel createButtonPanel() {
    ExplorerButtonPanel explorerButton = new ExplorerButtonPanel();
    JButton editButton = explorerButton.getEditButton();
    JButton addButton = explorerButton.getAddButton();
    JButton deleteButton = explorerButton.getDeleteButton();
    JButton duplicateButton = new JButton(POSConstants.DUPLICATE);
    JButton updateStockAmount = new JButton(Messages.getString("MenuItemExplorer.6")); //$NON-NLS-1$

    JButton btnChangeMenuGroup = new JButton("Change Menu Group");
    JButton btnChangeOrderType = new JButton("Change Order Type");

    updateStockAmount.addActionListener(new ActionListener() {

        @Override/*from  w w w . j a va 2  s .co  m*/
        public void actionPerformed(ActionEvent e) {

            try {

                int index = table.getSelectedRow();

                if (index < 0) {
                    POSMessageDialog.showMessage(MenuItemExplorer.this,
                            Messages.getString("MenuItemExplorer.7")); //$NON-NLS-1$
                    return;
                }

                MenuItem menuItem = tableModel.getRow(index);

                String amountString = JOptionPane.showInputDialog(MenuItemExplorer.this,
                        Messages.getString("MenuItemExplorer.8"), menuItem.getStockAmount()); //$NON-NLS-1$

                if (amountString == null || amountString.equals("")) { //$NON-NLS-1$
                    return;
                }

                double stockAmount = Double.parseDouble(amountString);

                if (stockAmount < 0) {
                    POSMessageDialog.showError(MenuItemExplorer.this,
                            Messages.getString("MenuItemExplorer.10")); //$NON-NLS-1$
                    return;
                }

                menuItem.setStockAmount(stockAmount);
                MenuItemDAO.getInstance().saveOrUpdate(menuItem);
                table.repaint();

            } catch (NumberFormatException e1) {
                POSMessageDialog.showError(MenuItemExplorer.this, Messages.getString("MenuItemExplorer.11")); //$NON-NLS-1$
                return;
            } catch (Exception e2) {
                BOMessageDialog.showError(MenuItemExplorer.this, POSConstants.ERROR_MESSAGE, e2);
                return;
            }
        }
    });

    editButton.addActionListener(new ActionListener() {
        public void actionPerformed(ActionEvent e) {
            doEditSelectedMenuItem();
        }

    });

    addButton.addActionListener(new ActionListener() {
        public void actionPerformed(ActionEvent e) {
            try {
                MenuItem menuItem = new MenuItem();

                Object group = cbGroup.getSelectedItem();

                if (group instanceof MenuGroup) {
                    menuItem.setParent((MenuGroup) group);
                }

                Object selectedType = cbOrderTypes.getSelectedItem();

                if (selectedType instanceof OrderType) {
                    List types = new ArrayList();
                    types.add((OrderType) selectedType);
                    menuItem.setOrderTypeList(types);
                }
                MenuItemForm editor = new MenuItemForm(menuItem);

                BeanEditorDialog dialog = new BeanEditorDialog(POSUtil.getBackOfficeWindow(), editor);
                dialog.open();

                if (dialog.isCanceled())
                    return;

                MenuItem foodItem = (MenuItem) editor.getBean();

                tableModel.addRow(foodItem);
            } catch (Throwable x) {
                BOMessageDialog.showError(POSConstants.ERROR_MESSAGE, x);
            }
        }

    });

    duplicateButton.addActionListener(new ActionListener() {
        public void actionPerformed(ActionEvent e) {
            try {
                int index = table.getSelectedRow();
                if (index < 0)
                    return;

                index = table.convertRowIndexToModel(index);

                MenuItem existingItem = tableModel.getRow(index);
                existingItem = MenuItemDAO.getInstance().initialize(existingItem);

                MenuItem newMenuItem = new MenuItem();
                PropertyUtils.copyProperties(newMenuItem, existingItem);
                newMenuItem.setId(null);
                String newName = doDuplicateName(existingItem);
                newMenuItem.setName(newName);
                newMenuItem.setFractionalUnit(existingItem.isFractionalUnit());
                newMenuItem.setDisableWhenStockAmountIsZero(existingItem.isDisableWhenStockAmountIsZero());
                newMenuItem.setShowImageOnly(existingItem.isShowImageOnly());

                MenuItemForm editor = new MenuItemForm(newMenuItem);
                BeanEditorDialog dialog = new BeanEditorDialog(POSUtil.getBackOfficeWindow(), editor);
                dialog.open();
                if (dialog.isCanceled())
                    return;

                MenuItem foodItem = (MenuItem) editor.getBean();
                tableModel.addRow(foodItem);
                table.getSelectionModel().addSelectionInterval(tableModel.getRowCount() - 1,
                        tableModel.getRowCount() - 1);
                table.scrollRowToVisible(tableModel.getRowCount() - 1);
            } catch (Throwable x) {
                BOMessageDialog.showError(POSConstants.ERROR_MESSAGE, x);
            }
        }

    });

    btnChangeMenuGroup.addActionListener(new ActionListener() {
        public void actionPerformed(ActionEvent e) {
            try {
                int[] rows = table.getSelectedRows();
                if (rows.length < 1)
                    return;

                MenuGroup group = getSelectedMenuGroup(null);
                if (group == null)
                    return;

                List<MenuItem> menuItems = new ArrayList<>();
                for (int i = 0; i < rows.length; i++) {
                    int index = table.convertRowIndexToModel(rows[i]);
                    MenuItem menuItem = tableModel.getRow(index);
                    menuItem.setParent(group);
                    menuItems.add(menuItem);
                }
                MenuItemDAO.getInstance().saveAll(menuItems);
                searchItem();
            } catch (Throwable x) {
                BOMessageDialog.showError(POSConstants.ERROR_MESSAGE, x);
            }
        }
    });

    btnChangeOrderType.addActionListener(new ActionListener() {
        public void actionPerformed(ActionEvent e) {
            try {
                int[] rows = table.getSelectedRows();
                if (rows.length < 1)
                    return;

                List<OrderType> orderTypes = getSelectedOrderTypes(new ArrayList<>());
                if (orderTypes == null)
                    return;

                List<MenuItem> menuItems = new ArrayList<>();
                for (int i = 0; i < rows.length; i++) {
                    int index = table.convertRowIndexToModel(rows[i]);
                    MenuItem menuItem = tableModel.getRow(index);
                    menuItem.setOrderTypeList(orderTypes);
                    menuItems.add(menuItem);
                }
                MenuItemDAO.getInstance().saveAll(menuItems);
                searchItem();
            } catch (Throwable x) {
                BOMessageDialog.showError(POSConstants.ERROR_MESSAGE, x);
            }
        }
    });

    deleteButton.addActionListener(new ActionListener() {
        public void actionPerformed(ActionEvent e) {
            try {
                int index = table.getSelectedRow();
                if (index < 0)
                    return;

                index = table.convertRowIndexToModel(index);

                if (POSMessageDialog.showYesNoQuestionDialog(MenuItemExplorer.this, POSConstants.CONFIRM_DELETE,
                        POSConstants.DELETE) != JOptionPane.YES_OPTION) {
                    return;
                }
                MenuItem item = tableModel.getRow(index);

                MenuItemDAO foodItemDAO = new MenuItemDAO();
                if (item.getDiscounts() != null && item.getDiscounts().size() > 0) {
                    foodItemDAO.releaseParentAndDelete(item);
                } else {
                    foodItemDAO.delete(item);
                }

                tableModel.removeRow(index);
            } catch (Throwable x) {
                BOMessageDialog.showError(POSConstants.ERROR_MESSAGE, x);
            }
        }

    });

    TransparentPanel panel = new TransparentPanel();
    panel.add(addButton);
    panel.add(editButton);
    panel.add(updateStockAmount);
    panel.add(deleteButton);
    panel.add(duplicateButton);
    panel.add(btnChangeMenuGroup);
    panel.add(btnChangeOrderType);
    return panel;
}

From source file:com.bdx.rainbow.service.basic.impl.EnterpriseService.java

@Override
public List<DubboEnterpriseInfo> getDubboEnterpriseInfoByIds(List<Integer> enterpriseIds) throws Exception {
    List<TBasicEnterpriseInfo> list = getEnterpriseInfoByIds(enterpriseIds);
    List<DubboEnterpriseInfo> dubboList = null;
    if (list != null && list.size() != 0) {
        DubboEnterpriseInfo dubboEnterpriseInfo = null;
        if (list != null && list.size() != 0) {
            dubboList = new ArrayList<DubboEnterpriseInfo>(list.size());
            for (TBasicEnterpriseInfo enterpriseInfo : list) {
                dubboEnterpriseInfo = new DubboEnterpriseInfo();
                PropertyUtils.copyProperties(dubboEnterpriseInfo, enterpriseInfo);
                dubboList.add(dubboEnterpriseInfo);
            }/*from w  w w  .  ja  v  a  2 s . c o  m*/
        }
    }
    return dubboList;
}

From source file:com.jada.admin.site.SiteLoader.java

public void loadCountry() throws Exception {
    EntityManager em = JpaConnection.getInstance().getCurrentEntityManager();
    String sql = "from Country country where siteId = :siteId order by countryCode";
    Query query = em.createQuery(sql);
    query.setParameter("siteId", Constants.SITE_SYSTEM);
    Iterator<?> iterator = query.getResultList().iterator();
    while (iterator.hasNext()) {
        Country master = (Country) iterator.next();
        Country country = new Country();
        PropertyUtils.copyProperties(country, master);
        country.setSite(site);/*from   w w  w  .  ja  v a2 s. c  om*/
        country.setCountryId(null);
        country.setRecUpdateBy(userId);
        country.setRecUpdateDatetime(new Date(System.currentTimeMillis()));
        country.setRecCreateBy(userId);
        country.setRecCreateDatetime(new Date(System.currentTimeMillis()));
        country.setShippingRegion(null);
        country.setStates(null);
        country.setTaxes(null);
        em.persist(country);
    }
}

From source file:com.glaf.base.modules.workspace.service.mybatis.MessageServiceImpl.java

/**
 * ???,??//ww  w .  j  a v a  2 s  . c o  m
 * 
 * @param message
 * @param recverLists
 * @return
 */
private boolean sendToSelf(Message message, String recverLists) {
    Message newMessage = new Message();
    try {
        PropertyUtils.copyProperties(newMessage, message);
    } catch (Exception ex) {
        org.springframework.beans.BeanUtils.copyProperties(newMessage, message);
    }

    newMessage.setCategory(1);// ?
    newMessage.setRecver(message.getSender());
    newMessage.setRecverId(message.getSender().getId());

    if (recverLists.endsWith(",")) {
        recverLists = recverLists.substring(0, recverLists.length() - 1);
    }
    if (recverLists.length() > 2000) {
        recverLists = recverLists.substring(0, 2000);
    }
    newMessage.setRecverList(recverLists);
    return saveOrUpdate(newMessage);
}

From source file:au.org.theark.lims.web.component.barcodelabel.form.DetailForm.java

@Override
protected void onSave(Form<BarcodeLabel> containerForm, AjaxRequestTarget target) {
    if (barcodePrinterName == null) {
        this.error("Barcode Printer is required");
    } else {/* w w w .j av  a2  s. com*/
        containerForm.getModelObject().setBarcodePrinterName(barcodePrinterName.toString());
        if (isNew()) {
            if (barcodeLabelTemplateDdc.getModelObject() != null) {
                List<BarcodeLabelData> cloneBarcodeLabelDataList = iLimsAdminService
                        .getBarcodeLabelDataByBarcodeLabel(barcodeLabelTemplateDdc.getModelObject());
                List<BarcodeLabelData> barcodeLabelDataList = new ArrayList<BarcodeLabelData>(0);
                for (Iterator<BarcodeLabelData> iterator = cloneBarcodeLabelDataList.iterator(); iterator
                        .hasNext();) {
                    BarcodeLabelData clonebarcodeLabelData = (BarcodeLabelData) iterator.next();
                    BarcodeLabelData barcodeLabelData = new BarcodeLabelData();
                    // Copy parent details to new barcodeLabelData
                    try {
                        PropertyUtils.copyProperties(barcodeLabelData, clonebarcodeLabelData);
                    } catch (IllegalAccessException e) {
                        log.error(e.getMessage());
                    } catch (InvocationTargetException e) {
                        log.error(e.getMessage());
                    } catch (NoSuchMethodException e) {
                        log.error(e.getMessage());
                    }
                    barcodeLabelData.setId(null);
                    barcodeLabelDataList.add(barcodeLabelData);
                }
                containerForm.getModelObject().setBarcodeLabelData(barcodeLabelDataList);
            }

            try {
                iLimsAdminService.createBarcodeLabel(containerForm.getModelObject());
                this.info("Barcode label: " + containerForm.getModelObject().getName()
                        + " was created successfully.");
            } catch (ConstraintViolationException e) {
                e.printStackTrace();
                this.error("A Barcode Label named \"" + containerForm.getModelObject().getName()
                        + "\" already exists for this study.");
            }
        } else {
            iLimsAdminService.updateBarcodeLabel(containerForm.getModelObject());
            this.info("Barcode label: " + containerForm.getModelObject().getName()
                    + " was updated successfully.");
        }
    }
    target.add(feedBackPanel);
    onSavePostProcess(target);
}

From source file:com.jada.admin.site.SiteLoader.java

public void loadState() throws Exception {
    EntityManager em = JpaConnection.getInstance().getCurrentEntityManager();
    String sql = "from State state where state.country.site.siteId = :siteId order by stateCode";
    Query query = em.createQuery(sql);
    query.setParameter("siteId", Constants.SITE_SYSTEM);
    Iterator<?> iterator = query.getResultList().iterator();
    while (iterator.hasNext()) {
        State master = (State) iterator.next();
        State state = new State();
        PropertyUtils.copyProperties(state, master);
        state.setStateId(null);//from   w w w .  j a va 2  s. c o  m
        state.setRecUpdateBy(userId);
        state.setRecUpdateDatetime(new Date(System.currentTimeMillis()));
        state.setRecCreateBy(userId);
        state.setRecCreateDatetime(new Date(System.currentTimeMillis()));
        state.setShippingRegion(null);
        Country mc = master.getCountry();
        Country country = null;
        if (mc != null) {
            country = CountryDAO.loadByCountryName(site.getSiteId(), mc.getCountryName());
        }
        state.setCountry(country);
        state.setTaxes(null);
        em.persist(state);
    }
}

From source file:au.org.theark.lims.web.component.biospecimen.batchcreate.form.AutoGenBatchCreateBiospecimenForm.java

/**
 * //from   w ww  .  j  a  v  a 2  s .  co m
 * @return the listEditor of BatchBiospecimen(s)
 */
public AbstractListEditor<BatchBiospecimenVO> buildListEditor() {
    listEditor = new AbstractListEditor<BatchBiospecimenVO>("batchBiospecimenList",
            new PropertyModel(this, "batchBiospecimenList")) {

        private static final long serialVersionUID = 1L;

        @SuppressWarnings("serial")
        @Override
        protected void onPopulateItem(final ListItem<BatchBiospecimenVO> item) {
            item.setOutputMarkupId(true);
            item.getModelObject().getBiospecimen()
                    .setLinkSubjectStudy(cpModel.getObject().getLinkSubjectStudy());
            item.getModelObject().getBiospecimen()
                    .setStudy(cpModel.getObject().getLinkSubjectStudy().getStudy());

            numberToCreateTxtFld = new TextField<Number>("numberToCreate",
                    new PropertyModel(item.getModelObject(), "numberToCreate"));

            initBioCollectionDdc(item);
            initSampleTypeDdc(item);

            sampleDateTxtFld = new DateTextField("biospecimen.sampleDate",
                    new PropertyModel(item.getModelObject(), "biospecimen.sampleDate"),
                    au.org.theark.core.Constants.DD_MM_YYYY);
            ArkDatePicker sampleDatePicker = new ArkDatePicker();
            sampleDatePicker.bind(sampleDateTxtFld);
            sampleDateTxtFld.add(sampleDatePicker);

            quantityTxtFld = new TextField<Double>("biospecimen.quantity",
                    new PropertyModel(item.getModelObject(), "biospecimen.quantity")) {
                private static final long serialVersionUID = 1L;

                @Override
                public <C> IConverter<C> getConverter(Class<C> type) {
                    DoubleConverter doubleConverter = new DoubleConverter();
                    NumberFormat numberFormat = NumberFormat.getInstance();
                    numberFormat.setMinimumFractionDigits(1);
                    doubleConverter.setNumberFormat(getLocale(), numberFormat);
                    return (IConverter<C>) doubleConverter;
                }
            };
            initUnitDdc(item);
            initTreatmentTypeDdc(item);
            concentrationTxtFld = new TextField<Number>("biospecimen.concentration",
                    new PropertyModel(item.getModelObject(), "biospecimen.concentration"));

            // Added onchange events to ensure model updated when any change made
            item.add(numberToCreateTxtFld.add(new AjaxFormComponentUpdatingBehavior("onchange") {
                @Override
                protected void onUpdate(AjaxRequestTarget target) {
                }
            }));
            item.add(bioCollectionDdc.add(new AjaxFormComponentUpdatingBehavior("onchange") {
                @Override
                protected void onUpdate(AjaxRequestTarget target) {
                }
            }));
            item.add(sampleTypeDdc.add(new AjaxFormComponentUpdatingBehavior("onchange") {
                @Override
                protected void onUpdate(AjaxRequestTarget target) {
                }
            }));
            item.add(sampleDateTxtFld.add(new AjaxFormComponentUpdatingBehavior("onchange") {
                @Override
                protected void onUpdate(AjaxRequestTarget target) {
                }
            }));
            item.add(quantityTxtFld.add(new AjaxFormComponentUpdatingBehavior("onchange") {
                @Override
                protected void onUpdate(AjaxRequestTarget target) {
                }
            }));
            item.add(unitDdc.add(new AjaxFormComponentUpdatingBehavior("onchange") {
                @Override
                protected void onUpdate(AjaxRequestTarget target) {
                }
            }));
            item.add(treatmentTypeDdc.add(new AjaxFormComponentUpdatingBehavior("onchange") {
                @Override
                protected void onUpdate(AjaxRequestTarget target) {
                }
            }));
            item.add(concentrationTxtFld.add(new AjaxFormComponentUpdatingBehavior("onchange") {
                @Override
                protected void onUpdate(AjaxRequestTarget target) {
                }
            }));

            // Copy button allows entire row details to be copied
            item.add(new AjaxEditorButton(Constants.COPY) {
                private static final long serialVersionUID = 1L;

                @Override
                protected void onError(AjaxRequestTarget target, Form<?> form) {
                    target.add(feedbackPanel);
                }

                @Override
                protected void onSubmit(AjaxRequestTarget target, Form<?> form) {
                    BatchBiospecimenVO batchBiospecimenVo = new BatchBiospecimenVO();
                    try {
                        batchBiospecimenVo.setNumberToCreate(item.getModelObject().getNumberToCreate());
                        PropertyUtils.copyProperties(batchBiospecimenVo.getBiospecimen(),
                                item.getModelObject().getBiospecimen());
                        listEditor.addItem(batchBiospecimenVo);
                        target.add(form);
                    } catch (IllegalAccessException e) {
                        e.printStackTrace();
                    } catch (InvocationTargetException e) {
                        e.printStackTrace();
                    } catch (NoSuchMethodException e) {
                        e.printStackTrace();
                    }
                }
            }.setDefaultFormProcessing(false));

            item.add(new AjaxEditorButton(Constants.DELETE) {
                private static final long serialVersionUID = 1L;

                @Override
                protected void onError(AjaxRequestTarget target, Form<?> form) {
                    target.add(feedbackPanel);
                }

                @Override
                protected void onSubmit(AjaxRequestTarget target, Form<?> form) {
                    listEditor.removeItem(item);
                    target.add(form);
                }
            }.setDefaultFormProcessing(false).setVisible(item.getIndex() > 0));

            item.add(new AttributeModifier(Constants.CLASS, new AbstractReadOnlyModel() {

                private static final long serialVersionUID = 1L;

                @Override
                public String getObject() {
                    return (item.getIndex() % 2 == 1) ? Constants.EVEN : Constants.ODD;
                }
            }));
        }

    };
    return listEditor;
}