001/* 002 * (C) Copyright 2013 Nuxeo SA (http://nuxeo.com/) and others. 003 * 004 * Licensed under the Apache License, Version 2.0 (the "License"); 005 * you may not use this file except in compliance with the License. 006 * You may obtain a copy of the License at 007 * 008 * http://www.apache.org/licenses/LICENSE-2.0 009 * 010 * Unless required by applicable law or agreed to in writing, software 011 * distributed under the License is distributed on an "AS IS" BASIS, 012 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 013 * See the License for the specific language governing permissions and 014 * limitations under the License. 015 * 016 * Contributors: 017 * Anahide Tchertchian 018 */ 019package org.nuxeo.ecm.platform.ui.select2; 020 021import java.io.Serializable; 022import java.util.Map; 023 024import org.jboss.seam.ScopeType; 025import org.jboss.seam.annotations.In; 026import org.jboss.seam.annotations.Name; 027import org.jboss.seam.annotations.Scope; 028import org.jboss.seam.core.Events; 029import org.jboss.seam.faces.FacesMessages; 030import org.jboss.seam.international.StatusMessage; 031import org.nuxeo.ecm.core.api.DocumentModel; 032import org.nuxeo.ecm.directory.BaseSession; 033import org.nuxeo.ecm.directory.Session; 034import org.nuxeo.ecm.directory.api.DirectoryService; 035import org.nuxeo.ecm.directory.api.ui.DirectoryUI; 036import org.nuxeo.ecm.directory.api.ui.DirectoryUIManager; 037import org.nuxeo.ecm.platform.ui.web.directory.DirectoryHelper; 038import org.nuxeo.ecm.webapp.helpers.EventNames; 039 040/** 041 * Helper class for directory select2 widgets. 042 * 043 * @since 5.9.1 044 */ 045@Name("select2DirectoryActions") 046@Scope(ScopeType.PAGE) 047public class Select2DirectoryActionsBean implements Serializable { 048 049 private static final long serialVersionUID = 1L; 050 051 @In(create = true) 052 protected FacesMessages facesMessages; 053 054 @In(create = true) 055 protected Map<String, String> messages; 056 057 @In(create = true) 058 protected DirectoryUIManager directoryUIManager; 059 060 protected String directoryName; 061 062 protected DocumentModel newDirectoryEntry; 063 064 public String getDirectoryName() { 065 return directoryName; 066 } 067 068 public void setDirectoryName(String directoryName) { 069 this.directoryName = directoryName; 070 } 071 072 public DocumentModel getCreationDirectoryEntry(String directoryName) { 073 if (newDirectoryEntry == null || (directoryName != null && !directoryName.equals(getDirectoryName()))) { 074 setDirectoryName(directoryName); 075 DirectoryService dirService = DirectoryHelper.getDirectoryService(); 076 String schema = dirService.getDirectorySchema(directoryName); 077 newDirectoryEntry = BaseSession.createEntryModel(null, schema, null, null); 078 } 079 return newDirectoryEntry; 080 } 081 082 public String getCreationDirectoryEntryLayout(String directoryName) { 083 DirectoryUI currentDirectoryInfo = directoryUIManager.getDirectoryInfo(directoryName); 084 if (currentDirectoryInfo != null) { 085 return currentDirectoryInfo.getLayout(); 086 } 087 return null; 088 } 089 090 public void createDirectoryEntry() { 091 DirectoryService dirService = DirectoryHelper.getDirectoryService(); 092 String dirName = getDirectoryName(); 093 try (Session dirSession = dirService.open(dirName)) { 094 // check if entry already exists 095 String schema = dirService.getDirectorySchema(dirName); 096 String idField = dirService.getDirectoryIdField(dirName); 097 Object id = newDirectoryEntry.getProperty(schema, idField); 098 if (id instanceof String && dirSession.hasEntry((String) id)) { 099 facesMessages.addToControl("suggestAddNewDirectoryEntry", StatusMessage.Severity.ERROR, 100 messages.get("vocabulary.entry.identifier.already.exists")); 101 return; 102 } 103 dirSession.createEntry(newDirectoryEntry); 104 105 reset(); 106 Events.instance().raiseEvent(EventNames.DIRECTORY_CHANGED, dirName); 107 108 facesMessages.add(StatusMessage.Severity.INFO, messages.get("vocabulary.entry.added")); 109 } 110 } 111 112 public void cancelCreateDirectoryEntry() { 113 reset(); 114 } 115 116 public void reset() { 117 directoryName = null; 118 newDirectoryEntry = null; 119 } 120 121}