org.wso2.developerstudio.eclipse.artifact.brs.ui.dialog.FactsDialog.java Source code

Java tutorial

Introduction

Here is the source code for org.wso2.developerstudio.eclipse.artifact.brs.ui.dialog.FactsDialog.java

Source

/*
 * Copyright (c) 2012, WSO2 Inc. (http://www.wso2.org) All Rights Reserved.
 * 
 * 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.wso2.developerstudio.eclipse.artifact.brs.ui.dialog;

import java.io.File;
import java.net.URL;
import java.util.ArrayList;

import org.eclipse.core.resources.IFolder;
import org.eclipse.core.resources.IProject;
import org.eclipse.core.resources.IResource;
import org.eclipse.core.runtime.CoreException;
import org.eclipse.core.runtime.IPath;
import org.eclipse.jdt.core.IClasspathEntry;
import org.eclipse.jdt.core.ICompilationUnit;
import org.eclipse.jdt.core.IJavaElement;
import org.eclipse.jdt.core.IJavaProject;
import org.eclipse.jdt.core.IPackageFragment;
import org.eclipse.jdt.core.IPackageFragmentRoot;
import org.eclipse.jdt.core.IType;
import org.eclipse.jdt.core.JavaCore;
import org.eclipse.jdt.core.JavaModelException;
import org.eclipse.jface.dialogs.Dialog;
import org.eclipse.swt.SWT;
import org.eclipse.swt.events.ModifyEvent;
import org.eclipse.swt.events.ModifyListener;
import org.eclipse.swt.events.SelectionEvent;
import org.eclipse.swt.events.SelectionListener;
import org.eclipse.swt.layout.GridData;
import org.eclipse.swt.layout.GridLayout;
import org.eclipse.swt.widgets.Combo;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Control;
import org.eclipse.swt.widgets.Label;
import org.eclipse.swt.widgets.MessageBox;
import org.eclipse.swt.widgets.Shell;
import org.eclipse.swt.widgets.Text;
import org.wso2.carbon.rule.common.Fact;
import org.wso2.carbon.rule.common.Input;
import org.wso2.carbon.rule.common.Output;
import org.wso2.carbon.rule.common.RuleService;
import org.wso2.developerstudio.eclipse.utils.jdt.JavaUtils;
import org.wso2.developerstudio.eclipse.utils.project.ProjectUtils;

public class FactsDialog extends Dialog {
    private Input input = new Input();
    private String factNameSpace;
    private String factName;
    private String factType;
    private int tableIndex;
    private boolean tableEdited = false;
    private Output output = new Output();
    private int outputTableIndex;
    private boolean outputtableEdited = false;
    private Text txtFactName;
    private Text txtFactNameSpace;
    private IProject project;

    public FactsDialog(Shell parentShell, RuleService ruleservice, IProject project) {
        super(parentShell);
        this.project = project;
    }

    @Override
    protected Control createDialogArea(Composite parent) {
        final Combo factTypeCombo;
        Composite container;
        container = (Composite) super.createDialogArea(parent);
        container.getShell().setText("Facts Dialog");
        GridLayout layout = new GridLayout();
        container.setLayout(layout);
        layout.numColumns = 2;

        Label typeLabel = new Label(container, SWT.NULL);
        typeLabel.setText("Fact Type");

        factTypeCombo = new Combo(container, SWT.DROP_DOWN | SWT.READ_ONLY);
        ArrayList<String> javaClass = new ArrayList<String>();
        ArrayList<String> pakagesList = new ArrayList<String>();
        ArrayList<IPackageFragment> packFrag = new ArrayList<IPackageFragment>();
        IJavaProject javaProject = JavaCore.create(project);
        try {
            IPackageFragment[] packages = javaProject.getPackageFragments();
            for (IPackageFragment iPackageFragment : packages) {
                iPackageFragment.getElementName();
                if (iPackageFragment.getKind() == IPackageFragmentRoot.K_SOURCE) {
                    if (iPackageFragment.hasChildren()) {
                        pakagesList.add(iPackageFragment.getElementName());
                        packFrag.add(iPackageFragment);
                        for (ICompilationUnit unit : iPackageFragment.getCompilationUnits()) {
                            javaClass.add(unit.getElementName());
                        }
                    }
                }
            }
            String[] factsForCombo = new String[javaClass.size()];
            int i = 0;
            for (int j = 0; j < pakagesList.size(); j++) {
                for (ICompilationUnit unit : packFrag.get(j).getCompilationUnits()) {
                    factsForCombo[i] = packFrag.get(j).getElementName() + "."
                            + unit.getElementName().replace(".java", "");
                    i++;
                }
            }

            factTypeCombo.setItems(factsForCombo);

            if (factsForCombo.length > 0) {
                factTypeCombo.setText(factsForCombo[0]);
            }

            factTypeCombo.setText(updateFactType());

            setFactType(factTypeCombo.getText().trim());
            factTypeCombo.setLayoutData(new GridData(GridData.FILL, GridData.CENTER, true, false));
            factTypeCombo.addSelectionListener(new SelectionListener() {
                @Override
                public void widgetSelected(SelectionEvent event) {
                    setFactType(factTypeCombo.getText().trim());
                }

                @Override
                public void widgetDefaultSelected(SelectionEvent event) {

                }
            });

        } catch (JavaModelException e) {

            e.printStackTrace();
        }

        Label factNameLabel = new Label(container, SWT.NULL);
        factNameLabel.setText("Element Name");
        txtFactName = new Text(container, SWT.BORDER | SWT.NULL);
        txtFactName.setText(updateFactName());
        GridData factNameGridData = new GridData(SWT.LEFT, SWT.CENTER, true, false, 1, 1);
        factNameGridData.widthHint = 200;
        txtFactName.setLayoutData(factNameGridData);

        txtFactName.addModifyListener(new ModifyListener() {

            @Override
            public void modifyText(ModifyEvent arg0) {
                setFactName(txtFactName.getText().trim());
            }
        });

        Label factNameSpaceLabel = new Label(container, SWT.NULL);
        factNameSpaceLabel.setText("Element Namespace");
        txtFactNameSpace = new Text(container, SWT.BORDER | SWT.NULL);
        txtFactNameSpace.setText(updateFactNameSpace());
        GridData factNameSpaceGridData = new GridData(SWT.LEFT, SWT.CENTER, true, false, 1, 1);
        factNameSpaceGridData.widthHint = 200;
        txtFactNameSpace.setLayoutData(factNameSpaceGridData);

        txtFactNameSpace.addModifyListener(new ModifyListener() {

            @Override
            public void modifyText(ModifyEvent arg0) {
                setNameSpace(txtFactNameSpace.getText().trim());
            }
        });

        return container;
    }

    @Override
    protected boolean isResizable() {
        return true;
    }

    public void updateOperationDialogWithOperaionInfo() {
        Fact fact = new Fact();
        fact.setType(getFactType());
        fact.setElementName(getFactName());
        fact.setNamespace(getNameSpace());
        input.addFact(fact);
    }

    private String updateFactNameSpace() {

        if (getNameSpace() != null) {
            return getNameSpace();
        } else
            return "";
    }

    private String updateFactName() {

        if (getFactName() != null) {
            return getFactName();
        } else
            return "";
    }

    private String updateFactType() {

        if (getFactType() != null) {
            return getFactType();
        } else
            return "";
    }

    public void editEditorOutputFactsTable(int tableindex, Output output) {
        this.outputTableIndex = tableindex;
        this.outputtableEdited = true;
        this.output = output;
        Fact fact = output.getFacts().get(tableindex);
        setFactName(fact.getElementName());
        setFactType(fact.getType());
        setNameSpace(fact.getNamespace());
    }

    public void editEditorFactsTable(int tableindex, Input input) {
        this.tableIndex = tableindex;
        this.tableEdited = true;
        this.input = input;
        Fact fact = input.getFacts().get(tableindex);

        setFactName(fact.getElementName());
        setFactType(fact.getType());
        setNameSpace(fact.getNamespace());
    }

    public void updateOperationDialogWithOutputInfo() {
        Fact fact = new Fact();

        fact.setType(getFactType());
        fact.setElementName(getFactName());
        fact.setNamespace(getNameSpace());
        output.addFact(fact);

    }

    public void connectOutput(Output output) {
        this.output = output;
    }

    public void setNameSpace(String namespace) {
        this.factNameSpace = namespace;
    }

    public void setFactName(String factname) {
        this.factName = factname;
    }

    @Override
    protected void cancelPressed() {
        super.cancelPressed();
    }

    private void updateEditInputFactsTable() {
        Fact fact = new Fact();

        fact.setElementName(getFactName());
        fact.setNamespace(getNameSpace());
        fact.setType(getFactType());
        input.getFacts().set(tableIndex, fact);
    }

    private void updateEditOutputFactsTable() {
        Fact fact = new Fact();

        fact.setElementName(getFactName());
        fact.setNamespace(getNameSpace());
        fact.setType(getFactType());
        output.getFacts().set(outputTableIndex, fact);
    }

    @Override
    protected void okPressed() {

        if (tableEdited == false) {
            updateOperationDialogWithOperaionInfo();
        }
        if (tableEdited == true) {
            updateEditInputFactsTable();
        }
        if (outputtableEdited == false) {
            updateOperationDialogWithOutputInfo();
        }
        if (outputtableEdited == true) {
            updateEditOutputFactsTable();
        }

        super.okPressed();
    }

    public void setFactType(String facttype) {
        this.factType = facttype;
    }

    public void connectInput(Input input) {
        this.input = input;
    }

    public String getNameSpace() {
        return factNameSpace;
    }

    public String getFactName() {
        return factName;
    }

    public String getFactType() {
        return factType;
    }
}