2 * Copyright (C) 2018 EDIT
3 * European Distributed Institute of Taxonomy
4 * http://www.e-taxonomy.eu
6 * The contents of this file are subject to the Mozilla Public License Version 1.1
7 * See LICENSE.TXT at the top of this package for the full license terms.
9 package eu
.etaxonomy
.vaadin
.ui
.navigation
;
11 import java
.util
.HashMap
;
14 import org
.apache
.logging
.log4j
.LogManager
;
15 import org
.apache
.logging
.log4j
.Logger
;
17 import com
.vaadin
.server
.ClientConnector
;
18 import com
.vaadin
.server
.ClientConnector
.DetachEvent
;
19 import com
.vaadin
.server
.ClientConnector
.DetachListener
;
20 import com
.vaadin
.ui
.Field
;
21 import com
.vaadin
.ui
.Window
;
23 import eu
.etaxonomy
.vaadin
.mvp
.ApplicationView
;
24 import eu
.etaxonomy
.vaadin
.ui
.view
.PopupView
;
27 * @author a.kohlbecker
30 public class PopupViewRegistration
implements DetachListener
{
32 private static final long serialVersionUID
= -5946913287379095637L;
34 private static final Logger logger
= LogManager
.getLogger();
36 private Map
<PopupView
, Window
> popupWindowMap
= new HashMap
<>();
38 private Map
<ApplicationView
<?
>, Map
<PopupView
, Field
<?
>>> popupViewFieldMap
= new HashMap
<>();
43 * @param field can be <code>null</code>
44 * @return the previous Field associated with the popup that has been opened in the view
46 public Field
<?
> put(Window window
, ApplicationView parentView
, PopupView popup
, Field
<?
> field
){
48 ((ClientConnector
)parentView
).addDetachListener(this);
49 popupWindowMap
.put(popup
, window
);
51 if(!popupViewFieldMap
.containsKey(parentView
)){
52 popupViewFieldMap
.put(parentView
, new HashMap
<>());
54 Map
<PopupView
, Field
<?
>> popupFieldMap
= popupViewFieldMap
.get(parentView
);
55 return popupFieldMap
.put(popup
, field
);
58 public Field
<?
> get(ApplicationView view
, PopupView popup
){
59 if(!popupViewFieldMap
.containsKey(view
)){
60 popupViewFieldMap
.get(view
).get(popup
);
65 public Field
<?
> get(PopupView popup
){
66 for(Map
<PopupView
, Field
<?
>> popupFieldMap
: popupViewFieldMap
.values()){
67 if(popupFieldMap
.containsKey(popup
)){
68 return popupFieldMap
.get(popup
);
77 public void remove(PopupView popup
) {
79 popupWindowMap
.remove(popup
);
81 for(Map
<PopupView
, Field
<?
>> popupFieldMap
: popupViewFieldMap
.values()){
82 if(popupFieldMap
.containsKey(popup
)){
83 popupFieldMap
.remove(popup
);
84 if(logger
.isDebugEnabled()){
85 logger
.debug(popup
+ " removed from popupViewFieldMap");
95 public Window
getWindow(PopupView popup
) {
96 return popupWindowMap
.get(popup
);
103 public void detach(DetachEvent event
) {
104 ClientConnector connector
= event
.getConnector();
105 if(ApplicationView
.class.isAssignableFrom(connector
.getClass())){
106 Map
<PopupView
, Field
<?
>> removal
= popupViewFieldMap
.remove(connector
);
107 if(logger
.isDebugEnabled() && removal
!= null){
108 logger
.debug( connector
+ " removed from popupViewFieldMap");
110 } else if(PopupView
.class.isAssignableFrom(connector
.getClass())){
111 remove((PopupView
)connector
);