/******************************************************************************* * Copyright (c) 2000-present Liferay, Inc. All rights reserved. * * This library is free software; you can redistribute it and/or modify it under * the terms of the GNU Lesser General Public License as published by the Free * Software Foundation; either version 2.1 of the License, or (at your option) * any later version. * * This library is distributed in the hope that it will be useful, but WITHOUT * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS * FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more * details. * *******************************************************************************/ package com.liferay.ide.project.ui.wizard; import com.liferay.ide.core.IWebProject; import com.liferay.ide.core.LiferayCore; import com.liferay.ide.core.util.CoreUtil; import com.liferay.ide.ui.LiferayUIPlugin; import java.util.ArrayList; import java.util.List; import org.eclipse.core.resources.IFile; import org.eclipse.core.resources.IFolder; import org.eclipse.core.resources.IProject; import org.eclipse.core.resources.IResource; import org.eclipse.core.resources.IWorkspaceRoot; import org.eclipse.core.resources.ResourcesPlugin; import org.eclipse.core.runtime.CoreException; import org.eclipse.core.runtime.IAdaptable; import org.eclipse.core.runtime.IPath; import org.eclipse.core.runtime.IStatus; import org.eclipse.core.runtime.Platform; import org.eclipse.core.runtime.Status; import org.eclipse.emf.ecore.EObject; import org.eclipse.jdt.core.IJavaElement; import org.eclipse.jdt.core.IJavaProject; import org.eclipse.jdt.core.JavaCore; import org.eclipse.jdt.core.JavaModelException; import org.eclipse.jdt.internal.ui.JavaPlugin; import org.eclipse.jdt.internal.ui.viewsupport.IViewPartInputProvider; import org.eclipse.jem.util.emf.workbench.ProjectUtilities; import org.eclipse.jface.resource.ImageDescriptor; import org.eclipse.jface.viewers.DecoratingLabelProvider; import org.eclipse.jface.viewers.ILabelProvider; import org.eclipse.jface.viewers.ISelection; import org.eclipse.jface.viewers.IStructuredSelection; import org.eclipse.jface.viewers.ITreeContentProvider; import org.eclipse.jface.viewers.Viewer; import org.eclipse.jface.viewers.ViewerFilter; import org.eclipse.jface.window.Window; import org.eclipse.osgi.util.NLS; import org.eclipse.swt.widgets.Combo; import org.eclipse.swt.widgets.Text; import org.eclipse.ui.IWorkbenchPart; import org.eclipse.ui.IWorkbenchWindow; import org.eclipse.ui.PlatformUI; import org.eclipse.ui.dialogs.ElementTreeSelectionDialog; import org.eclipse.ui.dialogs.ISelectionStatusValidator; import org.eclipse.ui.model.WorkbenchContentProvider; import org.eclipse.ui.model.WorkbenchLabelProvider; import org.eclipse.ui.views.contentoutline.ContentOutline; import org.eclipse.wst.common.componentcore.internal.operation.IArtifactEditOperationDataModelProperties; import org.eclipse.wst.common.componentcore.internal.util.IModuleConstants; import org.eclipse.wst.common.frameworks.datamodel.IDataModel; import org.eclipse.wst.common.frameworks.internal.datamodel.ui.DataModelWizardPage; /** * @author Greg Amerson */ @SuppressWarnings( "restriction" ) public abstract class LiferayDataModelWizardPage extends DataModelWizardPage { public LiferayDataModelWizardPage( IDataModel model, String pageName, String title, ImageDescriptor titleImage ) { super( model, pageName, title, titleImage ); } protected ISelectionStatusValidator getContainerDialogSelectionValidator() { return new ISelectionStatusValidator() { public IStatus validate( Object[] selection ) { if( selection != null && selection.length > 0 && selection[0] != null && !( selection[0] instanceof IProject ) && !( selection[0] instanceof IFolder ) ) { return Status.OK_STATUS; } return LiferayUIPlugin.createErrorStatus( Msgs.chooseValidProjectFile ); } }; } protected ViewerFilter getContainerDialogViewerFilter() { return new ViewerFilter() { public boolean select( Viewer viewer, Object parent, Object element ) { if( element instanceof IProject ) { IProject project = (IProject) element; return project.getName().equals( model.getProperty( IArtifactEditOperationDataModelProperties.PROJECT_NAME ) ); } else if( element instanceof IFolder ) { return true; } else if( element instanceof IFile ) { return true; } return false; } }; } protected IJavaElement getInitialJavaElement( ISelection selection ) { IJavaElement jelem = null; if( selection != null && !selection.isEmpty() && selection instanceof IStructuredSelection ) { Object selectedElement = ( (IStructuredSelection) selection ).getFirstElement(); jelem = getJavaElement( selectedElement ); if( jelem == null ) { IResource resource = getResource( selectedElement ); if( resource != null && resource.getType() != IResource.ROOT ) { while( jelem == null && resource.getType() != IResource.PROJECT ) { resource = resource.getParent(); jelem = (IJavaElement) resource.getAdapter( IJavaElement.class ); } if( jelem == null ) { jelem = JavaCore.create( resource ); // java project } } } } if( jelem == null ) { IWorkbenchWindow window = PlatformUI.getWorkbench().getActiveWorkbenchWindow(); if( window == null ) { return null; } IWorkbenchPart part = window.getActivePage().getActivePart(); if( part instanceof ContentOutline ) { part = window.getActivePage().getActiveEditor(); } if( part instanceof IViewPartInputProvider ) { Object elem = ( (IViewPartInputProvider) part ).getViewPartInput(); if( elem instanceof IJavaElement ) { jelem = (IJavaElement) elem; } } } if( jelem == null || jelem.getElementType() == IJavaElement.JAVA_MODEL ) { try { IJavaProject[] projects = JavaCore.create( getWorkspaceRoot() ).getJavaProjects(); if( projects.length == 1 ) { jelem = projects[0]; } } catch( JavaModelException e ) { JavaPlugin.log( e ); } } return jelem; } protected IJavaElement getJavaElement( Object obj ) { if( obj == null ) { return null; } if( obj instanceof IJavaElement ) { return (IJavaElement) obj; } if( obj instanceof IAdaptable ) { return (IJavaElement) ( (IAdaptable) obj ).getAdapter( IJavaElement.class ); } return (IJavaElement) Platform.getAdapterManager().getAdapter( obj, IJavaElement.class ); } protected IResource getResource( Object obj ) { if( obj == null ) { return null; } if( obj instanceof IResource ) { return (IResource) obj; } if( obj instanceof IAdaptable ) { return (IResource) ( (IAdaptable) obj ).getAdapter( IResource.class ); } return (IResource) Platform.getAdapterManager().getAdapter( obj, IResource.class ); } protected IProject getSelectedProject() { IWorkbenchWindow window = PlatformUI.getWorkbench().getActiveWorkbenchWindow(); if( window == null ) { return null; } ISelection selection = window.getSelectionService().getSelection(); if( selection == null ) { return null; } if( !( selection instanceof IStructuredSelection ) ) { return null; } IJavaElement element = getInitialJavaElement( selection ); if( element != null && element.getJavaProject() != null ) { return element.getJavaProject().getProject(); } IStructuredSelection stucturedSelection = (IStructuredSelection) selection; if( stucturedSelection.getFirstElement() instanceof EObject ) { return ProjectUtilities.getProject( stucturedSelection.getFirstElement() ); } return null; } protected IWorkspaceRoot getWorkspaceRoot() { return ResourcesPlugin.getWorkspace().getRoot(); } protected void handleFileBrowseButton( final Text text, String title, String message ) { ISelectionStatusValidator validator = getContainerDialogSelectionValidator(); ViewerFilter filter = getContainerDialogViewerFilter(); ITreeContentProvider contentProvider = new WorkbenchContentProvider(); ILabelProvider labelProvider = new DecoratingLabelProvider( new WorkbenchLabelProvider(), PlatformUI.getWorkbench().getDecoratorManager().getLabelDecorator() ); ElementTreeSelectionDialog dialog = new ElementTreeSelectionDialog( getShell(), labelProvider, contentProvider ); dialog.setValidator( validator ); dialog.setTitle( title ); dialog.setMessage( message ); dialog.addFilter( filter ); final IWebProject lrproject = LiferayCore.create( IWebProject.class, CoreUtil.getProject( getDataModel().getStringProperty( IArtifactEditOperationDataModelProperties.PROJECT_NAME ) ) ); // IDE-110 if( lrproject != null ) { final IFolder defaultDocroot = lrproject.getDefaultDocrootFolder(); if( defaultDocroot != null ) { dialog.setInput( defaultDocroot ); if( dialog.open() == Window.OK ) { Object element = dialog.getFirstResult(); try { if( element instanceof IFile ) { IFile file = (IFile) element; final IPath relativePath = file.getFullPath().makeRelativeTo( defaultDocroot.getFullPath() ); text.setText( "/" + relativePath.toPortableString() ); //$NON-NLS-1$ // dealWithSelectedContainerResource(container); } } catch( Exception ex ) { // Do nothing } } } } } protected String initializeProjectList( Combo projectCombo, IDataModel dataModel ) { IProject[] workspaceProjects = CoreUtil.getAllProjects(); List<String> items = new ArrayList<String>(); for( int i = 0; i < workspaceProjects.length; i++ ) { IProject project = workspaceProjects[i]; if( isProjectValid( project ) ) { items.add( project.getName() ); } } if( items.isEmpty() ) { return null; } String[] names = new String[items.size()]; for( int i = 0; i < items.size(); i++ ) { names[i] = (String) items.get( i ); } projectCombo.setItems( names ); IProject selectedProject = null; try { if( dataModel != null ) { String projectNameFromModel = dataModel.getStringProperty( IArtifactEditOperationDataModelProperties.COMPONENT_NAME ); if( projectNameFromModel != null && projectNameFromModel.length() > 0 ) { selectedProject = CoreUtil.getProject( projectNameFromModel ); } } } catch( Exception e ) { } try { if( selectedProject == null ) { selectedProject = getSelectedProject(); } if( selectedProject != null && selectedProject.isAccessible() && selectedProject.hasNature( IModuleConstants.MODULE_NATURE_ID ) ) { projectCombo.setText( selectedProject.getName() ); validateProjectRequirements( selectedProject ); dataModel.setProperty( IArtifactEditOperationDataModelProperties.PROJECT_NAME, selectedProject.getName() ); } } catch( CoreException ce ) { // Ignore } if( ( projectCombo.getText() == null || projectCombo.getText().length() == 0 ) && names[0] != null ) { projectCombo.setText( names[0] ); validateProjectRequirements( CoreUtil.getProject( names[0] ) ); dataModel.setProperty( IArtifactEditOperationDataModelProperties.PROJECT_NAME, names[0] ); } return names[0]; } protected abstract boolean isProjectValid( IProject project ); protected void validateProjectRequirements( IProject project ) { } private static class Msgs extends NLS { public static String chooseValidProjectFile; static { initializeMessages( LiferayDataModelWizardPage.class.getName(), Msgs.class ); } } }