package fr.openwide.maven.artifact.notifier.web.application.administration.page;
import org.apache.wicket.markup.html.WebPage;
import org.apache.wicket.markup.html.link.Link;
import org.apache.wicket.model.IModel;
import org.apache.wicket.model.Model;
import org.apache.wicket.model.ResourceModel;
import org.apache.wicket.request.mapper.parameter.PageParameters;
import org.apache.wicket.spring.injection.annot.SpringBean;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import fr.openwide.core.wicket.more.link.descriptor.IPageLinkDescriptor;
import fr.openwide.core.wicket.more.link.descriptor.builder.LinkDescriptorBuilder;
import fr.openwide.core.wicket.more.markup.html.template.model.BreadCrumbElement;
import fr.openwide.maven.artifact.notifier.core.business.artifact.model.ArtifactDeprecationStatus;
import fr.openwide.maven.artifact.notifier.core.business.sync.service.IMavenSynchronizationService;
import fr.openwide.maven.artifact.notifier.core.config.application.MavenArtifactNotifierConfigurer;
import fr.openwide.maven.artifact.notifier.web.application.administration.component.AdministrationArtifactSearchPanel;
import fr.openwide.maven.artifact.notifier.web.application.administration.component.ArtifactPortfolioPanel;
import fr.openwide.maven.artifact.notifier.web.application.administration.model.ArtifactDataProvider;
import fr.openwide.maven.artifact.notifier.web.application.administration.template.AdministrationTemplate;
public class AdministrationArtifactPortfolioPage extends AdministrationTemplate {
private static final long serialVersionUID = 1824247169136460059L;
private static final Logger LOGGER = LoggerFactory.getLogger(AdministrationArtifactPortfolioPage.class);
@SpringBean
private MavenArtifactNotifierConfigurer configurer;
@SpringBean
private IMavenSynchronizationService mavenSynchronizationService;
public static IPageLinkDescriptor linkDescriptor() {
return new LinkDescriptorBuilder()
.page(AdministrationArtifactPortfolioPage.class)
.build();
}
public AdministrationArtifactPortfolioPage(PageParameters parameters) {
super(parameters);
addBreadCrumbElement(new BreadCrumbElement(new ResourceModel("navigation.administration.artifact"),
AdministrationArtifactPortfolioPage.linkDescriptor()));
// Synchronize button
add(new Link<Void>("syncAllBtn") {
private static final long serialVersionUID = 1L;
@Override
public void onClick() {
try {
mavenSynchronizationService.synchronizeAllArtifactsAndNotifyUsers();
getSession().success(getString("administration.artifact.syncAll.success"));
} catch (Exception e) {
LOGGER.error("Error occured while synchronizing artifacts", e);
getSession().error(getString("administration.artifact.syncAll.error"));
}
}
});
// Refresh latest versions button
add(new Link<Void>("refreshAllBtn") {
private static final long serialVersionUID = 1L;
@Override
public void onClick() {
try {
mavenSynchronizationService.refreshAllLatestVersions();
getSession().success(getString("administration.artifact.refreshAll.success"));
} catch (Exception e) {
LOGGER.error("Error occured while refreshing artifacts", e);
getSession().error(getString("administration.artifact.refreshAll.error"));
}
}
});
IModel<String> searchTermModel = Model.of("");
IModel<ArtifactDeprecationStatus> deprecationModel = Model.of();
ArtifactPortfolioPanel portfolioPanel = new ArtifactPortfolioPanel("portfolio",
new ArtifactDataProvider(searchTermModel, deprecationModel), configurer.getPortfolioItemsPerPage());
add(portfolioPanel);
add(new AdministrationArtifactSearchPanel("searchPanel", portfolioPanel.getPageable(), searchTermModel, deprecationModel));
}
@Override
protected Class<? extends WebPage> getSecondMenuPage() {
return AdministrationArtifactPortfolioPage.class;
}
}