View Javadoc
1   package fr.ifremer.dali.ui.swing.content.manage.program.programs.users;
2   
3   /*
4    * #%L
5    * Dali :: UI
6    * $Id:$
7    * $HeadURL:$
8    * %%
9    * Copyright (C) 2014 - 2015 Ifremer
10   * %%
11   * This program is free software: you can redistribute it and/or modify
12   * it under the terms of the GNU Affero General Public License as published by
13   * the Free Software Foundation, either version 3 of the License, or
14   * (at your option) any later version.
15   * 
16   * This program is distributed in the hope that it will be useful,
17   * but WITHOUT ANY WARRANTY; without even the implied warranty of
18   * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
19   * GNU General Public License for more details.
20   * 
21   * You should have received a copy of the GNU Affero General Public License
22   * along with this program.  If not, see <http://www.gnu.org/licenses/>.
23   * #L%
24   */
25  
26  import com.google.common.collect.Lists;
27  import fr.ifremer.dali.dto.DaliBeans;
28  import fr.ifremer.dali.dto.referential.PersonDTO;
29  import fr.ifremer.dali.ui.swing.util.AbstractDaliUIHandler;
30  import fr.ifremer.quadrige3.core.dao.technical.Assert;
31  import fr.ifremer.quadrige3.core.security.SecurityContextHelper;
32  import org.nuiton.jaxx.application.swing.util.Cancelable;
33  
34  import javax.swing.JOptionPane;
35  import java.util.Collection;
36  import java.util.List;
37  
38  import static org.nuiton.i18n.I18n.t;
39  
40  /**
41   * Handler.
42   */
43  public class UsersDialogUIHandler extends AbstractDaliUIHandler<UsersDialogUIModel, UsersDialogUI> implements Cancelable {
44  
45      /** Constant <code>DOUBLE_LIST="doubleList"</code> */
46      public static final String DOUBLE_LIST = "doubleList";
47      /** Constant <code>LIST="list"</code> */
48      public static final String LIST = "list";
49  
50      /** {@inheritDoc} */
51      @Override
52      public void beforeInit(UsersDialogUI ui) {
53          super.beforeInit(ui);
54  
55          UsersDialogUIModel model = new UsersDialogUIModel();
56          ui.setContextValue(model);
57      }
58  
59      /** {@inheritDoc} */
60      @Override
61      @SuppressWarnings("unchecked")
62      public void afterInit(final UsersDialogUI ui) {
63          initUI(ui);
64  
65          getUI().getUsersList().setCellRenderer(newListCellRender(PersonDTO.class));
66  
67          getModel().addPropertyChangeListener(UsersDialogUIModel.PROPERTY_PROGRAM, evt -> {
68  
69              if (getModel().getProgram() == null) {
70                  return;
71              }
72  
73              Assert.notNull(getModel().getManagerList(), "must set the managerList property before program");
74  
75              Collection<PersonDTO> users = getModel().getManagerList()
76                      ? getModel().getProgram().getManagerPersons()
77                      : getModel().getProgram().getRecorderPersons();
78  
79              getUI().setTitle(getModel().getManagerList()
80                      ? t("dali.program.program.managers.title", decorate(getModel().getProgram()))
81                      : t("dali.program.program.recorderPersons.title", decorate(getModel().getProgram())));
82  
83              if (getModel().getProgram().isEditable()) {
84                  getUI().getListPanelLayout().setSelected(DOUBLE_LIST);
85  
86                  // update filterUI
87                  getUI().getFilterElementUserUI().getFilterDoubleList().getModel().setSelected(Lists.newArrayList(users));
88                  getUI().getFilterElementUserUI().getHandler().enable();
89  
90              } else {
91                  getUI().getListPanelLayout().setSelected(LIST);
92  
93                  getUI().getUsersList().setListData(users.toArray(new PersonDTO[users.size()]));
94              }
95  
96          });
97  
98      }
99  
100     /**
101      * <p>valid.</p>
102      */
103     public void valid() {
104 
105         // set privilege to user
106         if (getModel().getProgram().isEditable()) {
107 
108             List<PersonDTO> users = getUI().getFilterElementUserUI().getModel().getElements();
109 
110             if (getModel().getManagerList()) {
111 
112                 // Mantis #0027643: add confirmation to remove current user from manager list
113                 if (DaliBeans.findByProperty(users, PersonDTO.PROPERTY_ID, SecurityContextHelper.getQuadrigeUserId()) == null) {
114 
115                     if (getContext().getDialogHelper().showConfirmDialog(getUI(),
116                             t("dali.program.program.managers.removeCurrent.message", decorate(getModel().getProgram())),
117                             t("dali.program.program.managers.title", decorate(getModel().getProgram())),
118                             JOptionPane.YES_NO_OPTION) == JOptionPane.NO_OPTION) {
119                         closeDialog();
120                         return;
121                     }
122 
123                 }
124 
125                 getModel().getProgram().setManagerPersons(users);
126             } else {
127                 getModel().getProgram().setRecorderPersons(users);
128             }
129         }
130 
131         // close the dialog box
132         closeDialog();
133     }
134 
135     /** {@inheritDoc} */
136     @Override
137     public void cancel() {
138         closeDialog();
139     }
140 }