Cette leçon vous guide étape par étape pour développer le code nécessaire pour la classe BrowseMemberAction.
Pour développer le code pour la classe BrowseMemberAction :
if (more than one item is selected) disable action; if (item selected is CARMA member) enable action else disable actionUtilisez l'exemple de code suivant pour implémenter cette méthode :
public void selectionChanged(IAction action, ISelection selection) {
Iterator i = ((IStructuredSelection) selection).iterator();
// false supposé par défaut
action.setEnabled(false);
if( ((IStructuredSelection) selection).size() != 1){
return;
}
while (i.hasNext()) {
Object next = i.next();
if (next instanceof CARMAMember) { // l'élément est un membre
//retient l'élément sélectionné car si l'action est exécutée, elle sait
//contre quel élément l'action doit être exécutée
this.itemSelected = (CARMAMember) next;
} else {
this.itemSelected = null;
return;
}
}
// si le test est réussi, activer l'action
action.setEnabled(true);
}
Obtenir le CARMAMember que l'utilisateur veut parcourir; Créer un fichier IFile qui représente le CARMAMember; Télécharger le contenu du CARMAMember dans le fichier IFile; Définir les propriétés du fichier IFile sur lecture seule; Appeler Eclipse pour ouvrir le fichier IFile;Utilisez l'exemple de code suivant pour implémenter cette méthode :
public void run(IAction action) {
//si itemSelected est nul alors l'action a été exécutée
//sur quelque chose d'autre qu'un membre CARMA, ce qui ne devrait pas arriver
if (this.itemSelected != null) {
//Obtenir le nom du membre CARMA
String memberName = itemSelected.getFileName();
//Créer un emplacement temporaire sur le poste de travail pour contenir le
//cache local du fichier
IWorkspace myWorkspace = ResourcesPlugin.getWorkspace();
IWorkspaceRoot myRoot = myWorkspace.getRoot();
IProject myResource = myRoot.getProject("/BootCampTemp");
//Si le répertoire temporaire qui contient les fichiers temporaires
//n'existe pas, le créer
if( !myResource.exists() ){
try{
myResource.create(new NullProgressMonitor());
} catch(Exception e){
e.printStackTrace();
}
}
//Si l'emplacement temporaire qui est un projet n'est pas ouvert,
//ouvrez-le
if( !myResource.isOpen()){
try{
myResource.open(new NullProgressMonitor());
} catch(Exception e){
e.printStackTrace();
}
}
//Vérifier que l'espace temporaire est du bon type et existe
if (myResource instanceof IContainer && myResource.exists()) {
IContainer myContainer = (IContainer) myResource;
//Créer le fichier IFile dans l'emplacement temporaire
final IFile myFile = myContainer.getFile(new Path(memberName));
//Créer le travail qui obtiendra le contenu du fichier
GetContentsJob myJob = new GetContentsJob("CRAJOB1", itemSelected);
//Exécuter le travail
myJob.schedule();
try{
InputStream myStream = null;
while( (myStream = myJob.getStream()) == null){
}
//Copier le contenu dans le fichier IFile
if(!myFile.exists())
myFile.create(myStream, true, new NullProgressMonitor());
} catch(Exception e){
e.printStackTrace();
}
//Définir les attributs du fichier sur lecture seule et ouvrir le fichier
Display display = Display.getDefault();
display.syncExec(new Runnable() {
public void run() {
IWorkbenchPage page =
PlatformUI.getWorkbench().getActiveWorkbenchWindow().getActivePage();
try {
ResourceAttributes myAttributes = myFile.getResourceAttributes();
if(myAttributes == null){
myAttributes = new ResourceAttributes();
}
//Définition des attributs sur lecture seule
myAttributes.setReadOnly(true);
try{
myFile.setResourceAttributes(myAttributes);
} catch(Exception e){
e.printStackTrace();
}
//Ouverture du fichier en mode parcourir
IDE.openEditor(page, myFile, true);
} catch (PartInitException e) {
//TODO gère l'exception
System.out.println(e);
}
}
});
}
}
}
import java.io.InputStream; import java.util.Iterator; import org.eclipse.core.resources.IContainer; import org.eclipse.core.resources.IFile; import org.eclipse.core.resources.IProject; import org.eclipse.core.resources.IWorkspace; import org.eclipse.core.resources.IWorkspaceRoot; import org.eclipse.core.resources.ResourceAttributes; import org.eclipse.core.resources.ResourcesPlugin; import org.eclipse.core.runtime.NullProgressMonitor; import org.eclipse.core.runtime.Path; import org.eclipse.jface.action.IAction; import org.eclipse.jface.viewers.ISelection; import org.eclipse.jface.viewers.IStructuredSelection; import org.eclipse.swt.widgets.Display; import org.eclipse.ui.IViewActionDelegate; import org.eclipse.ui.IViewPart; import org.eclipse.ui.IWorkbenchPage; import org.eclipse.ui.PartInitException; import org.eclipse.ui.PlatformUI; import org.eclipse.ui.ide.IDE; import com.ibm.carma.model.CARMAMember; import com.ibm.carma.ui.job.GetContentsJob;