1 /*******************************************************************************
2  * Copyright (c) 2006, 2008 IBM Corporation and others.
3  *
4  * This program and the accompanying materials
5  * are made available under the terms of the Eclipse Public License 2.0
6  * which accompanies this distribution, and is available at
7  * https://www.eclipse.org/legal/epl-2.0/
8  *
9  * SPDX-License-Identifier: EPL-2.0
10  *
11  * Contributors:
12  *     IBM Corporation - initial API and implementation
13  *******************************************************************************/
14 package org.eclipse.jdt.internal.corext.refactoring.reorg;
15 
16 import org.eclipse.core.resources.IResource;
17 
18 import org.eclipse.ltk.core.refactoring.participants.ReorgExecutionLog;
19 
20 import org.eclipse.jdt.core.ICompilationUnit;
21 import org.eclipse.jdt.core.IPackageFragment;
22 import org.eclipse.jdt.core.IPackageFragmentRoot;
23 
24 /**
25  * Logged implementation of new name queries.
26  *
27  * @since 3.3
28  */
29 public final class LoggedNewNameQueries implements INewNameQueries {
30 
31 	/** Default implementation of a new name query */
32 	private final class NewNameQuery implements INewNameQuery {
33 
34 		/** The name */
35 		private final String fName;
36 
37 		/** The object */
38 		private final Object fObject;
39 
40 		/**
41 		 * Creates a new new name query.
42 		 *
43 		 * @param object
44 		 *            the object
45 		 * @param name
46 		 *            the initial suggested name
47 		 */
NewNameQuery(final Object object, String name)48 		public NewNameQuery(final Object object, String name) {
49 			fObject= object;
50 			fName= name;
51 		}
52 
53 		/**
54 		 * Returns the new name of the compilation unit, without any extension.
55 		 *
56 		 * @return the new name, or <code>null</code>
57 		 */
getCompilationUnitName()58 		private String getCompilationUnitName() {
59 			String name= fLog.getNewName(fObject);
60 			if (name != null) {
61 				int index= name.lastIndexOf('.');
62 				if (index > 0)
63 					name= name.substring(0, index);
64 			}
65 			return name;
66 		}
67 
68 		@Override
getNewName()69 		public String getNewName() {
70 			String name= null;
71 			if (fObject instanceof ICompilationUnit)
72 				name= getCompilationUnitName();
73 			else
74 				name= fLog.getNewName(fObject);
75 			if (name == null)
76 				name= fName;
77 			return fName;
78 		}
79 	}
80 
81 	/** The reorg execution log */
82 	private final ReorgExecutionLog fLog;
83 
84 	/**
85 	 * Creates a new logged new name queries.
86 	 *
87 	 * @param log
88 	 *            the reorg execution log
89 	 */
LoggedNewNameQueries(final ReorgExecutionLog log)90 	public LoggedNewNameQueries(final ReorgExecutionLog log) {
91 		fLog= log;
92 	}
93 
94 	@Override
createNewCompilationUnitNameQuery(final ICompilationUnit unit, final String initialSuggestedName)95 	public INewNameQuery createNewCompilationUnitNameQuery(final ICompilationUnit unit, final String initialSuggestedName) {
96 		return new NewNameQuery(unit, initialSuggestedName);
97 	}
98 
99 	@Override
createNewPackageFragmentRootNameQuery(final IPackageFragmentRoot root, final String initialSuggestedName)100 	public INewNameQuery createNewPackageFragmentRootNameQuery(final IPackageFragmentRoot root, final String initialSuggestedName) {
101 		return new NewNameQuery(root, initialSuggestedName);
102 	}
103 
104 	@Override
createNewPackageNameQuery(final IPackageFragment fragment, final String initialSuggestedName)105 	public INewNameQuery createNewPackageNameQuery(final IPackageFragment fragment, final String initialSuggestedName) {
106 		return new NewNameQuery(fragment, initialSuggestedName);
107 	}
108 
109 	@Override
createNewResourceNameQuery(final IResource resource, final String initialSuggestedName)110 	public INewNameQuery createNewResourceNameQuery(final IResource resource, final String initialSuggestedName) {
111 		return new NewNameQuery(resource, initialSuggestedName);
112 	}
113 
114 	@Override
createNullQuery()115 	public INewNameQuery createNullQuery() {
116 		return createStaticQuery(null);
117 	}
118 
119 	@Override
createStaticQuery(final String name)120 	public INewNameQuery createStaticQuery(final String name) {
121 		return () -> name;
122 	}
123 }
124