org.hibernate.eclipse.mapper.editors.ReverseEngineeringEditor.java Source code

Java tutorial

Introduction

Here is the source code for org.hibernate.eclipse.mapper.editors.ReverseEngineeringEditor.java

Source

/*
 * JBoss, Home of Professional Open Source
 * Copyright 2005, JBoss Inc., and individual contributors as indicated
 * by the @authors tag. See the copyright.txt in the distribution for a
 * full listing of individual contributors.
 *
 * This is free software; you can redistribute it and/or modify it
 * under the terms of the GNU Lesser General Public License as
 * published by the Free Software Foundation; either version 2.1 of
 * the License, or (at your option) any later version.
 *
 * This software is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
 * Lesser General Public License for more details.
 *
 * You should have received a copy of the GNU Lesser General Public
 * License along with this software; if not, write to the Free
 * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
 * 02110-1301 USA, or see the FSF site: http://www.fsf.org.
 */
package org.hibernate.eclipse.mapper.editors;

import java.util.HashMap;
import java.util.Map;

import org.eclipse.core.runtime.CoreException;
import org.eclipse.jdt.core.IJavaProject;
import org.eclipse.jdt.internal.ui.dialogs.OptionalMessageDialog;
import org.eclipse.jface.dialogs.IDialogConstants;
import org.eclipse.jface.dialogs.MessageDialog;
import org.eclipse.jface.preference.IPreferenceStore;
import org.eclipse.jface.window.Window;
import org.eclipse.ui.IEditorInput;
import org.eclipse.ui.IEditorSite;
import org.eclipse.ui.IKeyBindingService;
import org.eclipse.ui.INestableKeyBindingService;
import org.eclipse.ui.PartInitException;
import org.eclipse.wst.sse.ui.StructuredTextEditor;
import org.eclipse.wst.xml.core.internal.provisional.IXMLPreferenceNames;
import org.eclipse.wst.xml.core.internal.provisional.document.IDOMDocument;
import org.hibernate.console.ConsoleConfiguration;
import org.hibernate.console.KnownConfigurations;
import org.hibernate.eclipse.console.HibernateConsolePlugin;
import org.hibernate.eclipse.console.model.IReverseEngineeringDefinition;
import org.hibernate.eclipse.console.utils.ProjectUtils;
import org.hibernate.eclipse.console.workbench.LazyDatabaseSchema;
import org.hibernate.eclipse.mapper.MapperMessages;
import org.hibernate.eclipse.mapper.MapperPlugin;
import org.hibernate.eclipse.mapper.editors.reveng.RevEngOverviewPage;
import org.hibernate.eclipse.mapper.editors.reveng.RevEngTableFilterPage;
import org.hibernate.eclipse.mapper.editors.reveng.RevEngTablesPage;
import org.hibernate.eclipse.mapper.editors.reveng.RevEngTypeMappingPage;
import org.hibernate.eclipse.mapper.editors.xpl.XMLFormEditorPart;
import org.hibernate.eclipse.mapper.model.DOMReverseEngineeringDefinition;
import org.hibernate.eclipse.nature.HibernateNature;
import org.hibernate.util.xpl.StringHelper;
import org.jboss.tools.hibernate.runtime.spi.IConfiguration;
import org.jboss.tools.hibernate.runtime.spi.IOverrideRepository;
import org.jboss.tools.hibernate.runtime.spi.IService;
import org.jboss.tools.hibernate.runtime.spi.ISettings;
import org.jboss.tools.hibernate.runtime.spi.ITableFilter;
import org.w3c.dom.Document;

public class ReverseEngineeringEditor extends XMLFormEditorPart {

    private StructuredTextEditor sourcePage;
    private DOMReverseEngineeringDefinition definition;

    private RevEngTableFilterPage tableFilterPage;
    private RevEngTypeMappingPage typeMappingsPage;
    private RevEngOverviewPage overviewsPage;
    private Map pageNameToIndex = new HashMap();
    private RevEngTablesPage tableProperties;

    public ReverseEngineeringEditor() {

    }

    public void init(IEditorSite site, IEditorInput input) throws PartInitException {
        super.init(site, input);
    }

    protected void addPages() {
        try {
            //getSite().getSelectionProvider().setSelection(StructuredSelection.EMPTY);
            super.addPages();
            initSourcePage();
            addFormPages();
        } catch (PartInitException e) {
            MapperPlugin.getDefault().getLogger()
                    .logException(MapperMessages.ReverseEngineeringEditor_could_not_create_graphical_viewer, e);
        }
    }

    private void addFormPages() throws PartInitException {
        int i = 0;
        overviewsPage = new RevEngOverviewPage(this);
        addPage(i, overviewsPage);
        setPageText(i, MapperMessages.ReverseEngineeringEditor_overview);
        pageNameToIndex.put(RevEngOverviewPage.PART_ID, new Integer(i));
        i++;

        typeMappingsPage = new RevEngTypeMappingPage(this);
        addPage(i, typeMappingsPage);
        setPageText(i, MapperMessages.ReverseEngineeringEditor_type_mappings);
        pageNameToIndex.put(RevEngTypeMappingPage.PART_ID, new Integer(i));
        i++;

        tableFilterPage = new RevEngTableFilterPage(this);
        addPage(i, tableFilterPage);
        setPageText(i, MapperMessages.ReverseEngineeringEditor_table_filters);
        pageNameToIndex.put(RevEngTableFilterPage.PART_ID, new Integer(i));
        i++;

        tableProperties = new RevEngTablesPage(this);
        addPage(i, tableProperties);
        setPageText(i, MapperMessages.ReverseEngineeringEditor_table_column);
        pageNameToIndex.put(RevEngTablesPage.PART_ID, new Integer(i));
        i++;

        int activePageIndex = getPreferenceStore().getInt(IXMLPreferenceNames.LAST_ACTIVE_PAGE);
        // firstly init overview page with configuration
        setActivePage(0);
        if ((activePageIndex >= 0) && (activePageIndex < getPageCount())) {
            setActivePage(activePageIndex);
        }
    }

    /*public void setActivePage(String string) {
       Integer number = (Integer) pageNameToIndex.get(string);
       if(number!=null) {
     setActivePage(number.intValue());
       }
    }*/

    private void initSourcePage() {
        int pageCount = getPageCount();
        for (int i = 0; i < pageCount; i++) {
            if (getEditor(i) instanceof StructuredTextEditor) {
                sourcePage = (StructuredTextEditor) getEditor(i);
                IDOMDocument document = getDocument(sourcePage);
                definition = new DOMReverseEngineeringDefinition(document);
            }
        }
    }

    private IDOMDocument getDocument(StructuredTextEditor source) {
        IDOMDocument document = (IDOMDocument) source.getAdapter(Document.class);
        return document;
    }

    protected void pageChange(int newPageIndex) {
        if (newPageIndex == 0) {
            IKeyBindingService service = getSite().getKeyBindingService();
            if (service instanceof INestableKeyBindingService) {
                INestableKeyBindingService nestableService = (INestableKeyBindingService) service;
                nestableService.activateKeyBindingService(null);
            }
        }
        saveLastActivePageIndex(newPageIndex);
        super.pageChange(newPageIndex);
    }

    public IReverseEngineeringDefinition getReverseEngineeringDefinition() {
        return definition;
    }

    public String getConsoleConfigurationName() {
        return overviewsPage.getConsoleConfigName();
    }

    protected void setConsoleConfigurationName(String name) {
        overviewsPage.setConsoleConfigName(name);
    }

    public HibernateNature getHibernateNature() throws CoreException {
        if (getEditorInput() != null) {
            IJavaProject project = ProjectUtils.findJavaProject(getEditorInput());
            return HibernateNature.getHibernateNature(project);
        } else {
            return null;
        }
    }

    public LazyDatabaseSchema getLazyDatabaseSchema() {
        try {
            ConsoleConfiguration configuration = KnownConfigurations.getInstance()
                    .find(getConsoleConfigurationName());
            if (configuration == null) {
                configuration = askForConsoleConfiguration();
                if (configuration == null) {
                    return null;
                } else {
                    setConsoleConfigurationName(configuration.getName());
                }
            }

            org.hibernate.eclipse.console.model.ITableFilter[] tableFilters = getReverseEngineeringDefinition()
                    .getTableFilters();
            IConfiguration cfg = configuration.buildWith(null, false);
            ISettings settings = configuration.getSettings(cfg);

            IService service = configuration.getHibernateExtension().getHibernateService();
            IOverrideRepository repository = service.newOverrideRepository();
            boolean hasIncludes = false;
            for (int i = 0; i < tableFilters.length; i++) {
                org.hibernate.eclipse.console.model.ITableFilter filter = tableFilters[i];
                ITableFilter tf = service.newTableFilter();
                tf.setExclude(filter.getExclude());
                if (filter.getExclude() != null && !filter.getExclude().booleanValue()) {
                    hasIncludes = true;
                }
                tf.setMatchCatalog(filter.getMatchCatalog());
                tf.setMatchName(filter.getMatchName());
                tf.setMatchSchema(filter.getMatchSchema());
                repository.addTableFilter(tf);
            }
            ITableFilter tf = service.newTableFilter();
            tf.setExclude(Boolean.FALSE);
            tf.setMatchCatalog(".*"); //$NON-NLS-1$
            tf.setMatchSchema(".*"); //$NON-NLS-1$
            tf.setMatchName(".*"); //$NON-NLS-1$
            repository.addTableFilter(tf);
            String dialogId = ReverseEngineeringEditor.class.getName();
            if (tableFilters.length == 0 && OptionalMessageDialog.isDialogEnabled(dialogId)) {
                int returnCode = OptionalMessageDialog.open(dialogId, getContainer().getShell(),
                        MapperMessages.ReverseEngineeringEditor_no_filters_defined, null,
                        MapperMessages.ReverseEngineeringEditor_no_filters_has_been_defined, MessageDialog.QUESTION,
                        new String[] { IDialogConstants.YES_LABEL, IDialogConstants.NO_LABEL }, 0);
                if (returnCode == Window.CANCEL)
                    return null;
            }

            LazyDatabaseSchema lazyDatabaseSchema = new LazyDatabaseSchema(configuration,
                    repository.getReverseEngineeringStrategy(service.newDefaultReverseEngineeringStrategy()));

            return lazyDatabaseSchema;
        } catch (Exception he) {
            HibernateConsolePlugin.getDefault().showError(getContainer().getShell(),
                    MapperMessages.ReverseEngineeringEditor_error_while_refreshing_databasetree, he);
            return null;
        }
    }

    private ConsoleConfiguration askForConsoleConfiguration() {
        ChooseConsoleConfigurationDialog dialog = new ChooseConsoleConfigurationDialog(getContainer().getShell(),
                ""); //$NON-NLS-1$
        dialog.prompt();
        if (StringHelper.isEmpty(dialog.getSelectedConfigurationName())) {
            return null;
        } else {
            return KnownConfigurations.getInstance().find(dialog.getSelectedConfigurationName()); // TODO: double check to see if an result is actually returned ?
        }
    }

    private void saveLastActivePageIndex(int newPageIndex) {
        // save the last active page index to preference store
        getPreferenceStore().setValue(IXMLPreferenceNames.LAST_ACTIVE_PAGE, newPageIndex);
    }

    private IPreferenceStore getPreferenceStore() {
        return MapperPlugin.getDefault().getPreferenceStore();
    }

}