Skip to content

Commit

Permalink
WINDUP-701 Fix automatic rulesets updating - Refactoring, fixes
Browse files Browse the repository at this point in the history
  • Loading branch information
OndraZizka committed Jul 25, 2015
1 parent 226d32b commit 549b344
Show file tree
Hide file tree
Showing 15 changed files with 322 additions and 116 deletions.
9 changes: 9 additions & 0 deletions bootstrap/pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -35,6 +35,13 @@
<version>${project.version}</version>
<scope>compile</scope>
</dependency>

<dependency>
<groupId>org.jboss.forge.addon</groupId>
<artifactId>dependencies</artifactId>
<version>2.16.2.Final</version>
</dependency>

<dependency>
<groupId>org.jboss.forge.furnace</groupId>
<artifactId>furnace-manager</artifactId>
Expand All @@ -51,6 +58,8 @@
<groupId>org.jboss.forge.furnace</groupId>
<artifactId>furnace-se</artifactId>
</dependency>


<!-- Optional log manager dependency -->
<dependency>
<groupId>org.jboss.logmanager</groupId>
Expand Down
38 changes: 24 additions & 14 deletions bootstrap/src/main/java/org/jboss/windup/bootstrap/Bootstrap.java
Original file line number Diff line number Diff line change
Expand Up @@ -27,12 +27,14 @@

import org.apache.commons.io.FileUtils;
import org.apache.commons.lang3.StringUtils;
import org.jboss.forge.addon.dependencies.DependencyResolver;
import org.jboss.forge.furnace.Furnace;
import org.jboss.forge.furnace.impl.addons.AddonRepositoryImpl;
import org.jboss.forge.furnace.repositories.AddonRepository;
import org.jboss.forge.furnace.repositories.AddonRepositoryMode;
import org.jboss.forge.furnace.repositories.MutableAddonRepository;
import org.jboss.forge.furnace.se.FurnaceFactory;
import org.jboss.forge.furnace.services.Imported;
import org.jboss.forge.furnace.util.OperatingSystemUtils;
import org.jboss.forge.furnace.versions.EmptyVersion;
import org.jboss.forge.furnace.versions.SingleVersion;
Expand All @@ -47,6 +49,7 @@
import org.jboss.windup.exec.configuration.options.InputPathOption;
import org.jboss.windup.exec.configuration.options.OutputPathOption;
import org.jboss.windup.exec.configuration.options.OverwriteOption;
import org.jboss.windup.exec.updater.RulesetsUpdater;
import org.jboss.windup.graph.GraphContext;
import org.jboss.windup.graph.GraphContextFactory;
import org.jboss.windup.util.PathUtil;
Expand Down Expand Up @@ -149,6 +152,7 @@ private void processArguments(List<String> arguments, BootstrapFurnaceService fu
command = BootstrapCommand.DISPLAY_HELP;
}
String addonID = null;
boolean updateRulesets = false;

List<String> unknownArgs = new ArrayList<>();
List<File> mutableRepos = new ArrayList<>();
Expand Down Expand Up @@ -217,7 +221,9 @@ else if ("--generateCompletionData".equals(arg))
}
else if (arg.startsWith("--updateRules"))
{
command = BootstrapCommand.UPDATE_RULESETS;
updateRulesets = true;
if(arguments.size() == 1)
command = BootstrapCommand.UPDATE_RULESETS;
}
else
{
Expand All @@ -238,20 +244,10 @@ else if (arg.startsWith("--updateRules"))
}
}

// Make the arguments a List, get rid of nulls.
List<String> argsList = new ArrayList<>(arguments.size() + 2);
for (String arg : arguments)
{
if (arg != null)
argsList.add(arg);
}

// Move Windup arguments to --evaluate '...'
List<String> windupArguments = new ArrayList<>();
if (!unknownArgs.isEmpty())
{
setupNonInteractive(furnace);

// Pass unknown arguments to Windup (Forge).
for (String windupArg : unknownArgs)
windupArguments.add(windupArg);
Expand Down Expand Up @@ -279,9 +275,23 @@ else if (command == null)
case REMOVE_ADDON:
furnaceService.remove(addonID, this.batchMode);
break;
case UPDATE_RULESETS:
System.out.println("XXXXX Updating Rulesets XXXXX");///
break;
}

// Update rulesets
if (updateRulesets)
{
System.out.println("Updating Rulesets...");
try {
//Imported<DependencyResolver> resolver = furnace.getAddonRegistry().getServices(DependencyResolver.class);
//new RulesetsUpdater(resolver.get()).replaceRulesetsDirectoryWithLatestRelease();
///TODO: Can't get DepencencyResolver as it's in an addon?
// I have added it with a compiled scope.
}
catch (Throwable ex)
{
System.err.println("Could not update the rulesets: " + ex.getMessage());
ex.printStackTrace(System.err);
}
}

// Start Furnace service if we are going to need it.
Expand Down
7 changes: 7 additions & 0 deletions exec/addon/pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -49,6 +49,13 @@
<classifier>forge-addon</classifier>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>org.jboss.forge.addon</groupId>
<artifactId>dependencies</artifactId>
<classifier>forge-addon</classifier>
<scope>provided</scope>
</dependency>

</dependencies>


Expand Down
8 changes: 8 additions & 0 deletions exec/api/pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -42,5 +42,13 @@
<artifactId>cdi-api</artifactId>
<scope>provided</scope>
</dependency>

<dependency>
<groupId>org.jboss.forge.addon</groupId>
<artifactId>maven</artifactId>
<classifier>forge-addon</classifier>
<scope>provided</scope>
</dependency>

</dependencies>
</project>
Original file line number Diff line number Diff line change
@@ -0,0 +1,56 @@
package org.jboss.windup.exec.configuration.options;

import org.jboss.windup.config.AbstractConfigurationOption;
import org.jboss.windup.config.InputType;
import org.jboss.windup.config.ValidationResult;

/**
* Updates the rulesets distributed with Windup.
* That means, Windup will check the Maven repository for releases of windup-rulesets,
* and if newer is available, it it downloaded and it replaces the current one.
*/
public class UpdateRulesetsOption extends AbstractConfigurationOption
{
public static final String NAME = "updateRulesets";

@Override
public String getDescription()
{
return "Updates the rulesets distributed with Windup.";
}

@Override
public String getName()
{
return NAME;
}

@Override
public String getLabel()
{
return "Update rulesets";
}

@Override
public Class<?> getType()
{
return Boolean.class;
}

@Override
public InputType getUIType()
{
return InputType.SINGLE;
}

@Override
public boolean isRequired()
{
return false;
}

public ValidationResult validate(Object valueObj)
{
return ValidationResult.SUCCESS;
}
}
Original file line number Diff line number Diff line change
@@ -1,13 +1,10 @@
package org.jboss.windup.ui;
package org.jboss.windup.exec.updater;

import java.io.File;
import java.io.IOException;
import java.nio.file.Path;
import java.util.List;
import java.util.logging.Logger;
import net.lingala.zip4j.core.ZipFile;
import net.lingala.zip4j.exception.ZipException;
import org.apache.commons.io.FileUtils;
import org.jboss.forge.addon.dependencies.Coordinate;
import org.jboss.forge.addon.dependencies.Dependency;
import org.jboss.forge.addon.dependencies.DependencyException;
Expand All @@ -17,16 +14,16 @@
import org.jboss.forge.addon.maven.resources.MavenModelResource;
import org.jboss.forge.addon.resource.FileResource;
import org.jboss.forge.addon.resource.ResourceFactory;
import org.jboss.forge.addon.ui.result.Result;
import org.jboss.forge.addon.ui.result.Results;
import org.jboss.forge.furnace.versions.SingleVersion;
import org.jboss.windup.config.furnace.FurnaceHolder;
import org.jboss.windup.util.PathUtil;
import org.jboss.windup.util.ZipUtil;
import org.jboss.windup.util.exception.WindupException;

/**
* Encloses the functionality of updating the rulesets.
*
* @author mbriskar
* @author Ondrej Zizka, ozizka at redhat.com
*/
public class RulesetsUpdater
Expand All @@ -38,6 +35,8 @@ public class RulesetsUpdater
public static final String RULESET_CORE_DIRECTORY = "migration-core";


private final DependencyResolver depsResolver;

public RulesetsUpdater(DependencyResolver depsResolver)
{
this.depsResolver = depsResolver;
Expand All @@ -46,48 +45,57 @@ public RulesetsUpdater(DependencyResolver depsResolver)

public boolean rulesetsNeedUpdate()
{
Coordinate lastRelease = new RulesetsUpdater(this.depsResolver).getLatestReleaseOf(RULES_GROUP_ID, RULESETS_ARTIFACT_ID);
Path windupRulesDir = PathUtil.getWindupRulesDir();
ResourceFactory factory = FurnaceHolder.getFurnace().getAddonRegistry().getServices(ResourceFactory.class).get();
Path coreRulesPropertiesPath = windupRulesDir.resolve(RULESET_CORE_DIRECTORY + "/META-INF/maven/org.jboss.windup.rules/windup-rulesets/pom.xml");
File pomXml = coreRulesPropertiesPath.toFile();
Coordinate lastRelease = this.getLatestReleaseOf(RULES_GROUP_ID, RULESETS_ARTIFACT_ID);
Path windupRulesDir = getRulesetsDir();
Path coreRulesPomPath = windupRulesDir.resolve(RULESET_CORE_DIRECTORY + "/META-INF/maven/org.jboss.windup.rules/windup-rulesets/pom.xml");
File pomXml = coreRulesPomPath.toFile();
if (!pomXml.exists())
return false;

ResourceFactory factory = FurnaceHolder.getFurnace().getAddonRegistry().getServices(ResourceFactory.class).get();
MavenModelResource pom = (MavenModelResource) factory.create(pomXml);
SingleVersion installed = new SingleVersion(pom.getCurrentModel().getVersion());
SingleVersion latest = new SingleVersion(lastRelease.getVersion());
return 0 > installed.compareTo(latest);
}

private final DependencyResolver depsResolver;

public Result replaceRulesetsDirectoryWithLatestRelease() throws ZipException, IOException, DependencyException
/**
* @return The directory which this updater works with.
*/
public Path getRulesetsDir()
{
Path windupRulesDir = PathUtil.getWindupRulesDir();
return windupRulesDir;
}

public String replaceRulesetsDirectoryWithLatestRelease() throws IOException, DependencyException
{
if (!this.rulesetsNeedUpdate())
return Results.fail("The ruleset is already in the most updated version.");
return null;

Path windupRulesDir = PathUtil.getWindupRulesDir();
Path windupRulesDir = getRulesetsDir();
Path coreRulesetsDir = windupRulesDir.resolve(RULESET_CORE_DIRECTORY);

FileUtils.deleteDirectory(coreRulesetsDir.toFile());
///FileUtils.deleteDirectory(coreRulesetsDir.toFile());

Coordinate rulesetsCoord = getLatestReleaseOf("org.jboss.windup.rules", "windup-rulesets");
if(rulesetsCoord == null)
throw new WindupException("No Windup release found.");
extractArtifact(rulesetsCoord, coreRulesetsDir.toFile());

return Results.success("Sucessfully updated the rulesets to version " + rulesetsCoord.getVersion() + " .");
return rulesetsCoord.getVersion();
}


public void extractArtifact(Coordinate artifactCoords, File targetDir) throws ZipException, DependencyException
public void extractArtifact(Coordinate artifactCoords, File targetDir) throws IOException, DependencyException
{
final DependencyQueryBuilder query = DependencyQueryBuilder.create(artifactCoords);
Dependency dependency = depsResolver.resolveArtifact(query);
FileResource<?> artifact = dependency.getArtifact();
ZipFile zipFile = new ZipFile(artifact.getFullyQualifiedName());
String rulesDir = targetDir.getAbsolutePath();
zipFile.extractAll(rulesDir);
//ZipFile zipFile = new ZipFile(artifact.getFullyQualifiedName());
//zipFile.extractAll(targetDir.getAbsolutePath());
ZipUtil.unzipToFolder(new File(artifact.getFullyQualifiedName()), targetDir);
}

/**
Expand All @@ -103,7 +111,7 @@ public Coordinate getLatestReleaseOf(String groupId, String artifactId)
// Find the latest non-SNAPSHOT version.
for(int i = availableVersions.size()-1; i >= 0; i--)
{
if(availableVersions.get(i).isSnapshot())
if(!availableVersions.get(i).isSnapshot())
return availableVersions.get(i);
}
return null;
Expand Down
11 changes: 5 additions & 6 deletions ui/addon/pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -28,7 +28,7 @@
<scope>provided</scope>
</dependency>

<dependency>
<dependency>
<groupId>org.jboss.forge.addon</groupId>
<artifactId>ui</artifactId>
<classifier>forge-addon</classifier>
Expand All @@ -55,26 +55,25 @@
<scope>provided</scope>
</dependency>

<dependency>
<dependency>
<groupId>org.jboss.forge.addon</groupId>
<artifactId>dependencies</artifactId>
<classifier>forge-addon</classifier>
<scope>provided</scope>
</dependency>

<dependency>
<dependency>
<groupId>net.lingala.zip4j</groupId>
<artifactId>zip4j</artifactId>
<version>1.3.2</version>
</dependency>
<dependency>

<dependency>
<groupId>org.jboss.forge.addon</groupId>
<artifactId>addon-manager-spi</artifactId>
<classifier>forge-addon</classifier>
<scope>provided</scope>
</dependency>


</dependencies>

Expand Down
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
package org.jboss.windup.ui;

import org.jboss.windup.exec.updater.RulesetsUpdater;
import javax.enterprise.event.Observes;
import javax.inject.Inject;
import javax.inject.Singleton;
Expand All @@ -25,10 +26,13 @@ public void perform(@Observes PostStartup event)
if (resolver.isUnsatisfied())
return;

if (new RulesetsUpdater(resolver.get()).rulesetsNeedUpdate())
final RulesetsUpdater updater = new RulesetsUpdater(resolver.get());

if (updater.rulesetsNeedUpdate())
{
System.out.println("");
System.out.println("Your ruleset is outdated. Consider running Windup with --updateRuleset or --updateDistribution. Press ENTER to continue.");
System.out.println("The rulesets are outdated: " + updater.getRulesetsDir()
+ "\nConsider running Windup with --updateRuleset or --updateDistribution. Press ENTER to continue.");
System.out.println("");
}
}
Expand Down
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
package org.jboss.windup.ui;

import org.jboss.windup.exec.updater.RulesetsUpdater;
import java.io.File;
import java.io.FilenameFilter;
import java.nio.file.Path;
Expand Down

0 comments on commit 549b344

Please sign in to comment.