Skip to content

Commit

Permalink
Removed memory file system and replaced it with a folder that is emptied
Browse files Browse the repository at this point in the history
on startup.
  • Loading branch information
Arvid Berg committed Sep 27, 2011
1 parent 5b5f2b8 commit 31c6509
Show file tree
Hide file tree
Showing 11 changed files with 86 additions and 839 deletions.
19 changes: 0 additions & 19 deletions plugins/net.bioclipse.core/plugin.xml
Expand Up @@ -2,25 +2,6 @@
<?eclipse version="3.2"?>
<plugin>
<extension-point id="net.bioclipse.core.JavaScriptConsolePrinterChannel" name="net.bioclipse.core.JavaScriptConsolePrinterChannel" schema="schema/net.bioclipse.core.JavaScriptConsolePrinterChannel.exsd"/>
<extension
point="org.eclipse.core.filesystem.filesystems">
<filesystem
scheme="memory">
<run
class="net.bioclipse.core.internal.filesystem.memory.MemoryFileSystem">
</run>
</filesystem>
</extension>
<extension
point="org.eclipse.core.runtime.adapters">
<factory
adaptableType="net.bioclipse.core.internal.filesystem.memory.MemoryFileStore"
class="net.bioclipse.core.internal.filesystem.memory.MemoryAdapterFactory">
<adapter
type="org.eclipse.ui.model.IWorkbenchAdapter">
</adapter>
</factory>
</extension>
<extension
point="org.eclipse.ui.decorators">
<decorator
Expand Down
71 changes: 35 additions & 36 deletions plugins/net.bioclipse.core/src/net/bioclipse/core/Activator.java
Expand Up @@ -8,8 +8,6 @@
*******************************************************************************/
package net.bioclipse.core;

import java.net.URI;
import java.net.URISyntaxException;
import java.util.Arrays;
import java.util.List;

Expand Down Expand Up @@ -80,46 +78,47 @@ public static Activator getDefault() {
return plugin;
}

protected static void createVirtualProject(IProject project,IProgressMonitor monitor) throws CoreException {
protected static void createVirtualProject() throws CoreException {
final IProject project = getTempProject();
//if(project.exists() && !project.isHidden()) return;
Job job = new WorkspaceJob( "Check for TempProject" ) {

try {
IProjectDescription description = ResourcesPlugin.getWorkspace()
.newProjectDescription(VIRTUAL_PROJECT_NAME);
description.setLocationURI(new URI("memory:/Virtual"));
project.create(description, monitor);
project.refreshLocal(IResource.DEPTH_ZERO, monitor);
project.open(monitor);
} catch (URISyntaxException e) {
logger.error("Failed to create Virtual project",e);
}
@Override
public IStatus runInWorkspace( IProgressMonitor monitor )
throws CoreException {
if(project.exists()) return Status.OK_STATUS;
IProjectDescription description = ResourcesPlugin
.getWorkspace()
.newProjectDescription( VIRTUAL_PROJECT_NAME );
project.create( description, monitor );
project.refreshLocal( IResource.DEPTH_ZERO, monitor );
project.open( monitor );
project.setHidden( false );
project.getWorkspace().getRoot()
.refreshLocal( IResource.DEPTH_INFINITE, monitor );
return Status.OK_STATUS;
}
};
job.setRule( project.getWorkspace().getRoot() );
job.schedule();
}
protected static IProject getTempProject() {
IWorkspaceRoot root = ResourcesPlugin.getWorkspace().getRoot();
return root.getProject( VIRTUAL_PROJECT_NAME );
}
public static IProject getVirtualProject(){
IWorkspaceRoot root=ResourcesPlugin.getWorkspace().getRoot();
final IProject project=root.getProject(VIRTUAL_PROJECT_NAME);

Job job = new WorkspaceJob("Check for TempProject") {
@Override
public IStatus runInWorkspace(IProgressMonitor monitor)
throws CoreException {

IProject project = getTempProject();
try {
if( ! project.exists()) {
createVirtualProject(project,monitor);
createVirtualProject();
}
if(!project.isOpen()) {
project.open(monitor);
if(project.exists() && !project.isOpen()) {
project.open(null);
}
// TODO Auto-generated method stub
return Status.OK_STATUS;
}
};
job.setRule(ResourcesPlugin.getWorkspace().getRoot());
job.schedule();
try {
job.join();
} catch (InterruptedException e) {
logger.error("Create virtual job interuppted");
throw new RuntimeException("Failed to get virtual project");
}

} catch ( CoreException e ) {
logger.error( "Failed to retrive a working temp project",e );
}
return project;
}

Expand Down
Expand Up @@ -11,54 +11,72 @@
import java.util.Collection;
import java.util.HashSet;

import net.bioclipse.core.Activator;

import org.apache.log4j.Logger;
import org.eclipse.core.resources.IFile;
import org.eclipse.swt.widgets.Display;
import org.eclipse.core.resources.IProject;
import org.eclipse.core.runtime.CoreException;
import org.eclipse.core.runtime.IProgressMonitor;
import org.eclipse.core.runtime.IStatus;
import org.eclipse.core.runtime.Status;
import org.eclipse.core.runtime.jobs.Job;
import org.eclipse.ui.IEditorReference;
import org.eclipse.ui.IStartup;
import org.eclipse.ui.IWorkbench;
import org.eclipse.ui.IWorkbenchPage;
import org.eclipse.ui.IWorkbenchWindow;
import org.eclipse.ui.PartInitException;
import org.eclipse.ui.PlatformUI;
import org.eclipse.ui.progress.UIJob;

public class StartupVirtualEditorCloser implements IStartup {

public void earlyStartup() {
public void earlyStartup() {
Job job = new UIJob("Close editors from") {
@Override
public IStatus runInUIThread( IProgressMonitor monitor ) {
closeEditors();
return Status.OK_STATUS;
}
};
job.setRule( Activator.getVirtualProject() );
job.schedule();
try {
//virtual.delete( true, true, null );
Activator.createVirtualProject();
} catch ( CoreException e ) {
Logger.getLogger( StartupVirtualEditorCloser.class )
.warn( "Could not create virtual project" ,e);
}

for(IWorkbenchWindow workbWindow:
PlatformUI.getWorkbench().getWorkbenchWindows()){
for(IWorkbenchPage workbPage:workbWindow.getPages()){
Collection<IEditorReference> toRemove=
new HashSet<IEditorReference>();
IEditorReference[] template=new IEditorReference[0];
for(IEditorReference ef:workbPage.getEditorReferences()){
try{
IFile file=(IFile)
ef.getEditorInput().getAdapter(IFile.class);
if(file!=null &&
file.getProject().equals(Activator.getVirtualProject())){
// marks this EditorReference to be removed
toRemove.add(ef);
}

}catch(PartInitException x){
// can't check if it is a Virtual file,
// continue with next one
}

private void closeEditors() {

IProject virtual = Activator.getVirtualProject();
IWorkbench workbench = PlatformUI.getWorkbench();
for ( IWorkbenchWindow workbWindow : workbench.getWorkbenchWindows() ) {
for ( IWorkbenchPage workbPage : workbWindow.getPages() ) {
Collection<IEditorReference> toRemove =
new HashSet<IEditorReference>();
IEditorReference[] template = new IEditorReference[0];
for ( IEditorReference ref : workbPage.getEditorReferences() ) {
try {
IFile fil = null;
fil=(IFile)ref.getEditorInput().getAdapter(IFile.class);
if(fil != null && fil.getProject().equals( virtual)) {
// marks this EditorReference to be removed
toRemove.add( ref );
}
} catch ( PartInitException x ) {
// can't check if it is a Virtual file,
// continue with next one
}
}
final IEditorReference[] remove=toRemove.toArray(template);
final IWorkbenchPage workbenchPage=workbPage;
Display.getDefault().asyncExec(new Runnable(){
public void run() {
workbenchPage.closeEditors(remove,false);
}
});


final IEditorReference[] remove = toRemove.toArray( template );
final IWorkbenchPage workbenchPage = workbPage;
workbenchPage.closeEditors( remove, false );
}
}

}

}

This file was deleted.

This file was deleted.

This file was deleted.

0 comments on commit 31c6509

Please sign in to comment.