Example usage for org.eclipse.jdt.core IPackageFragmentRoot createPackageFragment

List of usage examples for org.eclipse.jdt.core IPackageFragmentRoot createPackageFragment

Introduction

In this page you can find the example usage for org.eclipse.jdt.core IPackageFragmentRoot createPackageFragment.

Prototype

IPackageFragment createPackageFragment(String name, boolean force, IProgressMonitor monitor)
        throws JavaModelException;

Source Link

Document

Creates and returns a package fragment in this root with the given dot-separated package name.

Usage

From source file:org.eclipse.viatra.query.tooling.ui.wizards.NewEiqFileWizardContainerConfigurationPage.java

License:Open Source License

/**
 * Returns the name of the package set in the wizard.
 * //from  w  ww  .  j  a va  2 s . com
 * @return the name of the package
 */
public String getPackageName() {
    IPackageFragmentRoot root = getPackageFragmentRoot();

    IPackageFragment fragment = root.getPackageFragment(getPackageText());

    if (!fragment.exists()) {
        try {
            root.createPackageFragment(getPackageText(), true, new NullProgressMonitor());
        } catch (JavaModelException e) {
            ViatraQueryGUIPlugin.getDefault().logException("Cannot load packages " + e.getMessage(), e);
        }
    }

    return getPackageText();
}

From source file:org.eclipse.wb.internal.core.utils.jdt.core.ProjectUtils.java

License:Open Source License

private static void createCompilationUnitWithType(IJavaProject javaProject, String typeName, String contents)
        throws Exception {
    ICompilationUnit unit;/*from www.  j  a v a2 s .c om*/
    {
        String packageName = CodeUtils.getPackage(typeName);
        String unitName = CodeUtils.getShortClass(typeName) + ".java";
        IContainer sourceContainer = CodeUtils.getSourceContainers(javaProject, false).get(0);
        IPackageFragmentRoot packageFragmentRoot = javaProject.getPackageFragmentRoot(sourceContainer);
        IPackageFragment packageFragment = packageFragmentRoot.createPackageFragment(packageName, true, null);
        unit = packageFragment.createCompilationUnit(unitName, contents, true, null);
    }
    saveCompilationUnitWithType(unit);
}

From source file:org.eclipse.wb.tests.designer.core.TestProject.java

License:Open Source License

/**
 * @return the {@link IPackageFragment} with given name, in default source folder. Creates it if
 *         does not exist./*ww  w  .j a  v  a  2 s.  c  om*/
 */
public IPackageFragment getPackage(String name) throws CoreException {
    IPackageFragmentRoot sourceFolder = getSourceFolder();
    IPackageFragment packageFragment = sourceFolder.getPackageFragment(name);
    if (packageFragment == null || !packageFragment.exists()) {
        packageFragment = sourceFolder.createPackageFragment(name, false, null);
    }
    return packageFragment;
}

From source file:org.eclipse.zest.dot.internal.ZestProjectWizard.java

License:Open Source License

private void createPackage(final IProject project, final IFolder sourceGenFolder) throws JavaModelException {
    IJavaProject javaProject = JavaCore.create(project);
    IPackageFragmentRoot newPackage = javaProject.getPackageFragmentRoot(sourceGenFolder);
    newPackage.createPackageFragment(PACKAGE, true, new NullProgressMonitor());
}

From source file:org.eclipselabs.stlipse.jspeditor.NewBeanclassWizard.java

License:Open Source License

private NewClassWizardPage createWizardPage() {
    NewClassWizardPage page = new NewClassWizardPage();
    if (fqn != null) {
        page.setTypeName(ClassNameUtil.getTypeName(fqn), false);
        try {// ww w.  jav  a 2s  .c o m
            IPackageFragmentRoot pkgRoot = ProjectUtil.getFirstSourceRoot(project);
            page.setPackageFragmentRoot(pkgRoot, true);
            IPackageFragment pkgFragment = pkgRoot.createPackageFragment(ClassNameUtil.getPackage(fqn), false,
                    null);
            page.setPackageFragment(pkgFragment, false);
        } catch (JavaModelException e) {
            Activator.log(Status.ERROR, "Error occurred while resolving package fragment.", e);
        }
    }
    return page;
}

From source file:org.entirej.ide.ui.wizards.service.NewEJPojoServiceContentPage.java

License:Apache License

public String createPojoClass(EJPojoGeneratorType pojoGeneratorType, IProgressMonitor monitor)
        throws Exception, CoreException {

    Class<?> pojoGeneratorClass = EJPluginEntireJClassLoader.loadClass(projectProvider.getJavaProject(),
            pojoPage.getPojoGeneratorClass());
    if (!EJPojoContentGenerator.class.isAssignableFrom(pojoGeneratorClass)) {
        throw new IllegalArgumentException(
                "The pojo generator does not implement the interface: EJPojoContentGenerator");
    }//from  ww w.  j av  a2 s  . c om

    EJPojoContentGenerator pojoContentGenerator = (EJPojoContentGenerator) pojoGeneratorClass.newInstance();

    pojoGeneratorType.setPackageName(pojoPage.getPackageText());

    IPackageFragmentRoot root = getPackageFragmentRoot();
    IPackageFragment pack = root.getPackageFragment(pojoGeneratorType.getPackageName());
    if (pack == null) {
        pack = root.getPackageFragment(""); //$NON-NLS-1$
    }

    if (!pack.exists()) {
        String packName = pack.getElementName();
        pack = root.createPackageFragment(packName, true, new SubProgressMonitor(monitor, 1));
    } else {
        monitor.worked(1);
    }
    pojoGeneratorType.setPackageName(pack.getElementName());
    ICompilationUnit connectedCU = null;

    try {
        ICompilationUnit parentCU = pack.createCompilationUnit(pojoGeneratorType.getClassName() + ".java", "", //$NON-NLS-1$
                true, new SubProgressMonitor(monitor, 2));
        // create a working copy with a new owner
        parentCU.becomeWorkingCopy(new SubProgressMonitor(monitor, 1));
        connectedCU = parentCU;

        IBuffer buffer = parentCU.getBuffer();
        String fileContents = pojoContentGenerator.generateContent(pojoGeneratorType);

        if (fileContents == null) {
            throw new IllegalArgumentException("No content provided by chosen pojo generator.");
        }

        CodeFormatter codeFormatter = ToolFactory.createCodeFormatter(getProject().getOptions(true));
        IDocument doc = new Document(fileContents);
        TextEdit edit = codeFormatter.format(CodeFormatter.K_COMPILATION_UNIT, doc.get(), 0, doc.get().length(),
                0, null);
        if (edit != null) {
            edit.apply(doc);
            fileContents = doc.get();
        }

        buffer.setContents(fileContents);
        final IType createdType = parentCU.getType(pojoGeneratorType.getClassName());
        connectedCU.commitWorkingCopy(true, new SubProgressMonitor(monitor, 1));

        getShell().getDisplay().asyncExec(new Runnable() {
            public void run() {
                IWizard iWizard = getWizard();
                if (iWizard instanceof NewWizard) {
                    NewWizard wizard = (NewWizard) iWizard;
                    wizard.selectAndReveal(createdType.getResource());
                    wizard.openResource((IFile) createdType.getResource());
                }

            }
        });
        return createdType.getFullyQualifiedName('$');
    } finally {
        if (connectedCU != null) {
            connectedCU.discardWorkingCopy();
        }
        IJavaProject javaProject = pojoPage.getJavaProject();
        javaProject.getProject().build(IncrementalProjectBuilder.INCREMENTAL_BUILD, monitor);
    }

}

From source file:org.entirej.ide.ui.wizards.service.NewEJPojoServiceContentPage.java

License:Apache License

private void createServiceClass(BlockServiceContent blockServiceContent, String pojoClassName,
        NewEJGenServicePage servicePage, IProgressMonitor monitor) throws Exception, CoreException {
    EJServiceContentGenerator serviceContentGenerator = createServiceContentGenerator(
            servicePage.getJavaProject(), servicePage.getPojoGeneratorClass());
    Class<?> pojoClass = EJPluginEntireJClassLoader.loadClass(servicePage.getJavaProject(), pojoClassName);

    EJServiceGeneratorType serviceGeneratorType = blockServiceContent.getServiceGeneratorType();
    String serviceClassName = servicePage.getTypeName();
    serviceGeneratorType.setServiceName(serviceClassName);
    serviceGeneratorType.setPojo(pojoClass);
    serviceGeneratorType.setPackageName(servicePage.getPackageText());

    IPackageFragmentRoot root = servicePage.getPackageFragmentRoot();
    IPackageFragment pack = servicePage.getPackageFragment();

    if (!pack.exists()) {
        String packName = pack.getElementName();
        pack = root.createPackageFragment(packName, true, new SubProgressMonitor(monitor, 1));
    } else {/*w  w w  .j  a  v a 2s. c o m*/
        monitor.worked(1);
    }

    ICompilationUnit connectedCU = null;

    try {
        ICompilationUnit parentCU = pack.createCompilationUnit(serviceClassName + ".java", "", false, //$NON-NLS-1$
                new SubProgressMonitor(monitor, 2));
        // create a working copy with a new owner
        parentCU.becomeWorkingCopy(new SubProgressMonitor(monitor, 1));
        connectedCU = parentCU;

        IBuffer buffer = parentCU.getBuffer();
        String fileContents = serviceContentGenerator.generateContent(serviceGeneratorType);

        if (fileContents == null) {
            throw new IllegalArgumentException("No content provided by chosen service generator.");
        }
        CodeFormatter codeFormatter = ToolFactory.createCodeFormatter(getProject().getOptions(true));
        IDocument doc = new Document(fileContents);
        TextEdit edit = codeFormatter.format(CodeFormatter.K_COMPILATION_UNIT, doc.get(), 0, doc.get().length(),
                0, null);
        if (edit != null) {
            edit.apply(doc);
            fileContents = doc.get();
        }

        buffer.setContents(fileContents);
        final IType createdType = parentCU.getType(pojoClassName);
        connectedCU.commitWorkingCopy(true, new SubProgressMonitor(monitor, 1));
        getShell().getDisplay().asyncExec(new Runnable() {
            public void run() {
                IWizard iWizard = getWizard();
                if (iWizard instanceof NewWizard) {
                    NewWizard wizard = (NewWizard) iWizard;
                    wizard.selectAndReveal(createdType.getResource());
                    wizard.openResource((IFile) createdType.getResource());
                }

            }
        });
    } finally {
        if (connectedCU != null) {
            connectedCU.discardWorkingCopy();
        }
    }

}

From source file:org.evolizer.core.util.projecthandling.JavaProjectHelper.java

License:Apache License

/**
 * Adds a package./*w w  w  .  j  a  v  a 2s.  c  o  m*/
 * 
 * @param sourceFolderName
 *            the source folder name
 * @param packageName
 *            the package name
 * @param progressMonitor
 *            the progress monitor
 * @throws JavaModelException
 *             if the element could not be created. Reasons include:
 *             <ul>
 *             <li>This Java element does not exist (ELEMENT_DOES_NOT_EXIST)</li>
 *             <li>A CoreException occurred while creating an underlying resource</li>
 *             <li>This package fragment root is read only (READ_ONLY)</li>
 *             <li>The name is not a valid package name (INVALID_NAME)</li>
 *             </ul>
 */
public void addPackage(String sourceFolderName, String packageName, IProgressMonitor progressMonitor)
        throws JavaModelException {

    IProgressMonitor monitor = (progressMonitor == null) ? new NullProgressMonitor() : progressMonitor;

    try {
        monitor.beginTask("Creating Java Package " + packageName + " in " + sourceFolderName, 1);

        IFolder sourceFolder = fProject.getFolder(sourceFolderName);
        IPackageFragmentRoot javaRoot = fJavaProject.getPackageFragmentRoot(sourceFolder);
        javaRoot.createPackageFragment(packageName, false, null);

        monitor.worked(1);
    } finally {
        monitor.done();
    }
}

From source file:org.fastcode.util.JUnitCreator.java

License:Open Source License

/**
 *
 * @param typeToWorkOn/*from  ww  w .ja va 2s  .c  o m*/
 * @param method
 * @return
 * @throws Exception
 */
public static IMember generateTest(final IType type,
        final Map<Object, List<FastCodeEntityHolder>> commitMessage, final IMethod... methods)
        throws Exception {

    final VersionControlPreferences versionControlPreferences = VersionControlPreferences.getInstance();

    if (JunitPreferences.getInstance(type) == null) {
        throw new Exception(
                "Please select the correct project in Windows->Preferences->Fast Code->Unit Test and try again.");
    }
    final CreateUnitTestData createUnitTestData = getCreateUnitTestData(type, methods);

    if (createUnitTestData == null) {
        return null;
    }
    final JunitPreferencesAndType junitPreferencesAndType = createUnitTestData.getJunitPreferencesAndType(); // JUnitUtil.findJunitPreferences(type,
    // createUnitTestData.getJunitTestProfileName());
    /*
     * if (junitPreferencesAndType == null) { throw new
     * Exception("This class you selected does not match any profile. " +
     * "Please configure it first by going to Window -> Preference -> Fast Code Pereference."
     * ); }
     */
    JunitPreferences junitPreferences = junitPreferencesAndType.getJunitPreferences();
    IType typeToWorkOn = junitPreferencesAndType.getType();
    /*
     * junitPreferences.setExpTest(createUnitTestData.getUnitTestType() ==
     * UNIT_TEST_TYPE.EXCEPTION_TEST);
     * junitPreferences.setHandleException(createUnitTestData
     * .getHandleException());
     * junitPreferences.setResultFormatList(Arrays.asList
     * (createUnitTestData.getUnitTestRsltFormatSelected()));
     * junitPreferences
     * .setMethodReturnType(createUnitTestData.getMethodReturnType());
     */
    junitPreferences.setCreateUnitTestData(createUnitTestData);

    // String junitTestLocation =
    // replacePlaceHolder(junitPreferences.getJunitTestLocation(),
    // "project", type.getJavaProject().getElementName());
    // junitTestLocation = "/" + junitTestLocation;

    final GlobalSettings globalSettings = getInstance();

    String junitTestLocation = globalSettings.isUseDefaultForPath() ? globalSettings.getSourcePathTest()
            : junitPreferences.getJunitTestLocation();
    junitTestLocation = getDefaultPathFromProject(typeToWorkOn.getJavaProject(), "test", junitTestLocation);
    final IPackageFragmentRoot testPackageFragmentRoot = SourceUtil
            .getPackageRootFromProject(typeToWorkOn.getJavaProject(), junitTestLocation);

    if (testPackageFragmentRoot == null || !testPackageFragmentRoot.exists()) {
        throw new Exception("Path does not exist in the project " + junitTestLocation);
    }

    // final String junitTestClassName =
    // junitPreferences.getJunitTestClass();
    final String junitBase = junitPreferences.getJunitBaseType();
    // final boolean createMethodBody =
    // junitPreferences.isCreateMethodBody();
    // final boolean alwaysCreateTryCatch =
    // junitPreferences.isAlwaysCreateTryCatch();
    // final boolean createInstance = junitPreferences.isCreateInstance();
    // final String[] methodAnnotations =
    // junitPreferences.getMethodAnnotations();

    ICompilationUnit unitTestCU = findTestUnit(typeToWorkOn, junitPreferences);
    // find the interface if unit test is null
    if (unitTestCU == null && typeToWorkOn.isClass()) {
        final IType tmpType = findSuperInterfaceType(typeToWorkOn);
        if (tmpType != null) {
            final JunitPreferences junitPref = JunitPreferences.getInstance(tmpType);
            if (junitPref != null) {
                unitTestCU = findTestUnit(tmpType, junitPref);
                if (unitTestCU != null) {
                    junitPreferences = junitPref;
                    typeToWorkOn = tmpType;
                    /*
                     * junitPreferences.setExpTest(createUnitTestData.
                     * getUnitTestType() == UNIT_TEST_TYPE.EXCEPTION_TEST);
                     * junitPreferences
                     * .setHandleException(createUnitTestData
                     * .getHandleException());
                     * junitPreferences.setResultFormatList
                     * (Arrays.asList(createUnitTestData
                     * .getUnitTestRsltFormatSelected()));
                     * junitPreferences.setMethodReturnType
                     * (createUnitTestData.getMethodReturnType());
                     */
                    junitPreferences.setCreateUnitTestData(createUnitTestData);
                }
            }
        }
    }

    if (!typeToWorkOn.equals(type) && checkForErrors(typeToWorkOn.getCompilationUnit().getResource())) {
        if (!MessageDialog.openQuestion(new Shell(), "Error",
                "There seems to be some problems associated with " + typeToWorkOn.getElementName()
                        + ". It is better to fix those problems and try again. Do you want to continue?")) {
            return null;
        }
    }

    IType junitBaseType = null;

    final JUNIT_TYPE junitType = junitPreferences.getJunitType();
    if (junitType == JUNIT_TYPE.JUNIT_TYPE_3) {
        junitBaseType = typeToWorkOn.getJavaProject().findType(junitBase);
        if (junitBaseType == null || !junitBaseType.exists()) {
            throw new Exception("Unable to find Junit Base Class " + junitBase + " in the current project. "
                    + "Make sure you have configured it properly by going to Windows -> Preference ->Fast Code Preference");
        }
    }

    final String testPkg = typeToWorkOn.getPackageFragment().getElementName();
    IPackageFragment testPackageFragment = testPackageFragmentRoot.getPackageFragment(testPkg);

    if (testPackageFragment == null || !testPackageFragment.exists()) {
        testPackageFragment = testPackageFragmentRoot.createPackageFragment(testPkg, false, null);
    }

    //final String testFormat = junitPreferences.getTestFormat();
    final String instance = createDefaultInstance(typeToWorkOn.getElementName());
    final CreateSimilarDescriptor createSimilarDescriptor = makeCreateSimilarDescriptor(junitPreferences,
            typeToWorkOn);
    final FastCodeContext fastCodeContext = new FastCodeContext(typeToWorkOn, true, junitPreferences);
    final boolean testClassExst = unitTestCU != null && unitTestCU.exists();
    final CreateSimilarDescriptorClass createSimilarDescriptorClass = createSimilarDescriptor
            .getCreateSimilarDescriptorClasses()[0];
    IFile unitTestFile = null;
    boolean createFileAlone = false;
    if (!testClassExst) {
        final String prjURI = testPackageFragment.getResource().getLocationURI().toString();
        final String path = prjURI.substring(prjURI.indexOf(COLON) + 1);
        final File newFileObj = new File(
                path + FORWARD_SLASH + createSimilarDescriptor.getToPattern() + DOT + JAVA_EXTENSION);
        final boolean prjShared = !isEmpty(
                testPackageFragment.getResource().getProject().getPersistentProperties());
        final boolean prjConfigured = !isEmpty(
                isPrjConfigured(testPackageFragment.getResource().getProject().getName()));
        if (versionControlPreferences.isEnable() && prjShared && prjConfigured) {
            final RepositoryService repositoryService = getRepositoryServiceClass();
            if (repositoryService.isFileInRepository(newFileObj)) { // && !MessageDialog.openQuestion(new Shell(), "File present in repository", "File already present in repository. Click yes to overwrite")) {
                /*MessageDialog.openWarning(new Shell(), "File present in repository", junitPreferences.getJunitTestClass() + " is already present in repository. Please synchronise and try again.");
                return null;*/
                createFileAlone = MessageDialog.openQuestion(new Shell(), "File present in repository", "File "
                        + newFileObj.getName()
                        + " already present in repository. Click yes to just create the file, No to return without any action.");
                if (!createFileAlone) {
                    return null;
                }
            }
        } else {
            createFileAlone = true;
        }
        /*final FastCodeCheckinCache checkinCache = FastCodeCheckinCache.getInstance();
        checkinCache.getFilesToCheckIn().add(new FastCodeFileForCheckin(INITIATED, newFileObj.getAbsolutePath()));*/
        addOrUpdateFileStatusInCache(newFileObj);

        createSimilar(fastCodeContext, null, createSimilarDescriptor, new NullProgressMonitor());
        unitTestCU = fastCodeContext.getCompilationUnitRegsistry(createSimilarDescriptorClass);
        if (!createFileAlone) {
            unitTestFile = (IFile) unitTestCU.findPrimaryType().getResource();//.getLocationURI());
            List<FastCodeEntityHolder> chngsForType = commitMessage.get(unitTestFile);
            if (chngsForType == null) {
                chngsForType = new ArrayList<FastCodeEntityHolder>();
                chngsForType.add(new FastCodeEntityHolder(PLACEHOLDER_CLASS,
                        new FastCodeType(unitTestCU.findPrimaryType())));
            }
            commitMessage.put(unitTestFile, chngsForType);
        }

    } else {
        createFileAlone = true;
    }

    if (testClassExst) {
        if (!unitTestCU.getResource().isSynchronized(0)) {
            throw new Exception(
                    unitTestCU.getElementName() + " is not Synchronized, please refresh and try again.");
        }
        unitTestFile = (IFile) unitTestCU.findPrimaryType().getResource(); //.getLocationURI());
    }
    final Map<String, FastCodeMethod> stubMethods = createUnitTestData.getStubMethodsMap(); // FastCodeMethodRegistry.getRegisteredUnitTestStubMethods(junitType);
    if (stubMethods != null) { // && !testClassExst) {
        /*
         * final FastCodeMethodSelectionDialog methodSelectionDialog = new
         * FastCodeMethodSelectionDialog(new Shell(), "Select Methods",
         * "Select One of more Stub Methods from Below", stubMethods, true);
         * methodSelectionDialog.open(); final Object[] regularMethods =
         * methodSelectionDialog.getResult();
         */
        //unitTestFile = (IFile) unitTestCU.findPrimaryType().getResource();
        if (!createFileAlone) {
            final File newFileObj = new File(unitTestFile.getLocationURI().toString());
            final FastCodeCheckinCache checkinCache = FastCodeCheckinCache.getInstance();
            checkinCache.getFilesToCheckIn()
                    .add(new FastCodeFileForCheckin(INITIATED, newFileObj.getAbsolutePath()));
        }
        if (createUnitTestData.getSelectedStubMethodsList() != null) {
            for (final FastCodeMethod fastCodeMethod : createUnitTestData.getSelectedStubMethodsList()
                    .toArray(new FastCodeMethod[0])) {
                createStubMethod(unitTestCU.findPrimaryType(), fastCodeMethod);
                if (!createFileAlone) {
                    List<FastCodeEntityHolder> chngesForType = commitMessage.get(unitTestFile);
                    if (chngesForType == null) {
                        chngesForType = new ArrayList<FastCodeEntityHolder>();
                        final List<Object> fastCodeMethodList = new ArrayList<Object>();
                        fastCodeMethodList.add(fastCodeMethod);
                        chngesForType
                                .add(new FastCodeEntityHolder(PLACEHOLDER_STUBMETHODS, fastCodeMethodList));
                    } else {
                        boolean isNew = true;
                        Object fastCodeMethodList = null;
                        for (final FastCodeEntityHolder fcEntityHolder : chngesForType) {
                            if (fcEntityHolder.getEntityName().equals(PLACEHOLDER_STUBMETHODS)) {
                                fastCodeMethodList = fcEntityHolder.getFastCodeEntity();
                                isNew = false;
                                break;
                            }
                        }

                        if (isNew) {
                            fastCodeMethodList = new ArrayList<Object>();
                            ((List<Object>) fastCodeMethodList).add(fastCodeMethod);
                            chngesForType
                                    .add(new FastCodeEntityHolder(PLACEHOLDER_STUBMETHODS, fastCodeMethodList));
                        } else {
                            ((List<Object>) fastCodeMethodList).add(fastCodeMethod);
                        }
                    }
                    commitMessage.put(unitTestFile, chngesForType);
                }
            }
        }
    }

    if (junitType == JUNIT_TYPE.JUNIT_TYPE_3 || junitType == JUNIT_TYPE.JUNIT_TYPE_CUSTOM) {
        if (junitBaseType != null && junitBaseType.exists()) {
            unitTestCU.createImport(junitBaseType.getFullyQualifiedName(), null, null);
        }
    } else if (junitType == JUNIT_TYPE.JUNIT_TYPE_4) {
        unitTestCU.createImport("org.junit.*", null, null);
        unitTestCU.createImport("org.junit.Assert.*", null, AccStatic, null);
    } else if (junitType == JUNIT_TYPE.JUNIT_TYPE_TESTNG) {
        unitTestCU.createImport("org.testng.annotations.*", null, null);
        unitTestCU.createImport("org.testng.Assert.*", null, AccStatic, null);
    }

    if (unitTestCU == null || !unitTestCU.exists() || createUnitTestData.getClassMethodsSelected() == null
            || methods.length == 0) {
        return unitTestCU != null && unitTestCU.exists() ? unitTestCU.findPrimaryType() : null;
    }

    unitTestCU.createImport(typeToWorkOn.getFullyQualifiedName(), null, null);

    final List<IMethod> retMethods = new ArrayList<IMethod>();
    final UnitTestMethodBuilder methodBuilder = new UnitTestMethodBuilder(fastCodeContext);

    boolean becomeWorkingCopy = false;
    if (!unitTestCU.isWorkingCopy()) {
        becomeWorkingCopy = true;
        unitTestCU.becomeWorkingCopy(null);
    }

    try {
        for (final IMethod method : createUnitTestData.getClassMethodsSelected().toArray(new IMethod[0])) {

            if (EMPTY_STR.equals(createUnitTestData.getTestMethodName())) {
                createUnitTestData.setTestMethodName(method.getElementName());
            }
            IMethod methodToWorkOn = method;
            if (!type.equals(typeToWorkOn)) {
                methodToWorkOn = typeToWorkOn.getMethod(method.getElementName(), method.getParameterTypes());
                if (methodToWorkOn == null || !methodToWorkOn.exists()) {
                    MessageDialog.openError(new Shell(), "Error", "Method " + method.getElementName()
                            + " does not exist in " + typeToWorkOn.getElementName());
                    continue;
                }
            }
            final IMethod[] testMethods = testClassExst
                    ? findTestMethods(typeToWorkOn, methodToWorkOn, junitPreferences)
                    : null;
            // boolean testMethodExist = false, createAotherTestMethod =
            // false;
            // testMethodExist = createAotherTestMethod = false;

            if (testMethods != null && testMethods.length > 0) {
                // testMethodExist = createAotherTestMethod = true;
                /*
                 * final String[] choices = {"Create an additional test",
                 * "Do Nothing", "Jump To The Test"};
                 *
                 * final String choice = getChoiceFromMultipleValues(new
                 * Shell(), "Junit Test Exists for method " +
                 * methodToWorkOn.getElementName(), "Would You Like To",
                 * choices); final int result = findInStringArray(choice,
                 * choices);
                 */

                if (createUnitTestData.getUnitTestChoice().equals(UNIT_TEST_CHOICE.CREATEADDITIONALTEST)) {
                    // break;
                } else if (createUnitTestData.getUnitTestChoice().equals(UNIT_TEST_CHOICE.JUMPTOTEST)) {
                    if (methods.length == 1) {
                        if (testMethods.length == 1) {
                            return testMethods[0];
                        }
                        final MethodSelectionDialog methodSelectionDialog = new MethodSelectionDialog(
                                new Shell(), "Select Test Method",
                                "Multiple tests found for the method you selected, "
                                        + "please select one from the list below.",
                                testMethods, false);
                        methodSelectionDialog.open();
                        return methodSelectionDialog.getResult() == null
                                || methodSelectionDialog.getResult().length == 0 ? null
                                        : (IMethod) methodSelectionDialog.getFirstResult();
                    }
                }
                /*
                 * switch (result) { case 0: // createAotherTestMethod =
                 * true; break; case 1: continue; case 2:
                 *
                 * }
                 */

                // if (createAotherTestMethod) {
                // final MessageDialogWithToggle dialogForMethodBody =
                // openYesNoQuestion(new Shell(),
                // "Create Method Body", "Do you create method body?",
                // "Remember Decision", false,
                // Activator.getDefault().getPreferenceStore(),
                // P_JUNIT_TEST_ASK_FOR_METHOD_BODY);
                // if (dialogForMethodBody.getReturnCode() !=
                // MESSAGE_DIALOG_RETURN_YES) {
                // createMethodBody = false;
                // alwaysCreateTryCatch = false;
                // }
                // }
            }

            if (junitBaseType != null) {
                for (final IMethod meth : junitBaseType.getMethods()) {
                    if (isAbstract(meth.getFlags())) {
                        // add methods here.
                        // copyMethods(junitBaseType,
                        // testCU.findPrimaryType(), meth, null,
                        // METHOD_PATTERN_DEFAULT, null,
                        // RETURN_TYPE.RETURN_TYPE_PASS_THRU, null, null,
                        // false, null, false, false, null, null, null);
                    }
                }
            }

            // if (junitPreferences.isCreateInstance()) {
            // final IField field =
            // testCU.findPrimaryType().getField(instance);
            // if (field == null || !field.exists()) {
            // testCU.findPrimaryType().createField("protected " +
            // type.getElementName() + SPACE + instance + ";\n", null,
            // false, null);
            // }
            // }
            // if (!testMethodExist || createAotherTestMethod) {
            // copyImports(type.getCompilationUnit(), testCU, method);
            // copyMethods(type, testCU.findPrimaryType(), method, instance,
            // junitPreferences.getJunitTestMethod(),
            // createAotherTestMethod ? EXTENSION_OTHER : null,
            // RETURN_TYPE.RETURN_TYPE_CONSUME, null, null, false, "result",
            // createMethodBody, alwaysCreateTryCatch,
            // methodAnnotations, null, null);
            // }

            /**
             * if (method == null) { for (final IMethod meth:
             * testCU.findPrimaryType().getMethods()) { if
             * (!meth.isConstructor()) { testMethod = meth; break; } } }
             * else { String testMethName =
             * replacePlaceHolder(junitPreferences.getJunitTestMethod(),
             * "method_name", method.getElementName()); if
             * (!junitPreferences
             * .getJunitTestMethod().startsWith("${method_name}")) {
             * testMethName =
             * replacePlaceHolder(junitPreferences.getJunitTestMethod(),
             * "method_name",
             * createEmbeddedInstance(method.getElementName())); }
             *
             * testMethod = testCU.findPrimaryType().getMethod(testMethName
             * + (createAotherTestMethod ? EXTENSION_OTHER : EMPTY_STR),
             * null); }
             */
            if (!createFileAlone) {
                final File newFileObj = new File(unitTestFile.getLocationURI().toString());
                final FastCodeCheckinCache checkinCache = FastCodeCheckinCache.getInstance();
                checkinCache.getFilesToCheckIn()
                        .add(new FastCodeFileForCheckin(INITIATED, newFileObj.getAbsolutePath()));
            }
            final IMethod tstMethod = methodBuilder.buildMethod(methodToWorkOn, unitTestCU.findPrimaryType(),
                    createSimilarDescriptor, createSimilarDescriptorClass);
            createUnitTestData.setTestMethodName(EMPTY_STR);
            if (tstMethod != null) {
                retMethods.add(tstMethod);
                if (!createFileAlone) {
                    List<FastCodeEntityHolder> chngesForType = commitMessage.get(unitTestFile);
                    if (chngesForType == null) {
                        chngesForType = new ArrayList<FastCodeEntityHolder>();
                        final List<Object> fastCodeMethodList = new ArrayList<Object>();
                        fastCodeMethodList.add(new FastCodeMethod(tstMethod));
                        chngesForType
                                .add(new FastCodeEntityHolder(PLACEHOLDER_TESTMETHODS, fastCodeMethodList));
                    } else {

                        boolean isNew = true;
                        Object fastCodeMethodList = null;
                        for (final FastCodeEntityHolder fcEntityHolder : chngesForType) {
                            if (fcEntityHolder.getEntityName().equals(PLACEHOLDER_TESTMETHODS)) {
                                fastCodeMethodList = fcEntityHolder.getFastCodeEntity();
                                isNew = false;
                                break;
                            }
                        }

                        if (isNew) {
                            fastCodeMethodList = new ArrayList<Object>();
                            ((List<Object>) fastCodeMethodList).add(new FastCodeMethod(tstMethod));
                            chngesForType
                                    .add(new FastCodeEntityHolder(PLACEHOLDER_TESTMETHODS, fastCodeMethodList));
                        } else {
                            ((List<Object>) fastCodeMethodList).add(new FastCodeMethod(tstMethod));
                        }
                    }
                    commitMessage.put(unitTestFile, chngesForType);
                }
            }
        }
    } catch (final Exception ex) {
        ex.printStackTrace();
        throw new Exception(ex.getMessage(), ex);
    } finally {
        // if (testClassExst) {
        if (!unitTestCU.hasResourceChanged()) {
            unitTestCU.commitWorkingCopy(false, null);
        }
        if (becomeWorkingCopy) {
            unitTestCU.discardWorkingCopy();
        }
    }

    if (retMethods.isEmpty()) {
        return unitTestCU.findPrimaryType();
    } else if (retMethods.size() == 1) {
        return retMethods.get(0);
    } else {
        final IMember[] selectedMembers = getSelectedMembers(IJavaElement.METHOD,
                retMethods.toArray(new IMethod[0]), "Unit Test to Jump", false);
        return selectedMembers == null || selectedMembers.length == 0 ? retMethods.get(0)
                : (IMethod) selectedMembers[0];
    }
}

From source file:org.fastcode.util.SourceUtil.java

License:Open Source License

/**
 * @param fastCodeContext//  w w  w . jav a2 s.c  o  m
 * @param member
 * @param createSimilarDescriptor
 * @param monitor
 * @return
 * @throws Exception
 */
public static void createSimilar(final FastCodeContext fastCodeContext, final IMember[] members,
        final CreateSimilarDescriptor createSimilarDescriptor, final IProgressMonitor monitor)
        throws Exception {

    final GlobalSettings globalSettings = getInstance();
    final Shell parentShell = MessageUtil.getParentShell();
    final Shell shell = parentShell == null ? new Shell() : parentShell;

    IPackageFragmentRoot packageFragmentRoot = null;
    String newpkg = EMPTY_STR, newcls = EMPTY_STR;
    String targetProject = null;
    final CreateSimilarDescriptorClass[] descriptorClasses = createSimilarDescriptor
            .getCreateSimilarDescUserChoice() == null
                    ? createSimilarDescriptor.getCreateSimilarDescriptorClasses()
                    : createSimilarDescriptor.getCreateSimilarDescUserChoice();
    for (final CreateSimilarDescriptorClass createSimilarDescriptorClass : descriptorClasses) {

        if (createSimilarDescriptorClass == null) {
            continue;
        }
        final boolean replaceName = createSimilarDescriptor.isReplaceName();
        String toName = createSimilarDescriptorClass.getToPattern();

        // final String classBody =
        // createSimilarDescriptorClass.getClassBody();
        IPackageFragment packageFragment = null;

        if (packageFragmentRoot == null) {
            targetProject = createSimilarDescriptorClass.getProject();
            if (fastCodeContext.getFromType() == null) {

                /*final IJavaProject project = getJavaProject(targetProject);
                if (project != null && project.exists() && !isEmpty(createSimilarDescriptorClass.getPackge())) {
                   for (final IPackageFragmentRoot pkgFragmntRoot : project.getPackageFragmentRoots()) {
                      packageFragment = pkgFragmntRoot.getPackageFragment(createSimilarDescriptorClass.getPackge());
                      if (packageFragment != null && packageFragment.exists()) {
                packageFragmentRoot = pkgFragmntRoot;
                break;
                      }
                   }
                }
                if (packageFragment == null || !packageFragment.exists()) {
                   final SelectionDialog packageDialog = JavaUI.createPackageDialog(shell, project, 0, null);
                   if (packageDialog.open() == CANCEL) {
                      return;
                   }
                   packageFragment = (IPackageFragment) packageDialog.getResult()[0];
                   packageFragmentRoot = (IPackageFragmentRoot) packageFragment.getParent();
                } else if (isEmpty(createSimilarDescriptorClass.getSubPackage()) && packageFragment.hasSubpackages()) {
                   final List<IPackageFragment> subPackages = new ArrayList<IPackageFragment>();
                   for (final IJavaElement chldPkgFragment : packageFragmentRoot.getChildren()) {
                      if (chldPkgFragment instanceof IPackageFragment
                   && chldPkgFragment.getElementName().startsWith(packageFragment.getElementName())) {
                subPackages.add((IPackageFragment) chldPkgFragment);
                      }
                   }
                   if (!subPackages.isEmpty()) {
                      final PackageSelectionDialog selectionDialog = new PackageSelectionDialog(shell, "Sub Package",
                   "Choose the sub pacage from below", subPackages.toArray(new IPackageFragment[0]));
                      if (selectionDialog.open() != CANCEL) {
                packageFragment = (IPackageFragment) selectionDialog.getFirstResult();
                      }
                   }
                }*/

                packageFragment = createSimilarDescriptorClass.getUserInputPackage();
                packageFragmentRoot = (IPackageFragmentRoot) packageFragment.getParent();
                newpkg = packageFragment.getElementName();
                newcls = replacePlaceHolders(toName, fastCodeContext.getPlaceHolders());
            } else {
                if (fastCodeContext.isUnitTest()) {
                    String sourcePath = globalSettings.isUseDefaultForPath()
                            ? globalSettings.getSourcePathTest()
                            : createSimilarDescriptorClass.getSourcePath();
                    sourcePath = getDefaultPathFromProject(fastCodeContext.getFromType().getJavaProject(),
                            "test", sourcePath);
                    packageFragmentRoot = getPackageRootFromProject(
                            fastCodeContext.getFromType().getJavaProject(), sourcePath);
                } else if (!isEmpty(targetProject)) {
                    final String sourcePath = globalSettings.isUseDefaultForPath()
                            ? getPathFromGlobalSettings(
                                    fastCodeContext.getFromType().getJavaProject().getElementName())
                            : createSimilarDescriptorClass.getSourcePath();
                    ;
                    packageFragmentRoot = getPackageRootFromProject(createSimilarDescriptorClass.getProject(),
                            sourcePath);
                } else {
                    packageFragmentRoot = (IPackageFragmentRoot) fastCodeContext.getFromType()
                            .getPackageFragment().getParent();
                    targetProject = packageFragmentRoot.getParent().getElementName();
                }
                final String fullname = fastCodeContext.getFromType().getFullyQualifiedName();
                final String fromPattern = createSimilarDescriptor.getFromPattern();
                if (fromPattern != null) {
                    parseTokens(fromPattern, fullname, fastCodeContext.getPlaceHolders());
                }
                if (packageFragmentRoot == null || !packageFragmentRoot.exists()) {
                    throw new Exception("Unable to find source path for, please check configuration.");
                }
                toName = replacePlaceHolders(toName, fastCodeContext.getPlaceHolders());
                if (createSimilarDescriptor.isDifferentName()) {
                    toName = fullname.replaceAll(createSimilarDescriptor.getReplacePart(),
                            createSimilarDescriptor.getReplaceValue());
                }
                final int lastDotPos = toName.lastIndexOf(DOT_CHAR);
                newpkg = lastDotPos != -1 ? toName.substring(0, lastDotPos)
                        : fastCodeContext.getFromType().getPackageFragment().getElementName();
                newcls = lastDotPos != -1 ? toName.substring(lastDotPos + 1) : toName;
                packageFragment = packageFragmentRoot.getPackageFragment(newpkg);
            }
        }

        if (packageFragmentRoot == null || !packageFragmentRoot.exists()) {
            throw new Exception("Unable to find package fragment root for " + toName);
        }

        // fastCodeContext.addToPlaceHolders(toName, newcls);
        final boolean isImplClass = createSimilarDescriptorClass.getParentDescriptor() != null
                && createSimilarDescriptorClass
                        .getRelationTypeToParent() == RELATION_TYPE.RELATION_TYPE_IMPLEMENTS;

        if (isImplClass) {
            newcls += globalSettings.getImplExtension();
            if (!isEmpty(createSimilarDescriptorClass.getSubPackage())) {
                newpkg += "." + createSimilarDescriptorClass.getSubPackage();
                packageFragment = packageFragmentRoot.getPackageFragment(newpkg);
                if (packageFragment == null || !packageFragment.exists()) {
                    packageFragment = packageFragmentRoot.createPackageFragment(newpkg, false, monitor);
                }
            }
        }

        fastCodeContext.addToPlaceHolders(PACKAGE_NAME_STR, newpkg);
        fastCodeContext.addToPlaceHolders(CLASS_NAME_STR, newcls);
        if (createSimilarDescriptorClass.isFinalClass()) {
            fastCodeContext.addToPlaceHolders(CLASS_MODIFIER_STR, "final");
        }
        fastCodeContext.addToPlaceHolders(CLASS_INSTANCE_STR, createDefaultInstance(newcls));
        fastCodeContext.addToPlaceHolders(CLASS_TYPE_STR,
                createSimilarDescriptorClass.getClassType().value().toLowerCase());

        if (!fastCodeContext.getPlaceHolders().containsKey(KEYWORD_FROM_CLASS)
                && fastCodeContext.getFromType() != null) {
            fastCodeContext.addToPlaceHolders(KEYWORD_FROM_CLASS,
                    fastCodeContext.getFromType().getElementName());
            fastCodeContext.addToPlaceHolders(KEYWORD_FROM_INSTANCE,
                    createDefaultInstance(fastCodeContext.getFromType().getElementName()));
        }

        if (!fastCodeContext.getPlaceHolders().containsKey(KEYWORD_TO_CLASS)) {
            fastCodeContext.addToPlaceHolders(KEYWORD_TO_CLASS, newcls);
            fastCodeContext.addToPlaceHolders(KEYWORD_TO_PACKAGE, newpkg);
            fastCodeContext.addToPlaceHolders(KEYWORD_TO_FULL_CLASS, newpkg + DOT + newcls);
            fastCodeContext.addToPlaceHolders(KEYWORD_TO_INSTANCE, createDefaultInstance(newcls));
        } else if (isImplClass) {
            fastCodeContext.addToPlaceHolders(KEYWORD_TO_IMPL_PACKAGE, newpkg);
            fastCodeContext.addToPlaceHolders(KEYWORD_TO_IMPL_CLASS, newcls);
            fastCodeContext.addToPlaceHolders(KEYWORD_TO_FULL_IMPL_CLASS, newpkg + DOT + newcls);
        }

        if (replaceName && (packageFragment == null || !packageFragment.exists())) {
            throw new Exception("Fatal error : package must exist.");
        } else if (packageFragment == null || !packageFragment.exists()) {
            final File pkgObj = new File(packageFragmentRoot.getResource().getLocationURI());
            /*final FastCodeCheckinCache checkinCache = FastCodeCheckinCache.getInstance();
            checkinCache.getFilesToCheckIn().add(new FastCodeFileForCheckin(INITIATED, pkgObj.getAbsolutePath()));*/
            addOrUpdateFileStatusInCache(pkgObj);

            packageFragment = packageFragmentRoot.createPackageFragment(newpkg, false, monitor);
        }

        ICompilationUnit compilationUnit = packageFragment.getCompilationUnit(newcls + DOT + JAVA_EXTENSION);
        boolean isNew = false;
        final CompUnitBuilder compUnitBuilder = new SimilarCompUnitBuilder();
        if (compilationUnit == null || !compilationUnit.exists()) {
            fastCodeConsole.writeToConsole("Creating class " + newcls);
            // compilationUnit = createCompUnit(packageFragment,
            // fastCodeContext, createSimilarDescriptorClass, newcls);
            final String prjURI = packageFragment.getResource().getLocationURI().toString();
            final String path = prjURI.substring(prjURI.indexOf(COLON) + 1);
            final File newFileObj = new File(path + FORWARD_SLASH + newcls + DOT + JAVA_EXTENSION);
            final FastCodeCheckinCache checkinCache = FastCodeCheckinCache.getInstance();
            checkinCache.getFilesToCheckIn()
                    .add(new FastCodeFileForCheckin(INITIATED, newFileObj.getAbsolutePath()));

            compilationUnit = compUnitBuilder.buildCompUnit(packageFragment, fastCodeContext,
                    createSimilarDescriptorClass, newcls, fastCodeConsole);
            isNew = true;
        } else {
            if (!compilationUnit.getResource().isSynchronized(0)) {
                throw new Exception(compilationUnit.getElementName()
                        + " is not Synchronized, please refresh and try again.");
            }
            fastCodeConsole.writeToConsole("Class  " + newcls + " exists already.");
        }
        fastCodeContext.addCompilationUnitToRegsistry(createSimilarDescriptorClass, compilationUnit);

        compilationUnit.becomeWorkingCopy(monitor);
        fastCodeContext.addResource(new FastCodeResource(compilationUnit.getResource(), isNew));

        monitor.subTask("Creating details for " + compilationUnit.findPrimaryType().getFullyQualifiedName());

        try {
            IType pType = compilationUnit.findPrimaryType();
            int tries = 0;
            // hack because findPrimaryType is not available immediately
            // sometimes.
            while (isNew && (tries++ < MAX_TRY || pType == null || !pType.exists())) {
                pType = compilationUnit.findPrimaryType();
                Thread.sleep(100);
            }
            if (pType == null || !pType.exists()) {
                throw new Exception("Unknown exception occured, please try it again.");
            }

            createNewTypeDetails(fastCodeContext, pType, members, createSimilarDescriptor,
                    createSimilarDescriptorClass, monitor);
            if (globalSettings.isAutoSave()) {
                compilationUnit.commitWorkingCopy(false, monitor);
            }
        } finally {
            compilationUnit.discardWorkingCopy();
        }
    }

    // monitor.subTask("Creating configuration for " +
    // cu.findPrimaryType().getFullyQualifiedName());

    boolean createConfig = false;
    if (createSimilarDescriptor.getNoOfInputs() > 1) {
        return;
    }
    for (final CreateSimilarDescriptorConfig descriptorConfig : createSimilarDescriptor
            .getDescriptorConfigParts()) {
        if (descriptorConfig != null) {
            createConfig = true;
        }
    }

    if (!createConfig) {
        return;
    }

    boolean showFieldsDialog = true;
    final List<FastCodeField> fastCodeFields = new ArrayList<FastCodeField>();
    final Map<String, List<FastCodeField>> fieldsMap = new HashMap<String, List<FastCodeField>>();
    fieldsMap.put("fields", fastCodeFields);

    IType typeForConfiguration = null;
    for (final CreateSimilarDescriptorClass createSimilarDescriptorClass : descriptorClasses) {
        final ICompilationUnit compilationUnit = fastCodeContext
                .getCompilationUnitRegsistry(createSimilarDescriptorClass);
        if (compilationUnit.findPrimaryType().isClass()) {
            typeForConfiguration = compilationUnit.findPrimaryType();
            break;
        }
    }

    for (final CreateSimilarDescriptorConfig descriptorConfig : createSimilarDescriptor
            .getDescriptorConfigParts()) {

        if (descriptorConfig == null) {
            continue;
        }

        final IField[] fields = getFieldsOfType(typeForConfiguration);
        if (showFieldsDialog && fields != null && fields.length > 0) {
            final FieldSelectionDialog fieldSelectionDialog = new FieldSelectionDialog(shell,
                    "Fields for configuration",
                    "Choose the fields for configuration " + descriptorConfig.getConfigType(), fields, true);

            if (fieldSelectionDialog.open() != CANCEL) {
                final Object[] results = fieldSelectionDialog.getResult();
                for (final Object result : results) {
                    final IField field = (IField) result;
                    fastCodeFields.add(new FastCodeField(field, field.getElementName()));
                }
                showFieldsDialog = false; // get the fields first time.
            }
        }

        // String fileName = descriptorConfig.getConfigFileName();
        // final String fileName =
        // replacePlaceHolders(descriptorConfig.getConfigFileName(),
        // fastCodeContext.getPlaceHolders());

        createConfigurations(fastCodeContext, descriptorConfig, targetProject, fieldsMap);
    }
}