From 98674d9af88c214e65fa46fb0d8b866fee383feb Mon Sep 17 00:00:00 2001 From: Massimiliano Assante Date: Thu, 2 Oct 2014 17:47:15 +0000 Subject: [PATCH] added method to retrieve hashtags already present in the current VRE, adapted superposed textarea to include suggestions for hashtags, refactored to use the new geenric pickitem widget git-svn-id: https://svn.research-infrastructures.eu/d4science/gcube/trunk/portlets/user/share-updates@100399 82a268e6-3cf1-43bd-a215-b396298e98cf --- .settings/org.eclipse.wst.common.component | 3 + pom.xml | 14 +-- .../client/ShareUpdateService.java | 6 +- .../client/ShareUpdateServiceAsync.java | 6 +- .../client/view/ShareUpdateForm.java | 2 +- .../client/view/SuperPosedTextArea.java | 97 ++++++++++++++----- .../server/MentionNotificationsThread.java | 12 +-- .../server/ShareUpdateServiceImpl.java | 82 ++++++++++------ .../server/TextTransfromUtils.java | 11 ++- .../shared/HashTagAndOccurrence.java | 35 +++++++ .../user/shareupdates/ShareUpdates.gwt.xml | 4 +- src/main/webapp/ShareUpdates.css | 5 + 12 files changed, 198 insertions(+), 79 deletions(-) create mode 100644 src/main/java/org/gcube/portlets/user/shareupdates/shared/HashTagAndOccurrence.java diff --git a/.settings/org.eclipse.wst.common.component b/.settings/org.eclipse.wst.common.component index fb4e233..4540af0 100644 --- a/.settings/org.eclipse.wst.common.component +++ b/.settings/org.eclipse.wst.common.component @@ -4,6 +4,9 @@ + + uses + diff --git a/pom.xml b/pom.xml index 277f0ba..e8e82c5 100644 --- a/pom.xml +++ b/pom.xml @@ -82,15 +82,15 @@ gcube-widgets provided - - - - - + + org.gcube.core + common-scope-maps + compile + org.gcube.portlets.widgets - pickuser-widget - [0.4.0-SNAPSHOT, 1.0.0-SNAPSHOT) + pickitem-widget + [1.0.0-SNAPSHOT, 2.0.0-SNAPSHOT) org.gcube.portlets.widgets diff --git a/src/main/java/org/gcube/portlets/user/shareupdates/client/ShareUpdateService.java b/src/main/java/org/gcube/portlets/user/shareupdates/client/ShareUpdateService.java index 8b9afbf..0baad80 100644 --- a/src/main/java/org/gcube/portlets/user/shareupdates/client/ShareUpdateService.java +++ b/src/main/java/org/gcube/portlets/user/shareupdates/client/ShareUpdateService.java @@ -7,7 +7,7 @@ import org.gcube.portal.databook.shared.FeedType; import org.gcube.portal.databook.shared.PrivacyLevel; import org.gcube.portlets.user.shareupdates.shared.LinkPreview; import org.gcube.portlets.user.shareupdates.shared.UserSettings; -import org.gcube.portlets.widgets.pickuser.shared.PickingUser; +import org.gcube.portlets.widgets.pickitem.shared.ItemBean; import com.google.gwt.user.client.rpc.RemoteService; import com.google.gwt.user.client.rpc.RemoteServiceRelativePath; @@ -26,5 +26,7 @@ public interface ShareUpdateService extends RemoteService { LinkPreview checkUploadedFile(String fileName, String fileabsolutePathOnServer); - ArrayList getPortalUsers(); + ArrayList getPortalUsers(); + + ArrayList getHashtags(); } diff --git a/src/main/java/org/gcube/portlets/user/shareupdates/client/ShareUpdateServiceAsync.java b/src/main/java/org/gcube/portlets/user/shareupdates/client/ShareUpdateServiceAsync.java index cd71d41..4cb3da5 100644 --- a/src/main/java/org/gcube/portlets/user/shareupdates/client/ShareUpdateServiceAsync.java +++ b/src/main/java/org/gcube/portlets/user/shareupdates/client/ShareUpdateServiceAsync.java @@ -5,9 +5,9 @@ import java.util.ArrayList; import org.gcube.portal.databook.shared.ClientFeed; import org.gcube.portal.databook.shared.FeedType; import org.gcube.portal.databook.shared.PrivacyLevel; -import org.gcube.portlets.widgets.pickuser.shared.PickingUser; import org.gcube.portlets.user.shareupdates.shared.LinkPreview; import org.gcube.portlets.user.shareupdates.shared.UserSettings; +import org.gcube.portlets.widgets.pickitem.shared.ItemBean; import com.google.gwt.user.client.rpc.AsyncCallback; @@ -25,8 +25,10 @@ public interface ShareUpdateServiceAsync { void getUserSettings(AsyncCallback callback); - void getPortalUsers(AsyncCallback> callback); + void getPortalUsers(AsyncCallback> callback); void checkUploadedFile(String fileName, String fileabsolutePathOnServer, AsyncCallback callback); + + void getHashtags(AsyncCallback> callback); } diff --git a/src/main/java/org/gcube/portlets/user/shareupdates/client/view/ShareUpdateForm.java b/src/main/java/org/gcube/portlets/user/shareupdates/client/view/ShareUpdateForm.java index c66eb15..fe3165d 100644 --- a/src/main/java/org/gcube/portlets/user/shareupdates/client/view/ShareUpdateForm.java +++ b/src/main/java/org/gcube/portlets/user/shareupdates/client/view/ShareUpdateForm.java @@ -168,7 +168,7 @@ public class ShareUpdateForm extends Composite { } //privacyLevel.addItem("My Connections", PrivacyLevel.CONNECTION.toString()); - if (myUserInfo.isAdmin() && userSettings.isInfrastructure()) + if (myUserInfo.isAdmin()) privacyLevel.addItem("Share with: Everyone", PrivacyLevel.PORTAL.toString()); //change css if deployed in VRE scope if (!userSettings.isInfrastructure()) { diff --git a/src/main/java/org/gcube/portlets/user/shareupdates/client/view/SuperPosedTextArea.java b/src/main/java/org/gcube/portlets/user/shareupdates/client/view/SuperPosedTextArea.java index 9e1a8e1..416557e 100644 --- a/src/main/java/org/gcube/portlets/user/shareupdates/client/view/SuperPosedTextArea.java +++ b/src/main/java/org/gcube/portlets/user/shareupdates/client/view/SuperPosedTextArea.java @@ -5,12 +5,12 @@ package org.gcube.portlets.user.shareupdates.client.view; import java.util.ArrayList; -import org.gcube.portlets.widgets.pickuser.client.dialog.PickUsersDialog; -import org.gcube.portlets.widgets.pickuser.client.events.PickedUserEvent; -import org.gcube.portlets.widgets.pickuser.client.events.PickedUserEventHandler; -import org.gcube.portlets.widgets.pickuser.shared.PickingUser; import org.gcube.portlets.user.shareupdates.client.ShareUpdateService; import org.gcube.portlets.user.shareupdates.client.ShareUpdateServiceAsync; +import org.gcube.portlets.widgets.pickitem.client.dialog.PickItemsDialog; +import org.gcube.portlets.widgets.pickitem.client.events.PickedItemEvent; +import org.gcube.portlets.widgets.pickitem.client.events.PickedItemEventHandler; +import org.gcube.portlets.widgets.pickitem.shared.ItemBean; import com.google.gwt.core.client.GWT; import com.google.gwt.dom.client.Element; @@ -31,11 +31,13 @@ public class SuperPosedTextArea extends TextArea { .create(ShareUpdateService.class); private final HandlerManager eventBus = new HandlerManager(null); - PickUsersDialog pickUserDlg; + PickItemsDialog pickUserDlg; + PickItemsDialog pickHashtagDlg; public final static int ARROW_UP = 38; public final static int ARROW_DOWN = 40; private ArrayList mentionedUsers = new ArrayList(); + private ArrayList hashtags = new ArrayList(); /** * @@ -45,18 +47,27 @@ public class SuperPosedTextArea extends TextArea { sinkEvents(Event.ONKEYUP); sinkEvents(Event.ONCONTEXTMENU); sinkEvents(Event.ONKEYDOWN); - - shareupdateService.getPortalUsers(new AsyncCallback>() { - + //get the users + shareupdateService.getPortalUsers(new AsyncCallback>() { @Override - public void onSuccess(ArrayList users) { - pickUserDlg = new PickUsersDialog(users, eventBus, 525); + public void onSuccess(ArrayList users) { + pickUserDlg = new PickItemsDialog('@', users, eventBus, 525, true); } - @Override public void onFailure(Throwable caught) { } }); + //get the hashtags in this group + shareupdateService.getHashtags(new AsyncCallback>() { + @Override + public void onSuccess(ArrayList hashtags) { + pickHashtagDlg = new PickItemsDialog('#', hashtags, eventBus, 525, false); + } + @Override + public void onFailure(Throwable caught) { + } + }); + DOM.setElementAttribute(getElement(), "id", "postTextArea"); bind(); } @@ -89,7 +100,8 @@ public class SuperPosedTextArea extends TextArea { } case Event.ONKEYUP: { injectInDiv(getText()); - pickUserDlg.onKeyUp(event.getKeyCode(), this.getAbsoluteLeft(), this.getAbsoluteTop()+this.getOffsetHeight(), getText()); + pickUserDlg.onKeyUp(event.getKeyCode(), this.getAbsoluteLeft(), this.getAbsoluteTop()+this.getOffsetHeight(), getText()); + pickHashtagDlg.onKeyUp(event.getKeyCode(), this.getAbsoluteLeft(), this.getAbsoluteTop()+this.getOffsetHeight(), getText()); break; } case Event.ONCONTEXTMENU: { @@ -105,6 +117,14 @@ public class SuperPosedTextArea extends TextArea { return; } } + if (pickHashtagDlg.isShowing()) { + //avoid the arrow up to move the cursor at the beginning of the textbox and the TAB to move around inputs and enter to go newline + if (event.getKeyCode() == ARROW_UP || event.getKeyCode() == KeyCodes.KEY_TAB || event.getKeyCode() == KeyCodes.KEY_ENTER) { + DOM.eventCancelBubble(event, true); + DOM.eventPreventDefault(event); + return; + } + } break; } } @@ -125,10 +145,15 @@ public class SuperPosedTextArea extends TextArea { // replace all the line braks by
, and all the double spaces by the html version   text = textAreaText.replaceAll("(\r\n|\n)","
"); text = text.replaceAll("\\s\\s","  "); - + for (String mentionedUser : mentionedUsers) { text = text.replaceAll(mentionedUser,""+mentionedUser+""); } + +// for (String hashtag : hashtags) { +// text = text.replaceAll(hashtag,""+hashtag+""); +// } + // re-inject the processed text into the div DOM.getElementById("highlighter").setInnerHTML(text); } @@ -137,21 +162,33 @@ public class SuperPosedTextArea extends TextArea { * events binder */ private void bind() { - eventBus.addHandler(PickedUserEvent.TYPE, new PickedUserEventHandler() { + eventBus.addHandler(PickedItemEvent.TYPE, new PickedItemEventHandler() { @Override - public void onSelectedUser(PickedUserEvent event) { + public void onSelectedItem(PickedItemEvent event) { + String triggerChar = event.getTriggerChar(); + String toAdd = event.getSelectedItem().getAlternativeName(); + if (triggerChar.compareTo("#") == 0) { //has to be treated differently becase the # char remain present in the text unlike the @ + toAdd = "#"+toAdd; + hashtags.add(toAdd); + + int tPos = getText().lastIndexOf(triggerChar); + setText(getText().substring(0, tPos) + toAdd); - String toAdd = event.getSelectedUser().getFullName(); - mentionedUsers.add(toAdd); + Element highDiv = DOM.getElementById("highlighter"); + tPos = highDiv.getInnerHTML().lastIndexOf(triggerChar); + highDiv.setInnerHTML(highDiv.getInnerHTML().substring(0, tPos) + toAdd); + } + if (event.getTriggerChar().compareTo("@") == 0) { + mentionedUsers.add(toAdd); + String[] toSplit = getText().split(triggerChar); //get the preceeding part - String[] toSplit = getText().split("@"); //get the preceeding part + setText(toSplit[0]+toAdd); + Element highDiv = DOM.getElementById("highlighter"); - setText(toSplit[0]+toAdd); - Element highDiv = DOM.getElementById("highlighter"); - - String[] htmlToSplit = highDiv.getInnerHTML().split("@"); //get the preceeding part - String highLightedUser = ""+toAdd+""; - highDiv.setInnerHTML(htmlToSplit[0]+highLightedUser); + String[] htmlToSplit = highDiv.getInnerHTML().split(triggerChar); //get the preceeding part + String highLightedUser = ""+toAdd+""; + highDiv.setInnerHTML(htmlToSplit[0]+highLightedUser); + } } }); } @@ -163,6 +200,16 @@ public class SuperPosedTextArea extends TextArea { toReturn.add(mentionedUser); } GWT.log(toReturn.toString()); - return mentionedUsers; + return toReturn; + } + + public ArrayList getHashtags() { + ArrayList toReturn = new ArrayList(); + for (String hashtag : hashtags) { + if (getText().contains(hashtag)) + toReturn.add(hashtag); + } + GWT.log(toReturn.toString()); + return toReturn; } } diff --git a/src/main/java/org/gcube/portlets/user/shareupdates/server/MentionNotificationsThread.java b/src/main/java/org/gcube/portlets/user/shareupdates/server/MentionNotificationsThread.java index 274c800..3892df5 100644 --- a/src/main/java/org/gcube/portlets/user/shareupdates/server/MentionNotificationsThread.java +++ b/src/main/java/org/gcube/portlets/user/shareupdates/server/MentionNotificationsThread.java @@ -3,7 +3,7 @@ package org.gcube.portlets.user.shareupdates.server; import java.util.ArrayList; import org.gcube.applicationsupportlayer.social.NotificationsManager; -import org.gcube.portlets.widgets.pickuser.shared.PickingUser; +import org.gcube.portlets.widgets.pickitem.shared.ItemBean; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -18,10 +18,10 @@ public class MentionNotificationsThread implements Runnable { private String postText; private String postId; private NotificationsManager nm; - private ArrayList users; + private ArrayList users; - public MentionNotificationsThread(String postId, String postText, NotificationsManager nm, ArrayList users) { + public MentionNotificationsThread(String postId, String postText, NotificationsManager nm, ArrayList users) { super(); this.postId = postId; this.postText = postText; @@ -31,9 +31,9 @@ public class MentionNotificationsThread implements Runnable { @Override public void run() { - for (PickingUser userToNotify : users) { - boolean result = nm.notifyUserTag(userToNotify.getUsername(), postId, postText); - _log.trace("Sending Notification for post mention to: " + userToNotify.getUsername() + " result?"+ result); + for (ItemBean userToNotify : users) { + boolean result = nm.notifyUserTag(userToNotify.getName(), postId, postText); + _log.trace("Sending Notification for post mention to: " + userToNotify.getName() + " result?"+ result); } } } diff --git a/src/main/java/org/gcube/portlets/user/shareupdates/server/ShareUpdateServiceImpl.java b/src/main/java/org/gcube/portlets/user/shareupdates/server/ShareUpdateServiceImpl.java index 2250315..4354d0b 100644 --- a/src/main/java/org/gcube/portlets/user/shareupdates/server/ShareUpdateServiceImpl.java +++ b/src/main/java/org/gcube/portlets/user/shareupdates/server/ShareUpdateServiceImpl.java @@ -7,9 +7,13 @@ import java.net.MalformedURLException; import java.net.URL; import java.net.URLConnection; import java.util.ArrayList; +import java.util.Arrays; +import java.util.Collections; +import java.util.Comparator; import java.util.Date; import java.util.HashMap; import java.util.List; +import java.util.Map; import java.util.UUID; import org.apache.commons.validator.routines.UrlValidator; @@ -39,9 +43,10 @@ import org.gcube.portal.databook.shared.ex.FeedIDNotFoundException; import org.gcube.portlets.user.shareupdates.client.ShareUpdateService; import org.gcube.portlets.user.shareupdates.client.view.ShareUpdateForm; import org.gcube.portlets.user.shareupdates.server.opengraph.OpenGraph; +import org.gcube.portlets.user.shareupdates.shared.HashTagAndOccurrence; import org.gcube.portlets.user.shareupdates.shared.LinkPreview; import org.gcube.portlets.user.shareupdates.shared.UserSettings; -import org.gcube.portlets.widgets.pickuser.shared.PickingUser; +import org.gcube.portlets.widgets.pickitem.shared.ItemBean; import org.gcube.vomanagement.usermanagement.GroupManager; import org.gcube.vomanagement.usermanagement.UserManager; import org.gcube.vomanagement.usermanagement.impl.liferay.LiferayGroupManager; @@ -51,6 +56,7 @@ import org.gcube.vomanagement.usermanagement.model.UserModel; import org.slf4j.Logger; import org.slf4j.LoggerFactory; +import com.google.gwt.core.ext.linker.LinkerOrder.Order; import com.google.gwt.user.server.rpc.RemoteServiceServlet; import com.liferay.portal.kernel.exception.PortalException; import com.liferay.portal.kernel.exception.SystemException; @@ -113,7 +119,7 @@ public class ShareUpdateServiceImpl extends RemoteServiceServlet implements Shar } public String getDevelopmentUser() { String user = TEST_USER; -// user = "massimiliano.assante"; + user = "massimiliano.assante"; return user; } /** @@ -139,7 +145,7 @@ public class ShareUpdateServiceImpl extends RemoteServiceServlet implements Shar String escapedFeedText = TextTransfromUtils.escapeHtmlAndTransformUrl(postText); - ArrayList mentionedUsers = null; + ArrayList mentionedUsers = null; if (mentionedUserFullNames != null && ! mentionedUserFullNames.isEmpty()) { mentionedUsers = getSelectedUserIds(mentionedUserFullNames); escapedFeedText = TextTransfromUtils.convertMentionPeopleAnchorHTML(escapedFeedText, mentionedUsers); @@ -452,16 +458,11 @@ public class ShareUpdateServiceImpl extends RemoteServiceServlet implements Shar */ private HashMap getUserVreNames(String username) { HashMap toReturn = new HashMap(); - if (isInfrastructureScope()) { - for (GroupModel vre : getUserVREs(username)) { - toReturn.put(vre.getGroupId(), vre.getGroupName()); - } - } else { for (GroupModel vre : getUserVREs(username)) { if (vre.getGroupName().compareTo(getASLSession().getGroupName())==0) toReturn.put(vre.getGroupId(), vre.getGroupName()); } - } +// } return toReturn; } @@ -557,15 +558,15 @@ public class ShareUpdateServiceImpl extends RemoteServiceServlet implements Shar * * @return the screennames of the addressee (user logins e.g. pino.pini) */ - public ArrayList getSelectedUserIds(ArrayList fullNames) { + public ArrayList getSelectedUserIds(ArrayList fullNames) { if (fullNames == null) - return new ArrayList(); + return new ArrayList(); else { - ArrayList allUsers = getPortalUsers(); - ArrayList toReturn = new ArrayList(); + ArrayList allUsers = getPortalUsers(); + ArrayList toReturn = new ArrayList(); for (String fullName : fullNames) - for (PickingUser puser : allUsers) { - if (puser.getFullName().compareTo(fullName) == 0) { + for (ItemBean puser : allUsers) { + if (puser.getAlternativeName().compareTo(fullName) == 0) { toReturn.add(puser); break; } @@ -575,7 +576,7 @@ public class ShareUpdateServiceImpl extends RemoteServiceServlet implements Shar } @Override - public ArrayList getPortalUsers() { + public ArrayList getPortalUsers() { ASLSession session = getASLSession(); boolean withinPortal = false; if (isWithinPortal() && session.getUsername().compareTo(TEST_USER) != 0) { @@ -584,14 +585,35 @@ public class ShareUpdateServiceImpl extends RemoteServiceServlet implements Shar return getOrganizationUsers(session.getScope(), session.getUsername(), withinPortal); } + @Override + public ArrayList getHashtags() { + ASLSession session = getASLSession(); + String scope = session.getScope(); + _log.error("getting hashtags for " + scope); + Map map = store.getVREHashtagsWithOccurrence(scope); + ArrayList toSort = new ArrayList(); + _log.trace("Got " + map.keySet().size() + " hashtags"); + for (String hashtag : map.keySet()) { + toSort.add(new HashTagAndOccurrence(hashtag, map.get(hashtag))); + } + Collections.sort(toSort, Collections.reverseOrder()); + ArrayList toReturn = new ArrayList<>(); + for (HashTagAndOccurrence wrapper : toSort) { + String hashtag = wrapper.getHashtag().substring(1); + toReturn.add(new ItemBean(hashtag, hashtag, hashtag, null)); + _log.trace(hashtag); + } + return toReturn; + } + /** * * @param session the Asl Session * @param withinPortal true when is on Liferay portal * @return the users belonging to the current organization (scope) */ - public static ArrayList getOrganizationUsers(String scope, String currUser, boolean withinPortal) { - ArrayList portalUsers = new ArrayList(); + public static ArrayList getOrganizationUsers(String scope, String currUser, boolean withinPortal) { + ArrayList portalUsers = new ArrayList(); try { if (withinPortal) { UserManager um = new LiferayUserManager(); @@ -616,21 +638,21 @@ public class ShareUpdateServiceImpl extends RemoteServiceServlet implements Shar String thumbnailURL = ""; com.liferay.portal.model.UserModel lifeUser = UserLocalServiceUtil.getUserByScreenName(OrganizationsUtil.getCompany().getCompanyId(), user.getScreenName()); thumbnailURL = "/image/user_male_portrait?img_id="+lifeUser.getPortraitId(); - portalUsers.add(new PickingUser(user.getUserId(), user.getScreenName(), user.getFullname(), thumbnailURL)); + portalUsers.add(new ItemBean(user.getUserId(), user.getScreenName(), user.getFullname(), thumbnailURL)); } } } else { //test users - portalUsers.add(new PickingUser("12111", "massimiliano.assante", "Test User #1", "")); - portalUsers.add(new PickingUser("14111", "massimiliano.assante", "Test Second User #2", "")); - portalUsers.add(new PickingUser("11511", "massimiliano.assante", "Test Third User", "")); - portalUsers.add(new PickingUser("11611", "massimiliano.assante", "Test Fourth User", "")); - portalUsers.add(new PickingUser("11711", "massimiliano.assante", "Test Fifth User", "")); - portalUsers.add(new PickingUser("11811", "massimiliano.assante", "Test Sixth User", "")); - portalUsers.add(new PickingUser("15811", "massimiliano.assante", "Ninth Testing User", "")); - portalUsers.add(new PickingUser("15811", "massimiliano.assante", "Eighth Testing User", "")); - portalUsers.add(new PickingUser("11211", "giogio.giorgi", "Seventh Test User", "")); - portalUsers.add(new PickingUser("2222", "pino.pinetti", "Tenth Testing User", "")); + portalUsers.add(new ItemBean("12111", "massimiliano.assante", "Test User #1", "")); + portalUsers.add(new ItemBean("14111", "massimiliano.assante", "Test Second User #2", "")); + portalUsers.add(new ItemBean("11511", "massimiliano.assante", "Test Third User", "")); + portalUsers.add(new ItemBean("11611", "massimiliano.assante", "Test Fourth User", "")); + portalUsers.add(new ItemBean("11711", "massimiliano.assante", "Test Fifth User", "")); + portalUsers.add(new ItemBean("11811", "massimiliano.assante", "Test Sixth User", "")); + portalUsers.add(new ItemBean("15811", "massimiliano.assante", "Ninth Testing User", "")); + portalUsers.add(new ItemBean("15811", "massimiliano.assante", "Eighth Testing User", "")); + portalUsers.add(new ItemBean("11211", "giogio.giorgi", "Seventh Test User", "")); + portalUsers.add(new ItemBean("2222", "pino.pinetti", "Tenth Testing User", "")); } } catch (Exception e) { _log.error("Error in server get all contacts ", e); @@ -639,4 +661,6 @@ public class ShareUpdateServiceImpl extends RemoteServiceServlet implements Shar } + + } diff --git a/src/main/java/org/gcube/portlets/user/shareupdates/server/TextTransfromUtils.java b/src/main/java/org/gcube/portlets/user/shareupdates/server/TextTransfromUtils.java index 696f757..8604b0f 100644 --- a/src/main/java/org/gcube/portlets/user/shareupdates/server/TextTransfromUtils.java +++ b/src/main/java/org/gcube/portlets/user/shareupdates/server/TextTransfromUtils.java @@ -18,7 +18,7 @@ import org.gcube.portal.databook.client.GCubeSocialNetworking; import org.gcube.portlets.user.shareupdates.server.metaseeker.MetaSeeker; import org.gcube.portlets.user.shareupdates.server.opengraph.OpenGraph; import org.gcube.portlets.user.shareupdates.shared.LinkPreview; -import org.gcube.portlets.widgets.pickuser.shared.PickingUser; +import org.gcube.portlets.widgets.pickitem.shared.ItemBean; import org.htmlcleaner.HtmlCleaner; import org.htmlcleaner.TagNode; import org.htmlparser.beans.StringBean; @@ -31,6 +31,7 @@ import com.sun.net.ssl.HttpsURLConnection; * @author Massimiliano Assante, ISTI-CNR * */ +@SuppressWarnings({ "deprecation", "restriction" }) public class TextTransfromUtils { /** * @@ -55,13 +56,13 @@ public class TextTransfromUtils { * @param taggedPeople * @return */ - protected static String convertMentionPeopleAnchorHTML(String escapedFeedText, ArrayList taggedPeople) { - for (PickingUser tagged : taggedPeople) { + protected static String convertMentionPeopleAnchorHTML(String escapedFeedText, ArrayList taggedPeople) { + for (ItemBean tagged : taggedPeople) { String taggedHTML = ""+tagged.getFullName()+" "; - escapedFeedText = escapedFeedText.replace(tagged.getFullName(), taggedHTML); + new String(Base64.encodeBase64(tagged.getName().getBytes()))+"\">"+tagged.getAlternativeName()+" "; + escapedFeedText = escapedFeedText.replace(tagged.getAlternativeName(), taggedHTML); } return escapedFeedText; } diff --git a/src/main/java/org/gcube/portlets/user/shareupdates/shared/HashTagAndOccurrence.java b/src/main/java/org/gcube/portlets/user/shareupdates/shared/HashTagAndOccurrence.java new file mode 100644 index 0000000..454abc8 --- /dev/null +++ b/src/main/java/org/gcube/portlets/user/shareupdates/shared/HashTagAndOccurrence.java @@ -0,0 +1,35 @@ +package org.gcube.portlets.user.shareupdates.shared; + +public class HashTagAndOccurrence implements Comparable{ + private String hashtag; + private Integer occurrence; + public HashTagAndOccurrence(String hashtag, Integer occurrence) { + super(); + this.hashtag = hashtag; + this.occurrence = occurrence; + } + public String getHashtag() { + return hashtag; + } + public void setHashtag(String hashtag) { + this.hashtag = hashtag; + } + public Integer getOccurrence() { + return occurrence; + } + public void setOccurrence(Integer occurrence) { + this.occurrence = occurrence; + } + @Override + public String toString() { + return "HashTagAndOccurrence [hashtag=" + hashtag + ", occurrence=" + + occurrence + "]"; + } + @Override + public int compareTo(HashTagAndOccurrence o) { + if (this.occurrence == o.getOccurrence()) return 0; + return (this.occurrence > o.getOccurrence()) ? 1 : -1; + } + + +} diff --git a/src/main/resources/org/gcube/portlets/user/shareupdates/ShareUpdates.gwt.xml b/src/main/resources/org/gcube/portlets/user/shareupdates/ShareUpdates.gwt.xml index 98b717d..1cc635d 100644 --- a/src/main/resources/org/gcube/portlets/user/shareupdates/ShareUpdates.gwt.xml +++ b/src/main/resources/org/gcube/portlets/user/shareupdates/ShareUpdates.gwt.xml @@ -13,12 +13,12 @@ name="net.eliasbalasis.tibcopagebus4gwt.testsubscriber.TestSubscriber" /> - + - + diff --git a/src/main/webapp/ShareUpdates.css b/src/main/webapp/ShareUpdates.css index 25de03f..4fbbea8 100644 --- a/src/main/webapp/ShareUpdates.css +++ b/src/main/webapp/ShareUpdates.css @@ -65,6 +65,11 @@ background-color: #D8DFEA !important; } +.highlightedHashtag { + background-color: #0084B5 !important; +} + + /* DIV trick ends here */ .gwt-Button {