/**********************************************************************************
* Copyright 2008-2009 Sakai Foundation
*
* Licensed under the Educational Community 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.opensource.org/licenses/ECL-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.sakaiproject.mailsender.tool.producers.fragments;
import java.util.List;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.sakaiproject.exception.IdUnusedException;
import org.sakaiproject.mailsender.logic.ComposeLogic;
import org.sakaiproject.mailsender.tool.params.UsersViewParameters;
import org.sakaiproject.user.api.User;
import uk.org.ponder.messageutil.TargettedMessage;
import uk.org.ponder.messageutil.TargettedMessageList;
import uk.org.ponder.rsf.components.UIBoundBoolean;
import uk.org.ponder.rsf.components.UIBranchContainer;
import uk.org.ponder.rsf.components.UIContainer;
import uk.org.ponder.rsf.components.UIVerbatim;
import uk.org.ponder.rsf.components.decorators.UIDisabledDecorator;
import uk.org.ponder.rsf.components.decorators.UIFreeAttributeDecorator;
import uk.org.ponder.rsf.components.decorators.UIStyleDecorator;
import uk.org.ponder.rsf.view.ComponentChecker;
import uk.org.ponder.rsf.view.ViewComponentProducer;
import uk.org.ponder.rsf.viewstate.ViewParameters;
import uk.org.ponder.rsf.viewstate.ViewParamsReporter;
public class UsersProducer implements ViewComponentProducer, ViewParamsReporter
{
public static final String VIEW_ID = "users";
private final Log log = LogFactory.getLog(UsersProducer.class);
private ComposeLogic composeLogic;
private TargettedMessageList messages;
public UsersProducer()
{
}
public void setComposeLogic(ComposeLogic composeLogic)
{
this.composeLogic = composeLogic;
}
public void setMessages(TargettedMessageList messages)
{
this.messages = messages;
}
/**
* @see uk.org.ponder.rsf.view.ViewComponentProducer#getViewID()
*/
public String getViewID()
{
return VIEW_ID;
}
/**
* @see uk.org.ponder.rsf.view.ComponentProducer#fillComponents(UIContainer, ViewParameters,
* ComponentChecker)
*/
public void fillComponents(UIContainer tofill, ViewParameters viewparams,
ComponentChecker checker)
{
try
{
// cast the view params
UsersViewParameters viewParams = (UsersViewParameters) viewparams;
// get the members based on type and id
List<User> users = null;
if (viewParams.id != null && viewParams.id.trim().length() != 0)
{
if ("section".equals(viewParams.type) || "group".equals(viewParams.type))
{
users = composeLogic.getUsersByGroup(viewParams.id);
}
else
{
users = composeLogic.getUsersByRole(viewParams.id);
}
}
// get the members that match the requested role
if (users == null || users.size() == 0)
{
messages.addMessage(new TargettedMessage(
"no." + viewParams.type + ".members.found", null,
TargettedMessage.SEVERITY_INFO));
}
else
{
int i = 0;
for (User user : users)
{
// populate the page with the members found
UIBranchContainer cell = UIBranchContainer.make(tofill, "mailsender-userCol:",
viewParams.id + "-" + Integer.toString(i));
String displayName = user.getLastName() + ", " + user.getFirstName() + " ("
+ user.getDisplayId() + ")";
UIBoundBoolean input = UIBoundBoolean.make(cell, "mailsender-user",
"emailBean.newEmail.userIds." + user.getId());
UIVerbatim label = UIVerbatim.make(cell, "mailsender-userLabel",
displayName);
if (user.getEmail() != null && user.getEmail().trim().length() != 0)
{
// add onclick
input.decorate(new UIFreeAttributeDecorator("onclick",
"RcptSelect.toggleIndividual(this.id)"));
}
else
{
// disable the checkbox
input.decorate(new UIDisabledDecorator());
// add a class to the label to show disabled
label.decorate(new UIStyleDecorator("invalid-user"));
}
i++;
}
}
}
catch (IdUnusedException e)
{
log.error(e.getMessage(), e);
messages.addMessage(new TargettedMessage("exception.generic", new String[] { e
.getMessage() }, TargettedMessage.SEVERITY_ERROR));
}
}
/**
* @see uk.org.ponder.rsf.viewstate.ViewParamsReporter#getViewParameters()
*/
public ViewParameters getViewParameters()
{
return new UsersViewParameters();
}
}