tinydtproject.java
来自「plugin for eclipse」· Java 代码 · 共 626 行 · 第 1/2 页
JAVA
626 行
package isis.tinydt;
import isis.anp.common.ParserConfiguration;
import isis.anp.common.ParserMessage;
import isis.anp.config.ParserConfigurationFactory;
import isis.anp.config.PlatformProfile;
import isis.anp.config.SensorBoardProfile;
import isis.anp.nesc.common.NesCObjectTreeBuilderContext;
import isis.anp.nesc.ot.Configuration;
import isis.anp.nesc.ot.NesCConfigurationFile;
import isis.anp.nesc.ot.NesCFile;
import isis.commons.exec.Executor;
import isis.commons.fs.Dir;
import isis.commons.fs.SearchPath;
import isis.tinydt.editors.nesceditor.NesCEditor;
import isis.tinydt.views.TinydtView;
import java.io.BufferedReader;
import java.io.ByteArrayInputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.PrintStream;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import java.util.Properties;
import java.util.Set;
import java.util.StringTokenizer;
import java.util.TreeSet;
import org.eclipse.core.resources.IFile;
import org.eclipse.core.resources.IFolder;
import org.eclipse.core.resources.IMarker;
import org.eclipse.core.resources.IProject;
import org.eclipse.core.resources.IResource;
import org.eclipse.core.resources.IResourceVisitor;
import org.eclipse.core.resources.ResourcesPlugin;
import org.eclipse.core.runtime.CoreException;
import org.eclipse.core.runtime.IPath;
import org.eclipse.core.runtime.Path;
import org.eclipse.core.runtime.QualifiedName;
import org.eclipse.ui.IEditorPart;
import org.eclipse.ui.IEditorReference;
import org.eclipse.ui.IWorkbench;
import org.eclipse.ui.IWorkbenchPage;
import org.eclipse.ui.IWorkbenchWindow;
import org.eclipse.ui.console.MessageConsoleStream;
public class TinydtProject
{
public static class Application
{
public String configurationFileName = null;
public String platform = null;
public String sensorBoard = null;
public String makeOptions = null;
public List additionalIncludeFolders = new ArrayList(); // items are strings
public Application()
{
}
public Application(Application src)
{
configurationFileName = new String(src.configurationFileName);
sensorBoard = src.sensorBoard;
platform = src.platform;
makeOptions = src.makeOptions;
Iterator it = src.additionalIncludeFolders.iterator();
while(it.hasNext())
{
String folder = (String) it.next();
additionalIncludeFolders.add(new String(folder));
}
}
public void generateMakeFile()
{
Path p = new Path(configurationFileName);
String path = Utils.getLocationFromFullResourcePath( p.removeLastSegments(1).toString() );
try
{
PrintStream m = new PrintStream(new FileOutputStream(new File(path+"/Makefile2")));
String name = p.segment(p.segmentCount()-1);
name = name.substring(0,name.length()-3);
m.println("COMPONENT="+name);
m.println("include ../Makerules");
}
catch(Exception e)
{
e.printStackTrace();
}
}
}
public static final QualifiedName TINYDT_PROJECT = new QualifiedName("isis.tinydt", "tinydtproject");
public static final String TINYDT_FILENAME = ".tinydt";
protected IProject project = null;
protected HashMap applications = new HashMap();
protected String currentApp = null;
private NesCObjectTreeBuilderContext builderCtx = null;
static public TinydtProject getTinydtProject(IProject p)
{
TinydtProject proj = null;
try
{
proj = (TinydtProject) p.getSessionProperty(TINYDT_PROJECT);
if(proj == null)
{
proj = new TinydtProject(p);
p.setSessionProperty(TINYDT_PROJECT, proj);
}
}
catch(Exception e)
{
e.printStackTrace();
}
return proj;
}
static public List getTinydtProjects()
{
List tinydtProjects = new ArrayList();
IProject[] projects = ResourcesPlugin.getWorkspace().getRoot().getProjects();
for(int i = 0; i < projects.length; ++i)
{
try
{
if(projects[i].hasNature(TinydtNature.NATURE_ID))
{
TinydtProject project = TinydtProject.getTinydtProject(projects[i]);
tinydtProjects.add(project);
}
}
catch(Exception e)
{
e.printStackTrace();
}
}
return tinydtProjects;
}
public TinydtProject(IProject project)
{
this.project = project;
readTinydtFile();
parseAll();
}
public IProject getProject()
{
return project;
}
public Configuration getCurrentConfiguration()
{
if( currentApp==null )
return null;
if( builderCtx==null )
return null;
String confFileName = Utils.getLocationFromFullResourcePath( currentApp );
Iterator i = builderCtx.getObjectTrees().iterator();
while(i.hasNext())
{
NesCFile ncf = (NesCFile) i.next();
if(ncf instanceof NesCConfigurationFile)
{
NesCConfigurationFile cf = (NesCConfigurationFile)ncf;
// we cannot compare directly!! c:\temp != c:/temp
Path path = new Path(ncf.getFileName());
if( path.toString().equalsIgnoreCase(confFileName) )
return (Configuration)cf.getComponent();
}
}
return null;
}
public String getBashPath()
{
IPath base_path = TinydtPlugin.getDefault().getStateLocation();
String file_name = base_path.append("bash.properties").toString();
try {
InputStream is = new FileInputStream( file_name );
Properties p = new Properties();
p.load(is);
if(p.getProperty("bashExecutable")!=null)
return p.getProperty("bashExecutable").trim();
} catch (Exception e) {
// sorry - bash.properties does not exist - we return a default value
}
return "c:/tinyos/cygwin/bin/bash.exe";
}
public PlatformProfile getPlatformProfile( Application app )
{
IPath base_path = TinydtPlugin.getDefault().getStateLocation();
String file_name = base_path.append(app.platform + ".properties").toString();
PlatformProfile profile = null;
try
{
InputStream is = new FileInputStream( file_name );
profile = PlatformProfile.readObject(is);
}
catch( IOException e )
{
try
{
profile = PlatformProfile.load(app.platform);
}
catch( IOException e2 )
{
e2.printStackTrace();
}
}
return profile;
}
public SensorBoardProfile getSensorBoardProfile( Application app )
{
SensorBoardProfile profile = null;
try
{
profile = SensorBoardProfile.load(app.sensorBoard);
}
catch( IOException e2 )
{
e2.printStackTrace();
}
return profile;
}
public SearchPath getSearchPathList( Application app )
{
int i;
SearchPath searchPath = new SearchPath();
// add application folder first
Path p = new Path(app.configurationFileName);
searchPath.add(Utils.getLocationFromFullResourcePath( p.removeLastSegments(1).toString() ));
// add additional include dirs
Iterator it = app.additionalIncludeFolders.iterator();
while( it.hasNext() )
{
String s = (String)it.next();
searchPath.add( Utils.getLocationFromFullResourcePath(s) );
}
searchPath.addAll(app.additionalIncludeFolders);
return searchPath;
}
public NesCObjectTreeBuilderContext getObjectTreeCtx()
{
return builderCtx;
}
public List getNescFileList()
{
final List nescFiles = new ArrayList();
try
{
project.accept(new IResourceVisitor()
{
public boolean visit(IResource res)
{
if(res instanceof IFolder || res instanceof IProject)
return true;
if(res instanceof IFile)
{
IFile file = (IFile) res;
System.out.println(file);
if(file.getFullPath().getFileExtension() != null
&& file.getFullPath().getFileExtension().equalsIgnoreCase("nc"))
{
nescFiles.add(new String(file.getLocation().toString()));
}
}
return false;
}
});
}
catch(Exception e)
{
e.printStackTrace();
}
return nescFiles;
}
/**
* Makes the application, starting bash and calling make
*/
public void makeApplication( Application app )
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?