summaryrefslogtreecommitdiff
path: root/org.tizen.common/src/org/tizen/common/util/EFSUtil.java
diff options
context:
space:
mode:
Diffstat (limited to 'org.tizen.common/src/org/tizen/common/util/EFSUtil.java')
-rwxr-xr-xorg.tizen.common/src/org/tizen/common/util/EFSUtil.java303
1 files changed, 303 insertions, 0 deletions
diff --git a/org.tizen.common/src/org/tizen/common/util/EFSUtil.java b/org.tizen.common/src/org/tizen/common/util/EFSUtil.java
new file mode 100755
index 000000000..47d33ea06
--- /dev/null
+++ b/org.tizen.common/src/org/tizen/common/util/EFSUtil.java
@@ -0,0 +1,303 @@
+/*
+* Common
+*
+* Copyright (c) 2000 - 2011 Samsung Electronics Co., Ltd. All rights reserved.
+*
+* Contact:
+* Jihoon Song <jihoon80.song@samsung.com>
+*
+* 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.
+*
+* Contributors:
+* - S-Core Co., Ltd
+*
+*/
+
+package org.tizen.common.util;
+
+import java.net.URI;
+
+import org.eclipse.core.filesystem.EFS;
+import org.eclipse.core.filesystem.IFileStore;
+import org.eclipse.core.filesystem.IFileSystem;
+import org.eclipse.core.runtime.CoreException;
+import org.eclipse.core.runtime.IProgressMonitor;
+import org.eclipse.core.runtime.NullProgressMonitor;
+import org.eclipse.core.runtime.OperationCanceledException;
+import org.eclipse.jface.dialogs.MessageDialog;
+import org.eclipse.swt.widgets.Shell;
+import org.eclipse.ui.internal.ide.dialogs.IDEResourceInfoUtils;
+import org.eclipse.ui.internal.ide.dialogs.IFileStoreFilter;
+import org.tizen.common.Surrogate;
+import org.tizen.common.core.application.Messages;
+
+/**
+ * EFSUtil.
+ *
+ * Helper related to Eclipse File System
+ *
+ * @author Jihoon Song{@literal <jihoon80.song@samsung.com>} (S-Core)
+ */
+public class EFSUtil {
+
+ public enum DialogChoicer {
+ YesToAll,
+ NoToAll,
+ Yes,
+ No,
+ Cancel;
+
+ /**
+ * Get DialogChoicer's all value
+ *
+ * @return String array with DialogChoicer's values
+ */
+ public static String[] toStringArray() {
+ DialogChoicer[] choicers = DialogChoicer.values();
+ String[] values = new String[choicers.length];
+ for (DialogChoicer choicer : choicers) {
+ values[choicer.ordinal()] = choicer.name();
+ }
+ return values;
+ }
+
+ public static DialogChoicer valueFromOrdinal(int ordinal) {
+ for (DialogChoicer choicer : values()) {
+ if (choicer.ordinal() == ordinal) {
+ return choicer;
+ }
+ }
+ return DialogChoicer.Cancel;
+ }
+ }
+
+ private static Surrogate<IFileSystem> fileSystemSurrogate = new Surrogate<IFileSystem>() {
+ @Override
+ public IFileSystem getAdapter() {
+ return EFS.getLocalFileSystem();
+ }
+ };
+
+ private static final String defaultTask = ""; //$NON-NLS-1$
+ private static final int defaultTicks = 100; // TODO : will add automatically calculate method
+
+ private static final IFileStoreFilter defaultFilter = new IFileStoreFilter() {
+ @Override
+ public boolean accept(IFileStore store) {
+ return true;
+ }
+ };
+
+
+ // Constructor
+ private EFSUtil() {}
+
+ public static void setFileSystemSurrogate(Surrogate<IFileSystem> surrogate) {
+ EFSUtil.fileSystemSurrogate = surrogate;
+ }
+
+ /**
+ * Get IFileSystem based on Surrogate<IFileSystem> for this class
+ *
+ * @return IFileStoreFilter
+ */
+ protected static IFileSystem getFileSystem() {
+ return fileSystemSurrogate.getAdapter();
+ }
+
+ /**
+ * Get a default IFileStoreFilter that always returns true
+ *
+ * @return IFileStoreFilter
+ */
+ public static IFileStoreFilter getDefaultFileStoreFilter() {
+ return defaultFilter;
+ }
+
+ /**
+ * Detect whether resource exist.
+ *
+ * @param fileURI
+ */
+ public static boolean isExistResource(URI fileURI) {
+ IFileStore fileStore = getFileSystem().getStore(fileURI);
+ return isExistResource(fileStore);
+ }
+
+ /**
+ * Detect whether resource exist.
+ *
+ * @param fileStore
+ */
+ public static boolean isExistResource(IFileStore fileStore) {
+ return (fileStore != null) ? fileStore.fetchInfo().exists() : false;
+ }
+
+ /**
+ * Detect whether resource exist. if exist this, open dialog
+ *
+ * @param parentShell dialog's parent shell
+ * @param title dialog title
+ * @param msg dialog message
+ * @param previousChoice previous DialogChoicer value
+ * @param fileStore
+ * @return in case of previousChoice is Yes or No, return user choice status. any else return previous status
+ */
+ public static DialogChoicer isExistResourceWithDialog(Shell parentShell,
+ String title, String msg, DialogChoicer previousChoice, IFileStore fileStore) {
+
+ Assert.notNull(parentShell);
+ Assert.notNull(msg);
+ Assert.notNull(previousChoice);
+ Assert.notNull(fileStore);
+
+ switch (previousChoice) {
+ case Yes :
+ case No :
+ break;
+ case YesToAll :
+ case NoToAll :
+ case Cancel :
+ default :
+ return previousChoice;
+ }
+
+ if (isExistResource( fileStore )) {
+ MessageDialog msgDialog = new MessageDialog(parentShell,
+ title, null, msg, MessageDialog.NONE, DialogChoicer.toStringArray(),
+ DialogChoicer.Cancel.ordinal());
+
+ int msgResult = msgDialog.open();
+
+ return DialogChoicer.valueFromOrdinal(msgResult);
+ }
+
+ return DialogChoicer.Yes;
+ }
+
+ /**
+ * Copy file or directory using Eclipse File System
+ *
+ * @param source the source URI of the copy. If null, NullPointerException occur.
+ * @param destination the destination URI of the copy. If null, NullPointerException occur.
+ * @param options bit-wise or of option flag constants ({@link EFS#OVERWRITE} or {@link EFS#SHALLOW}).
+ * @param monitor a progress monitor, or <code>null</code> if progress reporting and cancellation are not desired
+ *
+ * @author Jihoon Song {@literal <jihoon80.song@samsung.com>} (S-Core)
+ */
+ public static void copy(URI source, URI destination, int options,
+ IProgressMonitor monitor) throws CoreException {
+ Assert.notNull(source);
+ Assert.notNull(destination);
+
+ monitor = ObjectUtil.nvl(monitor, new NullProgressMonitor());
+
+ try {
+ monitor.beginTask(defaultTask, defaultTicks);
+
+ getFileSystem().getStore(source).copy(getFileSystem().getStore( destination ), options, monitor);
+ } finally {
+ monitor.done();
+ }
+ }
+
+ /**
+ * Copy file or directory using EFS with IFileStoreFilter.
+ * If file already exist, open selectable message dialog.
+ * If the user selected Cancel, OperationCanceledException occur
+ *
+ * @param source the source URI of the copy. If null, NullPointerException occur.
+ * @param destination the destination URI of the copy. If null, NullPointerException occur.
+ * @param fileFilter the child file filter in source, if <code>null</code>, the default file filter is used
+ * @param monitor a progress monitor, or <code>null</code> if progress reporting and cancellation are not desired
+ * @throws CoreException
+ */
+ public static DialogChoicer copyWithFilter(URI source, URI destination, IFileStoreFilter fileFilter,
+ IProgressMonitor monitor) throws CoreException {
+ return copyWithFilter(source, destination, fileFilter, DialogChoicer.Yes, monitor);
+ }
+
+ /**
+ * Copy file or directory using EFS with IFileStoreFilter.
+ * If file already exist, open selectable message dialog.
+ * If the user selected Cancel, OperationCanceledException occur
+ *
+ * @param source the source URI of the copy. If null, NullPointerException occur.
+ * @param destination the destination URI of the copy. If null, NullPointerException occur.
+ * @param fileFilter the child file filter in source, if <code>null</code>, the default file filter is used
+ * @param previousChoice apply user configuration. if YesToAll or NoToAll, don't ask your choice.
+ * @param monitor a progress monitor, or <code>null</code> if progress reporting and cancellation are not desired
+ * @throws CoreException
+ */
+ public static DialogChoicer copyWithFilter(URI source, URI destination, IFileStoreFilter fileFilter,
+ DialogChoicer previousChoice, IProgressMonitor monitor) throws CoreException {
+ Assert.notNull(source);
+ Assert.notNull(destination);
+
+ monitor = ObjectUtil.nvl(monitor, new NullProgressMonitor());
+
+ try {
+ monitor.beginTask(defaultTask, defaultTicks);
+
+ // fileFilter must be not null, because IDEResourceInfoUtils don't check null.
+ if (fileFilter == null) {
+ fileFilter = getDefaultFileStoreFilter();
+ }
+
+ return internalCopyWithFilter(getFileSystem().getStore( source ),
+ getFileSystem().getStore( destination ),
+ fileFilter, previousChoice, monitor);
+ } finally {
+ monitor.done();
+ }
+ }
+
+ private static DialogChoicer internalCopyWithFilter(IFileStore source, IFileStore destination,
+ IFileStoreFilter fileFilter, DialogChoicer previousChoice, IProgressMonitor monitor)
+ throws CoreException {
+ Assert.notNull(source);
+ Assert.notNull(destination);
+
+ previousChoice = isExistResourceWithDialog(
+ ViewUtil.getWorkbenchWindow().getShell(), Messages.FileExistDialogTitle,
+ Messages.bind( Messages.FileExistMsg, destination.getName() ),
+ previousChoice, destination);
+
+ switch (previousChoice) {
+ case YesToAll :
+ case Yes :
+ source.copy(destination, EFS.OVERWRITE | EFS.SHALLOW, monitor);
+ break;
+ case Cancel :
+ throw new OperationCanceledException();
+ case NoToAll :
+ case No :
+ break;
+ default:
+ break;
+ }
+ monitor.worked(1);
+
+ // traverse child resources
+ if (source.fetchInfo().isDirectory()) {
+ IFileStore[] childStores = IDEResourceInfoUtils.listFileStores(source, fileFilter, null);
+ for (IFileStore childStore : childStores) {
+ previousChoice = internalCopyWithFilter(childStore,
+ destination.getChild( childStore.getName() ),
+ fileFilter, previousChoice, monitor);
+ }
+ }
+
+ return previousChoice;
+ }
+}