KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > org > eclipse > jdt > internal > corext > refactoring > reorg > LoggedCreateTargetQueries


1 /*******************************************************************************
2  * Copyright (c) 2006 IBM Corporation and others.
3  * All rights reserved. This program and the accompanying materials
4  * are made available under the terms of the Eclipse Public License v1.0
5  * which accompanies this distribution, and is available at
6  * http://www.eclipse.org/legal/epl-v10.html
7  *
8  * Contributors:
9  * IBM Corporation - initial API and implementation
10  *******************************************************************************/

11 package org.eclipse.jdt.internal.corext.refactoring.reorg;
12
13 import java.util.Arrays JavaDoc;
14 import java.util.List JavaDoc;
15
16 import org.eclipse.core.runtime.Assert;
17 import org.eclipse.core.runtime.CoreException;
18 import org.eclipse.core.runtime.NullProgressMonitor;
19
20 import org.eclipse.core.resources.IFolder;
21 import org.eclipse.core.resources.IProject;
22
23 import org.eclipse.jdt.core.IClasspathEntry;
24 import org.eclipse.jdt.core.IJavaElement;
25 import org.eclipse.jdt.core.IJavaProject;
26 import org.eclipse.jdt.core.IPackageFragment;
27 import org.eclipse.jdt.core.IPackageFragmentRoot;
28 import org.eclipse.jdt.core.JavaCore;
29
30 import org.eclipse.jdt.internal.ui.JavaPlugin;
31 import org.eclipse.jdt.internal.ui.util.CoreUtility;
32 import org.eclipse.jdt.internal.ui.wizards.buildpaths.BuildPathsBlock;
33
34 /**
35  * Logged implementation of new create target queries.
36  *
37  * @since 3.3
38  */

39 public final class LoggedCreateTargetQueries implements ICreateTargetQueries {
40
41     /** Default implementation of create target query */
42     private final class CreateTargetQuery implements ICreateTargetQuery {
43
44         private void createJavaProject(IProject project) throws CoreException {
45             if (!project.exists()) {
46                 BuildPathsBlock.createProject(project, null, new NullProgressMonitor());
47                 BuildPathsBlock.addJavaNature(project, new NullProgressMonitor());
48             }
49         }
50
51         private void createPackageFragmentRoot(IPackageFragmentRoot root) throws CoreException {
52             final IJavaProject project= root.getJavaProject();
53             if (!project.exists())
54                 createJavaProject(project.getProject());
55             final IFolder folder= project.getProject().getFolder(root.getElementName());
56             if (!folder.exists())
57                 CoreUtility.createFolder(folder, true, true, new NullProgressMonitor());
58             final List JavaDoc list= Arrays.asList(project.getRawClasspath());
59             list.add(JavaCore.newSourceEntry(folder.getFullPath()));
60             project.setRawClasspath((IClasspathEntry[]) list.toArray(new IClasspathEntry[list.size()]), new NullProgressMonitor());
61         }
62
63         /**
64          * {@inheritDoc}
65          */

66         public Object JavaDoc getCreatedTarget(final Object JavaDoc selection) {
67             final Object JavaDoc target= fLog.getCreatedElement(selection);
68             if (target instanceof IPackageFragment) {
69                 final IPackageFragment fragment= (IPackageFragment) target;
70                 final IJavaElement parent= fragment.getParent();
71                 if (parent instanceof IPackageFragmentRoot) {
72                     try {
73                         final IPackageFragmentRoot root= (IPackageFragmentRoot) parent;
74                         if (!root.exists())
75                             createPackageFragmentRoot(root);
76                         if (!fragment.exists())
77                             root.createPackageFragment(fragment.getElementName(), true, new NullProgressMonitor());
78                     } catch (CoreException exception) {
79                         JavaPlugin.log(exception);
80                         return null;
81                     }
82                 }
83             } else if (target instanceof IFolder) {
84                 try {
85                     final IFolder folder= (IFolder) target;
86                     final IProject project= folder.getProject();
87                     if (!project.exists())
88                         createJavaProject(project);
89                     if (!folder.exists())
90                         CoreUtility.createFolder(folder, true, true, new NullProgressMonitor());
91                 } catch (CoreException exception) {
92                     JavaPlugin.log(exception);
93                     return null;
94                 }
95             }
96             return target;
97         }
98
99         /**
100          * {@inheritDoc}
101          */

102         public String JavaDoc getNewButtonLabel() {
103             return "unused"; //$NON-NLS-1$
104
}
105     }
106
107     /** The create target execution log */
108     private final CreateTargetExecutionLog fLog;
109
110     /**
111      * Creates a new logged create target queries.
112      *
113      * @param log
114      * the create target execution log
115      */

116     public LoggedCreateTargetQueries(final CreateTargetExecutionLog log) {
117         Assert.isNotNull(log);
118         fLog= log;
119     }
120
121     /**
122      * {@inheritDoc}
123      */

124     public ICreateTargetQuery createNewPackageQuery() {
125         return new CreateTargetQuery();
126     }
127
128     /**
129      * Returns the create target execution log.
130      *
131      * @return the create target execution log
132      */

133     public CreateTargetExecutionLog getCreateTargetExecutionLog() {
134         return fLog;
135     }
136 }
Popular Tags