package fr.openwide.maven.artifact.notifier.web.application.url.model;
import org.apache.wicket.injection.Injector;
import org.apache.wicket.model.AbstractWrapModel;
import org.apache.wicket.model.IModel;
import org.apache.wicket.spring.injection.annot.SpringBean;
import org.apache.wicket.util.lang.Args;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import fr.openwide.core.jpa.externallinkchecker.business.model.ExternalLinkWrapper;
import fr.openwide.core.jpa.externallinkchecker.business.service.IExternalLinkWrapperService;
import fr.openwide.maven.artifact.notifier.core.util.init.service.ProjectImportDataServiceImpl;
public class ExternalLinkWrapperWrapModel extends AbstractWrapModel<String> {
private static final long serialVersionUID = 6365460591958814644L;
private static final Logger LOGGER = LoggerFactory.getLogger(ProjectImportDataServiceImpl.class);
@SpringBean
private IExternalLinkWrapperService externalLinkWrapperService;
private IModel<ExternalLinkWrapper> wrappedModel;
public ExternalLinkWrapperWrapModel(IModel<ExternalLinkWrapper> wrappedModel) {
Args.notNull(wrappedModel, "wrappedModel");
this.wrappedModel = wrappedModel;
Injector.get().inject(this);
}
@Override
public String getObject() {
ExternalLinkWrapper link = wrappedModel.getObject();
return link != null ? link.getUrl() : null;
}
@Override
public void setObject(String url) {
if (url != null && wrappedModel.getObject() == null) {
wrappedModel.setObject(new ExternalLinkWrapper(url));
} else if (url != null) {
wrappedModel.getObject().setUrl(url);
} else {
// NOTE: This is a workaround to the orphanRemoval bug on one-to-one relationship
// https://hibernate.atlassian.net/browse/HHH-5559
// https://hibernate.atlassian.net/browse/HHH-6484
ExternalLinkWrapper link = wrappedModel.getObject();
wrappedModel.setObject(null);
if (link != null) {
try {
externalLinkWrapperService.delete(link);
} catch (Exception e) {
LOGGER.error("An error occurred while deleting the link " + link.getUrl());
}
}
}
}
@Override
public IModel<?> getWrappedModel() {
return wrappedModel;
}
}