package com.ibm.xsp.extlib.social.teamroom;
import java.util.Map;
import java.util.Vector;
import javax.faces.context.FacesContext;
import lotus.domino.Database;
import lotus.domino.NotesException;
import lotus.domino.View;
import lotus.domino.ViewEntry;
import com.ibm.commons.util.SystemCache;
import com.ibm.xsp.application.ApplicationEx;
import com.ibm.xsp.extlib.social.Person;
import com.ibm.xsp.extlib.social.impl.AbstractPeopleDataProvider;
import com.ibm.xsp.extlib.social.impl.PersonImpl;
import com.ibm.xsp.model.domino.DominoUtils;
/**
* @author Tony McGuckin, IBM
*
* TeamRoom Member Data Provider.
*
* This data provider provides information for a set of members for this
* teamroom database.
*/
public class MemberDataProvider extends AbstractPeopleDataProvider {
public static final String FIELD_INTERNETEMAIL = "internetEmail";
private String NO_IMAGE_URL;
private String IMAGE_URL;
private static final String _viewName = "PeopleLookup";
private static class MemberData extends PersonImpl.Properties {
String thumbnailUrl;
String internetEmail;
}
public MemberDataProvider() {
ApplicationEx app = ApplicationEx.getInstance();
NO_IMAGE_URL = app.getApplicationProperty("thumbnailUrl.noImageUrl", "/thumbNoImage.png");
try {
IMAGE_URL = "/.ibmmodres/";
} catch (Exception e) {
e.printStackTrace();
}
}
public Object getValue(PersonImpl person, Object prop) {
if (prop.equals(Person.FIELD_THUMBNAIL_URL)) {
return getData(person).thumbnailUrl;
}
if (prop.equals(FIELD_INTERNETEMAIL)) {
return getData(person).internetEmail;
}
return null;
}
public Class<?> getType(PersonImpl person, Object prop) {
if (prop.equals(Person.FIELD_THUMBNAIL_URL)) {
return String.class;
}
if (prop.equals(FIELD_INTERNETEMAIL)) {
return String.class;
}
return null;
}
public void readValues(PersonImpl[] persons) {
for (int i = 0; i < persons.length; i++) {
getData(persons[i]);
}
}
private MemberData getData(PersonImpl person) {
String id = person.getId();
MemberData data = (MemberData) getProperties(id, MemberData.class);
if (data == null) {
synchronized (getSyncObject()) {
data = (MemberData) getProperties(id, MemberData.class);
if (null == data) {
data = new MemberData();
try {
View vw = getView();
if (null != vw) {
ViewEntry vwe = vw.getEntryByKey(person.getId());
if (null != vwe) {
Vector<?> cvs = vwe.getColumnValues();
if (!cvs.isEmpty()) {
// get the thumbnameUrl column value...
String thumbnailUrl = (String) cvs.get(5);
if (!thumbnailUrl.equals("")) {
// get the doc unid...
String docUnid = (String) cvs.get(4);
data.thumbnailUrl = IMAGE_URL + docUnid + "/$file/" + thumbnailUrl;
} else {
data.thumbnailUrl = NO_IMAGE_URL;
}
// get the email column value...
String internetEmail = (String) cvs.get(1);
if (!internetEmail.equals("")) {
data.internetEmail = internetEmail;
} else {
// default to the abbreviated name column value...
data.internetEmail = (String) cvs.get(0);
}
}
}else{
data.thumbnailUrl = NO_IMAGE_URL;
}
}
} catch (NotesException e) {
e.printStackTrace();
}
addProperties(id, data);
}
}
}
return data;
}
// People Lookup utilities
protected View getView() throws NotesException {
Database db = DominoUtils.getCurrentDatabase();
View view = db.getView(_viewName);
view.setAutoUpdate(false);
view.refresh();
return view;
}
public void clear(String id) {
Map<?,?> map = FacesContext.getCurrentInstance().getExternalContext().getApplicationMap();
if(null != map && null != (SystemCache)map.get(CACHE_KEY)) {
synchronized(map) {
map.remove(CACHE_KEY);
}
}
}
}