com.aurel.track.persist.TFieldPeer.java Source code

Java tutorial

Introduction

Here is the source code for com.aurel.track.persist.TFieldPeer.java

Source

/**
 * Genji Scrum Tool and Issue Tracker
 * Copyright (C) 2015 Steinbeis GmbH & Co. KG Task Management Solutions
    
 * <a href="http://www.trackplus.com">Genji Scrum Tool</a>
 *
 * This program is free software: you can redistribute it and/or modify
 * it under the terms of the GNU General Public License as published by
 * the Free Software Foundation, either version 3 of the License, or
 * (at your option) any later version.
 *
 * 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 General Public License for more details.
 *
 * You should have received a copy of the GNU General Public License
 * along with this program. If not, see <http://www.gnu.org/licenses/>.
 */

/* $Id:$ */

package com.aurel.track.persist;

import java.util.LinkedList;
import java.util.List;

import org.apache.commons.lang3.exception.ExceptionUtils;
import org.apache.logging.log4j.Logger;
import org.apache.logging.log4j.LogManager;
import org.apache.torque.TorqueException;
import org.apache.torque.util.Criteria;

import com.aurel.track.admin.customize.notify.trigger.NotifyTriggerBL;
import com.aurel.track.beans.TFieldBean;
import com.aurel.track.dao.FieldDAO;
import com.aurel.track.fieldType.constants.BooleanFields;
import com.aurel.track.fieldType.types.FieldTypeManager;
import com.aurel.track.item.history.HistoryDAOUtils;

/**
 *  You should add additional methods to this class to meet the
 *  application requirements.  This class will only be generated as
 *  long as it does not already exist in the output directory.
 */
public class TFieldPeer extends com.aurel.track.persist.BaseTFieldPeer implements FieldDAO {
    private static final Logger LOGGER = LogManager.getLogger(TFieldPeer.class);

    public static final long serialVersionUID = 400L;

    private static Class[] dependentPeerClasses = { TAttributeValuePeer.class, };

    private static String[] dependentFields = { TAttributeValuePeer.FIELDKEY, };

    //TNotifyFieldPeer needs extra care to remove the related entities also
    private static Class[] deletePeerClasses = { TReportLayoutPeer.class, TAttributeValuePeer.class,
            TRoleFieldPeer.class, TFieldConfigPeer.class, //overrided doDelete
            TScreenFieldPeer.class, TCardFieldPeer.class, TCardGroupingFieldPeer.class, TNavigatorColumnPeer.class,
            TNavigatorGroupingSortingPeer.class, TWorkflowActivityPeer.class, TWorkflowGuardPeer.class,
            BaseTFieldPeer.class };

    private static String[] deleteFields = { TReportLayoutPeer.REPORTFIELD, TAttributeValuePeer.FIELDKEY,
            TRoleFieldPeer.FIELDKEY, TFieldConfigPeer.FIELDKEY, TScreenFieldPeer.FIELDKEY, TCardFieldPeer.FIELDKEY,
            TCardGroupingFieldPeer.CARDFIELD, TNavigatorColumnPeer.FIELD, TNavigatorGroupingSortingPeer.FIELD,
            TWorkflowActivityPeer.ACTIVITYTYPE, TWorkflowGuardPeer.GUARDTYPE, BaseTFieldPeer.OBJECTID };

    /**
     * Loads the field by primary key
     * @param objectID
     * @return
     */
    @Override
    public TFieldBean loadByPrimaryKey(Integer objectID) {
        TField tField = null;
        try {
            tField = retrieveByPK(objectID);
        } catch (Exception e) {
            LOGGER.info("Loading of a field by primary key " + objectID + " failed with " + e.getMessage());
            LOGGER.debug(ExceptionUtils.getStackTrace(e));
        }
        if (tField != null) {
            return tField.getBean();
        }
        return null;
    }

    /**
     * Loads a field by name 
     * @param name
     * @return
     */
    @Override
    public List<TFieldBean> loadByName(String name) {
        Criteria crit = new Criteria();
        crit.add(NAME, name);
        try {
            return convertTorqueListToBeanList(doSelect(crit));
        } catch (TorqueException e) {
            LOGGER.error("Loading all fields failed with " + e.getMessage());
            return null;
        }
    }

    /**
     * Loads the fields by names
     * @param names
     * @return
     */
    @Override
    public List<TFieldBean> loadByNames(List<String> names) {
        if (names == null || names.isEmpty()) {
            return new LinkedList<TFieldBean>();
        }
        Criteria crit = new Criteria();
        crit.addIn(NAME, names);
        try {
            return convertTorqueListToBeanList(doSelect(crit));
        } catch (TorqueException e) {
            LOGGER.error("Loading all fields failed with " + e.getMessage());
            return null;
        }
    }

    /**
     * Loads all fields
     * @return 
     */
    @Override
    public List<TFieldBean> loadAll() {
        Criteria crit = new Criteria();
        try {
            return convertTorqueListToBeanList(doSelect(crit));
        } catch (TorqueException e) {
            LOGGER.error("Loading all fields failed with " + e.getMessage());
            return null;
        }
    }

    /**
     * Loads all active fields from TField table 
     * @return 
     */
    @Override
    public List<TFieldBean> loadActive() {
        Criteria crit = new Criteria();
        crit.add(DEPRECATED, (Object) BooleanFields.TRUE_VALUE, Criteria.NOT_EQUAL);
        try {
            return convertTorqueListToBeanList(doSelect(crit));
        } catch (TorqueException e) {
            LOGGER.error("Loading active fields failed with " + e.getMessage());
            return null;
        }
    }

    /**
     * Loads all custom fields from TField table
     * @return
     */
    @Override
    public List<TFieldBean> loadCustom() {
        Criteria crit = new Criteria();
        crit.add(ISCUSTOM, BooleanFields.TRUE_VALUE);
        try {
            return convertTorqueListToBeanList(doSelect(crit));
        } catch (TorqueException e) {
            LOGGER.error("Loading custom fields failed with " + e.getMessage());
            return null;
        }
    }

    /**
     * Loads all system fields from TField table
     * @return
     */
    @Override
    public List<TFieldBean> loadSystem() {
        Criteria crit = new Criteria();
        crit.add(ISCUSTOM, (Object) BooleanFields.TRUE_VALUE, Criteria.NOT_EQUAL);
        try {
            return convertTorqueListToBeanList(doSelect(crit));
        } catch (TorqueException e) {
            LOGGER.error("Loading system fields failed with " + e.getMessage());
            return null;
        }
    }

    /**
     * Loads all system fields from TField table
     * @return
     */
    @Override
    public List<TFieldBean> loadFilterFields() {
        Criteria crit = new Criteria();
        crit.add(FILTERFIELD, BooleanFields.TRUE_VALUE);
        try {
            return convertTorqueListToBeanList(doSelect(crit));
        } catch (TorqueException e) {
            LOGGER.error("Loading filter fields failed with " + e.getMessage());
            return null;
        }
    }

    /**
     * Loads all custom fieldBeans which are specified for a workItem 
     * @param workItemID
     * @return
     */
    @Override
    public List<TFieldBean> loadSpecifiedCustomFields(Integer workItemID) {
        Criteria crit = new Criteria();
        crit.addJoin(OBJECTID, BaseTAttributeValuePeer.FIELDKEY);
        crit.add(BaseTAttributeValuePeer.WORKITEM, workItemID);
        try {
            return convertTorqueListToBeanList(doSelect(crit));
        } catch (TorqueException e) {
            LOGGER.error("Loading custom fields failed with " + e.getMessage());
            return null;
        }
    }

    /**
     * Returns whether the name is unique for the field
     * @param name
     * @param fieldID
     * @return
     */
    @Override
    public boolean isNameUnique(String name, Integer fieldID) {
        List<TField> fieldsList = null;
        Criteria crit = new Criteria();
        if (fieldID != null) {
            crit.add(OBJECTID, fieldID, Criteria.NOT_EQUAL);
        }
        crit.add(NAME, name);
        try {
            fieldsList = doSelect(crit);
        } catch (TorqueException e) {
            LOGGER.error("Verifying the uniqueness of the name " + name + " and field " + fieldID + " failed with "
                    + e.getMessage());
        }
        if (fieldsList == null || fieldsList.isEmpty()) {
            return true;
        }
        return false;
    }

    /**
     * Saves a field in the TField table
     * @param fieldBean
     * @return
     */
    @Override
    public Integer save(TFieldBean fieldBean) {
        TField tField;
        try {
            tField = BaseTField.createTField(fieldBean);
            tField.save();
            return tField.getObjectID();
        } catch (Exception e) {
            LOGGER.error("Saving of a field failed with " + e.getMessage());
            return null;
        }
    }

    /**
     * Deletes a field by primary key
     * First deletes all configs related to the field
     * then deletes the field itself
     * Is deletable should return true before calling this method
     * @param objectID
     */
    @Override
    public void delete(Integer objectID) {
        //TODO make it into a transaction
        //delete from triggers
        new TNotifyFieldPeer().deleteByField(objectID, NotifyTriggerBL.ACTIONTYPE.EDIT_ISSUE,
                NotifyTriggerBL.FIELDTYPE.ISSUE_FIELD);
        //delete from history
        HistoryDAOUtils.deleteFieldChangesByFieldID(objectID);
        //delete from other dependences
        ReflectionHelper.delete(deletePeerClasses, deleteFields, objectID);
    }

    /**
     * delete workItems with the given criteria and delete all dependent database entries
     * Called by reflection
     * @param crit
     */
    public static void doDelete(Criteria crit) {
        try {
            // retrieve all the fields first
            List<TField> list = doSelect(crit);
            if (list == null || list.size() < 1) {
                return;
            }
            for (TField field : list) {
                new TFieldPeer().delete(field.getObjectID());
            }
        } catch (TorqueException e) {
            LOGGER.error("Cascade deleteing the field configs failed with " + e.getMessage());
        }
        FieldTypeManager.getInstance().invalidateCache();
    }

    /**
     * Verifies whether there are already values saved for this field in workItems
     * If configs exist it does not matter (it will be deleted) 
     * @param fieldId
     */
    @Override
    public boolean isDeletable(Integer objectID) {
        return !ReflectionHelper.hasDependentData(dependentPeerClasses, dependentFields, objectID);
    }

    /**
     * Sets the deprecated flag
     * @param fieldId
     */
    @Override
    public void setDeprecated(Integer objectID, boolean deactivate) {
        TFieldBean fieldBean = loadByPrimaryKey(objectID);
        if (deactivate) {
            fieldBean.setDeprecated("Y");
        } else {
            fieldBean.setDeprecated("N");
        }
        try {
            save(fieldBean);
        } catch (Exception e) {
            LOGGER.error("Deprecating the field " + objectID + " failed with: " + e);
        }
    }

    /**
     * Load all  fields from screen
     * @param screenID
     * @return
     */
    @Override
    public List<TFieldBean> loadAllFields(Integer screenID) {
        Criteria crit = new Criteria();
        crit.add(BaseTScreenPeer.OBJECTID, screenID);
        crit.addJoin(BaseTScreenPeer.OBJECTID, BaseTScreenTabPeer.PARENT);
        crit.addJoin(BaseTScreenTabPeer.OBJECTID, BaseTScreenPanelPeer.PARENT);
        crit.addJoin(BaseTScreenPanelPeer.OBJECTID, BaseTScreenFieldPeer.PARENT);
        crit.addJoin(BaseTScreenFieldPeer.FIELDKEY, OBJECTID);
        crit.setDistinct();
        try {
            return convertTorqueListToBeanList(doSelect(crit));
        } catch (TorqueException e) {
            LOGGER.error("Load all  fields from screen:" + screenID + " failed with " + e.getMessage());
            return null;
        }
    }

    @Override
    public List<TFieldBean> loadAllFieldsOnCard(Integer cardPanelID) {
        Criteria crit = new Criteria();
        crit.add(BaseTCardPanelPeer.OBJECTID, cardPanelID);
        crit.addJoin(BaseTCardPanelPeer.OBJECTID, BaseTCardFieldPeer.CARDPANEL);
        crit.addJoin(BaseTCardFieldPeer.FIELDKEY, OBJECTID);
        crit.setDistinct();
        try {
            return convertTorqueListToBeanList(doSelect(crit));
        } catch (TorqueException e) {
            LOGGER.error("Load all  fields from card :" + cardPanelID + " failed with " + e.getMessage());
            return null;
        }
    }

    /**
     * Load all fields from screens
     * @param screenIDs
     * @return
     */
    @Override
    public List<TFieldBean> loadByScreens(Object[] screenIDs) {
        if (screenIDs != null && screenIDs.length > 0) {
            Criteria crit = new Criteria();
            crit.addIn(BaseTScreenPeer.OBJECTID, screenIDs);
            crit.addJoin(BaseTScreenPeer.OBJECTID, BaseTScreenTabPeer.PARENT);
            crit.addJoin(BaseTScreenTabPeer.OBJECTID, BaseTScreenPanelPeer.PARENT);
            crit.addJoin(BaseTScreenPanelPeer.OBJECTID, BaseTScreenFieldPeer.PARENT);
            crit.addJoin(BaseTScreenFieldPeer.FIELDKEY, OBJECTID);
            crit.setDistinct();
            try {
                return convertTorqueListToBeanList(doSelect(crit));
            } catch (TorqueException e) {
                LOGGER.error(
                        "Load all  fields from screens: " + screenIDs.length + " failed with " + e.getMessage());
            }
        }
        return null;
    }

    /**
     * Load fields by fieldID 
     * @param fieldIDs
     * @return
     */
    @Override
    public List<TFieldBean> loadByFieldIDs(Object[] fieldIDs) {
        if (fieldIDs != null && fieldIDs.length > 0) {
            Criteria crit = new Criteria();
            crit.addIn(OBJECTID, fieldIDs);
            try {
                return convertTorqueListToBeanList(doSelect(crit));
            } catch (TorqueException e) {
                LOGGER.error("Load all  fields by fieldIDs: " + fieldIDs.length + " failed with " + e.getMessage());
            }
        }
        return null;
    }

    /**
     * Load all custom fields from screen
     * @param screenID
     * @return
     */
    @Override
    public List<TFieldBean> loadAllCustomFields(Integer screenID) {
        Criteria crit = new Criteria();
        crit.add(BaseTScreenPeer.OBJECTID, screenID);
        crit.addJoin(BaseTScreenPeer.OBJECTID, BaseTScreenTabPeer.PARENT);
        crit.addJoin(BaseTScreenTabPeer.OBJECTID, BaseTScreenPanelPeer.PARENT);
        crit.addJoin(BaseTScreenPanelPeer.OBJECTID, BaseTScreenFieldPeer.PARENT);
        crit.addJoin(BaseTScreenFieldPeer.FIELDKEY, OBJECTID);
        crit.add(BaseTFieldPeer.ISCUSTOM, "Y");
        try {
            return convertTorqueListToBeanList(doSelect(crit));
        } catch (TorqueException e) {
            LOGGER.error("Load all custom fields from screen:" + screenID + " failed with " + e.getMessage());
            return null;
        }
    }

    /**
     * Load the custom fields from tab
     * @param screenTab
     * @return
     */
    @Override
    public List<TFieldBean> loadCustomFieldsFromTab(Integer screenTabID) {
        Criteria crit = new Criteria();
        crit.add(ISCUSTOM, BooleanFields.TRUE_VALUE);
        crit.add(BaseTScreenPanelPeer.PARENT, screenTabID);
        crit.addJoin(BaseTScreenTabPeer.OBJECTID, BaseTScreenPanelPeer.PARENT);
        crit.addJoin(BaseTScreenPanelPeer.OBJECTID, BaseTScreenFieldPeer.PARENT);
        crit.addJoin(BaseTScreenFieldPeer.FIELDKEY, OBJECTID);
        try {
            return convertTorqueListToBeanList(doSelect(crit));
        } catch (TorqueException e) {
            LOGGER.error("Load all custom fields from screenTan:" + screenTabID + " failed with " + e.getMessage());
            return null;
        }
    }

    /**
     * Load the fields defined only in a project type
     * @return
     */
    @Override
    public List<TFieldBean> loadByProjectType(Integer projectTypeID) {
        Criteria crit = new Criteria();
        crit.add(PROJECTTYPE, projectTypeID);
        try {
            return convertTorqueListToBeanList(doSelect(crit));
        } catch (TorqueException e) {
            LOGGER.error("Loading project type fields for " + projectTypeID + " failed with " + e.getMessage());
            return null;
        }
    }

    /**
     * Load the fields defined only in a project
     * @return
     */
    @Override
    public List<TFieldBean> loadByProject(Integer projectID) {
        Criteria crit = new Criteria();
        crit.add(PROJECT, projectID);
        try {
            return convertTorqueListToBeanList(doSelect(crit));
        } catch (TorqueException e) {
            LOGGER.error("Loading project fields for " + projectID + " failed with " + e.getMessage());
            return null;
        }
    }

    /**
     * Converts a list of TField torque objects to a list of TFieldBean objects 
     * @param torqueList
     * @return
     */
    private List<TFieldBean> convertTorqueListToBeanList(List<TField> torqueList) {
        List<TFieldBean> beanList = new LinkedList<TFieldBean>();
        if (torqueList != null) {
            for (TField tField : torqueList) {
                beanList.add(tField.getBean());
            }
        }
        return beanList;
    }
}