Skip to content

Commit

Permalink
[FIXED JENKINS-12870]
Browse files Browse the repository at this point in the history
refactored DiskUsageAction "injection" using a TransientProjectActionFactory 
avoid to pollute jobs configuration and history with a JobProperty
  • Loading branch information
ndeloof committed Feb 23, 2012
1 parent 47d3b56 commit 5af43fe
Show file tree
Hide file tree
Showing 8 changed files with 101 additions and 22 deletions.
5 changes: 2 additions & 3 deletions pom.xml
Expand Up @@ -2,10 +2,9 @@
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>org.jvnet.hudson.plugins</groupId>
<groupId>org.jenkins-ci.plugins</groupId>
<artifactId>plugin</artifactId>
<version>1.391</version>
<relativePath>../pom.xml</relativePath>
<version>1.409</version>
</parent>

<artifactId>disk-usage</artifactId>
Expand Down
@@ -0,0 +1,67 @@
package hudson.plugins.disk_usage;

import hudson.Extension;
import hudson.model.*;
import net.sf.json.JSONObject;
import org.kohsuke.stapler.StaplerRequest;

import java.util.Collection;
import java.util.Collections;

/**
* @author: <a hef="mailto:nicolas.deloof@gmail.com">Nicolas De Loof</a>
*/
@Extension
public class DiskUsageProjectActionFactory extends TransientProjectActionFactory
implements Describable<DiskUsageProjectActionFactory> {

@Override
public Collection<? extends Action> createFor(AbstractProject job) {
return Collections.singleton(new ProjectDiskUsageAction(job));
}

public Descriptor<DiskUsageProjectActionFactory> getDescriptor() {
return DESCRIPTOR;
}

@Extension
public static final DescriptorImpl DESCRIPTOR = new DescriptorImpl();

public static final class DescriptorImpl extends Descriptor<DiskUsageProjectActionFactory> {

public DescriptorImpl() {
load();
}

//Show graph on the project page?
private boolean showGraph;

@Override
public String getDisplayName() {
return Messages.DisplayName();
}


@Override
public DiskUsageProjectActionFactory newInstance(StaplerRequest req, JSONObject formData) {
return new DiskUsageProjectActionFactory();
}

@Override
public boolean configure(StaplerRequest req, JSONObject formData) throws FormException {
showGraph = req.getParameter("disk_usage.showGraph") != null;
save();
return super.configure(req, formData);
}

public boolean isShowGraph() {
//The graph is shown by default
return showGraph;
}

public void setShowGraph(Boolean showGraph) {
this.showGraph = showGraph;
}
}

}
40 changes: 31 additions & 9 deletions src/main/java/hudson/plugins/disk_usage/DiskUsageProperty.java
@@ -1,28 +1,48 @@
package hudson.plugins.disk_usage;

import hudson.model.AbstractProject;
import hudson.model.Action;
import hudson.model.Job;
import hudson.model.JobProperty;
import hudson.model.JobPropertyDescriptor;
import hudson.init.InitMilestone;
import hudson.init.Initializer;
import hudson.model.*;
import hudson.Extension;
import net.sf.json.JSONObject;
import org.kohsuke.stapler.StaplerRequest;

import java.io.IOException;
import java.io.ObjectStreamException;
import java.util.Collection;
import java.util.Collections;

//(basically nothing to see here)
/**
* This Property sets DiskUsage action.
*
* @author dvrzalik
*/
@Deprecated
public class DiskUsageProperty extends JobProperty<Job<?, ?>> {

@Override
public Action getJobAction(Job<?, ?> job) {
return new ProjectDiskUsageAction((AbstractProject) job);//??

@Override
public Collection<? extends Action> getJobActions(Job<?, ?> job) {
return Collections.emptyList();
}

/**
* convert legacy DiskUsageProperty configuration to DiskUsageProjectActionFactory
* @throws IOException
*/
@Initializer(after = InitMilestone.PLUGINS_STARTED)
public static void transitionAuth() throws IOException {
DiskUsageDescriptor that = (DiskUsageDescriptor) Hudson.getInstance().getDescriptor(DiskUsageProperty.class);
if (!that.converted) {
DiskUsageProjectActionFactory.DESCRIPTOR.setShowGraph(that.showGraph);
that.converted = true;
that.save();
DiskUsageProjectActionFactory.DESCRIPTOR.save();
}
}

@Extension
@Deprecated
public static final class DiskUsageDescriptor extends JobPropertyDescriptor {

public DiskUsageDescriptor() {
Expand All @@ -32,6 +52,8 @@ public DiskUsageDescriptor() {
//Show graph on the project page?
private boolean showGraph;

private boolean converted;

@Override
public String getDisplayName() {
return Messages.DisplayName();
Expand Down
9 changes: 0 additions & 9 deletions src/main/java/hudson/plugins/disk_usage/DiskUsageThread.java
Expand Up @@ -53,15 +53,6 @@ protected void execute(TaskListener listener) throws IOException, InterruptedExc
for (Object item : items) {
if (item instanceof AbstractProject) {
AbstractProject project = (AbstractProject) item;
if (project.getAction(ProjectDiskUsageAction.class) == null) {
try {
project.addProperty(new DiskUsageProperty());
project.save();
} catch (IOException ex) {
logger.log(Level.WARNING, "Error when adding disk usage property for " + project.getName(), ex);
break;
}
}

//well, this is not absolutely thread-safe, but in the worst case we get invalid result for one build
//(which will be rewritten next time)
Expand Down
@@ -1,4 +1,4 @@
<j:jelly xmlns:j="jelly:core" xmlns:st="jelly:stapler" xmlns:d="jelly:define" xmlns:l="/lib/layout" xmlns:t="/lib/hudson" xmlns:f="/lib/form">
<j:jelly xmlns:j="jelly:core" xmlns:f="/lib/form">
<f:section title="${%Disk usage}">
<f:entry title="">
<f:checkbox name="disk_usage.showGraph" checked="${descriptor.showGraph}" />
Expand Down

0 comments on commit 5af43fe

Please sign in to comment.