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(