org.neo4j.neoclipse.entitygen.GenerateEntityDialog.java Source code

Java tutorial

Introduction

Here is the source code for org.neo4j.neoclipse.entitygen.GenerateEntityDialog.java

Source

/**
 * Licensed to Neo Technology under one or more contributor
 * license agreements. See the NOTICE file distributed with
 * this work for additional information regarding copyright
 * ownership. Neo Technology licenses this file to you 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.neo4j.neoclipse.entitygen;

import java.io.File;
import java.util.List;

import org.eclipse.jface.dialogs.IDialogConstants;
import org.eclipse.jface.dialogs.TitleAreaDialog;
import org.eclipse.jface.preference.DirectoryFieldEditor;
import org.eclipse.jface.util.IPropertyChangeListener;
import org.eclipse.jface.util.PropertyChangeEvent;
import org.eclipse.swt.SWT;
import org.eclipse.swt.events.KeyEvent;
import org.eclipse.swt.events.KeyListener;
import org.eclipse.swt.layout.GridData;
import org.eclipse.swt.layout.GridLayout;
import org.eclipse.swt.widgets.Button;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Control;
import org.eclipse.swt.widgets.Label;
import org.eclipse.swt.widgets.Shell;
import org.eclipse.swt.widgets.Text;
import org.neo4j.neoclipse.Activator;
import org.neo4j.neoclipse.editor.NodeWrapper;
import org.neo4j.neoclipse.graphdb.GraphDbServiceManager;
import org.neo4j.neoclipse.view.ErrorMessage;

/**
 * @author Radhakrishna Kalyan
 * 
 */
public class GenerateEntityDialog extends TitleAreaDialog {

    private static final int SIZING_TEXT_FIELD_WIDTH = 250;

    private Text packageName;
    private Text classNamePattern;
    private DirectoryFieldEditor directory;

    public GenerateEntityDialog(Shell parentShell) {
        super(parentShell);
    }

    @Override
    protected void configureShell(Shell shell) {
        super.configureShell(shell);
        shell.setText("Entity Generation");
    }

    @Override
    protected void createButtonsForButtonBar(Composite parent) {

        super.createButtonsForButtonBar(parent);
        validate();
    }

    @Override
    protected Control createContents(Composite parent) {

        Control contents = super.createContents(parent);
        setTitle("Entity Generation");
        return contents;
    }

    @Override
    protected Control createDialogArea(Composite parent) {

        // top level composite
        Composite parentComposite = (Composite) super.createDialogArea(parent);

        // create a composite with standard margins and spacing
        Composite composite = new Composite(parentComposite, SWT.NONE);
        GridLayout layout = new GridLayout();
        layout.marginHeight = convertVerticalDLUsToPixels(IDialogConstants.VERTICAL_MARGIN);
        layout.marginWidth = convertHorizontalDLUsToPixels(IDialogConstants.HORIZONTAL_MARGIN);
        layout.verticalSpacing = convertVerticalDLUsToPixels(IDialogConstants.VERTICAL_SPACING);
        layout.horizontalSpacing = convertHorizontalDLUsToPixels(IDialogConstants.HORIZONTAL_SPACING);
        composite.setLayout(layout);
        composite.setLayoutData(new GridData(GridData.FILL_BOTH));
        composite.setFont(parentComposite.getFont());

        Composite nameGroup = new Composite(composite, SWT.NONE);
        layout = new GridLayout();
        layout.numColumns = 3;
        layout.marginWidth = 10;
        nameGroup.setLayout(layout);
        GridData data = new GridData(SWT.FILL, SWT.CENTER, true, false);
        nameGroup.setLayoutData(data);

        Label label = new Label(nameGroup, SWT.WRAP);
        label.setText(("Package Name *"));
        packageName = new Text(nameGroup, SWT.BORDER);
        data = new GridData(GridData.HORIZONTAL_ALIGN_FILL | GridData.GRAB_HORIZONTAL);
        data.horizontalSpan = 2;
        data.widthHint = SIZING_TEXT_FIELD_WIDTH;
        packageName.setText("com.example.neo4j.persistence");
        packageName.setLayoutData(data);
        packageName.addKeyListener(new KeyListener() {

            @Override
            public void keyPressed(org.eclipse.swt.events.KeyEvent e) {

                validate();
            };

            @Override
            public void keyReleased(org.eclipse.swt.events.KeyEvent e) {

                validate();
            };
        });

        Label label1 = new Label(nameGroup, SWT.WRAP);
        label1.setText(("Class Name Property*"));
        classNamePattern = new Text(nameGroup, SWT.BORDER);
        data = new GridData(GridData.HORIZONTAL_ALIGN_FILL | GridData.GRAB_HORIZONTAL);
        data.horizontalSpan = 2;
        data.widthHint = SIZING_TEXT_FIELD_WIDTH;
        classNamePattern.setText("classname");
        classNamePattern.setLayoutData(data);
        classNamePattern.addKeyListener(new KeyListener() {

            @Override
            public void keyPressed(org.eclipse.swt.events.KeyEvent e) {

                validate();
            };

            @Override
            public void keyReleased(org.eclipse.swt.events.KeyEvent e) {

                validate();
            };
        });

        directory = new DirectoryFieldEditor("Directory", "Directory *", nameGroup);
        directory.getTextControl(nameGroup).addKeyListener(new KeyListener() {

            @Override
            public void keyReleased(KeyEvent arg0) {
                validate();
            }

            @Override
            public void keyPressed(KeyEvent arg0) {
                validate();
            }
        });
        directory.setPropertyChangeListener(new IPropertyChangeListener() {

            @Override
            public void propertyChange(PropertyChangeEvent event) {
                validate();

            }
        });

        new Label(nameGroup, SWT.NONE);
        Label label3 = new Label(nameGroup, SWT.WRAP);
        label3.setText(("ex: C:/neo4j/stubs "));
        data = new GridData(GridData.HORIZONTAL_ALIGN_FILL | GridData.GRAB_HORIZONTAL);
        data.horizontalSpan = 2;
        data.widthHint = SIZING_TEXT_FIELD_WIDTH;
        label3.setLayoutData(data);

        new Label(nameGroup, SWT.NONE);

        Composite connectionPropertiesComposite = new Composite(nameGroup, SWT.NONE);
        connectionPropertiesComposite.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, false, false));
        GridLayout gridLayout = new GridLayout();
        gridLayout.numColumns = 2;
        gridLayout.marginWidth = 0;
        connectionPropertiesComposite.setLayout(gridLayout);
        data = new GridData(GridData.HORIZONTAL_ALIGN_FILL | GridData.GRAB_HORIZONTAL);
        data.horizontalSpan = 2;
        connectionPropertiesComposite.setLayoutData(data);

        data = new GridData(GridData.HORIZONTAL_ALIGN_FILL | GridData.GRAB_HORIZONTAL);
        data.horizontalSpan = 2;
        data.widthHint = SIZING_TEXT_FIELD_WIDTH;

        data = new GridData(GridData.HORIZONTAL_ALIGN_FILL | GridData.GRAB_HORIZONTAL);
        data.horizontalSpan = 2;
        data.widthHint = SIZING_TEXT_FIELD_WIDTH;

        new Label(nameGroup, SWT.NONE);

        connectionPropertiesComposite = new Composite(nameGroup, SWT.NONE);
        connectionPropertiesComposite.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, false, false));
        gridLayout = new GridLayout();
        gridLayout.numColumns = 2;
        gridLayout.marginWidth = 0;
        connectionPropertiesComposite.setLayout(gridLayout);
        data = new GridData(GridData.HORIZONTAL_ALIGN_FILL | GridData.GRAB_HORIZONTAL);
        data.horizontalSpan = 2;
        connectionPropertiesComposite.setLayoutData(data);

        return parentComposite;
    }

    @Override
    protected void okPressed() {

        try {
            final EntityList entityList = new EntityList(packageName.getText(), classNamePattern.getText());
            final GraphDbServiceManager gsm = Activator.getDefault().getGraphDbServiceManager();
            final List<NodeWrapper> nodeWrapperList = gsm.getAllNodes();

            for (NodeWrapper nodeWrapper : nodeWrapperList) {
                entityList.addNodeWrapper(nodeWrapper);
            }

            EntityWriter.generateEntities(new File(directory.getStringValue()), entityList);

            ErrorMessage.showDialog("EntityGen", "Stubs are generated at :" + directory.getStringValue());
            close();

        } catch (Exception e) {
            ErrorMessage.showDialog("Entity generation problem", e);
        }
    }

    @Override
    protected void setShellStyle(int newShellStyle) {
        super.setShellStyle(newShellStyle | SWT.RESIZE);
    }

    private void validate() {
        boolean enableDisable = false;

        if (!directory.getStringValue().trim().isEmpty() && (validatePackageName()) && (validateClassName())) {
            enableDisable = true;
        }

        Button okBtn = getButton(IDialogConstants.OK_ID);
        if (okBtn != null) {
            okBtn.setEnabled(enableDisable);
        }
    }

    private boolean validatePackageName() {
        if (packageName.getText().isEmpty() || packageName.getText().contains(" ")
                || !packageName.getText().matches(EntityWriter.PACKAGE_REG_EX)) {
            return false;
        }

        return true;
    }

    private boolean validateClassName() {
        if (classNamePattern.getText().isEmpty() || classNamePattern.getText().contains(" ")) {
            return false;
        }
        if (!classNamePattern.getText().matches(EntityWriter.CLASSNAME_REG_EX)) {
            return false;
        }

        return true;
    }

}