Java tutorial
/* * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * KIND, either express or implied. See the License for the * specific language governing permissions and limitations * under the License. */ package org.apache.usergrid.chop.webapp.view.user; import java.io.IOException; import java.util.HashMap; import java.util.Map; import com.vaadin.shared.ui.label.ContentMode; import com.vaadin.ui.Label; import com.vaadin.ui.TabSheet; import org.apache.usergrid.chop.webapp.view.util.UIUtil; import org.junit.Assert; import org.apache.commons.lang.StringUtils; import org.apache.usergrid.chop.api.ProviderParams; import org.apache.usergrid.chop.stack.User; import org.apache.usergrid.chop.webapp.dao.ProviderParamsDao; import org.apache.usergrid.chop.webapp.dao.UserDao; import org.apache.usergrid.chop.webapp.dao.model.BasicProviderParams; import org.apache.usergrid.chop.webapp.service.InjectorFactory; import org.apache.usergrid.chop.webapp.service.shiro.ShiroRealm; import org.apache.usergrid.chop.webapp.view.main.TabSheetManager; import com.vaadin.ui.AbsoluteLayout; import com.vaadin.ui.Button; import com.vaadin.ui.FormLayout; import com.vaadin.ui.Notification; import com.vaadin.ui.PasswordField; import com.vaadin.ui.TextField; public class UserLayout extends AbsoluteLayout { private final UserDao userDao = InjectorFactory.getInstance(UserDao.class); private final ProviderParamsDao providerParamsDao = InjectorFactory.getInstance(ProviderParamsDao.class); private final TextField usernameField = new TextField("Username:"); private final PasswordField passwordField = new PasswordField("Password:"); private final TextField accessKeyField = new TextField("Access Key:"); private final TextField imageField = new TextField("Image ID:"); private final TextField instanceTypeField = new TextField("Instance Type:"); private final TextField secretKeyField = new TextField("Secret Key:"); private final TextField keyPairNameField = new TextField("Key Pair Name:"); private final Label formTitle = new Label("<b>User Information</b>", ContentMode.HTML); private final Button saveButton = new Button("Save"); private final Button deleteButton = new Button("Delete"); private final KeyListLayout keyListLayout = new KeyListLayout(); private final TabSheetManager tabSheetManager; private final String username; UserLayout(String username, TabSheetManager tabSheetManager) { this.username = username; this.tabSheetManager = tabSheetManager; addItems(); loadData(username); } UserLayout(String username, TabSheetManager tabSheetManager, boolean hasAuthority) { this.username = username; this.tabSheetManager = tabSheetManager; addItems(hasAuthority); loadData(username, hasAuthority); } private void loadData(String username) { if (StringUtils.isEmpty(username)) { deleteButton.setVisible(false); keyListLayout.setVisible(false); return; } keyListLayout.loadKeys(username); User user = userDao.get(username); ProviderParams providerParams = providerParamsDao.getByUser(username); usernameField.setValue(user.getUsername()); passwordField.setValue(user.getPassword()); accessKeyField.setValue(providerParams.getAccessKey()); imageField.setValue(providerParams.getImageId()); instanceTypeField.setValue(providerParams.getInstanceType()); secretKeyField.setValue(providerParams.getSecretKey()); keyPairNameField.setValue(providerParams.getKeyName()); } private void loadData(String username, boolean hasAuthority) { if (StringUtils.isEmpty(username)) { deleteButton.setVisible(false); keyListLayout.setVisible(false); return; } User user = userDao.get(username); ProviderParams providerParams = providerParamsDao.getByUser(username); usernameField.setValue(user.getUsername()); passwordField.setValue(user.getPassword()); // if user does not have authority, do not allow credential information to be viewed. if (!hasAuthority) { disableCredentialInformationView(); } else { keyListLayout.loadKeys(username); accessKeyField.setValue(providerParams.getAccessKey()); imageField.setValue(providerParams.getImageId()); instanceTypeField.setValue(providerParams.getInstanceType()); secretKeyField.setValue(providerParams.getSecretKey()); keyPairNameField.setValue(providerParams.getKeyName()); } } private void addItems() { FormLayout formLayout = addFormLayout(300, 350); formLayout.addComponent(formTitle); formLayout.addComponent(usernameField); formLayout.addComponent(passwordField); formLayout.addComponent(accessKeyField); formLayout.addComponent(imageField); formLayout.addComponent(instanceTypeField); formLayout.addComponent(secretKeyField); formLayout.addComponent(keyPairNameField); formLayout.addComponent(addButtonLayout()); addComponent(keyListLayout, "left: 650px; top: 50px;"); } private void addItems(boolean hasAuthority) { if (!hasAuthority) { FormLayout formLayout = addFormLayout(300, 150); formLayout.addComponent(formTitle); formLayout.addComponent(usernameField); formLayout.addComponent(passwordField); formLayout.addComponent(addButtonLayout()); } else { FormLayout formLayout = addFormLayout(300, 350); formLayout.addComponent(formTitle); formLayout.addComponent(usernameField); formLayout.addComponent(passwordField); formLayout.addComponent(accessKeyField); formLayout.addComponent(imageField); formLayout.addComponent(instanceTypeField); formLayout.addComponent(secretKeyField); formLayout.addComponent(keyPairNameField); formLayout.addComponent(addButtonLayout()); } addComponent(keyListLayout, "left: 650px; top: 50px;"); } private FormLayout addFormLayout(int x, int y) { FormLayout formLayout = new FormLayout(); formLayout.setWidth(String.format("%spx", x)); formLayout.setHeight(String.format("%spx", y)); formLayout.addStyleName("outlined"); formLayout.setSpacing(true); addComponent(formLayout, "left: 350px; top: 50px;"); return formLayout; } private AbsoluteLayout addButtonLayout() { AbsoluteLayout layout = new AbsoluteLayout(); layout.setWidth("100%"); layout.setHeight("50px"); layout.addComponent(saveButton, "left: 0px; top: 20px;"); saveButton.addClickListener(new Button.ClickListener() { public void buttonClick(Button.ClickEvent event) { saveButtonClicked(); } }); layout.addComponent(deleteButton, "left: 70px; top: 20px;"); deleteButton.addClickListener(new Button.ClickListener() { public void buttonClick(Button.ClickEvent event) { deleteButtonClicked(); } }); return layout; } private void deleteButtonClicked() { // Check if the selected user is the default user and it is tried to be deleted if (UserListWindow.getSelectedUser().equals(ShiroRealm.getDefaultUser())) { Notification.show("Error", "Default admin user cannot be deleted", Notification.Type.ERROR_MESSAGE); return; } if (!ShiroRealm.isAuthenticatedUserAdmin()) { Notification.show("Error", "Only an admin can delete a user", Notification.Type.ERROR_MESSAGE); return; } userDao.delete(username); close(); Notification.show("Success", "User deleted successfully", Notification.Type.HUMANIZED_MESSAGE); } private void saveButtonClicked() { String username = usernameField.getValue(); String password = passwordField.getValue(); // Check if the selected user is the default user and it's username is tried to be changed if (UserListWindow.getSelectedUser() != null && UserListWindow.getSelectedUser().equals(ShiroRealm.getDefaultUser()) && isUserNameChanged(username)) { Notification.show("Error", "Username of the default user cannot be changed", Notification.Type.ERROR_MESSAGE); return; } if (StringUtils.isEmpty(username) || StringUtils.isEmpty(password)) { Notification.show("Error", "Please enter username and password", Notification.Type.ERROR_MESSAGE); return; } try { // Update the information of an existing user if (UserListWindow.getSelectedUser() != null) { userDao.delete(UserListWindow.getSelectedUser()); userDao.save(new User(username, password)); UserListWindow.setSelectedUser(username); ShiroRealm.setAuthenticatedUser(username); BasicProviderParams newProviderParams = new BasicProviderParams(username, instanceTypeField.getValue(), accessKeyField.getValue(), secretKeyField.getValue(), imageField.getValue(), keyPairNameField.getValue()); ProviderParams oldProviderParams = providerParamsDao.getByUser(UserListWindow.getSelectedUser()); Map<String, String> keys = oldProviderParams != null ? oldProviderParams.getKeys() : new HashMap<String, String>(); newProviderParams.setKeys(keys); providerParamsDao.delete(UserListWindow.getSelectedUser()); providerParamsDao.save(newProviderParams); close(); Notification.show("Success", "User information updated successfully", Notification.Type.HUMANIZED_MESSAGE); } // Create a new user else { // Check if the new user exists in the system if (userDao.get(username) != null) { Notification.show("Error", "The username " + username + " already exists!", Notification.Type.ERROR_MESSAGE); return; } doSaveUser(username, password); } } catch (Exception e) { Notification.show("Error", "Error to save user: " + e.getMessage(), Notification.Type.ERROR_MESSAGE); } } public void disableCredentialInformationView() { usernameField.setEnabled(false); passwordField.setEnabled(false); saveButton.setEnabled(false); keyListLayout.setEnabled(false); keyListLayout.disableKeyLabels(); keyPairNameField.setVisible(false); accessKeyField.setVisible(false); imageField.setVisible(false); instanceTypeField.setVisible(false); secretKeyField.setVisible(false); } private boolean isUserNameChanged(final String username) { if (UserListWindow.getSelectedUser() == null) { return false; } return !username.equals(UserListWindow.getSelectedUser()); } private void doSaveUser(String username, String password) throws IOException { Assert.assertTrue(userDao.get(username) == null); userDao.save(new User(username, password)); BasicProviderParams newProviderParams = new BasicProviderParams(username, instanceTypeField.getValue(), accessKeyField.getValue(), secretKeyField.getValue(), imageField.getValue(), keyPairNameField.getValue()); ProviderParams oldProviderParams = providerParamsDao.getByUser(username); Map<String, String> keys = oldProviderParams != null ? oldProviderParams.getKeys() : new HashMap<String, String>(); newProviderParams.setKeys(keys); providerParamsDao.save(newProviderParams); close(); Notification.show("Success", "User saved successfully", Notification.Type.HUMANIZED_MESSAGE); } private void close() { tabSheetManager.removeAll(); } }