package org.brixcms.plugin.jpa.web.admin;
import java.io.Serializable;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Collections;
import java.util.List;
import org.apache.wicket.feedback.FeedbackMessage;
import org.apache.wicket.feedback.IFeedbackMessageFilter;
import org.apache.wicket.model.IModel;
import org.brixcms.plugin.jpa.JpaPluginLocator;
import org.brixcms.plugin.jpa.Persistable;
import org.brixcms.plugin.site.admin.NodeManagerTabbedPanel;
import org.brixcms.web.BrixFeedbackPanel;
import org.brixcms.web.generic.BrixGenericPanel;
import org.brixcms.web.tab.IBrixTab;
/**
* @author dan.simko@gmail.com
*/
@SuppressWarnings("serial")
public class EntityManagerEditorPanel<T extends Persistable<ID>, ID extends Serializable, F extends Serializable> extends BrixGenericPanel<T> {
private final JpaPluginLocator<T, ID, F> pluginLocator;
public EntityManagerEditorPanel(String id, IModel<T> model, final JpaPluginLocator<T, ID, F> pluginLocator) {
super(id, model);
this.pluginLocator = pluginLocator;
add(new SessionFeedbackPanel("sessionFeedback"));
add(new NodeManagerTabbedPanel("tabbedPanel", getTabs(getModel())));
}
private List<IBrixTab> getTabs(IModel<T> entityModel) {
T entity = entityModel.getObject();
final Collection<ManageEntityTabFactory<T>> factories;
if (entity != null) {
factories = pluginLocator.getPlugin().getManageEntityTabFactories();
} else {
factories = Collections.emptyList();
}
if (!factories.isEmpty()) {
List<IBrixTab> result = new ArrayList<IBrixTab>();
for (ManageEntityTabFactory<T> f : factories) {
List<IBrixTab> tabs = f.getManageNodeTabs(entityModel);
if (tabs != null) {
result.addAll(tabs);
}
}
return result;
} else {
return Collections.emptyList();
}
}
private static class SessionFeedbackPanel extends BrixFeedbackPanel {
public SessionFeedbackPanel(String id) {
super(id, new Filter());
}
@Override
public boolean isVisible() {
List<?> messages = getFeedbackMessagesModel().getObject();
return messages != null && !messages.isEmpty();
}
private static class Filter implements IFeedbackMessageFilter {
public boolean accept(FeedbackMessage message) {
return message.getReporter() == null;
}
};
};
}