/**
* 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.brixcms.plugin.site;
import org.apache.wicket.markup.html.panel.Panel;
import org.apache.wicket.model.IModel;
import org.apache.wicket.request.IRequestHandler;
import org.brixcms.jcr.wrapper.BrixNode;
import org.brixcms.registry.ExtensionPoint;
import org.brixcms.web.nodepage.BrixPageParameters;
/**
* Plugin that handles node of certain type. This is not a global plugin, the scope if this plugin is {@link
* SitePlugin}. Main purpose of {@link SiteNodePlugin} is to respond when an URL for site node is requested.
*
* @author Matej Knopp
*/
public interface SiteNodePlugin {
public static ExtensionPoint<SiteNodePlugin> POINT = new ExtensionPoint<SiteNodePlugin>() {
public org.brixcms.registry.ExtensionPoint.Multiplicity getMultiplicity() {
return Multiplicity.COLLECTION;
}
public String getUuid() {
return SiteNodePlugin.class.getName();
}
};
/**
* This method returns a converter that is capable of converting the given node to a node this plugin can handle, or
* <code>null</code> if such converter does not exist.
*
* @param node
* @return
*/
NodeConverter getConverterForNode(BrixNode node);
/**
* Returns the user readable name of this plugin.
*
* @return
*/
String getName();
/**
* Returns the node type of nodes that this plugin can handle.
*
* @return
* @see BrixNode#setNodeType(String)
*/
String getNodeType();
/**
* Returns model caption of Create link for this plugin.
*
* @param parentNode
* @return
*/
public IModel<String> newCreateNodeCaptionModel(IModel<BrixNode> parentNode);
/**
* Returns an instance of panel that should create node of type this plugin can handle.
*
* @param id panel component id
* @param parentNode parent node of the new node
* @param goBack simple callback that should be invoked after node creation or on cancel
* @return panel instance
*/
Panel newCreateNodePanel(String id, IModel<BrixNode> parentNode, SimpleCallback goBack);
/**
* Returns the request target if this plugin is capable of creating a response for the node. Otherwise returns
* <code>null</code>
*
* @param nodeModel
* @param requestParameters
* @return
*/
IRequestHandler respond(IModel<BrixNode> nodeModel, BrixPageParameters brixPageParameters);
}