Agree with your point. Can you help me with the exact code change.

On Wednesday, 16 November 2016 23:00:36 UTC+5:30, Robert Sandell wrote:
>
> Abstract classes cannot be instanciated, so you can't annotate the 
> constructor with DataBoundConstructor since the class can't be directly 
> instanciated but will need to be subclassed.
>
> /B
>
> On Wed, Nov 16, 2016 at 3:59 PM, Kul Bhushan Srivastava <[email protected] 
> <javascript:>> wrote:
>
>> Thanks Robert.
>>
>> I am facing maven compilation issue. Saying @DataBoundConstructor cannot 
>> be used inside abstract class.
>>
>> Please suggest.
>>
>> My Java File:
>>
>> import org.kohsuke.stapler.DataBoundConstructor;
>> import hudson.Extension;
>> import hudson.FilePath;
>> import hudson.Launcher;
>> import hudson.tasks.Messages;
>> import hudson.Proc;
>> import hudson.Util;
>> import hudson.EnvVars;
>> import hudson.model.AbstractBuild;
>> import hudson.model.BuildListener;
>> import hudson.model.Node;
>> import hudson.model.Result;
>> import hudson.model.TaskListener;
>> import hudson.remoting.ChannelClosedException;
>> import hudson.model.AbstractProject;
>> import hudson.tasks.BuildStepDescriptor;
>> import hudson.tasks.Builder;
>> import hudson.tasks.CommandInterpreter;
>> import java.io.IOException;
>> import java.util.Map;
>> import java.util.logging.Level;
>> import java.util.logging.Logger;
>> import javax.annotation.Nonnull;
>>
>> public abstract class BuildStepCreator extends Builder {
>>     
>>     private String text1, text2, text3;
>>     
>>     public String getText1(){
>>         return text1;
>>     }
>>     public String getText2(){
>>         return text2;
>>     }
>>     public String getText3(){
>>         return text3;
>>     }
>>     
>>
>>     @DataBoundConstructor
>>     public BuildStepCreator(OptionalTextBlock1 enableText1, 
>> OptionalTextBlock2 enableText2, OptionalTextBlock3 enableText3) {
>>         this.text1 = (enableText1 != null) ? enableText1.text1 : null;
>>         this.text2 = (enableText2 != null) ? enableText2.text2 : null;
>>         this.text3 = (enableText3 != null) ? enableText3.text3 : null;
>>     }
>>
>>     public static class OptionalTextBlock1 {
>>         private String text1;
>>         @DataBoundConstructor
>>         public OptionalTextBlock1(String text1) {
>>             this.text1 = text1;
>>         }
>>     }
>>     public static class OptionalTextBlock2 {
>>         private String text2;
>>         @DataBoundConstructor
>>         public OptionalTextBlock2(String text2) {
>>             this.text2 = text2;
>>         }
>>     }
>>     public static class OptionalTextBlock3 {
>>         private String text3;
>>         @DataBoundConstructor
>>         public OptionalTextBlock3(String text3) {
>>             this.text3 = text3;
>>         }
>>     }
>>
>>     @Extension
>>     public static final class DescriptorImpl extends 
>> BuildStepDescriptor<Builder>{
>>         
>>         /*public FormValidation doCheckTask(@QueryParameter String value){
>>             try{
>>                 if(value.equalsIgnoreCase(null) || 
>> value.equalsIgnoreCase("")){
>>                     return FormValidation.error("Invalid Details.");
>>                 }
>>             }catch(Exception e){
>>                 return FormValidation.error("Error validating the form 
>> details.");
>>             }
>>             return FormValidation.ok();
>>         }
>>         
>>         public FormValidation doCheckGoal(@QueryParameter String value){
>>             try{
>>                 Integer.parseInt(value);
>>             }catch(Exception e){
>>                 return FormValidation.error("Please provide integer in 
>> the Goal.");
>>             }
>>             return FormValidation.ok();
>>         }*/
>>
>>         @Override
>>         public boolean isApplicable(Class<? extends AbstractProject> 
>> jobType) {
>>             // TODO Auto-generated method stub
>>             return true;
>>         }
>>
>>         @Override
>>         public String getDisplayName() {
>>             // TODO Auto-generated method stub
>>             return "Job Orchestration";
>>         }
>>     }
>>     
>>     /*@Override
>>     public boolean perform(hudson.model.AbstractBuild build, 
>> hudson.Launcher launcher, hudson.model.BuildListener listener) {
>>         listener.getLogger().println("OptionalBlockSampleBuilder " + 
>> text1);
>>         return true;
>>     }*/
>>     
>>     @Override
>>     public boolean perform(AbstractBuild<?,?> build, Launcher launcher, 
>> BuildListener listener) throws InterruptedException {
>>         return perform(build,launcher,(TaskListener)listener);
>>     }
>>     
>>     /**
>>      * Determines whether a non-zero exit code from the process should 
>> change the build
>>      * status to {@link Result#UNSTABLE} instead of default {@link 
>> Result#FAILURE}.
>>      *
>>      * Changing to {@link Result#UNSTABLE} does not abort the build, next 
>> steps are continued.
>>      *
>>      */
>>     protected boolean isErrorlevelForUnstableBuild(int exitCode) {
>>         return false;
>>     }
>>     
>>     public boolean perform(AbstractBuild<?,?> build, Launcher launcher, 
>> TaskListener listener) throws InterruptedException{
>>         FilePath ws = build.getWorkspace();
>>         if (ws == null) {
>>             Node node = build.getBuiltOn();
>>             if (node == null) {
>>                 throw new NullPointerException("no such build node: " + 
>> build.getBuiltOnStr());
>>             }
>>             throw new NullPointerException("no workspace from node " + 
>> node + " which is computer " + node.toComputer() + " and has channel " + 
>> node.getChannel());
>>         }
>>         FilePath script=null;
>>         int r = -1;
>>         try {
>>             try {
>>                 script = createScriptFile(ws);
>>             } catch (IOException e) {
>>                 Util.displayIOException(e,listener);
>>                 
>> e.printStackTrace(listener.fatalError(Messages.CommandInterpreter_UnableToProduceScript()));
>>                 return false;
>>             }
>>
>>             try {
>>                 EnvVars envVars = build.getEnvironment(listener);
>>                 // on Windows environment variables are converted to all 
>> upper case,
>>                 // but no such conversions are done on Unix, so to make 
>> this cross-platform,
>>                 // convert variables to all upper cases.
>>                 for(Map.Entry<String,String> e : 
>> build.getBuildVariables().entrySet())
>>                     envVars.put(e.getKey(),e.getValue());
>>
>>                 r = 
>> join(launcher.launch().cmds(buildCommandLine(script)).envs(envVars).stdout(listener).pwd(ws).start());
>>
>>                 if(isErrorlevelForUnstableBuild(r)) {
>>                     build.setResult(Result.UNSTABLE);
>>                     r = 0;
>>                 }
>>             } catch (IOException e) {
>>                 Util.displayIOException(e, listener);
>>                 
>> e.printStackTrace(listener.fatalError(Messages.CommandInterpreter_CommandFailed()));
>>             }
>>             return r==0;
>>         } finally {
>>             try {
>>                 if(script!=null)
>>                     script.delete();
>>             } catch (IOException e) {
>>                 if (r==-1 && e.getCause() instanceof 
>> ChannelClosedException) {
>>                     // JENKINS-5073
>>                     // r==-1 only when the execution of the command 
>> resulted in IOException,
>>                     // and we've already reported that error. A common 
>> error there is channel
>>                     // losing a connection, and in that case we don't 
>> want to confuse users
>>                     // by reporting the 2nd problem. Technically the 1st 
>> exception may not be
>>                     // a channel closed error, but that's rare enough, 
>> and JENKINS-5073 is common enough
>>                     // that this suppressing of the error would be 
>> justified
>>                     LOGGER.log(Level.FINE, "Script deletion failed", e);
>>                 } else {
>>                     Util.displayIOException(e,listener);
>>                     e.printStackTrace( 
>> listener.fatalError(Messages.CommandInterpreter_UnableToDelete(script)) );
>>                 }
>>             } catch (Exception e) {
>>                 e.printStackTrace( 
>> listener.fatalError(Messages.CommandInterpreter_UnableToDelete(script)) );
>>             }
>>         }
>>     }
>>     
>>     /**
>>      * Reports the exit code from the process.
>>      *
>>      * This allows subtypes to treat the exit code differently (for 
>> example by treating non-zero exit code
>>      * as if it's zero, or to set the status to {@link Result#UNSTABLE}). 
>> Any non-zero exit code will cause
>>      * the build step to fail. Use {@link 
>> #isErrorlevelForUnstableBuild(int exitCode)} to redefine the default
>>      * behaviour.
>>      *
>>      * @since 1.549
>>      */
>>     protected int join(Proc p) throws IOException, InterruptedException {
>>         return p.join();
>>     }
>>
>>     /**
>>      * Creates a script file in a temporary name in the specified 
>> directory.
>>      */
>>     public FilePath createScriptFile(@Nonnull FilePath dir) throws 
>> IOException, InterruptedException {
>>         return dir.createTextTempFile("hudson", getFileExtension(), 
>> getContents(), false);
>>     }
>>
>>     public abstract String[] buildCommandLine(FilePath script);
>>
>>     protected abstract String getContents();
>>
>>     protected abstract String getFileExtension();
>>
>>     private static final Logger LOGGER = 
>> Logger.getLogger(CommandInterpreter.class.getName());
>>     
>> }
>>
>> On Wednesday, 16 November 2016 17:15:12 UTC+5:30, Robert Sandell wrote:
>>>
>>> Here are the classes involved in "execute script" step.
>>>
>>>
>>> https://github.com/jenkinsci/jenkins/blob/master/core/src/main/java/hudson/tasks/BatchFile.java
>>>
>>> https://github.com/jenkinsci/jenkins/blob/master/core/src/main/java/hudson/tasks/Shell.java
>>>
>>> https://github.com/jenkinsci/jenkins/blob/master/core/src/main/java/hudson/tasks/CommandInterpreter.java
>>>
>>> /B
>>>
>>>
>>> On Wed, Nov 16, 2016 at 8:41 AM, Kul Bhushan Srivastava <
>>> [email protected]> wrote:
>>>
>>>> If anyone can guide how the windows bactch command execution are 
>>>> handled from backend JAVA API. Then I may create one of my own.
>>>>
>>>> On Monday, 14 November 2016 13:37:49 UTC+5:30, Kul Bhushan Srivastava 
>>>> wrote:
>>>>>
>>>>>  
>>>>
>>>> -- 
>>>> You received this message because you are subscribed to the Google 
>>>> Groups "Jenkins Developers" group.
>>>> To unsubscribe from this group and stop receiving emails from it, send 
>>>> an email to [email protected].
>>>> To view this discussion on the web visit 
>>>> https://groups.google.com/d/msgid/jenkinsci-dev/76d6ddbf-14a2-405d-8197-f2dd549e8248%40googlegroups.com
>>>>  
>>>> <https://groups.google.com/d/msgid/jenkinsci-dev/76d6ddbf-14a2-405d-8197-f2dd549e8248%40googlegroups.com?utm_medium=email&utm_source=footer>
>>>> .
>>>>
>>>> For more options, visit https://groups.google.com/d/optout.
>>>>
>>>
>>>
>>>
>>> -- 
>>> Robert Sandell
>>> *Software Engineer*
>>> *CloudBees Inc.*
>>>
>> -- 
>> You received this message because you are subscribed to the Google Groups 
>> "Jenkins Developers" group.
>> To unsubscribe from this group and stop receiving emails from it, send an 
>> email to [email protected] <javascript:>.
>> To view this discussion on the web visit 
>> https://groups.google.com/d/msgid/jenkinsci-dev/39ff5e49-dcf3-4098-a505-de706522682e%40googlegroups.com
>>  
>> <https://groups.google.com/d/msgid/jenkinsci-dev/39ff5e49-dcf3-4098-a505-de706522682e%40googlegroups.com?utm_medium=email&utm_source=footer>
>> .
>>
>> For more options, visit https://groups.google.com/d/optout.
>>
>
>
>
> -- 
> Robert Sandell
> *Software Engineer*
> *CloudBees Inc.*
>

-- 
You received this message because you are subscribed to the Google Groups 
"Jenkins Developers" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
To view this discussion on the web visit 
https://groups.google.com/d/msgid/jenkinsci-dev/9fa36bc9-50c2-4e90-bf05-c192e5f7033f%40googlegroups.com.
For more options, visit https://groups.google.com/d/optout.

Reply via email to