From 350df0bfa2d87d60b0b0a95c3ecee2b2a8ff3ae2 Mon Sep 17 00:00:00 2001 From: "Christian P. MOMON" Date: Sat, 19 Sep 2020 02:37:52 +0200 Subject: [PATCH] Step in dev. --- log4j.properties | 5 +- src/META-INF/MANIFEST.MF | 3 - src/META-INF/context.xml | 9 --- .../statoolinfos/StatoolInfosLauncher.java | 2 +- .../statoolinfos/cli/StatoolInfosCLI.java | 7 +- .../devinsy/statoolinfos/core/CrawlCache.java | 45 ++++++++--- .../devinsy/statoolinfos/core/Federation.java | 39 ++++++++++ .../statoolinfos/core/Organization.java | 42 +++++++++++ src/fr/devinsy/statoolinfos/core/Service.java | 31 +++++++- .../statoolinfos/core/StatoolInfos.java | 8 -- .../statoolinfos/htmlize/FederationPage.java | 10 ++- .../statoolinfos/htmlize/Htmlizer.java | 70 ++++++++++-------- .../htmlize/OrganizationPage.java | 5 +- .../statoolinfos/htmlize/ServicePage.java | 5 +- .../statoolinfos/htmlize/federation.xhtml | 44 +++++++---- .../statoolinfos/htmlize/organization.xhtml | 4 +- .../statoolinfos/htmlize/service.xhtml | 6 +- .../stuff/default-organization-logo.png | Bin 0 -> 44979 bytes .../statoolinfos/util}/BuildInformation.java | 2 +- .../{utils => util}/CompareUtils.java | 2 +- .../statoolinfos/{utils => util}/Files.java | 2 +- .../{utils => util}/SQLUtils.java | 2 +- 22 files changed, 248 insertions(+), 95 deletions(-) delete mode 100644 src/META-INF/MANIFEST.MF delete mode 100644 src/META-INF/context.xml create mode 100644 src/fr/devinsy/statoolinfos/htmlize/stuff/default-organization-logo.png rename src/{utils => fr/devinsy/statoolinfos/util}/BuildInformation.java (99%) rename src/fr/devinsy/statoolinfos/{utils => util}/CompareUtils.java (99%) rename src/fr/devinsy/statoolinfos/{utils => util}/Files.java (97%) rename src/fr/devinsy/statoolinfos/{utils => util}/SQLUtils.java (99%) diff --git a/log4j.properties b/log4j.properties index 8a18d37..7b82791 100644 --- a/log4j.properties +++ b/log4j.properties @@ -2,11 +2,12 @@ # ################# # priority setting: DEBUG < INFO < WARN < ERROR -log4j.rootLogger = DEBUG, console +log4j.rootLogger = INFO, console log4j.logger.fr.devinsy.statoolinfos = INFO log4j.logger.fr.devinsy.xidyn = WARN #-- log4j.appender.console = org.apache.log4j.ConsoleAppender log4j.appender.console.layout = org.apache.log4j.PatternLayout -log4j.appender.console.layout.ConversionPattern = %d{ISO8601} - StatoolInfos [%-5p] %34.34c.%25M - %m%n +#log4j.appender.console.layout.ConversionPattern = %d{ISO8601} - StatoolInfos [%-5p] %34.34c.%25M - %m%n +log4j.appender.console.layout.ConversionPattern = %m%n diff --git a/src/META-INF/MANIFEST.MF b/src/META-INF/MANIFEST.MF deleted file mode 100644 index 5e94951..0000000 --- a/src/META-INF/MANIFEST.MF +++ /dev/null @@ -1,3 +0,0 @@ -Manifest-Version: 1.0 -Class-Path: - diff --git a/src/META-INF/context.xml b/src/META-INF/context.xml deleted file mode 100644 index e7fe6fb..0000000 --- a/src/META-INF/context.xml +++ /dev/null @@ -1,9 +0,0 @@ - - - - - diff --git a/src/fr/devinsy/statoolinfos/StatoolInfosLauncher.java b/src/fr/devinsy/statoolinfos/StatoolInfosLauncher.java index 2d8a9a0..8ad8377 100644 --- a/src/fr/devinsy/statoolinfos/StatoolInfosLauncher.java +++ b/src/fr/devinsy/statoolinfos/StatoolInfosLauncher.java @@ -52,7 +52,7 @@ public final class StatoolInfosLauncher public static void main(final String[] args) { // Configure log. - File loggerConfig = new File("log4j.peroperties"); + File loggerConfig = new File("log4j.properties"); if (loggerConfig.exists()) { PropertyConfigurator.configure(loggerConfig.getAbsolutePath()); diff --git a/src/fr/devinsy/statoolinfos/cli/StatoolInfosCLI.java b/src/fr/devinsy/statoolinfos/cli/StatoolInfosCLI.java index fb600de..6947574 100644 --- a/src/fr/devinsy/statoolinfos/cli/StatoolInfosCLI.java +++ b/src/fr/devinsy/statoolinfos/cli/StatoolInfosCLI.java @@ -26,9 +26,9 @@ import org.slf4j.Logger; import org.slf4j.LoggerFactory; import fr.devinsy.statoolinfos.core.StatoolInfos; -import fr.devinsy.statoolinfos.utils.Files; +import fr.devinsy.statoolinfos.util.BuildInformation; +import fr.devinsy.statoolinfos.util.Files; import fr.devinsy.strings.StringList; -import utils.BuildInformation; /** * The Class StatoolInfosCLI manages a Command Line Interface for @@ -292,5 +292,8 @@ public final class StatoolInfosCLI logger.info("Bad usage."); displayHelp(); } + + // + logger.info("Done."); } } diff --git a/src/fr/devinsy/statoolinfos/core/CrawlCache.java b/src/fr/devinsy/statoolinfos/core/CrawlCache.java index 76fff07..776d3b0 100644 --- a/src/fr/devinsy/statoolinfos/core/CrawlCache.java +++ b/src/fr/devinsy/statoolinfos/core/CrawlCache.java @@ -152,31 +152,56 @@ public class CrawlCache } /** - * Restore file to. + * Restore logo to. * * @param url * the url - * @param targetDirectory - * the target directory + * @param target + * the target + * @param seed + * the seed * @throws IOException * Signals that an I/O exception has occurred. */ - public void restoreLogoTo(final URL url, final File target) throws IOException + public void restoreLogoTo(final URL url, final File target, final String seed) throws IOException { - if (url == null) + if ((target == null) || (seed == null)) { - StatoolInfosUtils.generateCatLogo(target.getName(), target); + throw new IllegalArgumentException("Null parameter."); } else { - File logoFile = restoreFile(url); - if (logoFile == null) + if (url == null) { - StatoolInfosUtils.generateCatLogo(target.getName(), target); + try + { + StatoolInfosUtils.generateCatLogo(seed, target); + } + catch (IOException exception) + { + logger.warn("CatGeneratoring failed for {}: {}", seed, exception.getMessage()); + StatoolInfosUtils.copyRessource("/fr/devinsy/statoolinfos/htmlize/stuff/default-organization-logo.png", target); + } } else { - FileUtils.copyFile(logoFile, target); + File logoFile = restoreFile(url); + if (logoFile == null) + { + try + { + StatoolInfosUtils.generateCatLogo(seed, target); + } + catch (IOException exception) + { + logger.warn("CatGeneratoring failed for {}: {}", seed, exception.getMessage()); + StatoolInfosUtils.copyRessource("/fr/devinsy/statoolinfos/htmlize/stuff/default-organization-logo.png", target); + } + } + else + { + FileUtils.copyFile(logoFile, target); + } } } } diff --git a/src/fr/devinsy/statoolinfos/core/Federation.java b/src/fr/devinsy/statoolinfos/core/Federation.java index 4eb7cf7..030c741 100644 --- a/src/fr/devinsy/statoolinfos/core/Federation.java +++ b/src/fr/devinsy/statoolinfos/core/Federation.java @@ -80,6 +80,11 @@ public class Federation extends PathPropertyList return result; } + /** + * Gets the local file. + * + * @return the local file + */ public File getLocalFile() { return this.localFile; @@ -124,11 +129,45 @@ public class Federation extends PathPropertyList return result; } + /** + * Gets the organiation count. + * + * @return the organiation count + */ + public int getOrganiationCount() + { + int result; + + result = this.organizations.size(); + + // + return result; + } + public Organizations getOrganizations() { return this.organizations; } + /** + * Gets the service count. + * + * @return the service count + */ + public int getServiceCount() + { + int result; + + result = 0; + for (Organization organization : this.organizations) + { + result += organization.getServiceCount(); + } + + // + return result; + } + /** * Gets the technical name. * diff --git a/src/fr/devinsy/statoolinfos/core/Organization.java b/src/fr/devinsy/statoolinfos/core/Organization.java index 61e859f..a555f3a 100644 --- a/src/fr/devinsy/statoolinfos/core/Organization.java +++ b/src/fr/devinsy/statoolinfos/core/Organization.java @@ -19,6 +19,8 @@ package fr.devinsy.statoolinfos.core; import java.io.File; +import java.net.MalformedURLException; +import java.net.URL; import org.apache.commons.lang3.StringUtils; @@ -78,6 +80,31 @@ public class Organization extends PathPropertyList return this.localFile; } + /** + * Gets the logo URL. + * + * @return the logo URL + * @throws MalformedURLException + * the malformed URL exception + */ + public URL getLogoURL() throws MalformedURLException + { + URL result; + + String path = get("organization.logo"); + if ((StringUtils.isBlank(path)) || (!StringUtils.startsWith(path, "http"))) + { + result = null; + } + else + { + result = new URL(path); + } + + // + return result; + } + /** * Gets the name. * @@ -93,6 +120,21 @@ public class Organization extends PathPropertyList return result; } + /** + * Gets the service count. + * + * @return the service count + */ + public int getServiceCount() + { + int result; + + result = this.services.size(); + + // + return result; + } + public Services getServices() { return this.services; diff --git a/src/fr/devinsy/statoolinfos/core/Service.java b/src/fr/devinsy/statoolinfos/core/Service.java index bfab9d5..8f74448 100644 --- a/src/fr/devinsy/statoolinfos/core/Service.java +++ b/src/fr/devinsy/statoolinfos/core/Service.java @@ -19,12 +19,16 @@ package fr.devinsy.statoolinfos.core; import java.io.File; +import java.net.MalformedURLException; +import java.net.URL; + +import org.apache.commons.lang3.StringUtils; import fr.devinsy.statoolinfos.properties.PathProperties; import fr.devinsy.statoolinfos.properties.PathPropertyList; /** - * The Class PathProperty. + * The Class Service. */ public class Service extends PathPropertyList { @@ -70,6 +74,31 @@ public class Service extends PathPropertyList return this.localFile; } + /** + * Gets the logo URL. + * + * @return the logo URL + * @throws MalformedURLException + * the malformed URL exception + */ + public URL getLogoURL() throws MalformedURLException + { + URL result; + + String path = get("service.logo"); + if ((StringUtils.isBlank(path)) || (!StringUtils.startsWith(path, "http"))) + { + result = null; + } + else + { + result = new URL(path); + } + + // + return result; + } + /** * Gets the name. * diff --git a/src/fr/devinsy/statoolinfos/core/StatoolInfos.java b/src/fr/devinsy/statoolinfos/core/StatoolInfos.java index f79b407..fa8b4f4 100644 --- a/src/fr/devinsy/statoolinfos/core/StatoolInfos.java +++ b/src/fr/devinsy/statoolinfos/core/StatoolInfos.java @@ -215,11 +215,7 @@ public class StatoolInfos PathProperties input = PathPropertyUtils.load(configuration.getCrawlInput()); cache.storeQuietly(input.getURL("federation.logo")); - cache.storeQuietly(input.getURL("federation.logo.url")); cache.storeQuietly(input.getURL("organization.logo")); - cache.storeQuietly(input.getURL("organization.logo.url")); - cache.storeQuietly(input.getURL("service.logo")); - cache.storeQuietly(input.getURL("service.logo.url")); PathProperties subs = input.getByPrefix("subs"); for (PathProperty property : subs) @@ -255,12 +251,8 @@ public class StatoolInfos properties.add(crawlSection); cache.storeProperties(url, properties); - cache.storeQuietly(properties.getURL("federation.logo")); - cache.storeQuietly(properties.getURL("federation.logo.url")); cache.storeQuietly(properties.getURL("organization.logo")); - cache.storeQuietly(properties.getURL("organization.logo.url")); cache.storeQuietly(properties.getURL("service.logo")); - cache.storeQuietly(properties.getURL("service.logo.url")); // PathProperties subs = properties.getByPrefix("subs"); diff --git a/src/fr/devinsy/statoolinfos/htmlize/FederationPage.java b/src/fr/devinsy/statoolinfos/htmlize/FederationPage.java index 3b977d1..ec9bf56 100644 --- a/src/fr/devinsy/statoolinfos/htmlize/FederationPage.java +++ b/src/fr/devinsy/statoolinfos/htmlize/FederationPage.java @@ -28,10 +28,10 @@ import org.slf4j.LoggerFactory; import fr.devinsy.statoolinfos.core.Federation; import fr.devinsy.statoolinfos.core.Organization; import fr.devinsy.statoolinfos.core.StatoolInfosException; +import fr.devinsy.statoolinfos.util.BuildInformation; import fr.devinsy.xidyn.XidynException; import fr.devinsy.xidyn.data.TagDataManager; import fr.devinsy.xidyn.presenters.PresenterUtils; -import utils.BuildInformation; /** * The Class OrganizationPage. @@ -62,19 +62,23 @@ public class FederationPage data.setContent("versionsup", BuildInformation.instance().version()); data.setContent("lastUpdateDate", LocalDateTime.now().format(DateTimeFormatter.ofPattern("dd/MM/yyyy HH':'mm", Locale.FRANCE))); + data.setAttribute("federationRawButton", "href", federation.getTechnicalName() + "-raw.properties"); + data.setAttribute("federationLogo", "src", federation.getTechnicalName() + "-logo.jpg"); data.setEscapedContent("federationName", federation.getName()); data.setEscapedContent("federationDescription", federation.getDescription()); data.setContent("organizationCount", federation.getOrganizations().size()); - data.setAttribute("federationRawButton", "href", federation.getTechnicalName() + "-origin.properties"); + data.setContent("serviceCount", federation.getServiceCount()); int index = 0; for (Organization organization : federation.getOrganizations()) { - data.setEscapedContent("organizationListLine", index, "organizationListLineNameLink", organization.getName()); data.setAttribute("organizationListLine", index, "organizationListLineNameLink", "href", organization.getTechnicalName() + ".xhtml"); + data.setAttribute("organizationListLine", index, "organizationListLineLogo", "src", organization.getTechnicalName() + "-logo.jpg"); + data.setEscapedContent("organizationListLine", index, "organizationListLineNameValue", organization.getName()); data.setEscapedContent("organizationListLine", index, "organizationListLineUrlLink", organization.getWebsite()); data.setAttribute("organizationListLine", index, "organizationListLineUrlLink", "href", organization.getWebsite()); + data.setContent("organizationListLine", index, "organizationListLineServiceCount", organization.getServiceCount()); index += 1; } diff --git a/src/fr/devinsy/statoolinfos/htmlize/Htmlizer.java b/src/fr/devinsy/statoolinfos/htmlize/Htmlizer.java index fed2cfc..bfe97dc 100644 --- a/src/fr/devinsy/statoolinfos/htmlize/Htmlizer.java +++ b/src/fr/devinsy/statoolinfos/htmlize/Htmlizer.java @@ -93,7 +93,10 @@ public class Htmlizer Federation federation = Factory.loadFederation(htmlizeInput, cache); copyStuff(htmlizeDirectory); - cache.restoreLogoTo(federation.getLogoURL(), new File(htmlizeDirectory, federation.getTechnicalName() + "-logo.jpg")); + + // Manage the logo file. + cache.restoreLogoTo(federation.getLogoURL(), new File(htmlizeDirectory, federation.getTechnicalName() + "-logo.jpg"), federation.getTechnicalName()); + FileUtils.copyFile(federation.getLocalFile(), new File(htmlizeDirectory, federation.getTechnicalName() + "-raw.properties")); // String page = FederationPage.build(federation); @@ -101,11 +104,20 @@ public class Htmlizer for (Organization organization : federation.getOrganizations()) { + // Manage the logo file. + cache.restoreLogoTo(organization.getLogoURL(), new File(htmlizeDirectory, organization.getTechnicalName() + "-logo.jpg"), organization.getTechnicalName()); + FileUtils.copyFile(organization.getLocalFile(), new File(htmlizeDirectory, organization.getTechnicalName() + "-raw.properties")); + + // page = OrganizationPage.build(organization); FileUtils.write(new File(htmlizeDirectory, organization.getTechnicalName() + ".xhtml"), page, StandardCharsets.UTF_8); for (Service service : organization.getServices()) { + // Manage the logo file. + cache.restoreLogoTo(service.getLogoURL(), new File(htmlizeDirectory, service.getTechnicalName() + "-logo.jpg"), service.getTechnicalName()); + FileUtils.copyFile(service.getLocalFile(), new File(htmlizeDirectory, service.getTechnicalName() + "-raw.properties")); + page = ServicePage.build(service); FileUtils.write(new File(htmlizeDirectory, organization.getTechnicalName() + "-" + service.getTechnicalName() + ".xhtml"), page, StandardCharsets.UTF_8); } @@ -135,42 +147,38 @@ public class Htmlizer public static void htmlizeOrganisation(final Configuration configuration) throws IOException, StatoolInfosException { CrawlCache cache = configuration.getCrawlCache(); + File htmlizeInput = configuration.getHtmlizeInput(); + File htmlizeDirectory = configuration.getHtmlizeDirectory(); + Organization organization = Factory.loadOrganization(configuration.getBuildInput(), cache); - File targetDirectory = new File(organization.get("conf.htmlize.directory")); - logger.info("Htmlize target directory: {}", targetDirectory.getAbsoluteFile()); + copyStuff(htmlizeDirectory); - if (!targetDirectory.exists()) + // Manage the logo file. + cache.restoreLogoTo(organization.getLogoURL(), new File(htmlizeDirectory, organization.getTechnicalName() + "-logo.jpg"), organization.getTechnicalName()); + + // + String page = OrganizationPage.build(organization); + FileUtils.write(new File(htmlizeDirectory, "index.xhtml"), page, StandardCharsets.UTF_8); + + for (Service service : organization.getServices()) { - throw new IllegalArgumentException("Htmlize target directory is missing."); - } - else if (!targetDirectory.isDirectory()) - { - throw new IllegalArgumentException("Htmlize target directory is not a directory."); - } - else - { - copyStuff(targetDirectory); + // Manage the logo file. + cache.restoreLogoTo(service.getLogoURL(), new File(htmlizeDirectory, service.getTechnicalName() + "-logo.jpg"), service.getTechnicalName()); // - String page = OrganizationPage.build(organization); - FileUtils.write(new File(targetDirectory, "index.xhtml"), page, StandardCharsets.UTF_8); - - for (Service service : organization.getServices()) - { - page = ServicePage.build(service); - FileUtils.write(new File(targetDirectory, organization.getTechnicalName() + "-" + service.getTechnicalName() + ".xhtml"), page, StandardCharsets.UTF_8); - } - - // Download federation stuff (favicon, logo…). - // Build the federation page. - - // For each organization - // Download organization stuff (favicon, logo…). - // Build organization page. - // for each service - // Download service stuff (favicon, logo…). - // Build service page. + page = ServicePage.build(service); + FileUtils.write(new File(htmlizeDirectory, organization.getTechnicalName() + "-" + service.getTechnicalName() + ".xhtml"), page, StandardCharsets.UTF_8); } + + // Download federation stuff (favicon, logo…). + // Build the federation page. + + // For each organization + // Download organization stuff (favicon, logo…). + // Build organization page. + // for each service + // Download service stuff (favicon, logo…). + // Build service page. } } diff --git a/src/fr/devinsy/statoolinfos/htmlize/OrganizationPage.java b/src/fr/devinsy/statoolinfos/htmlize/OrganizationPage.java index cad1e91..09ba4b5 100644 --- a/src/fr/devinsy/statoolinfos/htmlize/OrganizationPage.java +++ b/src/fr/devinsy/statoolinfos/htmlize/OrganizationPage.java @@ -28,10 +28,10 @@ import org.slf4j.LoggerFactory; import fr.devinsy.statoolinfos.core.Organization; import fr.devinsy.statoolinfos.core.Service; import fr.devinsy.statoolinfos.core.StatoolInfosException; +import fr.devinsy.statoolinfos.util.BuildInformation; import fr.devinsy.xidyn.XidynException; import fr.devinsy.xidyn.data.TagDataManager; import fr.devinsy.xidyn.presenters.PresenterUtils; -import utils.BuildInformation; /** * The Class OrganizationPage. @@ -62,6 +62,9 @@ public class OrganizationPage data.setContent("versionsup", BuildInformation.instance().version()); data.setContent("lastUpdateDate", LocalDateTime.now().format(DateTimeFormatter.ofPattern("dd/MM/yyyy HH':'mm", Locale.FRANCE))); + data.setAttribute("organizationRawButton", "href", organization.getTechnicalName() + "-raw.properties"); + + data.setAttribute("organizationLogo", "src", organization.getTechnicalName() + "-logo.jpg"); data.setEscapedContent("organizationName", organization.get("organization.name")); data.setEscapedContent("organizationDescription", organization.get("organization.description")); data.setContent("serviceCount", organization.getServices().size()); diff --git a/src/fr/devinsy/statoolinfos/htmlize/ServicePage.java b/src/fr/devinsy/statoolinfos/htmlize/ServicePage.java index 90ee6d8..78d02da 100644 --- a/src/fr/devinsy/statoolinfos/htmlize/ServicePage.java +++ b/src/fr/devinsy/statoolinfos/htmlize/ServicePage.java @@ -27,10 +27,10 @@ import org.slf4j.LoggerFactory; import fr.devinsy.statoolinfos.core.Service; import fr.devinsy.statoolinfos.core.StatoolInfosException; +import fr.devinsy.statoolinfos.util.BuildInformation; import fr.devinsy.xidyn.XidynException; import fr.devinsy.xidyn.data.TagDataManager; import fr.devinsy.xidyn.presenters.PresenterUtils; -import utils.BuildInformation; /** * The Class OrganizationPage. @@ -61,6 +61,9 @@ public class ServicePage data.setContent("versionsup", BuildInformation.instance().version()); data.setContent("lastUpdateDate", LocalDateTime.now().format(DateTimeFormatter.ofPattern("dd/MM/yyyy HH':'mm", Locale.FRANCE))); + data.setAttribute("serviceRawButton", "href", service.getTechnicalName() + "-raw.properties"); + + data.setAttribute("serviceLogo", "src", service.getTechnicalName() + "-logo.jpg"); data.setEscapedContent("serviceName", service.getName()); data.setEscapedContent("serviceDescription", service.getDescription()); diff --git a/src/fr/devinsy/statoolinfos/htmlize/federation.xhtml b/src/fr/devinsy/statoolinfos/htmlize/federation.xhtml index c1bcbbd..96ce1a3 100644 --- a/src/fr/devinsy/statoolinfos/htmlize/federation.xhtml +++ b/src/fr/devinsy/statoolinfos/htmlize/federation.xhtml @@ -13,22 +13,34 @@

StatoolInfosv0.0.14AboutPage updated on
xx/xx/xxxx xx:xx

- -

Federation name

- -

Bla bla description

-
Nombre de membres : n/a
-
- - - - - - - - - -
Nom du membreURL
n/an/a
+ +
+

Federation name

+
+ Raw +
+

Bla bla description

+
Nombre de membres : n/a
+
Nombre de services : n/a
+
+ + + + + + + + + + + +
Nom du membreURLServices
+ + +  n/a + + n/an/a
+
diff --git a/src/fr/devinsy/statoolinfos/htmlize/organization.xhtml b/src/fr/devinsy/statoolinfos/htmlize/organization.xhtml index 3c4adf5..adec4d1 100644 --- a/src/fr/devinsy/statoolinfos/htmlize/organization.xhtml +++ b/src/fr/devinsy/statoolinfos/htmlize/organization.xhtml @@ -14,10 +14,10 @@

StatoolInfosv0.0.14AboutPage updated on
xx/xx/xxxx xx:xx

-

Organization name

+

Organization name

- Raw properties + Raw

Bla bla description

diff --git a/src/fr/devinsy/statoolinfos/htmlize/service.xhtml b/src/fr/devinsy/statoolinfos/htmlize/service.xhtml index 5318718..b2efdc6 100644 --- a/src/fr/devinsy/statoolinfos/htmlize/service.xhtml +++ b/src/fr/devinsy/statoolinfos/htmlize/service.xhtml @@ -14,7 +14,11 @@

StatoolInfosv0.0.14AboutPage updated on
xx/xx/xxxx xx:xx

-

Service name

+

Service name

+
+ Raw +
+

Bla bla description

 
diff --git a/src/fr/devinsy/statoolinfos/htmlize/stuff/default-organization-logo.png b/src/fr/devinsy/statoolinfos/htmlize/stuff/default-organization-logo.png new file mode 100644 index 0000000000000000000000000000000000000000..5db414699c0474f579bf1198cd17fdf8d81c6f1a GIT binary patch literal 44979 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 Tt2p~x00000NkvXXu0mjfc}okx literal 0 HcmV?d00001 diff --git a/src/utils/BuildInformation.java b/src/fr/devinsy/statoolinfos/util/BuildInformation.java similarity index 99% rename from src/utils/BuildInformation.java rename to src/fr/devinsy/statoolinfos/util/BuildInformation.java index ade245d..6e3eac5 100644 --- a/src/utils/BuildInformation.java +++ b/src/fr/devinsy/statoolinfos/util/BuildInformation.java @@ -16,7 +16,7 @@ * You should have received a copy of the GNU Affero General Public License * along with StatoolInfos. If not, see . */ -package utils; +package fr.devinsy.statoolinfos.util; import java.io.IOException; import java.net.URL; diff --git a/src/fr/devinsy/statoolinfos/utils/CompareUtils.java b/src/fr/devinsy/statoolinfos/util/CompareUtils.java similarity index 99% rename from src/fr/devinsy/statoolinfos/utils/CompareUtils.java rename to src/fr/devinsy/statoolinfos/util/CompareUtils.java index 4d99b61..52e92d4 100644 --- a/src/fr/devinsy/statoolinfos/utils/CompareUtils.java +++ b/src/fr/devinsy/statoolinfos/util/CompareUtils.java @@ -16,7 +16,7 @@ * You should have received a copy of the GNU Affero General Public License * along with StatoolInfos. If not, see . */ -package fr.devinsy.statoolinfos.utils; +package fr.devinsy.statoolinfos.util; import java.time.LocalDateTime; diff --git a/src/fr/devinsy/statoolinfos/utils/Files.java b/src/fr/devinsy/statoolinfos/util/Files.java similarity index 97% rename from src/fr/devinsy/statoolinfos/utils/Files.java rename to src/fr/devinsy/statoolinfos/util/Files.java index cd164c9..07191a3 100644 --- a/src/fr/devinsy/statoolinfos/utils/Files.java +++ b/src/fr/devinsy/statoolinfos/util/Files.java @@ -16,7 +16,7 @@ * You should have received a copy of the GNU Affero General Public License * along with StatoolInfos. If not, see . */ -package fr.devinsy.statoolinfos.utils; +package fr.devinsy.statoolinfos.util; import java.io.File; import java.util.ArrayList; diff --git a/src/fr/devinsy/statoolinfos/utils/SQLUtils.java b/src/fr/devinsy/statoolinfos/util/SQLUtils.java similarity index 99% rename from src/fr/devinsy/statoolinfos/utils/SQLUtils.java rename to src/fr/devinsy/statoolinfos/util/SQLUtils.java index 228dd8c..fcc550e 100644 --- a/src/fr/devinsy/statoolinfos/utils/SQLUtils.java +++ b/src/fr/devinsy/statoolinfos/util/SQLUtils.java @@ -16,7 +16,7 @@ * You should have received a copy of the GNU Affero General Public License * along with StatoolInfos. If not, see . */ -package fr.devinsy.statoolinfos.utils; +package fr.devinsy.statoolinfos.util; import java.sql.Connection; import java.sql.DriverManager;