Improve HTML for User profiles
Code review : https://codereview.appspot.com/12914044/
diff --git a/src/com/google/enterprise/adaptor/sharepoint/SharePointUserProfileAdaptor.java b/src/com/google/enterprise/adaptor/sharepoint/SharePointUserProfileAdaptor.java
index 92360d4..620410b 100644
--- a/src/com/google/enterprise/adaptor/sharepoint/SharePointUserProfileAdaptor.java
+++ b/src/com/google/enterprise/adaptor/sharepoint/SharePointUserProfileAdaptor.java
@@ -45,6 +45,7 @@
import java.net.URLEncoder;
import java.nio.charset.Charset;
import java.rmi.RemoteException;
+import java.text.MessageFormat;
import java.util.ArrayList;
import java.util.Collections;
import java.util.HashMap;
@@ -90,7 +91,9 @@
public static final String CONTACT_ELEMENT = "gsa:contact";
public static final String CONTACTS_ROOT_ELEMENT = "gsa:Contacts";
- public static final String GSA_NAMESPACE = "http://www.google.com/schemas/gsa";
+ public static final String GSA_NAMESPACE
+ = "http://www.google.com/schemas/gsa";
+ public static final String PROFILE_PREFERRED_NAME_PROPERTY = "PreferredName";
public static final String GSA_PROPNAME_COLLEAGUES =
"google_social_user_colleagues";
@@ -102,7 +105,8 @@
map.put("SPS-Skills", "google_social_user_skills");
map.put("SPS-PastProjects", "google_social_user_pastprojects");
map.put(PROFILE_ACCOUNTNAME_PROPERTY, "google_social_user_accountname");
- map.put("PreferredName", "google_social_user_preferredname");
+ map.put(PROFILE_PREFERRED_NAME_PROPERTY,
+ "google_social_user_preferredname");
SP_GSA_PROPERTY_MAPPINGS = Collections.unmodifiableMap(map);
}
@@ -436,7 +440,6 @@
}
List<PropertyData> properties = userProfileProperties.getPropertyData();
- StringBuilder sbDocContent = new StringBuilder();
for (PropertyData prop : properties) {
String propertyName = getGSAPropertyMapping(prop.getName());
if (prop.getPrivacy() != Privacy.PUBLIC) {
@@ -447,7 +450,6 @@
List<String> values = readUserProfilePropertyValues(prop);
for (String v : values) {
response.addMetadata(propertyName, v);
- sbDocContent.append(propertyName + "=" + v + "\n");
}
}
if (setAcl) {
@@ -466,12 +468,17 @@
String colleaguesXml = serializeColleagues(colleagues);
if (colleaguesXml != null) {
response.addMetadata(GSA_PROPNAME_COLLEAGUES, colleaguesXml);
- sbDocContent.append(
- GSA_PROPNAME_COLLEAGUES + "=" + colleaguesXml + "\n");
}
}
+ String userProfileTitle = getUserProfilePropertySingleValue(
+ userProfileProperties, PROFILE_PREFERRED_NAME_PROPERTY);
+ if (userProfileTitle == null) {
+ userProfileTitle = userName;
+ }
OutputStream os = response.getOutputStream();
- os.write(sbDocContent.toString().getBytes(encoding));
+ os.write(MessageFormat.format("<html><head><title>{0}</title></head>"
+ + "<body><h1>{0}</h1></body></html>",
+ escapeContent(userProfileTitle)).getBytes(encoding));
}
public String getModifiedDocIds(DocIdPusher pusher, String lastChangeToken)
@@ -551,6 +558,10 @@
SP_GSA_PROPERTY_MAPPINGS.get(spPropertyName) :
normalizeSPPropertyNameForGSA(spPropertyName);
}
+
+ private String escapeContent(String raw) {
+ return raw.replace("&", "&").replace("<", "<");
+ }
/**
* Normalize propertynames so that they become queryable in GSA.
diff --git a/test/com/google/enterprise/adaptor/sharepoint/SharePointUserProfileAdaptorTest.java b/test/com/google/enterprise/adaptor/sharepoint/SharePointUserProfileAdaptorTest.java
index 3f04b9a..ce42836 100644
--- a/test/com/google/enterprise/adaptor/sharepoint/SharePointUserProfileAdaptorTest.java
+++ b/test/com/google/enterprise/adaptor/sharepoint/SharePointUserProfileAdaptorTest.java
@@ -33,6 +33,7 @@
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.net.URLDecoder;
+import java.nio.charset.Charset;
import java.util.ArrayList;
import java.util.Arrays;
@@ -51,6 +52,7 @@
private Config config;
private SharePointUserProfileAdaptor adaptor;
+ private final Charset charset = Charset.forName("UTF-8");
@Before
public void setup() {
@@ -143,6 +145,9 @@
poulateProfileProperties(profile,
SharePointUserProfileAdaptor.PROFILE_ACCOUNTNAME_PROPERTY,
new String[] {"user1"});
+ poulateProfileProperties(profile,
+ SharePointUserProfileAdaptor.PROFILE_PREFERRED_NAME_PROPERTY,
+ new String[] {"First & Last"});
String[] skills =
new String[] {"Java", "SharePoint", "C++", "Design"};
poulateProfileProperties(profile, "SPS-Skills", skills);
@@ -186,6 +191,11 @@
new DocId(SharePointUserProfileAdaptor.SOCIAL_ID_PREFIX + "user1"));
GetContentsResponse response = new GetContentsResponse(baos);
adaptor.getDocContent(request, response);
+
+ String responseString = new String(baos.toByteArray(), charset);
+ final String golden = "<html><head><title>First & Last"
+ + "</title></head><body><h1>First & Last</h1></body></html>";
+ assertEquals(golden, responseString);
assertFalse(response.isNotFound());
assertEquals("user1", response.getMetadata().getOneValue(