Compare commits

..

No commits in common. "0376dfacab734b54db8770369cb2e4923ec233b2" and "cf7da8138dc98821faa27790825bd4acd06c22bb" have entirely different histories.

10 changed files with 120 additions and 124 deletions

View File

@ -35,6 +35,11 @@
<attribute name="module" value="true"/> <attribute name="module" value="true"/>
</attributes> </attributes>
</classpathentry> </classpathentry>
<classpathentry combineaccessrules="false" exported="true" kind="src" path="/scenarium-logger">
<attributes>
<attribute name="module" value="true"/>
</attributes>
</classpathentry>
<classpathentry combineaccessrules="false" kind="src" path="/atriasoft-exml"> <classpathentry combineaccessrules="false" kind="src" path="/atriasoft-exml">
<attributes> <attributes>
<attribute name="module" value="true"/> <attribute name="module" value="true"/>

View File

@ -5,11 +5,10 @@
open module org.atriasoft.island { open module org.atriasoft.island {
exports org.atriasoft.island; exports org.atriasoft.island;
exports org.atriasoft.island.model; exports org.atriasoft.island.model;
exports org.atriasoft.island.actions;
exports org.atriasoft.island.model.manifest; exports org.atriasoft.island.model.manifest;
//exports org.atriasoft.island.actions; //exports org.atriasoft.island.actions;
requires transitive org.atriasoft.reggol; requires transitive io.scenarium.logger;
requires java.base; requires java.base;
requires org.atriasoft.death; requires org.atriasoft.death;
requires org.atriasoft.exml; requires org.atriasoft.exml;

View File

@ -29,40 +29,15 @@ public class MainIsland {
@ArgCommand("island") @ArgCommand("island")
@ArgDescription("Package management system: download a specific worktree composed on artefact or real sources") @ArgDescription("Package management system: download a specific worktree composed on artefact or real sources")
public static class MainConfig { public static class MainConfig {
@ArgSubActions
static public final ActionList subActions = new ActionList();
static {
MainConfig.subActions.add(BaseInit.class);
MainConfig.subActions.add(BaseStatus.class);
MainConfig.subActions.add(BaseCheckout.class);
MainConfig.subActions.add(BaseSync.class);
MainConfig.subActions.add(BaseFetch.class);
MainConfig.subActions.add(BaseCommit.class);
MainConfig.subActions.add(BasePush.class);
MainConfig.subActions.add(VolatileAdd.class);
MainConfig.subActions.add(VolatileRemove.class);
MainConfig.subActions.add(VolatileList.class);
MainConfig.subActions.add(ManifestCheckout.class);
MainConfig.subActions.add(ManifestStatus.class);
MainConfig.subActions.add(Deliver.class);
MainConfig.subActions.add(DependencySync.class);
}
@ArgName("help") @ArgName("help")
@ArgAlias('h') @ArgAlias('h')
@ArgDescription("Display the application help") @ArgDescription("Display the application help")
public boolean help = false; public boolean help = false;
@ArgName("HELP")
@ArgAlias('H')
@ArgDescription("Display the application full help (with all actions helps)")
public boolean helpFull = false;
@ArgName("verbose") @ArgName("verbose")
@ArgAlias('v') @ArgAlias('v')
@ArgDescription("Display debug level (verbosity)") @ArgDescription("Display debug level (verbosity)")
@ArgChoice({ "none>>0", "error>>1", "warning>>2", "info>>3", "debug>>4", "verbose>>5", "extreme_verbose>>6" }) @ArgChoice({ "none>>0", "error>>1", "warning>>2", "info>>3", "debug>>4", "verbose>>5", "extreme_verbose>>6"})
public int verbose = 2; public int verbose = 2;
@ArgName("color") @ArgName("color")
@ -90,13 +65,23 @@ public class MainIsland {
@ArgDescription("Wait between 2 access on the server (needed when the server is really slow to remove ssh connection)") @ArgDescription("Wait between 2 access on the server (needed when the server is really slow to remove ssh connection)")
public int wait = 0; public int wait = 0;
public void applyConfig() { @ArgSubActions
Env.setWaitBetweenSeverCommand(this.wait); static public final ActionList subActions = new ActionList();
// Logger.setLevel(this.verbose); static {
Env.setDisplayFolderInstead_ofGitName(this.folderDisplay); MainConfig.subActions.add(BaseInit.class);
// Logger.setColor(this.color); MainConfig.subActions.add(BaseStatus.class);
Env.setFilterCommand(this.filter); MainConfig.subActions.add(BaseCheckout.class);
Env.setFetchManifest(this.fetchManifest); MainConfig.subActions.add(BaseSync.class);
MainConfig.subActions.add(BaseFetch.class);
MainConfig.subActions.add(BaseCommit.class);
MainConfig.subActions.add(BasePush.class);
MainConfig.subActions.add(VolatileAdd.class);
MainConfig.subActions.add(VolatileRemove.class);
MainConfig.subActions.add(VolatileList.class);
MainConfig.subActions.add(ManifestCheckout.class);
MainConfig.subActions.add(ManifestStatus.class);
MainConfig.subActions.add(Deliver.class);
MainConfig.subActions.add(DependencySync.class);
} }
public boolean check_boolean(final String value) { public boolean check_boolean(final String value) {
@ -105,16 +90,21 @@ public class MainIsland {
} }
return false; return false;
} }
public void applyConfig() {
Env.setWaitBetweenSeverCommand(this.wait);
// Logger.setLevel(this.verbose);
Env.setDisplayFolderInstead_ofGitName(this.folderDisplay);
// Logger.setColor(this.color);
Env.setFilterCommand(this.filter);
Env.setFetchManifest(this.fetchManifest);
}
} }
public static void main(final String[] args) throws ActionException { public static void main(final String[] args) throws ActionException {
final MainConfig tmp = new MainConfig(); MainConfig tmp = new MainConfig();
final ArgumentManager parser = new ArgumentManager(args, tmp, true); ArgumentManager parser = new ArgumentManager(args, tmp, true);
tmp.applyConfig(); tmp.applyConfig();
if (tmp.helpFull) {
parser.showHelpFull();
System.exit(0);
}
if (tmp.help) { if (tmp.help) {
parser.showHelp(); parser.showHelp();
System.exit(0); System.exit(0);

View File

@ -10,7 +10,7 @@ import java.util.Map;
import java.util.Map.Entry; import java.util.Map.Entry;
import org.atriasoft.aknot.exception.AknotException; import org.atriasoft.aknot.exception.AknotException;
import org.atriasoft.exml.XmlMapper; import org.atriasoft.exml.Exml;
import org.atriasoft.exml.exception.ExmlBuilderException; import org.atriasoft.exml.exception.ExmlBuilderException;
import org.atriasoft.exml.exception.ExmlException; import org.atriasoft.exml.exception.ExmlException;
import org.atriasoft.exml.exception.ExmlParserErrorMulti; import org.atriasoft.exml.exception.ExmlParserErrorMulti;
@ -283,10 +283,12 @@ public class Manifest {
Log.debug("PArse main XML config " + rootDirectory); Log.debug("PArse main XML config " + rootDirectory);
ManifestFile parsedElements = null; ManifestFile parsedElements = null;
final XmlMapper mapper = new XmlMapper();
try { try {
parsedElements = mapper.parse(this.manifestXml, ManifestFile.class); parsedElements = Exml.parseOne(this.manifestXml, ManifestFile.class, "manifest");
} catch (final ExmlException | AknotException e1) { } catch (final ExmlException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
} catch (final AknotException e1) {
// TODO Auto-generated catch block // TODO Auto-generated catch block
e1.printStackTrace(); e1.printStackTrace();
} }
@ -297,8 +299,11 @@ public class Manifest {
Log.debug("PArse <<SUB>> XML config " + maniPath); Log.debug("PArse <<SUB>> XML config " + maniPath);
ManifestFile tmpManifest = null; ManifestFile tmpManifest = null;
try { try {
tmpManifest = mapper.parse(maniPath, ManifestFile.class); tmpManifest = Exml.parseOne(maniPath, ManifestFile.class, "manifest");
} catch (final ExmlException | AknotException e) { } catch (final ExmlException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (final AknotException e) {
// TODO Auto-generated catch block // TODO Auto-generated catch block
e.printStackTrace(); e.printStackTrace();
} }

View File

@ -26,7 +26,7 @@ import org.atriasoft.ejson.Ejson;
import org.atriasoft.ejson.model.JsonArray; import org.atriasoft.ejson.model.JsonArray;
import org.atriasoft.ejson.model.JsonObject; import org.atriasoft.ejson.model.JsonObject;
import org.atriasoft.ejson.model.JsonString; import org.atriasoft.ejson.model.JsonString;
import org.atriasoft.exml.XmlMapper; import org.atriasoft.exml.Exml;
import org.atriasoft.exml.exception.ExmlException; import org.atriasoft.exml.exception.ExmlException;
import org.atriasoft.island.Config; import org.atriasoft.island.Config;
import org.atriasoft.island.Env; import org.atriasoft.island.Env;
@ -63,24 +63,24 @@ public class DependencySync {
public boolean sources = false; public boolean sources = false;
public Path createArtefactLinkFileName(final String fileName) { public Path createArtefactLinkFileName(final String fileName) {
final Path outPath = Env.getIslandPathArtifactoryLink().resolve(fileName); Path outPath = Env.getIslandPathArtifactoryLink().resolve(fileName);
return outPath; return outPath;
} }
public Path createArtefactLinkGLDFile(final String fileName) { public Path createArtefactLinkGLDFile(final String fileName) {
final Path outPath = Env.getIslandPathArtifactoryLink().resolve("GLD_" + fileName + ".json"); Path outPath = Env.getIslandPathArtifactoryLink().resolve("GLD_" + fileName + ".json");
return outPath; return outPath;
} }
public Path createBasePkgLocalFileName(final List<Artifactory> artefactories, final Dependency dependency, final String version) { public Path createBasePkgLocalFileName(final List<Artifactory> artefactories, final Dependency dependency, final String version) {
final Artifactory artifactory = findArtifactory(artefactories, dependency.remote()); Artifactory artifactory = findArtifactory(artefactories, dependency.remote());
final String out = artifactory.getName() + "/" + dependency.org().replace(".", "/") + "/" + dependency.name() + "/" + version; String out = artifactory.getName() + "/" + dependency.org().replace(".", "/") + "/" + dependency.name() + "/" + version;
final Path outPath = Env.getIslandPathArtifactory().resolve(out); Path outPath = Env.getIslandPathArtifactory().resolve(out);
return outPath; return outPath;
} }
public String createBasePkgRemoteFileName(final List<Artifactory> artefactories, final Dependency dependency, final String version) { public String createBasePkgRemoteFileName(final List<Artifactory> artefactories, final Dependency dependency, final String version) {
final Artifactory artifactory = findArtifactory(artefactories, dependency.remote()); Artifactory artifactory = findArtifactory(artefactories, dependency.remote());
String out = artifactory.getFetch(); String out = artifactory.getFetch();
while (out.endsWith("/")) { while (out.endsWith("/")) {
out = out.substring(0, out.length() - 1); out = out.substring(0, out.length() - 1);
@ -89,31 +89,31 @@ public class DependencySync {
return out; return out;
} }
private void createGLDFile(final PomMaven mavenPom, final Path createArtefactLinkGLDFile, final Path artefactLink) { private void createGLDFile(PomMaven mavenPom, Path createArtefactLinkGLDFile, Path artefactLink) {
final GLDDependModel model = new GLDDependModel(); GLDDependModel model = new GLDDependModel();
model.path.java.add(artefactLink.getFileName().toString()); model.path.java.add(artefactLink.getFileName().toString());
model.groupId = mavenPom.groupId(); model.groupId = mavenPom.groupId();
model.version = mavenPom.version(); model.version = mavenPom.version();
if (mavenPom.dependencies() != null) { if (mavenPom.dependencies() != null) {
for (final PomDependency elem : mavenPom.dependencies()) { for (PomDependency elem : mavenPom.dependencies()) {
model.dependency.add(elem.artifactId()); model.dependency.add(elem.artifactId());
} }
} }
// TODO: for later : create a generic serializer ... // TODO: for later : create a generic serializer ...
final StringBuilder data = new StringBuilder(); StringBuilder data = new StringBuilder();
final JsonObject root = new JsonObject(); JsonObject root = new JsonObject();
root.put("type", new JsonString(model.type)); root.put("type", new JsonString(model.type));
root.put("group-id", new JsonString(model.groupId)); root.put("group-id", new JsonString(model.groupId));
root.put("version", new JsonString(model.version)); root.put("version", new JsonString(model.version));
final JsonObject path = new JsonObject(); JsonObject path = new JsonObject();
root.put("path", path); root.put("path", path);
final JsonArray java = new JsonArray(); JsonArray java = new JsonArray();
for (final String elem : model.path.java) { for (String elem : model.path.java) {
java.add(new JsonString(elem)); java.add(new JsonString(elem));
} }
path.put("java", java); path.put("java", java);
final JsonArray dep = new JsonArray(); JsonArray dep = new JsonArray();
for (final String elem : model.dependency) { for (String elem : model.dependency) {
dep.add(new JsonString(elem)); dep.add(new JsonString(elem));
} }
root.put("dependency", dep); root.put("dependency", dep);
@ -139,10 +139,10 @@ public class DependencySync {
private void downloadPackage(final List<Artifactory> artefactories, final Dependency dependency, final List<UpdateDependency> alreadyDone) throws Exception { private void downloadPackage(final List<Artifactory> artefactories, final Dependency dependency, final List<UpdateDependency> alreadyDone) throws Exception {
Log.debug("download : " + dependency); Log.debug("download : " + dependency);
for (final UpdateDependency elem : alreadyDone) { for (UpdateDependency elem : alreadyDone) {
if (elem.dependency.org().equals(dependency.org()) && elem.dependency.name().equals(dependency.name()) && elem.dependency.remote().equals(dependency.remote())) { if (elem.dependency.org().equals(dependency.org()) && elem.dependency.name().equals(dependency.name()) && elem.dependency.remote().equals(dependency.remote())) {
// find element ==> check version // find element ==> check version
for (final String version : elem.download) { for (String version : elem.download) {
if (version.equals(dependency.revision())) { if (version.equals(dependency.revision())) {
// already download ==> skip ... // already download ==> skip ...
return; return;
@ -151,16 +151,15 @@ public class DependencySync {
} }
} }
final String metadataFile = createMavenMetadataRemoteFileName(artefactories, dependency); String metadataFile = createMavenMetadataRemoteFileName(artefactories, dependency);
Log.verbose("Metadata position: " + metadataFile); Log.verbose("Metadata position: " + metadataFile);
final Path localPath = createMetadataLocalFileName(artefactories, dependency); Path localPath = createMetadataLocalFileName(artefactories, dependency);
final String dataAsString = readAllMatadataAndStore(metadataFile, localPath); String dataAsString = readAllMatadataAndStore(metadataFile, localPath);
Log.verbose("dataAsString: " + dataAsString); Log.verbose("dataAsString: " + dataAsString);
MavenMetadata metaData = null; MavenMetadata metaData = null;
final XmlMapper mapper = new XmlMapper();
try { try {
metaData = mapper.parse(dataAsString, MavenMetadata.class); metaData = Exml.parseOne(dataAsString, MavenMetadata.class, "metadata");
} catch (final ExmlException e) { } catch (ExmlException e) {
// TODO Auto-generated catch block // TODO Auto-generated catch block
e.printStackTrace(); e.printStackTrace();
} }
@ -170,17 +169,17 @@ public class DependencySync {
// TODO : Check if the version is download // TODO : Check if the version is download
final String lastReleaseTag = metaData.versioning().release(); String lastReleaseTag = metaData.versioning().release();
final String remotePakageFileName = createBasePkgRemoteFileName(artefactories, dependency, lastReleaseTag); String remotePakageFileName = createBasePkgRemoteFileName(artefactories, dependency, lastReleaseTag);
final Path localPackageFileName = createBasePkgLocalFileName(artefactories, dependency, lastReleaseTag); Path localPackageFileName = createBasePkgLocalFileName(artefactories, dependency, lastReleaseTag);
// pom sources // pom sources
String base = getPomFileName(dependency, lastReleaseTag); String base = getPomFileName(dependency, lastReleaseTag);
readRemoteFileAndStore(remotePakageFileName + "/" + base, localPackageFileName.resolve(base), base); readRemoteFileAndStore(remotePakageFileName + "/" + base, localPackageFileName.resolve(base), base);
PomMaven mavenPom = null; PomMaven mavenPom = null;
try { try {
mavenPom = mapper.parse(localPackageFileName.resolve(base), PomMaven.class); mavenPom = Exml.parseOne(localPackageFileName.resolve(base), PomMaven.class, "project");
} catch (final ExmlException e) { } catch (ExmlException e) {
// TODO Auto-generated catch block // TODO Auto-generated catch block
e.printStackTrace(); e.printStackTrace();
} }
@ -211,7 +210,7 @@ public class DependencySync {
readRemoteFileAndStore(remotePakageFileName + "/" + base, localPackageFileName.resolve(base), base); readRemoteFileAndStore(remotePakageFileName + "/" + base, localPackageFileName.resolve(base), base);
*/ */
boolean find = false; boolean find = false;
for (final UpdateDependency elem : alreadyDone) { for (UpdateDependency elem : alreadyDone) {
if (elem.dependency.org().equals(dependency.org()) && elem.dependency.name().equals(dependency.name()) && elem.dependency.remote().equals(dependency.remote())) { if (elem.dependency.org().equals(dependency.org()) && elem.dependency.name().equals(dependency.name()) && elem.dependency.remote().equals(dependency.remote())) {
// find element ==> check version // find element ==> check version
elem.download.add(dependency.revision()); elem.download.add(dependency.revision());
@ -220,14 +219,14 @@ public class DependencySync {
} }
} }
if (!find) { if (!find) {
final UpdateDependency tmpp = new UpdateDependency(); UpdateDependency tmpp = new UpdateDependency();
tmpp.dependency = dependency; tmpp.dependency = dependency;
tmpp.download.add(dependency.revision()); tmpp.download.add(dependency.revision());
alreadyDone.add(tmpp); alreadyDone.add(tmpp);
} }
if (mavenPom != null && mavenPom.dependencies() != null) { if (mavenPom != null && mavenPom.dependencies() != null) {
for (final PomDependency value : mavenPom.dependencies()) { for (PomDependency value : mavenPom.dependencies()) {
final Dependency dependencyTmp = new Dependency(value.groupId(), value.artifactId(), value.version(), dependency.remote()); Dependency dependencyTmp = new Dependency(value.groupId(), value.artifactId(), value.version(), dependency.remote());
downloadPackage(artefactories, dependencyTmp, alreadyDone); downloadPackage(artefactories, dependencyTmp, alreadyDone);
} }
} }
@ -235,28 +234,28 @@ public class DependencySync {
@ArgExecute @ArgExecute
public void execute() throws ActionException, Exception { public void execute() throws ActionException, Exception {
final List<UpdateDependency> alreadyDone = new ArrayList<>(); List<UpdateDependency> alreadyDone = new ArrayList<>();
// check system is OK // check system is OK
Manifest.checkIsInit(); Manifest.checkIsInit();
final ConfigManifest configuration = Config.getUniqueConfig(); ConfigManifest configuration = Config.getUniqueConfig();
// load the manifest after pulling it (if possible) // load the manifest after pulling it (if possible)
final Path file_source_manifest = Env.getIslandPathManifest().resolve(configuration.getManifestName()); Path file_source_manifest = Env.getIslandPathManifest().resolve(configuration.getManifestName());
if (!Files.exists(file_source_manifest)) { if (!Files.exists(file_source_manifest)) {
Log.critical("Missing manifest file : '" + file_source_manifest + "'"); Log.critical("Missing manifest file : '" + file_source_manifest + "'");
} }
final Manifest mani = new Manifest(file_source_manifest); Manifest mani = new Manifest(file_source_manifest);
final List<Artifactory> artefactories = mani.getAllArtefactories(); List<Artifactory> artefactories = mani.getAllArtefactories();
final List<Dependency> dependencies = mani.getAllDependencies(); List<Dependency> dependencies = mani.getAllDependencies();
Log.info("Synchronize of: " + dependencies.size() + " dependenc" + Tools.getPlural(dependencies)); Log.info("Synchronize of: " + dependencies.size() + " dependenc" + Tools.getPlural(dependencies));
Log.info("base on: " + artefactories.size() + " artefactor" + Tools.getPlural(artefactories)); Log.info("base on: " + artefactories.size() + " artefactor" + Tools.getPlural(artefactories));
int id_element = 0; int id_element = 0;
for (final Dependency elem : dependencies) { for (Dependency elem : dependencies) {
id_element++; id_element++;
final String base_display = Tools.getListBaseDisplay(id_element, dependencies.size(), elem); String base_display = Tools.getListBaseDisplay(id_element, dependencies.size(), elem);
Log.info("dep-sync : " + base_display); Log.info("dep-sync : " + base_display);
Log.debug("elem : " + elem); Log.debug("elem : " + elem);
downloadPackage(artefactories, elem, alreadyDone); downloadPackage(artefactories, elem, alreadyDone);
@ -266,7 +265,7 @@ public class DependencySync {
Artifactory findArtifactory(final List<Artifactory> artefactories, final String name) { Artifactory findArtifactory(final List<Artifactory> artefactories, final String name) {
Artifactory out = null; Artifactory out = null;
for (final Artifactory elem : artefactories) { for (Artifactory elem : artefactories) {
if ("default".equals(elem.getName())) { if ("default".equals(elem.getName())) {
out = elem; out = elem;
break; break;
@ -276,7 +275,8 @@ public class DependencySync {
if (out == null) { if (out == null) {
out = new Artifactory("default", "https://repo1.maven.org/maven2", "maven"); out = new Artifactory("default", "https://repo1.maven.org/maven2", "maven");
} }
for (final Artifactory elem : artefactories) { boolean find = false;
for (Artifactory elem : artefactories) {
if (name.equals(elem.getName())) { if (name.equals(elem.getName())) {
return elem; return elem;
} }
@ -310,38 +310,38 @@ public class DependencySync {
void listFiles(final Path path) { void listFiles(final Path path) {
Log.info("List of file in " + path); Log.info("List of file in " + path);
try { try {
final ZipFile zipFile = new ZipFile(path.toFile()); ZipFile zipFile = new ZipFile(path.toFile());
final Enumeration<? extends ZipEntry> entries = zipFile.entries(); Enumeration<? extends ZipEntry> entries = zipFile.entries();
while (entries.hasMoreElements()) { while (entries.hasMoreElements()) {
final ZipEntry entry = entries.nextElement(); ZipEntry entry = entries.nextElement();
Log.info(" - " + entry.getName() + " (" + entry.getSize() + ")"); Log.info(" - " + entry.getName() + " (" + entry.getSize() + ")");
//InputStream stream = zipFile.getInputStream(entry); //InputStream stream = zipFile.getInputStream(entry);
} }
} catch (final IOException ex) { } catch (IOException ex) {
Log.error("Catch Exception : " + ex.getLocalizedMessage()); Log.error("Catch Exception : " + ex.getLocalizedMessage());
ex.printStackTrace(); ex.printStackTrace();
} }
} }
String readAllMatadataAndStore(final String urlPath, final Path path) throws Exception { String readAllMatadataAndStore(final String urlPath, final Path path) throws Exception {
final URL url = new URL(urlPath); URL url = new URL(urlPath);
final HttpURLConnection con = (HttpURLConnection) url.openConnection(); HttpURLConnection con = (HttpURLConnection) url.openConnection();
con.setRequestMethod("GET"); con.setRequestMethod("GET");
con.setConnectTimeout(5000); con.setConnectTimeout(5000);
con.setReadTimeout(5000); con.setReadTimeout(5000);
con.setInstanceFollowRedirects(false); con.setInstanceFollowRedirects(false);
final StringBuilder result = new StringBuilder(); StringBuilder result = new StringBuilder();
try (BufferedReader reader = new BufferedReader(new InputStreamReader(con.getInputStream()))) { try (BufferedReader reader = new BufferedReader(new InputStreamReader(con.getInputStream()))) {
for (String line; (line = reader.readLine()) != null;) { for (String line; (line = reader.readLine()) != null;) {
result.append(line); result.append(line);
result.append("\n"); result.append("\n");
} }
} catch (final Exception ex) { } catch (Exception ex) {
Log.error("Can not retrive data from artefactory ..." + ex.getLocalizedMessage()); Log.error("Can not retrive data from artefactory ..." + ex.getLocalizedMessage());
throw ex; throw ex;
} }
final String dataAsString = result.toString(); String dataAsString = result.toString();
Log.verbose("return=" + dataAsString); Log.verbose("return=" + dataAsString);
Tools.fileWriteData(path, dataAsString); Tools.fileWriteData(path, dataAsString);
return dataAsString; return dataAsString;
@ -354,24 +354,24 @@ public class DependencySync {
} }
try { try {
if (!Files.exists(path.getParent())) { if (!Files.exists(path.getParent())) {
final File file = path.getParent().toFile(); File file = path.getParent().toFile();
if (!file.mkdirs()) { if (!file.mkdirs()) {
Log.critical("Can not create the path:" + path.getParent()); Log.critical("Can not create the path:" + path.getParent());
} }
} }
final URL url = new URL(urlPath); URL url = new URL(urlPath);
final HttpURLConnection con = (HttpURLConnection) url.openConnection(); HttpURLConnection con = (HttpURLConnection) url.openConnection();
con.setRequestMethod("GET"); con.setRequestMethod("GET");
con.setConnectTimeout(5000); con.setConnectTimeout(5000);
con.setReadTimeout(5000); con.setReadTimeout(5000);
con.setInstanceFollowRedirects(false); con.setInstanceFollowRedirects(false);
final int BUFFER_SIZE = 1024 * 1024; final int BUFFER_SIZE = 1024 * 1024;
final InputStream inputStream = con.getInputStream(); InputStream inputStream = con.getInputStream();
final Path tmpFile = path.getParent().resolve(path.getFileName() + "__tmp"); Path tmpFile = path.getParent().resolve(path.getFileName() + "__tmp");
final FileOutputStream outputStream = new FileOutputStream(tmpFile.toFile()); FileOutputStream outputStream = new FileOutputStream(tmpFile.toFile());
int bytesRead = -1; int bytesRead = -1;
int totalRead = 0; int totalRead = 0;
final byte[] buffer = new byte[BUFFER_SIZE]; byte[] buffer = new byte[BUFFER_SIZE];
while ((bytesRead = inputStream.read(buffer)) != -1) { while ((bytesRead = inputStream.read(buffer)) != -1) {
outputStream.write(buffer, 0, bytesRead); outputStream.write(buffer, 0, bytesRead);
totalRead += bytesRead; totalRead += bytesRead;
@ -382,7 +382,7 @@ public class DependencySync {
inputStream.close(); inputStream.close();
// this is the way to have atomic replacement of file and not partial downloaded file ==> move is 99.999999% atomic. // this is the way to have atomic replacement of file and not partial downloaded file ==> move is 99.999999% atomic.
Files.move(tmpFile, path); Files.move(tmpFile, path);
} catch (final FileNotFoundException ex) { } catch (FileNotFoundException ex) {
Log.warning("File not found: " + urlPath); Log.warning("File not found: " + urlPath);
} finally { } finally {

View File

@ -1,7 +1,7 @@
package org.atriasoft.island.internal; package org.atriasoft.island.internal;
import org.atriasoft.reggol.LogLevel; import io.scenarium.logger.LogLevel;
import org.atriasoft.reggol.Logger; import io.scenarium.logger.Logger;
public class Log { public class Log {
private static final boolean FORCE = false; private static final boolean FORCE = false;

View File

@ -9,14 +9,13 @@ import java.util.ListIterator;
import org.atriasoft.aknot.annotation.AknotList; import org.atriasoft.aknot.annotation.AknotList;
import org.atriasoft.aknot.annotation.AknotName; import org.atriasoft.aknot.annotation.AknotName;
import org.atriasoft.aknot.exception.AknotException; import org.atriasoft.aknot.exception.AknotException;
import org.atriasoft.exml.XmlMapper; import org.atriasoft.exml.Exml;
import org.atriasoft.exml.exception.ExmlBuilderException; import org.atriasoft.exml.exception.ExmlBuilderException;
import org.atriasoft.exml.exception.ExmlException; import org.atriasoft.exml.exception.ExmlException;
import org.atriasoft.island.Env; import org.atriasoft.island.Env;
import org.atriasoft.island.internal.Log; import org.atriasoft.island.internal.Log;
import org.atriasoft.island.model.Volatile; import org.atriasoft.island.model.Volatile;
@AknotName("config-island")
public class ConfigManifest { public class ConfigManifest {
public static ConfigManifest load() { public static ConfigManifest load() {
@ -24,10 +23,9 @@ public class ConfigManifest {
} }
public static ConfigManifest load(final Path path) { public static ConfigManifest load(final Path path) {
ConfigManifest root = null; ConfigManifest[] root = null;
final XmlMapper mapper = new XmlMapper();
try { try {
root = mapper.parse(path, ConfigManifest.class); root = Exml.parse(path, ConfigManifest.class, "config-island");
} catch (final ExmlException e) { } catch (final ExmlException e) {
Log.error("Can not parse the file.1. " + path); Log.error("Can not parse the file.1. " + path);
e.printStackTrace(); e.printStackTrace();
@ -35,7 +33,10 @@ public class ConfigManifest {
Log.error("Can not parse the file.2. " + path); Log.error("Can not parse the file.2. " + path);
e.printStackTrace(); e.printStackTrace();
} }
return root; if (root.length != 1) {
Log.error("Can not parse the file.3. " + path);
}
return root[0];
} }
private String repo = ""; private String repo = "";
@ -180,10 +181,9 @@ public class ConfigManifest {
} }
public void store(final Path path) throws ExmlBuilderException { public void store(final Path path) throws ExmlBuilderException {
final XmlMapper mapper = new XmlMapper();
try { try {
mapper.store(this, path); Exml.store(path, this, "config-island");
} catch (final ExmlException | IOException | AknotException ex) { } catch (final ExmlException | IOException ex) {
Log.warning("detect throw: " + ex.getMessage()); Log.warning("detect throw: " + ex.getMessage());
ex.printStackTrace(); ex.printStackTrace();
} }

View File

@ -10,7 +10,6 @@ import org.atriasoft.aknot.annotation.AknotManaged;
import org.atriasoft.aknot.annotation.AknotName; import org.atriasoft.aknot.annotation.AknotName;
@AknotIgnoreUnknown @AknotIgnoreUnknown
@AknotName("manifest")
public class ManifestFile { public class ManifestFile {
private Path fileRealPath = null; private Path fileRealPath = null;
private List<ProjectConfig> projects = new ArrayList<>(); private List<ProjectConfig> projects = new ArrayList<>();

View File

@ -1,12 +1,11 @@
package org.atriasoft.island.model.maven; package org.atriasoft.island.model.maven;
import org.atriasoft.aknot.annotation.AknotDefaultAttribute;
import org.atriasoft.aknot.annotation.AknotIgnoreUnknown; import org.atriasoft.aknot.annotation.AknotIgnoreUnknown;
import org.atriasoft.aknot.annotation.AknotName; import org.atriasoft.aknot.annotation.AknotName;
import org.atriasoft.aknot.annotation.AknotDefaultAttribute;
@AknotDefaultAttribute(false) @AknotDefaultAttribute(false)
@AknotIgnoreUnknown @AknotIgnoreUnknown
@AknotName("metadata")
public record MavenMetadata( public record MavenMetadata(
@AknotName("groupId") String groupId, @AknotName("groupId") String groupId,
@AknotName("artifactId") String artifactId, @AknotName("artifactId") String artifactId,

View File

@ -10,7 +10,6 @@ import org.atriasoft.aknot.annotation.AknotOptional;
@AknotDefaultNullValue @AknotDefaultNullValue
@AknotIgnoreUnknown @AknotIgnoreUnknown
@AknotName("project")
public record PomMaven( public record PomMaven(
@AknotName("modelVersion") String modelVersion, @AknotName("modelVersion") String modelVersion,
@AknotName("groupId") String groupId, @AknotName("groupId") String groupId,