All Downloads are FREE. Search and download functionalities are using the official Maven repository.

org.jasig.schedassist.impl.StaticRelationshipDaoImpl Maven / Gradle / Ivy

There is a newer version: 1.1.4
Show newest version
/**
 * Licensed to Jasig under one or more contributor license
 * agreements. See the NOTICE file distributed with this work
 * for additional information regarding copyright ownership.
 * Jasig licenses this file to you under the Apache License,
 * Version 2.0 (the "License"); you may not use this file
 * except in compliance with the License. You may obtain a
 * copy of the License at:
 *
 * http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing,
 * software distributed under the License is distributed on
 * an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
 * KIND, either express or implied. See the License for the
 * specific language governing permissions and limitations
 * under the License.
 */

package org.jasig.schedassist.impl;

import java.util.ArrayList;
import java.util.Collections;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.jasig.schedassist.ICalendarAccountDao;
import org.jasig.schedassist.RelationshipDao;
import org.jasig.schedassist.impl.owner.OwnerDao;
import org.jasig.schedassist.impl.visitor.NotAVisitorException;
import org.jasig.schedassist.impl.visitor.VisitorDao;
import org.jasig.schedassist.model.ICalendarAccount;
import org.jasig.schedassist.model.IScheduleOwner;
import org.jasig.schedassist.model.IScheduleVisitor;
import org.jasig.schedassist.model.Relationship;

/**
 * Configurable implementation of {@link RelationshipDao}.
 * A {@link ICalendarAccountDao} and an {@link OwnerDao} are required.
 * 
 * The next key dependency is a {@link Map} of 
 * {@link String}s that map visitorAttributeValue to a {@link List} of ownerAttributeValue.
 * By default, the names of the attributes that these correspond to are
 * "uid"->"uid". 
 * These attributeNames can be modified.
 *  
 * @author Nicholas Blair, [email protected]
 * @version $Id: StaticRelationshipDaoImpl.java 2007 2010-04-26 15:16:30Z npblair $
 */
public class StaticRelationshipDaoImpl implements RelationshipDao {

	private Log LOG = LogFactory.getLog(this.getClass());

	private ICalendarAccountDao calendarAccountDao;
	private OwnerDao ownerDao;
	private VisitorDao visitorDao;
	private String ownerAttributeName = "uid";
	private String visitorAttributeName = "uid";
	private final Map> visitorOwnerAttributePairings;
	private final Map> mapReverse;

	private String relationshipDescription;

	/**
	 * 
	 * @param visitorOwnerAttributePairings
	 */
	public StaticRelationshipDaoImpl(final Map> visitorOwnerAttributePairings) {
		this.visitorOwnerAttributePairings = Collections.unmodifiableMap(visitorOwnerAttributePairings);
		mapReverse = new HashMap>();
		for(String visitorUsername : this.visitorOwnerAttributePairings.keySet()) {
			List ownerUsernames = this.visitorOwnerAttributePairings.get(visitorUsername);		
			for(String ownerUsername : ownerUsernames) {
				List visitorList = mapReverse.get(ownerUsername);
				if(null == visitorList) {
					visitorList = new ArrayList();
					visitorList.add(visitorUsername);

				} else {
					if(!visitorList.contains(visitorUsername)) {
						visitorList.add(visitorUsername);
					}
				}
				mapReverse.put(ownerUsername, visitorList);
			}
		}
	}
	/**
	 * @return the calendarAccountDao
	 */
	public ICalendarAccountDao getCalendarAccountDao() {
		return calendarAccountDao;
	}
	/**
	 * @param calendarAccountDao the calendarAccountDao to set
	 */
	public void setCalendarAccountDao(ICalendarAccountDao calendarAccountDao) {
		this.calendarAccountDao = calendarAccountDao;
	}
	/**
	 * @param ownerDao the ownerDao to set
	 */
	public void setOwnerDao(OwnerDao ownerDao) {
		this.ownerDao = ownerDao;
	}
	/**
	 * @param visitorDao the visitorDao to set
	 */
	public void setVisitorDao(VisitorDao visitorDao) {
		this.visitorDao = visitorDao;
	}
	/**
	 * @param ownerAttributeName the ownerAttributeName to set
	 */
	public void setOwnerAttributeName(String ownerAttributeName) {
		this.ownerAttributeName = ownerAttributeName;
	}
	/**
	 * @param visitorAttributeName the visitorAttributeName to set
	 */
	public void setVisitorAttributeName(String visitorAttributeName) {
		this.visitorAttributeName = visitorAttributeName;
	}
	/**
	 * @param relationshipDescription the relationshipDescription to set
	 */
	public void setRelationshipDescription(String relationshipDescription) {
		this.relationshipDescription = relationshipDescription;
	}

	/*
	 * (non-Javadoc)
	 * @see org.jasig.schedassist.RelationshipDao#forOwner(org.jasig.schedassist.model.IScheduleOwner)
	 */
	@Override
	public List forOwner(IScheduleOwner owner) {
		ICalendarAccount ownerCalendarAccount = owner.getCalendarAccount();
		String ownerAttributeValue = ownerCalendarAccount.getAttributeValue(this.ownerAttributeName);

		List assignedVisitorValues = this.mapReverse.get(ownerAttributeValue);
		if(null == assignedVisitorValues || assignedVisitorValues.size() == 0) {
			return Collections.emptyList();
		}

		List results = new ArrayList();
		for(String assignedVisitorValue : assignedVisitorValues ) {
			ICalendarAccount visitorCalendarUser = calendarAccountDao.getCalendarAccount(ownerAttributeName, assignedVisitorValue);
			if(null == visitorCalendarUser) {
				LOG.debug("no calendar account found for " + ownerAttributeName + "=" + assignedVisitorValue);
				continue;
			}
			try {
				IScheduleVisitor visitor = visitorDao.toVisitor(visitorCalendarUser);
				if(null != owner) {
					Relationship relationship = new Relationship();
					relationship.setOwner(owner);
					relationship.setVisitor(visitor);
					relationship.setDescription(relationshipDescription);

					LOG.info("found owner " + owner + " for visitor " + visitor);
					results.add(relationship);
				} 
			} catch (NotAVisitorException e) {
				LOG.debug(assignedVisitorValue + " not registered as owner");
			} 
		}

		return results;
	}

	/*
	 * (non-Javadoc)
	 * @see org.jasig.schedassist.RelationshipDao#forVisitor(org.jasig.schedassist.model.IScheduleVisitor)
	 */
	@Override
	public List forVisitor(IScheduleVisitor visitor) {
		String vistorAttributeValue = visitor.getCalendarAccount().getAttributeValue(this.visitorAttributeName);

		List assignedOwnerValues = this.visitorOwnerAttributePairings.get(vistorAttributeValue);
		if(null == assignedOwnerValues || assignedOwnerValues.size() == 0) {
			return Collections.emptyList();
		}

		List results = new ArrayList();
		for(String assignedOwnerValue : assignedOwnerValues ) {

			ICalendarAccount ownerCalendarUser = calendarAccountDao.getCalendarAccount(ownerAttributeName, assignedOwnerValue);
			if(null == ownerCalendarUser) {
				LOG.debug("no calendar account found for " + ownerAttributeName + "=" + assignedOwnerValue);
				continue;
			}

			IScheduleOwner owner = ownerDao.locateOwner(ownerCalendarUser);
			if(null != owner) {
				Relationship relationship = new Relationship();
				relationship.setOwner(owner);
				relationship.setVisitor(visitor);
				relationship.setDescription(relationshipDescription);

				LOG.info("found owner " + owner + " for visitor " + visitor);
				results.add(relationship);
			} else {
				LOG.debug(assignedOwnerValue + " not registered as owner");
			}
		}

		return results;
	}

}




© 2015 - 2024 Weber Informatics LLC | Privacy Policy