From e8659be28ea073cccae69ce1e883d48d41fa9435 Mon Sep 17 00:00:00 2001 From: David Dykstal Date: Wed, 27 Jun 2007 01:52:12 +0000 Subject: [PATCH] [194215] formatted code in popup example, updated tutorial from example, tested --- .../guide/tutorial/ShowJarContents1.html | 38 +++--- .../guide/tutorial/ShowJarContents2.html | 99 ++++++++++---- .../guide/tutorial/popup.html | 114 ++++++++++++----- .../guide/tutorial/popup_newClass.gif | Bin 14131 -> 22392 bytes .../samples/ui/actions/ShowJarContents.java | 121 ++++++++---------- 5 files changed, 229 insertions(+), 143 deletions(-) diff --git a/rse/doc/org.eclipse.rse.doc.isv/guide/tutorial/ShowJarContents1.html b/rse/doc/org.eclipse.rse.doc.isv/guide/tutorial/ShowJarContents1.html index 90e137bc22a..e49235490b2 100755 --- a/rse/doc/org.eclipse.rse.doc.isv/guide/tutorial/ShowJarContents1.html +++ b/rse/doc/org.eclipse.rse.doc.isv/guide/tutorial/ShowJarContents1.html @@ -10,34 +10,36 @@

ShowJarContents Class After Creation

-


 package samples.ui.actions;
 
-import org.eclipse.rse.files.ui.actions.SystemAbstractRemoteFilePopupMenuExtensionAction;
+import org.eclipse.jface.action.IAction;
+import org.eclipse.jface.viewers.ISelection;
+import org.eclipse.ui.IObjectActionDelegate;
+import org.eclipse.ui.IWorkbenchPart;
 
-public class ShowJarContents
-	extends SystemAbstractRemoteFilePopupMenuExtensionAction
-{
+public class ShowJarContents implements IObjectActionDelegate {
 
-	/**
-	 * Constructor for ShowJarContents.
-	 */
-	public ShowJarContents()
-	{
-		super();
+	public ShowJarContents() {
+		// TODO Auto-generated constructor stub
 	}
 
-	/**
-	 * @see org.eclipse.rse.ui.actions.SystemAbstractPopupMenuExtensionAction#run()
-	 */
-	public void run()
-	{
+	public void setActivePart(IAction action, IWorkbenchPart targetPart) {
+		// TODO Auto-generated method stub
+
+	}
+
+	public void run(IAction action) {
+		// TODO Auto-generated method stub
+
+	}
+
+	public void selectionChanged(IAction action, ISelection selection) {
+		// TODO Auto-generated method stub
+
 	}
 
 }
-
 
-

diff --git a/rse/doc/org.eclipse.rse.doc.isv/guide/tutorial/ShowJarContents2.html b/rse/doc/org.eclipse.rse.doc.isv/guide/tutorial/ShowJarContents2.html index a316ea3ddae..0ef682951a3 100755 --- a/rse/doc/org.eclipse.rse.doc.isv/guide/tutorial/ShowJarContents2.html +++ b/rse/doc/org.eclipse.rse.doc.isv/guide/tutorial/ShowJarContents2.html @@ -4,49 +4,79 @@ - + ShowJarContents Class After Editing

ShowJarContents Class After Editing

-


 package samples.ui.actions;
 
+import java.util.ArrayList;
+import java.util.Iterator;
+import java.util.List;
+
+import org.eclipse.jface.action.IAction;
 import org.eclipse.jface.dialogs.MessageDialog;
+import org.eclipse.jface.viewers.IStructuredSelection;
 import org.eclipse.rse.core.model.IHost;
-import org.eclipse.rse.files.ui.actions.SystemAbstractRemoteFilePopupMenuExtensionAction;
+import org.eclipse.rse.core.subsystems.ISubSystem;
 import org.eclipse.rse.shells.ui.RemoteCommandHelpers;
 import org.eclipse.rse.subsystems.files.core.subsystems.IRemoteFile;
 import org.eclipse.rse.subsystems.shells.core.subsystems.IRemoteCmdSubSystem;
+import org.eclipse.rse.ui.SystemBasePlugin;
+import org.eclipse.swt.widgets.Shell;
+import org.eclipse.ui.IObjectActionDelegate;
+import org.eclipse.ui.IWorkbenchPart;
 
-public class ShowJarContents2 extends SystemAbstractRemoteFilePopupMenuExtensionAction {
+/**
+ * An action that runs a command to display the contents of a Jar file.
+ * The plugin.xml file restricts this action so it only appears for .jar files.
+ */
+public class ShowJarContents implements IObjectActionDelegate {
+	private List _selectedFiles;
 
-	public ShowJarContents2() {
-		super();
+	/**
+	 * Constructor for ShowJarContents.
+	 */
+	public ShowJarContents() {
+		_selectedFiles = new ArrayList();
 	}
 
-	public void run() {
+	protected Shell getShell() {
+		return SystemBasePlugin.getActiveWorkbenchShell();
+	}
+
+	protected IRemoteFile getFirstSelectedRemoteFile() {
+		if (_selectedFiles.size() > 0) {
+			return (IRemoteFile) _selectedFiles.get(0);
+		}
+		return null;
+	}
+
+	protected ISubSystem getSubSystem() {
+		return getFirstSelectedRemoteFile().getParentRemoteFileSubSystem();
+	}
+
+	/* (non-Javadoc)
+	 * @see org.eclipse.ui.IActionDelegate#run(org.eclipse.jface.action.IAction)
+	 */
+	public void run(IAction action) {
 		IRemoteFile selectedFile = getFirstSelectedRemoteFile();
-		String cmdToRun = "jar -tvf " + selectedFile.getAbsolutePath();
-		runCommand(cmdToRun);
-	}
-
-	private void runCommand(String command) {
-		IRemoteCmdSubSystem cmdss = getRemoteCmdSubSystem();
-		if (cmdss != null && cmdss.isConnected()) {
-			RemoteCommandHelpers.runUniversalCommand(getShell(), command, ".", cmdss);
-		} else {
-			MessageDialog.openError(getShell(), "No command subsystem", "Found no command subsystem");
+		String cmdToRun = "jar -tvf " + selectedFile.getAbsolutePath(); //$NON-NLS-1$
+		try {
+			runCommand(cmdToRun);
+		} catch (Exception e) {
+			String excType = e.getClass().getName();
+			MessageDialog.openError(getShell(), excType, excType + ": " + e.getLocalizedMessage()); //$NON-NLS-1$
+			e.printStackTrace();
 		}
 	}
-	
-	/**
-	 * Gets the Command subsystem associated with the current host
-	 */
-	private IRemoteCmdSubSystem getRemoteCmdSubSystem() {
+
+	public IRemoteCmdSubSystem getRemoteCmdSubSystem() {
+		//get the Command subsystem associated with the current host
 		IHost myHost = getSubSystem().getHost();
 		IRemoteCmdSubSystem[] subsys = RemoteCommandHelpers.getCmdSubSystems(myHost);
 		for (int i = 0; i < subsys.length; i++) {
@@ -57,8 +87,31 @@ public class ShowJarContents2 extends SystemAbstractRemoteFilePopupMenuExtension
 		return null;
 	}
 
+	public void runCommand(String command) throws Exception {
+		IRemoteCmdSubSystem cmdss = getRemoteCmdSubSystem();
+		if (cmdss != null && cmdss.isConnected()) {
+			// Run the command in a visible shell
+			RemoteCommandHelpers.runUniversalCommand(getShell(), command, ".", cmdss); //$NON-NLS-1$
+		} else {
+			MessageDialog.openError(getShell(), "No command subsystem", "Found no command subsystem");
+		}
+	}
+
+	public void selectionChanged(org.eclipse.jface.action.IAction action, org.eclipse.jface.viewers.ISelection selection) {
+		_selectedFiles.clear();
+		// store the selected jars to be used when running
+		Iterator theSet = ((IStructuredSelection) selection).iterator();
+		while (theSet.hasNext()) {
+			Object obj = theSet.next();
+			if (obj instanceof IRemoteFile) {
+				_selectedFiles.add(obj);
+			}
+		}
+	}
+
+	public void setActivePart(IAction action, IWorkbenchPart targetPart) {
+	}
 }
 
-

diff --git a/rse/doc/org.eclipse.rse.doc.isv/guide/tutorial/popup.html b/rse/doc/org.eclipse.rse.doc.isv/guide/tutorial/popup.html index aa9562451f2..10efece442a 100755 --- a/rse/doc/org.eclipse.rse.doc.isv/guide/tutorial/popup.html +++ b/rse/doc/org.eclipse.rse.doc.isv/guide/tutorial/popup.html @@ -22,12 +22,6 @@ to a local temporary folder, extract the list of file names within the jar, and display those names in an Eclipse table view.

-

Tip: If you prefer your Java code to use lined-up braces, select the -first two options in the Code -Formatter preferences page for Java, via Windows->Preferences. - -This will affect code generated by wizards. The source code shown assumes this option has been set, but this is not required. -

Step-by-Step: Creating an RSE Remote Resource Pop-up Menu Action

    @@ -42,7 +36,7 @@ This will affect code generated by wizards. The source code shown assumes this o <extension point="org.eclipse.ui.popupMenus"> <objectContribution objectClass="org.eclipse.rse.subsystems.files.core.subsystems.IRemoteFile" - namefilter="*.jar"´ + nameFilter="*.jar" id="actions.jar"> <action label="Show contents" @@ -58,39 +52,63 @@ This will affect code generated by wizards. The source code shown assumes this o Save and close the file.
  1. -Create the Java package: right-click on the src source folder and select New->Package to open the New - Java Package wizard. Enter "samples.ui.actions" for the name of the package and press Finish.
  2. -
  3. -Create the Java class: right-click on the new "samples.ui.actions" package folder and select New->Class to open the New -Java Class wizard. Enter "ShowJarContents" for the Name -and "org.eclipse.rse.files.ui.actions.SystemAbstractRemoteFilePopupMenuExtensionAction" -for the Superclass. Select the Constructors from superclass check box, as shown -here. -Press Finish to create the ShowJarContents class. +Right-click on the project and use the New... action to create a new package in this project named samples.ui.actions.
  4. -
  5. Edit the generated ShowJarContents.java file as follows: +
  6. +Create the Java class: right-click on the new samples.ui.actions package folder and select New->Class to open the New +Java Class wizard. +Enter "ShowJarContents" for the Name, add IObjectActionDelegate +to the Interfaces that are implemented, and check the constructors from superclass checkbox as shown +here. +Click Finish to create the ShowJarContents class. +
  7. +
  8. Edit the generated ShowJarContents.java file as follows. +Use the "Source -> Organize Imports" context menu item to add the appropriate import statements as you edit.
      -
    1. Add the following three statements to the body of the run() method:
    2. -
      
      -		IRemoteFile selectedFile = getFirstSelectedRemoteFile();
      -		String cmdToRun = "jar -tvf " + selectedFile.getAbsolutePath();
      -		runCommand(cmdToRun);  
      -  
      -
    3. Add the following two methods to find the subsystem and run the command:
    4. -
      
      -	private void runCommand(String command) {
      +
    5. Add an instance variable to hold a list of remote files and initialize it in the constructor.
    6. +
      
      +	private List _selectedFiles;
      +
      +	/**
      +	 * Constructor for ShowJarContents.
      +	 */
      +	public ShowJarContents() {
      +		_selectedFiles = new ArrayList();
      +	}	  
      +
      +
    7. Add the following three utility methods
    8. +
      
      +	protected Shell getShell() {
      +		return SystemBasePlugin.getActiveWorkbenchShell();
      +	}
      +
      +	protected IRemoteFile getFirstSelectedRemoteFile() {
      +		if (_selectedFiles.size() > 0) {
      +			return (IRemoteFile)_selectedFiles.get(0);
      +		}
      +		return null;
      +	}
      +
      +	protected ISubSystem getSubSystem() {
      +		return getFirstSelectedRemoteFile().getParentRemoteFileSubSystem();
      +	}
      +
      +
    9. Add the following methods to find the subsystem and run the command:
    10. +
      
      +	public void runCommand(String command) {
       		IRemoteCmdSubSystem cmdss = getRemoteCmdSubSystem();
       		if (cmdss != null && cmdss.isConnected()) {
      -			RemoteCommandHelpers.runUniversalCommand(getShell(), command, ".", cmdss);
      +			// Run the command in a visible shell
      +			RemoteCommandHelpers.runUniversalCommand(getShell(), command, ".", cmdss); //$NON-NLS-1$
       		} else {
       			MessageDialog.openError(getShell(), "No command subsystem", "Found no command subsystem");
       		}
       	}
      -	
      +
       	/**
       	 * Gets the Command subsystem associated with the current host
       	 */
      -	private IRemoteCmdSubSystem getRemoteCmdSubSystem() {
      +	public IRemoteCmdSubSystem getRemoteCmdSubSystem() {
       		IHost myHost = getSubSystem().getHost();
       		IRemoteCmdSubSystem[] subsys = RemoteCommandHelpers.getCmdSubSystems(myHost);
       		for (int i = 0; i < subsys.length; i++) {
      @@ -100,16 +118,46 @@ Press Finish to create the ShowJarC
       		}
       		return null;
       	}
      -  
      -
    11. User the "Source -> Organize Imports" context menu item to add the appropriate import statements.
    12. +
      +
    13. Finally, flesh out the methods that were created as stubs
    14. +
      
      +	public void run(IAction action) {
      +		IRemoteFile selectedFile = getFirstSelectedRemoteFile();
      +		String cmdToRun = "jar -tvf " + selectedFile.getAbsolutePath(); //$NON-NLS-1$
      +		try {
      +			runCommand(cmdToRun);
      +		} catch (Exception e) {
      +			String excType = e.getClass().getName();
      +			MessageDialog.openError(getShell(), excType, excType + ": " + e.getLocalizedMessage()); //$NON-NLS-1$
      +			e.printStackTrace();
      +		}
      +	}
      +
      +	public void selectionChanged(org.eclipse.jface.action.IAction action, org.eclipse.jface.viewers.ISelection selection) {
      +		_selectedFiles.clear();
      +		// store the selected jars to be used when running
      +		Iterator theSet = ((IStructuredSelection) selection).iterator();
      +		while (theSet.hasNext()) {
      +			Object obj = theSet.next();
      +			if (obj instanceof IRemoteFile) {
      +				_selectedFiles.add(obj);
      +			}
      +		}
      +	}
      +
      +	public void setActivePart(IAction action, IWorkbenchPart targetPart) {
      +	}
      +
    The final result after editing is shown here.
-

Thats it! Now, you can try your new action. Use Run->Run As->Run-time Workbench. Drill +

+Now, you can try your new action. Use Run->Run As->Eclipse Application. + Drill down in the RSE to a Jar file in a local or remote connection and right-click to see and run your new action. Notice -how it does not appear for files that do not end with the ".jar" extension. This is because of the "namefilter" attribute +how it does not appear for files that do not end with the ".jar" extension. This is because of the "nameFilter" attribute in our extension point .xml file. diff --git a/rse/doc/org.eclipse.rse.doc.isv/guide/tutorial/popup_newClass.gif b/rse/doc/org.eclipse.rse.doc.isv/guide/tutorial/popup_newClass.gif index 1e097dc6b0aeb75d9201cd64097f8c6debe2f2bf..dc00bb12cbdb48052a3c420190261de6f36ad7ef 100755 GIT binary patch literal 22392 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 literal 14131 zcmeI2V{;}||p*+1O5=*tTukwr$&XvN1L`H@2N;Pu}w{PSxqU>aP3a)J%8P zOixPy#5uVPuRuw`UO@f}7-DM}YHQ^Ga7Jc!#{Lg)Y%Xu&{|F%#4x#==>YEtmZl`WTQl)R4bCjIFwN}eHN6WcX z>)UvjYI%QatFd>f@wbM2(`y}4Y8_H*9n)(aGiseO>Ksz*98>H3ZF0Vu^-gK^{?^jj zknc!o4aw;Z`SztNA+;+pIlVEZy)oaWb|>#ezS5iyK=I!GP|;Kva)lt^UcZ4 z$u~DIH{ZN`^Y1(UcmMuh{txc}@f*bduAc5c{jVkjVSph0F!+)U1%tsbXf!(G4TZzu z$fQy^l8r^bqp^QkZH+e;kHup4mAs)631+d9%a$P!6_iSYf*YY`0GiEaz&M=`SO=QR z1HlD@!NdexD&`?1lWAlN3eJMc6^a=Q1Y4_At9~@GI}Eg1uR}V zwApIIIsBc>)!q->0-0SX)vA6Ff4An+U#)N><9!8kJ}vxhR5nF_P8Sy z2%yrR?diNH`csUSDc2kEbg>qVy*}&fopiG|45Y=8_ltacILWQhpUeA7e!2ZCkSW~X z_w}xFfAVjL^l&^Cr0g+Cn)!#pVj$~TNwPd2EP09|GD*Wyh%7bHa;UoLcz~L==h3nT zQ671bmUZXRiVoGJDwdx6+YyO=fFqFxbi{JRno$fF`+8iWs++J`rY8lNc|oF?iA4qZ zS&+3%7iP9i%Nd2KUC$f)R_ZX0yN=VWYp0IOf+B~mn~B@1u7?GMke=sh;p$HI#RTPv zuggODuHRQA*#f}l`RpV=0E*_cAOzFuv@n9A>a-|^{rt2zL7e8SBt^~YtTg`qWH-+j zY>yfw+3(yEx7f()yt1OK>b$C^?fkqNm{yb+R?{+TMT^@~R9KnU@O*wzKLAC0*)Srf zbpdESh`Okmr12hY{*y&~)nck*ZQE*M!ZV899j9{Hz86M&-Eo-aorHl?;~-Yokwav647G=5B&QdYXCkxb5v=Y0KZuT@ z7={x1b_lx6Qo!IKOz?h7ufpb(!?cRJ?bEVGIZZVd&Qe3@(6iHiV1+P}E-M;{4AJj- z8&X{nC_Qu^hatIDyr(72liC;Hj?W8yb*M+eO0|1J5pkzsbi{$4TACb{8^@v4A{S=I#@7O2GevZfuU_;gbWYSMZ-S%*!8%zRMp9K9HYzU=w2rXXGVb z^U(zml#+vRS_wgxdx20K zZA<~wtT2eq9mvom5J5mNUP6)4vEj%XdsC#vj1lfMQF8Wqqf)ES3dQ zI!8Su=MBWrqPykj7J^rvlQE(-5lG?T!m&D+M8=OKcZ{^COhjsc>Kh)mDWSnn$ICc^Tdpu*F*N;CI#mhVAd(?7s&zdF4dst$O|A*@#908 z7n)5zarrJU9Oy*GvFIts?}nNWvR%aAJTd2o`&a<;+e~QAVl=d7G4&!lqkRNxj7e?D z+woA6=c7bkvGA^V&DetKR}`1>!Cex_qcU8g7IGXeM(&c2m4eW?3T#qC6-rN)N;~&VAg*gM{tp8x zERRvwIM=|DPs##*z+{`BeJU>786f{eS?jtoy&auKy%w<4`~FlPaHXsN0lN}_i|H0O zQiUI_$-`8ZltSQJ0XjDRCqW6hMlpr*tKxL_b2~l~Bl)1>+`XULt*s@`HyX!~XMq3J%F)|M4(Yt4hlvK2IKOto3#U|X%Ci8x;y&$bH!+krBQ_?#0S%kYpT z1vn9Zs{Auu=hi;8eeLzqz2{m;{zjoL=k=6g4q1vkF*(4h#_koGTIchUwieyv-uudD z;`!yd6Ef=F2hykIOYPM7@jl!2C3fl$K5dXeo{>4nb`pdqv+u;`k%>Z3rA0e!nEpc} z2}bRbi*jop73pFavGYul+d>*x)A5^O_J|?3QwRmGIehi&JWO`_uYKWK0x^&_(p$!a zVFNo22eBq8ecB`vS+x_}*7}u9dUULbqqjn4PdhPshu*u>N2`y;sT|>$rD(ZE6Vnpt zH#n`=!u~dc4PePRkvSos%FN|Kv=&{0SBD@uEcAZD@arVVZ*#l)^6byJ7`SN_Jb5$`V=#UGlQ z(JV9hE4QJU2uFJ9Z>xQX>mX45aT;WG&^r2CGb^<+6G?Za)ynBw+>!MJ;Z=Jk{2q! zHYae)83Hk!u2qXaL%N|nhs6*NQv~X}K1w~NO=q1G{CiFW=iHyb&iY@d{17CK5vO!yQ2~*1DMjeD5n@;#i5teOqSp5V@qsY`R_$*?$v@NXSn` zGP&n+joc~?b{MtxxwN`3@2gX&&yD@1msH$5(Mv#*Hl*V#_NeZ-b0B|a_g_9pFD%sE z4~DG%eDT{rN}m)&fzlC1y}MX{-otLPHzI{Rn6!T0`212h;~P&tE@!PP*ZfHO|NZky<}6IkQXxRSvc z?~J(8m6`mgS2i0#h63EIkNCIdZ2@*iRG7JLj<@oRM7z_e==l~1*DlVt2J6IpqbVAfwjkj zLl-+{qa#+!nc-{*Vrnf$jR;cR0n!{CGP0RnHUI($#+1Uz)H%-j2nN+R9{cPOpNPus zI?mwf0ab-Yzj)7(NEMl^5&!Cu0OLth=uGF|oZ#}BKsm1=#E~fY;*5={hn<;-+nI>J zp2%#XgA;BHn`RkxtPu3fb0w-(`6Q=hB4+)nsVWL&ku(v=%}Bt6N}{7QB{H?+u{5ws zapoR#98@;gPcdhoh!s$i6cSIAnQ+Felo4@DQEhfcBTE5+PT?3;NgFlO3o|9-5(;hA z04ayfgs>XSyD5DHBWSL0lOj zni*l8!kn7UBoiwCOs&pUG*cjzh)Z>FjuhiFrBY!tncCB3(lP{6)CV7xhtRW_Aypio z(=jLwJti{ck20}Qs5+ZdYPhl?)D@IGvpXzlq5;`G)D8iWGK!hm_OEHkY__JXnqiox z_N;(A^0Z6kG^)SaAEdc8i7eV>bMnLIZ~?oF@6&qdEkQ`95HR8JKn!>`F*jmVPPf9Vya` z&(cg3D%X~xaFY@UaD~V;g>I$lxK&C&q~s3Pvq@-FiM4X_N>aHzEs^IllGrWIgHt6- z)iJXqNZ*~*&T>PGEXa;fj4Fyd7mFR;l-atnMYKwW7C9>34ARcTGfYxCOCxVZwQifK zl-?sll;rPHO6k_Am|^ABCnFzBN{vplAkWPVGD|qD%CL`1LP^RDUL);j^Z}JTqMliz zRwW+qmh#W$5u-Ua@41eg<-ugxK>xPlUG$s)Et4QPaWX8sc99D0(2B?n<7iyT1gRo_ z?n;BTT;j~KwY18t^U$0s*~&`8!t*qfcfqnuRSO!E0dZ81r7X?bz{;BEtorz{dJngv@-Vx8 zsQNbyO&tn5n66qA^h|SdJCN>%*UH)q&!l&)qIa!Eg^Bv`$+BTwzBflSxha{eZr96f0!Nclx|Y}*1%0zwP`V1QTA`Rd zc~hvVJg#X$9bKm&t&{@Us+gS_`dlY8#Us$&s^^_Y`q63>ZDPpNX0};r zp52DS(_*#R7CYKzhu2P{(&nVyt`6Jomfb$K*y^>}4l32|mo3YB!b9jSj3*%!TJ5Z> zS`$dyVL558MA1ytUBq5qO*+=JQ`H*jZ5+MX;iqa)fY(*T(^aC~Ri=%+kk(bz-Bq*M zRrk@wG}e*F)7=Q$(c<0hUrh-=9v~j>f}BCr&Joyc9*7kYh}#kPGXg`)(Ptbh$b>m) z#yp5h5{o9ojSjem#Q+n`+=1;R5zO{V$`KJP+7w(mA1p9VCPWpYBpf0piLXWC4;aUn zmh_ah_$iMas?=IUTBB8l*kkTUH`)BsvfW z+h;txhp@wS_M>MCt9O>8mqw{~HM%#@(RU*od#l@b=L35u-2H&3?=YI|*t@SbvF}`( zym!7&{IyRKyMK<@Q%0lz1uyhpd;b?6r3NP<2rr~g2X$pTD%GGDc+mj-)&L@Y4+?J& zrsSZE;owku4_;HxboU@B3@8Dw8xcO%LO2#F0x9`t5Ty<_OUDqOQ82^j5KTew;cBq7 z@Nhi}9x&8>nA3)w8y{cdbod^A2&MAswF zF^KNdqaQP9gb*~VJ!)=4Vu^rdy+vaCiDi#JMpc8oEj>nOGbR``=7~SdV&mucIo5zO z9^`{}sXfl^Fdp$aY=Al<%Q^D(G7gG8A;&Z!Jv{=J6FZhQvr(h6)-$u?Qv>xjb3m8V zw-zRw!mQcCg8Y!ANv8PsbM{ktRwiWjv4-VYXYSM{%p_v&c5AK?Z5D|C$HfFnMga_G z50nZ7oGk&IF9Dnl1e|sc6h{F}#sDf2>9c{^zhcCkPMoGJm5T^EY>mYUCigTEItuL-hQl2tMoj4gp` zzb9!)v$PvSN7*H9qi9IAMhy7$ca-(odiaqs~FXS6HD-B_c*R5%8iW#)FC#kUh{dDoDwJmBe1^l+znYgZfNa)aZTk^xvj`yq0!}lt&}F;P`?cjG@&^j|1q!PR z&gZa=6bnX}07|7WkJY>R=jRUk@xp=b4v5&!aqbS-@Ai((oxby(TYBEhpSzE_sdZI5 zVC2;XA3IoNwa{&b*E(Sq8M7*IrLVs8@7pczc-(uR8d)sn zXE_5HI;t(D(0yvKhz}0C#utHm?;qCl4X&vDXh<6r9fo(K> z>S$WK(xpzs>wg9H4qKz!#q$n7$-7q}YPb-yWp;QJ?Re9dRKTJSx;?zOw4ZkJWu^Phy=ncWv3kH_-z>Xvw*w#v&+!y@{hd{_ zJZ*jUbJgSHA(|>+3vigIwX5966R(%zS9h3F=ish)CdR)TGNO?I_Ew(yB@0 zic(ne#dl@pG8_rZ@l|)(C)>%8cbma~?3vqH>%wXp<{eZM2$AYZQ#LB0R2KG<8P6^$ zvr+KXO7X#?oH0z6pRZK+USHJKA%DK{_H2lCWL+8eKCUTb@vV^I%!9XH?H=bR-Q>eZz;;31m+DQRVsv1^WnTosnw zG9hBJ0;|@=Rv6Q6(kr+Ym*4%*)mvndZpMD%(e#92_t=Q^VUc7R(pW`Redp%FEbxtB4{oAOZ z2R^%L71oRtAWbUKsu`nB3h5!Gu$R6t9~=4Ky!>%~#YHbP>c63m*SpB-G*PYRJye<2 zdfVogOzSV`gyYMLzv{t#Uk7Go+85>`y?1A+5w^6<-8Lg$ zdGnluT_CF=0hrEr+U4(h=E_^^nqW+vEK@(o^cvoQrdK{A)B}B2Lj;#ND%F@gpP{p# zlJKWftxYnUjm~5*Ox04z+2?=am3|#7aUDs!{#GWg{%X~4ychWQru9!f^Y*>}-{ z;CCzBP-ssu2=WJkXokZ6P_X`jPaw>lp=cBaz1~QM;@{C2UOJn{(}cg0N#wG5qMGx@ zxM}pdeIYo?$1+(U7CR%E$|tjF?4CdfT$NLWB5pCIoD8Kir36B@FqtS6!QYk0@Z(=~LyWsPr`*IMn)SMMX*?R8u28iu2;>*;lSJa zayGr#h|Q<#Wm*^S1#v%A7=e>pBFBtzrMLxn7&^( zF6Xw%603;757UR>{&=%^AMeA*(F^CakEWK9#7ggMzUrFBk#}3ReG6-={(Vf72BD}Z zS{h+k%8~|Qc*YSXkuSOC86hMT(S~6p39?2}GOODg5{~%Zugwl1Ksp(pKl1Dfg zqm-p2`fr^T0F{PF`JLtbetD;RJWjoLKmf68*`s@JWn85x7~?N(-qxsesbt}{e#Q^cnf7kga>)< zfs%xviE|c(Vz_DShs936Ec?ExCT<0A9Aj4m=F@2GC;SL|Bn}2J;20%~@K30wGK^x2 z#qyMOnq~5@M6eR*>aA{O2mo`|%?fS9oD7TO#knm@)6Kfh%4q%8Px5~vcv)0)qt8Ri66*U$ zplIKHBA#>A6*yeGIC{0>!nTbn#yZtQSK;pX{QCG(| zTk&N5bX_+$cXiybALDyjw_W|Y8!~#$=dtg5sQaRX@hCsVI}DaU2bSyax44jR-sf2d zrNi&JSWLJr07faXJu6#E>HE48SpN08C@g{g*~8bm<-pG;(A)al-vi_P`B!~g@JoO& z=WRue7ZmePz<1t&0#P~yq1gY(*8R#~+&UI49f=ESS0;k$HzQQkbRZ@0(T9|P92(YT z^1zYN?_nB7Jq&el0e`bL?MijT&Nk1q`Ca@cbAqu zIq2x+YBKYy@6?0MG#}&bOY}A2EyfL{>IpfbO9*!{z(whl6wk8{iVZO#TP~9Xs4XO| z79EnabpohOlalix$b0@^Nhzf@iRH1H(x{%bD%LHe*2_#08FEQ$1xcs1j+ip|mrCnB zJEiwQm@(Y}m!%9b(Ncurv{_O+Wz3q8Q%6J0Nb_-It)QH;mU)X&T03R!+!nKUAt*U$ zl^80xF4NWy4>6gKQ5g78HF%ZRxaKPXu2D?NlTCs=nPB6aYb>GctCLhfpPN@w+kn8L|!wI{PPrY;FgkN+)5!wzY1~b&3Pl&71O{H zi|IqpZuM}LvyNv;dxtFLT)UL>o|no6AgvTaxmAiVmn$S(C4Z%Msgyy>(|T7fjBErUP{T5HWmfwZ+P*TM!^>l|f)KrXq0y8pJ; z!x{jB^gS=v``8K^;O&77VYW3O3ECK8e1O2Pt~AEQ3Yw78f=;TnHK7mKn6Y)Q!|4n( z=RegziSlSIq^Y&w3)(`fz=N%{t+dv=+QOLN1)(gZLA3w2wR4T$M0;e1?1#LzS7p*U zz-;fJvk-Dh?cO@-8t9x0wL>W3(LGm7?_wFKLoj0k$8%Zj-i5UHuyp{(-xGvB5wrJN zuHO0C(%viZ3W|KlqyN65-X}C*?-$vi55yeo{|D)S62oKwhQtXAE$$GM+F$_1I5>#p z*MLUGYY3U<+-~ zZMrs_*4DOdo8i2y+Vof50d-YwAe$Y%S}D!u#Qx3kBD_0H3?XYaMI zz0VcT>D#e-|L3-S0EX@!80FeLz`!Ax7-1hy-D?PU^f8=m#tP&#-{3u zM`^3Rt*`aavDRw0olU*J@45kx=b93`TWVtOhN*Msx38o zSyc39Q4llp2@s8@TPzOVW%JOE5lT77j?wo6_Zbg;j#{R=drLd#zX!Z0^lP2Y-ux%|(7Ib9lwSF<3>GD;K=m^j_jmt70@q3r z++DSP?iKo)CwS-WVZDDYYw!eaP5P=7HoI2C@V9Oego4+cWjwm{elI=XY7O`|9=kXn z?uqbuw>fM+jVStBzkl`JHM_DOlIkB%DC^Cn+uI#;FrLhM6U-GL@p*&#J}xZ2Jl@Ln z`m67HtxDiNODFWM7xQg`H_Cl*Z}V_AT1Qq%@w7^V@4@r8dv|mscONSA6Lfd?TJ`mI zvz=x0Csg+(cJotB^y%`9er;1PIq{`I8Ye{Lo4vetLt{Mm{!U6Tw>kJiG1uEUFALqFy`$ei4Rog#$M(33OO!`VG}FSqL9_3KNBmFj$CiV!}`bDqGD04GdWTZO(uyPanNbU$k`}(T8wf zGCwn!2*odvY2jgN<>5sm5e^-pb+~>`pFu9xX6_ad+?v7MO%eVP27%Avn;-$9B~W2H zQDRnB5*a?y6mIbrZV4AKNtYo?)`85bN}H6QCRSB;kE8ZI7^vW5j$~s_2X{4ybvB1OexSq&R6WB1B@i4N9Bvt?`CwK~Pu&)kcfXl=~ zMqKRHc!mw){i#I!2*8z2GTmT2k9Q)OH@E;n>KD;u5#6LOZ+sRVlAliD^&iPnllZ6c ziOLX(gvW_|6+j^`cro21%k5p1Hz7)1pr(s%%DfHcBw0B!&n zqa=9kmQ*psR4-XD^X*hW`cxD8^dMbSP)iWTS^#QAAk{b+BR2Ri&R`Z8aE1ghvWh^| zwE&Ecpt`Lo7NX#}C;(#$Y2L##84F|fc8nP8TR!08k)CTu_oD|r3o6f;aP69_n+ zAlOI^XkU%&JU%#c$IL#R>=NtjUm0-1+W@Tbpj@(v+LD?15n0CDAcnmldV?UWTM)um z*?IKf8~oW@I=Mr#xkkEi7AjDb1h8KbvZs$yXAt1$EwdNXL39mZWXORSOu_x1a{CB# zn-IYuPeFG&W!ZFd;IYW8RDq}sK?yeFJrKdDr)9WnLGL3$v<*QYI)7MC=l&u5K`NaE zJrZxjh6AsafMZsKP*u#MlBBo|_`c1aLV*9K3T94_XBY>qSqp-n`9o6yMvV=IWB~RL zK_2wSJTm>PUk=h^0m95H{Lv}GwFgk?$YEhVA}*$90b^My>lOqXBp5n(h9zUZCSvZq zM~;3E4EDDI?W-bnLJ)-k81`+zzmXXhKBaS+1!_~Jc|oKRkRR_EG5obL-9#$1kUuDO zC+SsH(lP?@1E!g-rVz%XVE4cn_rMtbfWh|$!96K**n-Jl1;SD(k@hO{{#0zUh(EeT z%(9Ux4_WvaK#HbAIyab%sX?P1a7-j|2YFY4u{mS1UCalV5-dFyJ+IOh>yIi z*t*C={zo@;#c2x!doKw0huqd<0HAixNOw_Ac10dzl`~h_Ja*0;V?H8h#Whp{ODxES zevw`QftYE9y%rP%Imkg)jTnfmMDkM(IdnzYbTyD(f>k3B)gp)`ca9!JttJD6;#389 z0FEL6%u#lQm?;o-PvMqTohMc;2vXCGB^U!4lx!`?uy&5NBS=9t29_$2_IAm^7L0g& z?h9Wwj&0QiBQoJg(}7Nsa4i7K08I93o?Ui@N>D9Y3=De>? zWm<;JBFH#)U4B`e69a7LP9?j!v6c_F z);<9})6%`4+Vvwkz!^4OPfhLWN1d8!slt-2V)V7eRNdCl$R$^WWmDbcrOAcd?Hvr< z6H)0zUck=N_JM9$v#2C0Y2}gW&avyxN$AdL>dsl|&Ux$3#qXWV<(;cqJ=Dd~8($I| zh~2wTygTyU2U)xavE8R-+$YoBmm{o~P<Qd|PGcnr)aat?Jd zgcNluOE!}x!75SyF;@bn9KqfCp1kL>s_XK#hter$%osL8Cb}VN87$gpGWQ+n1XnIN zR|Pu7Uf(>B7^G{D-Ep6>vKTsOA$vLw$uFkobU#BwDPT#J_!yRi|A4eCp9>V1VwNau zBcIHUYO;`+eJ79TElXrZH7ZASbkFFn0`PM*p3zQ~nLiCS4ULD|h_ftDw69oA(b#k7 zCwN){5tN}&A2JKD00A>uT(5FD&_s#>OIj`s&h2pX&cu|P8g9iTGHdtgOTSQSPc_U` zXyZ_$%v2@sNGq=L{fiP}Xjkp|NFU0qsLK>z@kkNn$S^Hij^Rj}`k27dOoHp!{P+-x z0S=I-Yhs6DiI}F+cgQfA4_aha)NqWvqGV&12n$Dauz&2AgnudY_x!GqFVh%3%z)-7 zjsXazB7mXte!EYxeG;Wxm^CU~IRiJrhIq+lUTQ zg)nZ}&km4-V1XfY!rn(X{YI=NWl_0S_?}2SrD&vSD5bjmw|DQa&eNib?(z$Wu>eJk z|KWJNTw)-*$!TDI=qQ0GL8Qefir+@2!%n0lyI#IHitTK^ZBnKygF%_zabdtYTB4Pv zr|H9l)ept=I<=GfQPbBS$9XIl&1Tk3iMwrK)`}z-9itSwh^d_nyDcjhy~h`QE7S^p zl+|I$WrG(3Wf#rFhp!kmzL}AlYF3Kemvw+kZy~D9$)WEk z^vm(n@2Si0X~yn`fS6S3mvHr&q~+PfSY!<4IE?i_nexpvODzguOc?c?`F_KeQy8+O zTT}|&FcBJ-s;E+bDc_A7<(8fCk2(w5J2R&}NbLXIwn!GiId_FK_rE^4OqgUkKFxM} zjH|m94nNjrImJ7OeYSm!1sc-+RFTX-lnO^u$Uih4by+BTz$%q_)q;aO=wf-a5LyJ!`7JI8kE!C~_uzFZc@-rnj@GvMg*m~A}xp-HvhQT#FgnviaHQD>LD>v@ieb8Y7t-4OfL=Jj>$l|lGcvgeh) z=M}2IKLF~L7`Kn>c3fdlIOTZ475FOpoX{@eS@{PIKWpC|^ESERqr@oXweI?T)IKRQ z<3l{U|DSg_iqGiW&2agRW%%cqKDP1Py#XVUtrY&u911Yc{nJLiK%(oJYU9~F{$hdS zt4;iCN#J7H{7cKtx9H!`DS7u0LAR((Uy8BMPQ`pr%ADRp>{~z5UtUBa=MjIyv0r1q z1~7pU_8!;7`KM>zqkWlAj;|+k9zHC7uM}^>NuObNz)0fVqks3u{;o&N=MU}`Wfs6y z%=bw7{d7XxH}M&vYB{_)}%J7ti!t z9Zn|;wNDan5DE`=;!ya%8GH`<^;NWBP*s&a~KDWuY{`~i(-)?uSNAR=r zXw~0e+u!HpsqLpDLS(qQ8y2y-qPqy&_^SIGXaG+A*FC+4O>l1P03gBM6I zw)967TKo-Jbf4P9)Cj+{4O3c)pDR&R-)LPoSb;@lKG;Bvv(TFTnrbhcbOYNsUeJw` zG?H?*gUsJK@3q{QDGS>ufgjA$BF+`@{Upz0sMEZFLyMC-#}8HXtkAV@#U$O_?+rPn zkbhk-jg~$mG1Jg1>NvAnNwYN2UQEL>JDwz}GCQ5!>!R3ehs(Uk#b~3VU<8Ow*A#=9 zZP^qD^>I-bj(98+DKP_65eJV==B!!k)7&Wbx#j8dZ;NIk{-YliJ2wQ+{)qUYC~#{Sl?KSJ<)E`ysW zwP}z5+FsU0S)MP}B}HjIwq;dqU$zxZ>t421UGFQG-{G+_Dihd%39E8&`5yL7+wN_* zwXoP)#dWjcY=)gGFRq)N;pst8$1xMG_8o%K*SYPgcdNs#GB}FNqSa`wlg252o`JmnL(cB2JXwsh7{VE*t3h}H zUgx&%!`HSt`_HDJzJGE+mb-ar0biTZ@BZjnS-7CZvB8Tr4TBjzYQYzG#Kz|8!U814xwlbI8OoB`d5#uF64~*c9rcbnyHQ7fiuK0a=h9s<7 zvWa1t@tZy=(M@*?{@*)v4@;AxhdF+vAm?!!YZZ!*ZIAKgPDD~-$_Np$&;;SX*JRFX z6!PFtW0_NpvG;voV`A1KsiYFvSYSj+Qqop2015S(aLx6RlkIkWHLuW|j3oOWt@a1fO#pFQjt_r!(r z6+R^Ad#IfA4I|I_{G=2F-vIc)wG=?{QB5OP{Rw4Rih_h&JwGK^%&?KyuIRE*og7J4 z;F_R;GgcQ7;b!m=W_4Go+PW5;`9!e{khG_JVygzkF6ZF#K}&R3}iaIMRt4t^|Kv{hY_nLtagpfc}Fx>uQrkb zX=@}QtuQ8~)r@^}Zc6K=3nGeMpK)SuzMWn-Mc-VXM=fh&*EYar%fcGmL(cdGc% zHdMXPDU)*P7-5UDv<}-SHE~x(;lom`zR($xS}mLUy`wCxwXONIRb`_i3#Q%#QAvoO!Bgq^SY4dUH&)sHRDTbeG926L)BVL6eyxyRK96;d`TO&tV~iKr7$1yqNbH?4YGK$2 zRcw|^g4a30F4P3q%$Y~NTidFZ2bAHJ}MfrloAZqRn(o2k)fFrKn2$4K0WW~dppa&$DEXs>KK;Eh@tUw&o8Fqj%X6g-D1KRK zUuzwB?6umrV_q+SxuK7?N$I&l!IF(_-EFACK*GR|8(%xi9?DgnUuI#GS$nlPUs5*{ z=B68T)wqHT$0z>R&JBEeXSXWd)#u1XN5s~mD~M-nA&&Am%q5|=fM>Cwjn#!M*7B7= zWBXaPzWBoS+&h?k{V=ssr5A#MRb8`&LiSe;mCn*2!`i&(7vm@fzeL!k&G1-q{CFqb zbxL#3e!U&nbo|?W#^TmdYaQ3@GS@@S!)G4P4cDJRzhVzkEj{MmreoA zYnOg+lB>9v-guQOpMTvVpo|`9AHKKV?%n%$ajzqbUks2wyoaQWZxhOW_y5g!{;GeQ z5hxpt`PUrsh$DS!%ZSmtUM4fDO~QQM zuK%O=QO~BeKH?UuuXG4$m+tr2eNnya?jOQ@lA$@vcF+g0ZH|95bLp_I 0) - { - return (IRemoteFile)_selectedFiles.get(0); + + protected IRemoteFile getFirstSelectedRemoteFile() { + if (_selectedFiles.size() > 0) { + return (IRemoteFile) _selectedFiles.get(0); } return null; } - - protected ISubSystem getSubSystem() - { + + protected ISubSystem getSubSystem() { return getFirstSelectedRemoteFile().getParentRemoteFileSubSystem(); } - - + /* (non-Javadoc) - * @see org.eclipse.rse.ui.actions.SystemAbstractPopupMenuExtensionAction#run() + * @see org.eclipse.ui.IActionDelegate#run(org.eclipse.jface.action.IAction) */ public void run(IAction action) { IRemoteFile selectedFile = getFirstSelectedRemoteFile(); String cmdToRun = "jar -tvf " + selectedFile.getAbsolutePath(); //$NON-NLS-1$ try { runCommand(cmdToRun); - } catch(Exception e) { + } catch (Exception e) { String excType = e.getClass().getName(); - MessageDialog.openError(getShell(), excType, excType+": "+e.getLocalizedMessage()); //$NON-NLS-1$ + MessageDialog.openError(getShell(), excType, excType + ": " + e.getLocalizedMessage()); //$NON-NLS-1$ e.printStackTrace(); } } @@ -98,20 +92,17 @@ public class ShowJarContents implements IObjectActionDelegate //get the Command subsystem associated with the current host IHost myHost = getSubSystem().getHost(); IRemoteCmdSubSystem[] subsys = RemoteCommandHelpers.getCmdSubSystems(myHost); - for (int i=0; i0 && result[0] instanceof IRemoteCommandShell) { - IRemoteCommandShell cs = (IRemoteCommandShell)result[0]; + if (result.length > 0 && result[0] instanceof IRemoteCommandShell) { + IRemoteCommandShell cs = (IRemoteCommandShell) result[0]; while (cs.isActive()) { Thread.sleep(1000); } Object[] output = cs.listOutput(); - for (int i=0; i