/* * Copyright 2016 Red Hat, Inc. and/or its affiliates. * * Licensed 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.uberfire.ext.security.management.client.widgets.management.editor.user; import java.util.ArrayList; import java.util.Collection; import java.util.List; import java.util.Map; import javax.annotation.PostConstruct; import javax.enterprise.context.Dependent; import javax.enterprise.event.Event; import javax.inject.Inject; import com.google.gwt.editor.client.Editor; import com.google.gwt.editor.client.EditorError; import com.google.gwt.user.client.ui.IsWidget; import com.google.gwt.user.client.ui.Widget; import org.gwtbootstrap3.client.ui.form.validator.Validator; import org.uberfire.client.mvp.UberView; import org.uberfire.ext.security.management.client.editor.HasRestrictedValues; import org.uberfire.ext.security.management.client.resources.i18n.UsersManagementWidgetsConstants; import org.uberfire.ext.security.management.client.widgets.management.events.CreateUserAttributeEvent; /** * <p>Presenter class for creating a new user attribute.</p> */ @Dependent public class NewUserAttributeEditor implements IsWidget, HasRestrictedValues<Collection<String>> { public View view; final Validator<String> attributeValueValidator = new Validator<String>() { @Override public int getPriority() { return 1; } @Override public List<EditorError> validate(final Editor<String> editor, final String s) { final List<EditorError> result = new ArrayList<EditorError>(); final String errorMsg = validateAttributeValue(s); if (errorMsg != null) { EditorError e = view.createAttributeValueError(s, errorMsg); result.add(e); } return result; } }; Event<CreateUserAttributeEvent> createUserAttributeEventEvent; Collection<String> restrictedAttributeNames; final Validator<String> attributeNameValidator = new Validator<String>() { @Override public int getPriority() { return 0; } @Override public List<EditorError> validate(final Editor<String> editor, final String s) { final List<EditorError> result = new ArrayList<EditorError>(); final String errorMsg = validateAttributeName(s); if (errorMsg != null) { EditorError e = view.createAttributeNameError(s, errorMsg); result.add(e); } return result; } }; /* ****************************************************************************************************** PUBLIC PRESENTER API ****************************************************************************************************** */ @Inject public NewUserAttributeEditor(final View view, final Event<CreateUserAttributeEvent> createUserAttributeEventEvent) { this.view = view; this.createUserAttributeEventEvent = createUserAttributeEventEvent; } @Override public Widget asWidget() { return view.asWidget(); } @PostConstruct public void init() { view.init(this); view.configure(attributeNameValidator, attributeValueValidator); } public NewUserAttributeEditor showAddButton() { view.reset().setShowAddButton(true).setShowForm(false); return this; } public NewUserAttributeEditor showForm() { view.reset().setShowAddButton(false).setShowForm(true); return this; } public NewUserAttributeEditor clear() { showAddButton(); restrictedAttributeNames = null; return this; } /* ****************************************************************************************************** VIEW CALLBACKS ****************************************************************************************************** */ @Override public void setRestrictedValues(final Collection<String> value) { this.restrictedAttributeNames = value; } void onNewAttributeClick() { showForm(); } void onCancel() { showAddButton(); } /* ****************************************************************************************************** PRIVATE METHODS AND VALIDATORS ****************************************************************************************************** */ void addNewAttribute(final String name, final String value) { final Map.Entry<String, String> attr = createAttributeEntry(name, value); createUserAttributeEventEvent.fire(new CreateUserAttributeEvent(this, attr)); } String validateAttributeName(final String value) { if (isEmpty(value)) { return UsersManagementWidgetsConstants.INSTANCE.nameIsMandatory(); } if (containsAttribute(value)) { return UsersManagementWidgetsConstants.INSTANCE.attributeAlreadyExists(); } return null; } String validateAttributeValue(final String value) { if (isEmpty(value)) { return UsersManagementWidgetsConstants.INSTANCE.valueIsMandatory(); } return null; } private Map.Entry<String, String> createAttributeEntry(final String key, final String value) { return new Map.Entry<String, String>() { @Override public String getKey() { return key; } @Override public String getValue() { return value; } @Override public String setValue(String value) { return null; } }; } private boolean containsAttribute(final String key) { return key != null && this.restrictedAttributeNames != null && restrictedAttributeNames.contains(key); } private boolean isEmpty(final String str) { return str == null || str.trim().length() == 0; } public interface View extends UberView<NewUserAttributeEditor> { View configure(Validator<String> attributeNameValidator, Validator<String> attributeValueValidator); EditorError createAttributeNameError(String value, String message); EditorError createAttributeValueError(String value, String message); View reset(); View setShowAddButton(boolean isCreateButton); View setShowForm(boolean isCreationForm); } }