package org.cagrid.gridgrouper.service.impl; import gov.nih.nci.cagrid.metadata.ServiceMetadata; import gov.nih.nci.cagrid.metadata.security.ServiceSecurityMetadata; import org.cagrid.core.resource.JAXBResourceProperties; import org.cagrid.core.resource.JAXBResourcePropertySupport; import org.cagrid.core.resource.ResourceImpl; import org.cagrid.core.resource.ResourcePropertyDescriptor; import org.cagrid.core.resource.SingletonResourceHomeImpl; import org.cagrid.gridgrouper.model.GroupCompositeType; import org.cagrid.gridgrouper.model.GroupDescriptor; import org.cagrid.gridgrouper.model.GroupIdentifier; import org.cagrid.gridgrouper.model.GroupPrivilege; import org.cagrid.gridgrouper.model.GroupPrivilegeType; import org.cagrid.gridgrouper.model.GroupUpdate; import org.cagrid.gridgrouper.model.MemberDescriptor; import org.cagrid.gridgrouper.model.MemberFilter; import org.cagrid.gridgrouper.model.MembershipDescriptor; import org.cagrid.gridgrouper.model.MembershipExpression; import org.cagrid.gridgrouper.model.MembershipRequestDescriptor; import org.cagrid.gridgrouper.model.MembershipRequestStatus; import org.cagrid.gridgrouper.model.MembershipRequestUpdate; import org.cagrid.gridgrouper.model.MembershipType; import org.cagrid.gridgrouper.model.StemDescriptor; import org.cagrid.gridgrouper.model.StemIdentifier; import org.cagrid.gridgrouper.model.StemPrivilege; import org.cagrid.gridgrouper.model.StemPrivilegeType; import org.cagrid.gridgrouper.model.StemUpdate; import org.cagrid.gridgrouper.service.GridGrouperService; import org.cagrid.gridgrouper.service.exception.GrantPrivilegeException; import org.cagrid.gridgrouper.service.exception.GridGrouperRuntimeException; import org.cagrid.gridgrouper.service.exception.GroupAddException; import org.cagrid.gridgrouper.service.exception.GroupDeleteException; import org.cagrid.gridgrouper.service.exception.GroupModifyException; import org.cagrid.gridgrouper.service.exception.GroupNotFoundException; import org.cagrid.gridgrouper.service.exception.InsufficientPrivilegeException; import org.cagrid.gridgrouper.service.exception.MemberAddException; import org.cagrid.gridgrouper.service.exception.MemberDeleteException; import org.cagrid.gridgrouper.service.exception.RevokePrivilegeException; import org.cagrid.gridgrouper.service.exception.SchemaException; import org.cagrid.gridgrouper.service.exception.StemAddException; import org.cagrid.gridgrouper.service.exception.StemDeleteException; import org.cagrid.gridgrouper.service.exception.StemModifyException; import org.cagrid.gridgrouper.service.exception.StemNotFoundException; import org.cagrid.gridgrouper.wsrf.stubs.GridGrouperResourceProperties; import org.cagrid.wsrf.properties.ResourceHome; import org.cagrid.wsrf.properties.ResourceProperty; import javax.xml.bind.JAXBException; import javax.xml.namespace.QName; import java.net.MalformedURLException; import java.net.URL; import java.util.Collection; import java.util.List; import java.util.Map; public class GridGrouperServiceImpl implements GridGrouperService { GridGrouper gridGrouper; private ResourceProperty<ServiceMetadata> serviceMetadataResourceProperty; private ResourceProperty<ServiceSecurityMetadata> serviceSecurityMetadataResourceProperty; private final Map<String, String> jaxbResourcePropertiesMap; private final ResourceImpl resource = new ResourceImpl(null); private final ResourceHome resourceHome = new SingletonResourceHomeImpl(resource); public GridGrouperServiceImpl(Map<String, String> jaxbResourcePropertiesMap) throws GridGrouperRuntimeException { this.gridGrouper = new GridGrouper(); this.jaxbResourcePropertiesMap = jaxbResourcePropertiesMap; } @Override public ServiceSecurityMetadata getServiceSecurityMetadata() { return (serviceSecurityMetadataResourceProperty != null) ? serviceSecurityMetadataResourceProperty .get(0) : null; } @Override public ServiceMetadata getServiceMetadata() { return (serviceMetadataResourceProperty != null) ? serviceMetadataResourceProperty .get(0) : null; } @Override public StemDescriptor getStem(String callerIdentity, StemIdentifier stem) throws GridGrouperRuntimeException, StemNotFoundException { return gridGrouper.getStem(callerIdentity, stem); } @Override public List<StemDescriptor> getChildStems(String callerIdentity, StemIdentifier parentStem) throws GridGrouperRuntimeException, StemNotFoundException { return gridGrouper.getChildStems(callerIdentity, parentStem); } @Override public StemDescriptor getParentStem(String callerIdentity, StemIdentifier childStem) throws GridGrouperRuntimeException, StemNotFoundException { return gridGrouper.getParentStem(callerIdentity, childStem); } @Override public List<String> getSubjectsWithStemPrivilege(String callerIdentity, StemIdentifier stem, StemPrivilegeType privilege) throws GridGrouperRuntimeException, StemNotFoundException { return gridGrouper.getSubjectsWithStemPrivilege(callerIdentity, stem, privilege); } @Override public List<StemPrivilege> getStemPrivileges(String callerIdentity, StemIdentifier stem, String subject) throws GridGrouperRuntimeException, StemNotFoundException { return gridGrouper.getStemPrivileges(callerIdentity, stem, subject); } @Override public boolean hasStemPrivilege(String callerIdentity, StemIdentifier stem, String subject, StemPrivilegeType privilege) throws GridGrouperRuntimeException, StemNotFoundException { return gridGrouper.hasStemPrivilege(callerIdentity, stem, subject, privilege); } @Override public void grantStemPrivilege(String callerIdentity, StemIdentifier stem, String subject, StemPrivilegeType privilege) throws GrantPrivilegeException, SchemaException, InsufficientPrivilegeException, StemNotFoundException, GridGrouperRuntimeException { gridGrouper.grantStemPrivilege(callerIdentity, stem, subject, privilege); } @Override public void revokeStemPrivilege(String callerIdentity, StemIdentifier stem, String subject, StemPrivilegeType privilege) throws InsufficientPrivilegeException, RevokePrivilegeException, SchemaException, StemNotFoundException, GridGrouperRuntimeException { gridGrouper.revokeStemPrivilege(callerIdentity, stem, subject, privilege); } @Override public StemDescriptor addChildStem(String callerIdentity, StemIdentifier stem, String extension, String displayExtension) throws StemNotFoundException, StemAddException, InsufficientPrivilegeException, GridGrouperRuntimeException { return gridGrouper.addChildStem(callerIdentity, stem, extension, displayExtension); } @Override public void deleteStem(String callerIdentity, StemIdentifier stem) throws StemDeleteException, StemNotFoundException, InsufficientPrivilegeException, GridGrouperRuntimeException { gridGrouper.deleteStem(callerIdentity, stem); } @Override public GroupDescriptor getGroup(String callerIdentity, GroupIdentifier group) throws GridGrouperRuntimeException, GroupNotFoundException { return gridGrouper.getGroup(callerIdentity, group); } @Override public List<GroupDescriptor> getChildGroups(String callerIdentity, StemIdentifier stem) throws GridGrouperRuntimeException, StemNotFoundException { return gridGrouper.getChildGroups(callerIdentity, stem); } @Override public GroupDescriptor addChildGroup(String callerIdentity, StemIdentifier stem, String extension, String displayExtension) throws GroupAddException, InsufficientPrivilegeException, StemNotFoundException, GridGrouperRuntimeException { return gridGrouper.addChildGroup(callerIdentity, stem, extension, displayExtension); } @Override public void deleteGroup(String callerIdentity, GroupIdentifier group) throws InsufficientPrivilegeException, GroupDeleteException, GroupNotFoundException, GridGrouperRuntimeException { gridGrouper.deleteGroup(callerIdentity, group); } @Override public StemDescriptor updateStem(String callerIdentity, StemIdentifier stem, StemUpdate update) throws StemModifyException, GridGrouperRuntimeException, InsufficientPrivilegeException { return gridGrouper.updateStem(callerIdentity, stem, update); } @Override public GroupDescriptor updateGroup(String callerIdentity, GroupIdentifier group, GroupUpdate update) throws InsufficientPrivilegeException, GroupModifyException, GroupNotFoundException, GridGrouperRuntimeException { return gridGrouper.updateGroup(callerIdentity, group, update); } @Override public void addMember(String callerIdentity, GroupIdentifier group, String subject) throws InsufficientPrivilegeException, MemberAddException, GroupNotFoundException, GridGrouperRuntimeException { gridGrouper.addMember(callerIdentity, group, subject); } @Override public List<MemberDescriptor> getMembers(String callerIdentity, GroupIdentifier group, MemberFilter filter) throws GridGrouperRuntimeException, GroupNotFoundException { return gridGrouper.getMembers(callerIdentity, group, filter); } @Override public boolean isMemberOf(String callerIdentity, GroupIdentifier group, String member, MemberFilter filter) throws GridGrouperRuntimeException, GroupNotFoundException { return gridGrouper.isMemberOf(callerIdentity, group, member, filter); } @Override public List<MembershipDescriptor> getMemberships(String callerIdentity, GroupIdentifier group, MemberFilter filter) throws GridGrouperRuntimeException, GroupNotFoundException { return this.gridGrouper.getMemberships(callerIdentity, group, filter); } @Override public void deleteMember(String callerIdentity, GroupIdentifier group, String member) throws GroupNotFoundException, InsufficientPrivilegeException, MemberDeleteException, GridGrouperRuntimeException { gridGrouper.deleteMember(callerIdentity, group, member); } @Override public GroupDescriptor addCompositeMember(String callerIdentity, GroupCompositeType type, GroupIdentifier composite, GroupIdentifier left, GroupIdentifier right) throws InsufficientPrivilegeException, MemberAddException, GroupNotFoundException, GridGrouperRuntimeException { return gridGrouper.addCompositeMember(callerIdentity, type, composite, left, right); } @Override public GroupDescriptor deleteCompositeMember(String callerIdentity, GroupIdentifier group) throws InsufficientPrivilegeException, GroupNotFoundException, MemberDeleteException, GridGrouperRuntimeException { return gridGrouper.deleteCompositeMember(callerIdentity, group); } @Override public void grantGroupPrivilege(String callerIdentity, GroupIdentifier group, String subject, GroupPrivilegeType privilege) throws GrantPrivilegeException, InsufficientPrivilegeException, GroupNotFoundException, GridGrouperRuntimeException { gridGrouper.grantGroupPrivilege(callerIdentity, group, subject, privilege); } @Override public void revokeGroupPrivilege(String callerIdentity, GroupIdentifier group, String subject, GroupPrivilegeType privilege) throws GroupNotFoundException, RevokePrivilegeException, SchemaException, InsufficientPrivilegeException, GridGrouperRuntimeException { gridGrouper.revokeGroupPrivilege(callerIdentity, group, subject, privilege); } @Override public List<String> getSubjectsWithGroupPrivilege(String callerIdentity, GroupIdentifier group, GroupPrivilegeType privilege) throws GridGrouperRuntimeException, GroupNotFoundException { return gridGrouper.getSubjectsWithGroupPrivilege(callerIdentity, group, privilege); } @Override public List<GroupPrivilege> getGroupPrivileges(String callerIdentity, GroupIdentifier group, String subject) throws GridGrouperRuntimeException, GroupNotFoundException { return gridGrouper.getGroupPrivileges(callerIdentity, group, subject); } @Override public boolean hasGroupPrivilege(String callerIdentity, GroupIdentifier group, String subject, GroupPrivilegeType privilege) throws GridGrouperRuntimeException, GroupNotFoundException { return gridGrouper.hasGroupPrivilege(callerIdentity, group, subject, privilege); } @Override public boolean isMember(String callerIdentity, String member, MembershipExpression expression) throws GridGrouperRuntimeException { return gridGrouper.isMember(callerIdentity, member, expression); } @Override public MemberDescriptor getMember(String callerIdentity, String member) throws GridGrouperRuntimeException, InsufficientPrivilegeException { return gridGrouper.getMember(callerIdentity, member); } @Override public List<GroupDescriptor> getMembersGroups(String callerIdentity, String member, MembershipType type) throws GridGrouperRuntimeException, InsufficientPrivilegeException { return gridGrouper.getMembersGroups(callerIdentity, member, type); } @Override public void addMembershipRequest(String callerIdentity, GroupIdentifier group) throws InsufficientPrivilegeException, MemberAddException, GroupNotFoundException, GridGrouperRuntimeException { gridGrouper.addMembershipRequest(callerIdentity, group); } @Override public MembershipRequestDescriptor updateMembershipRequest(String callerIdentity, GroupIdentifier group, String subject, MembershipRequestUpdate update) throws InsufficientPrivilegeException, MemberAddException, GroupNotFoundException, GridGrouperRuntimeException { return gridGrouper.updateMembershipRequest(callerIdentity, group, subject, update); } @Override public List<MembershipRequestDescriptor> getMembershipRequests(String callerIdentity, GroupIdentifier group, MembershipRequestStatus status) throws GridGrouperRuntimeException, GroupNotFoundException { return gridGrouper.getMembershipRequests(callerIdentity, group, status); } @Override public void enableMembershipRequests(String callerIdentity, GroupIdentifier group) throws GrantPrivilegeException, InsufficientPrivilegeException, GroupNotFoundException, GridGrouperRuntimeException { gridGrouper.enableMembershipRequests(callerIdentity, group); } @Override public void disableMembershipRequests(String callerIdentity, GroupIdentifier group) throws GroupNotFoundException, RevokePrivilegeException, SchemaException, InsufficientPrivilegeException, GridGrouperRuntimeException { gridGrouper.disableMembershipRequests(callerIdentity, group); } @Override public boolean isMembershipRequestEnabled(String callerIdentity, GroupIdentifier group) throws GrantPrivilegeException, InsufficientPrivilegeException, GroupNotFoundException, GridGrouperRuntimeException { return gridGrouper.isMembershipRequestEnabled(callerIdentity, group); } @Override public ResourceHome getResourceHome() { return resourceHome; } private void initialize() throws JAXBException { // What resource properties should we know about? Collection<ResourcePropertyDescriptor<?>> resourcePropertyDescriptors = ResourcePropertyDescriptor .analyzeResourcePropertiesHolder(GridGrouperResourceProperties.class); // Map them by field. Map<String, ResourcePropertyDescriptor<?>> descriptorsByField = ResourcePropertyDescriptor .mapByField(resourcePropertyDescriptors); // Load the static jaxb resource properties. JAXBResourceProperties jaxbResourceProperties = new JAXBResourceProperties( getClass().getClassLoader(), descriptorsByField, jaxbResourcePropertiesMap); // The serviceMetadata property is static. @SuppressWarnings("unchecked") ResourcePropertyDescriptor<ServiceMetadata> serviceMetadataDescriptor = (ResourcePropertyDescriptor<ServiceMetadata>) descriptorsByField .get("serviceMetadata"); if (serviceMetadataDescriptor != null) { @SuppressWarnings("unchecked") ResourceProperty<ServiceMetadata> resourceProperty = (ResourceProperty<ServiceMetadata>) jaxbResourceProperties .getResourceProperties().get(serviceMetadataDescriptor); serviceMetadataResourceProperty = resourceProperty; resource.add(serviceMetadataResourceProperty); } /* * ServiceSecurityMetadata isn't a resource property, but use that * framework to handle it. */ String serviceSecurityMetadataURLString = jaxbResourcePropertiesMap .get("serviceSecurityMetadata"); if (serviceSecurityMetadataURLString != null) { URL url = null; try { url = new URL(serviceSecurityMetadataURLString); } catch (MalformedURLException ignored) { } if (url == null) { url = getClass().getClassLoader().getResource( serviceSecurityMetadataURLString); } if (url != null) { QName serviceSecurityMetadataQName = new QName( getClass().getName(), "serviceSecurityMetadata"); ResourcePropertyDescriptor<ServiceSecurityMetadata> serviceSecurityMetadataDescriptor = new ResourcePropertyDescriptor<ServiceSecurityMetadata>( serviceSecurityMetadataQName, ServiceSecurityMetadata.class, "serviceSecurityMetadata"); serviceSecurityMetadataResourceProperty = JAXBResourcePropertySupport .createJAXBResourceProperty( serviceSecurityMetadataDescriptor, url); } } } }