/*
* Copyright (C) 2012 The Android Open Source Project
*
* 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 com.motorola.studio.android.logger.collector.util;
import java.io.File;
import java.util.ArrayList;
import java.util.List;
import org.eclipse.jface.dialogs.Dialog;
import org.eclipse.jface.preference.FileFieldEditor;
import org.eclipse.jface.preference.PreferenceDialog;
import org.eclipse.jface.preference.PreferenceManager;
import org.eclipse.jface.preference.StringFieldEditor;
import org.eclipse.jface.wizard.IWizard;
import org.eclipse.jface.wizard.WizardDialog;
import org.eclipse.swt.graphics.Rectangle;
import org.eclipse.swt.widgets.Combo;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Display;
import org.eclipse.swt.widgets.Monitor;
import org.eclipse.swt.widgets.Shell;
import org.eclipse.swt.widgets.Table;
import org.eclipse.swt.widgets.TableItem;
import org.eclipse.swt.widgets.Text;
import org.eclipse.swt.widgets.Tree;
import org.eclipse.swt.widgets.TreeItem;
import org.eclipse.ui.PlatformUI;
/**
* Class with useful methods for widgets.
*/
public class WidgetsUtil
{
/**
* This method test if a given String is null or empty.
*
* @param s The String
* @return <code>true</code> if the String is null or empty,
* <code>false</code> otherwise.
*/
private static boolean isNullOrEmpty(String s)
{
return ((s != null) && s.trim().equals("")); //$NON-NLS-1$
}
/**
* The method verify if the file exist.
*
* @param fileName The full path for file.
* @return <code>true</code> if the file exist, <code>false</code>
* otherwise.
*/
public static boolean fileExist(String fileName)
{
return !isNullOrEmpty(fileName) && new File(fileName).exists();
}
/**
* This method test if some StringFieldEditor value of the given collection
* is null or empty.
*
* @param editors
* @return <code>true</code> if some StringFieldEditor value is null or
* empty, <code>false</code> otherwise.
*/
public static boolean isNullOrEmpty(StringFieldEditor... editors)
{
for (StringFieldEditor editor : editors)
{
if (isNullOrEmpty(editor))
{
return false;
}
}
return true;
}
/**
* This method test if a StringFieldEditor value is null or empty.
*
* @param editor The StringFieldEditor
* @return <code>true</code> if the StringFieldEditor value is null or
* empty, <code>false</code> otherwise.
*/
public static boolean isNullOrEmpty(StringFieldEditor editor)
{
return ((editor != null) && isNullOrEmpty(editor.getStringValue()));
}
/**
* This method test if a StringFieldEditor value contains a invalid
* character.
*
* @param editor The StringFieldEditor
* @return <code>true</code> if the StringFieldEditor value contains invalid
* character, <code>false</code> otherwise.
*/
public static boolean checkExistInvalidCharacter(StringFieldEditor editor, String invalidChars)
{
for (int i = 0; i < invalidChars.length(); i++)
{
String invalidChar = invalidChars.substring(i, i + 1);
if (editor.getStringValue().contains(invalidChar))
{
return true;
}
}
return false;
}
/**
* This method test if a Text value is null or empty.
*
* @param text The Text
* @return <code>true</code> if the Text value is null or empty,
* <code>false</code> otherwise.
*/
public static boolean isNullOrEmpty(Text text)
{
return ((text != null) && isNullOrEmpty(text.getText()));
}
/**
* This method test if a FileFieldEditor value is null or empty.
*
* @param editor The FileFieldEditor
* @return <code>true</code> if the FileFieldEditor value is null or empty,
* <code>false</code> otherwise.
*/
public static boolean isEmpty(FileFieldEditor editor)
{
return isNullOrEmpty(editor.getStringValue());
}
/**
* This method test if a Combo value is null or empty.
*
* @param combo The Combo
* @return <code>true</code> if the Combo value is null or not selected,
* <code>false</code> otherwise.
*/
public static boolean isNullOrDeselected(Combo combo)
{
return ((combo != null) && (combo.getSelectionIndex() == -1));
}
/**
* Returns the size of file.
*
* @param fileName The file name.
* @return The size of file.
*/
public static long fileSize(String fileName)
{
return new File(fileName).length();
}
/**
* This method test if a Table has one or more lines.
*
* @param table The table
* @return <code>true</code> if the Table has one or more lines,
* <code>false</code> otherwise.
*/
public static boolean isNullOrEmpty(Table table)
{
return table.getItemCount() > 0;
}
/**
* Executes a wizard.
*
* @param wizard The wizard.
* @return <code>true</code> if the Wizard dialog has constant OK,
* <code>false</code> otherwise .
*/
public static boolean runWizard(IWizard wizard)
{
Shell activeShell = Display.getCurrent().getActiveShell();
WizardDialog dialog = new WizardDialog(activeShell, wizard);
try
{
dialog.create();
}
catch (Throwable e)
{
e.printStackTrace();
}
centerDialog(dialog);
return dialog.open() == WizardDialog.OK;
}
/**
* Opens the Eclipse preferences dialog and selects the page of the given
* id.
*
* @param shell The shell.
* @param selectedNode The preferences page to selec.
* @return <code>true</code> if the Wizard dialog has constant OK,
* <code>false</code> otherwise .
*/
public static boolean runPreferencePage(Shell shell, String selectedNode)
{
PreferenceManager manager = PlatformUI.getWorkbench().getPreferenceManager();
PreferenceDialog dialog = new PreferenceDialog(shell, manager);
dialog.setSelectedNode(selectedNode);
WidgetsUtil.centerDialog(shell);
return dialog.open() == PreferenceDialog.OK;
}
/**
* Center the dialog.
*
* @param shell The shell.
*/
public static void centerDialog(Shell shell)
{
Monitor primary = shell.getDisplay().getPrimaryMonitor();
Rectangle bounds = primary.getBounds();
Rectangle rect = shell.getBounds();
int x = bounds.x + (bounds.width - rect.width) / 2;
int y = bounds.y + (bounds.height - rect.height) / 2;
shell.setLocation(x, y);
}
/**
* Center the dialog.
*
* @param dialog The dialog.
*/
public static void centerDialog(Dialog dialog)
{
centerDialog(dialog.getShell());
}
/**
* Check the leaf items of the given tree.
*
* @param tree The tree.
* @return A collection containing the leaf tree items.
*/
public static List<TreeItem> getCheckedLeafItems(Tree tree)
{
List<TreeItem> toReturn = new ArrayList<TreeItem>();
selectCheckedLeafItems(tree.getItems(), toReturn);
return toReturn;
}
/**
* Returns a list of the leaf nodes that are checked.
*
* @param items The parent items.
* @param list A list of the leaf nodes that are checked.
*/
private static void selectCheckedLeafItems(TreeItem[] items, List<TreeItem> list)
{
int len = items.length;
for (int i = 0; i < len; i++)
{
if (items[i].getItemCount() > 0)
{
selectCheckedLeafItems(items[i].getItems(), list);
}
else if (items[i].getChecked())
{
list.add(items[i]);
}
}
}
/**
* Expand all the given tree items.
*
* @param items The tree items.
*/
public static void expandAll(TreeItem[] items)
{
for (int i = 0; i < items.length; i++)
{
if (items[i].getItems().length > 0)
{
items[i].setExpanded(true);
expandAll(items[i].getItems());
}
}
}
/**
* Returns the full path of a given tree item.
*
* @param item The tree item.
* @return The full path of a given tree item.
*/
public static String getFullPathTreeItem(TreeItem item)
{
String toReturn = item.getText();
if (item != null)
{
if (item.getParentItem() != null)
{
toReturn = getFullPathTreeItem(item.getParentItem()) + "." + toReturn; //$NON-NLS-1$
}
}
return toReturn;
}
/**
* This method verifies if a given file can be read.
*
* @param fileName the full file path.
* @return <code>true</code> if read permission is granted,
* <code>false</code> otherwise.
*/
public static boolean canRead(String fileName)
{
return !isNullOrEmpty(fileName) && new File(fileName).canRead();
}
/**
* This method verifies if a given file has the read and write permissions
* granted.
*
* @param fileName The file
* @return <code>true</code> if permissions are granted, <code>false</code>
* otherwise.
*/
public static boolean canReadWrite(String fileName)
{
File file = new File(fileName);
return file.canRead() && file.canWrite();
}
/**
* This method simulates a refresh in a Composite object.
*
* @param composite A composite object.
*/
public static void refreshComposite(Composite composite)
{
for (Composite parent = composite.getParent(); parent != null; parent = parent.getParent())
{
parent.layout();
}
}
/**
* Check the leaf items of the given table.
*
* @param table The table.
* @return A collection containing the leaf table items.
*/
public static List<TableItem> getCheckedLeafItems(Table table)
{
List<TableItem> toReturn = new ArrayList<TableItem>();
selectCheckedLeafItems(table.getItems(), toReturn);
return toReturn;
}
/**
* Returns a list of the leaf nodes that are checked.
*
* @param items The parent items.
* @param list A list of the leaf nodes that are checked.
*/
private static void selectCheckedLeafItems(TableItem[] items, List<TableItem> list)
{
int len = items.length;
for (int i = 0; i < len; i++)
{
if (items[i].getChecked())
{
list.add(items[i]);
}
}
}
}