Esta lección le guiará en los pasos para desarrollar el código necesario para la clase BrowseMemberAction.
Para desarrollar el código para la clase BrowseMemberAction:
si (se selecciona más de un elemento) inhabilitar acción; si (el elemento seleccionado es un miembro CARMA) habilitar acción de lo contrario inhabilitar acciónUtilice el siguiente código de muestra para implementar este método:
public void selectionChanged(IAction action, ISelection selection) {
Iterator i = ((IStructuredSelection) selection).iterator();
// por omisión, presuponer false
action.setEnabled(false);
if( ((IStructuredSelection) selection).size() != 1){
return;
}
while (i.hasNext()) {
Object next = i.next();
if (next instanceof CARMAMember) { // el elemento es un miembro
//recordar el elemento seleccionado para que, si se ejecuta la acción, sepa
//en qué elemento debe ejecutarse la acción
this.itemSelected = (CARMAMember) next;
} else {
this.itemSelected = null;
return;
}
}
// si se pasa la prueba... habilitar la acción
action.setEnabled(true);
}
Obtener el miembro CARMA que el usuario desea examinar; Crear un IFile que represente el miembro CARMA; Descargar el contenido del miembro CARMA en el IFile; Establecer las propiedades del IFile como de sólo lectura; Llamar a Eclipse para que abra el IFile;Utilice el siguiente código de muestra para implementar este método:
public void run(IAction action) {
//si itemSelected es nulo, la acción de examinar se ha ejecutado
//en algún elemento que no es un miembro CARMA; esto nunca debe ocurrir
if (this.itemSelected != null) {
//Obtener el nombre del miembro CARMA
String memberName = itemSelected.getFileName();
//Crear una ubicación temporal en la estación de trabajo para contener
//la memoria caché local del archivo
IWorkspace myWorkspace = ResourcesPlugin.getWorkspace();
IWorkspaceRoot myRoot = myWorkspace.getRoot();
IProject myResource = myRoot.getProject("/BootCampTemp");
//Si el directorio temporal que contiene los archivos temporales
//no existe, crearlo
if( !myResource.exists() ){
try{
myResource.create(new NullProgressMonitor());
} catch(Exception e){
e.printStackTrace();
}
}
//Si la ubicación temporal que es un proyecto no está abierta,
//abrirla
if( !myResource.isOpen()){
try{
myResource.open(new NullProgressMonitor());
} catch(Exception e){
e.printStackTrace();
}
}
//Comprobar que el espacio temporal es del tipo correcto y existe
if (myResource instanceof IContainer && myResource.exists()) {
IContainer myContainer = (IContainer) myResource;
//Crear el IFile en la ubicación temporal
final IFile myFile = myContainer.getFile(new Path(memberName));
//Crear el trabajo que obtendrá el contenido del archivo
GetContentsJob myJob = new GetContentsJob("CRAJOB1", itemSelected);
//Ejecutar el trabajo
myJob.schedule();
try{
InputStream myStream = null;
while( (myStream = myJob.getStream()) == null){
}
//Copiar el contenido en el IFile
if(!myFile.exists())
myFile.create(myStream, true, new NullProgressMonitor());
} catch(Exception e){
e.printStackTrace();
}
//Establecer los atributos del archivo como de sólo lectura y abrir el archivo
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();
}
//establecer los atributos en sólo lectura
myAttributes.setReadOnly(true);
try{
myFile.setResourceAttributes(myAttributes);
} catch(Exception e){
e.printStackTrace();
}
//abrir el archivo en modalidad de examen
IDE.openEditor(page, myFile, true);
} catch (PartInitException e) {
//Excepción de descriptor de contexto TODO
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;