add a ***Command for a button

ŽËÓÊŒþʹÓà MIME žñÊœ¡£ÓÉÓÚÓÊŒþÔĶÁ³ÌÐò²»ÄÜʶ±ð ŽËžñÊœ£¬ÒòŽË£¬¿ÉÄÜÎÞ·šÊ¶±ðžÃÓÊŒþµÄ·Ö²¿»ò²¿·ÖÄÚÈÝ¡£
<div style=3D"color: rgb(0, 0, 0);"><br></div><div style=3D"color: rgb(0, 0, 0)= ;"><br></div><div style=3D"color: rgb(0, 0, 0);">import java.io.IOException;</=
<div style=3D"color: rgb(0, 0, 0);"> // Evaluate a= nd set the correlationId on the parameters, fails on invalid correlation id<= /div><div> <b> <font color=3D"#ff2600">returnValue =3D= ExecutionHandler.evaluateCorrelationId(commandBase.getParameters());</font>= </b></div><div style=3D"color: rgb(0, 0, 0);"> if (= returnValue !=3D null) {</div><div style=3D"color: rgb(0, 0, 0);"> = log.warnFormat("CanDoAction of action {0} failed= . Reasons: {1}", commandBase.getActionType(),</div><div style=3D"color: rgb(0,= 0, 0);"> &nbs=
--B_3490359053_1250312 Content-type: multipart/alternative; boundary="B_3490359053_1263648" --B_3490359053_1263648 Content-type: text/plain; charset="GB2312" Content-transfer-encoding: quoted-printable Hi, everyone: I added a button on the Template Tab, in the client side, It=A1=AFs OK, Added the button=A1=AFs callback like this: =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D private void backup() { BackupInfoParameters param =3D new BackupInfoParameters(); Frontend.RunAction(VdcActionType.Unknown, param, new IFrontendActionAsyncCallback() { @Override public void executed(FrontendActionAsyncResult result) { } }); } =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D The BackupInfoCommand.java is : =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D package org.ovirt.engine.core.bll; import org.ovirt.engine.core.bll.utils.PermissionSubject; import org.ovirt.engine.core.common.action.BackupInfoParameters; import java.io.IOException; import java.util.Collections; import java.util.List; /** * Created by leaboy on 8/7/14. */ public class BackupInfoCommand <T extends BackupInfoParameters> extends CommandBase<T>{ public BackupInfoCommand(T parameters){ super(parameters); } @Override public List<PermissionSubject> getPermissionCheckSubjects() { return Collections.emptyList(); } @Override protected boolean canDoAction() { return true; } @Override protected void executeCommand() { int a; a =3D 1; try{ Runtime.getRuntime().exec("touch /tmp/tmp.txt"); }catch (IOException e){ e.printStackTrace(); } } } =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D And the BackupInfoParameters.java is: =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D package org.ovirt.engine.core.common.action; /** * Created by leaboy on 8/7/14. */ public class BackupInfoParameters extends VdcActionParametersBase implement= s java.io.Serializable{ private static final long serialVersionUID =3D -1363077467684414051L; private VdcActionType _actionType; //public BackupInfoParameters(){} public BackupInfoParameters(){_actionType =3D VdcActionType.Unknown;} public VdcActionType getActionType() { return _actionType; } } =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D Built the code success, but when I clicked the button, got a dialog with th= e error info: Error while executing action: A Request to the Server failed with the following Status Code: 500 I debug it , find the error is raised at : protected VdcReturnValueBase evaluateCorrelationId(CommandBase<?> commandBase) { VdcReturnValueBase returnValue =3D null; // Evaluate and set the correlationId on the parameters, fails on invalid correlation id returnValue =3D ExecutionHandler.evaluateCorrelationId(commandBase.getParameters()); if (returnValue !=3D null) { log.warnFormat("CanDoAction of action {0} failed. Reasons: {1}"= , commandBase.getActionType(), StringUtils.join(returnValue.getCanDoActionMessages(), ',')); } // Set the correlation-id on the command =20 commandBase.setCorrelationId(commandBase.getParameters().getCorrelationId()= ) ; return returnValue; } --B_3490359053_1263648 Content-type: text/html; charset="GB2312" Content-transfer-encoding: quoted-printable <html><head></head><body style=3D"word-wrap: break-word; -webkit-nbsp-mode: s= pace; -webkit-line-break: after-white-space; font-size: 14px; font-family: =CB= =CE=CC=E5, sans-serif;"><div style=3D"color: rgb(0, 0, 0);">Hi, everyone:</div><div = style=3D"color: rgb(0, 0, 0);"><span class=3D"Apple-tab-span" style=3D"white-space= :pre"> </span>I added a button on the Template Tab, in the client side, It= 8217;s OK,</div><div style=3D"color: rgb(0, 0, 0);"><img src=3D"cid:871E2E8A-B37= 5-456F-B2CF-9E25AB718A23" type=3D"image/png"></div><div style=3D"color: rgb(0, 0= , 0);"><br></div><div style=3D"color: rgb(0, 0, 0);">Added the button’s = callback like this:</div><div style=3D"color: rgb(0, 0, 0);">=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D</div><div style=3D"colo= r: rgb(0, 0, 0);"> private void backup()</div><div style=3D"color: rgb(0,= 0, 0);"> {</div><div style=3D"color: rgb(0, 0, 0);">  = ; BackupInfoParameters param =3D new BackupInfoParameters();</di= v><div style=3D"color: rgb(0, 0, 0);"> Frontend.Run= Action(VdcActionType.Unknown, param, new IFrontendActionAsyncCallback() {</d= iv><div style=3D"color: rgb(0, 0, 0);"> &nbs= p; @Override</div><div style=3D"color: rgb(0, 0, 0);"> &nb= sp; public void executed(FrontendActionAsyncResult result) {</= div><div style=3D"color: rgb(0, 0, 0);"><br></div><div style=3D"color: rgb(0, 0,= 0);"> }</div><div style=3D"color: rg= b(0, 0, 0);"> });</div><div style=3D"color: rgb(0, = 0, 0);"> }</div><div style=3D"color: rgb(0, 0, 0);">=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D</div><div style=3D"= color: rgb(0, 0, 0);"><br></div><div style=3D"color: rgb(0, 0, 0);">The Backup= InfoCommand.java is :</div><div style=3D"color: rgb(0, 0, 0);">=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D</div><div style=3D"co= lor: rgb(0, 0, 0);">package org.ovirt.engine.core.bll;</div><div style=3D"colo= r: rgb(0, 0, 0);"><br></div><div style=3D"color: rgb(0, 0, 0);">import org.ovi= rt.engine.core.bll.utils.PermissionSubject;</div><div style=3D"color: rgb(0, 0= , 0);">import org.ovirt.engine.core.common.action.BackupInfoParameters;</div= div><div style=3D"color: rgb(0, 0, 0);">import java.util.Collections;</div><di= v style=3D"color: rgb(0, 0, 0);">import java.util.List;</div><div style=3D"color= : rgb(0, 0, 0);"><br></div><div style=3D"color: rgb(0, 0, 0);">/**</div><div s= tyle=3D"color: rgb(0, 0, 0);"> * Created by leaboy on 8/7/14.</div><div s= tyle=3D"color: rgb(0, 0, 0);"> */</div><div style=3D"color: rgb(0, 0, 0);">= public class BackupInfoCommand <T extends BackupInfoParameters> extend= s CommandBase<T>{</div><div style=3D"color: rgb(0, 0, 0);"> = public BackupInfoCommand(T parameters){</div><div style=3D"color: rgb(0, 0, 0= );"> super(parameters);</div><div style=3D"color: r= gb(0, 0, 0);"> }</div><div style=3D"color: rgb(0, 0, 0);"><br></d= iv><div style=3D"color: rgb(0, 0, 0);"> @Override</div><div style= =3D"color: rgb(0, 0, 0);"> public List<PermissionSubject> g= etPermissionCheckSubjects() {</div><div style=3D"color: rgb(0, 0, 0);"> = return Collections.emptyList();</div><div style=3D"color:= rgb(0, 0, 0);"> }</div><div style=3D"color: rgb(0, 0, 0);"><br><= /div><div style=3D"color: rgb(0, 0, 0);"> @Override</div><div sty= le=3D"color: rgb(0, 0, 0);"> protected boolean canDoAction() {</d= iv><div style=3D"color: rgb(0, 0, 0);"> return true= ;</div><div style=3D"color: rgb(0, 0, 0);"> }</div><div style=3D"co= lor: rgb(0, 0, 0);"><br></div><div style=3D"color: rgb(0, 0, 0);"><br></div><d= iv style=3D"color: rgb(0, 0, 0);"> @Override</div><div style=3D"col= or: rgb(0, 0, 0);"> protected void executeCommand() {</div><div= style=3D"color: rgb(0, 0, 0);"> int a;</div><div s= tyle=3D"color: rgb(0, 0, 0);"> a =3D 1;</div><div sty= le=3D"color: rgb(0, 0, 0);"> try{</div><div style=3D"= color: rgb(0, 0, 0);"> Runtime.getR= untime().exec("touch /tmp/tmp.txt");</div><div style=3D"color: rgb(0, 0, 0);">= }catch (IOException e){</div><div style=3D"color: = rgb(0, 0, 0);"> e.printStackTrace()= ;</div><div style=3D"color: rgb(0, 0, 0);"> }</div>= <div style=3D"color: rgb(0, 0, 0);"><br></div><div style=3D"color: rgb(0, 0, 0);= "> }</div><div style=3D"color: rgb(0, 0, 0);">}</div><div style=3D"= color: rgb(0, 0, 0);">=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D</div><div style=3D"color: rgb(0, 0, 0);"><br></div><div styl= e=3D"color: rgb(0, 0, 0);">And the BackupInfoParameters.java is:</div><div sty= le=3D"color: rgb(0, 0, 0);">=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D</div><div style=3D"color: rgb(0, 0, 0);">package org.ovi= rt.engine.core.common.action;</div><div style=3D"color: rgb(0, 0, 0);"><br></d= iv><div style=3D"color: rgb(0, 0, 0);">/**</div><div style=3D"color: rgb(0, 0, 0= );"> * Created by leaboy on 8/7/14.</div><div style=3D"color: rgb(0, 0, 0= );"> */</div><div style=3D"color: rgb(0, 0, 0);">public class BackupInfoP= arameters extends VdcActionParametersBase implements java.io.Serializable{</= div><div style=3D"color: rgb(0, 0, 0);"> private static final lon= g serialVersionUID =3D -1363077467684414051L;</div><div style=3D"color: rgb(0, 0= , 0);"> private VdcActionType _actionType;</div><div style=3D"col= or: rgb(0, 0, 0);"><br></div><div style=3D"color: rgb(0, 0, 0);"> = //public BackupInfoParameters(){}</div><div style=3D"color: rgb(0, 0, 0);"><b= r></div><div style=3D"color: rgb(0, 0, 0);"> public BackupInfoPar= ameters(){_actionType =3D VdcActionType.Unknown;}</div><div style=3D"color: rgb(= 0, 0, 0);"><br></div><div style=3D"color: rgb(0, 0, 0);"> public = VdcActionType getActionType() {</div><div style=3D"color: rgb(0, 0, 0);"> = ; return _actionType;</div><div style=3D"color: rgb(0, 0,= 0);"> }</div><div style=3D"color: rgb(0, 0, 0);">}</div><div sty= le=3D"color: rgb(0, 0, 0);">=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D</div><div style=3D"color: rgb(0, 0, 0);"><br></div><div = style=3D"color: rgb(0, 0, 0);">Built the code success, but when I clicked the = button, got a dialog with the error info:</div><div style=3D"color: rgb(0, 0, = 0);"><br></div><div><b><font color=3D"#ff2600">Error while executing action: A= Request to the Server failed with the following Status Code: 500</font></b>= </div><div style=3D"color: rgb(0, 0, 0);"><br></div><div style=3D"color: rgb(0, = 0, 0);">I debug it , find the error is raised at :</div><div style=3D"color: r= gb(0, 0, 0);"><br></div><div><div style=3D"color: rgb(0, 0, 0);">protected Vdc= ReturnValueBase evaluateCorrelationId(CommandBase<?> commandBase) {</d= iv><div style=3D"color: rgb(0, 0, 0);"> VdcReturnVa= lueBase returnValue =3D null;</div><div style=3D"color: rgb(0, 0, 0);"><br></div= p; StringUtils.join(returnValue.getCanDoActionMessages(), ','));</div><div s= tyle=3D"color: rgb(0, 0, 0);"><br></div><div style=3D"color: rgb(0, 0, 0);">&nbs= p; }</div><div style=3D"color: rgb(0, 0, 0);"> &nbs= p; // Set the correlation-id on the command</div><div style=3D"c= olor: rgb(0, 0, 0);"> commandBase.setCorrelationI= d(commandBase.getParameters().getCorrelationId());</div><div style=3D"color: r= gb(0, 0, 0);"> return returnValue;</div><div styl= e=3D"color: rgb(0, 0, 0);"> }</div></div></body></html> --B_3490359053_1263648-- --B_3490359053_1250312 Content-type: image/png; name="871E2E8A-B375-456F-B2CF-9E25AB718A23.png" Content-ID: <871E2E8A-B375-456F-B2CF-9E25AB718A23> Content-disposition: inline; filename="871E2E8A-B375-456F-B2CF-9E25AB718A23.png" Content-transfer-encoding: base64 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 FksWd0bJR8VF1UdNRXtFl0VLl1gsWbPkRoxajCCmPRYfGxV7JHZyqffS3UuH4+ziCuPuLjNc lrPs2nK15anLz66QX8FZcSoeGx8d3xD/iRPCqeVMrvRfuXflBNeTu4f7kufGK+eN8V34ZfyR BJeEsoTRRJfEXYljSa5JFUnjAk9BteB1sl/ygeSplJCUoykzqdGpzWmEtPi000IlYYqwK10z PSe9L8M0ozBDuspp1e5VE6JA0ZFMKHNZZruYjv5M9UiMJJslg1kLs2qy3mdHZZ/KUcwR5vTk muRuyx3J88n7fjVmNXd1Z752/ob8wTXuaw6thdauXNu5Tnddwbrh9b7rj20gbUjZ8MtGy41l G99uit7UUaBRsL5gaLPv5sZCuUJR4b0tzlsObMVsFWzt3WazrWrblyJe0fViy+KK4k8l3JLr 31l9V/ndzPaE7b2l9qX7d+B2CHfc3em681iZYlle2dCu4F2t5czyovK3u1fsvlZhW3FgD2mP ZI+0MqiyvUqvakfVp+qk6oEaj5rmvep7t+2d2sfb17/fbX/TAY0DxQc+HhQcvH/I91BrrUFt xWHc4azDz+ui6rq/Z39ff0TtSPGRz0eFR6XHwo911TvU1zeoN5Q2wo2SxrHjccdv/eD1Q3sT q+lQM6O5+AQ4ITnx4sf4H++eDDzZeYp9qukn/Z/2ttBailqh1tzWibakNml7THvf6YDTnR3O HS0/m/989Iz2mZqzymdLz5HOFZybOZ93fvJCxoXxi4kXhzpXdD66tOTSna6wrt7LgZevXvG5 cqnbvfv8VZerZ645XTt9nX297Yb9jdYeu56WX+x+aem172296XCz/ZbjrY6+BX3n+l37L972 un3ljv+dGwOLBvruLr57/17cPel93v3RB6kPXj/Mejj9aP1j7OOiJwpPKp6qP6391fjXZqm9 9Oyg12DPs4hnj4a4Qy//lfmvT8MFz6nPK0a0RupHrUfPjPmM3Xqx9MXwy4yX0+OFvyn+tveV 0auffnf7vWdiycTwa9HrmT9K3qi+OfrW9m3nZOjk03dp76anit6rvj/2gf2h+2P0x5Hp7E/4 T5WfjT93fAn88ngmbWbm3/eE8/syOll+AAAqqElEQVR4Ae2dB9xUxfX3D0qvIiJNlGIEaQqo qBAb2LBiL1hfg4lKyD8xiW9MLB+NbzRIokYTjRV7B/OqCIgVsYAo2AAVEQRBEJAOiv/9zpOz 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 PYC9OnUB1oMPPuhOoPsgtGvXbrPb+vhu7o477ui+mfvRRx8JF3d8+umnsuuuu/pRs7Jr/o0b N07H40AwV463bds27VaOFi0bn171KQxb3z9fe751smTJEjnyyCPT+PMZUurjsssuc4e1s+Hv 7bffloceekj+/ve/ZxOtYGGDZeHQMt+IHjZsmOy///455cPtl9yCaWQIGAKGgCFgCBgChkA5 IlBQZQIA+DzoaaedlhgLvp3LjxuUp02blpcyofmfeuqp6fwXL14szz77rAwePNh9vjTtUYaW bLHNp4gIytw9UIg6QQF68sknHTtckHb66afLlClTZO+9986HxS0S1y8LDHzyySdy0UUXyQsv vJD1N6DXrl0rDzzwQGJlgjqxr2RtkWq3TA0BQ8AQMAQMAUMgAoGCKxMR+bjv2E+YMEG4Fpxb khFUoa+++kqmT5/u7idYvny5vPTSS+7ijqh0snXn2nEEsDVr1rh8EWLJE8GMFYwDDjhAFi5c KFOnTnXP8IDAiN+3334rPDNzzIVsb731lixYsMDNqBOGuM8884yblW7RooVjDcWlR48ebiY+ LK+quH8BgX/ZsmWOHy44GTt2rJxwwgnpcsGr3nLMVe3cBRFWFnB47733XF117NhRvv76a1f+ QtYJfEDgRRu4+uqrXX2gTO62227yhz/8wdXXLbfcIqxE4D5o0CA55ZRTXDz941bI6667Tv7x j3+4S15QVm688Ubnfc0110jv3r1l++23l7vvvltat24tK1askFWrVslf//rXzVbONM1czM6d OzsllVWLli1byh133OH4pn1xg+Uf//hHhyEmdzmsX79ejj32WDnxxBMd/19++aVceeWVDoeb b75Z3n33XamZuk2cuJdffrlT5u677z53sdzhhx/usAjLA0XTyBAwBAwBQ8AQMAQMgWIjULQz E3PmzHGC1PHHHy9cwoHw6xMXdSDAcwNgIYl82YrCZSAoEaxUIMwdd9xxTmhj ZpmtUPDDVpWj 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 TkSuQmCC --B_3490359053_1250312--

ŽËÓÊŒþʹÓà MIME žñÊœ¡£ÓÉÓÚÓÊŒþÔĶÁ³ÌÐò²»ÄÜʶ±ð ŽËžñÊœ£¬ÒòŽË£¬¿ÉÄÜÎÞ·šÊ¶±ðžÃÓÊŒþµÄ·Ö²¿»ò²¿·ÖÄÚÈÝ¡£
<div style=3D"color: rgb(0, 0, 0);"> private void backup()</div><div sty= le=3D"color: rgb(0, 0, 0);"> {</div><div style=3D"color: rgb(0, 0, = 0);"> BackupInfoParameters param =3D new BackupInfo= Parameters();</div><div style=3D"color: rgb(0, 0, 0);"> &n= bsp; Frontend.RunAction(VdcActionType.Unknown, param, new IFrontendActionAsy= ncCallback() {</div><div style=3D"color: rgb(0, 0, 0);"> &= nbsp; @Override</div><div style=3D"color: rgb(0, 0, 0);"> = public void executed(FrontendActionAsyncR= esult result) {</div><div style=3D"color: rgb(0, 0, 0);"><br></div><div style=3D= "color: rgb(0, 0, 0);"> }</div><div=
<div style=3D"color: rgb(0, 0, 0);"><br></div><div style=3D"color: rgb(0, 0, 0)= ;">import org.ovirt.engine.core.bll.utils.PermissionSubject;</div><div style= =3D"color: rgb(0, 0, 0);">import org.ovirt.engine.core.common.action.BackupInf= oParameters;</div><div style=3D"color: rgb(0, 0, 0);"><br></div><div style=3D"co= lor: rgb(0, 0, 0);"><br></div><div style=3D"color: rgb(0, 0, 0);">import java.= io.IOException;</div><div style=3D"color: rgb(0, 0, 0);">import java.util.Coll= ections;</div><div style=3D"color: rgb(0, 0, 0);">import java.util.List;</div>= <div style=3D"color: rgb(0, 0, 0);"><br></div><div style=3D"color: rgb(0, 0, 0);= ">/**</div><div style=3D"color: rgb(0, 0, 0);"> * Created by leaboy on 8/= 7/14.</div><div style=3D"color: rgb(0, 0, 0);"> */</div><div style=3D"color= : rgb(0, 0, 0);">public class BackupInfoCommand <T extends BackupInfoPara= meters> extends CommandBase<T>{</div><div style=3D"color: rgb(0, 0, 0= );"> public BackupInfoCommand(T parameters){</div><div style=3D"c=
--B_3490359440_1280947 Content-type: multipart/alternative; boundary="B_3490359440_1259218" --B_3490359440_1259218 Content-type: text/plain; charset="GB2312" Content-transfer-encoding: quoted-printable =B7=A2=BC=FE=C8=CB: =C1=A6=B2=A8 =CD=F5 <wlbleaboy@126.com> =C8=D5=C6=DA: Fri, 08 Aug 2014 16:10:48 +0800 =D6=C1: <devel@ovirt.org> =D6=F7=CC=E2: [ovirt-devel] add a ***Command for a button Hi, everyone: I added a button on the Template Tab, in the client side, It=A1=AFs OK, Added the button=A1=AFs callback like this: =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D private void backup() { BackupInfoParameters param =3D new BackupInfoParameters(); Frontend.RunAction(VdcActionType.Unknown, param, new IFrontendActionAsyncCallback() { @Override public void executed(FrontendActionAsyncResult result) { } }); } =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D The BackupInfoCommand.java is : =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D package org.ovirt.engine.core.bll; import org.ovirt.engine.core.bll.utils.PermissionSubject; import org.ovirt.engine.core.common.action.BackupInfoParameters; import java.io.IOException; import java.util.Collections; import java.util.List; /** * Created by leaboy on 8/7/14. */ public class BackupInfoCommand <T extends BackupInfoParameters> extends CommandBase<T>{ public BackupInfoCommand(T parameters){ super(parameters); } @Override public List<PermissionSubject> getPermissionCheckSubjects() { return Collections.emptyList(); } @Override protected boolean canDoAction() { return true; } @Override protected void executeCommand() { int a; a =3D 1; try{ Runtime.getRuntime().exec("touch /tmp/tmp.txt"); }catch (IOException e){ e.printStackTrace(); } } } =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D And the BackupInfoParameters.java is: =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D package org.ovirt.engine.core.common.action; /** * Created by leaboy on 8/7/14. */ public class BackupInfoParameters extends VdcActionParametersBase implement= s java.io.Serializable{ private static final long serialVersionUID =3D -1363077467684414051L; private VdcActionType _actionType; //public BackupInfoParameters(){} public BackupInfoParameters(){_actionType =3D VdcActionType.Unknown;} public VdcActionType getActionType() { return _actionType; } } =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D Built the code success, but when I clicked the button, got a dialog with th= e error info: Error while executing action: A Request to the Server failed with the following Status Code: 500 I debug it , find the error is raised at : protected VdcReturnValueBase evaluateCorrelationId(CommandBase<?> commandBase) { VdcReturnValueBase returnValue =3D null; // Evaluate and set the correlationId on the parameters, fails on invalid correlation id returnValue =3D ExecutionHandler.evaluateCorrelationId(commandBase.getParameters()); if (returnValue !=3D null) { log.warnFormat("CanDoAction of action {0} failed. Reasons: {1}"= , commandBase.getActionType(), StringUtils.join(returnValue.getCanDoActionMessages(), ',')); } // Set the correlation-id on the command =20 commandBase.setCorrelationId(commandBase.getParameters().getCorrelationId()= ) ; return returnValue; } _______________________________________________ Devel mailing list Devel@ovirt.org http://lists.ovirt.org/mailman/listinfo/devel --B_3490359440_1259218 Content-type: text/html; charset="GB2312" Content-transfer-encoding: quoted-printable <html><head></head><body style=3D"word-wrap: break-word; -webkit-nbsp-mode: s= pace; -webkit-line-break: after-white-space; color: rgb(0, 0, 0); font-size:= 14px; font-family: =CB=CE=CC=E5, sans-serif;"><div><br></div><div><br></div><span i= d=3D"OLK_SRC_BODY_SECTION"><div style=3D"font-family:Calibri; font-size:11pt; te= xt-align:left; color:black; BORDER-BOTTOM: medium none; BORDER-LEFT: medium = none; PADDING-BOTTOM: 0in; PADDING-LEFT: 0in; PADDING-RIGHT: 0in; BORDER-TOP= : #b5c4df 1pt solid; BORDER-RIGHT: medium none; PADDING-TOP: 3pt"><span styl= e=3D"font-weight:bold">=B7=A2=BC=FE=C8=CB: </span> =C1=A6=B2=A8 =CD=F5 <<a href=3D"mailto:wlbleaboy@1= 26.com">wlbleaboy@126.com</a>><br><span style=3D"font-weight:bold">=C8=D5=C6=DA: </= span> Fri, 08 Aug 2014 16:10:48 +0800<br><span style=3D"font-weight:bold">=D6=C1: = </span> <<a href=3D"mailto:devel@ovirt.org">devel@ovirt.org</a>><br><spa= n style=3D"font-weight:bold">=D6=F7=CC=E2: </span> [ovirt-devel] add a ***Command for = a button<br></div><div><br></div><div><div style=3D"word-wrap: break-word; -we= bkit-nbsp-mode: space; -webkit-line-break: after-white-space; font-size: 14p= x; font-family: =CB=CE=CC=E5, sans-serif;"><div style=3D"color: rgb(0, 0, 0);">Hi, eve= ryone:</div><div style=3D"color: rgb(0, 0, 0);"><span class=3D"Apple-tab-span" s= tyle=3D"white-space:pre"> </span>I added a button on the Template Tab, in the = client side, It’s OK,</div><div style=3D"color: rgb(0, 0, 0);"><img src=3D= "cid:871E2E8A-B375-456F-B2CF-9E25AB718A23" type=3D"image/png"></div><div style= =3D"color: rgb(0, 0, 0);"><br></div><div style=3D"color: rgb(0, 0, 0);">Added th= e button’s callback like this:</div><div style=3D"color: rgb(0, 0, 0);">= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D</div= style=3D"color: rgb(0, 0, 0);"> });</div><div styl= e=3D"color: rgb(0, 0, 0);"> }</div><div style=3D"color: rgb(0, 0, 0= );">=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D<= /div><div style=3D"color: rgb(0, 0, 0);"><br></div><div style=3D"color: rgb(0, 0= , 0);">The BackupInfoCommand.java is :</div><div style=3D"color: rgb(0, 0, 0);= ">=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D</d= iv><div style=3D"color: rgb(0, 0, 0);">package org.ovirt.engine.core.bll;</div= olor: rgb(0, 0, 0);"> super(parameters);</div><di= v style=3D"color: rgb(0, 0, 0);"> }</div><div style=3D"color: rgb(0= , 0, 0);"><br></div><div style=3D"color: rgb(0, 0, 0);"> @Overrid= e</div><div style=3D"color: rgb(0, 0, 0);"> public List<Permis= sionSubject> getPermissionCheckSubjects() {</div><div style=3D"color: rgb(0= , 0, 0);"> return Collections.emptyList();</div><= div style=3D"color: rgb(0, 0, 0);"> }</div><div style=3D"color: rgb= (0, 0, 0);"><br></div><div style=3D"color: rgb(0, 0, 0);"> @Overr= ide</div><div style=3D"color: rgb(0, 0, 0);"> protected boolean c= anDoAction() {</div><div style=3D"color: rgb(0, 0, 0);"> &= nbsp; return true;</div><div style=3D"color: rgb(0, 0, 0);"> }</d= iv><div style=3D"color: rgb(0, 0, 0);"><br></div><div style=3D"color: rgb(0, 0, = 0);"><br></div><div style=3D"color: rgb(0, 0, 0);"> @Override</di= v><div style=3D"color: rgb(0, 0, 0);"> protected void executeComm= and() {</div><div style=3D"color: rgb(0, 0, 0);"> i= nt a;</div><div style=3D"color: rgb(0, 0, 0);"> a =3D= 1;</div><div style=3D"color: rgb(0, 0, 0);"> try{<= /div><div style=3D"color: rgb(0, 0, 0);"> &n= bsp; Runtime.getRuntime().exec("touch /tmp/tmp.txt");</div><div style=3D"color= : rgb(0, 0, 0);"> }catch (IOException e){</div><d= iv style=3D"color: rgb(0, 0, 0);"> e.= printStackTrace();</div><div style=3D"color: rgb(0, 0, 0);"> &nbs= p; }</div><div style=3D"color: rgb(0, 0, 0);"><br></div><div style=3D"col= or: rgb(0, 0, 0);"> }</div><div style=3D"color: rgb(0, 0, 0);">}<= /div><div style=3D"color: rgb(0, 0, 0);">=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D</div><div style=3D"color: rgb(0, 0, 0);"><b= r></div><div style=3D"color: rgb(0, 0, 0);">And the BackupInfoParameters.java = is:</div><div style=3D"color: rgb(0, 0, 0);">=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D</div><div style=3D"color: rgb(0, 0, 0);= ">package org.ovirt.engine.core.common.action;</div><div style=3D"color: rgb(0= , 0, 0);"><br></div><div style=3D"color: rgb(0, 0, 0);">/**</div><div style=3D"c= olor: rgb(0, 0, 0);"> * Created by leaboy on 8/7/14.</div><div style=3D"c= olor: rgb(0, 0, 0);"> */</div><div style=3D"color: rgb(0, 0, 0);">public = class BackupInfoParameters extends VdcActionParametersBase implements java.i= o.Serializable{</div><div style=3D"color: rgb(0, 0, 0);"> private= static final long serialVersionUID =3D -1363077467684414051L;</div><div style= =3D"color: rgb(0, 0, 0);"> private VdcActionType _actionType;</di= v><div style=3D"color: rgb(0, 0, 0);"><br></div><div style=3D"color: rgb(0, 0, 0= );"> //public BackupInfoParameters(){}</div><div style=3D"color: = rgb(0, 0, 0);"><br></div><div style=3D"color: rgb(0, 0, 0);"> pub= lic BackupInfoParameters(){_actionType =3D VdcActionType.Unknown;}</div><div s= tyle=3D"color: rgb(0, 0, 0);"><br></div><div style=3D"color: rgb(0, 0, 0);">&nbs= p; public VdcActionType getActionType() {</div><div style=3D"color: rgb= (0, 0, 0);"> return _actionType;</div><div style=3D= "color: rgb(0, 0, 0);"> }</div><div style=3D"color: rgb(0, 0, 0);= ">}</div><div style=3D"color: rgb(0, 0, 0);">=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D</div><div style=3D"color: rgb(0, 0, 0);= "><br></div><div style=3D"color: rgb(0, 0, 0);">Built the code success, but wh= en I clicked the button, got a dialog with the error info:</div><div style=3D"= color: rgb(0, 0, 0);"><br></div><div><b><font color=3D"#ff2600">Error while ex= ecuting action: A Request to the Server failed with the following Status Cod= e: 500</font></b></div><div style=3D"color: rgb(0, 0, 0);"><br></div><div styl= e=3D"color: rgb(0, 0, 0);">I debug it , find the error is raised at :</div><di= v style=3D"color: rgb(0, 0, 0);"><br></div><div><div style=3D"color: rgb(0, 0, 0= );">protected VdcReturnValueBase evaluateCorrelationId(CommandBase<?> = commandBase) {</div><div style=3D"color: rgb(0, 0, 0);"> &= nbsp; VdcReturnValueBase returnValue =3D null;</div><div style=3D"color: rgb(0, = 0, 0);"><br></div><div style=3D"color: rgb(0, 0, 0);"> &nb= sp; // Evaluate and set the correlationId on the parameters, fails on invali= d correlation id</div><div> <b> <font color=3D"#ff26= 00">returnValue =3D ExecutionHandler.evaluateCorrelationId(commandBase.getPara= meters());</font></b></div><div style=3D"color: rgb(0, 0, 0);"> &= nbsp; if (returnValue !=3D null) {</div><div style=3D"color: rgb(0, 0, 0)= ;"> log.warnFormat("CanDoAction of = action {0} failed. Reasons: {1}", commandBase.getActionType(),</div><div sty= le=3D"color: rgb(0, 0, 0);"> &= nbsp; StringUtils.join(returnValue.getCanDoActionMessages(), '= ,'));</div><div style=3D"color: rgb(0, 0, 0);"><br></div><div style=3D"color: rg= b(0, 0, 0);"> }</div><div style=3D"color: rgb(0, 0,= 0);"> // Set the correlation-id on the command</= div><div style=3D"color: rgb(0, 0, 0);"> commandBas= e.setCorrelationId(commandBase.getParameters().getCorrelationId());</div><di= v style=3D"color: rgb(0, 0, 0);"> return returnValu= e;</div><div style=3D"color: rgb(0, 0, 0);"> }</div></div></div><= /div> _______________________________________________ Devel mailing list <a href=3D"mailto:Devel@ovirt.org">Devel@ovirt.org</a> <a href=3D"http://lists.ovirt.org/mailman/listinfo/devel">http://lists.ovirt.= org/mailman/listinfo/devel</a></span></body></html> --B_3490359440_1259218-- --B_3490359440_1280947 Content-type: image/png; name="871E2E8A-B375-456F-B2CF-9E25AB718A23.png" Content-ID: <871E2E8A-B375-456F-B2CF-9E25AB718A23> Content-disposition: inline; filename="871E2E8A-B375-456F-B2CF-9E25AB718A23.png" Content-transfer-encoding: base64 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 FksWd0bJR8VF1UdNRXtFl0VLl1gsWbPkRoxajCCmPRYfGxV7JHZyqffS3UuH4+ziCuPuLjNc lrPs2nK15anLz66QX8FZcSoeGx8d3xD/iRPCqeVMrvRfuXflBNeTu4f7kufGK+eN8V34ZfyR BJeEsoTRRJfEXYljSa5JFUnjAk9BteB1sl/ygeSplJCUoykzqdGpzWmEtPi000IlYYqwK10z PSe9L8M0ozBDuspp1e5VE6JA0ZFMKHNZZruYjv5M9UiMJJslg1kLs2qy3mdHZZ/KUcwR5vTk muRuyx3J88n7fjVmNXd1Z752/ob8wTXuaw6thdauXNu5Tnddwbrh9b7rj20gbUjZ8MtGy41l G99uit7UUaBRsL5gaLPv5sZCuUJR4b0tzlsObMVsFWzt3WazrWrblyJe0fViy+KK4k8l3JLr 31l9V/ndzPaE7b2l9qX7d+B2CHfc3em681iZYlle2dCu4F2t5czyovK3u1fsvlZhW3FgD2mP ZI+0MqiyvUqvakfVp+qk6oEaj5rmvep7t+2d2sfb17/fbX/TAY0DxQc+HhQcvH/I91BrrUFt xWHc4azDz+ui6rq/Z39ff0TtSPGRz0eFR6XHwo911TvU1zeoN5Q2wo2SxrHjccdv/eD1Q3sT q+lQM6O5+AQ4ITnx4sf4H++eDDzZeYp9qukn/Z/2ttBailqh1tzWibakNml7THvf6YDTnR3O HS0/m/989Iz2mZqzymdLz5HOFZybOZ93fvJCxoXxi4kXhzpXdD66tOTSna6wrt7LgZevXvG5 cqnbvfv8VZerZ645XTt9nX297Yb9jdYeu56WX+x+aem172296XCz/ZbjrY6+BX3n+l37L972 un3ljv+dGwOLBvruLr57/17cPel93v3RB6kPXj/Mejj9aP1j7OOiJwpPKp6qP6391fjXZqm9 9Oyg12DPs4hnj4a4Qy//lfmvT8MFz6nPK0a0RupHrUfPjPmM3Xqx9MXwy4yX0+OFvyn+tveV 0auffnf7vWdiycTwa9HrmT9K3qi+OfrW9m3nZOjk03dp76anit6rvj/2gf2h+2P0x5Hp7E/4 T5WfjT93fAn88ngmbWbm3/eE8/syOll+AAAqqElEQVR4Ae2dB9xUxfX3D0qvIiJNlGIEaQqo qBAb2LBiL1hfg4lKyD8xiW9MLB+NbzRIokYTjRV7B/OqCIgVsYAo2AAVEQRBEJAOiv/9zpOz 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 PYC9OnUB1oMPPuhOoPsgtGvXbrPb+vhu7o477ui+mfvRRx8JF3d8+umnsuuuu/pRs7Jr/o0b N07H40AwV463bds27VaOFi0bn171KQxb3z9fe751smTJEjnyyCPT+PMZUurjsssuc4e1s+Hv 7bffloceekj+/ve/ZxOtYGGDZeHQMt+IHjZsmOy///455cPtl9yCaWQIGAKGgCFgCBgChkA5 IlBQZQIA+DzoaaedlhgLvp3LjxuUp02blpcyofmfeuqp6fwXL14szz77rAwePNh9vjTtUYaW bLHNp4gIytw9UIg6QQF68sknHTtckHb66afLlClTZO+9986HxS0S1y8LDHzyySdy0UUXyQsv vJD1N6DXrl0rDzzwQGJlgjqxr2RtkWq3TA0BQ8AQMAQMAUMgAoGCKxMR+bjv2E+YMEG4Fpxb khFUoa+++kqmT5/u7idYvny5vPTSS+7ijqh0snXn2nEEsDVr1rh8EWLJE8GMFYwDDjhAFi5c KFOnTnXP8IDAiN+3334rPDNzzIVsb731lixYsMDNqBOGuM8884yblW7RooVjDcWlR48ebiY+ LK+quH8BgX/ZsmWOHy44GTt2rJxwwgnpcsGr3nLMVe3cBRFWFnB47733XF117NhRvv76a1f+ QtYJfEDgRRu4+uqrXX2gTO62227yhz/8wdXXLbfcIqxE4D5o0CA55ZRTXDz941bI6667Tv7x j3+4S15QVm688Ubnfc0110jv3r1l++23l7vvvltat24tK1askFWrVslf//rXzVbONM1czM6d OzsllVWLli1byh133OH4pn1xg+Uf//hHhyEmdzmsX79ejj32WDnxxBMd/19++aVceeWVDoeb b75Z3n33XamZuk2cuJdffrlT5u677z53sdzhhx/usAjLA0XTyBAwBAwBQ8AQMAQMgWIjULQz E3PmzHGC1PHHHy9cwoHw6xMXdSDAcwNgIYl82YrCZSAoEaxUIMwdd9xxTmhj ZpmtUPDDVpWj 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 TkSuQmCC --B_3490359440_1280947--

Hi, Would you mind posting the code as a draft patch to gerrit.ovirt.org ? It will allow full transparency of the the code, will allow a better feedback and also will allow developers to apply the patch locally and even upload a fixed version of it. Thanks, Moti ----- Original Message -----
From: "力波 王" <wlbleaboy@126.com> To: Devel@ovirt.org Sent: Friday, August 8, 2014 11:17:15 AM Subject: [ovirt-devel] FW: add a ***Command for a button
发件人: 力波 王 < wlbleaboy@126.com > 日期: Fri, 08 Aug 2014 16:10:48 +0800 至: < devel@ovirt.org > 主题: [ovirt-devel] add a ***Command for a button
Hi, everyone: I added a button on the Template Tab, in the client side, It’s OK,
Added the button’s callback like this: ======================================================================= private void backup() { BackupInfoParameters param = new BackupInfoParameters(); Frontend.RunAction(VdcActionType.Unknown, param, new IFrontendActionAsyncCallback() { @Override public void executed(FrontendActionAsyncResult result) {
} }); } =======================================================================
The BackupInfoCommand.java is : ======================================================================= package org.ovirt.engine.core.bll;
import org.ovirt.engine.core.bll.utils.PermissionSubject; import org.ovirt.engine.core.common.action.BackupInfoParameters;
import java.io.IOException; import java.util.Collections; import java.util.List;
/** * Created by leaboy on 8/7/14. */ public class BackupInfoCommand <T extends BackupInfoParameters> extends CommandBase<T>{ public BackupInfoCommand(T parameters){ super(parameters); }
@Override public List<PermissionSubject> getPermissionCheckSubjects() { return Collections.emptyList(); }
@Override protected boolean canDoAction() { return true; }
@Override protected void executeCommand() { int a; a = 1; try{ Runtime.getRuntime().exec("touch /tmp/tmp.txt"); }catch (IOException e){ e.printStackTrace(); }
} } =======================================================================
And the BackupInfoParameters.java is: ======================================================================= package org.ovirt.engine.core.common.action;
/** * Created by leaboy on 8/7/14. */ public class BackupInfoParameters extends VdcActionParametersBase implements java.io.Serializable{ private static final long serialVersionUID = -1363077467684414051L; private VdcActionType _actionType;
//public BackupInfoParameters(){}
public BackupInfoParameters(){_actionType = VdcActionType.Unknown;}
public VdcActionType getActionType() { return _actionType; } } =======================================================================
Built the code success, but when I clicked the button, got a dialog with the error info:
Error while executing action: A Request to the Server failed with the following Status Code: 500
I debug it , find the error is raised at :
protected VdcReturnValueBase evaluateCorrelationId(CommandBase<?> commandBase) { VdcReturnValueBase returnValue = null;
// Evaluate and set the correlationId on the parameters, fails on invalid correlation id returnValue = ExecutionHandler.evaluateCorrelationId(commandBase.getParameters()); if (returnValue != null) { log.warnFormat("CanDoAction of action {0} failed. Reasons: {1}", commandBase.getActionType(), StringUtils.join(returnValue.getCanDoActionMessages(), ','));
} // Set the correlation-id on the command commandBase.setCorrelationId(commandBase.getParameters().getCorrelationId()); return returnValue; } _______________________________________________ Devel mailing list Devel@ovirt.org http://lists.ovirt.org/mailman/listinfo/devel
_______________________________________________ Devel mailing list Devel@ovirt.org http://lists.ovirt.org/mailman/listinfo/devel

<div style=3D"color: rgb(0, 0, 0);"> &nb= sp; public void executed(FrontendActionAsyncResult result) {</div><div styl= e=3D"color: rgb(0, 0, 0);"><br></div><div style=3D"color: rgb(0, 0, 0);">&n= bsp; }</div><div style=3D"color: rgb(0, = 0, 0);"> });</div><div style=3D"color: rgb(0, 0,= 0);"> }</div><div style=3D"color: rgb(0, 0, 0);">=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D</div><div style=3D"colo= r: rgb(0, 0, 0);"><br></div><div style=3D"color: rgb(0, 0, 0);">The BackupI= nfoCommand.java is :</div><div style=3D"color: rgb(0, 0, 0);">=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D</div><div style=3D"colo= r: rgb(0, 0, 0);">package org.ovirt.engine.core.bll;</div><div style=3D"col= or: rgb(0, 0, 0);"><br></div><div style=3D"color: rgb(0, 0, 0);">import org= .ovirt.engine.core.bll.utils.PermissionSubject;</div><div style=3D"color: r= gb(0, 0, 0);">import org.ovirt.engine.core.common.action.BackupInfoParamete= rs;</div><div style=3D"color: rgb(0, 0, 0);"><br></div><div style=3D"color:= rgb(0, 0, 0);"><br></div><div style=3D"color: rgb(0, 0, 0);">import java.i= o.IOException;</div><div style=3D"color: rgb(0, 0, 0);">import java.util.Co= llections;</div><div style=3D"color: rgb(0, 0, 0);">import java.util.List;<= /div><div style=3D"color: rgb(0, 0, 0);"><br></div><div style=3D"color: rgb= (0, 0, 0);">/**</div><div style=3D"color: rgb(0, 0, 0);"> * Created by= leaboy on 8/7/14.</div><div style=3D"color: rgb(0, 0, 0);"> */</div><=
}</div><div style=3D"color: rgb(0, 0, 0);"><br></div><div st= yle=3D"color: rgb(0, 0, 0);"> @Override</div><div style=3D"col= or: rgb(0, 0, 0);"> protected boolean canDoAction() {</div><di= v style=3D"color: rgb(0, 0, 0);"> return true;</=
}</div><div style=3D"color: rgb(0, 0, 0);"><br= </div><div style=3D"color: rgb(0, 0, 0);"> }</div><div style= =3D"color: rgb(0, 0, 0);">}</div><div style=3D"color: rgb(0, 0, 0);">=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D</div><div style= =3D"color: rgb(0, 0, 0);"><br></div><div style=3D"color: rgb(0, 0, 0);">And=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D</div><di= v style=3D"color: rgb(0, 0, 0);">package org.ovirt.engine.core.common.actio= n;</div><div style=3D"color: rgb(0, 0, 0);"><br></div><div style=3D"color: = rgb(0, 0, 0);">/**</div><div style=3D"color: rgb(0, 0, 0);"> * Created= by leaboy on 8/7/14.</div><div style=3D"color: rgb(0, 0, 0);"> */</di= v><div style=3D"color: rgb(0, 0, 0);">public class BackupInfoParameters ext= ends VdcActionParametersBase implements java.io.Serializable{</div><div sty= le=3D"color: rgb(0, 0, 0);"> private static final long serialV= ersionUID =3D -1363077467684414051L;</div><div style=3D"color: rgb(0, 0, 0)= ;"> private VdcActionType _actionType;</div><div style=3D"colo= r: rgb(0, 0, 0);"><br></div><div style=3D"color: rgb(0, 0, 0);"> &nbs=
------=_Part_3646799_2033535669.1407486058409 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Hi Didn't do a too deep code review, but from a first glance=20 You need to add a new VdcActionType that is called BackupInfo, and use tha= t when you call RunAction. Hope it helps,=20 Oved On Aug 8, 2014 11:11 AM, =3D?UTF-8?B?5Yqb5rOiIOeOiw=3D=3D?=3D <wlblea= boy@126.com> wrote: Hi, everyone: I added a button on the Template Tab, in the client side, It=E2=80=99s OK, Added the button=E2=80=99s callback like this: =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D private void backup() { BackupInfoParameters param =3D new BackupInfoParameters(); Frontend.RunAction(VdcActionType.Unknown, param, new IFrontendActionAsyncCallback() { @Override public void executed(FrontendActionAsyncResult result) { } }); } =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D The BackupInfoCommand.java is : =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D package org.ovirt.engine.core.bll; import org.ovirt.engine.core.bll.utils.PermissionSubject; import org.ovirt.engine.core.common.action.BackupInfoParameters; import java.io.IOException; import java.util.Collections; import java.util.List; /** * Created by leaboy on 8/7/14. */ public class BackupInfoCommand <T extends BackupInfoParameters> extends CommandBase<T>{ public BackupInfoCommand(T parameters){ super(parameters); } @Override public List<PermissionSubject> getPermissionCheckSubjects() { return Collections.emptyList(); } @Override protected boolean canDoAction() { return true; } @Override protected void executeCommand() { int a; a =3D 1; try{ Runtime.getRuntime().exec("touch /tmp/tmp.txt"); }catch (IOException e){ e.printStackTrace(); } } } =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D And the BackupInfoParameters.java is: =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D package org.ovirt.engine.core.common.action; /** * Created by leaboy on 8/7/14. */ public class BackupInfoParameters extends VdcActionParametersBase implement= s java.io.Serializable{ private static final long serialVersionUID =3D -1363077467684414051L; private VdcActionType _actionType; //public BackupInfoParameters(){} public BackupInfoParameters(){_actionType =3D VdcActionType.Unknown;} public VdcActionType getActionType() { return _actionType; } } =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D Built the code success, but when I clicked the button, got a dialog with th= e error info: Error while executing action: A Request to the Server failed with the following Status Code: 500 I debug it , find the error is raised at : protected VdcReturnValueBase evaluateCorrelationId(CommandBase<?> commandBase) { VdcReturnValueBase returnValue =3D null; // Evaluate and set the correlationId on the parameters, fails on invalid correlation id returnValue =3D ExecutionHandler.evaluateCorrelationId(commandBase.getParameters()); if (returnValue !=3D null) { log.warnFormat("CanDoAction of action {0} failed. Reasons: {1}"= , commandBase.getActionType(), StringUtils.join(returnValue.getCanDoActionMessages(), ',')); } // Set the correlation-id on the command =20 commandBase.setCorrelationId(commandBase.getParameters().getCorrelationId()= ) ; return returnValue; } ------=_Part_3646799_2033535669.1407486058409 Content-Type: multipart/related; boundary="----=_Part_3646800_431746878.1407486058409" ------=_Part_3646800_431746878.1407486058409 Content-Type: text/html; charset="utf-8" Content-Transfer-Encoding: quoted-printable <html><body><div><p dir=3D"ltr">Hi</p> <p dir=3D"ltr">Didn't do a too deep code review, but from a first glance <b= r> You need to add a new VdcActionType that is called BackupInfo, and use that= when you call RunAction. </p> <p dir=3D"ltr">Hope it helps, <br> Oved</p> <div class=3D"quote">On Aug 8, 2014 11:11 AM, =3D?UTF-8?B?5Yqb5rOiIOeOiw=3D= =3D?=3D <wlbleaboy@126.com> wrote:<br type=3D'attribution'></div><br>= <div><head></head><body style=3D"word-wrap: break-word; -webkit-nbsp-mode: = space; -webkit-line-break: after-white-space; font-size: 14px; font-family:= =E5=AE=8B=E4=BD=93, sans-serif;"><div style=3D"color: rgb(0, 0, 0);">Hi, e= veryone:</div><div style=3D"color: rgb(0, 0, 0);"><span class=3D"Apple-tab-= span" style=3D"white-space:pre">=09</span>I added a button on the Template = Tab, in the client side, It’s OK,</div><div style=3D"color: rgb(0, 0,= 0);"><img src=3D"cid:871E2E8A-B375-456F-B2CF-9E25AB718A23" type=3D"image/p= ng"></div><div style=3D"color: rgb(0, 0, 0);"><br></div><div style=3D"color= : rgb(0, 0, 0);">Added the button’s callback like this:</div><div sty= le=3D"color: rgb(0, 0, 0);">=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D</div><div style=3D"color: rgb(0, 0, 0);"> private v= oid backup()</div><div style=3D"color: rgb(0, 0, 0);"> {</div>= <div style=3D"color: rgb(0, 0, 0);"> BackupInfoP= arameters param =3D new BackupInfoParameters();</div><div style=3D"color: r= gb(0, 0, 0);"> Frontend.RunAction(VdcActionType.= Unknown, param, new IFrontendActionAsyncCallback() {</div><div style=3D"col= or: rgb(0, 0, 0);"> @Override</div= div style=3D"color: rgb(0, 0, 0);">public class BackupInfoCommand <T ext= ends BackupInfoParameters> extends CommandBase<T>{</div><div style= =3D"color: rgb(0, 0, 0);"> public BackupInfoCommand(T paramete= rs){</div><div style=3D"color: rgb(0, 0, 0);"> s= uper(parameters);</div><div style=3D"color: rgb(0, 0, 0);"> }<= /div><div style=3D"color: rgb(0, 0, 0);"><br></div><div style=3D"color: rgb= (0, 0, 0);"> @Override</div><div style=3D"color: rgb(0, 0, 0);= "> public List<PermissionSubject> getPermissionCheckSubj= ects() {</div><div style=3D"color: rgb(0, 0, 0);"> &nbs= p; return Collections.emptyList();</div><div style=3D"color: rgb(0, 0, 0);"= div><div style=3D"color: rgb(0, 0, 0);"> }</div><div style=3D"= color: rgb(0, 0, 0);"><br></div><div style=3D"color: rgb(0, 0, 0);"><br></d= iv><div style=3D"color: rgb(0, 0, 0);"> @Override</div><div st= yle=3D"color: rgb(0, 0, 0);"> protected void executeCommand() = {</div><div style=3D"color: rgb(0, 0, 0);"> int = a;</div><div style=3D"color: rgb(0, 0, 0);"> a = =3D 1;</div><div style=3D"color: rgb(0, 0, 0);"> = try{</div><div style=3D"color: rgb(0, 0, 0);"> = Runtime.getRuntime().exec("touch /tmp/tmp.txt");</div><div st= yle=3D"color: rgb(0, 0, 0);"> }catch (IOExceptio= n e){</div><div style=3D"color: rgb(0, 0, 0);"> = e.printStackTrace();</div><div style=3D"color: rgb(0, 0, 0);"= the BackupInfoParameters.java is:</div><div style=3D"color: rgb(0, 0, 0);"= p; //public BackupInfoParameters(){}</div><div style=3D"color: rgb(0, 0, 0)= ;"><br></div><div style=3D"color: rgb(0, 0, 0);"> public Backu= pInfoParameters(){_actionType =3D VdcActionType.Unknown;}</div><div style= =3D"color: rgb(0, 0, 0);"><br></div><div style=3D"color: rgb(0, 0, 0);">&nb= sp; public VdcActionType getActionType() {</div><div style=3D"color:= rgb(0, 0, 0);"> return _actionType;</div><div s= tyle=3D"color: rgb(0, 0, 0);"> }</div><div style=3D"color: rgb= (0, 0, 0);">}</div><div style=3D"color: rgb(0, 0, 0);">=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D</div><div style=3D"color: rgb= (0, 0, 0);"><br></div><div style=3D"color: rgb(0, 0, 0);">Built the code su= ccess, but when I clicked the button, got a dialog with the error info:</di= v><div style=3D"color: rgb(0, 0, 0);"><br></div><div><b><font color=3D"#ff2= 600">Error while executing action: A Request to the Server failed with the = following Status Code: 500</font></b></div><div style=3D"color: rgb(0, 0, 0= );"><br></div><div style=3D"color: rgb(0, 0, 0);">I debug it , find the err= or is raised at :</div><div style=3D"color: rgb(0, 0, 0);"><br></div><div><= div style=3D"color: rgb(0, 0, 0);">protected VdcReturnValueBase evaluateCor= relationId(CommandBase<?> commandBase) {</div><div style=3D"color: rg= b(0, 0, 0);"> VdcReturnValueBase returnValue =3D= null;</div><div style=3D"color: rgb(0, 0, 0);"><br></div><div style=3D"col= or: rgb(0, 0, 0);"> // Evaluate and set the corr= elationId on the parameters, fails on invalid correlation id</div><div>&nbs= p; <b> <font color=3D"#ff2600">returnValue =3D Executio= nHandler.evaluateCorrelationId(commandBase.getParameters());</font></b></di= v><div style=3D"color: rgb(0, 0, 0);"> if (retur= nValue !=3D null) {</div><div style=3D"color: rgb(0, 0, 0);"> = log.warnFormat("CanDoAction of action {0} faile= d. Reasons: {1}", commandBase.getActionType(),</div><div style=3D"color: rg= b(0, 0, 0);"> = StringUtils.join(returnValue.getCanDoActionMessages(), ','));</div>= <div style=3D"color: rgb(0, 0, 0);"><br></div><div style=3D"color: rgb(0, 0= , 0);"> }</div><div style=3D"color: rgb(0, 0, 0)= ;"> // Set the correlation-id on the command</di= v><div style=3D"color: rgb(0, 0, 0);"> commandBa= se.setCorrelationId(commandBase.getParameters().getCorrelationId());</div><= div style=3D"color: rgb(0, 0, 0);"> return retur= nValue;</div><div style=3D"color: rgb(0, 0, 0);"> }</div></div=
</div></body></html> ------=_Part_3646800_431746878.1407486058409 Content-type: image/png; name="871E2E8A-B375-456F-B2CF-9E25AB718A23.png" Content-ID: <871E2E8A-B375-456F-B2CF-9E25AB718A23> Content-disposition: inline; filename="871E2E8A-B375-456F-B2CF-9E25AB718A23.png" Content-transfer-encoding: base64
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 FksWd0bJR8VF1UdNRXtFl0VLl1gsWbPkRoxajCCmPRYfGxV7JHZyqffS3UuH4+ziCuPuLjNc lrPs2nK15anLz66QX8FZcSoeGx8d3xD/iRPCqeVMrvRfuXflBNeTu4f7kufGK+eN8V34ZfyR BJeEsoTRRJfEXYljSa5JFUnjAk9BteB1sl/ygeSplJCUoykzqdGpzWmEtPi000IlYYqwK10z PSe9L8M0ozBDuspp1e5VE6JA0ZFMKHNZZruYjv5M9UiMJJslg1kLs2qy3mdHZZ/KUcwR5vTk muRuyx3J88n7fjVmNXd1Z752/ob8wTXuaw6thdauXNu5Tnddwbrh9b7rj20gbUjZ8MtGy41l G99uit7UUaBRsL5gaLPv5sZCuUJR4b0tzlsObMVsFWzt3WazrWrblyJe0fViy+KK4k8l3JLr 31l9V/ndzPaE7b2l9qX7d+B2CHfc3em681iZYlle2dCu4F2t5czyovK3u1fsvlZhW3FgD2mP ZI+0MqiyvUqvakfVp+qk6oEaj5rmvep7t+2d2sfb17/fbX/TAY0DxQc+HhQcvH/I91BrrUFt xWHc4azDz+ui6rq/Z39ff0TtSPGRz0eFR6XHwo911TvU1zeoN5Q2wo2SxrHjccdv/eD1Q3sT q+lQM6O5+AQ4ITnx4sf4H++eDDzZeYp9qukn/Z/2ttBailqh1tzWibakNml7THvf6YDTnR3O HS0/m/989Iz2mZqzymdLz5HOFZybOZ93fvJCxoXxi4kXhzpXdD66tOTSna6wrt7LgZevXvG5 cqnbvfv8VZerZ645XTt9nX297Yb9jdYeu56WX+x+aem172296XCz/ZbjrY6+BX3n+l37L972 un3ljv+dGwOLBvruLr57/17cPel93v3RB6kPXj/Mejj9aP1j7OOiJwpPKp6qP6391fjXZqm9 9Oyg12DPs4hnj4a4Qy//lfmvT8MFz6nPK0a0RupHrUfPjPmM3Xqx9MXwy4yX0+OFvyn+tveV 0auffnf7vWdiycTwa9HrmT9K3qi+OfrW9m3nZOjk03dp76anit6rvj/2gf2h+2P0x5Hp7E/4 T5WfjT93fAn88ngmbWbm3/eE8/syOll+AAAqqElEQVR4Ae2dB9xUxfX3D0qvIiJNlGIEaQqo qBAb2LBiL1hfg4lKyD8xiW9MLB+NbzRIokYTjRV7B/OqCIgVsYAo2AAVEQRBEJAOiv/9zpOz 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 PYC9OnUB1oMPPuhOoPsgtGvXbrPb+vhu7o477ui+mfvRRx8JF3d8+umnsuuuu/pRs7Jr/o0b N07H40AwV463bds27VaOFi0bn171KQxb3z9fe751smTJEjnyyCPT+PMZUurjsssuc4e1s+Hv 7bffloceekj+/ve/ZxOtYGGDZeHQMt+IHjZsmOy///455cPtl9yCaWQIGAKGgCFgCBgChkA5 IlBQZQIA+DzoaaedlhgLvp3LjxuUp02blpcyofmfeuqp6fwXL14szz77rAwePNh9vjTtUYaW bLHNp4gIytw9UIg6QQF68sknHTtckHb66afLlClTZO+9986HxS0S1y8LDHzyySdy0UUXyQsv vJD1N6DXrl0rDzzwQGJlgjqxr2RtkWq3TA0BQ8AQMAQMAUMgAoGCKxMR+bjv2E+YMEG4Fpxb khFUoa+++kqmT5/u7idYvny5vPTSS+7ijqh0snXn2nEEsDVr1rh8EWLJE8GMFYwDDjhAFi5c KFOnTnXP8IDAiN+3334rPDNzzIVsb731lixYsMDNqBOGuM8884yblW7RooVjDcWlR48ebiY+ LK+quH8BgX/ZsmWOHy44GTt2rJxwwgnpcsGr3nLMVe3cBRFWFnB47733XF117NhRvv76a1f+ QtYJfEDgRRu4+uqrXX2gTO62227yhz/8wdXXLbfcIqxE4D5o0CA55ZRTXDz941bI6667Tv7x j3+4S15QVm688Ubnfc0110jv3r1l++23l7vvvltat24tK1askFWrVslf//rXzVbONM1czM6d OzsllVWLli1byh133OH4pn1xg+Uf//hHhyEmdzmsX79ejj32WDnxxBMd/19++aVceeWVDoeb b75Z3n33XamZuk2cuJdffrlT5u677z53sdzhhx/usAjLA0XTyBAwBAwBQ8AQMAQMgWIjULQz E3PmzHGC1PHHHy9cwoHw6xMXdSDAcwNgIYl82YrCZSAoEaxUIMwdd9xxTmhj ZpmtUPDDVpWj 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 TkSuQmCC ------=_Part_3646800_431746878.1407486058409 Content-Type: text/plain; charset="us-ascii" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit Content-Disposition: inline _______________________________________________ Devel mailing list Devel@ovirt.org http://lists.ovirt.org/mailman/listinfo/devel ------=_Part_3646800_431746878.1407486058409-- ------=_Part_3646799_2033535669.1407486058409--

ŽËÓÊŒþʹÓà MIME žñÊœ¡£ÓÉÓÚÓÊŒþÔĶÁ³ÌÐò²»ÄÜʶ±ð ŽËžñÊœ£¬ÒòŽË£¬¿ÉÄÜÎÞ·šÊ¶±ðžÃÓÊŒþµÄ·Ö²¿»ò²¿·ÖÄÚÈÝ¡£
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D</di= v><div style=3D"color: rgb(0, 0, 0);"> private void backup()</div><div st= yle=3D"color: rgb(0, 0, 0);"> {</div><div style=3D"color: rgb(0, 0,= 0);"> BackupInfoParameters param =3D new BackupInf= oParameters();</div><div style=3D"color: rgb(0, 0, 0);"> &= nbsp; Frontend.RunAction(VdcActionType.Unknown, param, new IFrontendActionAs= yncCallback() {</div><div style=3D"color: rgb(0, 0, 0);"> = @Override</div><div style=3D"color: rgb(0, 0, 0);"> = public void executed(FrontendActionAsync= Result result) {</div><div style=3D"color: rgb(0, 0, 0);"><br></div><div style= =3D"color: rgb(0, 0, 0);"> }</div><di= v style=3D"color: rgb(0, 0, 0);"> });</div><div sty= le=3D"color: rgb(0, 0, 0);"> }</div><div style=3D"color: rgb(0, 0, = 0);">=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= </div><div style=3D"color: rgb(0, 0, 0);"><br></div><div style=3D"color: rgb(0, = 0, 0);">The BackupInfoCommand.java is :</div><div style=3D"color: rgb(0, 0, 0)= ;">=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D</=
--B_3490360482_1321406 Content-type: multipart/alternative; boundary="B_3490360482_1326353" --B_3490360482_1326353 Content-type: text/plain; charset="GB2312" Content-transfer-encoding: quoted-printable hi=A3=AC Oved: I don=A1=AFt know how to add a VdcAction, Is this could work: public enum VdcActionType { Unknown(0, QuotaDependency.NONE), Backup(9000, QuotaDependency.NONE), I don=A1=AFt know whether is it need a ActionGroup. =B7=A2=BC=FE=C8=CB: Oved Ourfali <oourfali@redhat.com> =C8=D5=C6=DA: Fri, 8 Aug 2014 04:20:58 -0400 (EDT) =D6=C1: =C1=A6=B2=A8 =CD=F5 <wlbleaboy@126.com> =B3=AD=CB=CD: <devel@ovirt.org> =D6=F7=CC=E2: Re: [ovirt-devel] add a ***Command for a button Hi Didn't do a too deep code review, but from a first glance You need to add a new VdcActionType that is called BackupInfo, and use that when you call RunAction. Hope it helps,=20 Oved On Aug 8, 2014 11:11 AM, =3D?UTF-8?B?5Yqb5rOiIOeOiw=3D=3D?=3D <wlbleaboy@126.com> wrote: Hi, everyone: I added a button on the Template Tab, in the client side, It=A1=AFs OK, Added the button=A1=AFs callback like this: =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D private void backup() { BackupInfoParameters param =3D new BackupInfoParameters(); Frontend.RunAction(VdcActionType.Unknown, param, new IFrontendActionAsyncCallback() { @Override public void executed(FrontendActionAsyncResult result) { } }); } =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D The BackupInfoCommand.java is : =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D package org.ovirt.engine.core.bll; import org.ovirt.engine.core.bll.utils.PermissionSubject; import org.ovirt.engine.core.common.action.BackupInfoParameters; import java.io.IOException; import java.util.Collections; import java.util.List; /** * Created by leaboy on 8/7/14. */ public class BackupInfoCommand <T extends BackupInfoParameters> extends CommandBase<T>{ public BackupInfoCommand(T parameters){ super(parameters); } @Override public List<PermissionSubject> getPermissionCheckSubjects() { return Collections.emptyList(); } @Override protected boolean canDoAction() { return true; } @Override protected void executeCommand() { int a; a =3D 1; try{ Runtime.getRuntime().exec("touch /tmp/tmp.txt"); }catch (IOException e){ e.printStackTrace(); } } } =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D And the BackupInfoParameters.java is: =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D package org.ovirt.engine.core.common.action; /** * Created by leaboy on 8/7/14. */ public class BackupInfoParameters extends VdcActionParametersBase implement= s java.io.Serializable{ private static final long serialVersionUID =3D -1363077467684414051L; private VdcActionType _actionType; //public BackupInfoParameters(){} public BackupInfoParameters(){_actionType =3D VdcActionType.Unknown;} public VdcActionType getActionType() { return _actionType; } } =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D Built the code success, but when I clicked the button, got a dialog with th= e error info: Error while executing action: A Request to the Server failed with the following Status Code: 500 I debug it , find the error is raised at : protected VdcReturnValueBase evaluateCorrelationId(CommandBase<?> commandBase) { VdcReturnValueBase returnValue =3D null; // Evaluate and set the correlationId on the parameters, fails on invalid correlation id returnValue =3D ExecutionHandler.evaluateCorrelationId(commandBase.getParameters()); if (returnValue !=3D null) { log.warnFormat("CanDoAction of action {0} failed. Reasons: {1}"= , commandBase.getActionType(), StringUtils.join(returnValue.getCanDoActionMessages(), ',')); } // Set the correlation-id on the command =20 commandBase.setCorrelationId(commandBase.getParameters().getCorrelationId()= ) ; return returnValue; } _______________________________________________ Devel mailing list Devel@ovirt.org http://lists.ovirt.org/mailman/listinfo/devel --B_3490360482_1326353 Content-type: text/html; charset="GB2312" Content-transfer-encoding: quoted-printable <html><head></head><body style=3D"word-wrap: break-word; -webkit-nbsp-mode: s= pace; -webkit-line-break: after-white-space;"><div style=3D"color: rgb(0, 0, 0= ); font-family: =CB=CE=CC=E5, sans-serif; font-size: 14px;">hi=A3=AC Oved:</div><div sty= le=3D"color: rgb(0, 0, 0); font-family: =CB=CE=CC=E5, sans-serif; font-size: 14px;">I = don’t know how to add a VdcAction, </div><div style=3D"color: rgb(0= , 0, 0); font-family: =CB=CE=CC=E5, sans-serif; font-size: 14px;"><br></div><div sty= le=3D"color: rgb(0, 0, 0); font-family: =CB=CE=CC=E5, sans-serif; font-size: 14px;">Is= this could work:</div><div style=3D"color: rgb(0, 0, 0); font-family: =CB=CE=CC=E5, s= ans-serif; font-size: 14px;"><div>public enum VdcActionType {</div><div>&nbs= p; Unknown(0, QuotaDependency.NONE),</div><div> <b> Backu= p(9000, QuotaDependency.NONE),</b></div></div><div style=3D"color: rgb(0, 0, 0= ); font-family: =CB=CE=CC=E5, sans-serif; font-size: 14px;"><b><br></b></div><div>I = don’t know whether is it need a ActionGroup.</div><div style=3D"color: r= gb(0, 0, 0); font-family: =CB=CE=CC=E5, sans-serif; font-size: 14px;"><br></div><div= style=3D"color: rgb(0, 0, 0); font-family: =CB=CE=CC=E5, sans-serif; font-size: 14px;= "><br></div><span id=3D"OLK_SRC_BODY_SECTION" style=3D"color: rgb(0, 0, 0); font= -family: =CB=CE=CC=E5, sans-serif; font-size: 14px;"><div style=3D"font-family:Calibri= ; font-size:11pt; text-align:left; color:black; BORDER-BOTTOM: medium none; = BORDER-LEFT: medium none; PADDING-BOTTOM: 0in; PADDING-LEFT: 0in; PADDING-RI= GHT: 0in; BORDER-TOP: #b5c4df 1pt solid; BORDER-RIGHT: medium none; PADDING-= TOP: 3pt"><span style=3D"font-weight:bold">=B7=A2=BC=FE=C8=CB: </span> Oved Ourfali <<a= href=3D"mailto:oourfali@redhat.com">oourfali@redhat.com</a>><br><span styl= e=3D"font-weight:bold">=C8=D5=C6=DA: </span> Fri, 8 Aug 2014 04:20:58 -0400 (EDT)<br><= span style=3D"font-weight:bold">=D6=C1: </span> =C1=A6=B2=A8 =CD=F5 <<a href=3D"mailto:wlblea= boy@126.com">wlbleaboy@126.com</a>><br><span style=3D"font-weight:bold">=B3=AD=CB= =CD: </span> <<a href=3D"mailto:devel@ovirt.org">devel@ovirt.org</a>><br><= span style=3D"font-weight:bold">=D6=F7=CC=E2: </span> Re: [ovirt-devel] add a ***Comma= nd for a button<br></div><div><br></div><div><div><div><p dir=3D"ltr">Hi</p><p= dir=3D"ltr">Didn't do a too deep code review, but from a first glance <br> You need to add a new VdcActionType that is called BackupInfo, and use that= when you call RunAction. </p><p dir=3D"ltr">Hope it helps, <br> Oved</p><div class=3D"quote">On Aug 8, 2014 11:11 AM, =3D?UTF-8?B?5Yqb5rOiIOeOi= w=3D=3D?=3D <<a href=3D"mailto:wlbleaboy@126.com">wlbleaboy@126.com</a>> wrote= :<br type=3D"attribution"></div><br><div><div style=3D"word-wrap: break-word; -w= ebkit-nbsp-mode: space; -webkit-line-break: after-white-space; font-size: 14= px; font-family: =CB=CE=CC=E5, sans-serif;"><div style=3D"color: rgb(0, 0, 0);">Hi, ev= eryone:</div><div style=3D"color: rgb(0, 0, 0);"><span class=3D"Apple-tab-span" = style=3D"white-space:pre"> </span>I added a button on the Template Tab, in the= client side, It’s OK,</div><div style=3D"color: rgb(0, 0, 0);"><img src= =3D"cid:871E2E8A-B375-456F-B2CF-9E25AB718A23" type=3D"image/png"></div><div styl= e=3D"color: rgb(0, 0, 0);"><br></div><div style=3D"color: rgb(0, 0, 0);">Added t= he button’s callback like this:</div><div style=3D"color: rgb(0, 0, 0);"= div><div style=3D"color: rgb(0, 0, 0);">package org.ovirt.engine.core.bll;</di= v><div style=3D"color: rgb(0, 0, 0);"><br></div><div style=3D"color: rgb(0, 0, 0= );">import org.ovirt.engine.core.bll.utils.PermissionSubject;</div><div styl= e=3D"color: rgb(0, 0, 0);">import org.ovirt.engine.core.common.action.BackupIn= foParameters;</div><div style=3D"color: rgb(0, 0, 0);"><br></div><div style=3D"c= olor: rgb(0, 0, 0);"><br></div><div style=3D"color: rgb(0, 0, 0);">import java= .io.IOException;</div><div style=3D"color: rgb(0, 0, 0);">import java.util.Col= lections;</div><div style=3D"color: rgb(0, 0, 0);">import java.util.List;</div=
<div style=3D"color: rgb(0, 0, 0);"><br></div><div style=3D"color: rgb(0, 0, 0)= ;">/**</div><div style=3D"color: rgb(0, 0, 0);"> * Created by leaboy on 8= /7/14.</div><div style=3D"color: rgb(0, 0, 0);"> */</div><div style=3D"colo= r: rgb(0, 0, 0);">public class BackupInfoCommand <T extends BackupInfoPar= ameters> extends CommandBase<T>{</div><div style=3D"color: rgb(0, 0, = 0);"> public BackupInfoCommand(T parameters){</div><div style=3D"=
color: rgb(0, 0, 0);"> super(parameters);</div><d= iv style=3D"color: rgb(0, 0, 0);"> }</div><div style=3D"color: rgb(= 0, 0, 0);"><br></div><div style=3D"color: rgb(0, 0, 0);"> @Overri= de</div><div style=3D"color: rgb(0, 0, 0);"> public List<Permi= ssionSubject> getPermissionCheckSubjects() {</div><div style=3D"color: rgb(= 0, 0, 0);"> return Collections.emptyList();</div>= <div style=3D"color: rgb(0, 0, 0);"> }</div><div style=3D"color: rg= b(0, 0, 0);"><br></div><div style=3D"color: rgb(0, 0, 0);"> @Over= ride</div><div style=3D"color: rgb(0, 0, 0);"> protected boolean = canDoAction() {</div><div style=3D"color: rgb(0, 0, 0);"> = return true;</div><div style=3D"color: rgb(0, 0, 0);"> }</= div><div style=3D"color: rgb(0, 0, 0);"><br></div><div style=3D"color: rgb(0, 0,= 0);"><br></div><div style=3D"color: rgb(0, 0, 0);"> @Override</d= iv><div style=3D"color: rgb(0, 0, 0);"> protected void executeCom= mand() {</div><div style=3D"color: rgb(0, 0, 0);"> = int a;</div><div style=3D"color: rgb(0, 0, 0);"> a = =3D 1;</div><div style=3D"color: rgb(0, 0, 0);"> try{= </div><div style=3D"color: rgb(0, 0, 0);"> &= nbsp; Runtime.getRuntime().exec("touch /tmp/tmp.txt");</div><div style=3D"colo= r: rgb(0, 0, 0);"> }catch (IOException e){</div><= div style=3D"color: rgb(0, 0, 0);"> e= .printStackTrace();</div><div style=3D"color: rgb(0, 0, 0);"> &nb= sp; }</div><div style=3D"color: rgb(0, 0, 0);"><br></div><div style=3D"co= lor: rgb(0, 0, 0);"> }</div><div style=3D"color: rgb(0, 0, 0);">}= </div><div style=3D"color: rgb(0, 0, 0);">=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D</div><div style=3D"color: rgb(0, 0, 0);"><= br></div><div style=3D"color: rgb(0, 0, 0);">And the BackupInfoParameters.java= is:</div><div style=3D"color: rgb(0, 0, 0);">=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D</div><div style=3D"color: rgb(0, 0, 0)= ;">package org.ovirt.engine.core.common.action;</div><div style=3D"color: rgb(= 0, 0, 0);"><br></div><div style=3D"color: rgb(0, 0, 0);">/**</div><div style=3D"= color: rgb(0, 0, 0);"> * Created by leaboy on 8/7/14.</div><div style=3D"= color: rgb(0, 0, 0);"> */</div><div style=3D"color: rgb(0, 0, 0);">public= class BackupInfoParameters extends VdcActionParametersBase implements java.= io.Serializable{</div><div style=3D"color: rgb(0, 0, 0);"> privat= e static final long serialVersionUID =3D -1363077467684414051L;</div><div styl= e=3D"color: rgb(0, 0, 0);"> private VdcActionType _actionType;</d= iv><div style=3D"color: rgb(0, 0, 0);"><br></div><div style=3D"color: rgb(0, 0, = 0);"> //public BackupInfoParameters(){}</div><div style=3D"color:= rgb(0, 0, 0);"><br></div><div style=3D"color: rgb(0, 0, 0);"> pu= blic BackupInfoParameters(){_actionType =3D VdcActionType.Unknown;}</div><div = style=3D"color: rgb(0, 0, 0);"><br></div><div style=3D"color: rgb(0, 0, 0);">&nb= sp; public VdcActionType getActionType() {</div><div style=3D"color: rg= b(0, 0, 0);"> return _actionType;</div><div style= =3D"color: rgb(0, 0, 0);"> }</div><div style=3D"color: rgb(0, 0, 0)= ;">}</div><div style=3D"color: rgb(0, 0, 0);">=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D</div><div style=3D"color: rgb(0, 0, 0)= ;"><br></div><div style=3D"color: rgb(0, 0, 0);">Built the code success, but w= hen I clicked the button, got a dialog with the error info:</div><div style=3D= "color: rgb(0, 0, 0);"><br></div><div><b><font color=3D"#ff2600">Error while e= xecuting action: A Request to the Server failed with the following Status Co= de: 500</font></b></div><div style=3D"color: rgb(0, 0, 0);"><br></div><div sty= le=3D"color: rgb(0, 0, 0);">I debug it , find the error is raised at :</div><d= iv style=3D"color: rgb(0, 0, 0);"><br></div><div><div style=3D"color: rgb(0, 0, = 0);">protected VdcReturnValueBase evaluateCorrelationId(CommandBase<?>= commandBase) {</div><div style=3D"color: rgb(0, 0, 0);"> = VdcReturnValueBase returnValue =3D null;</div><div style=3D"color: rgb(0,= 0, 0);"><br></div><div style=3D"color: rgb(0, 0, 0);"> &n= bsp; // Evaluate and set the correlationId on the parameters, fails on inval= id correlation id</div><div> <b> <font color=3D"#ff2= 600">returnValue =3D ExecutionHandler.evaluateCorrelationId(commandBase.getPar= ameters());</font></b></div><div style=3D"color: rgb(0, 0, 0);"> = if (returnValue !=3D null) {</div><div style=3D"color: rgb(0, 0, 0= );"> log.warnFormat("CanDoAction of= action {0} failed. Reasons: {1}", commandBase.getActionType(),</div><div st= yle=3D"color: rgb(0, 0, 0);"> = StringUtils.join(returnValue.getCanDoActionMessages(), = ','));</div><div style=3D"color: rgb(0, 0, 0);"><br></div><div style=3D"color: r= gb(0, 0, 0);"> }</div><div style=3D"color: rgb(0, 0= , 0);"> // Set the correlation-id on the command<= /div><div style=3D"color: rgb(0, 0, 0);"> commandBa= se.setCorrelationId(commandBase.getParameters().getCorrelationId());</div><d= iv style=3D"color: rgb(0, 0, 0);"> return returnVal= ue;</div><div style=3D"color: rgb(0, 0, 0);"> }</div></div></div>= </div></div>_______________________________________________ Devel mailing list <a href=3D"mailto:Devel@ovirt.org">Devel@ovirt.org</a> <a href=3D"http://lists.ovirt.org/mailman/listinfo/devel">http://lists.ovirt.= org/mailman/listinfo/devel</a></div></div></span></body></html>
--B_3490360482_1326353-- --B_3490360482_1321406 Content-type: image/png; name="871E2E8A-B375-456F-B2CF-9E25AB718A23.png" Content-ID: <871E2E8A-B375-456F-B2CF-9E25AB718A23> Content-disposition: inline; filename="871E2E8A-B375-456F-B2CF-9E25AB718A23.png" Content-transfer-encoding: base64 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 FksWd0bJR8VF1UdNRXtFl0VLl1gsWbPkRoxajCCmPRYfGxV7JHZyqffS3UuH4+ziCuPuLjNc lrPs2nK15anLz66QX8FZcSoeGx8d3xD/iRPCqeVMrvRfuXflBNeTu4f7kufGK+eN8V34ZfyR BJeEsoTRRJfEXYljSa5JFUnjAk9BteB1sl/ygeSplJCUoykzqdGpzWmEtPi000IlYYqwK10z PSe9L8M0ozBDuspp1e5VE6JA0ZFMKHNZZruYjv5M9UiMJJslg1kLs2qy3mdHZZ/KUcwR5vTk muRuyx3J88n7fjVmNXd1Z752/ob8wTXuaw6thdauXNu5Tnddwbrh9b7rj20gbUjZ8MtGy41l G99uit7UUaBRsL5gaLPv5sZCuUJR4b0tzlsObMVsFWzt3WazrWrblyJe0fViy+KK4k8l3JLr 31l9V/ndzPaE7b2l9qX7d+B2CHfc3em681iZYlle2dCu4F2t5czyovK3u1fsvlZhW3FgD2mP ZI+0MqiyvUqvakfVp+qk6oEaj5rmvep7t+2d2sfb17/fbX/TAY0DxQc+HhQcvH/I91BrrUFt xWHc4azDz+ui6rq/Z39ff0TtSPGRz0eFR6XHwo911TvU1zeoN5Q2wo2SxrHjccdv/eD1Q3sT q+lQM6O5+AQ4ITnx4sf4H++eDDzZeYp9qukn/Z/2ttBailqh1tzWibakNml7THvf6YDTnR3O HS0/m/989Iz2mZqzymdLz5HOFZybOZ93fvJCxoXxi4kXhzpXdD66tOTSna6wrt7LgZevXvG5 cqnbvfv8VZerZ645XTt9nX297Yb9jdYeu56WX+x+aem172296XCz/ZbjrY6+BX3n+l37L972 un3ljv+dGwOLBvruLr57/17cPel93v3RB6kPXj/Mejj9aP1j7OOiJwpPKp6qP6391fjXZqm9 9Oyg12DPs4hnj4a4Qy//lfmvT8MFz6nPK0a0RupHrUfPjPmM3Xqx9MXwy4yX0+OFvyn+tveV 0auffnf7vWdiycTwa9HrmT9K3qi+OfrW9m3nZOjk03dp76anit6rvj/2gf2h+2P0x5Hp7E/4 T5WfjT93fAn88ngmbWbm3/eE8/syOll+AAAqqElEQVR4Ae2dB9xUxfX3D0qvIiJNlGIEaQqo qBAb2LBiL1hfg4lKyD8xiW9MLB+NbzRIokYTjRV7B/OqCIgVsYAo2AAVEQRBEJAOiv/9zpOz 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 PYC9OnUB1oMPPuhOoPsgtGvXbrPb+vhu7o477ui+mfvRRx8JF3d8+umnsuuuu/pRs7Jr/o0b N07H40AwV463bds27VaOFi0bn171KQxb3z9fe751smTJEjnyyCPT+PMZUurjsssuc4e1s+Hv 7bffloceekj+/ve/ZxOtYGGDZeHQMt+IHjZsmOy///455cPtl9yCaWQIGAKGgCFgCBgChkA5 IlBQZQIA+DzoaaedlhgLvp3LjxuUp02blpcyofmfeuqp6fwXL14szz77rAwePNh9vjTtUYaW bLHNp4gIytw9UIg6QQF68sknHTtckHb66afLlClTZO+9986HxS0S1y8LDHzyySdy0UUXyQsv vJD1N6DXrl0rDzzwQGJlgjqxr2RtkWq3TA0BQ8AQMAQMAUMgAoGCKxMR+bjv2E+YMEG4Fpxb khFUoa+++kqmT5/u7idYvny5vPTSS+7ijqh0snXn2nEEsDVr1rh8EWLJE8GMFYwDDjhAFi5c KFOnTnXP8IDAiN+3334rPDNzzIVsb731lixYsMDNqBOGuM8884yblW7RooVjDcWlR48ebiY+ LK+quH8BgX/ZsmWOHy44GTt2rJxwwgnpcsGr3nLMVe3cBRFWFnB47733XF117NhRvv76a1f+ QtYJfEDgRRu4+uqrXX2gTO62227yhz/8wdXXLbfcIqxE4D5o0CA55ZRTXDz941bI6667Tv7x j3+4S15QVm688Ubnfc0110jv3r1l++23l7vvvltat24tK1askFWrVslf//rXzVbONM1czM6d OzsllVWLli1byh133OH4pn1xg+Uf//hHhyEmdzmsX79ejj32WDnxxBMd/19++aVceeWVDoeb b75Z3n33XamZuk2cuJdffrlT5u677z53sdzhhx/usAjLA0XTyBAwBAwBQ8AQMAQMgWIjULQz E3PmzHGC1PHHHy9cwoHw6xMXdSDAcwNgIYl82YrCZSAoEaxUIMwdd9xxTmhj ZpmtUPDDVpWj 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 TkSuQmCC --B_3490360482_1321406--

Hi ----- Original Message -----
From: "力波 王" <wlbleaboy@126.com> To: "Oved Ourfali" <oourfali@redhat.com> Cc: devel@ovirt.org Sent: Friday, August 8, 2014 10:34:38 AM Subject: Re: [ovirt-devel] add a ***Command for a button
hi, Oved: I don’t know how to add a VdcAction,
Is this could work: public enum VdcActionType { Unknown(0, QuotaDependency.NONE), Backup(9000, QuotaDependency.NONE),
Yes
I don’t know whether is it need a ActionGroup.
You may not need to set ActionGroup for this More info about oVirt Command architecture you can found at [1]. Martin Perina [1] http://www.ovirt.org/Backend_modules_bll
发件人: Oved Ourfali < oourfali@redhat.com > 日期: Fri, 8 Aug 2014 04:20:58 -0400 (EDT) 至: 力波 王 < wlbleaboy@126.com > 抄送: < devel@ovirt.org > 主题: Re: [ovirt-devel] add a ***Command for a button
Hi
Didn't do a too deep code review, but from a first glance You need to add a new VdcActionType that is called BackupInfo, and use that when you call RunAction.
Hope it helps, Oved On Aug 8, 2014 11:11 AM, =?UTF-8?B?5Yqb5rOiIOeOiw==?= < wlbleaboy@126.com > wrote:
Hi, everyone: I added a button on the Template Tab, in the client side, It’s OK,
Added the button’s callback like this: ======================================================================= private void backup() { BackupInfoParameters param = new BackupInfoParameters(); Frontend.RunAction(VdcActionType.Unknown, param, new IFrontendActionAsyncCallback() { @Override public void executed(FrontendActionAsyncResult result) {
} }); } =======================================================================
The BackupInfoCommand.java is : ======================================================================= package org.ovirt.engine.core.bll;
import org.ovirt.engine.core.bll.utils.PermissionSubject; import org.ovirt.engine.core.common.action.BackupInfoParameters;
import java.io.IOException; import java.util.Collections; import java.util.List;
/** * Created by leaboy on 8/7/14. */ public class BackupInfoCommand <T extends BackupInfoParameters> extends CommandBase<T>{ public BackupInfoCommand(T parameters){ super(parameters); }
@Override public List<PermissionSubject> getPermissionCheckSubjects() { return Collections.emptyList(); }
@Override protected boolean canDoAction() { return true; }
@Override protected void executeCommand() { int a; a = 1; try{ Runtime.getRuntime().exec("touch /tmp/tmp.txt"); }catch (IOException e){ e.printStackTrace(); }
} } =======================================================================
And the BackupInfoParameters.java is: ======================================================================= package org.ovirt.engine.core.common.action;
/** * Created by leaboy on 8/7/14. */ public class BackupInfoParameters extends VdcActionParametersBase implements java.io.Serializable{ private static final long serialVersionUID = -1363077467684414051L; private VdcActionType _actionType;
//public BackupInfoParameters(){}
public BackupInfoParameters(){_actionType = VdcActionType.Unknown;}
public VdcActionType getActionType() { return _actionType; } } =======================================================================
Built the code success, but when I clicked the button, got a dialog with the error info:
Error while executing action: A Request to the Server failed with the following Status Code: 500
I debug it , find the error is raised at :
protected VdcReturnValueBase evaluateCorrelationId(CommandBase<?> commandBase) { VdcReturnValueBase returnValue = null;
// Evaluate and set the correlationId on the parameters, fails on invalid correlation id returnValue = ExecutionHandler.evaluateCorrelationId(commandBase.getParameters()); if (returnValue != null) { log.warnFormat("CanDoAction of action {0} failed. Reasons: {1}", commandBase.getActionType(), StringUtils.join(returnValue.getCanDoActionMessages(), ','));
} // Set the correlation-id on the command commandBase.setCorrelationId(commandBase.getParameters().getCorrelationId()); return returnValue; } _______________________________________________ Devel mailing list Devel@ovirt.org http://lists.ovirt.org/mailman/listinfo/devel
_______________________________________________ Devel mailing list Devel@ovirt.org http://lists.ovirt.org/mailman/listinfo/devel

Hi, Oved: Get the new error : Error while executing action: A Request to the Server failed: This application is out of date, please click the refresh button on your browser. ( The client cannot accept BackupInfo ) In the public VdcReturnValueBase executeAction() actionAllowed is false ÔÚ 8/8/14, 16:52£¬ "Martin Perina" <mperina@redhat.com> ÐŽÈë:
Hi
----- Original Message -----
From: "Áвš Íõ" <wlbleaboy@126.com> To: "Oved Ourfali" <oourfali@redhat.com> Cc: devel@ovirt.org Sent: Friday, August 8, 2014 10:34:38 AM Subject: Re: [ovirt-devel] add a ***Command for a button
hi£¬ Oved: I don¡¯t know how to add a VdcAction,
Is this could work: public enum VdcActionType { Unknown(0, QuotaDependency.NONE), Backup(9000, QuotaDependency.NONE),
Yes
I don¡¯t know whether is it need a ActionGroup.
You may not need to set ActionGroup for this
More info about oVirt Command architecture you can found at [1].
Martin Perina
[1] http://www.ovirt.org/Backend_modules_bll
·¢ŒþÈË: Oved Ourfali < oourfali@redhat.com > ÈÕÆÚ: Fri, 8 Aug 2014 04:20:58 -0400 (EDT) ÖÁ: Áвš Íõ < wlbleaboy@126.com > ³ËÍ: < devel@ovirt.org > Ö÷Ìâ: Re: [ovirt-devel] add a ***Command for a button
Hi
Didn't do a too deep code review, but from a first glance You need to add a new VdcActionType that is called BackupInfo, and use that when you call RunAction.
Hope it helps, Oved On Aug 8, 2014 11:11 AM, =?UTF-8?B?5Yqb5rOiIOeOiw==?= < wlbleaboy@126.com > wrote:
Hi, everyone: I added a button on the Template Tab, in the client side, It¡¯s OK,
Added the button¡¯s callback like this: ======================================================================= private void backup() { BackupInfoParameters param = new BackupInfoParameters(); Frontend.RunAction(VdcActionType.Unknown, param, new IFrontendActionAsyncCallback() { @Override public void executed(FrontendActionAsyncResult result) {
} }); } =======================================================================
The BackupInfoCommand.java is : ======================================================================= package org.ovirt.engine.core.bll;
import org.ovirt.engine.core.bll.utils.PermissionSubject; import org.ovirt.engine.core.common.action.BackupInfoParameters;
import java.io.IOException; import java.util.Collections; import java.util.List;
/** * Created by leaboy on 8/7/14. */ public class BackupInfoCommand <T extends BackupInfoParameters> extends CommandBase<T>{ public BackupInfoCommand(T parameters){ super(parameters); }
@Override public List<PermissionSubject> getPermissionCheckSubjects() { return Collections.emptyList(); }
@Override protected boolean canDoAction() { return true; }
@Override protected void executeCommand() { int a; a = 1; try{ Runtime.getRuntime().exec("touch /tmp/tmp.txt"); }catch (IOException e){ e.printStackTrace(); }
} } =======================================================================
And the BackupInfoParameters.java is: ======================================================================= package org.ovirt.engine.core.common.action;
/** * Created by leaboy on 8/7/14. */ public class BackupInfoParameters extends VdcActionParametersBase implements java.io.Serializable{ private static final long serialVersionUID = -1363077467684414051L; private VdcActionType _actionType;
//public BackupInfoParameters(){}
public BackupInfoParameters(){_actionType = VdcActionType.Unknown;}
public VdcActionType getActionType() { return _actionType; } } =======================================================================
Built the code success, but when I clicked the button, got a dialog with the error info:
Error while executing action: A Request to the Server failed with the following Status Code: 500
I debug it , find the error is raised at :
protected VdcReturnValueBase evaluateCorrelationId(CommandBase<?> commandBase) { VdcReturnValueBase returnValue = null;
// Evaluate and set the correlationId on the parameters, fails on invalid correlation id returnValue = ExecutionHandler.evaluateCorrelationId(commandBase.getParameters()); if (returnValue != null) { log.warnFormat("CanDoAction of action {0} failed. Reasons: {1}", commandBase.getActionType(), StringUtils.join(returnValue.getCanDoActionMessages(), ','));
} // Set the correlation-id on the command
commandBase.setCorrelationId(commandBase.getParameters().getCorrelationId ()); return returnValue; } _______________________________________________ Devel mailing list Devel@ovirt.org http://lists.ovirt.org/mailman/listinfo/devel
_______________________________________________ Devel mailing list Devel@ovirt.org http://lists.ovirt.org/mailman/listinfo/devel

----- Original Message -----
From: "力波 王" <wlbleaboy@126.com> To: "Martin Perina" <mperina@redhat.com> Cc: "Oved Ourfali" <oourfali@redhat.com>, devel@ovirt.org Sent: Friday, August 8, 2014 11:40:35 AM Subject: Re: [ovirt-devel] add a ***Command for a button
Hi, Oved: Get the new error : Error while executing action: A Request to the Server failed: This application is out of date, please click the refresh button on your browser. ( The client cannot accept BackupInfo )
Can you please post stacktrace of the execption?
In the public VdcReturnValueBase executeAction() actionAllowed is false
在 8/8/14, 16:52, "Martin Perina" <mperina@redhat.com> 写入:
Hi
----- Original Message -----
From: "力波 王" <wlbleaboy@126.com> To: "Oved Ourfali" <oourfali@redhat.com> Cc: devel@ovirt.org Sent: Friday, August 8, 2014 10:34:38 AM Subject: Re: [ovirt-devel] add a ***Command for a button
hi, Oved: I don’t know how to add a VdcAction,
Is this could work: public enum VdcActionType { Unknown(0, QuotaDependency.NONE), Backup(9000, QuotaDependency.NONE),
Yes
I don’t know whether is it need a ActionGroup.
You may not need to set ActionGroup for this
More info about oVirt Command architecture you can found at [1].
Martin Perina
[1] http://www.ovirt.org/Backend_modules_bll
发件人: Oved Ourfali < oourfali@redhat.com > 日期: Fri, 8 Aug 2014 04:20:58 -0400 (EDT) 至: 力波 王 < wlbleaboy@126.com > 抄送: < devel@ovirt.org > 主题: Re: [ovirt-devel] add a ***Command for a button
Hi
Didn't do a too deep code review, but from a first glance You need to add a new VdcActionType that is called BackupInfo, and use that when you call RunAction.
Hope it helps, Oved On Aug 8, 2014 11:11 AM, =?UTF-8?B?5Yqb5rOiIOeOiw==?= < wlbleaboy@126.com > wrote:
Hi, everyone: I added a button on the Template Tab, in the client side, It’s OK,
Added the button’s callback like this: ======================================================================= private void backup() { BackupInfoParameters param = new BackupInfoParameters(); Frontend.RunAction(VdcActionType.Unknown, param, new IFrontendActionAsyncCallback() { @Override public void executed(FrontendActionAsyncResult result) {
} }); } =======================================================================
The BackupInfoCommand.java is : ======================================================================= package org.ovirt.engine.core.bll;
import org.ovirt.engine.core.bll.utils.PermissionSubject; import org.ovirt.engine.core.common.action.BackupInfoParameters;
import java.io.IOException; import java.util.Collections; import java.util.List;
/** * Created by leaboy on 8/7/14. */ public class BackupInfoCommand <T extends BackupInfoParameters> extends CommandBase<T>{ public BackupInfoCommand(T parameters){ super(parameters); }
@Override public List<PermissionSubject> getPermissionCheckSubjects() { return Collections.emptyList(); }
@Override protected boolean canDoAction() { return true; }
@Override protected void executeCommand() { int a; a = 1; try{ Runtime.getRuntime().exec("touch /tmp/tmp.txt"); }catch (IOException e){ e.printStackTrace(); }
} } =======================================================================
And the BackupInfoParameters.java is: ======================================================================= package org.ovirt.engine.core.common.action;
/** * Created by leaboy on 8/7/14. */ public class BackupInfoParameters extends VdcActionParametersBase implements java.io.Serializable{ private static final long serialVersionUID = -1363077467684414051L; private VdcActionType _actionType;
//public BackupInfoParameters(){}
public BackupInfoParameters(){_actionType = VdcActionType.Unknown;}
public VdcActionType getActionType() { return _actionType; } } =======================================================================
Built the code success, but when I clicked the button, got a dialog with the error info:
Error while executing action: A Request to the Server failed with the following Status Code: 500
I debug it , find the error is raised at :
protected VdcReturnValueBase evaluateCorrelationId(CommandBase<?> commandBase) { VdcReturnValueBase returnValue = null;
// Evaluate and set the correlationId on the parameters, fails on invalid correlation id returnValue = ExecutionHandler.evaluateCorrelationId(commandBase.getParameters()); if (returnValue != null) { log.warnFormat("CanDoAction of action {0} failed. Reasons: {1}", commandBase.getActionType(), StringUtils.join(returnValue.getCanDoActionMessages(), ','));
} // Set the correlation-id on the command
commandBase.setCorrelationId(commandBase.getParameters().getCorrelationId ()); return returnValue; } _______________________________________________ Devel mailing list Devel@ovirt.org http://lists.ovirt.org/mailman/listinfo/devel
_______________________________________________ Devel mailing list Devel@ovirt.org http://lists.ovirt.org/mailman/listinfo/devel

On Friday, August 08, 2014 06:22:29 AM Martin Perina wrote:
----- Original Message -----
From: "力波 王" <wlbleaboy@126.com> To: "Martin Perina" <mperina@redhat.com> Cc: "Oved Ourfali" <oourfali@redhat.com>, devel@ovirt.org Sent: Friday, August 8, 2014 11:40:35 AM Subject: Re: [ovirt-devel] add a ***Command for a button
Hi, Oved: Get the new error : Error while executing action: A Request to the Server failed: This application is out of date, please click the refresh button on your browser. ( The client cannot accept BackupInfo )
Can you please post stacktrace of the execption?
Odds are they just build the backend and deployed it, in this particular case the frontend also needs to be recompiled (and since that takes a long time it is not something people like to do). So I suggest they also recompile the frontend when they deploy in this case. To speed up compiling you can specify which browsers to compile for. Here is the command I normally use: make clean install-dev PREFIX=$HOME/ovirt-engine BUILD_UT=0 BUILD_GWT=1 DEV_EXTRA_BUILD_FLAGS_GWT_DEFAULTS="-D gwt.userAgent=gecko1_8,safari" So I build without running the unit tests and I only compile for FF and Chrome. If you don't use the GWT debugger, you can only compile for the browser of your choice (For GWT debugger you need to compile at least 2 browsers, not sure why). Once you have compiled the frontend with the changes, the exception should go away.
In the public VdcReturnValueBase executeAction() actionAllowed is false
在 8/8/14, 16:52, "Martin Perina" <mperina@redhat.com> 写入:
Hi
----- Original Message -----
From: "力波 王" <wlbleaboy@126.com> To: "Oved Ourfali" <oourfali@redhat.com> Cc: devel@ovirt.org Sent: Friday, August 8, 2014 10:34:38 AM Subject: Re: [ovirt-devel] add a ***Command for a button
hi, Oved: I don’t know how to add a VdcAction,
Is this could work: public enum VdcActionType { Unknown(0, QuotaDependency.NONE), Backup(9000, QuotaDependency.NONE),
Yes
I don’t know whether is it need a ActionGroup.
You may not need to set ActionGroup for this
More info about oVirt Command architecture you can found at [1].
Martin Perina
[1] http://www.ovirt.org/Backend_modules_bll
发件人: Oved Ourfali < oourfali@redhat.com > 日期: Fri, 8 Aug 2014 04:20:58 -0400 (EDT) 至: 力波 王 < wlbleaboy@126.com > 抄送: < devel@ovirt.org > 主题: Re: [ovirt-devel] add a ***Command for a button
Hi
Didn't do a too deep code review, but from a first glance You need to add a new VdcActionType that is called BackupInfo, and use
that
when you call RunAction.
Hope it helps, Oved On Aug 8, 2014 11:11 AM, =?UTF-8?B?5Yqb5rOiIOeOiw==?= <
wlbleaboy@126.com >
wrote:
Hi, everyone: I added a button on the Template Tab, in the client side, It’s OK,
Added the button’s callback like this: ======================================================================= private void backup() { BackupInfoParameters param = new BackupInfoParameters(); Frontend.RunAction(VdcActionType.Unknown, param, new IFrontendActionAsyncCallback() { @Override public void executed(FrontendActionAsyncResult result) {
} }); } =======================================================================
The BackupInfoCommand.java is : ======================================================================= package org.ovirt.engine.core.bll;
import org.ovirt.engine.core.bll.utils.PermissionSubject; import org.ovirt.engine.core.common.action.BackupInfoParameters;
import java.io.IOException; import java.util.Collections; import java.util.List;
/** * Created by leaboy on 8/7/14. */ public class BackupInfoCommand <T extends BackupInfoParameters> extends CommandBase<T>{ public BackupInfoCommand(T parameters){ super(parameters); }
@Override public List<PermissionSubject> getPermissionCheckSubjects() { return Collections.emptyList(); }
@Override protected boolean canDoAction() { return true; }
@Override protected void executeCommand() { int a; a = 1; try{ Runtime.getRuntime().exec("touch /tmp/tmp.txt"); }catch (IOException e){ e.printStackTrace(); }
} } =======================================================================
And the BackupInfoParameters.java is: ======================================================================= package org.ovirt.engine.core.common.action;
/** * Created by leaboy on 8/7/14. */ public class BackupInfoParameters extends VdcActionParametersBase
implements
java.io.Serializable{ private static final long serialVersionUID = -1363077467684414051L; private VdcActionType _actionType;
//public BackupInfoParameters(){}
public BackupInfoParameters(){_actionType = VdcActionType.Unknown;}
public VdcActionType getActionType() { return _actionType; } } =======================================================================
Built the code success, but when I clicked the button, got a dialog
with the
error info:
Error while executing action: A Request to the Server failed with the following Status Code: 500
I debug it , find the error is raised at :
protected VdcReturnValueBase evaluateCorrelationId(CommandBase<?> commandBase) { VdcReturnValueBase returnValue = null;
// Evaluate and set the correlationId on the parameters, fails on
invalid
correlation id returnValue = ExecutionHandler.evaluateCorrelationId(commandBase.getParameters()); if (returnValue != null) { log.warnFormat("CanDoAction of action {0} failed. Reasons: {1}", commandBase.getActionType(), StringUtils.join(returnValue.getCanDoActionMessages(), ','));
} // Set the correlation-id on the command
commandBase.setCorrelationId(commandBase.getParameters().getCorrelationI d ());
return returnValue; } _______________________________________________ Devel mailing list Devel@ovirt.org http://lists.ovirt.org/mailman/listinfo/devel
_______________________________________________ Devel mailing list Devel@ovirt.org http://lists.ovirt.org/mailman/listinfo/devel
_______________________________________________ Devel mailing list Devel@ovirt.org http://lists.ovirt.org/mailman/listinfo/devel
participants (5)
-
Alexander Wels
-
Martin Perina
-
Moti Asayag
-
Oved Ourfali
-
力波 王