Java tutorial
/******************************************************************************* * 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.hook.ui.wizard; import com.liferay.ide.core.ILiferayPortal; import com.liferay.ide.core.ILiferayProject; import com.liferay.ide.core.IWebProject; import com.liferay.ide.core.LiferayCore; import com.liferay.ide.core.util.CoreUtil; import com.liferay.ide.hook.core.operation.INewHookDataModelProperties; import com.liferay.ide.hook.ui.HookUI; import com.liferay.ide.project.ui.wizard.StringArrayTableWizardSectionCallback; import com.liferay.ide.ui.util.SWTUtil; import org.eclipse.core.resources.IFile; import org.eclipse.core.resources.IFolder; import org.eclipse.core.resources.IProject; import org.eclipse.core.runtime.IPath; import org.eclipse.core.runtime.IStatus; import org.eclipse.core.runtime.Status; import org.eclipse.jface.viewers.DecoratingLabelProvider; import org.eclipse.jface.viewers.ILabelProvider; 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.jst.j2ee.internal.plugin.J2EEUIMessages; import org.eclipse.osgi.util.NLS; import org.eclipse.swt.SWT; import org.eclipse.swt.events.SelectionAdapter; import org.eclipse.swt.events.SelectionEvent; import org.eclipse.swt.layout.GridData; import org.eclipse.swt.layout.GridLayout; import org.eclipse.swt.widgets.Button; import org.eclipse.swt.widgets.Composite; import org.eclipse.swt.widgets.Text; 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.wst.common.componentcore.internal.operation.IArtifactEditOperationDataModelProperties; import org.eclipse.wst.common.frameworks.datamodel.IDataModel; import org.eclipse.wst.common.frameworks.internal.datamodel.ui.DataModelWizardPage; /** * @author Greg Amerson * @author Terry Jia * @author Simon Jiang */ @SuppressWarnings("restriction") public class NewCustomJSPsHookWizardPage extends DataModelWizardPage implements INewHookDataModelProperties { protected Text customJSPsFolder; protected Button disableJSPFolderValidation; protected CustomJSPsTableWizardSection jspItemsSection; protected Text selectedProject; protected Text webRootFolder; public NewCustomJSPsHookWizardPage(IDataModel dataModel, String pageName) { super(dataModel, pageName, Msgs.createCustomJSPs, HookUI.imageDescriptorFromPlugin(HookUI.PLUGIN_ID, "/icons/wizban/hook_wiz.png")); //$NON-NLS-1$ setDescription(Msgs.createCustomsJSPFolderSelectJSPs); } protected void createCustomJSPsGroup(Composite parent) { Composite composite = SWTUtil.createTopComposite(parent, 2); composite.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, true, false, 3, 1)); jspItemsSection = new CustomJSPsTableWizardSection(composite, Msgs.jspFilesOverride, Msgs.jspFilePath, Msgs.add, Msgs.edit, Msgs.remove, new String[] { Msgs.add }, new String[] { Msgs.jspFilePath }, null, getDataModel(), CUSTOM_JSPS_ITEMS); GridData gd = new GridData(SWT.FILL, SWT.CENTER, true, true, 1, 1); gd.heightHint = 175; jspItemsSection.setLayoutData(gd); jspItemsSection.setCallback(new StringArrayTableWizardSectionCallback()); IProject project = CoreUtil.getProject(getDataModel().getStringProperty(PROJECT_NAME)); final ILiferayProject liferayProject = LiferayCore.create(project); if (liferayProject != null) { final ILiferayPortal portal = liferayProject.adapt(ILiferayPortal.class); if (portal != null) { final IPath portalDir = portal.getAppServerPortalDir(); if (portalDir != null && portalDir.toFile().exists()) { jspItemsSection.setPortalDir(portalDir.toFile()); } } } } protected void createDisableJSPFolderValidation(Composite topComposite) { Composite composite = SWTUtil.createTopComposite(topComposite, 3); GridLayout gl = new GridLayout(1, false); // gl.marginLeft = 5; composite.setLayout(gl); composite.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, true, false, 3, 1)); disableJSPFolderValidation = new Button(composite, SWT.CHECK); disableJSPFolderValidation.setText(Msgs.disableJSPSyntaxValidation); this.synchHelper.synchCheckbox(disableJSPFolderValidation, DISABLE_CUSTOM_JSP_FOLDER_VALIDATION, null); } protected void createJSPFolderGroup(Composite topComposite) { Composite composite = SWTUtil.createTopComposite(topComposite, 3); GridLayout gl = new GridLayout(3, false); // gl.marginLeft = 5; composite.setLayout(gl); composite.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, true, false, 3, 1)); SWTUtil.createLabel(composite, SWT.LEAD, Msgs.customJSPFolder, 1); customJSPsFolder = SWTUtil.createText(composite, 1); this.synchHelper.synchText(customJSPsFolder, CUSTOM_JSPS_FOLDER, null); Button iconFileBrowse = SWTUtil.createPushButton(composite, Msgs.browse, null); iconFileBrowse.addSelectionListener(new SelectionAdapter() { @Override public void widgetSelected(SelectionEvent e) { handleFileBrowseButton(NewCustomJSPsHookWizardPage.this.customJSPsFolder); } }); } protected void createSelectedProjectGroup(Composite topComposite) { Composite composite = SWTUtil.createTopComposite(topComposite, 3); GridLayout gl = new GridLayout(3, false); composite.setLayout(gl); composite.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, true, false, 3, 1)); SWTUtil.createLabel(composite, SWT.LEAD, Msgs.selectedProject, 1); selectedProject = SWTUtil.createText(composite, 2); selectedProject.setEditable(false); this.synchHelper.synchText(selectedProject, SELECTED_PROJECT, null); SWTUtil.createLabel(composite, SWT.LEAD, Msgs.webRootFolder, 1); webRootFolder = SWTUtil.createText(composite, 2); webRootFolder.setEditable(false); this.synchHelper.synchText(webRootFolder, WEB_ROOT_FOLDER, null); } @Override protected Composite createTopLevelComposite(Composite parent) { Composite topComposite = SWTUtil.createTopComposite(parent, 3); createSelectedProjectGroup(topComposite); createJSPFolderGroup(topComposite); createCustomJSPsGroup(topComposite); createDisableJSPFolderValidation(topComposite); return topComposite; } @Override protected void enter() { super.enter(); this.synchHelper.synchAllUIWithModel(); } 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 IFile)) { return Status.OK_STATUS; } return HookUI.createErrorStatus(Msgs.chooseValidFolder); } }; } 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) { IFolder folder = (IFolder) element; final IWebProject webproject = LiferayCore.create(IWebProject.class, folder.getProject()); if (webproject != null && webproject.getDefaultDocrootFolder().contains(folder) || folder.contains(webproject.getDefaultDocrootFolder())) { return true; } } return false; } }; } @Override protected String[] getValidationPropertyNames() { return new String[] { CUSTOM_JSPS_FOLDER, CUSTOM_JSPS_ITEMS }; } protected void handleFileBrowseButton(final Text text) { 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(J2EEUIMessages.CONTAINER_SELECTION_DIALOG_TITLE); dialog.setMessage(J2EEUIMessages.CONTAINER_SELECTION_DIALOG_DESC); dialog.addFilter(filter); dialog.setInput(CoreUtil.getWorkspaceRoot()); if (dialog.open() == Window.OK) { Object element = dialog.getFirstResult(); try { if (element instanceof IFolder) { IFolder folder = (IFolder) element; IProject project = CoreUtil.getProject(getDataModel().getStringProperty(PROJECT_NAME)); final IWebProject webproject = LiferayCore.create(IWebProject.class, project); if (webproject != null) { IFolder defaultWebappRootFolder = webproject.getDefaultDocrootFolder(); if (folder.equals(defaultWebappRootFolder)) { folder = folder.getFolder("custom_jsps"); } String defaultWebappRootFolderFullPath = defaultWebappRootFolder.getFullPath() .toPortableString(); String folderFullPath = folder.getFullPath().toPortableString(); int index = folderFullPath.indexOf(defaultWebappRootFolderFullPath); if (index != -1) { folderFullPath = folderFullPath .substring(index + defaultWebappRootFolderFullPath.length()); } text.setText(folderFullPath); } } } catch (Exception ex) { // Do nothing } } } private static class Msgs extends NLS { public static String add; public static String browse; public static String chooseValidFolder; public static String createCustomJSPs; public static String createCustomsJSPFolderSelectJSPs; public static String customJSPFolder; public static String disableJSPSyntaxValidation; public static String edit; public static String jspFilePath; public static String jspFilesOverride; public static String remove; public static String selectedProject; public static String webRootFolder; static { initializeMessages(NewCustomJSPsHookWizardPage.class.getName(), Msgs.class); } } }