Leçon 2 : développement du code pour la classe BrowseMemberAction
Cette leçon vous guide étape par étape pour développer le code nécessaire pour la classe BrowseMemberAction.
A propos de cette tâche
Pour développer le code pour la classe BrowseMemberAction :
Procédure
- Ouvrez la classe
BrowseMemberActiondans l'éditeur si elle n'est pas déjà ouverte. Dans l' explorateur de packages , développezcom.ibm.carma.plugin.browse>src>browseet cliquez deux fois sur la classeBrowseMemberAction. - La première méthode que vous allez écrire est
selectionChanged.Cette méthode est utilisée pour contrôler les éléments pour lesquels la commande Parcourir est activée. Dans l'exemple de code suivant, l'action de parcourir le membre est activée uniquement sur les membres CARMA et uniquement pour un membre à la fois. A cause de cela, des vérifications doivent être effectuées avant d'activer l'action de parcourir. Le pseudocode suivant le démontre :
Utilisez l'exemple de code suivant pour implémenter cette méthode :if (more than one item is selected) disable action; if (item selected is CARMA member) enable action else disable actionpublic void selectionChanged(IAction action, ISelection selection) { Iterator i = ((IStructuredSelection) selection).iterator(); // by default assume false action.setEnabled(false); if( ((IStructuredSelection) selection).size() != 1){ return; } while (i.hasNext()) { Object next = i.next(); if (next instanceof CARMAMember) { // the element is a member //remember the item selected so if the action is run it knows //which item to run the action against this.itemSelected = (CARMAMember) next; } else { this.itemSelected = null; return; } } // if we passed the test...then enable the action action.setEnabled(true); } - La deuxième méthode que vous écrivez est la méthode
run.Cette méthode est appelée quand vous voulez appeler l'actionBrowserMemberAction. Pour ouvrir leCARMAMemberen mode de lecture seule, le plan de travail nécessite le téléchargement du contenu du fichier à partir du gestionnaire RAM dans le fichierIFile, un type de fichier d'Eclipse. Définissez les propriétés du fichierIFilesur lecture seule, puis ouvrez le fichierIFile. Le pseudocode suivant le démontre :
Utilisez l'exemple de code suivant pour implémenter cette méthode :Get the CARMAMember the user wants to browse; Create an IFile that represents the CARMAMember; Download contents of the CARMAMember into the IFile; Set the properties of the IFile to read-only; Call Eclipse to open the IFile;public void run(IAction action) { //if itemSelected is null then the browse action was run //on something that is not a CARMA Member, this should never happen if (this.itemSelected != null) { //Get the name of the CARMA Member String memberName = itemSelected.getFileName(); //Create a temporary location on the workstation to hold the //local cache of the file IWorkspace myWorkspace = ResourcesPlugin.getWorkspace(); IWorkspaceRoot myRoot = myWorkspace.getRoot(); IProject myResource = myRoot.getProject("/BootCampTemp"); //If the temporary directory that holds the temporary files //does not exist create it if( !myResource.exists() ){ try{ myResource.create(new NullProgressMonitor()); } catch(Exception e){ e.printStackTrace(); } } //If the temp location which is a project is not open //open it if( !myResource.isOpen()){ try{ myResource.open(new NullProgressMonitor()); } catch(Exception e){ e.printStackTrace(); } } //Make sure the temporary space is of the right type and exists if (myResource instanceof IContainer && myResource.exists()) { IContainer myContainer = (IContainer) myResource; //Create the IFile in the temporary location final IFile myFile = myContainer.getFile(new Path(memberName)); //Create the job that will get the contents of the file GetContentsJob myJob = new GetContentsJob("CRAJOB1", itemSelected); //Run the Job myJob.schedule(); try{ InputStream myStream = null; while( (myStream = myJob.getStream()) == null){ } //Copy the contents into the IFile if(!myFile.exists()) myFile.create(myStream, true, new NullProgressMonitor()); } catch(Exception e){ e.printStackTrace(); } //Set the file's attributes to read-only and open the file 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(); } //setting the attributes to readonly myAttributes.setReadOnly(true); try{ myFile.setResourceAttributes(myAttributes); } catch(Exception e){ e.printStackTrace(); } //opening the file in browse mode IDE.openEditor(page, myFile, true); } catch (PartInitException e) { //TODO handle exception System.out.println(e); } } }); } } } - Vérifiez que tous les packages dont la classe a besoin sont importés. Ajoutez tous les packages répertoriés ci-dessous mais qui ne sont pas inclus dans les instructions d'importation :
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; - Enregistrez la source et déboguez les éventuelles erreurs.