dz.alkhwarizmix.framework.java.services.impl.RecordService.java Source code

Java tutorial

Introduction

Here is the source code for dz.alkhwarizmix.framework.java.services.impl.RecordService.java

Source

////////////////////////////////////////////////////////////////////////////////
//     
//
//   ?    ?  (Copyright 2014 Fares Belhaouas)
//  ?  ? (All Rights Reserved)
//
//  NOTICE: Fares Belhaouas permits you to use, modify, and distribute this file
//  in accordance with the terms of the license agreement accompanying it.
//
////////////////////////////////////////////////////////////////////////////////

package dz.alkhwarizmix.framework.java.services.impl;

import java.util.List;

import org.hibernate.criterion.DetachedCriteria;
import org.hibernate.criterion.Order;
import org.hibernate.criterion.Restrictions;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.oxm.jaxb.Jaxb2Marshaller;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

import dz.alkhwarizmix.framework.java.AlKhwarizmixException;
import dz.alkhwarizmix.framework.java.dao.IAlKhwarizmixDAO;
import dz.alkhwarizmix.framework.java.dao.IRecordDAO;
import dz.alkhwarizmix.framework.java.domain.AbstractAlKhwarizmixDomainObject;
import dz.alkhwarizmix.framework.java.dtos.record.model.vo.Record;
import dz.alkhwarizmix.framework.java.dtos.record.model.vo.RecordList;
import dz.alkhwarizmix.framework.java.dtos.security.model.vo.Encryption;
import dz.alkhwarizmix.framework.java.services.IAlKhwarizmixServiceValidator;
import dz.alkhwarizmix.framework.java.services.IRecordService;
import dz.alkhwarizmix.framework.java.services.IRecordServiceValidator;
import dz.alkhwarizmix.framework.java.utils.impl.XMLUtil;

/**
 * <p>
 * TODO: Javadoc
 * </p>
 *
 * @author ?  (Fares Belhaouas)
 * @since     (October 06, 2014)
 */
@Service
@Transactional(readOnly = true)
public class RecordService extends AbstractAlKhwarizmixService implements IRecordService {

    // --------------------------------------------------------------------------
    //
    // Constructors
    //
    // --------------------------------------------------------------------------

    public RecordService() {
        super();
    }

    protected RecordService(final Logger theLogger) {
        this();
        logger = theLogger;
    }

    // --------------------------------------------------------------------------
    //
    // Logger
    //
    // --------------------------------------------------------------------------

    private static Logger logger = null;

    @Override
    protected final Logger getLogger() {
        if (logger == null)
            logger = LoggerFactory.getLogger(RecordService.class);
        return logger;
    }

    // --------------------------------------------------------------------------
    //
    // Properties
    //
    // --------------------------------------------------------------------------

    @Autowired
    private IRecordDAO recordDAO;

    @Autowired
    private IRecordServiceValidator recordValidator;

    @Autowired
    private Jaxb2Marshaller jaxb2Marshaller;

    // --------------------------------------------------------------------------
    //
    // Methods
    //
    // --------------------------------------------------------------------------

    /**
     * {@inheritDoc}
     */
    @Transactional(readOnly = false)
    @Override
    public RecordList commitRecordList(final RecordList recordList, final boolean validateObjectToPublish)
            throws AlKhwarizmixException {
        getLogger().trace("commitRecordList");

        final RecordList result = new RecordList();
        for (final AbstractAlKhwarizmixDomainObject record : recordList.getList()) {
            final Record commitedRecord = commitRecord((Record) record, validateObjectToPublish);
            result.getList().add(commitedRecord);
        }
        return result;
    }

    /**
     */
    private Record commitRecord(final Record record, final boolean validateObjectToPublish)
            throws AlKhwarizmixException {
        if (record.getAction() == null)
            throw new AlKhwarizmixException("Wrong action");
        switch (record.getAction()) {
        case Record.INSERT_ACTION:
            return insertRecord(record, validateObjectToPublish);
        case Record.UPDATE_ACTION:
            return updateRecord(record, validateObjectToPublish);
        case Record.DELETE_ACTION:
            return deleteRecord(record, validateObjectToPublish);
        default:
            throw new AlKhwarizmixException("Wrong action");
        }
    }

    /**
     */
    private Record insertRecord(final Record record, final boolean validateObjectToPublish)
            throws AlKhwarizmixException {
        if (record.getEncryption() != null) {
            record.getEncryption().setUser(getSessionData().getLoggedUser());
            final Encryption existingEncryption = getRecordDAO().getEncryption(record.getEncryption());
            if (existingEncryption != null)
                record.setEncryption(existingEncryption);
            else
                getRecordDAO().saveOrUpdate(record.getEncryption());
        }
        final Record result = (Record) addObject(record, validateObjectToPublish);
        return result;
    }

    /**
     */
    private Record updateRecord(final Record record, final boolean validateObjectToPublish)
            throws AlKhwarizmixException {
        final Record result = (Record) updateObject(record, getSessionOwner(), validateObjectToPublish);
        return result;
    }

    /**
     */
    private Record deleteRecord(final Record record, final boolean validateObjectToPublish)
            throws AlKhwarizmixException {
        // deleteObject(record);
        return null;
    }

    /**
     * {@inheritDoc}
     */
    @Transactional(readOnly = false)
    @Override
    public String commitRecordListFromXML(final String recordListXml) throws AlKhwarizmixException {
        getLogger().trace("commitRecordListFromXML");
        final RecordList newRecordList = xmlToRecordList(recordListXml);
        final RecordList commitedRecordList = commitRecordList(newRecordList, true);
        final String result = recordListToXML(commitedRecordList);
        return result;
    }

    /**
     * {@inheritDoc}
     */
    @Override
    public AbstractAlKhwarizmixDomainObject getObject(final AbstractAlKhwarizmixDomainObject object,
            final boolean validateObjectToPublish) throws AlKhwarizmixException {
        getLogger().trace("getObject");
        Record result = getRecordDAO().getRecord((Record) object);
        if (validateObjectToPublish && (result != null)) {
            result = (Record) result.clone();
            getServiceValidator().validateObjectToPublish(result, getSessionOwner());
        }
        updateObjectFromExtendedDataXML(result);
        return result;
    }

    /**
     * {@inheritDoc}
     */
    @Override
    public Record getRecord(final Record record, final boolean validateObjectToPublish)
            throws AlKhwarizmixException {
        getLogger().trace("getRecord");
        final Record result = (Record) getObject(record, validateObjectToPublish);
        return result;
    }

    /**
     * {@inheritDoc}
     */
    @Override
    public String getRecordAsXML(final Record record) throws AlKhwarizmixException {
        getLogger().trace("getRecordAsXML 1");
        final String result = getObjectAsXML(record);
        return result;
    }

    /**
     * {@inheritDoc}
     */
    @Override
    public String getRecordAsXML(final String recordXml) throws AlKhwarizmixException {
        getLogger().trace("getRecordAsXML 2");
        final String result = getObjectAsXML(recordXml);
        return result;
    }

    /**
     * {@inheritDoc}
     */
    @Override
    public RecordList getRecordList(final String schema, final String table, DetachedCriteria criteriaToUse,
            final int firstResult, final int maxResult, final boolean validateObjectToPublish)
            throws AlKhwarizmixException {
        getLogger().trace("getRecordList");
        List<Record> listOfRecords = null;
        Record tableRecord = new Record(null, schema, table).getTableRecord();
        tableRecord = getRecordDAO().getRecord(tableRecord);
        if (tableRecord != null) {
            if (criteriaToUse == null) {
                criteriaToUse = DetachedCriteria.forClass(Record.class);
                criteriaToUse.addOrder(Order.asc(Record.RECORDID));
            }
            addHaveAccessCriteria(criteriaToUse);
            criteriaToUse.add(Restrictions.eq(Record.PARENT_ID, tableRecord.getId()));
            listOfRecords = extracted(criteriaToUse, firstResult, maxResult, validateObjectToPublish);
        }
        return new RecordList(listOfRecords);
    }

    @SuppressWarnings("unchecked")
    private List<Record> extracted(final DetachedCriteria criteriaToUse, final int firstResult, final int maxResult,
            final boolean validateObjectToPublish) throws AlKhwarizmixException {
        return (List<Record>) (List<?>) getObjectList(criteriaToUse, firstResult, maxResult,
                validateObjectToPublish);
    }

    /**
     */
    private void addHaveAccessCriteria(final DetachedCriteria criteria) {
        criteria.add(Restrictions.eq(Record.OWNER_ID, getSessionOwner().getId()));
    }

    /**
     * {@inheritDoc}
     */
    @Override
    public String getRecordListAsXML(final String schema, final String table, final DetachedCriteria criteria,
            final int firstResult, final int maxResult) throws AlKhwarizmixException {
        getLogger().trace("getRecordListAsXML");
        final String result = recordListToXML(getRecordList(schema, table, criteria, firstResult, maxResult, true));
        return result;
    }

    /**
     * TODO: JAVADOC
     */
    protected String recordListToXML(final RecordList recordList) {
        String result = null;
        try {
            result = new XMLUtil(getJaxb2Marshaller()).marshalObjectListToXML(recordList);
        } catch (final AlKhwarizmixException exception) {
            getLogger().error("recordListToXML(): exception {}", exception);
            throw new RuntimeException();
        }
        getLogger().trace("recordListToXML(): returns {}", result);
        return result;
    }

    /**
     * TODO: JAVADOC
     */
    protected RecordList xmlToRecordList(final String recordListXml) {
        RecordList result = null;
        try {
            result = (RecordList) new XMLUtil(getJaxb2Marshaller()).unmarshalObjectListFromXML(recordListXml);
        } catch (final AlKhwarizmixException exception) {
            getLogger().error("recordListToXML(): exception {}", exception);
            throw new RuntimeException();
        }
        getLogger().trace("recordListToXML(): returns {}", result);
        return result;
    }

    // --------------------------------------------------------------------------
    //
    // Getters & Setters
    //
    // --------------------------------------------------------------------------

    // ----------------------------------
    // recordDAO
    // ----------------------------------

    private final IRecordDAO getRecordDAO() {
        return recordDAO;
    }

    protected final void setRecordDAO(final IRecordDAO value) {
        recordDAO = value;
    }

    @Override
    protected IAlKhwarizmixDAO getServiceDAO() {
        return recordDAO;
    }

    // ----------------------------------
    // recordValidator
    // ----------------------------------

    protected final void setRecordValidator(final IRecordServiceValidator value) {
        recordValidator = value;
    }

    @Override
    protected IAlKhwarizmixServiceValidator getServiceValidator() {
        return recordValidator;
    }

    // ----------------------------------
    // jaxb2Marshaller
    // ----------------------------------

    @Override
    protected Jaxb2Marshaller getJaxb2Marshaller() {
        return jaxb2Marshaller;
    }

    @Override
    protected void setJaxb2Marshaller(final Jaxb2Marshaller value) {
        jaxb2Marshaller = value;
    }

} // Class