ApplicationPermissionFieldConverter.java 3.45 KB
package fi.insomnia.bortal.model.converters;

import org.eclipse.persistence.mappings.foundation.AbstractTransformationMapping;
import org.eclipse.persistence.mappings.transformers.AttributeTransformer;
import org.eclipse.persistence.mappings.transformers.FieldTransformer;
import org.eclipse.persistence.sessions.Record;
import org.eclipse.persistence.sessions.Session;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import fi.insomnia.bortal.enums.BortalApplication;
import fi.insomnia.bortal.enums.apps.IAppPermission;
import fi.insomnia.bortal.model.ApplicationPermission;

public class ApplicationPermissionFieldConverter implements AttributeTransformer, FieldTransformer {

    /**
	 * 
	 */
    private static final long serialVersionUID = 861773188187491632L;
    private static final Logger logger = LoggerFactory.getLogger(ApplicationPermissionFieldConverter.class);

    // record - - The metadata being used to build the object.
    // session - - the current session
    // object - - The current object that the attribute is being built for.
    @Override
    public Object buildAttributeValue(Record record, Object object, Session session) {
        logger.debug("Converting record {} to object object {}", record, object);
        if (object instanceof ApplicationPermission) {
            ApplicationPermission destperm = (ApplicationPermission) object;
            logger.debug("destprm appPerm {}", destperm.getApplication());

            Object appNameObj = record.get(ApplicationPermission.APPLICATION_COLUMN);
            Object permissionObject = record.get(ApplicationPermission.PERMISSION_COLUMN);

            try {
                if (appNameObj == null || permissionObject == null) {
                    logger.warn("Application name field in record is empty! {}", record);
                    return null;
                }

                String permstr = permissionObject.toString();
                BortalApplication appEnum = BortalApplication.valueOf(appNameObj.toString());
                for (IAppPermission perm : appEnum.getPermissions()) {
                    if (perm.toString().equals(permstr)) {
                        return perm;
                    }
                }

                logger.warn("Value {} could not be translated to permission of {}", permstr, appEnum);
            } catch (IllegalArgumentException e) {
                logger.warn("Value not found in enums while converting ApplicationPermission , AppnameObj {} permissionObj {}", appNameObj, permissionObject);
            } catch (NullPointerException ne) {
                logger.warn("Caught null pointer in while convertion ApplicatoinPermission to object. AppName: {}, permissionName {}", appNameObj, permissionObject);
            }
        }
        return null;

    }

    @Override
    public void initialize(AbstractTransformationMapping arg0) {

    }

    // instance - - an instance of the domain class which contains the attribute
    // session - - the current session
    // fieldName - - the name of the field being transformed. Used if the user
    // wants to use this transformer for multiple fields.
    @Override
    public Object buildFieldValue(Object instance, String session, Session fieldName) {

        logger.debug("Converting permission of instance {}. Fieldname {}", instance, fieldName);
        if (instance instanceof ApplicationPermission) {
            return ((ApplicationPermission) instance).getPermission().toString();
        }

        return null;
    }
}