gov.nih.nci.cabig.ctms.acegi.csm.authorization.CSMPrivilegeAndObjectRetrievalStrategy.java Source code

Java tutorial

Introduction

Here is the source code for gov.nih.nci.cabig.ctms.acegi.csm.authorization.CSMPrivilegeAndObjectRetrievalStrategy.java

Source

/*
 * Copyright Northwestern University and SemanticBits, LLC
 * 
 * Distributed under the OSI-approved BSD 3-Clause License.
 * See http://ncip.github.com/ctms-commons/LICENSE.txt for details.
 */
package gov.nih.nci.cabig.ctms.acegi.csm.authorization;

import java.util.ArrayList;
import java.util.List;

import org.aspectj.lang.ProceedingJoinPoint;

public class CSMPrivilegeAndObjectRetrievalStrategy implements PrivilegeAndObjectRetrievalStrategy {

    private List<SignatureToPrivilegeMapping> mappings = new ArrayList<SignatureToPrivilegeMapping>();

    private String processDomainObjectClass;

    public String getProcessDomainObjectClass() {
        return processDomainObjectClass;
    }

    public void setProcessDomainObjectClass(String processDomainObjectClass) {
        this.processDomainObjectClass = processDomainObjectClass;
    }

    public PrivilegeAndObject retrieve(ProceedingJoinPoint pjp) {
        PrivilegeAndObject pao = null;
        for (SignatureToPrivilegeMapping mapping : getMappings()) {
            if (mapping.matches(pjp.getSignature())) {
                Object[] args = pjp.getArgs();
                Object object = getDomainObject(args);

                String privilege = mapping.getPrivilege();
                pao = new PrivilegeAndObject(privilege, object);
                break;

            }
        }
        return pao;
    }

    protected Object getDomainObject(Object[] args) {
        Object obj = null;
        Class klass = null;
        try {
            klass = Class.forName(getProcessDomainObjectClass());
        } catch (Exception ex) {
            throw new RuntimeException("Error loading " + getProcessDomainObjectClass(), ex);
        }
        for (int i = 0; i < args.length; i++) {
            if (args[i] != null && klass.isAssignableFrom(args[i].getClass())) {
                obj = args[i];
                break;
            }
        }
        return obj;
    }

    public List<SignatureToPrivilegeMapping> getMappings() {
        return mappings;
    }

    public void setMappings(List<SignatureToPrivilegeMapping> mappings) {
        this.mappings = mappings;
    }

}