/** * Aptana Studio * Copyright (c) 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 java.util.HashMap; import java.util.Map; import org.eclipse.jface.layout.GridDataFactory; import org.eclipse.jface.layout.GridLayoutFactory; import org.eclipse.swt.SWT; import org.eclipse.swt.events.SelectionAdapter; import org.eclipse.swt.events.SelectionEvent; import org.eclipse.swt.widgets.Button; import org.eclipse.swt.widgets.Combo; import org.eclipse.swt.widgets.Composite; import com.aptana.core.util.StringUtil; import com.aptana.ide.core.io.preferences.PermissionDirection; import com.aptana.ide.core.io.preferences.PreferenceInitializer; import com.aptana.ide.core.io.preferences.PreferenceUtils; import com.aptana.ide.ui.io.preferences.PermissionsGroup; import com.aptana.ide.ui.io.preferences.PermissionsGroup.Listener; public class UpdatePermissionsComposite extends Composite { private static final String FOR_FILES = Messages.UpdatePermissionsComposite_ForFiles; private static final String FOR_FOLDERS = Messages.UpdatePermissionsComposite_ForFolders; private static final String[] COMBO_ITEMS = { FOR_FILES, FOR_FOLDERS }; private Button updatePermCheckbox; private Button preservePermButton; private Button specificPermButton; private Combo forFileFolderCombo; private PermissionsGroup permissionsGroup; // a map to track the current permissions set for files and folders private Map<String, Long> permissionsMap; /** * The constructor. * * @param parent * the parent shell * @param direction * indicates if this is for upload or download permissions */ public UpdatePermissionsComposite(Composite parent, PermissionDirection direction) { super(parent, SWT.NONE); setLayout(GridLayoutFactory.swtDefaults().create()); permissionsMap = new HashMap<String, Long>(); updatePermCheckbox = new Button(this, SWT.CHECK); updatePermCheckbox.setText(Messages.UpdatePermissionsComposite_LBL_UpdatePermissions); updatePermCheckbox.setSelection(PreferenceUtils.getUpdatePermissions(direction)); updatePermCheckbox.addSelectionListener(new SelectionAdapter() { @Override public void widgetSelected(SelectionEvent e) { updateStates(); } }); Composite composite = new Composite(this, SWT.NONE); composite.setLayout(GridLayoutFactory.fillDefaults().extendedMargins(20, 0, 0, 0).spacing(5, 0).create()); composite.setLayoutData(GridDataFactory.fillDefaults().grab(true, false).create()); preservePermButton = new Button(composite, SWT.RADIO); preservePermButton.setText(Messages.UpdatePermissionsComposite_LBL_ToSourcePermissions); boolean useSpecificPermissions = PreferenceUtils.getSpecificPermissions(direction); preservePermButton.setSelection(!useSpecificPermissions); preservePermButton.addSelectionListener(new SelectionAdapter() { @Override public void widgetSelected(SelectionEvent e) { specificPermButton.setSelection(false); updateStates(); } }); Composite specificPermComp = new Composite(composite, SWT.NONE); specificPermComp.setLayout(GridLayoutFactory.fillDefaults().numColumns(2).create()); specificPermButton = new Button(specificPermComp, SWT.RADIO); specificPermButton.setText(StringUtil .makeFormLabel(Messages.UpdatePermissionsComposite_LBL_ToSpecificPermissions)); specificPermButton.setSelection(useSpecificPermissions); specificPermButton.addSelectionListener(new SelectionAdapter() { @Override public void widgetSelected(SelectionEvent e) { preservePermButton.setSelection(false); updateStates(); } }); forFileFolderCombo = new Combo(specificPermComp, SWT.DROP_DOWN | SWT.READ_ONLY); forFileFolderCombo.setItems(COMBO_ITEMS); forFileFolderCombo.setText(COMBO_ITEMS[0]); forFileFolderCombo.addSelectionListener(new SelectionAdapter() { @Override public void widgetSelected(SelectionEvent e) { updatePermissionsGroup(); } }); permissionsGroup = new PermissionsGroup(specificPermComp); permissionsGroup.setLayoutData(GridDataFactory.fillDefaults().grab(true, false).span(2, 1).indent(20, 0) .create()); permissionsMap.put(FOR_FILES, PreferenceUtils.getFilePermissions(direction)); permissionsMap.put(FOR_FOLDERS, PreferenceUtils.getFolderPermissions(direction)); updatePermissionsGroup(); permissionsGroup.addListener(new Listener() { public void permissionsModified() { permissionsMap.put(forFileFolderCombo.getText(), permissionsGroup.getPermissions()); } }); updateStates(); } public boolean getUpdatePermissions() { return updatePermCheckbox.getSelection(); } public boolean getSpecificPermissions() { return specificPermButton.getSelection(); } public long getFilePermissions() { return permissionsMap.get(FOR_FILES); } public long getFolderPermissions() { return permissionsMap.get(FOR_FOLDERS); } public void restoreDefaults() { updatePermCheckbox.setSelection(true); preservePermButton.setSelection(false); specificPermButton.setSelection(true); forFileFolderCombo.setText(COMBO_ITEMS[0]); permissionsMap.put(FOR_FILES, PreferenceInitializer.DEFAULT_FILE_PERMISSIONS); permissionsMap.put(FOR_FOLDERS, PreferenceInitializer.DEFAULT_DIRECTORY_PERMISSIONS); updatePermissionsGroup(); updateStates(); } private void updatePermissionsGroup() { if (isForFilesSelected()) { permissionsGroup.setPermissions(permissionsMap.get(FOR_FILES)); } else { permissionsGroup.setPermissions(permissionsMap.get(FOR_FOLDERS)); } } private void updateStates() { boolean updatePermissions = updatePermCheckbox.getSelection(); boolean useSpecificPermissions = specificPermButton.getSelection(); preservePermButton.setEnabled(updatePermissions); specificPermButton.setEnabled(updatePermissions); forFileFolderCombo.setEnabled(updatePermissions && useSpecificPermissions); permissionsGroup.setEnabled(updatePermissions && useSpecificPermissions); } private boolean isForFilesSelected() { return FOR_FILES.equals(forFileFolderCombo.getText()); } }