- no change (just updated "last edited" for svn)
[cdmlib.git] / cdmlib-remote / src / main / java / eu / etaxonomy / cdm / remote / vaadin / uiset / redlist / views / BfnView.java
1 package eu.etaxonomy.cdm.remote.vaadin.uiset.redlist.views;
2
3 import java.util.Arrays;
4 import java.util.List;
5 import java.util.Set;
6 import java.util.UUID;
7
8 import javax.annotation.PostConstruct;
9
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;
14
15 import ru.xpoft.vaadin.VaadinView;
16
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;
37
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;
53
54 @Component
55 @Scope("prototype")
56 @Theme("mytheme")
57 @VaadinView(value = BfnView.NAME, cached=true)
58 public class BfnView extends CustomComponent implements View{
59
60 private static final long serialVersionUID = 1L;
61
62 public static final String NAME = "bfn";
63
64 @Autowired
65 private VaadinAuthenticationService authenticationController;
66
67 @Autowired
68 private HorizontalToolbar toolbar;
69
70 @Autowired
71 private DemoTaxonTable taxonTable;
72
73 private VerticalLayout layout;
74 @Autowired
75 private ITermService termService;
76 @Autowired
77 private ITaxonService taxonService;
78 @Autowired
79 private IDescriptionService descriptionService;
80 @Autowired
81 private IVocabularyService vocabularyService;
82
83 private Taxon currentTaxon;
84
85 private final Logger logger = Logger.getLogger(BfnView.class);
86
87 private Set<DefinedTermBase> selectedTerms;
88
89 @PostConstruct
90 public void PostConstruct(){
91 if(authenticationController.isAuthenticated()){
92 setSizeUndefined();
93 setSizeFull();
94 layout = new VerticalLayout();
95 layout.addComponent(toolbar);
96 layout.addComponent(taxonTable);
97 layout.setSizeFull();
98 taxonTable.setSizeFull();
99
100 selectedTerms = initializeTerms();
101
102 DefaultFieldFactory fieldFactory = createDefaulfielFactory();
103 taxonTable.setTableFieldFactory(fieldFactory);
104 layout.setExpandRatio(taxonTable, 1);
105
106 createEditClickListener();
107
108 setCompositionRoot(layout);
109 }
110 }
111
112
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();
119 }
120
121
122 private DefaultFieldFactory createDefaulfielFactory() {
123 DefaultFieldFactory fieldFactory = new DefaultFieldFactory() {
124 private static final long serialVersionUID = 1L;
125 @Override
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)){
130 return null;
131 }
132 if("rank".equals(propertyId)){
133 return null;
134 }
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 *");
143 // return box;
144 // }
145 return super.createField(container, itemId, propertyId, uiContext);
146 }
147 };
148 return fieldFactory;
149 }
150
151
152 private void createEditClickListener(){
153 Button detailButton = toolbar.getDetailButton();
154 detailButton.setCaption("Detail View");
155 detailButton.addClickListener(new ClickListener() {
156
157 @Override
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);
164 }else{
165 Notification.show("Please select a Taxon.", Notification.Type.HUMANIZED_MESSAGE);
166 }
167 }
168 });
169
170
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;
177 @Override
178 public void buttonClick(ClickEvent event) {
179 ConversationHolder conversationHolder = authenticationController.getConversationHolder();
180 // try{
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();
189 // }
190 Notification.show("Data saved", Notification.Type.HUMANIZED_MESSAGE);
191 taxonTable.setEditable(false);
192 toolbar.getSaveButton().setCaption("Save Data");
193 }
194 });
195
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;
201
202 @Override
203 public void buttonClick(ClickEvent event) {
204 if(taxonTable.isEditable() == false){
205 taxonTable.setEditable(true);
206 // taxonTable.removeGeneratedColumn("Berlin");
207 // taxonTable.refreshRowCache();
208 }else{
209 taxonTable.setEditable(false);
210 taxonTable.refreshRowCache();
211 }
212 }
213 });
214
215 taxonTable.addItemClickListener(new ItemClickListener() {
216
217 @Override
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();
223 }
224 }
225 });
226 }
227
228 @Override
229 public void enter(ViewChangeEvent event) {
230
231 }
232 protected static final List<String> DESCRIPTION_INIT_STRATEGY = Arrays.asList(new String []{
233 "$",
234 "elements.*",
235 "elements.sources.citation.authorTeam.$",
236 "elements.sources.nameUsedInSource.originalNameString",
237 "elements.area.level",
238 "elements.modifyingText",
239 "elements.states.*",
240 "elements.media",
241 "elements.multilanguageText",
242 "elements.inDescription",
243 "descriptionElements",
244 "descriptionElements.$",
245 "descriptionElements.inDescription.$",
246 "multilanguageText",
247 "stateData.$"
248 });
249 }