Mercurial > hg > LGDataverses
comparison src/main/java/edu/harvard/iq/dataverse/DataversePage.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 |
comparison
equal
deleted
inserted
replaced
| 9:5926d6419569 | 10:a50cf11e5178 |
|---|---|
| 1 package edu.harvard.iq.dataverse; | |
| 2 | |
| 3 import edu.harvard.iq.dataverse.UserNotification.Type; | |
| 4 import edu.harvard.iq.dataverse.authorization.Permission; | |
| 5 import edu.harvard.iq.dataverse.authorization.users.AuthenticatedUser; | |
| 6 import edu.harvard.iq.dataverse.authorization.users.User; | |
| 7 import edu.harvard.iq.dataverse.engine.command.Command; | |
| 8 import edu.harvard.iq.dataverse.engine.command.exception.CommandException; | |
| 9 import edu.harvard.iq.dataverse.engine.command.impl.CreateDataverseCommand; | |
| 10 import edu.harvard.iq.dataverse.engine.command.impl.CreateSavedSearchCommand; | |
| 11 import edu.harvard.iq.dataverse.engine.command.impl.DeleteDataverseCommand; | |
| 12 import edu.harvard.iq.dataverse.engine.command.impl.LinkDataverseCommand; | |
| 13 import edu.harvard.iq.dataverse.engine.command.impl.PublishDataverseCommand; | |
| 14 import edu.harvard.iq.dataverse.engine.command.impl.UpdateDataverseCommand; | |
| 15 import edu.harvard.iq.dataverse.search.SearchException; | |
| 16 import edu.harvard.iq.dataverse.search.SearchFields; | |
| 17 import edu.harvard.iq.dataverse.search.savedsearch.SavedSearch; | |
| 18 import edu.harvard.iq.dataverse.search.savedsearch.SavedSearchFilterQuery; | |
| 19 import edu.harvard.iq.dataverse.search.savedsearch.SavedSearchServiceBean; | |
| 20 import edu.harvard.iq.dataverse.util.BundleUtil; | |
| 21 import edu.harvard.iq.dataverse.util.JsfHelper; | |
| 22 import static edu.harvard.iq.dataverse.util.JsfHelper.JH; | |
| 23 import edu.harvard.iq.dataverse.util.SystemConfig; | |
| 24 import java.util.List; | |
| 25 import javax.ejb.EJB; | |
| 26 import javax.faces.application.FacesMessage; | |
| 27 import javax.faces.context.FacesContext; | |
| 28 import javax.faces.event.ActionEvent; | |
| 29 import javax.faces.view.ViewScoped; | |
| 30 import javax.inject.Inject; | |
| 31 import javax.inject.Named; | |
| 32 import java.util.ArrayList; | |
| 33 import java.util.Arrays; | |
| 34 import java.util.logging.Level; | |
| 35 import java.util.logging.Logger; | |
| 36 import javax.faces.component.UIComponent; | |
| 37 import javax.faces.component.UIInput; | |
| 38 import org.primefaces.model.DualListModel; | |
| 39 import javax.ejb.EJBException; | |
| 40 import javax.faces.event.ValueChangeEvent; | |
| 41 import javax.faces.model.SelectItem; | |
| 42 import org.apache.commons.lang.StringUtils; | |
| 43 import org.primefaces.event.TransferEvent; | |
| 44 | |
| 45 /** | |
| 46 * | |
| 47 * @author gdurand | |
| 48 */ | |
| 49 @ViewScoped | |
| 50 @Named("DataversePage") | |
| 51 public class DataversePage implements java.io.Serializable { | |
| 52 | |
| 53 private static final Logger logger = Logger.getLogger(DataversePage.class.getCanonicalName()); | |
| 54 | |
| 55 public enum EditMode { | |
| 56 | |
| 57 CREATE, INFO, FEATURED | |
| 58 } | |
| 59 | |
| 60 public enum LinkMode { | |
| 61 | |
| 62 SAVEDSEARCH, LINKDATAVERSE | |
| 63 } | |
| 64 | |
| 65 @EJB | |
| 66 DataverseServiceBean dataverseService; | |
| 67 @EJB | |
| 68 DatasetServiceBean datasetService; | |
| 69 @Inject | |
| 70 DataverseSession session; | |
| 71 @EJB | |
| 72 EjbDataverseEngine commandEngine; | |
| 73 @EJB | |
| 74 SearchServiceBean searchService; | |
| 75 @EJB | |
| 76 DatasetFieldServiceBean datasetFieldService; | |
| 77 @EJB | |
| 78 DataverseFacetServiceBean dataverseFacetService; | |
| 79 @EJB | |
| 80 UserNotificationServiceBean userNotificationService; | |
| 81 @EJB | |
| 82 FeaturedDataverseServiceBean featuredDataverseService; | |
| 83 @EJB | |
| 84 DataverseFieldTypeInputLevelServiceBean dataverseFieldTypeInputLevelService; | |
| 85 @EJB | |
| 86 PermissionServiceBean permissionService; | |
| 87 @EJB | |
| 88 ControlledVocabularyValueServiceBean controlledVocabularyValueServiceBean; | |
| 89 @EJB | |
| 90 SavedSearchServiceBean savedSearchService; | |
| 91 @EJB | |
| 92 SystemConfig systemConfig; | |
| 93 @Inject | |
| 94 SearchIncludeFragment searchIncludeFragment; | |
| 95 | |
| 96 @EJB | |
| 97 DataverseLinkingServiceBean linkingService; | |
| 98 | |
| 99 private Dataverse dataverse = new Dataverse(); | |
| 100 private EditMode editMode; | |
| 101 private LinkMode linkMode; | |
| 102 | |
| 103 private Long ownerId; | |
| 104 private DualListModel<DatasetFieldType> facets = new DualListModel<>(new ArrayList<DatasetFieldType>(), new ArrayList<DatasetFieldType>()); | |
| 105 private DualListModel<Dataverse> featuredDataverses = new DualListModel<>(new ArrayList<Dataverse>(), new ArrayList<Dataverse>()); | |
| 106 private List<Dataverse> dataversesForLinking; | |
| 107 private Long linkingDataverseId; | |
| 108 private List<SelectItem> linkingDVSelectItems; | |
| 109 private Dataverse linkingDataverse; | |
| 110 private List<ControlledVocabularyValue> selectedSubjects; | |
| 111 | |
| 112 public List<ControlledVocabularyValue> getSelectedSubjects() { | |
| 113 return selectedSubjects; | |
| 114 } | |
| 115 | |
| 116 public void setSelectedSubjects(List<ControlledVocabularyValue> selectedSubjects) { | |
| 117 this.selectedSubjects = selectedSubjects; | |
| 118 } | |
| 119 | |
| 120 public Dataverse getLinkingDataverse() { | |
| 121 return linkingDataverse; | |
| 122 } | |
| 123 | |
| 124 public void setLinkingDataverse(Dataverse linkingDataverse) { | |
| 125 this.linkingDataverse = linkingDataverse; | |
| 126 } | |
| 127 | |
| 128 public List<SelectItem> getLinkingDVSelectItems() { | |
| 129 return linkingDVSelectItems; | |
| 130 } | |
| 131 | |
| 132 public void setLinkingDVSelectItems(List<SelectItem> linkingDVSelectItems) { | |
| 133 this.linkingDVSelectItems = linkingDVSelectItems; | |
| 134 } | |
| 135 | |
| 136 public Long getLinkingDataverseId() { | |
| 137 return linkingDataverseId; | |
| 138 } | |
| 139 | |
| 140 public void setLinkingDataverseId(Long linkingDataverseId) { | |
| 141 this.linkingDataverseId = linkingDataverseId; | |
| 142 } | |
| 143 | |
| 144 public List<Dataverse> getDataversesForLinking() { | |
| 145 return dataversesForLinking; | |
| 146 } | |
| 147 | |
| 148 public void setDataversesForLinking(List<Dataverse> dataversesForLinking) { | |
| 149 | |
| 150 this.dataversesForLinking = dataversesForLinking; | |
| 151 } | |
| 152 | |
| 153 private List<ControlledVocabularyValue> dataverseSubjectControlledVocabularyValues; | |
| 154 | |
| 155 public List<ControlledVocabularyValue> getDataverseSubjectControlledVocabularyValues() { | |
| 156 return dataverseSubjectControlledVocabularyValues; | |
| 157 } | |
| 158 | |
| 159 public void setDataverseSubjectControlledVocabularyValues(List<ControlledVocabularyValue> dataverseSubjectControlledVocabularyValues) { | |
| 160 this.dataverseSubjectControlledVocabularyValues = dataverseSubjectControlledVocabularyValues; | |
| 161 } | |
| 162 | |
| 163 private void updateDataverseSubjectSelectItems() { | |
| 164 DatasetFieldType subjectDatasetField = datasetFieldService.findByName(DatasetFieldConstant.subject); | |
| 165 setDataverseSubjectControlledVocabularyValues(controlledVocabularyValueServiceBean.findByDatasetFieldTypeId(subjectDatasetField.getId())); | |
| 166 | |
| 167 } | |
| 168 | |
| 169 | |
| 170 public LinkMode getLinkMode() { | |
| 171 return linkMode; | |
| 172 } | |
| 173 | |
| 174 public void setLinkMode(LinkMode linkMode) { | |
| 175 this.linkMode = linkMode; | |
| 176 } | |
| 177 | |
| 178 | |
| 179 public void setupLinkingPopup (String popupSetting){ | |
| 180 if (popupSetting.equals("link")){ | |
| 181 setLinkMode(LinkMode.LINKDATAVERSE); | |
| 182 } else { | |
| 183 setLinkMode(LinkMode.SAVEDSEARCH); | |
| 184 } | |
| 185 updateLinkableDataverses(); | |
| 186 } | |
| 187 | |
| 188 public void updateLinkableDataverses() { | |
| 189 dataversesForLinking = new ArrayList(); | |
| 190 linkingDVSelectItems = new ArrayList(); | |
| 191 | |
| 192 //Since only a super user function add all dvs | |
| 193 dataversesForLinking = dataverseService.findAll();// permissionService.getDataversesUserHasPermissionOn(session.getUser(), Permission.PublishDataverse); | |
| 194 | |
| 195 //for linking - make sure the link hasn't occurred and its not int the tree | |
| 196 if (this.linkMode.equals(LinkMode.LINKDATAVERSE)) { | |
| 197 | |
| 198 dataversesForLinking.remove(dataverseService.findRootDataverse()); | |
| 199 dataversesForLinking.remove(dataverse); | |
| 200 | |
| 201 if (dataverse.getOwner() != null ){ | |
| 202 Dataverse testDV = dataverse; | |
| 203 while(testDV.getOwner() != null){ | |
| 204 dataversesForLinking.remove(testDV.getOwner()); | |
| 205 testDV = testDV.getOwner(); | |
| 206 } | |
| 207 } | |
| 208 | |
| 209 for (Dataverse removeLinked : linkingService.findLinkingDataverses(dataverse.getId())) { | |
| 210 dataversesForLinking.remove(removeLinked); | |
| 211 } | |
| 212 } else{ | |
| 213 //for saved search add all | |
| 214 | |
| 215 } | |
| 216 | |
| 217 for (Dataverse selectDV : dataversesForLinking) { | |
| 218 linkingDVSelectItems.add(new SelectItem(selectDV.getId(), selectDV.getDisplayName())); | |
| 219 } | |
| 220 | |
| 221 if (!dataversesForLinking.isEmpty() && dataversesForLinking.size() == 1 && dataversesForLinking.get(0) != null) { | |
| 222 linkingDataverse = dataversesForLinking.get(0); | |
| 223 linkingDataverseId = linkingDataverse.getId(); | |
| 224 } | |
| 225 } | |
| 226 | |
| 227 public void updateSelectedLinkingDV(ValueChangeEvent event) { | |
| 228 linkingDataverseId = (Long) event.getNewValue(); | |
| 229 } | |
| 230 // private TreeNode treeWidgetRootNode = new DefaultTreeNode("Root", null); | |
| 231 | |
| 232 public Dataverse getDataverse() { | |
| 233 return dataverse; | |
| 234 } | |
| 235 | |
| 236 public void setDataverse(Dataverse dataverse) { | |
| 237 this.dataverse = dataverse; | |
| 238 } | |
| 239 | |
| 240 public EditMode getEditMode() { | |
| 241 return editMode; | |
| 242 } | |
| 243 | |
| 244 public void setEditMode(EditMode editMode) { | |
| 245 this.editMode = editMode; | |
| 246 } | |
| 247 | |
| 248 public Long getOwnerId() { | |
| 249 return ownerId; | |
| 250 } | |
| 251 | |
| 252 public void setOwnerId(Long ownerId) { | |
| 253 this.ownerId = ownerId; | |
| 254 } | |
| 255 | |
| 256 // public TreeNode getTreeWidgetRootNode() { | |
| 257 // return treeWidgetRootNode; | |
| 258 // } | |
| 259 // | |
| 260 // public void setTreeWidgetRootNode(TreeNode treeWidgetRootNode) { | |
| 261 // this.treeWidgetRootNode = treeWidgetRootNode; | |
| 262 // } | |
| 263 public String init() { | |
| 264 if (dataverse.getAlias() != null || dataverse.getId() != null || ownerId == null) {// view mode for a dataverse | |
| 265 if (dataverse.getAlias() != null) { | |
| 266 dataverse = dataverseService.findByAlias(dataverse.getAlias()); | |
| 267 } else if (dataverse.getId() != null) { | |
| 268 dataverse = dataverseService.find(dataverse.getId()); | |
| 269 } else { | |
| 270 try { | |
| 271 dataverse = dataverseService.findRootDataverse(); | |
| 272 } catch (EJBException e) { | |
| 273 // @todo handle case with no root dataverse (a fresh installation) with message about using API to create the root | |
| 274 dataverse = null; | |
| 275 } | |
| 276 } | |
| 277 | |
| 278 // check if dv exists and user has permission | |
| 279 if (dataverse == null) { | |
| 280 return "/404.xhtml"; | |
| 281 } | |
| 282 if (!dataverse.isReleased() && !permissionService.on(dataverse).has(Permission.ViewUnpublishedDataverse)) { | |
| 283 return "/loginpage.xhtml" + DataverseHeaderFragment.getRedirectPage(); | |
| 284 } | |
| 285 | |
| 286 ownerId = dataverse.getOwner() != null ? dataverse.getOwner().getId() : null; | |
| 287 } else { // ownerId != null; create mode for a new child dataverse | |
| 288 editMode = EditMode.INFO; | |
| 289 dataverse.setOwner(dataverseService.find(ownerId)); | |
| 290 if (dataverse.getOwner() == null) { | |
| 291 return "/404.xhtml"; | |
| 292 } else if (!permissionService.on(dataverse.getOwner()).has(Permission.AddDataverse)) { | |
| 293 return "/loginpage.xhtml" + DataverseHeaderFragment.getRedirectPage(); | |
| 294 } | |
| 295 | |
| 296 // set defaults - contact e-mail and affiliation from user | |
| 297 dataverse.getDataverseContacts().add(new DataverseContact(dataverse, session.getUser().getDisplayInfo().getEmailAddress())); | |
| 298 dataverse.setAffiliation(session.getUser().getDisplayInfo().getAffiliation()); | |
| 299 setupForGeneralInfoEdit(); | |
| 300 // FacesContext.getCurrentInstance().addMessage(null, new FacesMessage(FacesMessage.SEVERITY_INFO, "Create New Dataverse", " - Create a new dataverse that will be a child dataverse of the parent you clicked from. Asterisks indicate required fields.")); | |
| 301 } | |
| 302 | |
| 303 return null; | |
| 304 } | |
| 305 | |
| 306 public void initFeaturedDataverses() { | |
| 307 List<Dataverse> featuredSource = new ArrayList<>(); | |
| 308 List<Dataverse> featuredTarget = new ArrayList<>(); | |
| 309 featuredSource.addAll(dataverseService.findAllPublishedByOwnerId(dataverse.getId())); | |
| 310 featuredSource.addAll(linkingService.findLinkedDataverses(dataverse.getId())); | |
| 311 List<DataverseFeaturedDataverse> featuredList = featuredDataverseService.findByDataverseId(dataverse.getId()); | |
| 312 for (DataverseFeaturedDataverse dfd : featuredList) { | |
| 313 Dataverse fd = dfd.getFeaturedDataverse(); | |
| 314 featuredTarget.add(fd); | |
| 315 featuredSource.remove(fd); | |
| 316 } | |
| 317 featuredDataverses = new DualListModel<>(featuredSource, featuredTarget); | |
| 318 | |
| 319 } | |
| 320 | |
| 321 public void initFacets() { | |
| 322 List<DatasetFieldType> facetsSource = new ArrayList<>(); | |
| 323 List<DatasetFieldType> facetsTarget = new ArrayList<>(); | |
| 324 facetsSource.addAll(datasetFieldService.findAllFacetableFieldTypes()); | |
| 325 List<DataverseFacet> facetsList = dataverseFacetService.findByDataverseId(dataverse.getFacetRootId()); | |
| 326 for (DataverseFacet dvFacet : facetsList) { | |
| 327 DatasetFieldType dsfType = dvFacet.getDatasetFieldType(); | |
| 328 facetsTarget.add(dsfType); | |
| 329 facetsSource.remove(dsfType); | |
| 330 } | |
| 331 facets = new DualListModel<>(facetsSource, facetsTarget); | |
| 332 facetMetadataBlockId = null; | |
| 333 } | |
| 334 | |
| 335 private void setupForGeneralInfoEdit() { | |
| 336 updateDataverseSubjectSelectItems(); | |
| 337 initFacets(); | |
| 338 refreshAllMetadataBlocks(); | |
| 339 } | |
| 340 | |
| 341 private Long facetMetadataBlockId; | |
| 342 | |
| 343 public Long getFacetMetadataBlockId() { | |
| 344 return facetMetadataBlockId; | |
| 345 } | |
| 346 | |
| 347 public void setFacetMetadataBlockId(Long facetMetadataBlockId) { | |
| 348 this.facetMetadataBlockId = facetMetadataBlockId; | |
| 349 } | |
| 350 | |
| 351 public void changeFacetsMetadataBlock() { | |
| 352 if (facetMetadataBlockId == null) { | |
| 353 facets.setSource(datasetFieldService.findAllFacetableFieldTypes()); | |
| 354 } else { | |
| 355 facets.setSource(datasetFieldService.findFacetableFieldTypesByMetadataBlock(facetMetadataBlockId)); | |
| 356 } | |
| 357 | |
| 358 facets.getSource().removeAll(facets.getTarget()); | |
| 359 } | |
| 360 | |
| 361 public void toggleFacetRoot() { | |
| 362 if (!dataverse.isFacetRoot()) { | |
| 363 initFacets(); | |
| 364 } | |
| 365 } | |
| 366 | |
| 367 public void onFacetTransfer(TransferEvent event) { | |
| 368 for (Object item : event.getItems()) { | |
| 369 DatasetFieldType facet = (DatasetFieldType) item; | |
| 370 if (facetMetadataBlockId != null && !facetMetadataBlockId.equals(facet.getMetadataBlock().getId())) { | |
| 371 facets.getSource().remove(facet); | |
| 372 } | |
| 373 } | |
| 374 } | |
| 375 | |
| 376 public List<Dataverse> getCarouselFeaturedDataverses() { | |
| 377 List<Dataverse> retList = new ArrayList(); | |
| 378 List<DataverseFeaturedDataverse> featuredList = featuredDataverseService.findByDataverseId(dataverse.getId()); | |
| 379 for (DataverseFeaturedDataverse dfd : featuredList) { | |
| 380 Dataverse fd = dfd.getFeaturedDataverse(); | |
| 381 retList.add(fd); | |
| 382 } | |
| 383 return retList; | |
| 384 } | |
| 385 | |
| 386 public List getContents() { | |
| 387 List contentsList = dataverseService.findByOwnerId(dataverse.getId()); | |
| 388 contentsList.addAll(datasetService.findByOwnerId(dataverse.getId())); | |
| 389 return contentsList; | |
| 390 } | |
| 391 | |
| 392 public void edit(EditMode editMode) { | |
| 393 this.editMode = editMode; | |
| 394 if (editMode == EditMode.INFO) { | |
| 395 setupForGeneralInfoEdit(); | |
| 396 FacesContext.getCurrentInstance().addMessage(null, new FacesMessage(FacesMessage.SEVERITY_INFO, "Edit Dataverse", " - Edit your dataverse and click Save. Asterisks indicate required fields.")); | |
| 397 } else if (editMode == EditMode.FEATURED) { | |
| 398 initFeaturedDataverses(); | |
| 399 } | |
| 400 | |
| 401 } | |
| 402 | |
| 403 public void refresh() { | |
| 404 | |
| 405 } | |
| 406 | |
| 407 private boolean openMetadataBlock; | |
| 408 | |
| 409 public boolean isOpenMetadataBlock() { | |
| 410 return openMetadataBlock; | |
| 411 } | |
| 412 | |
| 413 public void setOpenMetadataBlock(boolean openMetadataBlock) { | |
| 414 this.openMetadataBlock = openMetadataBlock; | |
| 415 } | |
| 416 | |
| 417 private boolean editInputLevel; | |
| 418 | |
| 419 public boolean isEditInputLevel() { | |
| 420 return editInputLevel; | |
| 421 } | |
| 422 | |
| 423 public void setEditInputLevel(boolean editInputLevel) { | |
| 424 this.editInputLevel = editInputLevel; | |
| 425 } | |
| 426 | |
| 427 public void showDatasetFieldTypes(Long mdbId) { | |
| 428 showDatasetFieldTypes(mdbId, true); | |
| 429 } | |
| 430 | |
| 431 public void showDatasetFieldTypes(Long mdbId, boolean allowEdit) { | |
| 432 for (MetadataBlock mdb : allMetadataBlocks) { | |
| 433 if (mdb.getId().equals(mdbId)) { | |
| 434 mdb.setShowDatasetFieldTypes(true); | |
| 435 openMetadataBlock = true; | |
| 436 } | |
| 437 } | |
| 438 setEditInputLevel(allowEdit); | |
| 439 } | |
| 440 | |
| 441 public void hideDatasetFieldTypes(Long mdbId) { | |
| 442 for (MetadataBlock mdb : allMetadataBlocks) { | |
| 443 if (mdb.getId().equals(mdbId)) { | |
| 444 mdb.setShowDatasetFieldTypes(false); | |
| 445 openMetadataBlock = false; | |
| 446 } | |
| 447 } | |
| 448 setEditInputLevel(false); | |
| 449 } | |
| 450 | |
| 451 public void updateInclude(Long mdbId, long dsftId) { | |
| 452 List<DatasetFieldType> childDSFT = new ArrayList(); | |
| 453 | |
| 454 for (MetadataBlock mdb : allMetadataBlocks) { | |
| 455 if (mdb.getId().equals(mdbId)) { | |
| 456 for (DatasetFieldType dsftTest : mdb.getDatasetFieldTypes()) { | |
| 457 if (dsftTest.getId().equals(dsftId)) { | |
| 458 dsftTest.setOptionSelectItems(resetSelectItems(dsftTest)); | |
| 459 if ((dsftTest.isHasParent() && !dsftTest.getParentDatasetFieldType().isInclude()) || (!dsftTest.isHasParent() && !dsftTest.isInclude())) { | |
| 460 dsftTest.setRequiredDV(false); | |
| 461 } | |
| 462 if (dsftTest.isHasChildren()) { | |
| 463 childDSFT.addAll(dsftTest.getChildDatasetFieldTypes()); | |
| 464 } | |
| 465 } | |
| 466 } | |
| 467 } | |
| 468 } | |
| 469 if (!childDSFT.isEmpty()) { | |
| 470 for (DatasetFieldType dsftUpdate : childDSFT) { | |
| 471 for (MetadataBlock mdb : allMetadataBlocks) { | |
| 472 if (mdb.getId().equals(mdbId)) { | |
| 473 for (DatasetFieldType dsftTest : mdb.getDatasetFieldTypes()) { | |
| 474 if (dsftTest.getId().equals(dsftUpdate.getId())) { | |
| 475 dsftTest.setOptionSelectItems(resetSelectItems(dsftTest)); | |
| 476 } | |
| 477 } | |
| 478 } | |
| 479 } | |
| 480 } | |
| 481 } | |
| 482 } | |
| 483 | |
| 484 public List<SelectItem> resetSelectItems(DatasetFieldType typeIn) { | |
| 485 List retList = new ArrayList(); | |
| 486 if ((typeIn.isHasParent() && typeIn.getParentDatasetFieldType().isInclude()) || (!typeIn.isHasParent() && typeIn.isInclude())) { | |
| 487 SelectItem requiredItem = new SelectItem(); | |
| 488 requiredItem.setLabel("Required"); | |
| 489 requiredItem.setValue(true); | |
| 490 retList.add(requiredItem); | |
| 491 SelectItem optional = new SelectItem(); | |
| 492 optional.setLabel("Optional"); | |
| 493 optional.setValue(false); | |
| 494 retList.add(optional); | |
| 495 } else { | |
| 496 SelectItem hidden = new SelectItem(); | |
| 497 hidden.setLabel("Hidden"); | |
| 498 hidden.setValue(false); | |
| 499 hidden.setDisabled(true); | |
| 500 retList.add(hidden); | |
| 501 } | |
| 502 return retList; | |
| 503 } | |
| 504 | |
| 505 public void updateRequiredDatasetFieldTypes(Long mdbId, Long dsftId, boolean inVal) { | |
| 506 for (MetadataBlock mdb : allMetadataBlocks) { | |
| 507 if (mdb.getId().equals(mdbId)) { | |
| 508 for (DatasetFieldType dsft : mdb.getDatasetFieldTypes()) { | |
| 509 if (dsft.getId().equals(dsftId)) { | |
| 510 dsft.setRequiredDV(!inVal); | |
| 511 } | |
| 512 } | |
| 513 } | |
| 514 } | |
| 515 } | |
| 516 | |
| 517 public void updateOptionsRadio(Long mdbId, Long dsftId) { | |
| 518 | |
| 519 for (MetadataBlock mdb : allMetadataBlocks) { | |
| 520 if (mdb.getId().equals(mdbId)) { | |
| 521 for (DatasetFieldType dsft : mdb.getDatasetFieldTypes()) { | |
| 522 if (dsft.getId().equals(dsftId)) { | |
| 523 dsft.setOptionSelectItems(resetSelectItems(dsft)); | |
| 524 } | |
| 525 } | |
| 526 } | |
| 527 } | |
| 528 } | |
| 529 | |
| 530 | |
| 531 public String save() { | |
| 532 List<DataverseFieldTypeInputLevel> listDFTIL = new ArrayList(); | |
| 533 if (editMode != null && editMode.equals(EditMode.INFO)) { | |
| 534 | |
| 535 List<MetadataBlock> selectedBlocks = new ArrayList(); | |
| 536 if (dataverse.isMetadataBlockRoot()) { | |
| 537 dataverse.getMetadataBlocks().clear(); | |
| 538 } | |
| 539 | |
| 540 for (MetadataBlock mdb : this.allMetadataBlocks) { | |
| 541 if (dataverse.isMetadataBlockRoot() && (mdb.isSelected() || mdb.isRequired())) { | |
| 542 selectedBlocks.add(mdb); | |
| 543 for (DatasetFieldType dsft : mdb.getDatasetFieldTypes()) { | |
| 544 if (dsft.isRequiredDV() && !dsft.isRequired() | |
| 545 && ((!dsft.isHasParent() && dsft.isInclude()) | |
| 546 || (dsft.isHasParent() && dsft.getParentDatasetFieldType().isInclude()))) { | |
| 547 DataverseFieldTypeInputLevel dftil = new DataverseFieldTypeInputLevel(); | |
| 548 dftil.setDatasetFieldType(dsft); | |
| 549 dftil.setDataverse(dataverse); | |
| 550 dftil.setRequired(true); | |
| 551 dftil.setInclude(true); | |
| 552 listDFTIL.add(dftil); | |
| 553 } | |
| 554 if ((!dsft.isHasParent() && !dsft.isInclude()) | |
| 555 || (dsft.isHasParent() && !dsft.getParentDatasetFieldType().isInclude())) { | |
| 556 DataverseFieldTypeInputLevel dftil = new DataverseFieldTypeInputLevel(); | |
| 557 dftil.setDatasetFieldType(dsft); | |
| 558 dftil.setDataverse(dataverse); | |
| 559 dftil.setRequired(false); | |
| 560 dftil.setInclude(false); | |
| 561 listDFTIL.add(dftil); | |
| 562 } | |
| 563 } | |
| 564 } | |
| 565 } | |
| 566 | |
| 567 if (!selectedBlocks.isEmpty()) { | |
| 568 dataverse.setMetadataBlocks(selectedBlocks); | |
| 569 } | |
| 570 | |
| 571 if (!dataverse.isFacetRoot()) { | |
| 572 facets.getTarget().clear(); | |
| 573 } | |
| 574 | |
| 575 } | |
| 576 | |
| 577 Command<Dataverse> cmd = null; | |
| 578 //TODO change to Create - for now the page is expecting INFO instead. | |
| 579 Boolean create; | |
| 580 if (dataverse.getId() == null) { | |
| 581 if (session.getUser().isAuthenticated()) { | |
| 582 dataverse.setOwner(ownerId != null ? dataverseService.find(ownerId) : null); | |
| 583 create = Boolean.TRUE; | |
| 584 cmd = new CreateDataverseCommand(dataverse, (AuthenticatedUser) session.getUser(), facets.getTarget(), listDFTIL); | |
| 585 } else { | |
| 586 JH.addMessage(FacesMessage.SEVERITY_FATAL, JH.localize("dataverse.create.authenticatedUsersOnly")); | |
| 587 return null; | |
| 588 } | |
| 589 } else { | |
| 590 create = Boolean.FALSE; | |
| 591 if (editMode != null && editMode.equals(editMode.FEATURED)) { | |
| 592 cmd = new UpdateDataverseCommand(dataverse, null, featuredDataverses.getTarget(), session.getUser(), null); | |
| 593 } else { | |
| 594 cmd = new UpdateDataverseCommand(dataverse, facets.getTarget(), null, session.getUser(), listDFTIL); | |
| 595 } | |
| 596 } | |
| 597 | |
| 598 try { | |
| 599 dataverse = commandEngine.submit(cmd); | |
| 600 if (session.getUser() instanceof AuthenticatedUser) { | |
| 601 if (create) { | |
| 602 userNotificationService.sendNotification((AuthenticatedUser) session.getUser(), dataverse.getCreateDate(), Type.CREATEDV, dataverse.getId()); | |
| 603 } | |
| 604 } | |
| 605 | |
| 606 String message = ""; | |
| 607 if (editMode != null && editMode.equals(editMode.FEATURED)) { | |
| 608 message = "The featured dataverses for this dataverse have been updated."; | |
| 609 } else { | |
| 610 message = (create) ? BundleUtil.getStringFromBundle("dataverse.create.success", Arrays.asList(systemConfig.getGuidesBaseUrl(), systemConfig.getVersion())) : JH.localize("dataverse.update.success"); | |
| 611 } | |
| 612 JsfHelper.addSuccessMessage(message); | |
| 613 | |
| 614 editMode = null; | |
| 615 return "/dataverse.xhtml?alias=" + dataverse.getAlias() + "&faces-redirect=true"; | |
| 616 | |
| 617 | |
| 618 } catch (CommandException ex) { | |
| 619 logger.log(Level.SEVERE, "Unexpected Exception calling dataverse command", ex); | |
| 620 String errMsg = create ? JH.localize("dataverse.create.failure") : JH.localize("dataverse.update.failure"); | |
| 621 JH.addMessage(FacesMessage.SEVERITY_FATAL, errMsg); | |
| 622 return null; | |
| 623 } catch (Exception e) { | |
| 624 logger.log(Level.SEVERE, "Unexpected Exception calling dataverse command", e); | |
| 625 String errMsg = create ? JH.localize("dataverse.create.failure") : JH.localize("dataverse.update.failure"); | |
| 626 JH.addMessage(FacesMessage.SEVERITY_FATAL, errMsg); | |
| 627 return null; | |
| 628 } | |
| 629 } | |
| 630 | |
| 631 public void cancel(ActionEvent e) { | |
| 632 // reset values | |
| 633 dataverse = dataverseService.find(dataverse.getId()); | |
| 634 ownerId = dataverse.getOwner() != null ? dataverse.getOwner().getId() : null; | |
| 635 editMode = null; | |
| 636 } | |
| 637 | |
| 638 public boolean isRootDataverse() { | |
| 639 return dataverse.getOwner() == null; | |
| 640 } | |
| 641 | |
| 642 public Dataverse getOwner() { | |
| 643 return (ownerId != null) ? dataverseService.find(ownerId) : null; | |
| 644 } | |
| 645 | |
| 646 // METHODS for Dataverse Setup | |
| 647 public boolean isInheritMetadataBlockFromParent() { | |
| 648 return !dataverse.isMetadataBlockRoot(); | |
| 649 } | |
| 650 | |
| 651 public void setInheritMetadataBlockFromParent(boolean inheritMetadataBlockFromParent) { | |
| 652 dataverse.setMetadataBlockRoot(!inheritMetadataBlockFromParent); | |
| 653 } | |
| 654 | |
| 655 public void editMetadataBlocks() { | |
| 656 if (!dataverse.isMetadataBlockRoot()) { | |
| 657 refreshAllMetadataBlocks(); | |
| 658 } | |
| 659 } | |
| 660 | |
| 661 public void editMetadataBlocks(boolean checkVal) { | |
| 662 setInheritMetadataBlockFromParent(checkVal); | |
| 663 if (!dataverse.isMetadataBlockRoot()) { | |
| 664 refreshAllMetadataBlocks(); | |
| 665 } | |
| 666 } | |
| 667 | |
| 668 public void cancelMetadataBlocks() { | |
| 669 setInheritMetadataBlockFromParent(false); | |
| 670 } | |
| 671 | |
| 672 public boolean isInheritFacetFromParent() { | |
| 673 return !dataverse.isFacetRoot(); | |
| 674 } | |
| 675 | |
| 676 public void setInheritFacetFromParent(boolean inheritFacetFromParent) { | |
| 677 dataverse.setFacetRoot(!inheritFacetFromParent); | |
| 678 } | |
| 679 | |
| 680 public DualListModel<DatasetFieldType> getFacets() { | |
| 681 return facets; | |
| 682 } | |
| 683 | |
| 684 public void setFacets(DualListModel<DatasetFieldType> facets) { | |
| 685 this.facets = facets; | |
| 686 } | |
| 687 | |
| 688 public DualListModel<Dataverse> getFeaturedDataverses() { | |
| 689 return featuredDataverses; | |
| 690 } | |
| 691 | |
| 692 public void setFeaturedDataverses(DualListModel<Dataverse> featuredDataverses) { | |
| 693 this.featuredDataverses = featuredDataverses; | |
| 694 } | |
| 695 | |
| 696 public String saveLinkedDataverse() { | |
| 697 | |
| 698 if (linkingDataverseId == null) { | |
| 699 JsfHelper.addSuccessMessage("You must select a linking dataverse."); | |
| 700 return ""; | |
| 701 } | |
| 702 | |
| 703 AuthenticatedUser savedSearchCreator = getAuthenticatedUser(); | |
| 704 if (savedSearchCreator == null) { | |
| 705 String msg = "Only authenticated users can link a dataverse."; | |
| 706 logger.severe(msg); | |
| 707 JsfHelper.addErrorMessage(msg); | |
| 708 return "/dataverse.xhtml?alias=" + dataverse.getAlias() + "&faces-redirect=true"; | |
| 709 } | |
| 710 | |
| 711 linkingDataverse = dataverseService.find(linkingDataverseId); | |
| 712 | |
| 713 LinkDataverseCommand cmd = new LinkDataverseCommand(session.getUser(), linkingDataverse, dataverse); | |
| 714 try { | |
| 715 DataverseLinkingDataverse linkedDataverse = commandEngine.submit(cmd); | |
| 716 } catch (CommandException ex) { | |
| 717 String msg = "Unable to link " + dataverse.getDisplayName() + " to " + linkingDataverse.getDisplayName() + ". An internal error occurred."; | |
| 718 logger.severe(msg + " " + ex); | |
| 719 JsfHelper.addErrorMessage(msg); | |
| 720 return "/dataverse.xhtml?alias=" + dataverse.getAlias() + "&faces-redirect=true"; | |
| 721 } | |
| 722 | |
| 723 SavedSearch savedSearchOfChildren = createSavedSearchForChildren(savedSearchCreator); | |
| 724 | |
| 725 boolean createLinksAndIndexRightNow = false; | |
| 726 if (createLinksAndIndexRightNow) { | |
| 727 try { | |
| 728 // create links (does indexing) right now (might be expensive) | |
| 729 boolean debug = false; | |
| 730 savedSearchService.makeLinksForSingleSavedSearch(savedSearchOfChildren, debug); | |
| 731 JsfHelper.addSuccessMessage(dataverse.getDisplayName() + " has been successfully linked to " + linkingDataverse.getDisplayName()); | |
| 732 return "/dataverse.xhtml?alias=" + dataverse.getAlias() + "&faces-redirect=true"; | |
| 733 } catch (SearchException | CommandException ex) { | |
| 734 // error: solr is down, etc. can't link children right now | |
| 735 String msg = dataverse.getDisplayName() + " has been successfully linked to " + linkingDataverse.getDisplayName() + " but contents will not appear until an internal error has been fixed."; | |
| 736 logger.severe(msg + " " + ex); | |
| 737 JsfHelper.addErrorMessage(msg); | |
| 738 return "/dataverse.xhtml?alias=" + dataverse.getAlias() + "&faces-redirect=true"; | |
| 739 } | |
| 740 } else { | |
| 741 // defer: please wait for the next timer/cron job | |
| 742 JsfHelper.addSuccessMessage(dataverse.getDisplayName() + " has been successfully linked to " + linkingDataverse.getDisplayName() + ". Please wait for its contents to appear."); | |
| 743 return "/dataverse.xhtml?alias=" + dataverse.getAlias() + "&faces-redirect=true"; | |
| 744 } | |
| 745 } | |
| 746 | |
| 747 @Deprecated | |
| 748 private SavedSearch createSavedOfCurrentDataverse(AuthenticatedUser savedSearchCreator) { | |
| 749 /** | |
| 750 * Please note that we are relying on the fact that the Solr ID of a | |
| 751 * dataverse never changes, unlike datasets and files, which will change | |
| 752 * from "dataset_10_draft" to "dataset_10" when published, for example. | |
| 753 */ | |
| 754 String queryForCurrentDataverse = SearchFields.ID + ":" + IndexServiceBean.solrDocIdentifierDataverse + dataverse.getId(); | |
| 755 SavedSearch savedSearchToPersist = new SavedSearch(queryForCurrentDataverse, linkingDataverse, savedSearchCreator); | |
| 756 SavedSearch savedSearchCreated = savedSearchService.add(savedSearchToPersist); | |
| 757 return savedSearchCreated; | |
| 758 } | |
| 759 | |
| 760 private SavedSearch createSavedSearchForChildren(AuthenticatedUser savedSearchCreator) { | |
| 761 String wildcardQuery = "*"; | |
| 762 SavedSearch savedSearchToPersist = new SavedSearch(wildcardQuery, linkingDataverse, savedSearchCreator); | |
| 763 String dataversePath = dataverseService.determineDataversePath(dataverse); | |
| 764 String filterDownToSubtree = SearchFields.SUBTREE + ":\"" + dataversePath + "\""; | |
| 765 SavedSearchFilterQuery filterDownToSubtreeFilterQuery = new SavedSearchFilterQuery(filterDownToSubtree, savedSearchToPersist); | |
| 766 savedSearchToPersist.setSavedSearchFilterQueries(Arrays.asList(filterDownToSubtreeFilterQuery)); | |
| 767 SavedSearch savedSearchCreated = savedSearchService.add(savedSearchToPersist); | |
| 768 return savedSearchCreated; | |
| 769 } | |
| 770 | |
| 771 public String saveSavedSearch() { | |
| 772 if (linkingDataverseId == null) { | |
| 773 JsfHelper.addSuccessMessage("You must select a linking dataverse."); | |
| 774 return ""; | |
| 775 } | |
| 776 linkingDataverse = dataverseService.find(linkingDataverseId); | |
| 777 | |
| 778 AuthenticatedUser savedSearchCreator = getAuthenticatedUser(); | |
| 779 if (savedSearchCreator == null) { | |
| 780 String msg = "Only authenticated users can save a search."; | |
| 781 logger.severe(msg); | |
| 782 JsfHelper.addErrorMessage(msg); | |
| 783 return "/dataverse.xhtml?alias=" + dataverse.getAlias() + "&faces-redirect=true"; | |
| 784 } | |
| 785 | |
| 786 SavedSearch savedSearch = new SavedSearch(searchIncludeFragment.getQuery(), linkingDataverse, savedSearchCreator); | |
| 787 savedSearch.setSavedSearchFilterQueries(new ArrayList()); | |
| 788 for (String filterQuery : searchIncludeFragment.getFilterQueriesDebug()) { | |
| 789 /** | |
| 790 * @todo Why are there null's here anyway? Turn on debug and figure | |
| 791 * this out. | |
| 792 */ | |
| 793 if (filterQuery != null && !filterQuery.isEmpty()) { | |
| 794 SavedSearchFilterQuery ssfq = new SavedSearchFilterQuery(); | |
| 795 ssfq.setSavedSearch(savedSearch); | |
| 796 ssfq.setFilterQuery(filterQuery); | |
| 797 savedSearch.getSavedSearchFilterQueries().add(ssfq); | |
| 798 } | |
| 799 } | |
| 800 CreateSavedSearchCommand cmd = new CreateSavedSearchCommand(session.getUser(), linkingDataverse, savedSearch); | |
| 801 try { | |
| 802 commandEngine.submit(cmd); | |
| 803 JsfHelper.addSuccessMessage("This search is now linked to " + linkingDataverse.getDisplayName()); | |
| 804 //return ""; | |
| 805 return "/dataverse.xhtml?alias=" + dataverse.getAlias() + "&faces-redirect=true"; | |
| 806 } catch (CommandException ex) { | |
| 807 String msg = "There was a problem linking this search to yours: " + ex; | |
| 808 logger.severe(msg); | |
| 809 /** | |
| 810 * @todo how do we get this message to show up in the GUI? | |
| 811 */ | |
| 812 FacesMessage message = new FacesMessage(FacesMessage.SEVERITY_INFO, "DataverseNotLinked", msg); | |
| 813 FacesContext.getCurrentInstance().addMessage(null, message); | |
| 814 //return ""; | |
| 815 return "/dataverse.xhtml?alias=" + dataverse.getAlias() + "&faces-redirect=true"; | |
| 816 } | |
| 817 } | |
| 818 | |
| 819 private AuthenticatedUser getAuthenticatedUser() { | |
| 820 User user = session.getUser(); | |
| 821 if (user.isAuthenticated()) { | |
| 822 return (AuthenticatedUser) user; | |
| 823 } else { | |
| 824 return null; | |
| 825 } | |
| 826 } | |
| 827 | |
| 828 public String releaseDataverse() { | |
| 829 if (session.getUser() instanceof AuthenticatedUser) { | |
| 830 PublishDataverseCommand cmd = new PublishDataverseCommand((AuthenticatedUser) session.getUser(), dataverse); | |
| 831 try { | |
| 832 commandEngine.submit(cmd); | |
| 833 JsfHelper.addSuccessMessage(JH.localize("dataverse.publish.success")); | |
| 834 | |
| 835 } catch (Exception ex) { | |
| 836 logger.log(Level.SEVERE, "Unexpected Exception calling publish dataverse command", ex); | |
| 837 JsfHelper.addErrorMessage(JH.localize("dataverse.publish.failure")); | |
| 838 | |
| 839 } | |
| 840 } else { | |
| 841 FacesMessage message = new FacesMessage(FacesMessage.SEVERITY_INFO, "DataverseNotReleased", "Only authenticated users can release a dataverse."); | |
| 842 FacesContext.getCurrentInstance().addMessage(null, message); | |
| 843 } | |
| 844 return "/dataverse.xhtml?alias=" + dataverse.getAlias() + "&faces-redirect=true"; | |
| 845 | |
| 846 } | |
| 847 | |
| 848 public String deleteDataverse() { | |
| 849 DeleteDataverseCommand cmd = new DeleteDataverseCommand(session.getUser(), dataverse); | |
| 850 try { | |
| 851 commandEngine.submit(cmd); | |
| 852 JsfHelper.addSuccessMessage(JH.localize("dataverse.delete.success")); | |
| 853 } catch (Exception ex) { | |
| 854 logger.log(Level.SEVERE, "Unexpected Exception calling delete dataverse command", ex); | |
| 855 JsfHelper.addErrorMessage(JH.localize("dataverse.delete.failure")); | |
| 856 } | |
| 857 return "/dataverse.xhtml?alias=" + dataverse.getOwner().getAlias() + "&faces-redirect=true"; | |
| 858 } | |
| 859 | |
| 860 public String getMetadataBlockPreview(MetadataBlock mdb, int numberOfItems) { | |
| 861 /// for beta, we will just preview the first n fields | |
| 862 StringBuilder mdbPreview = new StringBuilder(); | |
| 863 int count = 0; | |
| 864 for (DatasetFieldType dsfType : mdb.getDatasetFieldTypes()) { | |
| 865 if (!dsfType.isChild()) { | |
| 866 if (count != 0) { | |
| 867 mdbPreview.append(", "); | |
| 868 if (count == numberOfItems) { | |
| 869 mdbPreview.append("etc."); | |
| 870 break; | |
| 871 } | |
| 872 } | |
| 873 | |
| 874 mdbPreview.append(dsfType.getDisplayName()); | |
| 875 count++; | |
| 876 } | |
| 877 } | |
| 878 | |
| 879 return mdbPreview.toString(); | |
| 880 } | |
| 881 | |
| 882 public Boolean isEmptyDataverse() { | |
| 883 return !dataverseService.hasData(dataverse); | |
| 884 } | |
| 885 private List<MetadataBlock> allMetadataBlocks; | |
| 886 | |
| 887 public List<MetadataBlock> getAllMetadataBlocks() { | |
| 888 return this.allMetadataBlocks; | |
| 889 } | |
| 890 | |
| 891 public void setAllMetadataBlocks(List<MetadataBlock> inBlocks) { | |
| 892 this.allMetadataBlocks = inBlocks; | |
| 893 } | |
| 894 | |
| 895 private void refreshAllMetadataBlocks() { | |
| 896 Long dataverseIdForInputLevel = dataverse.getId(); | |
| 897 List<MetadataBlock> retList = new ArrayList(); | |
| 898 | |
| 899 List<MetadataBlock> availableBlocks = new ArrayList(); | |
| 900 //Add System level blocks | |
| 901 availableBlocks.addAll(dataverseService.findSystemMetadataBlocks()); | |
| 902 | |
| 903 Dataverse testDV = dataverse; | |
| 904 //Add blocks associated with DV | |
| 905 availableBlocks.addAll(dataverseService.findMetadataBlocksByDataverseId(dataverse.getId())); | |
| 906 | |
| 907 //Add blocks associated with dv going up inheritance tree | |
| 908 while (testDV.getOwner() != null) { | |
| 909 availableBlocks.addAll(dataverseService.findMetadataBlocksByDataverseId(testDV.getOwner().getId())); | |
| 910 testDV = testDV.getOwner(); | |
| 911 } | |
| 912 | |
| 913 for (MetadataBlock mdb : availableBlocks) { | |
| 914 mdb.setSelected(false); | |
| 915 mdb.setShowDatasetFieldTypes(false); | |
| 916 if (!dataverse.isMetadataBlockRoot() && dataverse.getOwner() != null) { | |
| 917 dataverseIdForInputLevel = dataverse.getMetadataRootId(); | |
| 918 for (MetadataBlock mdbTest : dataverse.getOwner().getMetadataBlocks()) { | |
| 919 if (mdb.equals(mdbTest)) { | |
| 920 mdb.setSelected(true); | |
| 921 } | |
| 922 } | |
| 923 } else { | |
| 924 for (MetadataBlock mdbTest : dataverse.getMetadataBlocks(true)) { | |
| 925 if (mdb.equals(mdbTest)) { | |
| 926 mdb.setSelected(true); | |
| 927 } | |
| 928 } | |
| 929 } | |
| 930 | |
| 931 for (DatasetFieldType dsft : mdb.getDatasetFieldTypes()) { | |
| 932 if (!dsft.isChild()) { | |
| 933 DataverseFieldTypeInputLevel dsfIl = dataverseFieldTypeInputLevelService.findByDataverseIdDatasetFieldTypeId(dataverseIdForInputLevel, dsft.getId()); | |
| 934 if (dsfIl != null) { | |
| 935 dsft.setRequiredDV(dsfIl.isRequired()); | |
| 936 dsft.setInclude(dsfIl.isInclude()); | |
| 937 } else { | |
| 938 dsft.setRequiredDV(dsft.isRequired()); | |
| 939 dsft.setInclude(true); | |
| 940 } | |
| 941 dsft.setOptionSelectItems(resetSelectItems(dsft)); | |
| 942 if (dsft.isHasChildren()) { | |
| 943 for (DatasetFieldType child : dsft.getChildDatasetFieldTypes()) { | |
| 944 DataverseFieldTypeInputLevel dsfIlChild = dataverseFieldTypeInputLevelService.findByDataverseIdDatasetFieldTypeId(dataverseIdForInputLevel, child.getId()); | |
| 945 if (dsfIlChild != null) { | |
| 946 child.setRequiredDV(dsfIlChild.isRequired()); | |
| 947 child.setInclude(dsfIlChild.isInclude()); | |
| 948 } else { | |
| 949 child.setRequiredDV(child.isRequired()); | |
| 950 child.setInclude(true); | |
| 951 } | |
| 952 child.setOptionSelectItems(resetSelectItems(child)); | |
| 953 } | |
| 954 } | |
| 955 } | |
| 956 } | |
| 957 retList.add(mdb); | |
| 958 } | |
| 959 setAllMetadataBlocks(retList); | |
| 960 } | |
| 961 | |
| 962 public void validateAlias(FacesContext context, UIComponent toValidate, Object value) { | |
| 963 if (!StringUtils.isEmpty((String) value)) { | |
| 964 String alias = (String) value; | |
| 965 | |
| 966 boolean aliasFound = false; | |
| 967 Dataverse dv = dataverseService.findByAlias(alias); | |
| 968 if (editMode == DataversePage.EditMode.CREATE) { | |
| 969 if (dv != null) { | |
| 970 aliasFound = true; | |
| 971 } | |
| 972 } else { | |
| 973 if (dv != null && !dv.getId().equals(dataverse.getId())) { | |
| 974 aliasFound = true; | |
| 975 } | |
| 976 } | |
| 977 if (aliasFound) { | |
| 978 ((UIInput) toValidate).setValid(false); | |
| 979 FacesMessage message = new FacesMessage(FacesMessage.SEVERITY_ERROR, "alias", "This Alias is already taken."); | |
| 980 context.addMessage(toValidate.getClientId(context), message); | |
| 981 } | |
| 982 } | |
| 983 } | |
| 984 | |
| 985 } |
