Mercurial > hg > LGDataverses
comparison src/main/java/edu/harvard/iq/dataverse/DataverseHeaderFragment.java @ 10:a50cf11e5178
Rewrite LGDataverse completely upgrading to dataverse4.0
| author | Zoe Hong <zhong@mpiwg-berlin.mpg.de> |
|---|---|
| date | Tue, 08 Sep 2015 17:00:21 +0200 |
| parents | |
| children | c2e2d794847f |
comparison
equal
deleted
inserted
replaced
| 9:5926d6419569 | 10:a50cf11e5178 |
|---|---|
| 1 /* | |
| 2 * To change this license header, choose License Headers in Project Properties. | |
| 3 * To change this template file, choose Tools | Templates | |
| 4 * and open the template in the editor. | |
| 5 */ | |
| 6 package edu.harvard.iq.dataverse; | |
| 7 | |
| 8 import edu.harvard.iq.dataverse.authorization.Permission; | |
| 9 import edu.harvard.iq.dataverse.authorization.groups.Group; | |
| 10 import edu.harvard.iq.dataverse.authorization.groups.GroupServiceBean; | |
| 11 import edu.harvard.iq.dataverse.authorization.users.User; | |
| 12 import edu.harvard.iq.dataverse.settings.SettingsServiceBean; | |
| 13 import static edu.harvard.iq.dataverse.util.JsfHelper.JH; | |
| 14 import edu.harvard.iq.dataverse.util.SystemConfig; | |
| 15 import java.io.UnsupportedEncodingException; | |
| 16 import java.net.URLDecoder; | |
| 17 import java.net.URLEncoder; | |
| 18 import java.util.ArrayList; | |
| 19 import java.util.Arrays; | |
| 20 import java.util.List; | |
| 21 import java.util.Map; | |
| 22 import java.util.Set; | |
| 23 import java.util.logging.Level; | |
| 24 import java.util.logging.Logger; | |
| 25 import javax.ejb.EJB; | |
| 26 import javax.faces.context.FacesContext; | |
| 27 import javax.faces.view.ViewScoped; | |
| 28 import javax.inject.Inject; | |
| 29 import javax.inject.Named; | |
| 30 import javax.servlet.http.HttpServletRequest; | |
| 31 import org.apache.commons.lang.StringUtils; | |
| 32 | |
| 33 /** | |
| 34 * | |
| 35 * @author gdurand | |
| 36 */ | |
| 37 @ViewScoped | |
| 38 @Named | |
| 39 public class DataverseHeaderFragment implements java.io.Serializable { | |
| 40 | |
| 41 private static final Logger logger = Logger.getLogger(DataverseHeaderFragment.class.getName()); | |
| 42 | |
| 43 @EJB | |
| 44 DataverseServiceBean dataverseService; | |
| 45 | |
| 46 @EJB | |
| 47 SettingsServiceBean settingsService; | |
| 48 | |
| 49 @EJB | |
| 50 GroupServiceBean groupService; | |
| 51 | |
| 52 @EJB | |
| 53 PermissionServiceBean permissionService; | |
| 54 | |
| 55 @EJB | |
| 56 SystemConfig systemConfig; | |
| 57 | |
| 58 @Inject | |
| 59 DataverseSession dataverseSession; | |
| 60 | |
| 61 @EJB | |
| 62 UserNotificationServiceBean userNotificationService; | |
| 63 | |
| 64 List<Breadcrumb> breadcrumbs = new ArrayList(); | |
| 65 | |
| 66 private Long unreadNotificationCount = null; | |
| 67 | |
| 68 public List<Breadcrumb> getBreadcrumbs() { | |
| 69 return breadcrumbs; | |
| 70 } | |
| 71 | |
| 72 public void setBreadcrumbs(List<Breadcrumb> breadcrumbs) { | |
| 73 this.breadcrumbs = breadcrumbs; | |
| 74 } | |
| 75 | |
| 76 public void initBreadcrumbs(DvObject dvObject) { | |
| 77 if (dvObject.getId() != null) { | |
| 78 initBreadcrumbs(dvObject, null); | |
| 79 } else { | |
| 80 initBreadcrumbs(dvObject.getOwner(), dvObject instanceof Dataverse ? JH.localize("newDataverse") : | |
| 81 dvObject instanceof Dataset ? JH.localize("newDataset") : null ); | |
| 82 } | |
| 83 } | |
| 84 | |
| 85 public Long getUnreadNotificationCount(Long userId){ | |
| 86 | |
| 87 if (userId == null){ | |
| 88 return new Long("0"); | |
| 89 } | |
| 90 | |
| 91 if (this.unreadNotificationCount != null){ | |
| 92 return this.unreadNotificationCount; | |
| 93 } | |
| 94 | |
| 95 try{ | |
| 96 this.unreadNotificationCount = userNotificationService.getUnreadNotificationCountByUser(userId); | |
| 97 }catch (Exception e){ | |
| 98 logger.warning("Error trying to retrieve unread notification count for user." + e.getMessage()); | |
| 99 this.unreadNotificationCount = new Long("0"); | |
| 100 } | |
| 101 return this.unreadNotificationCount; | |
| 102 } | |
| 103 | |
| 104 public void initBreadcrumbs(DvObject dvObject, String subPage) { | |
| 105 breadcrumbs.clear(); | |
| 106 | |
| 107 while (dvObject != null) { | |
| 108 breadcrumbs.add(0, new Breadcrumb(dvObject.getDisplayName(), dvObject)); | |
| 109 dvObject = dvObject.getOwner(); | |
| 110 } | |
| 111 | |
| 112 if (subPage != null) { | |
| 113 breadcrumbs.add(new Breadcrumb(subPage, null)); | |
| 114 } | |
| 115 } | |
| 116 | |
| 117 | |
| 118 | |
| 119 /* Old methods for breadcrumb and trees - currently disabled and deferred | |
| 120 | |
| 121 public List<Dataverse> getDataverses(Dataverse dataverse) { | |
| 122 List dataverses = new ArrayList(); | |
| 123 if (dataverse != null) { | |
| 124 dataverses.addAll(dataverse.getOwners()); | |
| 125 dataverses.add(dataverse); | |
| 126 } else { | |
| 127 dataverses.add(dataverseService.findRootDataverse()); | |
| 128 } | |
| 129 return dataverses; | |
| 130 } | |
| 131 | |
| 132 // @todo right now we just check on if published or if you are the creator; need full permission support | |
| 133 public boolean hasVisibleChildren(Dataverse dataverse) { | |
| 134 for (Dataverse dv : dataverseService.findByOwnerId(dataverse.getId())) { | |
| 135 if (dv.isReleased() || dv.getCreator().equals(dataverseSession.getUser())) { | |
| 136 return true; | |
| 137 } | |
| 138 } | |
| 139 | |
| 140 return false; | |
| 141 | |
| 142 } | |
| 143 | |
| 144 public TreeNode getDataverseTree(Dataverse dataverse) { | |
| 145 if (dataverse == null) { // the primefaces component seems to call this with dataverse == null for some reason | |
| 146 return null; | |
| 147 } | |
| 148 return getDataverseNode(dataverse, null, true); | |
| 149 } | |
| 150 | |
| 151 private TreeNode getDataverseNode(Dataverse dataverse, TreeNode root, boolean expand) { | |
| 152 // @todo right now we just check on if published or if you are the creator; need full permission support | |
| 153 if (dataverse.isReleased() || dataverse.getCreator().equals(dataverseSession.getUser())) { | |
| 154 TreeNode dataverseNode = new DefaultTreeNode(dataverse, root); | |
| 155 dataverseNode.setExpanded(expand); | |
| 156 List<Dataverse> childDataversesOfCurrentDataverse = dataverseService.findByOwnerId(dataverse.getId()); | |
| 157 for (Dataverse child : childDataversesOfCurrentDataverse) { | |
| 158 getDataverseNode(child, dataverseNode, false); | |
| 159 } | |
| 160 return dataverseNode; | |
| 161 } | |
| 162 return null; | |
| 163 } | |
| 164 */ | |
| 165 public String logout() { | |
| 166 dataverseSession.setUser(null); | |
| 167 | |
| 168 String redirectPage = getPageFromContext(); | |
| 169 try { | |
| 170 redirectPage = URLDecoder.decode(redirectPage, "UTF-8"); | |
| 171 } catch (UnsupportedEncodingException ex) { | |
| 172 Logger.getLogger(LoginPage.class.getName()).log(Level.SEVERE, null, ex); | |
| 173 redirectPage = "dataverse.xhtml&alias=" + dataverseService.findRootDataverse().getAlias(); | |
| 174 } | |
| 175 | |
| 176 if (StringUtils.isEmpty(redirectPage)) { | |
| 177 redirectPage = "dataverse.xhtml&alias=" + dataverseService.findRootDataverse().getAlias(); | |
| 178 } | |
| 179 | |
| 180 logger.log(Level.INFO, "Sending user to = " + redirectPage); | |
| 181 return redirectPage + (redirectPage.indexOf("?") == -1 ? "?" : "&") + "faces-redirect=true"; | |
| 182 } | |
| 183 | |
| 184 public boolean isSignupAllowed() { | |
| 185 boolean safeDefaultIfKeyNotFound = false; | |
| 186 return settingsService.isTrueForKey(SettingsServiceBean.Key.AllowSignUp, safeDefaultIfKeyNotFound); | |
| 187 } | |
| 188 | |
| 189 public String getSignupUrl() { | |
| 190 String nonNullDefaultIfKeyNotFound = ""; | |
| 191 String signUpUrl = settingsService.getValueForKey(SettingsServiceBean.Key.SignUpUrl, nonNullDefaultIfKeyNotFound); | |
| 192 return signUpUrl; | |
| 193 } | |
| 194 | |
| 195 public String getLoginRedirectPage() { | |
| 196 return getRedirectPage(); | |
| 197 } | |
| 198 | |
| 199 // @todo consider creating a base bean, for now just make this static | |
| 200 public static String getRedirectPage() { | |
| 201 | |
| 202 String redirectPage = getPageFromContext(); | |
| 203 if (!StringUtils.isEmpty(redirectPage)) { | |
| 204 return "?redirectPage=" + redirectPage; | |
| 205 } | |
| 206 return ""; | |
| 207 } | |
| 208 | |
| 209 private static String getPageFromContext() { | |
| 210 try { | |
| 211 HttpServletRequest req = (HttpServletRequest) FacesContext.getCurrentInstance().getExternalContext().getRequest(); | |
| 212 StringBuilder redirectPage = new StringBuilder(); | |
| 213 redirectPage.append(req.getServletPath()); | |
| 214 | |
| 215 // to regenerate the query string, we need to use the parameter map; however this can contain internal POST parameters | |
| 216 // that we don't want, so we filter through a list of paramters we do allow | |
| 217 // @todo verify what needs to be in this list of available parameters (for example do we want to repeat searches when you login? | |
| 218 List acceptableParameters = new ArrayList(); | |
| 219 acceptableParameters.addAll(Arrays.asList("id", "alias", "version", "q", "ownerId", "persistentId", "versionId")); | |
| 220 | |
| 221 if (req.getParameterMap() != null) { | |
| 222 StringBuilder queryString = new StringBuilder(); | |
| 223 for (Map.Entry<String, String[]> entry : ((Map<String, String[]>) req.getParameterMap()).entrySet()) { | |
| 224 String name = entry.getKey(); | |
| 225 if (acceptableParameters.contains(name)) { | |
| 226 String value = entry.getValue()[0]; | |
| 227 queryString.append(queryString.length() == 0 ? "?" : "&").append(name).append("=").append(value); | |
| 228 } | |
| 229 } | |
| 230 redirectPage.append(queryString); | |
| 231 } | |
| 232 | |
| 233 return URLEncoder.encode(redirectPage.toString(), "UTF-8"); | |
| 234 } catch (UnsupportedEncodingException ex) { | |
| 235 Logger.getLogger(DataverseHeaderFragment.class.getName()).log(Level.SEVERE, null, ex); | |
| 236 } | |
| 237 return ""; | |
| 238 } | |
| 239 | |
| 240 // inner class used for breadcrumbs | |
| 241 public static class Breadcrumb { | |
| 242 | |
| 243 private final String breadcrumbText; | |
| 244 private final DvObject dvObject; | |
| 245 | |
| 246 public Breadcrumb(String breadcrumbText, DvObject dvObject) { | |
| 247 this.breadcrumbText = breadcrumbText; | |
| 248 this.dvObject = dvObject; | |
| 249 | |
| 250 } | |
| 251 | |
| 252 public String getBreadcrumbText() { | |
| 253 return breadcrumbText; | |
| 254 } | |
| 255 | |
| 256 public DvObject getDvObject() { | |
| 257 return dvObject; | |
| 258 } | |
| 259 | |
| 260 } | |
| 261 | |
| 262 public boolean isDebugShibboleth() { | |
| 263 return systemConfig.isDebugEnabled(); | |
| 264 } | |
| 265 | |
| 266 public List<String> getGroups(User user) { | |
| 267 List<String> groups = new ArrayList<>(); | |
| 268 Set<Group> groupsForUser = groupService.groupsFor(user, null); | |
| 269 for (Group group : groupsForUser) { | |
| 270 groups.add(group.getDisplayName() + " (" + group.getIdentifier() + ")"); | |
| 271 } | |
| 272 return groups; | |
| 273 } | |
| 274 | |
| 275 public List<String> getPermissions(User user, Dataverse dataverse) { | |
| 276 List<String> permissions = new ArrayList<>(); | |
| 277 for (Permission permission : permissionService.permissionsFor(user, dataverse)) { | |
| 278 permissions.add(permission.name()); | |
| 279 } | |
| 280 return permissions; | |
| 281 } | |
| 282 } |
