
org.opensingular.requirement.module.wicket.buttons.NewRequirementLink Maven / Gradle / Ivy
/*
* Copyright (C) 2016 Singular Studios (a.k.a Atom Tecnologia) - www.opensingular.com
*
* 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.opensingular.requirement.module.wicket.buttons;
import org.apache.wicket.markup.html.link.Link;
import org.apache.wicket.markup.html.panel.Panel;
import org.apache.wicket.model.IModel;
import org.apache.wicket.model.StringResourceModel;
import org.opensingular.lib.commons.lambda.ISupplier;
import org.opensingular.lib.commons.ui.Icon;
import org.opensingular.lib.wicket.util.metronic.menu.DropdownMenu;
import org.opensingular.requirement.module.RequirementDefinition;
import org.opensingular.requirement.module.service.RequirementDefinitionService;
import org.opensingular.requirement.module.wicket.NewRequirementUrlBuilder;
import javax.inject.Inject;
import java.util.LinkedHashSet;
import java.util.Map;
import java.util.Optional;
import java.util.Set;
import java.util.stream.Collectors;
import java.util.stream.Stream;
import static org.opensingular.lib.wicket.util.util.WicketUtils.$b;
import static org.opensingular.lib.wicket.util.util.WicketUtils.$m;
public class NewRequirementLink extends Panel {
private final String url;
private final Map params;
private IModel>> requirements;
private IModel labelModel = new StringResourceModel("label.button.insert", this, null);
@Inject
private RequirementDefinitionService requirementDefinitionService;
public NewRequirementLink(String id, String url, Map params,
IModel>> requirements) {
this(id, null, url, params, requirements);
}
public NewRequirementLink(String id, IModel labelModel, String url,
Map params, IModel>> requirements) {
super(id);
this.url = url;
this.labelModel = labelModel == null ? this.labelModel : labelModel;
this.params = params;
this.requirements = requirements;
buildButtons();
}
protected void buildButtons() {
addSingleButton(() -> Optional.ofNullable(requirements.getObject()).map(Set::size).orElse(0) == 1);
addDropdownButton(() -> Optional.ofNullable(requirements.getObject()).map(Set::size).orElse(0) > 1);
}
protected void addSingleButton(ISupplier visibleSupplier) {
Optional> findFirst = getRequirementsStream().findFirst();
if (findFirst.isPresent()) {
Link newButton = buildLink("_botao", labelModel, findFirst.get());
newButton.add($b.visibleIf(visibleSupplier));
this.add(newButton);
}
}
private Link buildLink(String id, IModel labelModel, RequirementDefinition requirement) {
String url = NewRequirementLink.this.buildURL(requirement);
return new Link(id) {
@Override
protected void onConfigure() {
super.onConfigure();
this.add($b.attr("href", url));
this.add($b.attr("target", "_blank"));
this.setBody(labelModel);
}
@Override
public void onClick() {
//DO NOTHING
}
};
}
protected void addDropdownButton(ISupplier visibleSupplier) {
final DropdownMenu dropdownMenu = new DropdownMenu("_novos", "Novo", Icon.of("fa fa-file"));
dropdownMenu.add($b.visibleIf(visibleSupplier));
dropdownMenu.add($b.onConfigure(c -> {
if (visibleSupplier.get()) {
for (RequirementDefinition r : getRequirementsStream().collect(Collectors.toList())) {
String name = r.getName();
dropdownMenu.adicionarMenu(id -> buildLink(id, $m.ofValue(name), r));
}
}
}));
this.add(dropdownMenu);
}
private Stream> getRequirementsStream() {
return requirementDefinitionService.getRequirements().stream()
.filter(req -> requirements.getObject().stream().anyMatch(reqClass -> reqClass.isAssignableFrom(req.getClass())));
}
protected String buildURL(RequirementDefinition requirement) {
return new NewRequirementUrlBuilder(url, requirement.getKey()).getURL(params);
}
@Override
protected boolean getStatelessHint() {
return true;
}
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy