免费视频淫片aa毛片_日韩高清在线亚洲专区vr_日韩大片免费观看视频播放_亚洲欧美国产精品完整版

打開APP
userphoto
未登錄

開通VIP,暢享免費電子書等14項超值服

開通VIP
[Plugin]Eclipse中的Resource - Recreating Myself - BlogJava
IWorkspace/IWorkspaceRoot/IProject/IFolder/IFile/IResource/IPath/IScope/IContainer
IResourceChangeListener/IResourceChangeEvent/IResourceDeltaVisitor

//訪問工作空間
IWorkspace workspace = ResourcesPlugin.getWorkspace();

//獲得工作空間中的資源層次結(jié)構(gòu)的頂部
IWorkspaceRoot myWorkspaceRoot = ResourcesPlugin.getWorkspace().getRoot();
//訪問工作空間中的項目
IProject myProject = myWorkspaceRoot.getProject("MyProj");
if(myProject.exists() && !myProject.isOpen())
    myProoject.open(null);

//根據(jù)位于工作空間外部的文件的內(nèi)容來創(chuàng)建文件資源
IFolder imagesFolder = myWebProject.getFolder("images");
if (imagesFolder.exists()) {
    // create a new file
    IFile newLogo = imagesFolder.getFile("newLogo.png");
    FileInputStream fileStream = new FileInputStream("c:/MyOtherData/newLogo.png");
    newLogo.create(fileStream, false, null);
    // create closes the file stream, so no worries.  
}

//從原始文件復制 newLogo 文件
IFolder newImagesFolder = myProject.getFolder("newimages");
newImagesFolder.create(false, true, null);
IPath renamedPath = newImagesFolder.getFullPath().append("renamedLogo.png");
newLogo.move(renamedPath, false, null);
IFile renamedLogo = newImagesFolder.getFile("renamedLogo.png");

資源路徑名不是完整的文件系統(tǒng)路徑,而是基于項目的位置(通常是工作空間目錄),要獲取資源的完整文件系統(tǒng)路徑,必須使用 IResource.getLocationURI 來查詢它的位置。
給定文件系統(tǒng)路徑,如果要獲取對應(yīng)的資源對象,則可以使用 IWorkspaceRoot.findFilesForLocationURI 或 IWorkspaceRoot.findContainersForLocationURI。

//控制文件系統(tǒng)刷新
IResource.refreshLocal(int depth, IProgressMonitor monitor)

//獲得表示項目級別首選項的節(jié)點
IScopeContext projectScope = new ProjectScope(MyProject);
Preferences projectNode = projectScope.node("com.example.myplugin");
if (projectNode != null) {
    value = node.getBoolean("MyPreference", "true");
    //do something with the value.
}
projectNode.flush();

//查詢文件的字符集(僅應(yīng)返回對該文件顯式定義的字符集)
String charset = myFile.getCharset(false);

//查詢文件的字符集(返回隱含的字符集)
String charset = myFile.getCharset(true);

//獲取文件內(nèi)容描述
IFile file = ...;
IContentDescription description = file.getDescription();

//確定給定位置對于創(chuàng)建鏈接的資源是有效的
IWorkspace.validateLinkLocation(IResource resource, IPath location)

禁用鏈接資源
· 項目性質(zhì)否決
<extension
 id="myNature"
 name="My Nature"
 point="org.eclipse.core.resources.natures">
 <runtime>
  <run class="com.xyz.MyNature"/>
 </runtime>
 <options allowLinking="false"/>
</extension>
· 小組掛鉤
如果定義自己的資源庫實現(xiàn),則可以利用 org.eclipse.core.resources.teamHook 擴展點來防止在共享資源庫類型的項目中創(chuàng)建鏈接的資源。

//定義路徑變量
IWorkspace workspace = ResourcesPlugin.getWorkspace();
IPathVariableManager pathMan = workspace.getPathVariableManager();
String name = "TEMP";
IPath value = new Path("c:\\temp");
if (pathMan.validateName(name).isOK() && pathMan.validateValue(value).isOK()) {
   pathMan.setValue(name, value);
} else {
   //invalid name or value, throw an exception or warn user
}

//創(chuàng)建相對于已定義的路徑變量的鏈接資源
IProject project = workspace.getProject("Project");//assume this exists
IFolder link = project.getFolder("Link");
IPath location = new Path("TEMP/folder");
if (workspace.validateLinkLocation(location).isOK()) {
   link.createLink(location, IResource.NONE, null);
} else {
   //invalid location, throw an exception or warn user
}

//至此
link.getFullPath() ==> "/Project/Link"
link.getLocation() ==> "c:\temp\folder"
link.getRawLocation() ==> "TEMP/folder"
link.isLinked() ==> "true"
 
IFile child = link.getFile("abc.txt");
child.create(...);
child.getFullPath() ==> "/Project/Link/abc.txt"
child.getLocation() ==> "c:\temp\folder\abc.txt"
child.getRawLocation() ==> "c:\temp\folder\abc.txt"
child.isLinked() ==> "false"

//創(chuàng)建標記
IMarker marker = file.createMarker(IMarker.TASK);

//創(chuàng)建具有全局作用域的標記
IMarker marker = IWorkspace.getRoot().createMarker(IMarker.TASK);

//刪除標記
try {
    marker.delete();
} catch (CoreException e) {
    // Something went wrong
}

//成批刪除標記
int depth = IResource.DEPTH_INFINITE;
try {
    //如果把IMarker.PROBLEM改成null,則刪除所有標記
    resource.deleteMarkers(IMarker.PROBLEM, true, depth);
} catch (CoreException e) {
    // something went wrong
}

//使用平臺常量來處理屬性
IMarker marker = file.createMarker(IMarker.TASK);
if (marker.exists()) {
try {
    marker.setAttribute(IMarker.MESSAGE, "A sample marker message");
    marker.setAttribute(IMarker.PRIORITY, IMarker.PRIORITY_HIGH);
} catch (CoreException e) {
    // You need to handle the case where the marker no longer exists      }
}
  
//查詢資源以獲取其標記及其子代的標記
IMarker[] problems = null;
   int depth = IResource.DEPTH_INFINITE;
try {
   problems = resource.findMarkers(IMarker.PROBLEM, true, depth);
} catch (CoreException e) {
   // something went wrong
}

使用 org.eclipse.core.resources.markers 擴展點來聲明自己的標記類型
<extension id="mymarker" point="org.eclipse.core.resources.markers" />
<extension id="myproblem" point="org.eclipse.core.resources.markers">
   <super type="org.eclipse.core.resources.problemmarker"/>
   <super type="com.example.markers.mymarker"/>
   <attribute name="myAttribute" />
   <persistent value="true" />
</extension>

//創(chuàng)建 com.example.markers.myproblem 標記類型的實例
public IMarker createMyMarker(IResource resource) {
   try {
      IMarker marker = resource.createMarker("com.example.markers.myproblem");
      marker.setAttribute("myAttribute", "MYVALUE");
      return marker;
   } catch (CoreException e) {
      // You need to handle the cases where attribute value is rejected
   }
}

//查詢自己的標記類型(所有mymarkers和myproblems)
public IMarker[] findMyMarkers(IResource target) {
   String type = "com.example.markers.mymarker";
   IMarker[] markers = target.findMarkers(type, true, IResource.DEPTH_INFINITE);
}

//在工作空間可運行程序內(nèi)的工作單元中批處理插件對工作空間進行的修改
IWorkspaceRunnable myRunnable =
        new IWorkspaceRunnable() {
  public void run(IProgressMonitor monitor) throws CoreException {
   //do the actual work in here
   ...
  }
}

//運行工作空間可運行程序
IWorkspace workspace = ResourcesPlugin.getWorkspace();
workspace.run(myRunnable, myProject, IWorkspace.AVOID_UPDATE, null);

//從工作空間本身獲取資源規(guī)則工廠
IWorkspace workspace = ResourcesPlugin.getWorkspace();
IResourceRuleFactory ruleFactory = workspace.getRuleFactory();

//可運行程序?qū)①Y源從一個位置移至另一個位置,可以包含適用于此操作的規(guī)則
ISchedulingRule movingRule = ruleFactory.moveResource(sourceResource, destinationResource);
workspace.run(myRunnable, movingRule, IWorkspace.AVOID_UPDATE, null);

//使用 MultiRule 來組合多條規(guī)則
ISchedulingRule movingRule = ruleFactory.moveResource(sourceResource, destinationResource);
ISchedulingRule modifyRule = ruleFactory.modifyResource(destinationResource);
workspace.run(myRunnable, MultiRule.combine(movingRule, modifyRule), IWorkspace.AVOID_UPDATE, null);

//不包括規(guī)則或更新標志的簡短格式
workspace.run(myRunnable, null);

//指定工作空間根作為調(diào)度規(guī)則將鎖定整個工作空間,直到可運行程序完成為止。
//這是執(zhí)行工作空間更新的最穩(wěn)當方法,但是它不太支持其他重視并行的插件。
workspace.run(myRunnable, workspace.getRoot(), IWorkspace.AVOID_UPDATE, null);

//跟蹤插件運行時發(fā)生的所有工作空間更改
IResourceChangeListener listener = new MyResourceChangeReporter();
ResourcesPlugin.getWorkspace().addResourceChangeListener(listener, IResourceChangeEvent.POST_CHANGE);

//注冊資源更改偵聽器
IResourceChangeListener listener = new MyResourceChangeReporter();
ResourcesPlugin.getWorkspace().addResourceChangeListener(listener,
      IResourceChangeEvent.PRE_CLOSE | IResourceChangeEvent.PRE_DELETE
      | IResourceChangeEvent.PRE_AUTO_BUILD | IResourceChangeEvent.POST_AUTO_BUILD
      | IResourceChangeEvent.POST_CHANGE);

//實現(xiàn)資源更改偵聽器
public class MyResourceChangeReporter implements IResourceChangeListener {
   public void resourceChanged(IResourceChangeEvent event) {
      IResource res = event.getResource();
      switch (event.getType()) {
         case IResourceChangeEvent.PRE_CLOSE:
            System.out.print("Project ");
            System.out.print(res.getFullPath());
            System.out.println(" is about to close.");
            break;
         case IResourceChangeEvent.PRE_DELETE:
            System.out.print("Project ");
            System.out.print(res.getFullPath());
            System.out.println(" is about to be deleted.");
            break;
         case IResourceChangeEvent.POST_CHANGE:
            System.out.println("Resources have changed.");
            event.getDelta().accept(new DeltaPrinter());
            break;
         case IResourceChangeEvent.PRE_AUTO_BUILD:
            System.out.println("Auto build about to run.");
            event.getDelta().accept(new DeltaPrinter());
            break;
         case IResourceChangeEvent.POST_AUTO_BUILD:
            System.out.println("Auto build complete.");
            event.getDelta().accept(new DeltaPrinter());
            break;
      }
   }
}

//查詢資源變化的實現(xiàn)類
class DeltaPrinter implements IResourceDeltaVisitor {
   public boolean visit(IResourceDelta delta) {
      IResource res = delta.getResource();
      switch (delta.getKind()) {
         case IResourceDelta.ADDED:
            System.out.print("Resource ");
            System.out.print(res.getFullPath());
            System.out.println(" was added.");
            break;
         case IResourceDelta.REMOVED:
            System.out.print("Resource ");
            System.out.print(res.getFullPath());
            System.out.println(" was removed.");
            break;
         case IResourceDelta.CHANGED:
            System.out.print("Resource ");
            System.out.print(res.getFullPath());
            System.out.println(" has changed.");
            break;
      }
      return true; // visit the children
   }
}

//從提供的資源變化中獲取進一步的信息
case IResourceDelta.CHANGED:
   System.out.print("Resource ");
   System.out.print(delta.getFullPath());
   System.out.println(" has changed.");
   int flags = delta.getFlags();
   if ((flags & IResourceDelta.CONTENT) != 0) {
         System.out.println("--> Content Change");
   }
   if ((flags & IResourceDelta.REPLACED) != 0) {
         System.out.println("--> Content Replaced");
   }
   if ((flags & IResourceDelta.MARKERS) != 0) {
         System.out.println("--> Marker Change");
         IMarkerDelta[] markers = delta.getMarkerDeltas();
         // if interested in markers, check these deltas
   }
   break;

//將工作移至 WorkspaceJob 子類型
class MyWorkspaceJob extends WorkspaceJob {
 public MyWorkspaceJob() {
  super("My Workspace Job");
 }
 public IStatus runInWorkspace(IProgressMonitor monitor) {
  //do the actual work in here
  doSomeWork();
  return Status.OK_STATUS;
 }
}

//對該作業(yè)附加調(diào)度規(guī)則以避免同時修改 myProject
MyWorkspaceJob job = new MyWorkspaceJob();
job.setRule(myProject);
job.schedule();

本站僅提供存儲服務(wù),所有內(nèi)容均由用戶發(fā)布,如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點擊舉報
打開APP,閱讀全文并永久保存 查看更多類似文章
猜你喜歡
類似文章
eclipse插件開發(fā)中容器選擇器的顯示內(nèi)容能否被指定
Eclipse 安裝Gradle插件
采用SWT實現(xiàn)系統(tǒng)文件夾的樹形結(jié)構(gòu)顯示
Eclipse下Hibernate入門
Eclipse入門使用指南及開發(fā)Eclipse插件
在 Eclipse's RCP中配置Hibernate
更多類似文章 >>
生活服務(wù)
分享 收藏 導長圖 關(guān)注 下載文章
綁定賬號成功
后續(xù)可登錄賬號暢享VIP特權(quán)!
如果VIP功能使用有故障,
可點擊這里聯(lián)系客服!

聯(lián)系客服