/*******************************************************************************
* Copyright 2017 Capital One Services, LLC and Bitwise, Inc.
* 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 hydrograph.ui.validators.utils;
import org.eclipse.core.resources.IFile;
import org.eclipse.core.resources.IProject;
import org.eclipse.core.resources.IResource;
import org.eclipse.core.resources.ResourcesPlugin;
import org.eclipse.jdt.core.IClassFile;
import org.eclipse.jdt.core.IJavaProject;
import org.eclipse.jdt.core.IPackageFragment;
import org.eclipse.jdt.core.IPackageFragmentRoot;
import org.eclipse.jdt.core.JavaCore;
import org.eclipse.jdt.core.JavaModelException;
import org.eclipse.jdt.internal.ui.javaeditor.IClassFileEditorInput;
import org.eclipse.jdt.internal.ui.javaeditor.InternalClassFileEditorInput;
import org.eclipse.jface.text.TextSelection;
import org.eclipse.jface.viewers.ISelection;
import org.eclipse.jface.viewers.IStructuredSelection;
import org.eclipse.ui.IFileEditorInput;
import org.eclipse.ui.ISelectionService;
import org.eclipse.ui.IWorkbenchPage;
import org.eclipse.ui.PlatformUI;
import org.eclipse.ui.internal.Workbench;
import org.slf4j.Logger;
import hydrograph.ui.datastructure.property.NameValueProperty;
import hydrograph.ui.datastructure.property.mapping.MappingSheetRow;
import hydrograph.ui.datastructure.property.mapping.TransformMapping;
import hydrograph.ui.logging.factory.LogFactory;
/**
* utility class for validators.
*
* @author Bitwise
*
*/
public class ValidatorUtility {
private static final Logger logger = LogFactory.INSTANCE.getLogger(ValidatorUtility.class);
public static final ValidatorUtility INSTANCE = new ValidatorUtility();
/**
* This method checks if java file is present under source folder or not.
* @param filePath java file path.
* @return true if file is present otherwise false.
*/
public boolean isClassFilePresentOnBuildPath(String filePath)
{
if(filePath.contains("."))
{
String packageName=filePath.substring(0, filePath.lastIndexOf('.'));
String JavaFileName=filePath.substring(filePath.lastIndexOf('.')+1);
IJavaProject javaProject=null;
ISelectionService selectionService = Workbench.getInstance().getActiveWorkbenchWindow().getSelectionService();
ISelection selection = selectionService.getSelection();
if(selection instanceof IStructuredSelection)
{
Object element = ((IStructuredSelection)selection).getFirstElement();
if(element instanceof IResource)
{
IProject project= ((IResource)element).getProject();
javaProject = JavaCore.create(project);
}
else
{
javaProject=createJavaProjectThroughActiveEditor();
}
}
else if(selection instanceof TextSelection)
{
javaProject=createJavaProjectThroughActiveEditor();
}
IPackageFragmentRoot[] ipackageFragmentRootList=null;
try {
ipackageFragmentRootList = javaProject.getPackageFragmentRoots();
} catch (JavaModelException e) {
logger.error("Unable to get jars which are on build path of project " ,e );
}
for(IPackageFragmentRoot tempIpackageFragmentRoot:ipackageFragmentRootList)
{
if(!tempIpackageFragmentRoot.getElementName().contains("-sources"))
{
IPackageFragment packageFragment=tempIpackageFragmentRoot.getPackageFragment(packageName);
if(!packageFragment.exists())
continue;
else
{
if(packageFragment.getCompilationUnit(JavaFileName+".java").exists()
||packageFragment.getClassFile(JavaFileName+".class").exists()
)
return true;
}
}
}
}
return false;
}
private IJavaProject createJavaProjectThroughActiveEditor() {
IWorkbenchPage page = PlatformUI.getWorkbench().getActiveWorkbenchWindow().getActivePage();
if(page.getActiveEditor().getEditorInput() instanceof IFileEditorInput)
{
IFileEditorInput input = (IFileEditorInput) page.getActiveEditor().getEditorInput();
IFile file = input.getFile();
IProject activeProject = file.getProject();
IProject project = ResourcesPlugin.getWorkspace().getRoot().getProject(activeProject.getName());
return JavaCore.create(project);
}
else if(page.getActiveEditor().getEditorInput() instanceof IClassFileEditorInput)
{
IClassFileEditorInput classFileEditorInput=(InternalClassFileEditorInput)page.getActiveEditor().getEditorInput() ;
IClassFile classFile=classFileEditorInput.getClassFile();
return classFile.getJavaProject();
}
return null;
}
public void putOutputFieldsInTransformMapping(TransformMapping transformMapping) {
for (MappingSheetRow mappingSheetRow : transformMapping.getMappingSheetRows()) {
transformMapping.getOutputFieldList().addAll(mappingSheetRow.getOutputList());
}
for (NameValueProperty nameValueProperty : transformMapping.getMapAndPassthroughField()) {
transformMapping.getOutputFieldList().add(nameValueProperty.getFilterProperty());
}
}
}