1 package eu
.etaxonomy
.cdm
.remote
.vaadin
.uiset
.redlist
.views
;
3 import java
.util
.Arrays
;
8 import javax
.annotation
.PostConstruct
;
10 import org
.apache
.log4j
.Logger
;
11 import org
.springframework
.beans
.factory
.annotation
.Autowired
;
12 import org
.springframework
.context
.annotation
.Scope
;
13 import org
.springframework
.stereotype
.Component
;
15 import ru
.xpoft
.vaadin
.VaadinView
;
17 import com
.vaadin
.annotations
.Theme
;
18 import com
.vaadin
.data
.Container
;
19 import com
.vaadin
.data
.Property
;
20 import com
.vaadin
.data
.util
.BeanItem
;
21 import com
.vaadin
.event
.ItemClickEvent
;
22 import com
.vaadin
.event
.ItemClickEvent
.ItemClickListener
;
23 import com
.vaadin
.event
.ShortcutAction
.KeyCode
;
24 import com
.vaadin
.event
.ShortcutAction
.ModifierKey
;
25 import com
.vaadin
.navigator
.View
;
26 import com
.vaadin
.navigator
.ViewChangeListener
.ViewChangeEvent
;
27 import com
.vaadin
.server
.VaadinSession
;
28 import com
.vaadin
.ui
.Button
;
29 import com
.vaadin
.ui
.Button
.ClickEvent
;
30 import com
.vaadin
.ui
.Button
.ClickListener
;
31 import com
.vaadin
.ui
.CustomComponent
;
32 import com
.vaadin
.ui
.DefaultFieldFactory
;
33 import com
.vaadin
.ui
.Field
;
34 import com
.vaadin
.ui
.Notification
;
35 import com
.vaadin
.ui
.VerticalLayout
;
36 import com
.vaadin
.ui
.Window
;
38 import eu
.etaxonomy
.cdm
.api
.conversation
.ConversationHolder
;
39 import eu
.etaxonomy
.cdm
.api
.service
.IDescriptionService
;
40 import eu
.etaxonomy
.cdm
.api
.service
.ITaxonService
;
41 import eu
.etaxonomy
.cdm
.api
.service
.ITermService
;
42 import eu
.etaxonomy
.cdm
.api
.service
.IVocabularyService
;
43 import eu
.etaxonomy
.cdm
.model
.common
.CdmBase
;
44 import eu
.etaxonomy
.cdm
.model
.common
.DefinedTermBase
;
45 import eu
.etaxonomy
.cdm
.model
.common
.TermVocabulary
;
46 import eu
.etaxonomy
.cdm
.model
.description
.DescriptionElementBase
;
47 import eu
.etaxonomy
.cdm
.model
.taxon
.Taxon
;
48 import eu
.etaxonomy
.cdm
.remote
.dto
.vaadin
.CdmTaxonTableCollection
;
49 import eu
.etaxonomy
.cdm
.remote
.vaadin
.components
.DemoTaxonTable
;
50 import eu
.etaxonomy
.cdm
.remote
.vaadin
.components
.DetailWindow
;
51 import eu
.etaxonomy
.cdm
.remote
.vaadin
.components
.HorizontalToolbar
;
52 import eu
.etaxonomy
.cdm
.remote
.vaadin
.service
.VaadinAuthenticationService
;
57 @VaadinView(value
= BfnView
.NAME
, cached
=true)
58 public class BfnView
extends CustomComponent
implements View
{
60 private static final long serialVersionUID
= 1L;
62 public static final String NAME
= "bfn";
65 private VaadinAuthenticationService authenticationController
;
68 private HorizontalToolbar toolbar
;
71 private DemoTaxonTable taxonTable
;
73 private VerticalLayout layout
;
75 private ITermService termService
;
77 private ITaxonService taxonService
;
79 private IDescriptionService descriptionService
;
81 private IVocabularyService vocabularyService
;
83 private Taxon currentTaxon
;
85 private final Logger logger
= Logger
.getLogger(BfnView
.class);
87 private Set
<DefinedTermBase
> selectedTerms
;
90 public void PostConstruct(){
91 if(authenticationController
.isAuthenticated()){
94 layout
= new VerticalLayout();
95 layout
.addComponent(toolbar
);
96 layout
.addComponent(taxonTable
);
98 taxonTable
.setSizeFull();
100 selectedTerms
= initializeTerms();
102 DefaultFieldFactory fieldFactory
= createDefaulfielFactory();
103 taxonTable
.setTableFieldFactory(fieldFactory
);
104 layout
.setExpandRatio(taxonTable
, 1);
106 createEditClickListener();
108 setCompositionRoot(layout
);
113 private Set
<DefinedTermBase
> initializeTerms() {
114 VaadinSession session
= VaadinSession
.getCurrent();
115 UUID termUUID
= (UUID
) session
.getAttribute("selectedTerm");
116 TermVocabulary
<DefinedTermBase
> term
= vocabularyService
.load(termUUID
);
117 term
= CdmBase
.deproxy(term
, TermVocabulary
.class);
118 return term
.getTerms();
122 private DefaultFieldFactory
createDefaulfielFactory() {
123 DefaultFieldFactory fieldFactory
= new DefaultFieldFactory() {
124 private static final long serialVersionUID
= 1L;
126 public Field
createField(Container container
, Object itemId
,
127 Object propertyId
, com
.vaadin
.ui
.Component uiContext
) {
128 Property containerProperty
= container
.getContainerProperty(itemId
, propertyId
);
129 if("fullTitleCache".equals(propertyId
)){
132 if("rank".equals(propertyId
)){
135 // if("Berlin".equals(propertyId)){
136 // List<PresenceAbsenceTermBase> listTerm = termService.list(PresenceAbsenceTermBase.class, null, null, null, DESCRIPTION_INIT_STRATEGY);
137 // BeanItemContainer<PresenceAbsenceTermBase> termContainer = new BeanItemContainer<PresenceAbsenceTermBase>(PresenceAbsenceTermBase.class);
138 // termContainer.addAll(listTerm);
139 // final ComboBox box = new ComboBox("Occurrence Status: ", termContainer);
140 // Item item = container.getItem(itemId);
141 // box.setValue(item);
142 // toolbar.getSaveButton().setCaption("Save Data *");
145 return super.createField(container
, itemId
, propertyId
, uiContext
);
152 private void createEditClickListener(){
153 Button detailButton
= toolbar
.getDetailButton();
154 detailButton
.setCaption("Detail View");
155 detailButton
.addClickListener(new ClickListener() {
158 public void buttonClick(ClickEvent event
) {
159 if(currentTaxon
!= null){
160 List
<DescriptionElementBase
> listDescriptions
= descriptionService
.listDescriptionElementsForTaxon(currentTaxon
, null, null, null, null, DESCRIPTION_INIT_STRATEGY
);
161 DetailWindow dw
= new DetailWindow(currentTaxon
, listDescriptions
);
162 Window window
= dw
.createWindow();
163 getUI().addWindow(window
);
165 Notification
.show("Please select a Taxon.", Notification
.Type
.HUMANIZED_MESSAGE
);
171 Button saveButton
= toolbar
.getSaveButton();
172 saveButton
.setClickShortcut(KeyCode
.S
, ModifierKey
.CTRL
);
173 saveButton
.setDescription("Shortcut: CTRL+S");
174 saveButton
.setCaption("Save Data");
175 saveButton
.addClickListener(new ClickListener() {
176 private static final long serialVersionUID
= 1L;
178 public void buttonClick(ClickEvent event
) {
179 ConversationHolder conversationHolder
= authenticationController
.getConversationHolder();
181 conversationHolder
.commit();
182 // }catch(IllegalStateException stateException){
183 //TODO create Table without DTO
184 // Notification.show("Unexpected Error, \n\n Please log in again!", Notification.Type.WARNING_MESSAGE);
185 // logger.info(stateException);
186 // authenticationController.logout();
187 // conversationHolder.startTransaction();
188 // conversationHolder.commit();
190 Notification
.show("Data saved", Notification
.Type
.HUMANIZED_MESSAGE
);
191 taxonTable
.setEditable(false);
192 toolbar
.getSaveButton().setCaption("Save Data");
196 Button editButton
= toolbar
.getEditButton();
197 editButton
.setClickShortcut(KeyCode
.E
, ModifierKey
.CTRL
);
198 editButton
.setDescription("Shortcut: CTRL+e");
199 editButton
.addClickListener(new ClickListener() {
200 private static final long serialVersionUID
= 1L;
203 public void buttonClick(ClickEvent event
) {
204 if(taxonTable
.isEditable() == false){
205 taxonTable
.setEditable(true);
206 // taxonTable.removeGeneratedColumn("Berlin");
207 // taxonTable.refreshRowCache();
209 taxonTable
.setEditable(false);
210 taxonTable
.refreshRowCache();
215 taxonTable
.addItemClickListener(new ItemClickListener() {
218 public void itemClick(ItemClickEvent event
) {
219 Object taxonbean
= ((BeanItem
<?
>)event
.getItem()).getBean();
220 if(taxonbean
instanceof CdmTaxonTableCollection
){
221 CdmTaxonTableCollection red
= (CdmTaxonTableCollection
) taxonbean
;
222 currentTaxon
= red
.getTaxon();
229 public void enter(ViewChangeEvent event
) {
232 protected static final List
<String
> DESCRIPTION_INIT_STRATEGY
= Arrays
.asList(new String
[]{
235 "elements.sources.citation.authorTeam.$",
236 "elements.sources.nameUsedInSource.originalNameString",
237 "elements.area.level",
238 "elements.modifyingText",
241 "elements.multilanguageText",
242 "elements.inDescription",
243 "descriptionElements",
244 "descriptionElements.$",
245 "descriptionElements.inDescription.$",