aboutsummaryrefslogtreecommitdiff
path: root/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/wizards/templates/CreateFileChange.java
diff options
context:
space:
mode:
Diffstat (limited to 'eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/wizards/templates/CreateFileChange.java')
-rw-r--r--eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/wizards/templates/CreateFileChange.java107
1 files changed, 107 insertions, 0 deletions
diff --git a/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/wizards/templates/CreateFileChange.java b/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/wizards/templates/CreateFileChange.java
new file mode 100644
index 000000000..3b41c36c2
--- /dev/null
+++ b/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/wizards/templates/CreateFileChange.java
@@ -0,0 +1,107 @@
+/*
+ * Copyright (C) 2012 The Android Open Source Project
+ *
+ * Licensed under the Eclipse Public License, Version 1.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.eclipse.org/org/documents/epl-v10.php
+ *
+ * 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.android.ide.eclipse.adt.internal.wizards.templates;
+
+import com.android.annotations.NonNull;
+import com.android.ide.eclipse.adt.AdtPlugin;
+import com.android.ide.eclipse.adt.AdtUtils;
+import com.google.common.io.Closeables;
+import com.google.common.io.Files;
+import com.google.common.io.InputSupplier;
+
+import org.eclipse.core.resources.IContainer;
+import org.eclipse.core.resources.IFile;
+import org.eclipse.core.resources.IFolder;
+import org.eclipse.core.resources.IResource;
+import org.eclipse.core.resources.ResourcesPlugin;
+import org.eclipse.core.runtime.CoreException;
+import org.eclipse.core.runtime.IPath;
+import org.eclipse.core.runtime.IProgressMonitor;
+import org.eclipse.core.runtime.OperationCanceledException;
+import org.eclipse.core.runtime.SubProgressMonitor;
+import org.eclipse.ltk.core.refactoring.Change;
+import org.eclipse.ltk.core.refactoring.RefactoringStatus;
+import org.eclipse.ltk.core.refactoring.resource.ResourceChange;
+
+import java.io.File;
+import java.io.FileInputStream;
+import java.io.InputStream;
+import java.net.URI;
+
+/** Change which lazily copies a file */
+public class CreateFileChange extends ResourceChange {
+ private String mName;
+ private final IPath mPath;
+ private final File mSource;
+
+ CreateFileChange(@NonNull String name, @NonNull IPath workspacePath, File source) {
+ mName = name;
+ mPath = workspacePath;
+ mSource = source;
+ }
+
+ @Override
+ protected IResource getModifiedResource() {
+ return ResourcesPlugin.getWorkspace().getRoot().getFile(mPath);
+ }
+
+ @Override
+ public String getName() {
+ return mName;
+ }
+
+ @Override
+ public RefactoringStatus isValid(IProgressMonitor pm)
+ throws CoreException, OperationCanceledException {
+ RefactoringStatus result = new RefactoringStatus();
+ IFile file = ResourcesPlugin.getWorkspace().getRoot().getFile(mPath);
+ URI location = file.getLocationURI();
+ if (location == null) {
+ result.addFatalError("Unknown location " + file.getFullPath().toString());
+ return result;
+ }
+ return result;
+ }
+
+ @SuppressWarnings("resource") // Eclipse doesn't know about Guava's Closeables.closeQuietly
+ @Override
+ public Change perform(IProgressMonitor pm) throws CoreException {
+ InputSupplier<FileInputStream> supplier = Files.newInputStreamSupplier(mSource);
+ InputStream is = null;
+ try {
+ pm.beginTask("Creating file", 3);
+ IFile file = (IFile) getModifiedResource();
+
+ IContainer parent = file.getParent();
+ if (parent != null && !parent.exists()) {
+ IFolder folder = ResourcesPlugin.getWorkspace().getRoot().getFolder(
+ parent.getFullPath());
+ AdtUtils.ensureExists(folder);
+ }
+
+ is = supplier.getInput();
+ file.create(is, false, new SubProgressMonitor(pm, 1));
+ pm.worked(1);
+ } catch (Exception ioe) {
+ AdtPlugin.log(ioe, null);
+ } finally {
+ Closeables.closeQuietly(is);
+ pm.done();
+ }
+ return null;
+ }
+}