No, I don't have any additional reference, we figured this all out by just 
reading the source for other dialogs and exploring the available classes.

You probably don't need to provide custom implementations of the classes you 
mentioned, but you probably do need to provide a custom form dialog definition 
for your component. Our configuration looks like this:

[code]/modules
  /your-own-module
    /dialogs
      /components
        /your-custom-component
          /class: org.example.YourCustomFormDialogDefinition[/code]

The definition class looks like this:

[code]public class YourCustomFormDialogDefinition extends 
ConfiguredFormDialogDefinition {
    @Override
    public void setPresenterClass(Class<? extends DialogPresenter> 
presenterClass) {
        super.setPresenterClass(YourCustomFormDialogPresenter.class);
    }
}[/code]

And then the form dialog presenter class will look something like this:

[code]public class YourCustomFormDialogPresenter extends 
FormDialogPresenterImpl {
    @Inject
    public YourCustomFormDialogPresenter(DialogDefinitionRegistry 
dialogDefinitionRegistry, FormBuilder formBuilder, ComponentProvider 
componentProvider, DialogActionExecutor executor, FormView view, I18nizer 
i18nizer, SimpleTranslator i18n, AvailabilityChecker checker, ContentConnector 
contentConnector) {
        super(dialogDefinitionRegistry, formBuilder, componentProvider, 
executor, view, i18nizer, i18n, checker, contentConnector);
        // You can add any additional injectable components you need to the 
constructor signature.
    }

    @Override
    public DialogView start(Item item, String dialogId, UiContext uiContext, 
EditorCallback callback) {
        FormDialogDefinition formDialogDefinition;
        // Construct your formDialogDefinition programmatically using code
        // Below is an example of what this might look like, adapted from our 
code, but you're free to do whatever you want of course
        if (item instanceof AbstractJcrNodeAdapter) {
            Node node = ((AbstractJcrNodeAdapter) item).getJcrItem();
            if (node != null) {
                if (isCustomComponent(node)) {
                    formDialogDefinition = 
getFormDialogForExistingCustomComponent(); // This method can use FormBuilder, 
etc. to programmatically build a form dialog definition
                } else if (isComponent(node)) {
                    try {
                        Node area = node.getParent();
                        delete(node);
                        formDialogDefinition = getFormDialogForNewComponent(); 
// This method can use FormBuilder, etc. to programmatically build a form 
dialog definition
                    } catch (RepositoryException e) {
                        log.error("I don't know how to handle {} without a 
parent", e);
                    }
                } else if (isArea(node)) {
                    formDialogDefinition = getFormDialogForNewComponent(); // 
This method can use FormBuilder, etc. to programmatically build a form dialog 
definition
                } else {
                    log.error("I don't know how to handle {}", node);
                }
            }
        } else {
            log.error("Can't get node from item {}", item);
        }
        return start(item, formDialogDefinition, uiContext, callback);
    }
}[/code]

I hope this helps a little. Understanding how all these pieces fit together can 
be quite challenging (it took us quite a while), so you might want to spend 
some time looking around Magnolia's own dialog presenters and checking out the 
available classes in that corner of the codebase.

-- 
Context is everything: 
http://forum.magnolia-cms.com/forum/thread.html?threadId=bbab5514-b2f4-4ebb-a02d-c77b84fe9555


----------------------------------------------------------------
For list details, see http://www.magnolia-cms.com/community/mailing-lists.html
Alternatively, use our forums: http://forum.magnolia-cms.com/
To unsubscribe, E-mail to: <user-list-unsubscr...@magnolia-cms.com>
----------------------------------------------------------------

Reply via email to