package cz.nkp.differ.gui.tabs; import com.vaadin.ui.Button; import com.vaadin.ui.CustomComponent; import com.vaadin.ui.HorizontalLayout; import com.vaadin.ui.Layout; import com.vaadin.ui.Button.ClickEvent; import com.vaadin.ui.LoginForm.LoginEvent; import com.vaadin.ui.LoginForm.LoginListener; import com.vaadin.ui.VerticalLayout; import com.vaadin.ui.Window; import cz.nkp.differ.DifferApplication; import cz.nkp.differ.gui.components.DifferProgramTabButtonPanel; import cz.nkp.differ.gui.components.LoginRegisterComponent; import cz.nkp.differ.gui.components.UserFilesWidget; import cz.nkp.differ.gui.windows.MainDifferWindow; import cz.nkp.differ.model.Image; import cz.nkp.differ.model.User; import java.util.ArrayList; import java.util.Collections; import java.util.List; import java.util.Set; /** * The main application view. * @author Joshua Mabrey * @author Vaclav Rosecky * * Mar 30, 2012 */ @SuppressWarnings("serial") public class DifferProgramTab extends HorizontalLayout { private static final String GUEST_USERNAME = "guest"; private CustomComponent loginPanel; private Layout loggedInView, loggedOutView, customViewWrapper; private Button customLayoutBackButton; private UserFilesWidget fileSelector1, fileSelector2; private final DifferProgramTab this_internal = this; private MainDifferWindow mainWindow = null; //Used by button listener to reference DifferProgramTab object indirectly public DifferProgramTab(MainDifferWindow window) { this.mainWindow = window; if (DifferApplication.getCurrentApplication().getLoggedUser() == null) { setLoggedOutView();//Start the program logged out } else { setLoggedInView(); } } private void setLoggedInView() { if (loggedInView == null) { loggedInView = new HorizontalLayout(); fileSelector1 = new UserFilesWidget(false); fileSelector2 = new UserFilesWidget(true); List<UserFilesWidget> widgets = new ArrayList<UserFilesWidget>(); widgets.add(fileSelector1); widgets.add(fileSelector2); mainWindow.setUserFilesWidgets(widgets); loggedInView.addComponent(fileSelector1); loggedInView.addComponent(fileSelector2); loggedInView.addComponent(new DifferProgramTabButtonPanel(this, mainWindow)); loggedInView.setSizeUndefined(); } this.removeAllComponents(); this.addComponent(loggedInView); this.setSizeUndefined(); } public void setLoggedOutView() { if (loggedOutView == null) { final DifferProgramTab parent = this; loggedOutView = new VerticalLayout(); loginPanel = new LoginRegisterComponent(mainWindow, new LoginListener() { @Override public void onLogin(LoginEvent event) { parent.login(event.getLoginParameter("username"), event.getLoginParameter("password")); } }); Button guestLogin = new Button("Guest Login"); guestLogin.addListener(new Listener() { @Override public void componentEvent(Event event) { parent.login(GUEST_USERNAME, null); } }); loggedOutView.addComponent(loginPanel); loggedOutView.addComponent(guestLogin); } this.removeAllComponents(); this.addComponent(loggedOutView); this.setSizeUndefined(); this.loggedInView = null; } private void login(String username, String password) { try { User user = null; DifferApplication app = DifferApplication.getCurrentApplication(); if (username.equals(GUEST_USERNAME)) { user = DifferApplication.getUserManager().getUserDAO().getUserByUserName("guest"); } else { user = DifferApplication.getUserManager().attemptLogin(username, password); } app.setLoggedUser(user); //User user = UserManager.getInstance().attemptLogin(event.getLoginParameter("username"), event.getLoginParameter("password")); setLoggedInView(); } catch (Exception ex) { DifferApplication.getCurrentApplication().getMainWindow().showNotification("Login Problem", "<br/>" + ex.getMessage(), Window.Notification.TYPE_WARNING_MESSAGE); } } public void setCustomView(Layout layout) { if (customViewWrapper == null) { customViewWrapper = new VerticalLayout(); customLayoutBackButton = new Button("Back"); customLayoutBackButton.addListener(customViewWrapperBackButtonListener); } customViewWrapper.removeAllComponents(); customViewWrapper.addComponent(customLayoutBackButton); customViewWrapper.addComponent(layout); customViewWrapper.setSizeUndefined(); this.removeAllComponents(); this.addComponent(customViewWrapper); this.setSizeUndefined(); } public Image[] getSelectedImages() { Set<Image> images1 = fileSelector1.getSelectedImages(); Set<Image> images2 = fileSelector2.getSelectedImages(); if (images1 == null) { images1 = Collections.emptySet(); } if (images2 == null) { images2 = Collections.emptySet(); } Image[] result = new Image[images1.size() + images2.size()]; int index = 0; for (Image image : images1) { result[index] = image; index++; } for (Image image : images2) { result[index] = image; index++; } return result; } private Button.ClickListener customViewWrapperBackButtonListener = new Button.ClickListener() { @Override public void buttonClick(ClickEvent event) { this_internal.removeAllComponents(); this_internal.setLoggedInView(); } }; }