/** * Aptana Studio * Copyright (c) 2005-2012 by Appcelerator, Inc. All Rights Reserved. * Licensed under the terms of the GNU Public License (GPL) v3 (with exceptions). * Please see the license.html included with this distribution for details. * Any modifications to this file must keep this entire header intact. */ package com.aptana.ui.ftp.preferences; import org.eclipse.core.runtime.Platform; import org.eclipse.core.runtime.preferences.IEclipsePreferences; import org.eclipse.jface.layout.GridDataFactory; import org.eclipse.jface.layout.GridLayoutFactory; import org.eclipse.jface.preference.PreferencePage; import org.eclipse.swt.SWT; import org.eclipse.swt.events.ModifyEvent; import org.eclipse.swt.events.ModifyListener; import org.eclipse.swt.widgets.Composite; import org.eclipse.swt.widgets.Control; import org.eclipse.swt.widgets.Group; import org.eclipse.swt.widgets.Label; import org.eclipse.swt.widgets.Text; import org.eclipse.ui.IWorkbench; import org.eclipse.ui.IWorkbenchPreferencePage; import org.osgi.service.prefs.BackingStoreException; import com.aptana.core.logging.IdeLog; import com.aptana.core.util.EclipseUtil; import com.aptana.core.util.StringUtil; import com.aptana.filesystem.ftp.FTPPlugin; import com.aptana.filesystem.ftp.preferences.FTPPreferenceInitializer; import com.aptana.filesystem.ftp.preferences.IFTPPreferenceConstants; import com.aptana.ide.core.io.preferences.PermissionDirection; import com.aptana.ide.core.io.preferences.PreferenceUtils; import com.aptana.ui.ftp.FTPUIPlugin; /** * @author Michael Xia (mxia@appcelerator.com) */ public class FTPPreferencePage extends PreferencePage implements IWorkbenchPreferencePage { private UpdatePermissionsComposite uploadPermComposite; private UpdatePermissionsComposite downloadPermComposite; private Text fKeepAliveText; /** * Constructor. */ public FTPPreferencePage() { } public void init(IWorkbench workbench) { setDescription(Messages.FTPPreferencePage_Notes); } @Override public boolean performOk() { PreferenceUtils.setUpdatePermissions(uploadPermComposite.getUpdatePermissions(), PermissionDirection.UPLOAD); PreferenceUtils .setSpecificPermissions(uploadPermComposite.getSpecificPermissions(), PermissionDirection.UPLOAD); PreferenceUtils.setFilePermissions(uploadPermComposite.getFilePermissions(), PermissionDirection.UPLOAD); PreferenceUtils.setFolderPermissions(uploadPermComposite.getFolderPermissions(), PermissionDirection.UPLOAD); PreferenceUtils .setUpdatePermissions(downloadPermComposite.getUpdatePermissions(), PermissionDirection.DOWNLOAD); PreferenceUtils.setSpecificPermissions(downloadPermComposite.getSpecificPermissions(), PermissionDirection.DOWNLOAD); PreferenceUtils.setFilePermissions(downloadPermComposite.getFilePermissions(), PermissionDirection.DOWNLOAD); PreferenceUtils .setFolderPermissions(downloadPermComposite.getFolderPermissions(), PermissionDirection.DOWNLOAD); IEclipsePreferences prefs = EclipseUtil.instanceScope().getNode(FTPPlugin.PLUGIN_ID); prefs.putInt(IFTPPreferenceConstants.KEEP_ALIVE_TIME, Integer.parseInt(fKeepAliveText.getText())); try { prefs.flush(); } catch (BackingStoreException e) { IdeLog.logError(FTPUIPlugin.getDefault(), e); } return super.performOk(); } @Override protected Control createContents(Composite parent) { Composite main = new Composite(parent, SWT.NONE); main.setLayout(GridLayoutFactory.fillDefaults().create()); Group group = new Group(main, SWT.NONE); group.setText(Messages.FTPPreferencePage_LBL_Uploads); group.setLayout(GridLayoutFactory.fillDefaults().create()); group.setLayoutData(GridDataFactory.fillDefaults().grab(true, false).create()); uploadPermComposite = new UpdatePermissionsComposite(group, PermissionDirection.UPLOAD); uploadPermComposite.setLayoutData(GridDataFactory.fillDefaults().grab(true, true).create()); group = new Group(main, SWT.NONE); group.setText(Messages.FTPPreferencePage_LBL_Downloads); group.setLayout(GridLayoutFactory.fillDefaults().create()); group.setLayoutData(GridDataFactory.fillDefaults().grab(true, false).create()); downloadPermComposite = new UpdatePermissionsComposite(group, PermissionDirection.DOWNLOAD); downloadPermComposite.setLayoutData(GridDataFactory.fillDefaults().grab(true, true).create()); Composite keepAlive = new Composite(main, SWT.NONE); keepAlive.setLayout(GridLayoutFactory.fillDefaults().numColumns(2).create()); keepAlive.setLayoutData(GridDataFactory.fillDefaults().grab(true, false).create()); Label label = new Label(keepAlive, SWT.NONE); label.setText(Messages.FTPPreferencePage_LBL_KeepAlive); fKeepAliveText = new Text(keepAlive, SWT.BORDER); int initialTime = Platform.getPreferencesService().getInt(FTPPlugin.PLUGIN_ID, IFTPPreferenceConstants.KEEP_ALIVE_TIME, FTPPreferenceInitializer.DEFAULT_KEEP_ALIVE_MINUTES, null); fKeepAliveText.setText(String.valueOf(initialTime)); fKeepAliveText.setLayoutData(GridDataFactory.swtDefaults().align(SWT.FILL, SWT.CENTER).grab(true, false) .create()); fKeepAliveText.addModifyListener(new ModifyListener() { public void modifyText(ModifyEvent e) { validate(); } }); return main; } @Override protected void performDefaults() { uploadPermComposite.restoreDefaults(); downloadPermComposite.restoreDefaults(); fKeepAliveText.setText(String.valueOf(FTPPreferenceInitializer.DEFAULT_KEEP_ALIVE_MINUTES)); super.performDefaults(); } private void validate() { String error = null; String keepAliveMins = fKeepAliveText.getText(); if (StringUtil.isEmpty(keepAliveMins)) { error = Messages.FTPPreferencePage_ERR_Invalid_KeepAlive_Time; } else { // makes sure the keep-alive time is a positive integer try { int mins = Integer.parseInt(keepAliveMins); if (mins <= 0) { throw new NumberFormatException("negative"); //$NON-NLS-1$ } } catch (NumberFormatException e) { error = Messages.FTPPreferencePage_ERR_Invalid_KeepAlive_Time; } } setErrorMessage(error); setValid(error == null); } }