- OEFileSystem and OEFile were dropped due to the use of hardcoded scheme 
"oefs://" that stopped remote connection from working. There is a need to have 
a custom file system in order to skip indexing large directories (such as 
build, tmp) and ignore some paths--was not tested under Windows

Signed-off-by: Ioana Grigoropol <ioanax.grigoro...@intel.com>
---
 plugins/org.yocto.bc.ui/META-INF/MANIFEST.MF       |    2 +-
 plugins/org.yocto.bc.ui/plugin.xml                 |    3 +-
 .../src/org/yocto/bc/bitbake/BBSession.java        |   62 ++++++---
 .../org/yocto/bc/bitbake/ProjectInfoHelper.java    |   24 ++--
 .../src/org/yocto/bc/ui/Activator.java             |   45 ++++--
 .../org/yocto/bc/ui/BCResourceChangeListener.java  |    1 -
 .../src/org/yocto/bc/ui/filesystem/OEFile.java     |  143 ++++++--------------
 .../org/yocto/bc/ui/filesystem/OEFileSystem.java   |   50 +++++--
 .../bc/ui/filesystem/OEFileSystemContributor.java  |    7 +-
 .../org/yocto/bc/ui/filesystem/OEIgnoreFile.java   |   31 ++++-
 .../src/org/yocto/bc/ui/model/ProjectInfo.java     |   21 ++-
 .../src/org/yocto/bc/ui/model/YoctoHostFile.java   |  110 ++++++++++++---
 .../yocto/bc/ui/wizards/install/OptionsPage.java   |    2 +-
 .../newproject/CreateBBCProjectOperation.java      |   23 ++--
 14 files changed, 318 insertions(+), 206 deletions(-)

diff --git a/plugins/org.yocto.bc.ui/META-INF/MANIFEST.MF 
b/plugins/org.yocto.bc.ui/META-INF/MANIFEST.MF
index 9e8c523..1f0e63e 100644
--- a/plugins/org.yocto.bc.ui/META-INF/MANIFEST.MF
+++ b/plugins/org.yocto.bc.ui/META-INF/MANIFEST.MF
@@ -2,7 +2,7 @@ Manifest-Version: 1.0
 Bundle-ManifestVersion: 2
 Bundle-Name: %Bundle-Name
 Bundle-SymbolicName: org.yocto.bc.ui;singleton:=true
-Bundle-Version: 1.4.0.qualifier
+Bundle-Version: 1.2.0.qualifier
 Bundle-Activator: org.yocto.bc.ui.Activator
 Bundle-Vendor: %Bundle-Vendor
 Require-Bundle: org.eclipse.ui,
diff --git a/plugins/org.yocto.bc.ui/plugin.xml 
b/plugins/org.yocto.bc.ui/plugin.xml
index cb0561c..6ba9b5f 100644
--- a/plugins/org.yocto.bc.ui/plugin.xml
+++ b/plugins/org.yocto.bc.ui/plugin.xml
@@ -180,8 +180,7 @@
    </extension>
    <extension
          point="org.eclipse.core.filesystem.filesystems">
-      <filesystem
-            scheme="OEFS">
+      <filesystem scheme="OEFS">
          <run
                class="org.yocto.bc.ui.filesystem.OEFileSystem">
          </run>
diff --git a/plugins/org.yocto.bc.ui/src/org/yocto/bc/bitbake/BBSession.java 
b/plugins/org.yocto.bc.ui/src/org/yocto/bc/bitbake/BBSession.java
index 66a6083..037d8aa 100644
--- a/plugins/org.yocto.bc.ui/src/org/yocto/bc/bitbake/BBSession.java
+++ b/plugins/org.yocto.bc.ui/src/org/yocto/bc/bitbake/BBSession.java
@@ -48,7 +48,7 @@ import org.yocto.bc.ui.model.ProjectInfo;
 /**
  * BBSession encapsulates a global bitbake configuration and is the primary 
interface
  * for actions against a BitBake installation.
- * 
+ *
  * @author kgilmer
  *
  */
@@ -57,10 +57,11 @@ public class BBSession implements IBBSessionListener, 
IModelElement, Map {
        public static final int TYPE_UNKNOWN = 2;
        public static final int TYPE_STATEMENT = 3;
        public static final int TYPE_FLAG = 4;
-       
+
+       public static final String CONF_DIR = "/conf";
        public static final String BUILDDIR_INDICATORS [] = {
-               "/conf/local.conf",
-               "/conf/bblayers.conf",
+               "/local.conf",
+               "/bblayers.conf",
        };
 
        protected final ProjectInfo pinfo;
@@ -74,7 +75,7 @@ public class BBSession implements IBBSessionListener, 
IModelElement, Map {
        private final Lock wlock = rwlock.writeLock();
        protected String parsingCmd;
        private boolean silent = false;
-       
+
        public BBSession(ShellSession ssession, URI projectRoot) throws 
IOException {
                shell = ssession;
                this.pinfo = new ProjectInfo();
@@ -87,7 +88,7 @@ public class BBSession implements IBBSessionListener, 
IModelElement, Map {
                this(ssession, projectRoot);
                this.silent = silent;
        }
-       
+
        private Collection adapttoIPath(List<File> asList, IProject project) {
 
                List pathList = new ArrayList();
@@ -102,7 +103,7 @@ public class BBSession implements IBBSessionListener, 
IModelElement, Map {
 
                return pathList;
        }
-       
+
        private String appendAll(String[] elems, int st) {
                StringBuffer sb = new StringBuffer();
 
@@ -112,7 +113,7 @@ public class BBSession implements IBBSessionListener, 
IModelElement, Map {
 
                return sb.toString();
        }
-       
+
        private int charCount(String trimmed, char c) {
                int i = 0;
                int p = 0;
@@ -124,11 +125,13 @@ public class BBSession implements IBBSessionListener, 
IModelElement, Map {
 
                return i;
        }
-       
+
+       @Override
        public void clear() {
                throw new RuntimeException("BB configuration is read-only.");
        }
 
+       @Override
        public boolean containsKey(Object arg0) {
                try {
                        checkValidAndLock(true);
@@ -141,6 +144,7 @@ public class BBSession implements IBBSessionListener, 
IModelElement, Map {
                }
        }
 
+       @Override
        public boolean containsValue(Object arg0) {
                try {
                        checkValidAndLock(true);
@@ -153,6 +157,7 @@ public class BBSession implements IBBSessionListener, 
IModelElement, Map {
                }
        }
 
+       @Override
        public Set entrySet() {
                try {
                        checkValidAndLock(true);
@@ -188,7 +193,7 @@ public class BBSession implements IBBSessionListener, 
IModelElement, Map {
 
        /**
         * Recursively generate list of Recipe files from a root directory.
-        * 
+        *
         * @param rootDir
         * @param recipes
         * @param fileExtension
@@ -197,6 +202,7 @@ public class BBSession implements IBBSessionListener, 
IModelElement, Map {
        private void findRecipes(File rootDir, List recipes, final String 
fileExtension, IProject project) {
                File[] children = rootDir.listFiles(new FileFilter() {
 
+                       @Override
                        public boolean accept(File pathname) {
                                return pathname.isFile() && 
pathname.getName().endsWith(fileExtension);
                        }
@@ -209,6 +215,7 @@ public class BBSession implements IBBSessionListener, 
IModelElement, Map {
 
                File[] childDirs = rootDir.listFiles(new FileFilter() {
 
+                       @Override
                        public boolean accept(File pathname) {
                                return pathname.isDirectory();
                        }
@@ -240,6 +247,7 @@ public class BBSession implements IBBSessionListener, 
IModelElement, Map {
                return recipes;
        }
 
+       @Override
        public Object get(Object arg0) {
                try {
                        checkValidAndLock(true);
@@ -274,9 +282,9 @@ public class BBSession implements IBBSessionListener, 
IModelElement, Map {
                                conMan.addConsoles(new IConsole[] { 
sessionConsole });
                        }
                }
-               
+
                
ConsolePlugin.getDefault().getConsoleManager().showConsoleView(sessionConsole);
-               
+
                return sessionConsole;
        }
 
@@ -348,6 +356,7 @@ public class BBSession implements IBBSessionListener, 
IModelElement, Map {
                if(clear)
                        console.clearConsole();
                new WorkbenchJob("Display parsing result") {
+                       @Override
                        public IStatus runInUIThread(IProgressMonitor monitor) {
                                if(code != 0) {
                                        
info.setColor(JFaceResources.getColorRegistry().get(JFacePreferences.ERROR_COLOR));
@@ -396,6 +405,7 @@ public class BBSession implements IBBSessionListener, 
IModelElement, Map {
                //not release lock
        }
 
+       @Override
        public void initialize() throws Exception {
                try {
                        checkValidAndLock(false);
@@ -414,6 +424,7 @@ public class BBSession implements IBBSessionListener, 
IModelElement, Map {
                // return trimmed.indexOf('{') > -1 && trimmed.indexOf('}') == 
-1;
        }
 
+       @Override
        public boolean isEmpty() {
                try {
                        checkValidAndLock(true);
@@ -425,7 +436,8 @@ public class BBSession implements IBBSessionListener, 
IModelElement, Map {
                        rlock.unlock();
                }
        }
-       
+
+       @Override
        public Set keySet() {
                try {
                        checkValidAndLock(true);
@@ -440,7 +452,7 @@ public class BBSession implements IBBSessionListener, 
IModelElement, Map {
 
        protected void parse(String content, Map outMap) throws Exception {
                if (content == null)
-                       return; 
+                       return;
                BufferedReader reader = new BufferedReader(new 
StringReader(content));
                String line;
                boolean inLine = false;
@@ -484,7 +496,7 @@ public class BBSession implements IBBSessionListener, 
IModelElement, Map {
                        parseLine(line, outMap);
                }
        }
-       
+
        private void parseAdditiveAssignment(String line, String operator, Map 
mo) throws Exception {
                String[] elems = splitAssignment(line, "\\+=");
 
@@ -507,7 +519,7 @@ public class BBSession implements IBBSessionListener, 
IModelElement, Map {
        protected URI getDefaultDepends() {
                return null;
        }
-       
+
        protected Map parseBBEnvironment(String bbOut) throws Exception {
                Map env = new Hashtable();
                this.depends = new ArrayList<URI>();
@@ -517,8 +529,8 @@ public class BBSession implements IBBSessionListener, 
IModelElement, Map {
                String included = (String) env.get("BBINCLUDED");
                if(getDefaultDepends() != null) {
                        this.depends.add(getDefaultDepends());
-               } 
-               
+               }
+
                if(included != null) {
                        String[] includedSplitted = included.split(" ");
                        for (String incl : includedSplitted){
@@ -531,13 +543,13 @@ public class BBSession implements IBBSessionListener, 
IModelElement, Map {
 
                return env;
        }
-       
+
 
        private List parseBBFiles(String bbfiles) {
                return Arrays.asList(bbfiles.split(" "));
        }
-       
-       //Map delegate methods 
+
+       //Map delegate methods
 
        private void parseConditionalAssignment(String line, Map mo) throws 
Exception {
                String[] elems = splitAssignment(line, "\\?=");
@@ -611,14 +623,17 @@ public class BBSession implements IBBSessionListener, 
IModelElement, Map {
                return l;
        }
 
+       @Override
        public Object put(Object arg0, Object arg1) {
                throw new RuntimeException("BB configuration is read-only.");
        }
 
+       @Override
        public void putAll(Map arg0) {
                throw new RuntimeException("BB configuration is read-only.");
        }
 
+       @Override
        public Object remove(Object arg0) {
                throw new RuntimeException("BB configuration is read-only.");
        }
@@ -637,6 +652,7 @@ public class BBSession implements IBBSessionListener, 
IModelElement, Map {
                return line;
        }
 
+       @Override
        public int size() {
                try {
                        checkValidAndLock(true);
@@ -686,7 +702,7 @@ public class BBSession implements IBBSessionListener, 
IModelElement, Map {
 
        /**
         * Return a string with variable substitutions in place.
-        * 
+        *
         * @param expression
         * @return Input string with any substitutions from this file.
         */
@@ -710,6 +726,7 @@ public class BBSession implements IBBSessionListener, 
IModelElement, Map {
                return expression;
        }
 
+       @Override
        public Collection values() {
                try {
                        checkValidAndLock(true);
@@ -722,6 +739,7 @@ public class BBSession implements IBBSessionListener, 
IModelElement, Map {
                }
        }
 
+       @Override
        public void changeNotified(IResource[] added, IResource[] removed, 
IResource[] changed) {
                wlock.lock();
                try {
diff --git 
a/plugins/org.yocto.bc.ui/src/org/yocto/bc/bitbake/ProjectInfoHelper.java 
b/plugins/org.yocto.bc.ui/src/org/yocto/bc/bitbake/ProjectInfoHelper.java
index 2938c95..f5259e5 100644
--- a/plugins/org.yocto.bc.ui/src/org/yocto/bc/bitbake/ProjectInfoHelper.java
+++ b/plugins/org.yocto.bc.ui/src/org/yocto/bc/bitbake/ProjectInfoHelper.java
@@ -10,27 +10,25 @@
  
*******************************************************************************/
 package org.yocto.bc.bitbake;
 
-import java.io.BufferedReader;
-import java.io.File;
-import java.io.FileReader;
 import java.io.IOException;
 import java.net.URI;
-import java.net.URISyntaxException;
 
 import org.eclipse.core.resources.IProject;
 import org.eclipse.core.resources.ResourcesPlugin;
 import org.eclipse.core.runtime.IProgressMonitor;
 import org.eclipse.rse.core.model.IHost;
-import org.yocto.bc.remote.utils.RemoteHelper;
 import org.yocto.bc.ui.model.ProjectInfo;
 
 /**
  * A helper class for ProjectInfo related tasks.
- * 
+ *
  * @author kgilmer
- * 
+ *
  */
 public class ProjectInfoHelper {
+       public static final String OEFS_SCHEME = "OEFS://";
+       public static final String FILE_SCHEME = "file";
+       public static final String RSE_SCHEME = "rse";
 
        protected static final String DEFAULT_INIT_SCRIPT = "oe-init-build-env";
        /**
@@ -54,17 +52,17 @@ public class ProjectInfoHelper {
 //             }
                return val;
        }
-       
+
 //     public static String getInitScript(String path) throws IOException {
 //             File inFile = new File(path);
 //             BufferedReader br = new BufferedReader(new FileReader(inFile));
 //             StringBuffer sb = new StringBuffer();
 //             String line = null;
-//             
+//
 //             while ((line = br.readLine()) != null) {
 //                     sb.append(line);
 //             }
-//             
+//
 //             br.close();
 //
 //             return sb.toString();
@@ -89,7 +87,7 @@ public class ProjectInfoHelper {
        /**
         * This method will store the path to the bitbake init script for future
         * reference.
-        * 
+        *
         * @param path
         * @param projInfo
         * @throws IOException
@@ -121,8 +119,8 @@ public class ProjectInfoHelper {
                } catch (Exception e) {
                        e.printStackTrace();
                }
-               
-               
+
+
        }
 
 }
diff --git a/plugins/org.yocto.bc.ui/src/org/yocto/bc/ui/Activator.java 
b/plugins/org.yocto.bc.ui/src/org/yocto/bc/ui/Activator.java
index 48c59d5..188efe6 100644
--- a/plugins/org.yocto.bc.ui/src/org/yocto/bc/ui/Activator.java
+++ b/plugins/org.yocto.bc.ui/src/org/yocto/bc/ui/Activator.java
@@ -14,6 +14,7 @@ import java.io.IOException;
 import java.io.Writer;
 import java.lang.reflect.InvocationTargetException;
 import java.net.URI;
+import java.net.URISyntaxException;
 import java.util.Hashtable;
 import java.util.Iterator;
 import java.util.Map;
@@ -130,25 +131,43 @@ public class Activator extends AbstractUIPlugin {
        public static ImageDescriptor getImageDescriptor(String path) {
                return imageDescriptorFromPlugin(PLUGIN_ID, path);
        }
-
+       public static URI convertOEFSUri(URI uri){
+               if (ProjectInfoHelper.OEFS_SCHEME.startsWith(uri.getScheme())) {
+                       String scheme = "";
+                       if (uri.getHost() == null)
+                               scheme = ProjectInfoHelper.FILE_SCHEME;
+                       else
+                               scheme = ProjectInfoHelper.RSE_SCHEME;
+                       try {
+                               return new URI(scheme, uri.getHost(), 
uri.getPath(), uri.getFragment());
+                       } catch (URISyntaxException e) {
+                               e.printStackTrace();
+                               return null;
+                       }
+               }
+               return null;
+       }
        public static ProjectInfo getProjInfo(URI location) throws 
CoreException, InvocationTargetException, InterruptedException {
                if (projInfoMap == null) {
                        projInfoMap = new Hashtable<URI, ProjectInfo>();
                }
-               ProjectInfo pi = projInfoMap.get(location);
-               if (pi == null) {
-                       pi = new ProjectInfo();
-                       pi.setLocation(location);
-                       try {
-                               
pi.setInitScriptPath(ProjectInfoHelper.getInitScriptPath(location));
-                       } catch (IOException e) {
-                               throw new InvocationTargetException(e);
+               location = convertOEFSUri(location);
+               if (location != null) {
+                       ProjectInfo pi = projInfoMap.get(location);
+                       if (pi == null) {
+                               pi = new ProjectInfo();
+                               pi.setLocation(location);
+                               try {
+                                       
pi.setInitScriptPath(ProjectInfoHelper.getInitScriptPath(location));
+                               } catch (IOException e) {
+                                       throw new InvocationTargetException(e);
+                               }
+
+                               projInfoMap.put(location, pi);
                        }
-
-                       projInfoMap.put(location, pi);
+                       return pi;
                }
-
-               return pi;
+               return null;
        }
 
        public static void notifyAllBBSession(IResource[] added, IResource[] 
removed, IResource[] changed) {
diff --git 
a/plugins/org.yocto.bc.ui/src/org/yocto/bc/ui/BCResourceChangeListener.java 
b/plugins/org.yocto.bc.ui/src/org/yocto/bc/ui/BCResourceChangeListener.java
index f22f583..8a2bfdd 100644
--- a/plugins/org.yocto.bc.ui/src/org/yocto/bc/ui/BCResourceChangeListener.java
+++ b/plugins/org.yocto.bc.ui/src/org/yocto/bc/ui/BCResourceChangeListener.java
@@ -41,7 +41,6 @@ public class BCResourceChangeListener implements 
IResourceChangeListener {
                                                  removed.add(res);
                                              break;
                                           case IResourceDelta.CHANGED:
-                                                 res.getLocation();
                                                  changed.add(res);
                                              break;
                                        }
diff --git a/plugins/org.yocto.bc.ui/src/org/yocto/bc/ui/filesystem/OEFile.java 
b/plugins/org.yocto.bc.ui/src/org/yocto/bc/ui/filesystem/OEFile.java
index 7e780cb..f12d6f3 100644
--- a/plugins/org.yocto.bc.ui/src/org/yocto/bc/ui/filesystem/OEFile.java
+++ b/plugins/org.yocto.bc.ui/src/org/yocto/bc/ui/filesystem/OEFile.java
@@ -12,14 +12,9 @@
 package org.yocto.bc.ui.filesystem;
 
 import java.io.File;
-import java.io.FileInputStream;
-import java.io.FileNotFoundException;
-import java.io.FileOutputStream;
-import java.io.IOException;
 import java.io.InputStream;
 import java.io.OutputStream;
 import java.net.URI;
-import java.util.ArrayList;
 import java.util.List;
 
 import org.eclipse.core.filesystem.EFS;
@@ -32,10 +27,8 @@ import org.eclipse.core.filesystem.provider.FileStore;
 import org.eclipse.core.runtime.CoreException;
 import org.eclipse.core.runtime.IPath;
 import org.eclipse.core.runtime.IProgressMonitor;
-import org.eclipse.core.runtime.IStatus;
 import org.eclipse.core.runtime.MultiStatus;
 import org.eclipse.core.runtime.NullProgressMonitor;
-import org.eclipse.core.runtime.Status;
 import org.eclipse.osgi.util.NLS;
 import org.eclipse.rse.services.clientserver.messages.SystemMessageException;
 import org.eclipse.rse.services.files.IFileService;
@@ -52,18 +45,13 @@ import org.yocto.bc.ui.model.YoctoHostFile;
  * operating system's file system.
  */
 public class OEFile extends FileStore {
-       private static int attributes(File aFile) {
-               if (!aFile.exists() || aFile.canWrite())
-                       return EFS.NONE;
-               return EFS.ATTRIBUTE_READ_ONLY;
-       }
-       
+
        /**
         * The java.io.File that this store represents.
         */
        protected final YoctoHostFile file;
-       
-       private List<?> ignoredPaths;
+
+       private List<Object> ignoredPaths;
 
        /**
         * The absolute file system path of the file represented by this store.
@@ -74,35 +62,18 @@ public class OEFile extends FileStore {
 
        /**
         * Creates a new local file.
-        * 
+        *
         * @param file The file this local file represents
-        * @param root 
-        * @throws SystemMessageException 
+        * @param root
+        * @throws SystemMessageException
         */
-       public OEFile(URI fileURI, List<?> ignoredPaths, URI root, ProjectInfo 
projInfo, IProgressMonitor monitor) throws SystemMessageException {
+       public OEFile(URI fileURI, List<Object> ignoredPaths, URI root, 
ProjectInfo projInfo, IProgressMonitor monitor) throws SystemMessageException {
                this.ignoredPaths = ignoredPaths;
                this.root = root;
                this.file = new YoctoHostFile(projInfo, fileURI, monitor);
                this.filePath = file.getAbsolutePath();
        }
 
-       /**
-        * This method is called after a failure to modify a file or directory.
-        * Check to see if the parent is read-only and if so then
-        * throw an exception with a more specific message and error code.
-        * 
-        * @param target The file that we failed to modify
-        * @param exception The low level exception that occurred, or 
<code>null</code>
-        * @throws CoreException A more specific exception if the parent is 
read-only
-        */
-       private void checkReadOnlyParent(File target, Throwable exception) 
throws CoreException {
-               File parent = target.getParentFile();
-               if (parent != null && (attributes(parent) & 
EFS.ATTRIBUTE_READ_ONLY) != 0) {
-                       String message = NLS.bind(Messages.readOnlyParent, 
target.getAbsolutePath());
-                       Policy.error(EFS.ERROR_PARENT_READ_ONLY, message, 
exception);
-               }
-       }
-
        @Override
        public String[] childNames(int options, IProgressMonitor monitor) {
                return file.getChildNames(monitor);
@@ -112,12 +83,26 @@ public class OEFile extends FileStore {
         * detect if the path is potential builddir
         */
        private boolean isPotentialBuildDir(String path) {
+               String parentPath = path.substring(0, path.lastIndexOf("/"));
                boolean ret = true;
-               for (int i=0; i < BBSession.BUILDDIR_INDICATORS.length && ret 
== true; i++) {
-                       if((new File(path + 
BBSession.BUILDDIR_INDICATORS[i])).exists() == false) {
-                               ret=false;
-                               break;
+               try {
+                       IFileService fs = file.getFileService();
+                       IHostFile hostFile = fs.getFile(parentPath, path, new 
NullProgressMonitor());
+                       if (!hostFile.isDirectory())
+                               return false;
+                       IHostFile confDir = fs.getFile(path, path + 
BBSession.CONF_DIR, new NullProgressMonitor());
+                       if (!confDir.exists() || !confDir.isDirectory())
+                               return false;
+                       for (int i = 0; i < 
BBSession.BUILDDIR_INDICATORS.length && ret == true; i++) {
+                               IHostFile child = fs.getFile(path, path + 
BBSession.CONF_DIR +  BBSession.BUILDDIR_INDICATORS[i], new 
NullProgressMonitor());
+                               if(!child.exists() || !child.isFile()) {
+                                       ret = false;
+                                       break;
+                               }
                        }
+
+               } catch (SystemMessageException e) {
+                       e.printStackTrace();
                }
                return ret;
        }
@@ -125,11 +110,12 @@ public class OEFile extends FileStore {
        /*
         * try to find items for ignoreList
         */
-       private void updateIgnorePaths(String path, List list, IProgressMonitor 
monitor) {
+       private void updateIgnorePaths(String path, List<Object> list, 
IProgressMonitor monitor) {
                if(isPotentialBuildDir(path)) {
                        BBSession config = null;
                        try {
-                               ShellSession shell = new 
ShellSession(file.getProjectInfo(), ShellSession.SHELL_TYPE_BASH, 
RemoteHelper.getRemoteHostFile(file.getConnection(), root.getPath(), monitor), 
+                               ShellSession shell = new 
ShellSession(file.getProjectInfo(), ShellSession.SHELL_TYPE_BASH,
+                                               
RemoteHelper.getRemoteHostFile(file.getConnection(), root.getPath(), new 
NullProgressMonitor()),
                                                        
ProjectInfoHelper.getInitScriptPath(root) + " " + path, null);
                                config = new BBSession(shell, root, true);
                                config.initialize();
@@ -158,18 +144,18 @@ public class OEFile extends FileStore {
        public IFileStore[] childStores(int options, IProgressMonitor monitor) 
throws CoreException {
                String[] children = childNames(options, monitor);
                IFileStore[] wrapped = new IFileStore[children.length];
-               
+
                for (int i = 0; i < wrapped.length; i++) {
-                       String fullPath = file.toString() +File.separatorChar + 
children[i];
-                       
+                       String fullPath = file.getAbsolutePath() + 
File.separatorChar + children[i];
+
                        updateIgnorePaths(fullPath, ignoredPaths, monitor);
                        if (ignoredPaths.contains(fullPath)) {
                                wrapped[i] = getDeadChild(children[i]);
                        } else {
                                wrapped[i] = getChild(children[i]);
-                       }                       
+                       }
                }
-               
+
                return wrapped;
        }
 
@@ -177,7 +163,7 @@ public class OEFile extends FileStore {
        public void copy(IFileStore destFileStore, int options, 
IProgressMonitor monitor) throws CoreException {
                if (destFileStore instanceof OEFile) {
                        file.copy(destFileStore, monitor);
-                       
+
 //                     File source = file;
 //                     File destination = ((OEFile) destFile).file;
 //                     //handle case variants on a case-insensitive OS, or 
copying between
@@ -194,7 +180,7 @@ public class OEFile extends FileStore {
 //                     }
                }
                //fall through to super implementation
-//             super.copy(destFile, options, monitor);
+//             super.copy(destFileStore, options, monitor);
        }
 
        @Override
@@ -207,13 +193,13 @@ public class OEFile extends FileStore {
                        monitor.beginTask(NLS.bind(Messages.deleting, this), 
200);
                        String message = Messages.deleteProblem;
                        MultiStatus result = new 
MultiStatus(Policy.PI_FILE_SYSTEM, EFS.ERROR_DELETE, message, null);
-                       
+
                        //don't allow Eclipse to delete entire OE directory
-                       
+
                        if (!isProject()) {
                                internalDelete(file, filePath, result, monitor);
                        }
-                       
+
                        if (!result.isOK())
                                throw new CoreException(result);
                } finally {
@@ -249,10 +235,9 @@ public class OEFile extends FileStore {
                info.setAttribute(EFS.ATTRIBUTE_HIDDEN, file.isHidden());
                return info;
        }
-       
+
        @Override
        public IFileStore getChild(IPath path) {
-               //URI fileURI, List<?> ignoredPaths, URI root, ProjectInfo 
projInfo, IProgressMonitor monitor
                try {
                        return new OEFile(file.getChildURIformPath(path), 
ignoredPaths, root, file.getProjectInfo(), new NullProgressMonitor());
                } catch (SystemMessageException e) {
@@ -263,12 +248,14 @@ public class OEFile extends FileStore {
 
        @Override
        public IFileStore getChild(String name) {
+
                try {
                        return new OEFile(file.getChildURI(name), ignoredPaths, 
root, file.getProjectInfo(), new NullProgressMonitor());
                } catch (SystemMessageException e) {
                        e.printStackTrace();
                }
                return null;
+
        }
 
        private IFileStore getDeadChild(String name) {
@@ -311,6 +298,7 @@ public class OEFile extends FileStore {
         * to optimize java.io.File object creation.
         */
        private boolean internalDelete(YoctoHostFile target, String 
pathToDelete, MultiStatus status, IProgressMonitor monitor) {
+               target.delete(monitor);
                //first try to delete - this should succeed for files and 
symbolic links to directories
 //             if (target.delete() || !target.exists())
 //                     return true;
@@ -395,6 +383,7 @@ public class OEFile extends FileStore {
 //                     String message = 
NLS.bind(Messages.failedCreateWrongType, filePath);
 //                     Policy.error(EFS.ERROR_WRONG_TYPE, message);
 //             }
+               file.mkdir(options);
                return this;
        }
 
@@ -463,59 +452,17 @@ public class OEFile extends FileStore {
 
        @Override
        public InputStream openInputStream(int options, IProgressMonitor 
monitor) throws CoreException {
-               file.getInputStream(options, monitor);
-//             monitor = Policy.monitorFor(monitor);
-//             try {
-//                     monitor.beginTask("", 1); //$NON-NLS-1$
-//                     return new FileInputStream(file);
-//             } catch (FileNotFoundException e) {
-//                     String message;
-//                     if (!file.exists())
-//                             message = NLS.bind(Messages.fileNotFound, 
filePath);
-//                     else if (file.isDirectory())
-//                             message = NLS.bind(Messages.notAFile, filePath);
-//                     else
-//                             message = NLS.bind(Messages.couldNotRead, 
filePath);
-//                     Policy.error(EFS.ERROR_READ, message, e);
-//                     return null;
-//             } finally {
-//                     monitor.done();
-//             }
-               return null;
+               return file.getInputStream(options, monitor);
        }
 
        @Override
        public OutputStream openOutputStream(int options, IProgressMonitor 
monitor) throws CoreException {
-               file.getOutputStream(options, monitor);
-//             monitor = Policy.monitorFor(monitor);
-//             try {
-//                     monitor.beginTask("", 1); //$NON-NLS-1$
-//                     return new FileOutputStream(file, (options & 
EFS.APPEND) != 0);
-//             } catch (FileNotFoundException e) {
-//                     checkReadOnlyParent(file, e);
-//                     String message;
-//                     String path = filePath;
-//                     if (file.isDirectory())
-//                             message = NLS.bind(Messages.notAFile, path);
-//                     else
-//                             message = NLS.bind(Messages.couldNotWrite, 
path);
-//                     Policy.error(EFS.ERROR_WRITE, message, e);
-//                     return null;
-//             } finally {
-//                     monitor.done();
-//             }
-               return null;
+               return file.getOutputStream(options, monitor);
        }
 
        @Override
        public void putInfo(IFileInfo info, int options, IProgressMonitor 
monitor) throws CoreException {
                file.putInfo(info, options, monitor);
-//             boolean success = true;
-//             native does not currently set last modified
-//             if ((options & EFS.SET_LAST_MODIFIED) != 0)
-//                     success &= file.setLastModified(info.getLastModified());
-//             if (!success && !file.exists())
-//                     Policy.error(EFS.ERROR_NOT_EXISTS, 
NLS.bind(Messages.fileNotFound, filePath));
        }
 
        /* (non-Javadoc)
diff --git 
a/plugins/org.yocto.bc.ui/src/org/yocto/bc/ui/filesystem/OEFileSystem.java 
b/plugins/org.yocto.bc.ui/src/org/yocto/bc/ui/filesystem/OEFileSystem.java
index 8422f05..5efdcdc 100644
--- a/plugins/org.yocto.bc.ui/src/org/yocto/bc/ui/filesystem/OEFileSystem.java
+++ b/plugins/org.yocto.bc.ui/src/org/yocto/bc/ui/filesystem/OEFileSystem.java
@@ -10,6 +10,7 @@
  
*******************************************************************************/
 package org.yocto.bc.ui.filesystem;
 
+import java.lang.reflect.InvocationTargetException;
 import java.net.URI;
 import java.util.ArrayList;
 import java.util.Hashtable;
@@ -19,7 +20,9 @@ import java.util.Map;
 import org.eclipse.core.filesystem.IFileStore;
 import org.eclipse.core.filesystem.IFileSystem;
 import org.eclipse.core.filesystem.provider.FileSystem;
+import org.eclipse.core.runtime.CoreException;
 import org.eclipse.core.runtime.NullProgressMonitor;
+import org.eclipse.rse.services.clientserver.messages.SystemMessageException;
 import org.yocto.bc.bitbake.BBSession;
 import org.yocto.bc.ui.Activator;
 import org.yocto.bc.ui.model.ProjectInfo;
@@ -34,28 +37,34 @@ public class OEFileSystem extends FileSystem {
 
        private static IFileSystem ref;
        private ProjectInfo projInfo;
-       
+
        public static IFileSystem getInstance() {
                return ref;
        }
 
        private Map fileStoreCache;
 
-       public OEFileSystem(ProjectInfo pInfo) {
+       public OEFileSystem() {
                ref = this;
-               projInfo = pInfo;
                fileStoreCache = new Hashtable();
        }
-       
+
+//     public OEFileSystem(ProjectInfo pInfo) {
+//             ref = this;
+//             projInfo = pInfo;
+//             fileStoreCache = new Hashtable();
+//     }
+
        @Override
        public IFileStore getStore(URI uri) {
-               
+
                OEFile uf = (OEFile) fileStoreCache.get(uri);
-               
+               setProjInfo(uri);
+
                if (uf == null) {
                        BBSession config = null;
                        try {
-                               config = 
Activator.getBBSession(uf.getProjectInfo(), new NullProgressMonitor());
+                               config = Activator.getBBSession(projInfo, new 
NullProgressMonitor());
                                config.initialize();
                        } catch (Exception e) {
                                e.printStackTrace();
@@ -65,19 +74,36 @@ public class OEFileSystem extends FileSystem {
                        if (config.get("TMPDIR") == null || 
config.get("DL_DIR") == null || config.get("SSTATE_DIR")== null) {
                                throw new RuntimeException("Invalid local.conf: 
TMPDIR or DL_DIR or SSTATE_DIR undefined.");
                        }
-                       
+
                        List ignoreList = new ArrayList();
 
                        //These directories are ignored because they contain 
too many files for Eclipse to handle efficiently.
                        ignoreList.add(config.get("TMPDIR"));
                        ignoreList.add(config.get("DL_DIR"));
                        ignoreList.add(config.get("SSTATE_DIR"));
-                       
+
                        //FIXME: add project info
-                       //uf = new OEFile(uri, ignoreList, uri, projectInfo, 
new NullProgressMonitor());
-                       fileStoreCache.put(uri, uf);
+                       try {
+                               uf = new OEFile(uri, ignoreList, uri, projInfo, 
new NullProgressMonitor());
+                               fileStoreCache.put(uri, uf);
+                       } catch (SystemMessageException e) {
+                               e.printStackTrace();
+                       }
                }
-               
+
                return uf;
        }
+
+       private void setProjInfo(URI uri) {
+                       try {
+                               if(projInfo == null)
+                                       projInfo = Activator.getProjInfo(uri);
+                       } catch (CoreException e) {
+                               e.printStackTrace();
+                       } catch (InvocationTargetException e) {
+                               e.printStackTrace();
+                       } catch (InterruptedException e) {
+                               e.printStackTrace();
+                       }
+       }
 }
diff --git 
a/plugins/org.yocto.bc.ui/src/org/yocto/bc/ui/filesystem/OEFileSystemContributor.java
 
b/plugins/org.yocto.bc.ui/src/org/yocto/bc/ui/filesystem/OEFileSystemContributor.java
index 4ac2998..dfa2bff 100644
--- 
a/plugins/org.yocto.bc.ui/src/org/yocto/bc/ui/filesystem/OEFileSystemContributor.java
+++ 
b/plugins/org.yocto.bc.ui/src/org/yocto/bc/ui/filesystem/OEFileSystemContributor.java
@@ -17,14 +17,17 @@ import org.eclipse.ui.ide.fileSystem.FileSystemContributor;
 
 public class OEFileSystemContributor extends FileSystemContributor  {
 
+       public OEFileSystemContributor() {
+       }
+
        @Override
        public URI browseFileSystem(String initialPath, Shell shell) {
                return null;
        }
-       
+
        @Override
        public URI getURI(String string) {
                return super.getURI(string);
        }
-       
+
 }
diff --git 
a/plugins/org.yocto.bc.ui/src/org/yocto/bc/ui/filesystem/OEIgnoreFile.java 
b/plugins/org.yocto.bc.ui/src/org/yocto/bc/ui/filesystem/OEIgnoreFile.java
index 26da202..9764ca1 100644
--- a/plugins/org.yocto.bc.ui/src/org/yocto/bc/ui/filesystem/OEIgnoreFile.java
+++ b/plugins/org.yocto.bc.ui/src/org/yocto/bc/ui/filesystem/OEIgnoreFile.java
@@ -22,7 +22,6 @@ import org.eclipse.core.filesystem.provider.FileInfo;
 import org.eclipse.core.runtime.CoreException;
 import org.eclipse.core.runtime.IPath;
 import org.eclipse.core.runtime.IProgressMonitor;
-import org.eclipse.rse.services.files.IHostFile;
 import org.yocto.bc.ui.model.YoctoHostFile;
 
 public class OEIgnoreFile implements IFileStore {
@@ -33,94 +32,116 @@ public class OEIgnoreFile implements IFileStore {
                this.file = file;
        }
 
+       @Override
        public IFileInfo[] childInfos(int options, IProgressMonitor monitor) 
throws CoreException {
 
                return new IFileInfo[0];
        }
 
+       @Override
        public String[] childNames(int options, IProgressMonitor monitor) 
throws CoreException {
                return new String[0];
        }
 
+       @Override
        public IFileStore[] childStores(int options, IProgressMonitor monitor) 
throws CoreException {
 
                return new IFileStore[0];
        }
 
+       @Override
        public void copy(IFileStore destination, int options, IProgressMonitor 
monitor) throws CoreException {
        }
 
+       @Override
        public void delete(int options, IProgressMonitor monitor) throws 
CoreException {
        }
-       
+
+       @Override
        public IFileInfo fetchInfo() {
                return new FileInfo(file.getName());
        }
 
+       @Override
        public IFileInfo fetchInfo(int options, IProgressMonitor monitor) 
throws CoreException {
                return new FileInfo(file.getName());
        }
 
+       @Override
        public Object getAdapter(Class adapter) {
                return null;
        }
 
+       @Override
        public IFileStore getChild(IPath path) {
                return null;
        }
 
 
 
+       @Override
        public IFileStore getChild(String name) {
                return null;
        }
 
+       @Override
        public IFileSystem getFileSystem() {
                return OEFileSystem.getInstance();
        }
 
+       @Override
        public String getName() {
                return file.getName();
        }
 
+       @Override
        public IFileStore getParent() {
                return null;
        }
 
+       @Override
        public boolean isParentOf(IFileStore other) {
                return false;
        }
 
+       @Override
        public IFileStore mkdir(int options, IProgressMonitor monitor) throws 
CoreException {
                return null;
        }
 
+       @Override
        public void move(IFileStore destination, int options, IProgressMonitor 
monitor) throws CoreException {
        }
 
+       @Override
        public InputStream openInputStream(int options, IProgressMonitor 
monitor) throws CoreException {
                return null;
        }
 
+       @Override
        public OutputStream openOutputStream(int options, IProgressMonitor 
monitor) throws CoreException {
                return null;
        }
 
+       @Override
        public void putInfo(IFileInfo info, int options, IProgressMonitor 
monitor) throws CoreException {
        }
 
-       
+
+       @Override
        public File toLocalFile(int options, IProgressMonitor monitor) throws 
CoreException {
                return file.toLocalFile();
        }
 
+       @Override
        public URI toURI() {
                return file.toURI();
        }
 
+       @Override
        public IFileStore getFileStore(IPath path) {
                return null;
        }
-       
-       
+
+
 }
diff --git a/plugins/org.yocto.bc.ui/src/org/yocto/bc/ui/model/ProjectInfo.java 
b/plugins/org.yocto.bc.ui/src/org/yocto/bc/ui/model/ProjectInfo.java
index 4530bb3..089c1ac 100644
--- a/plugins/org.yocto.bc.ui/src/org/yocto/bc/ui/model/ProjectInfo.java
+++ b/plugins/org.yocto.bc.ui/src/org/yocto/bc/ui/model/ProjectInfo.java
@@ -14,7 +14,6 @@ import java.net.URI;
 
 import org.eclipse.core.runtime.IProgressMonitor;
 import org.eclipse.core.runtime.NullProgressMonitor;
-import org.eclipse.ptp.remote.core.IRemoteConnection;
 import org.eclipse.ptp.remote.core.IRemoteServices;
 import org.eclipse.rse.core.model.IHost;
 import org.eclipse.rse.services.files.IFileService;
@@ -24,13 +23,14 @@ import org.yocto.bc.remote.utils.RemoteHelper;
 public class ProjectInfo implements IModelElement {
        private String name;
        private URI location;
+       private URI oefsLocation;
        private String init;
        private IHost connection;
        private IRemoteServices remoteServices;
-       
+
        public ProjectInfo() {
        }
-       
+
        public String getInitScriptPath() {
                return init;
        }
@@ -40,6 +40,7 @@ public class ProjectInfo implements IModelElement {
        public URI getURI() {
                return location;
        }
+       @Override
        public void initialize() throws Exception {
                name = new String();
                location = new URI("");
@@ -53,7 +54,7 @@ public class ProjectInfo implements IModelElement {
        public void setLocation(URI location) {
                this.location = location;
        }
-       
+
        public void setName(String name) {
                this.name = name;
        }
@@ -76,13 +77,21 @@ public class ProjectInfo implements IModelElement {
        public void setRemoteServices(IRemoteServices remoteServices) {
                this.remoteServices = remoteServices;
        }
-       
+
        public IFileService getFileService(IProgressMonitor monitor){
                try {
-                       return 
(IFileService)RemoteHelper.getConnectedRemoteFileService(connection, monitor);
+                       return 
RemoteHelper.getConnectedRemoteFileService(connection, monitor);
                } catch (Exception e) {
                        e.printStackTrace();
                        return null;
                }
        }
+
+       public URI getOefsLocation() {
+               return oefsLocation;
+       }
+
+       public void setOefsLocation(URI oefsLocation) {
+               this.oefsLocation = oefsLocation;
+       }
 }
diff --git 
a/plugins/org.yocto.bc.ui/src/org/yocto/bc/ui/model/YoctoHostFile.java 
b/plugins/org.yocto.bc.ui/src/org/yocto/bc/ui/model/YoctoHostFile.java
index 08ff7fa..ca5a960 100644
--- a/plugins/org.yocto.bc.ui/src/org/yocto/bc/ui/model/YoctoHostFile.java
+++ b/plugins/org.yocto.bc.ui/src/org/yocto/bc/ui/model/YoctoHostFile.java
@@ -1,6 +1,8 @@
 package org.yocto.bc.ui.model;
 
 import java.io.File;
+import java.io.InputStream;
+import java.io.OutputStream;
 import java.net.URI;
 import java.net.URISyntaxException;
 import java.util.ArrayList;
@@ -8,35 +10,42 @@ import java.util.ArrayList;
 import org.eclipse.core.filesystem.EFS;
 import org.eclipse.core.filesystem.IFileInfo;
 import org.eclipse.core.filesystem.IFileStore;
+import org.eclipse.core.runtime.CoreException;
 import org.eclipse.core.runtime.IPath;
 import org.eclipse.core.runtime.IProgressMonitor;
+import org.eclipse.core.runtime.NullProgressMonitor;
+import org.eclipse.osgi.util.NLS;
 import org.eclipse.rse.core.model.IHost;
 import org.eclipse.rse.services.clientserver.messages.SystemMessageException;
 import org.eclipse.rse.services.files.IFileService;
 import org.eclipse.rse.services.files.IHostFile;
+import org.yocto.bc.remote.utils.RemoteHelper;
+import org.yocto.bc.ui.filesystem.Messages;
+import org.yocto.bc.ui.filesystem.Policy;
 
 public class YoctoHostFile implements IHostFile{
        private IHostFile file;
        private URI fileURI;
        private ProjectInfo projectInfo;
        private IFileService fileService;
-       
+
        public YoctoHostFile(ProjectInfo pInfo, URI fileURI, IProgressMonitor 
monitor) throws SystemMessageException {
                this.projectInfo = pInfo;
                this.fileURI = fileURI;
                String path = fileURI.getPath();
-               int parentEnd = path.lastIndexOf("/");
-               String parentPath = path.substring(0, parentEnd);
-               String fileName = path.substring(parentEnd + 1);
+//             int parentEnd = path.lastIndexOf("/");
+//             String parentPath = path.substring(0, parentEnd);
+//             String fileName = path.substring(parentEnd + 1);
                fileService = projectInfo.getFileService(monitor);
-               fileService.getFile(parentPath, fileName, monitor);
+               file = 
RemoteHelper.getRemoteHostFile(projectInfo.getConnection(), path, monitor);
+//             fileService.getFile(parentPath, fileName, monitor);
        }
-       
+
        public YoctoHostFile(ProjectInfo projectInfo, URI uri) {
                this.fileURI = uri;
                this.projectInfo = projectInfo;
        }
-       
+
        public IHostFile getFile() {
                return file;
        }
@@ -49,9 +58,11 @@ public class YoctoHostFile implements IHostFile{
        public void setProjectInfo(ProjectInfo projectInfo) {
                this.projectInfo = projectInfo;
        }
+       @Override
        public String getAbsolutePath() {
                return file.getAbsolutePath();
        }
+       @Override
        public String getName() {
                return file.getName();
        }
@@ -62,23 +73,26 @@ public class YoctoHostFile implements IHostFile{
                projectInfo.getURI().getPath().indexOf(file.getAbsolutePath());
                return projectInfo.getURI();
        }
+       @Override
        public boolean isDirectory() {
                return file.isDirectory();
        }
+       @Override
        public String getParentPath() {
                return file.getParentPath();
        }
        public boolean copy(IFileStore destFileStore, IProgressMonitor monitor) 
{
                IHostFile destFile;
                try {
-                       destFile = 
fileService.getFile(destFileStore.toURI().getPath(), destFileStore.getName(), 
monitor);
-                       fileService.copy(file.getParentPath(), file.getName(), 
destFile.getParentPath(), destFile.getAbsolutePath(), monitor);
+                       destFile = 
fileService.createFile(destFileStore.getParent().toURI().getPath(), 
destFileStore.getName(), monitor);
+                       fileService.copy(file.getParentPath(), file.getName(), 
destFile.getParentPath(), destFile.getName(), monitor);
                } catch (SystemMessageException e) {
                        e.printStackTrace();
                        return false;
                }
                return true;
        }
+       @Override
        public boolean exists() {
                return file.exists();
        }
@@ -137,30 +151,76 @@ public class YoctoHostFile implements IHostFile{
                }
                return true;
        }
-       public void mkdir() {
-               
+
+       /**
+        * This method is called after a failure to modify a file or directory.
+        * Check to see if the parent is read-only and if so then
+        * throw an exception with a more specific message and error code.
+        *
+        * @param target The file that we failed to modify
+        * @param exception The low level exception that occurred, or 
<code>null</code>
+        * @throws CoreException A more specific exception if the parent is 
read-only
+        */
+       private void checkReadOnlyParent() throws CoreException {
+               String parent = file.getParentPath();
+               String parentOfParent = parent.substring(0, 
parent.lastIndexOf("/"));
+               IHostFile parentFile;
+               try {
+                       parentFile = fileService.getFile(parentOfParent, 
parent, new NullProgressMonitor());
+                       if (parentFile == null || !parentFile.canRead() || 
!parentFile.canWrite()) {
+                               String message = 
NLS.bind(Messages.readOnlyParent, parent);
+                               Policy.error(EFS.ERROR_PARENT_READ_ONLY, 
message, null);
+                       }
+               } catch (SystemMessageException e) {
+                       e.printStackTrace();
+               }
+
        }
+
+       public void mkdir(int options) {
+//             boolean shallow = (options & EFS.SHALLOW) != 0;
+               try {
+
+                       if (!file.isDirectory()) {
+                               file = 
fileService.createFolder(file.getParentPath(), file.getName(), new 
NullProgressMonitor());
+                               if (!file.isDirectory()) {
+                                       checkReadOnlyParent();
+                                       String message = 
NLS.bind(Messages.failedCreateWrongType, file.getAbsolutePath());
+                                       Policy.error(EFS.ERROR_WRONG_TYPE, 
message);
+                               }
+                       }
+               } catch (SystemMessageException e1) {
+                       e1.printStackTrace();
+               } catch (CoreException e) {
+                       e.printStackTrace();
+               }
+
+       }
+
        public String[] getChildNames(IProgressMonitor monitor) {
                if (file.isDirectory()) {
                        IHostFile[] files;
                        try {
                                files = 
fileService.list(file.getAbsolutePath(), "*", 
IFileService.FILE_TYPE_FILES_AND_FOLDERS, monitor);
                                ArrayList<String> names = new 
ArrayList<String>();
-                               
+
                                for (IHostFile f : files) {
                                        names.add(f.getName());
                                }
-                               return (String[])names.toArray();
+
+                               String[] arrNames = new String[names.size()];
+                               names.toArray(arrNames);
+                               return arrNames;
                        } catch (SystemMessageException e) {
                                e.printStackTrace();
                        }
-               } 
+               }
                return  new String[]{};
        }
        public IHost getConnection() {
                return projectInfo.getConnection();
        }
-       
+
        public URI getChildURI(String name) {
                try {
                        return new URI(fileURI.getScheme(), fileURI.getHost(), 
fileService.getFile(file.getAbsolutePath(), name, null).getAbsolutePath(), 
fileURI.getFragment());
@@ -181,7 +241,7 @@ public class YoctoHostFile implements IHostFile{
        }
        public YoctoHostFile getChildHostFile(String name) {
                try {
-                       return new YoctoHostFile(projectInfo, 
getChildURI(name), null);
+                       return new YoctoHostFile(projectInfo, 
getChildURI(name), new NullProgressMonitor());
                } catch (SystemMessageException e) {
                        e.printStackTrace();
                        return null;
@@ -208,19 +268,21 @@ public class YoctoHostFile implements IHostFile{
                }
        }
 
-       public void getOutputStream(int options, IProgressMonitor monitor) {
+       public OutputStream getOutputStream(int options, IProgressMonitor 
monitor) {
                try {
-                       fileService.getOutputStream(file.getParentPath(), 
file.getName(), options, monitor);
+                       return 
fileService.getOutputStream(file.getParentPath(), file.getName(), options, 
monitor);
                } catch (SystemMessageException e) {
                        e.printStackTrace();
+                       return null;
                }
        }
 
-       public void getInputStream(int options, IProgressMonitor monitor) {
+       public InputStream getInputStream(int options, IProgressMonitor 
monitor) {
                try {
-                       fileService.getInputStream(file.getParentPath(), 
file.getName(), false, monitor);
+                       return fileService.getInputStream(file.getParentPath(), 
file.getName(), false, monitor);
                } catch (SystemMessageException e) {
                        e.printStackTrace();
+                       return null;
                }
        }
 
@@ -232,4 +294,12 @@ public class YoctoHostFile implements IHostFile{
                        e.printStackTrace();
                }
        }
+
+       public IFileService getFileService() {
+               return fileService;
+       }
+
+       public void setFileService(IFileService fileService) {
+               this.fileService = fileService;
+       }
 }
diff --git 
a/plugins/org.yocto.bc.ui/src/org/yocto/bc/ui/wizards/install/OptionsPage.java 
b/plugins/org.yocto.bc.ui/src/org/yocto/bc/ui/wizards/install/OptionsPage.java
index 97d1ad0..a103d2b 100644
--- 
a/plugins/org.yocto.bc.ui/src/org/yocto/bc/ui/wizards/install/OptionsPage.java
+++ 
b/plugins/org.yocto.bc.ui/src/org/yocto/bc/ui/wizards/install/OptionsPage.java
@@ -29,7 +29,6 @@ import org.eclipse.swt.layout.GridData;
 import org.eclipse.swt.layout.GridLayout;
 import org.eclipse.swt.widgets.Button;
 import org.eclipse.swt.widgets.Composite;
-import org.eclipse.swt.widgets.Group;
 import org.eclipse.swt.widgets.Label;
 import org.eclipse.swt.widgets.Text;
 import org.yocto.bc.remote.utils.RemoteHelper;
@@ -182,6 +181,7 @@ public class OptionsPage extends FiniteStateWizardPage {
                                        setErrorMessage("A project with the 
name " + projName + " already exists");
                                        return false;
                                }
+                               //FIXME : do not throw exception when illegal 
characters show in URI ->show error on page
                                URI location = new URI("file:" + URI_SEPARATOR 
+ URI_SEPARATOR + convertToRealPath(projectLoc) + URI_SEPARATOR + 
txtProjectName.getText());
 
                                IStatus status = 
ResourcesPlugin.getWorkspace().validateProjectLocationURI(proj, location);
diff --git 
a/plugins/org.yocto.bc.ui/src/org/yocto/bc/ui/wizards/newproject/CreateBBCProjectOperation.java
 
b/plugins/org.yocto.bc.ui/src/org/yocto/bc/ui/wizards/newproject/CreateBBCProjectOperation.java
index 42fa5b1..5ba661c 100644
--- 
a/plugins/org.yocto.bc.ui/src/org/yocto/bc/ui/wizards/newproject/CreateBBCProjectOperation.java
+++ 
b/plugins/org.yocto.bc.ui/src/org/yocto/bc/ui/wizards/newproject/CreateBBCProjectOperation.java
@@ -12,10 +12,11 @@ package org.yocto.bc.ui.wizards.newproject;
 
 import java.io.IOException;
 import java.lang.reflect.InvocationTargetException;
+import java.net.URI;
+import java.net.URISyntaxException;
 import java.util.Arrays;
 import java.util.Vector;
 
-import org.eclipse.core.internal.resources.ResourceException;
 import org.eclipse.core.resources.IProject;
 import org.eclipse.core.resources.IProjectDescription;
 import org.eclipse.core.resources.IWorkspace;
@@ -23,10 +24,13 @@ import org.eclipse.core.resources.IWorkspaceRoot;
 import org.eclipse.core.resources.ResourcesPlugin;
 import org.eclipse.core.runtime.CoreException;
 import org.eclipse.core.runtime.IProgressMonitor;
+import org.eclipse.core.runtime.IStatus;
 import org.eclipse.core.runtime.QualifiedName;
+import org.eclipse.core.runtime.Status;
 import org.eclipse.ui.actions.WorkspaceModifyOperation;
 import org.yocto.bc.bitbake.ProjectInfoHelper;
 import org.yocto.bc.remote.utils.RemoteHelper;
+import org.yocto.bc.ui.Activator;
 import org.yocto.bc.ui.builder.BitbakeCommanderNature;
 import org.yocto.bc.ui.model.ProjectInfo;
 
@@ -38,7 +42,6 @@ import org.yocto.bc.ui.model.ProjectInfo;
  */
 public class CreateBBCProjectOperation extends WorkspaceModifyOperation {
 
-       public static final String OEFS_SCHEME = "OEFS://";
        public static final QualifiedName BBC_PROJECT_INIT = new 
QualifiedName(null, "BBC_PROJECT_INIT");
        public static void addNatureToProject(IProject proj, String nature_id, 
IProgressMonitor monitor) throws CoreException {
                IProjectDescription desc = proj.getDescription();
@@ -61,11 +64,15 @@ public class CreateBBCProjectOperation extends 
WorkspaceModifyOperation {
                addNatureToProject(proj, BitbakeCommanderNature.NATURE_ID, 
monitor);
        }
 
-       private IProjectDescription createProjectDescription(IWorkspace 
workspace, ProjectInfo projInformation) throws CoreException {
-               IProjectDescription desc = 
workspace.newProjectDescription(projInformation.getProjectName());
-
-               desc.setLocationURI(projInformation.getURI());
+       private IProjectDescription createProjectDescription(IWorkspace 
workspace, ProjectInfo projInfo) throws CoreException {
+               IProjectDescription desc = 
workspace.newProjectDescription(projInfo.getProjectName());
 
+//             desc.setLocationURI(projInfo.getURI());
+               try {
+                       desc.setLocationURI(new 
URI(ProjectInfoHelper.OEFS_SCHEME + projInfo.getURI().getPath()));
+               } catch (URISyntaxException e) {
+                       throw new CoreException(new Status(IStatus.ERROR, 
Activator.PLUGIN_ID, "Unable to load filesystem.", e));
+               }
                return desc;
        }
 
@@ -83,10 +90,6 @@ public class CreateBBCProjectOperation extends 
WorkspaceModifyOperation {
                        proj.open(monitor);
                } catch (IOException e) {
                        throw new InvocationTargetException(e);
-               } catch (ResourceException e){
-                       // ignore this exception since it only occurs for 
special internal files from the repository on Windows platform
-                       // the resource names on Windows must not contain '<', 
'>', ':','"', '/', '\', '|', '?', '*'
-                       // the ignored files must not be removed since they are 
internal cooking files, but the user does not need to see/modify them
                } catch (Exception e) {
                        e.printStackTrace();
                }
-- 
1.7.9.5

_______________________________________________
yocto mailing list
yocto@yoctoproject.org
https://lists.yoctoproject.org/listinfo/yocto

Reply via email to