[yocto] [Refactor RFC 8/9] Use URI for storing project locations
Ioana Grigoropol
ioanax.grigoropol at intel.com
Tue Jun 4 06:26:07 PDT 2013
Added new class YoctoLocation
- wrapper over URI based location
- return original URI for working with the file system(remote or local)
- return OEFS URI for working with OEFS File system
ProjectInfo
- use YoctoLocation instead of String for storing project location
- store IHost connection and FileService fields in project info
Propagate these changes to all the other files that use project in any way:
- Activator
- map ShellSession to Project Infos
- ShellSession
- store projectInfo
- retrive underlying shell session from the Activator using project info
- use IHostFile instead of File to store project location root
- BBRecipe
- use URI instead of String for storing the path
- BBSession
- store list of dependencies using URI
- ProjectInfoHelper
- change getInitScriptPath to use URI
- OEFile
- use URI instead of String for storing the path
- OEFileSystem
- store project info
- BitbakeSourceViewerConfiguration
- BitbakeFileEditor
- LoadRecipeJob
- LaunchVariableWizardAction
- RecipeContentProvider
- ImportYoctoProjectWizard
- InstallWizard
- BBConfigurationInitializeOperation
- CreateBBCProjectOperation
Signed-off-by: Ioana Grigoropol <ioanax.grigoropol at intel.com>
---
plugins/org.yocto.bc.ui/META-INF/MANIFEST.MF | 4 ++
.../src/org/yocto/bc/bitbake/BBRecipe.java | 24 +++----
.../src/org/yocto/bc/bitbake/BBSession.java | 34 +++++----
.../org/yocto/bc/bitbake/ProjectInfoHelper.java | 22 +++---
.../src/org/yocto/bc/bitbake/ShellSession.java | 16 ++++-
.../src/org/yocto/bc/ui/Activator.java | 60 +++++++++-------
.../bc/ui/actions/LaunchVariableWizardAction.java | 16 ++++-
.../bc/ui/editors/bitbake/BBVariableTextHover.java | 16 ++---
.../bc/ui/editors/bitbake/BitBakeFileEditor.java | 16 ++++-
.../bitbake/BitBakeSourceViewerConfiguration.java | 14 +++-
.../src/org/yocto/bc/ui/filesystem/OEFile.java | 13 ++--
.../org/yocto/bc/ui/filesystem/OEFileSystem.java | 24 ++++++-
.../org/yocto/bc/ui/filesystem/YoctoLocation.java | 34 +++++++++
.../src/org/yocto/bc/ui/model/ProjectInfo.java | 75 +++++++++++++++++---
.../yocto/bc/ui/views/RecipeContentProvider.java | 2 +-
.../importProject/ImportYoctoProjectWizard.java | 7 +-
.../yocto/bc/ui/wizards/install/InstallWizard.java | 9 ++-
.../BBConfigurationInitializeOperation.java | 2 +-
.../newproject/CreateBBCProjectOperation.java | 14 ++--
19 files changed, 281 insertions(+), 121 deletions(-)
create mode 100755 plugins/org.yocto.bc.ui/src/org/yocto/bc/ui/filesystem/YoctoLocation.java
diff --git a/plugins/org.yocto.bc.ui/META-INF/MANIFEST.MF b/plugins/org.yocto.bc.ui/META-INF/MANIFEST.MF
index 3ca62df..7cecce8 100644
--- a/plugins/org.yocto.bc.ui/META-INF/MANIFEST.MF
+++ b/plugins/org.yocto.bc.ui/META-INF/MANIFEST.MF
@@ -18,3 +18,7 @@ Require-Bundle: org.eclipse.ui,
org.yocto.remote.utils;bundle-version="1.0.0"
Eclipse-LazyStart: true
Bundle-ClassPath: .
+Import-Package: org.eclipse.ptp.remote.core,
+ org.eclipse.rse.core.model,
+ org.eclipse.rse.services.clientserver.messages,
+ org.eclipse.rse.services.files
diff --git a/plugins/org.yocto.bc.ui/src/org/yocto/bc/bitbake/BBRecipe.java b/plugins/org.yocto.bc.ui/src/org/yocto/bc/bitbake/BBRecipe.java
index 2b355ba..1baf124 100644
--- a/plugins/org.yocto.bc.ui/src/org/yocto/bc/bitbake/BBRecipe.java
+++ b/plugins/org.yocto.bc.ui/src/org/yocto/bc/bitbake/BBRecipe.java
@@ -11,14 +11,7 @@
package org.yocto.bc.bitbake;
import java.io.IOException;
-
-import org.eclipse.jface.preference.JFacePreferences;
-import org.eclipse.jface.resource.JFaceResources;
-import org.eclipse.swt.widgets.Display;
-import org.eclipse.ui.console.ConsolePlugin;
-import org.eclipse.ui.console.IConsole;
-import org.eclipse.ui.console.MessageConsole;
-import org.eclipse.ui.console.MessageConsoleStream;
+import java.net.URI;
/**
* Represents the bitbake environment of a recipe package.
@@ -27,24 +20,25 @@ import org.eclipse.ui.console.MessageConsoleStream;
*/
public class BBRecipe extends BBSession {
private final BBSession session;
- private final String filePath;
+ private final URI fileURI;
- public BBRecipe(BBSession session, String filePath) throws IOException {
- super(session.shell, session.pinfo.getRootPath());
+ public BBRecipe(BBSession session, URI filePath) throws IOException {
+ super(session.shell, session.pinfo.getOriginalURI());
this.session = session;
- this.filePath = filePath;
+ this.fileURI = filePath;
this.parsingCmd = "DISABLE_SANITY_CHECKS=1 bitbake -e -b " + filePath;
}
@Override
public void initialize() throws Exception {
if (this.size() == 0) {
- //System.out.println("Failed to parse " + filePath);
+ //System.out.println("Failed to parse " + fileURI);
//throw new IOException("Failed to parse " + filePath);
}
}
- protected String getDefaultDepends() {
- return this.filePath;
+ @Override
+ protected URI getDefaultDepends() {
+ return this.fileURI;
}
}
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 e998bcd..fcde557 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
@@ -15,6 +15,7 @@ import java.io.File;
import java.io.FileFilter;
import java.io.IOException;
import java.io.StringReader;
+import java.net.URI;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collection;
@@ -65,8 +66,8 @@ public class BBSession implements IBBSessionListener, IModelElement, Map {
protected final ProjectInfo pinfo;
protected final ShellSession shell;
- protected Map properties = null;
- protected List <String> depends = null;
+ protected Map<?,?> properties = null;
+ protected List <URI> depends = null;
protected boolean initialized = false;
protected MessageConsole sessionConsole;
private final ReentrantReadWriteLock rwlock = new ReentrantReadWriteLock();
@@ -75,15 +76,15 @@ public class BBSession implements IBBSessionListener, IModelElement, Map {
protected String parsingCmd;
private boolean silent = false;
- public BBSession(ShellSession ssession, String projectRoot) throws IOException {
+ public BBSession(ShellSession ssession, URI projectRoot) throws IOException {
shell = ssession;
this.pinfo = new ProjectInfo();
- pinfo.setLocation(projectRoot);
+ pinfo.setLocationURI(projectRoot);
pinfo.setInitScriptPath(ProjectInfoHelper.getInitScriptPath(projectRoot));
this.parsingCmd = "DISABLE_SANITY_CHECKS=1 bitbake -e";
}
- public BBSession(ShellSession ssession, String projectRoot, boolean silent) throws IOException {
+ public BBSession(ShellSession ssession, URI projectRoot, boolean silent) throws IOException {
this(ssession, projectRoot);
this.silent = silent;
}
@@ -182,8 +183,8 @@ public class BBSession implements IBBSessionListener, IModelElement, Map {
return shell;
}
- public String getProjInfoRoot() {
- return pinfo.getRootPath();
+ public URI getProjInfoRoot() {
+ return pinfo.getOriginalURI();
}
/**
@@ -261,7 +262,7 @@ public class BBSession implements IBBSessionListener, IModelElement, Map {
*/
public MessageConsole getConsole() {
if (sessionConsole == null) {
- String cName = ProjectInfoHelper.getProjectName(pinfo.getRootPath()) + " Console";
+ String cName = ProjectInfoHelper.getProjectName(pinfo.getOriginalURI()) + " Console";
IConsoleManager conMan = ConsolePlugin.getDefault().getConsoleManager();
IConsole[] existing = conMan.getConsoles();
for (int i = 0; i < existing.length; i++)
@@ -330,8 +331,8 @@ public class BBSession implements IBBSessionListener, IModelElement, Map {
}
protected int checkExecuteError(String result, int code) {
- String recipe = getDefaultDepends();
- String text = "Parsing " + ((recipe != null) ? ("recipe " + recipe) : "base configurations");
+ URI recipeURI = getDefaultDepends();
+ String text = "Parsing " + ((recipeURI != null) ? ("recipe " + recipeURI) : "base configurations");
if (code != 0) {
text = text + " ERROR!\n" + result;
}else {
@@ -503,13 +504,13 @@ public class BBSession implements IBBSessionListener, IModelElement, Map {
}
}
- protected String getDefaultDepends() {
+ protected URI getDefaultDepends() {
return null;
}
protected Map parseBBEnvironment(String bbOut) throws Exception {
Map env = new Hashtable();
- this.depends = new ArrayList<String>();
+ this.depends = new ArrayList<URI>();
parse(bbOut, env);
@@ -518,12 +519,15 @@ public class BBSession implements IBBSessionListener, IModelElement, Map {
this.depends.add(getDefaultDepends());
}
if(included != null) {
- this.depends.addAll(Arrays.asList(included.split(" ")));
+ String[] includedSplitted = included.split(" ");
+ for (String incl : includedSplitted){
+ this.depends.add(new URI(incl));
+ }
}
return env;
}
-
+
private List parseBBFiles(String bbfiles) {
return Arrays.asList(bbfiles.split(" "));
@@ -719,7 +723,7 @@ public class BBSession implements IBBSessionListener, IModelElement, Map {
try {
if (initialized && (removed != null || changed != null)) {
for(int i=0;removed != null && i<removed.length;i++) {
- if (this.depends.contains(removed[i].getLocation().toString())) {
+ if (this.depends.contains(removed[i].getLocationURI())) {
initialized = false;
return;
}
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 0d95c01..c053c28 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
@@ -15,6 +15,7 @@ import java.io.File;
import java.io.FileOutputStream;
import java.io.FileReader;
import java.io.IOException;
+import java.net.URI;
import org.eclipse.core.resources.IProject;
import org.eclipse.core.resources.ResourcesPlugin;
@@ -28,6 +29,9 @@ import org.yocto.bc.ui.model.ProjectInfo;
*
*/
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";
/**
@@ -35,24 +39,16 @@ public class ProjectInfoHelper {
* @return The path to bitbake init script
* @throws IOException
*/
- public static String getInitScriptPath(String path) throws IOException {
- String val = path + File.separator + DEFAULT_INIT_SCRIPT;
-
- File inFile = new File(path, ".eclipse-data");
- if(inFile.exists()) {
- BufferedReader br = new BufferedReader(new FileReader(inFile));
- val = br.readLine();
- br.close();
- }
-
+ public static String getInitScriptPath(URI uri) throws IOException {
+ String val = uri.getPath() + "/" + DEFAULT_INIT_SCRIPT;
return val;
}
-
- public static String getProjectName(String projectRoot) {
+
+ public static String getProjectName(URI projectRoot) {
IProject[] projects = ResourcesPlugin.getWorkspace().getRoot().getProjects();
for (int i = 0; i < projects.length; ++i) {
try {
- if (projects[i].getLocationURI().getPath().equals(projectRoot)) {
+ if (projects[i].getLocationURI().equals(projectRoot)) {
return projects[i].getName();
}
diff --git a/plugins/org.yocto.bc.ui/src/org/yocto/bc/bitbake/ShellSession.java b/plugins/org.yocto.bc.ui/src/org/yocto/bc/bitbake/ShellSession.java
index db8f564..44b2696 100644
--- a/plugins/org.yocto.bc.ui/src/org/yocto/bc/bitbake/ShellSession.java
+++ b/plugins/org.yocto.bc.ui/src/org/yocto/bc/bitbake/ShellSession.java
@@ -18,6 +18,8 @@ import java.io.InputStreamReader;
import java.io.OutputStream;
import java.io.Writer;
+import org.eclipse.rse.services.files.IHostFile;
+import org.yocto.bc.ui.model.ProjectInfo;
import org.yocto.remote.utils.ICommandResponseHandler;
/**
@@ -65,11 +67,21 @@ public class ShellSession {
//private File initFile = null;
private String shellPath = null;
private final String initCmd;
- private final File root;
+ private final IHostFile root;
private final Writer out;
+ private ProjectInfo projectInfo;
- public ShellSession(int shellType, File root, String initCmd, Writer out) throws IOException {
+ public ProjectInfo getProjectInfo() {
+ return projectInfo;
+ }
+
+ public void setProjectInfo(ProjectInfo projectInfo) {
+ this.projectInfo = projectInfo;
+ }
+
+ public ShellSession(ProjectInfo pInfo, int shellType, IHostFile root, String initCmd, Writer out) throws IOException {
+ this.projectInfo = pInfo;
this.root = root;
this.initCmd = initCmd;
if (out == null) {
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 a6c10c6..ded1e44 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.File;
import java.io.IOException;
import java.io.Writer;
import java.lang.reflect.InvocationTargetException;
+import java.net.URI;
import java.util.Hashtable;
import java.util.Iterator;
import java.util.Map;
@@ -24,8 +25,10 @@ import org.eclipse.core.resources.IResourceChangeEvent;
import org.eclipse.core.resources.IResourceChangeListener;
import org.eclipse.core.resources.ResourcesPlugin;
import org.eclipse.core.runtime.CoreException;
+import org.eclipse.core.runtime.IProgressMonitor;
import org.eclipse.jface.resource.ImageDescriptor;
import org.eclipse.jface.resource.ImageRegistry;
+import org.eclipse.rse.services.files.IHostFile;
import org.eclipse.ui.plugin.AbstractUIPlugin;
import org.osgi.framework.BundleContext;
@@ -35,6 +38,7 @@ import org.yocto.bc.bitbake.ProjectInfoHelper;
import org.yocto.bc.bitbake.ShellSession;
import org.yocto.bc.ui.model.ProjectInfo;
import org.yocto.bc.ui.wizards.newproject.CreateBBCProjectOperation;
+import org.yocto.remote.utils.RemoteHelper;
public class Activator extends AbstractUIPlugin {
@@ -46,21 +50,21 @@ public class Activator extends AbstractUIPlugin {
// The shared instance
private static Activator plugin;
private static Map shellMap;
- private static Map projInfoMap;
+ private static Map<URI, ProjectInfo> projInfoMap;
private static Hashtable bbSessionMap;
private static Hashtable bbRecipeMap;
private IResourceChangeListener listener = new BCResourceChangeListener();
- public static BBRecipe getBBRecipe(BBSession session, String filePath) throws IOException {
+ public static BBRecipe getBBRecipe(BBSession session, URI fileURI) throws IOException {
if (bbRecipeMap == null) {
bbRecipeMap = new Hashtable();
}
- String key = session.getProjInfoRoot() + filePath;
+ URI key = session.getProjInfoRoot();
BBRecipe recipe = (BBRecipe) bbRecipeMap.get(key);
if (recipe == null) {
- recipe = new BBRecipe(session,filePath);
+ recipe = new BBRecipe(session, fileURI);
bbRecipeMap.put(key, recipe);
}
@@ -73,7 +77,8 @@ public class Activator extends AbstractUIPlugin {
* @return
* @throws IOException
*/
- public static BBSession getBBSession(String projectRoot, Writer out) throws IOException {
+ public static BBSession getBBSession(ProjectInfo projectInfo, Writer out, IProgressMonitor monitor) throws IOException {
+ URI projectRoot = projectInfo.getOriginalURI();
if (bbSessionMap == null) {
bbSessionMap = new Hashtable();
}
@@ -81,7 +86,7 @@ public class Activator extends AbstractUIPlugin {
BBSession bbs = (BBSession) bbSessionMap.get(projectRoot);
if (bbs == null) {
- bbs = new BBSession(getShellSession(projectRoot, out), projectRoot);
+ bbs = new BBSession(getShellSession(projectInfo, out, monitor), projectRoot);
bbSessionMap.put(projectRoot, bbs);
}
@@ -94,7 +99,8 @@ public class Activator extends AbstractUIPlugin {
* @return
* @throws IOException
*/
- public static BBSession getBBSession(String projectRoot) throws IOException {
+ public static BBSession getBBSession(ProjectInfo projectInfo, IProgressMonitor monitor) throws Exception {
+ URI projectRoot = projectInfo.getOriginalURI();
if (bbSessionMap == null) {
bbSessionMap = new Hashtable();
}
@@ -102,7 +108,7 @@ public class Activator extends AbstractUIPlugin {
BBSession bbs = (BBSession) bbSessionMap.get(projectRoot);
if (bbs == null) {
- bbs = new BBSession(getShellSession(projectRoot, null), projectRoot);
+ bbs = new BBSession(getShellSession(projectInfo, null, monitor), projectRoot);
bbSessionMap.put(projectRoot, bbs);
}
@@ -129,24 +135,26 @@ public class Activator extends AbstractUIPlugin {
return imageDescriptorFromPlugin(PLUGIN_ID, path);
}
- public static ProjectInfo getProjInfo(String location) throws CoreException, InvocationTargetException, InterruptedException {
+ public static ProjectInfo getProjInfo(URI location) throws CoreException, InvocationTargetException, InterruptedException {
if (projInfoMap == null) {
- projInfoMap = new Hashtable();
+ projInfoMap = new Hashtable<URI, ProjectInfo>();
}
-
- ProjectInfo pi = (ProjectInfo) 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);
+ if (location != null) {
+ ProjectInfo pi = projInfoMap.get(location);
+ if (pi == null) {
+ pi = new ProjectInfo();
+ pi.setLocationURI(location);
+ try {
+ pi.setInitScriptPath(ProjectInfoHelper.getInitScriptPath(location));
+ } catch (IOException e) {
+ throw new InvocationTargetException(e);
+ }
+
+ projInfoMap.put(location, pi);
}
+ return pi;
}
-
- return pi;
+ return null;
}
public static void notifyAllBBSession(IResource[] added, IResource[] removed, IResource[] changed) {
@@ -173,7 +181,8 @@ public class Activator extends AbstractUIPlugin {
* @return a cached shell session for a given project root.
* @throws IOException
*/
- private static ShellSession getShellSession(String absolutePath, Writer out) throws IOException {
+ private static ShellSession getShellSession(ProjectInfo projInfo, Writer out, IProgressMonitor monitor) throws IOException {
+ URI absolutePath = projInfo.getOriginalURI();
if (shellMap == null) {
shellMap = new Hashtable();
}
@@ -181,13 +190,14 @@ public class Activator extends AbstractUIPlugin {
ShellSession ss = (ShellSession) shellMap.get(absolutePath);
if (ss == null) {
- ss = new ShellSession(ShellSession.SHELL_TYPE_BASH, new File(absolutePath), ProjectInfoHelper.getInitScriptPath(absolutePath), out);
+ IHostFile remoteHostFile = RemoteHelper.getRemoteHostFile(projInfo.getConnection(), absolutePath.getPath(), monitor);
+ ss = new ShellSession(projInfo, ShellSession.SHELL_TYPE_BASH, remoteHostFile, ProjectInfoHelper.getInitScriptPath(absolutePath), out);
}
return ss;
}
- public static void putProjInfo(String location, ProjectInfo pinfo) {
+ public static void putProjInfo(URI location, ProjectInfo pinfo) {
if (projInfoMap == null) {
projInfoMap = new Hashtable();
}
diff --git a/plugins/org.yocto.bc.ui/src/org/yocto/bc/ui/actions/LaunchVariableWizardAction.java b/plugins/org.yocto.bc.ui/src/org/yocto/bc/ui/actions/LaunchVariableWizardAction.java
index eaf716e..1899098 100644
--- a/plugins/org.yocto.bc.ui/src/org/yocto/bc/ui/actions/LaunchVariableWizardAction.java
+++ b/plugins/org.yocto.bc.ui/src/org/yocto/bc/ui/actions/LaunchVariableWizardAction.java
@@ -11,20 +11,22 @@
package org.yocto.bc.ui.actions;
import java.io.IOException;
+import java.lang.reflect.InvocationTargetException;
import java.util.Map;
import org.eclipse.core.resources.IProject;
import org.eclipse.core.resources.IResource;
import org.eclipse.core.runtime.CoreException;
+import org.eclipse.core.runtime.NullProgressMonitor;
import org.eclipse.jface.action.IAction;
import org.eclipse.jface.viewers.ISelection;
import org.eclipse.jface.viewers.IStructuredSelection;
import org.eclipse.jface.wizard.WizardDialog;
import org.eclipse.ui.IWorkbenchWindow;
import org.eclipse.ui.IWorkbenchWindowActionDelegate;
-
import org.yocto.bc.ui.Activator;
import org.yocto.bc.ui.builder.BitbakeCommanderNature;
+import org.yocto.bc.ui.model.ProjectInfo;
import org.yocto.bc.ui.wizards.variable.VariableWizard;
/**
@@ -62,13 +64,21 @@ public class LaunchVariableWizardAction implements IWorkbenchWindowActionDelegat
IProject p = ((IResource)element).getProject();
try {
- if (p.isOpen() && p.hasNature(BitbakeCommanderNature.NATURE_ID)) {
- session = Activator.getBBSession(((IResource)element).getProject().getLocationURI().getPath());
+ if (p.isAccessible() && p.isOpen() && p.hasNature(BitbakeCommanderNature.NATURE_ID)) {
+ IProject proj = ((IResource)element).getProject();
+ ProjectInfo projInfo = Activator.getProjInfo(proj.getLocationURI());
+ session = Activator.getBBSession(projInfo, new NullProgressMonitor());
}
} catch (IOException e) {
e.printStackTrace();
} catch (CoreException e) {
e.printStackTrace();
+ } catch (InvocationTargetException e) {
+ e.printStackTrace();
+ } catch (InterruptedException e) {
+ e.printStackTrace();
+ } catch (Exception e) {
+ e.printStackTrace();
}
}
}
diff --git a/plugins/org.yocto.bc.ui/src/org/yocto/bc/ui/editors/bitbake/BBVariableTextHover.java b/plugins/org.yocto.bc.ui/src/org/yocto/bc/ui/editors/bitbake/BBVariableTextHover.java
index 9478423..28e98d4 100644
--- a/plugins/org.yocto.bc.ui/src/org/yocto/bc/ui/editors/bitbake/BBVariableTextHover.java
+++ b/plugins/org.yocto.bc.ui/src/org/yocto/bc/ui/editors/bitbake/BBVariableTextHover.java
@@ -3,7 +3,7 @@
*/
package org.yocto.bc.ui.editors.bitbake;
-import java.io.File;
+import java.net.URI;
import java.util.Map;
import org.eclipse.core.runtime.IProgressMonitor;
@@ -14,7 +14,6 @@ import org.eclipse.jface.text.IRegion;
import org.eclipse.jface.text.ITextHover;
import org.eclipse.jface.text.ITextViewer;
import org.eclipse.jface.text.Region;
-
import org.yocto.bc.bitbake.BBRecipe;
import org.yocto.bc.bitbake.BBSession;
import org.yocto.bc.ui.Activator;
@@ -28,18 +27,15 @@ class BBVariableTextHover implements ITextHover {
private final BBSession session;
private volatile Map envMap;
- public BBVariableTextHover(BBSession session, String file) {
+ public BBVariableTextHover(BBSession session, URI file) {
this.session = session;
envMap = session;
LoadRecipeJob loadRecipeJob = new LoadRecipeJob(getFilename(file), file);
loadRecipeJob.schedule();
}
- private String getFilename(String file) {
-
- String [] elems = file.split(File.separator);
-
- return elems[elems.length - 1];
+ private String getFilename(URI uri) {
+ return uri.getPath();
}
public IRegion getHoverRegion(ITextViewer tv, int off) {
@@ -95,9 +91,9 @@ class BBVariableTextHover implements ITextHover {
}
private class LoadRecipeJob extends Job {
- private final String filePath;
+ private final URI filePath;
- public LoadRecipeJob(String name, String filePath) {
+ public LoadRecipeJob(String name, URI filePath) {
super("Extracting BitBake environment for " + name);
this.filePath = filePath;
}
diff --git a/plugins/org.yocto.bc.ui/src/org/yocto/bc/ui/editors/bitbake/BitBakeFileEditor.java b/plugins/org.yocto.bc.ui/src/org/yocto/bc/ui/editors/bitbake/BitBakeFileEditor.java
index b33f030..7535341 100644
--- a/plugins/org.yocto.bc.ui/src/org/yocto/bc/ui/editors/bitbake/BitBakeFileEditor.java
+++ b/plugins/org.yocto.bc.ui/src/org/yocto/bc/ui/editors/bitbake/BitBakeFileEditor.java
@@ -11,10 +11,13 @@
package org.yocto.bc.ui.editors.bitbake;
import java.io.IOException;
+import java.lang.reflect.InvocationTargetException;
import java.util.ResourceBundle;
import org.eclipse.core.resources.IFile;
import org.eclipse.core.resources.IProject;
+import org.eclipse.core.runtime.CoreException;
+import org.eclipse.core.runtime.NullProgressMonitor;
import org.eclipse.core.runtime.Status;
import org.eclipse.ui.IEditorInput;
import org.eclipse.ui.IEditorSite;
@@ -23,8 +26,8 @@ import org.eclipse.ui.part.FileEditorInput;
import org.eclipse.ui.texteditor.AbstractDecoratedTextEditor;
import org.eclipse.ui.texteditor.ContentAssistAction;
import org.eclipse.ui.texteditor.ITextEditorActionDefinitionIds;
-
import org.yocto.bc.ui.Activator;
+import org.yocto.bc.ui.model.ProjectInfo;
/**
* Editor for BB Recipe
@@ -64,10 +67,19 @@ public class BitBakeFileEditor extends AbstractDecoratedTextEditor {
viewerConfiguration.setTargetFile(targetFile);
try {
- viewerConfiguration.setBBSession(Activator.getBBSession(p.getLocationURI().getPath()));
+ ProjectInfo projInfo = Activator.getProjInfo(p.getLocationURI());
+ viewerConfiguration.setBBSession(Activator.getBBSession(projInfo, new NullProgressMonitor()));
} catch (IOException e) {
e.printStackTrace();
throw new PartInitException(Status.CANCEL_STATUS);
+ } catch (InvocationTargetException e) {
+ e.printStackTrace();
+ } catch (CoreException e) {
+ e.printStackTrace();
+ } catch (InterruptedException e) {
+ e.printStackTrace();
+ } catch (Exception e) {
+ e.printStackTrace();
}
}
super.init(site, input);
diff --git a/plugins/org.yocto.bc.ui/src/org/yocto/bc/ui/editors/bitbake/BitBakeSourceViewerConfiguration.java b/plugins/org.yocto.bc.ui/src/org/yocto/bc/ui/editors/bitbake/BitBakeSourceViewerConfiguration.java
index 56cd014..2be6f1d 100644
--- a/plugins/org.yocto.bc.ui/src/org/yocto/bc/ui/editors/bitbake/BitBakeSourceViewerConfiguration.java
+++ b/plugins/org.yocto.bc.ui/src/org/yocto/bc/ui/editors/bitbake/BitBakeSourceViewerConfiguration.java
@@ -10,6 +10,9 @@
*******************************************************************************/
package org.yocto.bc.ui.editors.bitbake;
+import java.net.URI;
+import java.net.URISyntaxException;
+
import org.eclipse.core.resources.IFile;
import org.eclipse.jface.preference.IPreferenceStore;
import org.eclipse.jface.text.ITextHover;
@@ -33,7 +36,6 @@ import org.eclipse.swt.SWT;
import org.eclipse.swt.graphics.Color;
import org.eclipse.swt.graphics.RGB;
import org.eclipse.ui.editors.text.TextSourceViewerConfiguration;
-
import org.yocto.bc.bitbake.BBLanguageHelper;
import org.yocto.bc.bitbake.BBSession;
@@ -66,7 +68,15 @@ public class BitBakeSourceViewerConfiguration extends TextSourceViewerConfigurat
public ITextHover getTextHover(ISourceViewer sv, String contentType) {
//only .bb file support Text Hover.
if (textHover == null && targetFile.getFileExtension().equals(BBLanguageHelper.BITBAKE_RECIPE_FILE_EXTENSION)) {
- textHover = new BBVariableTextHover(session, targetFile.getLocationURI().getPath());
+ URI root = session.getProjInfoRoot();
+ try {
+ String targetFileProjPath = targetFile.getProjectRelativePath().toPortableString();
+ URI targetFileURI = new URI(root.getScheme(), root.getHost(), root.getPath() + "/" +
+ targetFileProjPath, root.getFragment());
+ textHover = new BBVariableTextHover(session, targetFileURI);
+ } catch (URISyntaxException e) {
+ e.printStackTrace();
+ }
}
return textHover;
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 85794f1..8340597 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
@@ -39,6 +39,7 @@ import org.eclipse.osgi.util.NLS;
import org.yocto.bc.bitbake.BBSession;
import org.yocto.bc.bitbake.ProjectInfoHelper;
import org.yocto.bc.bitbake.ShellSession;
+import org.yocto.bc.ui.Activator;
/**
* File system implementation based on storage of files in the local
@@ -62,7 +63,7 @@ public class OEFile extends FileStore {
*/
protected final String filePath;
- private final String root;
+ private final URI root;
/**
* Creates a new local file.
@@ -70,7 +71,7 @@ public class OEFile extends FileStore {
* @param file The file this local file represents
* @param root
*/
- public OEFile(File file, List ignorePaths, String root) {
+ public OEFile(File file, List ignorePaths, URI root) {
this.file = file;
this.ignorePaths = ignorePaths;
this.root = root;
@@ -117,13 +118,11 @@ public class OEFile extends FileStore {
/*
* try to find items for ignoreList
*/
- private void updateIgnorePaths(String path, List list) {
+ private void updateIgnorePaths(String path, List<Object> list, IProgressMonitor monitor) {
if(isPotentialBuildDir(path)) {
BBSession config = null;
try {
- ShellSession shell = new ShellSession(ShellSession.SHELL_TYPE_BASH, new File(root),
- ProjectInfoHelper.getInitScriptPath(root) + " " + path, null);
- config = new BBSession(shell, root, true);
+ config = Activator.getBBSession(Activator.getProjInfo(root), monitor);
config.initialize();
} catch(Exception e) {
e.printStackTrace();
@@ -154,7 +153,7 @@ public class OEFile extends FileStore {
for (int i = 0; i < wrapped.length; i++) {
String fullPath = file.toString() +File.separatorChar + children[i];
- updateIgnorePaths(fullPath, ignorePaths);
+ updateIgnorePaths(fullPath, ignorePaths, monitor);
if (ignorePaths.contains(fullPath)) {
wrapped[i] = getDeadChild(children[i]);
} else {
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 f0bf449..19c9dbc 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
@@ -11,6 +11,7 @@
package org.yocto.bc.ui.filesystem;
import java.io.File;
+import java.lang.reflect.InvocationTargetException;
import java.net.URI;
import java.util.ArrayList;
import java.util.Hashtable;
@@ -20,9 +21,12 @@ 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.yocto.bc.bitbake.BBSession;
import org.yocto.bc.ui.Activator;
+import org.yocto.bc.ui.model.ProjectInfo;
/**
* A filesystem that ignores specific OE directories that contain derived information.
@@ -32,6 +36,8 @@ import org.yocto.bc.ui.Activator;
public class OEFileSystem extends FileSystem {
private static IFileSystem ref;
+ private ProjectInfo projInfo;
+
public static IFileSystem getInstance() {
return ref;
}
@@ -47,11 +53,12 @@ public class OEFileSystem extends FileSystem {
public IFileStore getStore(URI uri) {
OEFile uf = (OEFile) fileStoreCache.get(uri);
+ setProjInfo(uri);
if (uf == null) {
BBSession config = null;
try {
- config = Activator.getBBSession(uri.getPath());
+ config = Activator.getBBSession(projInfo, new NullProgressMonitor());
config.initialize();
} catch (Exception e) {
e.printStackTrace();
@@ -69,10 +76,23 @@ public class OEFileSystem extends FileSystem {
ignoreList.add(config.get("DL_DIR"));
ignoreList.add(config.get("SSTATE_DIR"));
- uf = new OEFile(new File(uri.getPath()), ignoreList, uri.getPath());
+ uf = new OEFile(new File(uri.getPath()), ignoreList, uri);
fileStoreCache.put(uri, uf);
}
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/YoctoLocation.java b/plugins/org.yocto.bc.ui/src/org/yocto/bc/ui/filesystem/YoctoLocation.java
new file mode 100755
index 0000000..ab99177
--- /dev/null
+++ b/plugins/org.yocto.bc.ui/src/org/yocto/bc/ui/filesystem/YoctoLocation.java
@@ -0,0 +1,34 @@
+package org.yocto.bc.ui.filesystem;
+
+import java.net.URI;
+import java.net.URISyntaxException;
+
+public class YoctoLocation{
+ URI oefsURI;
+ URI originalURI;
+
+ public YoctoLocation(){
+ try {
+ oefsURI = new URI("");
+ originalURI = new URI("");
+ } catch (URISyntaxException e) {
+ e.printStackTrace();
+ }
+ }
+
+ public URI getOEFSURI() {
+ return oefsURI;
+ }
+
+ public URI getOriginalURI() {
+ return originalURI;
+ }
+
+ public void setOriginalURI(URI originalURI) {
+ this.originalURI = originalURI;
+ }
+
+ public void setOEFSURI(URI uri) {
+ this.oefsURI = uri;
+ }
+}
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 3af1e2a..5ce6308 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
@@ -10,12 +10,25 @@
*******************************************************************************/
package org.yocto.bc.ui.model;
+import java.net.URI;
+import java.net.URISyntaxException;
+
+import org.eclipse.core.runtime.IProgressMonitor;
+import org.eclipse.core.runtime.NullProgressMonitor;
+import org.eclipse.ptp.remote.core.IRemoteServices;
+import org.eclipse.rse.core.model.IHost;
+import org.eclipse.rse.services.files.IFileService;
+import org.yocto.bc.bitbake.ProjectInfoHelper;
+import org.yocto.bc.ui.filesystem.YoctoLocation;
+import org.yocto.remote.utils.RemoteHelper;
public class ProjectInfo implements IModelElement {
private String name;
- private String location;
+ private YoctoLocation location;
private String init;
-
+ private IHost connection;
+ private IRemoteServices remoteServices;
+
public ProjectInfo() {
}
@@ -25,12 +38,18 @@ public class ProjectInfo implements IModelElement {
public String getProjectName() {
return name;
}
- public String getRootPath() {
- return location;
+ public URI getOriginalURI() {
+ return location.getOriginalURI();
+ }
+
+ public URI getOEFSURI() {
+ return location.getOEFSURI();
}
+
+ @Override
public void initialize() throws Exception {
name = new String();
- location = new String();
+ location = new YoctoLocation();
init = new String();
}
@@ -38,11 +57,51 @@ public class ProjectInfo implements IModelElement {
this.init = init;
}
- public void setLocation(String location) {
- this.location = location;
+ public void setLocationURI(URI location) {
+ if (this.location == null)
+ this.location = new YoctoLocation();
+ this.location.setOriginalURI(location);
+ try {
+ this.location.setOEFSURI(new URI(ProjectInfoHelper.OEFS_SCHEME + location.getPath() ));
+ } catch (URISyntaxException e) {
+ try {
+ this.location.setOEFSURI(new URI(""));
+ } catch (URISyntaxException e1) {
+ e1.printStackTrace();
+ }
+ e.printStackTrace();
+ }
}
-
+
public void setName(String name) {
this.name = name;
}
+
+ public IHost getConnection() {
+ if (connection == null) {
+ connection = RemoteHelper.getRemoteConnectionForURI(location.getOriginalURI(), new NullProgressMonitor());
+ }
+ return connection;
+ }
+
+ public void setConnection(IHost connection) {
+ this.connection = connection;
+ }
+
+ public IRemoteServices getRemoteServices() {
+ return remoteServices;
+ }
+
+ public void setRemoteServices(IRemoteServices remoteServices) {
+ this.remoteServices = remoteServices;
+ }
+
+ public IFileService getFileService(IProgressMonitor monitor){
+ try {
+ return RemoteHelper.getConnectedRemoteFileService(connection, monitor);
+ } catch (Exception e) {
+ e.printStackTrace();
+ return null;
+ }
+ }
}
diff --git a/plugins/org.yocto.bc.ui/src/org/yocto/bc/ui/views/RecipeContentProvider.java b/plugins/org.yocto.bc.ui/src/org/yocto/bc/ui/views/RecipeContentProvider.java
index 7e29e7a..d657fd5 100644
--- a/plugins/org.yocto.bc.ui/src/org/yocto/bc/ui/views/RecipeContentProvider.java
+++ b/plugins/org.yocto.bc.ui/src/org/yocto/bc/ui/views/RecipeContentProvider.java
@@ -51,7 +51,7 @@ class RecipeContentProvider implements IStructuredContentProvider {
}
private Collection getRecipesFromProject(IProject project) throws Exception {
- BBSession session = Activator.getBBSession(project.getLocationURI().getPath(), null);
+ BBSession session = Activator.getBBSession(Activator.getProjInfo(project.getLocationURI()), null);
return session.getRecipeFiles(project);
}
diff --git a/plugins/org.yocto.bc.ui/src/org/yocto/bc/ui/wizards/importProject/ImportYoctoProjectWizard.java b/plugins/org.yocto.bc.ui/src/org/yocto/bc/ui/wizards/importProject/ImportYoctoProjectWizard.java
index b1fc841..82c5ab3 100644
--- a/plugins/org.yocto.bc.ui/src/org/yocto/bc/ui/wizards/importProject/ImportYoctoProjectWizard.java
+++ b/plugins/org.yocto.bc.ui/src/org/yocto/bc/ui/wizards/importProject/ImportYoctoProjectWizard.java
@@ -12,6 +12,7 @@ package org.yocto.bc.ui.wizards.importProject;
import java.io.IOException;
import java.io.Writer;
+import java.net.URI;
import java.util.Hashtable;
import java.util.Map;
@@ -29,11 +30,9 @@ import org.eclipse.ui.console.IConsoleConstants;
import org.eclipse.ui.console.IConsoleManager;
import org.eclipse.ui.console.IConsoleView;
import org.eclipse.ui.console.MessageConsole;
-
import org.yocto.bc.ui.Activator;
import org.yocto.bc.ui.model.ProjectInfo;
import org.yocto.bc.ui.wizards.FiniteStateWizard;
-
import org.yocto.bc.ui.wizards.newproject.BBConfigurationInitializeOperation;
import org.yocto.bc.ui.wizards.newproject.CreateBBCProjectOperation;
@@ -68,7 +67,7 @@ public class ImportYoctoProjectWizard extends FiniteStateWizard implements IImp
public boolean performFinish() {
ProjectInfo pinfo = new ProjectInfo();
pinfo.setInitScriptPath((String) projectModel.get(ImportYoctoProjectWizard.KEY_INITPATH));
- pinfo.setLocation((String) projectModel.get(ImportYoctoProjectWizard.KEY_LOCATION));
+ pinfo.setLocationURI((URI) projectModel.get(ImportYoctoProjectWizard.KEY_LOCATION));
pinfo.setName((String) projectModel.get(ImportYoctoProjectWizard.KEY_NAME));
try {
@@ -87,7 +86,7 @@ public class ImportYoctoProjectWizard extends FiniteStateWizard implements IImp
projectModel.put(ImportYoctoProjectWizard.KEY_PINFO, pinfo);
//setPageComplete(valid);
//ProjectInfo pinfo = (ProjectInfo) projectModel.get(KEY_PINFO);
- Activator.putProjInfo(pinfo.getRootPath(), pinfo);
+ Activator.putProjInfo(pinfo.getOEFSURI(), pinfo);
try {
getContainer().run(false, false, new CreateBBCProjectOperation(pinfo));
} catch (Exception e) {
diff --git a/plugins/org.yocto.bc.ui/src/org/yocto/bc/ui/wizards/install/InstallWizard.java b/plugins/org.yocto.bc.ui/src/org/yocto/bc/ui/wizards/install/InstallWizard.java
index 3130cbf..f9174e2 100644
--- a/plugins/org.yocto.bc.ui/src/org/yocto/bc/ui/wizards/install/InstallWizard.java
+++ b/plugins/org.yocto.bc.ui/src/org/yocto/bc/ui/wizards/install/InstallWizard.java
@@ -6,6 +6,7 @@ import java.io.IOException;
import java.io.InputStreamReader;
import java.io.Writer;
import java.lang.reflect.InvocationTargetException;
+import java.net.URI;
import java.util.Hashtable;
import java.util.Map;
import java.util.regex.Matcher;
@@ -142,6 +143,10 @@ public class InstallWizard extends FiniteStateWizard implements
}
try {
+ URI uri = new URI("");
+ if (options.containsKey(INSTALL_DIRECTORY)) {
+ uri = (URI) options.get(INSTALL_DIRECTORY);
+ }
if (((Boolean)options.get(GIT_CLONE)).booleanValue()) {
String []git_clone_cmd = {"git", "clone", "--progress", "git://git.pokylinux.org/poky.git", install_dir};
final Pattern pattern = Pattern.compile("^Receiving objects:\\s*(\\d+)%.*");
@@ -171,7 +176,7 @@ public class InstallWizard extends FiniteStateWizard implements
String prjName = (String) options.get(PROJECT_NAME);
ProjectInfo pinfo = new ProjectInfo();
pinfo.setInitScriptPath(initPath);
- pinfo.setLocation(install_dir);
+ pinfo.setLocationURI(uri);
pinfo.setName(prjName);
ConsoleWriter cw = new ConsoleWriter();
@@ -181,7 +186,7 @@ public class InstallWizard extends FiniteStateWizard implements
myConsole.newMessageStream().println(cw.getContents());
model.put(InstallWizard.KEY_PINFO, pinfo);
- Activator.putProjInfo(pinfo.getRootPath(), pinfo);
+ Activator.putProjInfo(pinfo.getOEFSURI(), pinfo);
this.getContainer().run(false, false,
new CreateBBCProjectOperation(pinfo));
diff --git a/plugins/org.yocto.bc.ui/src/org/yocto/bc/ui/wizards/newproject/BBConfigurationInitializeOperation.java b/plugins/org.yocto.bc.ui/src/org/yocto/bc/ui/wizards/newproject/BBConfigurationInitializeOperation.java
index 64c3e6e..20c001a 100644
--- a/plugins/org.yocto.bc.ui/src/org/yocto/bc/ui/wizards/newproject/BBConfigurationInitializeOperation.java
+++ b/plugins/org.yocto.bc.ui/src/org/yocto/bc/ui/wizards/newproject/BBConfigurationInitializeOperation.java
@@ -39,7 +39,7 @@ public class BBConfigurationInitializeOperation implements IRunnableWithProgress
public void run(IProgressMonitor monitor) throws InvocationTargetException, InterruptedException {
BBSession session;
try {
- session = Activator.getBBSession(pinfo.getRootPath(), writer);
+ session = Activator.getBBSession(pinfo, writer, monitor);
session.initialize();
} catch (Exception e) {
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 1d54ea3..41efdb0 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
@@ -65,15 +65,10 @@ public class CreateBBCProjectOperation extends WorkspaceModifyOperation {
addNatureToProject(proj, BitbakeCommanderNature.NATURE_ID, monitor);
}
- private IProjectDescription createProjectDescription(IWorkspace workspace, ProjectInfo projInfo2) throws CoreException {
- IProjectDescription desc = workspace.newProjectDescription(projInfo2.getProjectName());
-
- try {
- desc.setLocationURI(new URI(OEFS_SCHEME + projInfo2.getRootPath()));
- } catch (URISyntaxException e) {
- throw new CoreException(new Status(IStatus.ERROR, Activator.PLUGIN_ID, "Unable to load filesystem.", e));
- }
-
+ private IProjectDescription createProjectDescription(IWorkspace workspace, ProjectInfo projInfo) throws CoreException {
+ IProjectDescription desc = workspace.newProjectDescription(projInfo.getProjectName());
+
+ desc.setLocationURI(projInfo.getOEFSURI());
return desc;
}
@@ -85,6 +80,7 @@ public class CreateBBCProjectOperation extends WorkspaceModifyOperation {
IProject proj = wsroot.getProject(projInfo.getProjectName());
proj.create(desc, monitor);
+
proj.open(monitor);
addNatures(proj, monitor);
--
1.7.9.5
More information about the yocto
mailing list