/*******************************************************************************
* Copyright (c) 2014, 2015 Cisco Systems, Inc. and others. All rights reserved.
*
* This program and the accompanying materials are made available under the
* terms of the Eclipse Public License v1.0 which accompanies this distribution,
* and is available at http://www.eclipse.org/legal/epl-v10.html
*
*******************************************************************************/
package com.cisco.yangide.ext.refactoring;
import java.io.ByteArrayInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.UnsupportedEncodingException;
import org.eclipse.core.filesystem.EFS;
import org.eclipse.core.filesystem.IFileInfo;
import org.eclipse.core.resources.IFile;
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.Status;
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.DeleteResourceChange;
import org.eclipse.ltk.core.refactoring.resource.ResourceChange;
import org.eclipse.osgi.util.NLS;
import com.cisco.yangide.ext.refactoring.nls.Messages;
/**
* @author Konstantin Zaitsev
* @date Aug 19, 2014
*/
public class CreateYangFileChange extends ResourceChange {
private IPath path;
private String source;
public CreateYangFileChange(IPath path, String source) {
this.path = path;
this.source = source;
}
@Override
protected IResource getModifiedResource() {
return ResourcesPlugin.getWorkspace().getRoot().getFile(path);
}
@Override
public String getName() {
return NLS.bind(Messages.CreateYangFileChange_name, path.lastSegment());
}
@Override
public Change perform(IProgressMonitor pm) throws CoreException {
InputStream is = null;
try {
pm.beginTask(Messages.CreateYangFileChange_taskName, 2);
IFile file = ResourcesPlugin.getWorkspace().getRoot().getFile(path);
try {
is = new ByteArrayInputStream(source.getBytes("UTF-8")); //$NON-NLS-1$
file.create(is, false, new SubProgressMonitor(pm, 1));
pm.worked(1);
return new DeleteResourceChange(file.getFullPath(), true);
} catch (UnsupportedEncodingException e) {
throw new CoreException(new Status(Status.ERROR, YangRefactoringPlugin.PLUGIN_ID, e.getMessage(), e));
}
} finally {
try {
if (is != null) {
is.close();
}
} catch (IOException e) {
throw new CoreException(new Status(Status.ERROR, YangRefactoringPlugin.PLUGIN_ID, e.getMessage(), e));
} finally {
pm.done();
}
}
}
@Override
public RefactoringStatus isValid(IProgressMonitor pm) throws CoreException {
RefactoringStatus result = new RefactoringStatus();
IFile file = ResourcesPlugin.getWorkspace().getRoot().getFile(path);
IFileInfo jfile = EFS.getStore(file.getLocationURI()).fetchInfo();
if (jfile.exists()) {
result.addFatalError(
NLS.bind(Messages.CreateYangFileChange_fileAlreadyExists, file.getFullPath().toString()));
return result;
}
return result;
}
}