diff --git a/.classpath b/.classpath index 5a93c3d..898d7b1 100644 --- a/.classpath +++ b/.classpath @@ -3,11 +3,6 @@ - - - - - @@ -16,5 +11,10 @@ + + + + + diff --git a/.project b/.project index 61fc8fa..6c8c3bd 100644 --- a/.project +++ b/.project @@ -1,6 +1,6 @@ - devinsy-utils + devinsy-cmdexec diff --git a/.settings/org.eclipse.jdt.core.prefs b/.settings/org.eclipse.jdt.core.prefs index 7ced310..1004db9 100644 --- a/.settings/org.eclipse.jdt.core.prefs +++ b/.settings/org.eclipse.jdt.core.prefs @@ -1,4 +1,14 @@ eclipse.preferences.version=1 +org.eclipse.jdt.core.codeComplete.argumentPrefixes= +org.eclipse.jdt.core.codeComplete.argumentSuffixes= +org.eclipse.jdt.core.codeComplete.fieldPrefixes= +org.eclipse.jdt.core.codeComplete.fieldSuffixes= +org.eclipse.jdt.core.codeComplete.localPrefixes= +org.eclipse.jdt.core.codeComplete.localSuffixes= +org.eclipse.jdt.core.codeComplete.staticFieldPrefixes= +org.eclipse.jdt.core.codeComplete.staticFieldSuffixes= +org.eclipse.jdt.core.codeComplete.staticFinalFieldPrefixes= +org.eclipse.jdt.core.codeComplete.staticFinalFieldSuffixes= org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.6 org.eclipse.jdt.core.compiler.codegen.unusedLocal=preserve diff --git a/.settings/org.eclipse.jdt.ui.prefs b/.settings/org.eclipse.jdt.ui.prefs index 5cbede0..3d2b957 100644 --- a/.settings/org.eclipse.jdt.ui.prefs +++ b/.settings/org.eclipse.jdt.ui.prefs @@ -49,12 +49,18 @@ cleanup.use_this_for_non_static_field_access=true cleanup.use_this_for_non_static_field_access_only_if_necessary=false cleanup.use_this_for_non_static_method_access=false cleanup.use_this_for_non_static_method_access_only_if_necessary=true -cleanup_profile=_Devinsy-utils +cleanup_profile=_Devinsy-cmdexec cleanup_settings_version=2 eclipse.preferences.version=1 editor_save_participant_org.eclipse.jdt.ui.postsavelistener.cleanup=true -formatter_profile=_Devinsy-utils +formatter_profile=_Devinsy-cmdexec formatter_settings_version=12 +jautodoc.cleanup.add_header=false +jautodoc.cleanup.replace_header=false +org.eclipse.jdt.ui.exception.name=exception +org.eclipse.jdt.ui.gettersetter.use.is=true +org.eclipse.jdt.ui.keywordthis=false +org.eclipse.jdt.ui.overrideannotation=true sp_cleanup.add_default_serial_version_id=true sp_cleanup.add_generated_serial_version_id=false sp_cleanup.add_missing_annotations=true @@ -107,3 +113,5 @@ sp_cleanup.use_this_for_non_static_field_access=true sp_cleanup.use_this_for_non_static_field_access_only_if_necessary=false sp_cleanup.use_this_for_non_static_method_access=false sp_cleanup.use_this_for_non_static_method_access_only_if_necessary=true +sp_jautodoc.cleanup.add_header=false +sp_jautodoc.cleanup.replace_header=false diff --git a/README.md b/README.md index 589a9d6..6d7f3ba 100644 --- a/README.md +++ b/README.md @@ -1,7 +1,7 @@ # DEVINSY Utils -DEVINSY Utils provides an easy, local and fast Java util classes. +DEVINSY CmdExec provides an easy, local and fast Java util classes. ## Author Christian Pierre MOMON <christian.momon@devinsy.fr> @@ -19,5 +19,4 @@ Several useful Java classes. ## Conclusion -Enjoy and use DEVINSY Utils. For questions, improvement, issues: christian.momon@devinsy.fr - \ No newline at end of file +Enjoy and use DEVINSY CmdExec. For questions, improvement, issues: christian.momon@devinsy.fr diff --git a/build.num b/build.num index f4b3d28..37bed75 100644 --- a/build.num +++ b/build.num @@ -1,3 +1,3 @@ #Build Number for ANT. Do not edit! #Wed Apr 19 22:56:10 CEST 2017 -build.number=4 +build.number=0 diff --git a/build.properties b/build.properties index 72570db..15aabec 100644 --- a/build.properties +++ b/build.properties @@ -1,3 +1,3 @@ -product.name=devinsy-utils +product.name=devinsy-cmdexec product.revision.major=0 -product.revision.minor=3 +product.revision.minor=4 diff --git a/lib/log4j-1.2.17-source.zip b/lib/Logs/log4j-1.2.17-source.zip similarity index 100% rename from lib/log4j-1.2.17-source.zip rename to lib/Logs/log4j-1.2.17-source.zip diff --git a/lib/log4j-1.2.17.jar b/lib/Logs/log4j-1.2.17.jar similarity index 100% rename from lib/log4j-1.2.17.jar rename to lib/Logs/log4j-1.2.17.jar diff --git a/lib/slf4j-api-1.7.5-sources.jar b/lib/Logs/slf4j-api-1.7.5-sources.jar similarity index 100% rename from lib/slf4j-api-1.7.5-sources.jar rename to lib/Logs/slf4j-api-1.7.5-sources.jar diff --git a/lib/slf4j-api-1.7.5.jar b/lib/Logs/slf4j-api-1.7.5.jar similarity index 100% rename from lib/slf4j-api-1.7.5.jar rename to lib/Logs/slf4j-api-1.7.5.jar diff --git a/lib/slf4j-log4j12-1.7.5-sources.jar b/lib/Logs/slf4j-log4j12-1.7.5-sources.jar similarity index 100% rename from lib/slf4j-log4j12-1.7.5-sources.jar rename to lib/Logs/slf4j-log4j12-1.7.5-sources.jar diff --git a/lib/slf4j-log4j12-1.7.5.jar b/lib/Logs/slf4j-log4j12-1.7.5.jar similarity index 100% rename from lib/slf4j-log4j12-1.7.5.jar rename to lib/Logs/slf4j-log4j12-1.7.5.jar diff --git a/lib/hamcrest-core-1.3-sources.jar b/lib/UnitTesting/hamcrest-core-1.3-sources.jar similarity index 100% rename from lib/hamcrest-core-1.3-sources.jar rename to lib/UnitTesting/hamcrest-core-1.3-sources.jar diff --git a/lib/hamcrest-core-1.3.jar b/lib/UnitTesting/hamcrest-core-1.3.jar similarity index 100% rename from lib/hamcrest-core-1.3.jar rename to lib/UnitTesting/hamcrest-core-1.3.jar diff --git a/lib/junit-4.11-sources.jar b/lib/UnitTesting/junit-4.11-sources.jar similarity index 100% rename from lib/junit-4.11-sources.jar rename to lib/UnitTesting/junit-4.11-sources.jar diff --git a/lib/junit-4.11.jar b/lib/UnitTesting/junit-4.11.jar similarity index 100% rename from lib/junit-4.11.jar rename to lib/UnitTesting/junit-4.11.jar diff --git a/lib/devinsy-strings-0.4.0-sources.zip b/lib/devinsy-strings-0.4.0-sources.zip new file mode 100644 index 0000000..0ec9078 Binary files /dev/null and b/lib/devinsy-strings-0.4.0-sources.zip differ diff --git a/lib/devinsy-strings-0.4.0.jar b/lib/devinsy-strings-0.4.0.jar new file mode 100644 index 0000000..96018e1 Binary files /dev/null and b/lib/devinsy-strings-0.4.0.jar differ diff --git a/src/fr/devinsy/util/DataFile.java b/src/fr/devinsy/util/DataFile.java deleted file mode 100755 index a54949f..0000000 --- a/src/fr/devinsy/util/DataFile.java +++ /dev/null @@ -1,256 +0,0 @@ -/** - * Copyright (C) 2008-2010, 2013-2014 Christian Pierre MOMON - * - * This file is part of Devinsy-utils. - * - * Devinsy-utils is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * Devinsy-utils is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public License - * along with Devinsy-utils. If not, see - */ -package fr.devinsy.util; - -/** - * This class defines a content file. - * - * @author Christian Pierre MOMON (christian.momon@devinsy.fr) - */ -public class DataFile -{ - public static int NOID = 0; - public static int DEFAULT_SIZE = 0; - - // - protected int id; - protected int contentId; - protected String name; - protected long size; - protected byte[] data; - protected String creationDate; - protected String creationUser; - - /** - * - */ - public DataFile() - { - this.id = NOID; - this.contentId = NOID; - this.name = null; - this.size = this.DEFAULT_SIZE; - this.data = null; - this.creationDate = null; - this.creationUser = null; - } - - /** - * - */ - public DataFile(final int contentId, final String name, final long size, final byte[] data) - { - this.id = NOID; - this.contentId = contentId; - this.name = name; - this.size = size; - this.data = data; - this.creationDate = null; - this.creationUser = null; - } - - /** - * - */ - public DataFile(final String name, final long size, final byte[] data) - { - this.id = NOID; - this.contentId = NOID; - this.name = name; - this.size = size; - this.data = data; - this.creationDate = null; - this.creationUser = null; - } - - /** - * - */ - public int contentId() - { - int result; - - result = this.contentId; - - // - return (result); - } - - /** - * - */ - public String creationDate() - { - String result; - - result = this.creationDate; - - // - return (result); - } - - /** - * - */ - public String creationUser() - { - String result; - - result = this.creationUser; - - // - return (result); - } - - /** - * - */ - public byte[] data() - { - byte[] result; - - result = this.data; - - // - return (result); - } - - /** - * - */ - public int id() - { - int result; - - result = this.id; - - // - return (result); - } - - /** - * - */ - public String name() - { - String result; - - result = this.name; - - // - return (result); - } - - /** - * - */ - public void setContentId(final int contentId) - { - this.contentId = contentId; - } - - /** - * - */ - public void setCreationDate(final String creationDate) - { - if (creationDate == null) - { - this.creationDate = ""; - } - else - { - this.creationDate = creationDate; - } - } - - /** - * - */ - public void setCreationUser(final String creationUser) - { - if (creationUser == null) - { - this.creationUser = ""; - } - else - { - this.creationUser = creationUser; - } - } - - /** - * - */ - public void setData(final byte[] data) - { - this.data = data; - } - - /** - * - */ - public void setId(final int id) - { - this.id = id; - } - - /** - * - */ - public void setName(final String name) - { - if (name == null) - { - this.name = ""; - } - else - { - this.name = name; - } - } - - /** - * - */ - public void setSize(final long size) - { - if (size >= 0) - { - this.size = size; - } - else - { - this.size = 0; - } - } - - /** - * - */ - public long size() - { - long result; - - result = this.size; - - // - return (result); - } -} diff --git a/src/fr/devinsy/util/DataFiles.java b/src/fr/devinsy/util/DataFiles.java deleted file mode 100755 index e204708..0000000 --- a/src/fr/devinsy/util/DataFiles.java +++ /dev/null @@ -1,181 +0,0 @@ -/** - * Copyright (C) 2008-2010, 2013-2014 Christian Pierre MOMON - * - * This file is part of Devinsy-utils. - * - * Devinsy-utils is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * Devinsy-utils is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public License - * along with Devinsy-utils. If not, see - */ -package fr.devinsy.util; - -import java.util.ArrayList; - -/** - * This class is a collection of DataFile objects whit some specific methods. - * - * @author Christian Pierre MOMON - */ -public class DataFiles extends ArrayList -{ - private static final long serialVersionUID = -4584622422555785456L; - - /** - * - * - */ - public DataFiles() - { - super(); - } - - /** - * - * @param source - */ - public DataFiles(final DataFiles source) - { - super(source); - } - - /** - * - */ - public DataFiles getByContentId(final int id) - { - DataFiles result = new DataFiles(); - - for (int nDataFile = 0; nDataFile < this.size(); nDataFile++) - { - DataFile contentFile = this.getByIndex(nDataFile); - - if (contentFile.contentId() == id) - { - result.add(contentFile); - } - } - - // - return (result); - } - - /** - * - */ - public DataFile getById(final int id) - { - DataFile result = null; - - boolean ended = false; - int nDataFile = 0; - while (!ended) - { - if (nDataFile >= this.size()) - { - ended = true; - result = null; - } - else - { - DataFile contentFile = this.getByIndex(nDataFile); - - if (id == contentFile.id()) - { - ended = true; - result = contentFile; - } - else - { - nDataFile += 1; - } - } - } - - // - return (result); - } - - /** - * - */ - public DataFile getByIndex(final int index) - { - DataFile result; - - result = super.get(index); - - // - return (result); - } - - /** - * - */ - public DataFile getByName(final String name) - { - DataFile result = null; - - if ((name == null) || (name.equals(""))) - { - result = null; - } - else - { - boolean ended = false; - int dataFileIndex = 0; - while (!ended) - { - if (dataFileIndex >= this.size()) - { - ended = true; - result = null; - } - else - { - DataFile contentFile = this.getByIndex(dataFileIndex); - - if (name.equals(contentFile.name())) - { - ended = true; - result = contentFile; - } - else - { - dataFileIndex += 1; - } - } - } - } - - // - return (result); - } - - /** - * - */ - @Override - public String toString() - { - StringBuffer result = new StringBuffer(); - - for (int nDataFile = 0; nDataFile < this.size(); nDataFile++) - { - DataFile contentFile = this.getByIndex(nDataFile); - result.append("== " + contentFile.name() + "\n"); - result.append("contentFile " + nDataFile + " - " + contentFile.name() + "\n"); - } - - // - return (result.toString()); - } -} diff --git a/src/fr/devinsy/util/DateHelper.java b/src/fr/devinsy/util/DateHelper.java deleted file mode 100755 index 3caea96..0000000 --- a/src/fr/devinsy/util/DateHelper.java +++ /dev/null @@ -1,370 +0,0 @@ -/** - * Copyright (C) 2010, 2013-2014 Christian Pierre MOMON - * - * This file is part of Devinsy-utils. - * - * Devinsy-utils is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * Devinsy-utils is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public License - * along with Devinsy-utils. If not, see - */ -package fr.devinsy.util; - -import java.util.Calendar; -import java.util.GregorianCalendar; -import java.util.regex.Matcher; -import java.util.regex.Pattern; - -/** - * This class groups function to help in Calendar manipulation. - * - * SimpleDateFormat is not used cause does not thread safe? - */ -public class DateHelper -{ - // static private final Logger logger = - // LoggerFactory.getLogger(DateHelper.class); - - private static final String EUROPEAN_DATE_FORMAT = "%02d/%02d/%04d"; - private static final String SHORT_EUROPEAN_DATE_FORMAT = "%02d/%02d"; - private static final String RAW_DATE_FORMAT = "%04d%02d%02d"; - private static final String ISO_DATE_FORMAT = "%04d-%02d-%02d"; - private static final String AMERICAN_DATE_FORMAT = "%02d/%02d/%04d"; - - private static final String EUROPEAN_DATE_PATTERN = "^([0123]{0,1}\\d)/([01]{0,1}\\d)/(\\d\\d\\d\\d)$"; - private static final String RAW_DATE_PATTERN = "^(\\d\\d\\d\\d)([01]\\d)([0123]\\d)$"; - private static final String ISO_DATE_PATTERN = "^(\\d\\d\\d\\d)-([01]\\d)-([0123]\\d)$"; - private static final String AMERICAN_DATE_PATTERN = "^([01]{0,1}\\d)/([0123]{0,1}\\d)/(\\d\\d\\d\\d)$"; - - /** - * - */ - public static String americanFormat(final Calendar time) - { - String result; - - if (time == null) - { - result = ""; - } - else - { - result = String.format(AMERICAN_DATE_FORMAT, time.get(Calendar.MONTH) + 1, time.get(Calendar.DAY_OF_MONTH), time.get(Calendar.DAY_OF_MONTH)); - } - - // - return (result); - } - - /** - * - */ - public static String europeanFormat(final Calendar time) - { - String result; - - if (time == null) - { - result = ""; - } - else - { - result = String.format(EUROPEAN_DATE_FORMAT, time.get(Calendar.DAY_OF_MONTH), time.get(Calendar.MONTH) + 1, time.get(Calendar.YEAR)); - } - - // - return (result); - } - - /** - * - */ - public static boolean isAmericanFormat(final String date) - { - boolean result; - - if (date == null) - { - result = false; - } - else - { - result = date.matches(AMERICAN_DATE_PATTERN); - } - - // - return (result); - } - - /** - * - */ - public static boolean isEuropeanFormat(final String date) - { - boolean result; - - if (date == null) - { - result = false; - } - else - { - result = date.matches(EUROPEAN_DATE_PATTERN); - } - - // - return (result); - } - - /** - * - */ - public static boolean isISOFormat(final String date) - { - boolean result; - - if (date == null) - { - result = false; - } - else - { - result = date.matches(ISO_DATE_PATTERN); - } - - // - return (result); - } - - /** - * - */ - public static String ISOFormat(final Calendar time) - { - String result; - - if (time == null) - { - result = ""; - } - else - { - result = String.format(ISO_DATE_FORMAT, time.get(Calendar.YEAR), time.get(Calendar.MONTH) + 1, time.get(Calendar.DAY_OF_MONTH)); - } - - // - return (result); - } - - /** - * - */ - public static boolean isRawFormat(final String date) - { - boolean result; - - if (date == null) - { - result = false; - } - else - { - result = date.matches(RAW_DATE_PATTERN); - } - - // - return (result); - } - - /** - * - */ - public static boolean isValidDate(final String date) - { - boolean result; - - if ((isEuropeanFormat(date)) || (isRawFormat(date)) || (isISOFormat(date)) || (isAmericanFormat(date))) - { - result = true; - } - else - { - result = false; - } - - // - return (result); - } - - /** - * - */ - public static Calendar parseAmericanDate(final String date) - { - Calendar result; - - Pattern pattern = Pattern.compile(AMERICAN_DATE_PATTERN); - Matcher matcher = pattern.matcher(date); - - if ((matcher.find()) && (matcher.groupCount() == 3)) - { - result = new GregorianCalendar(Integer.parseInt(matcher.group(3)), Integer.parseInt(matcher.group(1)) - 1, Integer.parseInt(matcher.group(2))); - } - else - { - result = null; - } - - // - return (result); - } - - /** - * Note: European parsing test made before the American parsing one. - */ - public static Calendar parseDate(final String date) - { - Calendar result; - - if (isEuropeanFormat(date)) - { - result = parseEuropeanDate(date); - } - else if (isRawFormat(date)) - { - result = parseRawDate(date); - } - else if (isISOFormat(date)) - { - result = parseISODate(date); - } - else if (isAmericanFormat(date)) - { - result = parseAmericanDate(date); - } - else - { - result = null; - } - - // - return (result); - } - - /** - * - */ - public static Calendar parseEuropeanDate(final String date) - { - Calendar result; - - Pattern pattern = Pattern.compile(EUROPEAN_DATE_PATTERN); - Matcher matcher = pattern.matcher(date); - - if ((matcher.find()) && (matcher.groupCount() == 3)) - { - result = new GregorianCalendar(Integer.parseInt(matcher.group(3)), Integer.parseInt(matcher.group(2)) - 1, Integer.parseInt(matcher.group(1))); - } - else - { - result = null; - } - - // - return (result); - } - - /** - * - */ - public static Calendar parseISODate(final String date) - { - Calendar result; - - Pattern pattern = Pattern.compile(ISO_DATE_PATTERN); - Matcher matcher = pattern.matcher(date); - - if ((matcher.find()) && (matcher.groupCount() == 3)) - { - result = new GregorianCalendar(Integer.parseInt(matcher.group(1)), Integer.parseInt(matcher.group(2)) - 1, Integer.parseInt(matcher.group(3))); - } - else - { - result = null; - } - - // - return (result); - } - - /** - * - */ - public static Calendar parseRawDate(final String date) - { - Calendar result; - - Pattern pattern = Pattern.compile(RAW_DATE_PATTERN); - Matcher matcher = pattern.matcher(date); - - if ((matcher.find()) && (matcher.groupCount() == 3)) - { - result = new GregorianCalendar(Integer.parseInt(matcher.group(1)), Integer.parseInt(matcher.group(2)) - 1, Integer.parseInt(matcher.group(3))); - } - else - { - result = null; - } - - // - return (result); - } - - /** - * - */ - public static String rawFormat(final Calendar time) - { - String result; - - if (time == null) - { - result = ""; - } - else - { - result = String.format(RAW_DATE_FORMAT, time.get(Calendar.YEAR), time.get(Calendar.MONTH), time.get(Calendar.DAY_OF_MONTH) + 1); - } - - // - return (result); - } - - /** - * - */ - public static String shortEuropeanFormat(final Calendar time) - { - String result; - - if (time == null) - { - result = ""; - } - else - { - result = String.format(SHORT_EUROPEAN_DATE_FORMAT, time.get(Calendar.DAY_OF_MONTH), time.get(Calendar.MONTH) + 1); - } - - // - return (result); - } -} diff --git a/src/fr/devinsy/util/DateTimeHelper.java b/src/fr/devinsy/util/DateTimeHelper.java deleted file mode 100755 index bcd4aca..0000000 --- a/src/fr/devinsy/util/DateTimeHelper.java +++ /dev/null @@ -1,124 +0,0 @@ -/** - * Copyright (C) 2010, 2013-2014 Christian Pierre MOMON - * - * This file is part of Devinsy-utils. - * - * Devinsy-utils is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * Devinsy-utils is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public License - * along with Devinsy-utils. If not, see - */ -package fr.devinsy.util; - -import java.util.Calendar; - -/** - * This class groups function to help in Calendar manipulation. - */ -public class DateTimeHelper -{ - // static private final Logger logger = - // LoggerFactory.getLogger(DateTimeHelper.class); - - private static final String EUROPEAN_DATE_FORMAT = "%02d/%02d/%04d %02d:%02d:%02d"; - private static final String RAW_DATE_FORMAT = "%04d%02d%02d %02d:%02d:%02d"; - private static final String ISO_DATE_FORMAT = "%04d-%02d-%02d %02d:%02d:%02d"; - private static final String AMERICAN_DATE_FORMAT = "%02d/%02d/%04d %02d:%02d:%02d"; - - private static final String EUROPEAN_DATE_PATTERN = "^([0123]{0,1}\\d)/([01]{0,1}\\d)/(\\d\\d\\d\\d)$"; - private static final String RAW_DATE_PATTERN = "^(\\d\\d\\d\\d)([01]\\d)([0123]\\d)$"; - private static final String ISO_DATE_PATTERN = "^(\\d\\d\\d\\d)-([01]\\d)-([0123]\\d)$"; - private static final String AMERICAN_DATE_PATTERN = "^([01]{0,1}\\d)/([0123]{0,1}\\d)/(\\d\\d\\d\\d)$"; - - /** - * - */ - public static String americanFormat(final Calendar time) - { - String result; - - if (time == null) - { - result = ""; - } - else - { - result = String.format(AMERICAN_DATE_FORMAT, time.get(Calendar.MONTH) + 1, time.get(Calendar.DAY_OF_MONTH), time.get(Calendar.YEAR), time.get(Calendar.HOUR_OF_DAY), - time.get(Calendar.MINUTE), time.get(Calendar.SECOND)); - } - - // - return (result); - } - - /** - * - */ - public static String europeanFormat(final Calendar time) - { - String result; - - if (time == null) - { - result = ""; - } - else - { - result = String.format(EUROPEAN_DATE_FORMAT, time.get(Calendar.DAY_OF_MONTH), time.get(Calendar.MONTH) + 1, time.get(Calendar.YEAR), time.get(Calendar.HOUR_OF_DAY), - time.get(Calendar.MINUTE), time.get(Calendar.SECOND)); - } - - // - return (result); - } - - /** - * - */ - public static String ISOFormat(final Calendar time) - { - String result; - - if (time == null) - { - result = ""; - } - else - { - result = String.format(ISO_DATE_FORMAT, time.get(Calendar.YEAR), time.get(Calendar.MONTH) + 1, time.get(Calendar.DAY_OF_MONTH), time.get(Calendar.HOUR_OF_DAY), time.get(Calendar.MINUTE), - time.get(Calendar.SECOND)); - } - - // - return (result); - } - - /** - * - */ - public static String rawFormat(final Calendar time) - { - String result; - - if (time == null) - { - result = ""; - } - else - { - result = String.format(RAW_DATE_FORMAT, time.get(Calendar.YEAR), time.get(Calendar.MONTH) + 1, time.get(Calendar.DAY_OF_MONTH), time.get(Calendar.HOUR_OF_DAY), time.get(Calendar.MINUTE), - time.get(Calendar.SECOND)); - } - - // - return (result); - } -} diff --git a/src/fr/devinsy/util/Digester.java b/src/fr/devinsy/util/Digester.java deleted file mode 100644 index 731f9db..0000000 --- a/src/fr/devinsy/util/Digester.java +++ /dev/null @@ -1,128 +0,0 @@ -/** - * Copyright (C) 2006, 2010, 2013-2014 Christian Pierre MOMON - * - * This file is part of Devinsy-utils. - * - * Devinsy-utils is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * Devinsy-utils is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public License - * along with Devinsy-utils. If not, see - */ -package fr.devinsy.util; - -import java.io.File; -import java.io.FileInputStream; -import java.io.InputStream; -import java.security.MessageDigest; - -/** - * This class is a helper to use MessageDigester class. - * - * @deprecated because of DigestUtils from apache-commons-codec is doing the - * same but better. - */ -@Deprecated -public class Digester -{ - /** - * "SHA-1", "MD5", "SHA-256", and "SHA-512" - */ - public static String computeHash(final String digestMethod, final File file) throws Exception - { - String result; - - if ((file == null) || (!file.exists())) - { - result = null; - } - else - { - // byte[] hash = null; - - InputStream source = null; - try - { - MessageDigest digester = MessageDigest.getInstance(digestMethod); - source = new FileInputStream(file); - boolean ended = false; - int bytesNumber; - byte[] buffer = new byte[100 * 1024]; - while (!ended) - { - bytesNumber = source.read(buffer); - if (bytesNumber == -1) - { - ended = true; - } - else - { - digester.update(buffer, 0, bytesNumber); - } - } - - byte[] digest = digester.digest(); - - result = humanReadableDigest(digest); - } - catch (java.security.NoSuchAlgorithmException exception) - { - throw new Exception("Digest method unknown.", exception); - } - catch (java.io.FileNotFoundException exception) - { - throw new Exception("File not found (" + exception.getMessage() + ")", exception); - } - catch (java.io.IOException exception) - { - throw new Exception("Error reading file.", exception); - } - finally - { - if (source != null) - { - source.close(); - } - } - } - - // - return (result); - } - - /** - * - */ - public static String humanReadableDigest(final byte[] digest) - { - String result; - - StringBuffer hashString = new StringBuffer(); - - for (int letterIndex = 0; letterIndex < digest.length; ++letterIndex) - { - String hex = Integer.toHexString(digest[letterIndex]); - if (hex.length() == 1) - { - hashString.append('0'); - hashString.append(hex.charAt(hex.length() - 1)); - } - else - { - hashString.append(hex.substring(hex.length() - 2)); - } - } - - result = hashString.toString(); - - // - return (result); - } -} diff --git a/src/fr/devinsy/util/FileCopier.java b/src/fr/devinsy/util/FileCopier.java deleted file mode 100644 index 3c99aaf..0000000 --- a/src/fr/devinsy/util/FileCopier.java +++ /dev/null @@ -1,76 +0,0 @@ -/** - * Copyright (C) 2010, 2013-2014 Christian Pierre MOMON - * - * This file is part of Devinsy-utils. - * - * Devinsy-utils is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * Devinsy-utils is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public License - * along with Devinsy-utils. If not, see - */ -package fr.devinsy.util; - -import java.io.File; -import java.io.FileInputStream; -import java.io.FileOutputStream; - -/** - * Never used again. Prefer org.apache.commons.io.FileUtils class. - */ -public class FileCopier -{ - public static final int BUFFER_SIZE = 4 * 1024; - - /** - * - */ - public static void copy(final File source, final File target) throws Exception - { - if ((source == null) || (target == null)) - { - throw new Exception("Null parameter."); - } - else - { - FileInputStream in = new FileInputStream(source); - FileOutputStream out = new FileOutputStream(target); - try - { - byte[] buffer = new byte[BUFFER_SIZE]; - boolean ended = false; - while (!ended) - { - int size = in.read(buffer); - if (size == -1) - { - ended = false; - } - else - { - out.write(buffer, 0, size); - } - } - } - finally - { - if (in != null) - { - in.close(); - } - - if (out != null) - { - out.close(); - } - } - } - } -} diff --git a/src/fr/devinsy/util/FileIterator.java b/src/fr/devinsy/util/FileIterator.java deleted file mode 100644 index e5e7170..0000000 --- a/src/fr/devinsy/util/FileIterator.java +++ /dev/null @@ -1,452 +0,0 @@ -/** - * Copyright (C) 2010, 2013-2014 Christian Pierre MOMON - * - * This file is part of Devinsy-utils. - * - * Devinsy-utils is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * Devinsy-utils is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public License - * along with Devinsy-utils. If not, see - */ -package fr.devinsy.util; - -import java.io.File; -import java.util.Iterator; -import java.util.Vector; -import java.util.regex.Pattern; - -/** - * - */ -public class FileIterator extends Vector implements Iterator -{ - private static final long serialVersionUID = 8790133455427427766L; - - protected int currentDepth; - protected Pattern pattern; - protected File previous; - protected boolean followLinks; - - /** - * - */ - public FileIterator(final File root) - { - super(); - - String[] pathnames; - if (root == null) - { - pathnames = null; - } - else - { - pathnames = new String[1]; - pathnames[0] = root.getPath(); - } - - init(pathnames, null, false); - } - - /** - * - */ - public FileIterator(final File root, final String filter, final boolean followLinks) - { - super(); - - String[] pathnames; - if (root == null) - { - pathnames = null; - } - else - { - pathnames = new String[1]; - pathnames[0] = root.getPath(); - } - - init(pathnames, filter, followLinks); - } - - /** - * - */ - public FileIterator(final String pathname, final String filter, final boolean followLinks) - { - super(); - - String[] pathnames; - if (pathname == null) - { - pathnames = null; - } - else - { - pathnames = new String[1]; - pathnames[0] = pathname; - } - - init(pathnames, filter, followLinks); - } - - /** - * - */ - public FileIterator(final String[] pathnames, final String filter, final boolean followLinks) - { - super(); - - init(pathnames, filter, followLinks); - } - - /** - * - */ - public File currentFile() - { - File result; - - result = this.currentState().currentFile(); - - // - return (result); - } - - /** - * - */ - protected FileIteratorState currentState() - { - FileIteratorState result; - - result = this.get(this.currentDepth); - - // - return (result); - } - - /** - * - */ - public int directoryFinalCountdown() - { - int result; - - result = 0; - while (this.hasNext()) - { - if (this.next().isDirectory()) - { - result += 1; - } - } - - // - return (result); - } - - /** - * - */ - public int fileFinalCountdown() - { - int result; - - result = 0; - while (this.hasNext()) - { - if (!this.next().isDirectory()) - { - result += 1; - } - } - - // - return (result); - } - - /** - * - */ - protected String filter() - { - String result; - - if (this.pattern == null) - { - result = ".*"; - } - else - { - result = this.pattern.toString(); - } - - // - return (result); - } - - /** - * - */ - public int finalCountdown() - { - int result; - - result = 0; - while (this.next() != null) - { - result += 1; - } - - // - return (result); - } - - /** - * - */ - public boolean follow(final File file) - { - boolean result; - - result = false; - try - { - if ((this.followLinks) || (!isLink(file))) - { - result = true; - } - else - { - result = false; - } - - // System.out.println("FOLLOWWWWW=[" + file.getPath() + "][" + - // this.followLinks + "][" + isLink(file) + "][" + result + "]"); - } - catch (Exception exception) - { - System.err.println("ERROR with file [" + this.next() + "]: " + exception.getMessage()); - result = false; - } - - // - return (result); - } - - /** - * - */ - @Override - public boolean hasNext() - { - boolean result; - - result = this.currentState().hasNext(); - - // - return (result); - } - - /** - * - */ - protected void init(final String[] pathnames, final String filter, final boolean followLinks) - { - setFilter(filter); - this.followLinks = followLinks; - this.previous = null; - - this.currentDepth = 0; - this.add(new FileIteratorState(pathnames)); - - shift(); - } - - /** - * - */ - @Override - public File next() - { - File result; - - result = this.currentState().next(); - this.previous = result; - if (result != null) - { - if (result.isDirectory()) - { - this.push(result); - } - } - - shift(); - - // - return (result); - } - - /** - * - */ - public Pattern pattern() - { - Pattern result; - - result = this.pattern; - - // - return (result); - } - - /** - * - */ - public void pop() - { - this.removeElementAt(this.currentDepth); - this.currentDepth -= 1; - } - - /** - * - */ - public void push(final File file) - { - if ((file != null) && (file.isDirectory())) - { - this.add(new FileIteratorState(file.listFiles())); - this.currentDepth += 1; - } - } - - /** - * - */ - @Override - public void remove() - { - if (this.previous != null) - { - this.previous.delete(); - this.previous = null; - } - } - - /** - * - */ - public void reset() - { - this.currentDepth = 0; - this.previous = null; - if (this.size() > 0) - { - this.get(0).reset(); - FileIteratorState firstState = this.get(0); - this.removeAllElements(); - this.add(firstState); - } - - shift(); - } - - /** - * - */ - protected void setFilter(final String filter) - { - if (filter == null) - { - this.pattern = null; - } - else - { - this.pattern = Pattern.compile(filter); - } - } - - /** - * Set indexes to the good next item. - */ - public void shift() - { - boolean ended = false; - while (!ended) - { - File next = this.currentFile(); - - if (next == null) - { - if (this.currentDepth == 0) - { - ended = true; - } - else - { - this.pop(); - } - } - else - { - if (((this.pattern == null) || (this.pattern.matcher(next.getPath()).matches())) && (follow(next))) - { - ended = true; - } - else - { - this.currentState().next(); - - if (next.isDirectory() && (follow(next))) - { - this.push(next); - } - } - } - } - } - - /** - * - */ - @Override - public String toString() - { - String result; - - result = "[depth=" + this.currentDepth + "][index=" + this.get(this.currentDepth).currentIndex() + "/" + this.get(this.currentDepth).files.length + "]"; - - // - return (result); - } - - /** - * - */ - public static boolean isLink(final File file) throws Exception - { - boolean result; - - if ((file.exists()) && (file.getCanonicalPath().equals(file.getAbsolutePath()))) - { - result = false; - } - else - { - result = true; - } - - // - return (result); - } -} diff --git a/src/fr/devinsy/util/FileIteratorState.java b/src/fr/devinsy/util/FileIteratorState.java deleted file mode 100644 index 7a48705..0000000 --- a/src/fr/devinsy/util/FileIteratorState.java +++ /dev/null @@ -1,162 +0,0 @@ -/** - * Copyright (C) 2010, 2013-2014 Christian Pierre MOMON - * - * This file is part of Devinsy-utils. - * - * Devinsy-utils is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * Devinsy-utils is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public License - * along with Devinsy-utils. If not, see - */ -package fr.devinsy.util; - -import java.io.File; -import java.util.Iterator; - -/** - * Used by FileIterator class. - */ -public class FileIteratorState implements Iterator -{ - protected File[] files; - protected int currentIndex; - - /** - * - */ - public FileIteratorState(final File[] files) - { - // Initialize the state. - this.currentIndex = 0; - - if (files == null) - { - this.files = new File[0]; - } - else - { - this.files = files; - } - } - - /** - * Useful for the depth zero, otherwise parent path is lost. - */ - public FileIteratorState(final String[] pathnames) - { - // Initialize the state. - this.currentIndex = 0; - - this.files = new File[pathnames.length]; - for (int pathnameIndex = 0; pathnameIndex < pathnames.length; pathnameIndex++) - { - this.files[pathnameIndex] = new File(pathnames[pathnameIndex]); - } - } - - /** - * - */ - protected File currentFile() - { - File result; - - if (this.currentIndex >= this.files.length) - { - result = null; - } - else - { - result = this.files[this.currentIndex]; - } - - // - return (result); - } - - /** - * - */ - protected int currentIndex() - { - int result; - - result = this.currentIndex; - - // - return (result); - } - - /** - * - */ - protected File[] files() - { - File[] result; - - result = this.files; - - // - return (result); - } - - /** - * - */ - @Override - public boolean hasNext() - { - boolean result; - - if (this.currentFile() == null) - { - result = false; - } - else - { - result = true; - } - - // - return (result); - } - - /** - * - */ - @Override - public File next() - { - File result; - - result = this.currentFile(); - this.currentIndex += 1; - - // - return (result); - } - - /** - * - */ - @Override - public void remove() - { - } - - /** - * - */ - public void reset() - { - this.currentIndex = 0; - } -} diff --git a/src/fr/devinsy/util/FileTools.java b/src/fr/devinsy/util/FileTools.java deleted file mode 100644 index 6c9eb3b..0000000 --- a/src/fr/devinsy/util/FileTools.java +++ /dev/null @@ -1,635 +0,0 @@ -/** - * Copyright (C) 2008-2015 Christian Pierre MOMON - * - * This file is part of Devinsy-utils. - * - * Devinsy-utils is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * Devinsy-utils is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public License - * along with Devinsy-utils. If not, see - */ -package fr.devinsy.util; - -import java.io.BufferedReader; -import java.io.File; -import java.io.FileInputStream; -import java.io.FileNotFoundException; -import java.io.FileOutputStream; -import java.io.IOException; -import java.io.InputStream; -import java.io.InputStreamReader; -import java.io.OutputStreamWriter; -import java.io.PrintWriter; -import java.io.UnsupportedEncodingException; -import java.net.URL; - -import fr.devinsy.util.strings.StringList; -import fr.devinsy.util.strings.StringListUtils; - -/** - * - * @author Christian Pierre MOMON (christian.momon@devinsy.fr) - */ -public class FileTools -{ - public static final String DEFAULT_CHARSET_NAME = "UTF-8"; - - /** - * - * - * @param fileName - * Source. - * - * @return Extension value or null. - */ - public static String addBeforeExtension(final String fileName, final String addition) - { - String result; - - if (fileName == null) - { - result = null; - } - else if (addition == null) - { - result = fileName; - } - else - { - // - int separatorIndex = fileName.lastIndexOf('.'); - - // - if (separatorIndex > 0) - { - result = fileName.substring(0, separatorIndex) + addition + fileName.substring(separatorIndex); - } - else - { - result = fileName + addition; - } - } - - // - return result; - } - - /** - * - * - * @param file - * Source. - * - * @return Extension value or null. - */ - public static File addToName(final File file, final String addition) - { - File result; - - if (file == null) - { - result = null; - } - else if (addition == null) - { - result = file; - } - else - { - // - String sourceFileName = file.getAbsolutePath(); - String targetFileName = addBeforeExtension(sourceFileName, addition); - result = new File(targetFileName); - } - - // - return result; - } - - /** - * Get the extension of a file. - * - * @param file - * Source. - * - * @return Extension value or null. - */ - public static String getExtension(final File file) - { - String result; - - if (file == null) - { - result = null; - } - else - { - result = getExtension(file.getName()); - } - - // - return result; - } - - /** - * Get the extension of a file. - * - *
    - *
  • getExtension(null) = null
  • - *
  • getExtension("") = null
  • - *
  • getExtension("abc") = null
  • - *
  • getExtension("abc.efg") = "efg"
  • - *
- * - * @param file - * Source. - * - * @return Extension value or null. - * @deprecated See - * org.apache.commons.io.FilenameUtils.getExtension - */ - @Deprecated - public static String getExtension(final String fileName) - { - String result; - - if (fileName == null) - { - result = null; - } - else - { - int separatorIndex = fileName.lastIndexOf('.'); - if (separatorIndex > 0) - { - result = fileName.substring(separatorIndex + 1).toLowerCase(); - } - else - { - result = null; - } - } - - // - return result; - } - - /** - * - * @param file - * @return - * @throws IOException - */ - public static String load(final File source) throws IOException - { - String result; - - result = load(source, DEFAULT_CHARSET_NAME); - - // - return result; - } - - /** - * - * @param file - * @throws IOException - */ - public static String load(final File source, final String charsetName) throws IOException - { - String result; - - result = loadToStringBuffer(source, charsetName).toString(); - - // - return result; - } - - /** - * - * @param file - * @return - * @throws IOException - */ - public static String load(final URL source) throws IOException - { - String result; - - result = load(source, DEFAULT_CHARSET_NAME); - - // - return result; - } - - /** - * - * @param file - * @throws IOException - */ - public static String load(final URL source, final String charsetName) throws IOException - { - String result; - - // - StringBuffer buffer = new StringBuffer(source.openConnection().getContentLength() + 1); - read(buffer, source.openStream(), charsetName); - - // - result = buffer.toString(); - - // - return result; - } - - /** - * - * @param file - * @throws IOException - */ - public static StringList loadStringList(final File source) throws IOException - { - StringList result; - - result = loadStringList(source, DEFAULT_CHARSET_NAME); - - // - return result; - } - - /** - * - * @param file - * @throws IOException - */ - public static StringList loadStringList(final File file, final String charsetName) throws IOException - { - StringList result; - - result = StringListUtils.load(file, charsetName); - - // - return result; - } - - /** - * - * @param file - * @throws IOException - */ - public static StringBuffer loadToStringBuffer(final File source) throws IOException - { - StringBuffer result; - - result = loadToStringBuffer(source, DEFAULT_CHARSET_NAME); - - // - return result; - } - - /** - * - * @param file - * @throws IOException - */ - public static StringBuffer loadToStringBuffer(final File file, final String charsetName) throws IOException - { - StringBuffer result; - - BufferedReader in = null; - try - { - in = new BufferedReader(new InputStreamReader(new FileInputStream(file), charsetName)); - - boolean ended = false; - final String LINE_SEPARATOR = System.getProperty("line.separator"); - result = new StringBuffer((int) file.length() + 1); - while (!ended) - { - String line = in.readLine(); - - if (line == null) - { - ended = true; - } - else - { - result.append(line).append(LINE_SEPARATOR); - } - } - } - finally - { - try - { - if (in != null) - { - in.close(); - } - } - catch (IOException exception) - { - exception.printStackTrace(); - } - } - - // - return result; - } - - /** - * - * @param file - * @throws IOException - */ - public static StringList loadToStringList(final File source) throws IOException - { - StringList result; - - result = loadToStringList(source, DEFAULT_CHARSET_NAME); - - // - return result; - } - - /** - * - * @param file - * @throws IOException - */ - public static StringList loadToStringList(final File file, final String charsetName) throws IOException - { - StringList result; - - BufferedReader in = null; - try - { - in = new BufferedReader(new InputStreamReader(new FileInputStream(file), charsetName)); - - boolean ended = false; - final String LINE_SEPARATOR = System.getProperty("line.separator"); - result = new StringList(); - while (!ended) - { - String line = in.readLine(); - - if (line == null) - { - ended = true; - } - else - { - result.append(line).append(LINE_SEPARATOR); - } - } - } - finally - { - try - { - if (in != null) - { - in.close(); - } - } - catch (IOException exception) - { - exception.printStackTrace(); - } - } - - // - return result; - } - - /** - * - * @param file - * @return - * @throws IOException - */ - public static StringList loadToStringList(final URL source) throws IOException - { - StringList result; - - result = loadToStringList(source, DEFAULT_CHARSET_NAME); - - // - return result; - } - - /** - * - * @param file - * @throws IOException - */ - public static StringList loadToStringList(final URL source, final String charsetName) throws IOException - { - StringList result; - - // - result = StringListUtils.load(source, charsetName); - - // - return result; - } - - /** - * - * @param file - * @throws IOException - */ - public static void read(final StringBuffer out, final InputStream is, final String charsetName) throws IOException - { - BufferedReader in = null; - try - { - in = new BufferedReader(new InputStreamReader(is, charsetName)); - - boolean ended = false; - final String LINE_SEPARATOR = System.getProperty("line.separator"); - - while (!ended) - { - String line = in.readLine(); - - if (line == null) - { - ended = true; - } - else - { - out.append(line).append(LINE_SEPARATOR); - } - } - } - finally - { - try - { - if (in != null) - { - in.close(); - } - } - catch (IOException exception) - { - exception.printStackTrace(); - } - } - } - - /** - * - * @param source - * @param extension - * @return - * - * @deprecated See - * org.apache.commons.io.FilenameUtils.removeExtension - */ - @Deprecated - public static String removeExtension(final String source) - { - String result; - - if (source == null) - { - result = source; - } - else - { - int separatorIndex = source.lastIndexOf('.'); - - // - if (separatorIndex > 0) - { - result = source.substring(0, separatorIndex); - } - else - { - result = source; - } - } - - // - return result; - } - - /** - * - * @param file - * @throws FileNotFoundException - * @throws UnsupportedEncodingException - */ - public static void save(final File file, final String source) throws UnsupportedEncodingException, FileNotFoundException - { - PrintWriter out = null; - try - { - out = new PrintWriter(new OutputStreamWriter(new FileOutputStream(file), DEFAULT_CHARSET_NAME)); - - out.println(source); - } - finally - { - if (out != null) - { - out.close(); - } - } - } - - /** - * - * @param file - * @throws FileNotFoundException - * @throws UnsupportedEncodingException - */ - public static void save(final File file, final StringBuffer source) throws UnsupportedEncodingException, FileNotFoundException - { - save(file, source.toString()); - } - - /** - * - * @param file - * @throws FileNotFoundException - * @throws UnsupportedEncodingException - */ - public static void save(final File file, final StringList source) throws UnsupportedEncodingException, FileNotFoundException - { - StringListUtils.save(file, source); - } - - /** - * - * @param source - * @param extension - * @return - */ - public static File setExtension(final File source, final String extension) - { - File result; - - if ((source == null) || (extension == null)) - { - result = source; - } - else - { - result = new File(setExtension(source.getAbsolutePath(), extension)); - } - - // - return result; - } - - /** - * - * @param source - * @param extension - * @return - */ - public static String setExtension(final String source, final String extension) - { - String result; - - if ((source == null) || (extension == null)) - { - result = source; - } - else - { - int separatorIndex = source.lastIndexOf('.'); - - // - if (separatorIndex > 0) - { - String prefix = source.substring(0, separatorIndex); - if (prefix.endsWith(extension)) - { - result = prefix; - } - else - { - result = prefix + extension; - } - } - else - { - result = source + extension; - } - } - - // - return result; - } -} diff --git a/src/fr/devinsy/util/Fraction.java b/src/fr/devinsy/util/Fraction.java deleted file mode 100644 index 1746795..0000000 --- a/src/fr/devinsy/util/Fraction.java +++ /dev/null @@ -1,188 +0,0 @@ -/** - * Copyright (C) 2009-2010, 2013-2014 Christian Pierre MOMON - * - * This file is part of Devinsy-utils. - * - * Devinsy-utils is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * Devinsy-utils is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public License - * along with Devinsy-utils. If not, see - */ -package fr.devinsy.util; - -/** - * Useful for display beautiful percentage value as string. - * - * @author cpm - */ -public class Fraction -{ - protected long numerator; - protected long denominator; - - /** - * - */ - public Fraction(final long numerator, final long denominator) - { - this.numerator = numerator; - this.denominator = denominator; - } - - /** - * - */ - public long denominator() - { - long result; - - result = this.denominator; - - // - return (result); - } - - /** - * - */ - public long numerator() - { - long result; - - result = this.numerator; - - // - return (result); - } - - /** - * - */ - public long percentage() throws Exception - { - long result; - - result = percentage(this.numerator, this.denominator); - - // - return (result); - } - - /** - * - */ - public String percentageFullString() - { - String result; - - result = percentageFullString(this.numerator, this.denominator); - - // - return (result); - } - - /** - * - */ - public String percentageString() - { - String result; - - result = percentageString(this.numerator, this.denominator); - - // - return (result); - } - - /** - * - */ - @Override - public String toString() - { - String result; - - result = this.numerator + "/" + this.denominator; - - // - return (result); - } - - /** - * - */ - public static long percentage(final long numerator, final long denominator) throws Exception - { - long result; - - if (denominator == 0) - { - throw new Exception("denominator is zero"); - } - else - { - result = Math.round(numerator * 100 / denominator); - } - - // - return (result); - } - - /** - * - */ - public static String percentageFullString(final long numerator, final long denominator) - { - String result; - - result = percentageString(numerator, denominator); - - // - return (result); - } - - /** - * - */ - public static String percentageString(final long numerator, final long denominator) - { - String result; - - try - { - long value = percentage(numerator, denominator); - - if (numerator == 0) - { - result = "0%"; - } - else if (value == 0) - { - result = "~0%"; - } - else if (value < 10) - { - result = "0" + value + "%"; - } - else - { - result = value + "%"; - } - } - catch (Exception exception) - { - result = "--%"; - } - - // - return (result); - } -} diff --git a/src/fr/devinsy/util/InternetProxyConfiguration.java b/src/fr/devinsy/util/InternetProxyConfiguration.java deleted file mode 100755 index ba0b859..0000000 --- a/src/fr/devinsy/util/InternetProxyConfiguration.java +++ /dev/null @@ -1,241 +0,0 @@ -/** - * Copyright (C) 2009-2010, 2013-2014 Christian Pierre MOMON - * - * This file is part of Devinsy-utils. - * - * Devinsy-utils is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * Devinsy-utils is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public License - * along with Devinsy-utils. If not, see - */ -package fr.devinsy.util; - -/** - * - */ -public class InternetProxyConfiguration -{ - // - protected String host; - protected int port; - protected String login; - protected String password; - - /** - * - */ - public InternetProxyConfiguration() - { - this.host = ""; - this.port = 0; - this.login = ""; - this.password = ""; - } - - /** - * - */ - public InternetProxyConfiguration(final String host, final int port, final String login, final String password) - { - // - if (host == null) - { - this.host = ""; - } - else - { - this.host = host; - } - - // - this.port = port; - - // - if (login == null) - { - this.login = ""; - } - else - { - this.login = login; - } - - // - if (password == null) - { - this.password = ""; - } - else - { - this.password = password; - } - } - - /** - * - */ - public InternetProxyConfiguration(final String host, final String port, final String login, final String password) throws Exception - { - // - if (host == null) - { - this.host = ""; - } - else - { - this.host = host; - } - - // - if ((port == null) || (port.trim().length() == 0)) - { - this.port = 0; - } - else - { - try - { - this.port = Integer.parseInt(port); - } - catch (Exception exception) - { - String errorMessage = "Incorrect PROXY port value."; - throw new Exception(errorMessage, exception); - } - } - - // - if (login == null) - { - this.login = ""; - } - else - { - this.login = login; - } - - // - if (password == null) - { - this.password = ""; - } - else - { - this.password = password; - } - } - - /** - * - */ - public String host() - { - String result; - - result = this.host; - - // - return (result); - } - - /** - * - */ - public boolean isInitialized() - { - boolean result; - - if ((this.host.length() > 0) && (this.port > 0)) - { - result = true; - } - else - { - result = false; - } - - // - return (result); - } - - /** - * - */ - public String login() - { - String result; - - result = this.login; - - // - return (result); - } - - /** - * - */ - public String password() - { - String result; - - result = this.password; - - // - return (result); - } - - /** - * - */ - public int port() - { - int result; - - result = this.port; - - // - return (result); - } - - /** - * - */ - @Override - public String toString() - { - String result; - - String login; - if (this.login.length() == 0) - { - login = ""; - } - else - { - login = "********"; - } - - String password; - if (this.password.length() == 0) - { - password = ""; - } - else - { - password = "********"; - } - - result = "(" + this.host + "," + this.port + "," + login + "," + password + ")"; - - // - return (result); - } -} diff --git a/src/fr/devinsy/util/SimpleAveragemeter.java b/src/fr/devinsy/util/SimpleAveragemeter.java deleted file mode 100755 index 4f5a418..0000000 --- a/src/fr/devinsy/util/SimpleAveragemeter.java +++ /dev/null @@ -1,133 +0,0 @@ -/** - * Copyright (C) 2009-2010, 2013-2014 Christian Pierre MOMON - * - * This file is part of Devinsy-utils. - * - * Devinsy-utils is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * Devinsy-utils is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public License - * along with Devinsy-utils. If not, see - */ -package fr.devinsy.util; - -/** - * This class defines a simple average manager. For example, it is useful for - * millisecond. The maximum value available in input is one day in millisecond. - */ -public class SimpleAveragemeter -{ - // - protected long sum; - protected long cardinal; - protected long MAX_ADD = 1 * 24 * 60 * 60 * 1000; // One day in millisecond. - - /** - * - */ - public SimpleAveragemeter() - { - this.reset(); - } - - /** - * - */ - synchronized public void add(final long value) - { - // Manage the sum limit. - if ((this.sum > Long.MAX_VALUE / 2) && (this.cardinal % 2 == 0)) - { - this.sum = this.sum / 2; - this.cardinal = this.cardinal / 2; - } - - // Add the new value. - if (this.sum > this.MAX_ADD) - { - this.sum += this.MAX_ADD; - this.cardinal += 1; - } - else - { - this.sum += value; - this.cardinal += 1; - } - } - - /** - * - */ - synchronized public long average() - { - long result; - - if (this.cardinal == 0) - { - result = 0; - } - else - { - result = this.sum / this.cardinal; - } - - // - return (result); - } - - /** - * - */ - public long cardinal() - { - long result; - - result = this.cardinal; - - // - return (result); - } - - /** - * - */ - synchronized public void reset() - { - this.sum = 0; - this.cardinal = 0; - } - - /** - * - */ - @Override - public String toString() - { - String result; - - result = Long.toString(this.average()); - - // - return (result); - } - - /** - * - */ - public long value() - { - long result; - - result = this.average(); - - // - return (result); - } -} diff --git a/src/fr/devinsy/util/SimpleChronometer.java b/src/fr/devinsy/util/SimpleChronometer.java deleted file mode 100755 index 4ae2e98..0000000 --- a/src/fr/devinsy/util/SimpleChronometer.java +++ /dev/null @@ -1,164 +0,0 @@ -/** - * Copyright (C) 2008-2010, 2013-2014 Christian Pierre MOMON - * - * This file is part of Devinsy-utils. - * - * Devinsy-utils is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * Devinsy-utils is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public License - * along with Devinsy-utils. If not, see - */ -package fr.devinsy.util; - -import java.util.Date; - -/** - * - */ -public class SimpleChronometer -{ - // - protected long firstTime; - - /** - * - */ - public SimpleChronometer() - { - this.reset(); - } - - /** - * - */ - public long interval() - { - long result; - - result = new Date().getTime() - this.firstTime; - - // - return (result); - } - - /** - * - */ - public void reset() - { - this.firstTime = new Date().getTime(); - } - - /** - * TO BE COMPLETED. - */ - public static String humanString(final long interval) - { - String result; - - if (interval < 1000) - { - result = interval + "ms"; - } - else if (interval < 60 * 1000) - { - result = interval / 1000 + "," + interval % 1000 + "s"; - } - else if (interval < 60 * 60 * 1000) - { - result = interval / 1000 + "," + interval % 1000 + "s"; - } - else if (interval < 24 * 60 * 60 * 1000) - { - result = interval / 1000 + "," + interval % 1000 + "s"; - } - else if (interval < 7 * 24 * 60 * 60 * 1000) - { - result = interval / 1000 + "," + interval % 1000 + "s"; - } - else - // if (interval < 7*24*60*60*1000) - { - result = interval / 1000 + "," + interval % 1000 + "s"; - } - - // - return (result); - } - - /** - * - */ - public static String shortHumanString(final long interval) - { - String result; - - if (interval < 1000) - { - result = interval + " ms"; - } - else if (interval < 2 * 1000) - { - result = interval / 1000 + " seconde"; - } - else if (interval < 60 * 1000) - { - result = interval / 1000 + " secondes"; - } - else if (interval < 2 * 60 * 1000L) - { - result = interval / (60 * 1000L) + " minute"; - } - else if (interval < 60 * 60 * 1000L) - { - result = interval / (60 * 1000L) + " minutes"; - } - else if (interval < 2 * 60 * 60 * 1000L) - { - result = interval / (60 * 60 * 1000L) + " heure"; - } - else if (interval < 24 * 60 * 60 * 1000L) - { - result = interval / (60 * 60 * 1000L) + " heures"; - } - else if (interval < 2 * 24 * 60 * 60 * 1000L) - { - result = interval / (24 * 60 * 60 * 1000L) + " jour"; - } - else if (interval < 7 * 24 * 60 * 60 * 1000L) - { - result = interval / (24 * 60 * 60 * 1000L) + " jours"; - } - else if (interval < 2 * 7 * 24 * 60 * 60 * 1000L) - { - result = interval / (7 * 24 * 60 * 60 * 1000L) + " semaine"; - } - else if (interval < 30 * 24 * 60 * 60 * 1000L) - { - result = interval / (7 * 24 * 60 * 60 * 1000L) + " semaines"; - } - else if (interval < 52 * 7 * 24 * 60 * 60 * 1000L) - { - result = interval / (30 * 24 * 60 * 60 * 1000L) + " mois"; - } - else if (interval < 2 * 52 * 7 * 24 * 60 * 60 * 1000L) - { - result = interval / (52 * 7 * 24 * 60 * 60 * 1000L) + " année"; - } - else - { - result = interval / (52 * 7 * 24 * 60 * 60 * 1000L) + " années"; - } - - // - return (result); - } -} diff --git a/src/fr/devinsy/util/StacktraceWriter.java b/src/fr/devinsy/util/StacktraceWriter.java deleted file mode 100644 index 2cec674..0000000 --- a/src/fr/devinsy/util/StacktraceWriter.java +++ /dev/null @@ -1,47 +0,0 @@ -/** - * Copyright (C) 2010, 2013-2016 Christian Pierre MOMON - * - * This file is part of Devinsy-utils. - * - * Devinsy-utils is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * Devinsy-utils is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public License - * along with Devinsy-utils. If not, see - */ -package fr.devinsy.util; - -import java.io.ByteArrayOutputStream; -import java.io.PrintStream; - -/** - * @deprecated use SLF4J.Logger.error("blabla", exception) method - * or the ExceptionUtils.getStackTrace(throwable). - */ -@Deprecated -public class StacktraceWriter -{ - /** - * @deprecated use SLF4J.Logger.error("blabla", exception) - * method or the ExceptionUtils.getStackTrace(throwable). - */ - @Deprecated - public static String toString(final Exception exception) - { - String result; - - ByteArrayOutputStream out = new ByteArrayOutputStream(50000); - exception.printStackTrace(new PrintStream(out)); - result = out.toString(); - - // - return (result); - } -} diff --git a/src/fr/devinsy/util/ToolBox.java b/src/fr/devinsy/util/ToolBox.java deleted file mode 100644 index adc4b49..0000000 --- a/src/fr/devinsy/util/ToolBox.java +++ /dev/null @@ -1,319 +0,0 @@ -/** - * Copyright (C) 2008-2010, 2013-2014 Christian Pierre MOMON - * - * This file is part of Devinsy-utils. - * - * Devinsy-utils is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * Devinsy-utils is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public License - * along with Devinsy-utils. If not, see - */ -package fr.devinsy.util; - -import java.util.Arrays; -import java.util.List; -import java.util.Set; - -import org.apache.commons.lang3.StringUtils; - -import fr.devinsy.util.strings.StringList; - -/** - * - * @author christian.momon@devinsy.fr - */ -public class ToolBox -{ - - public static String clean(final String source) - { - String result; - - result = source.replaceAll("[^\\w ]", " "); - - // - return result; - } - - /** - * Returns information about the calling class of a calledClass. - * - * @param calledClassName - * the class name which is the subject of the search. - * - * @return information about the calling class. - */ - public static StackTraceElement getCaller(final String calledClassName) - { - StackTraceElement result; - - // - StackTraceElement[] stack = Thread.currentThread().getStackTrace(); - // System.out.println("////////////////////////////"); - // for (int i = 0; (i < stack.length) && (i < 4); i++) { - // System.out.println(i + " " + stack[i].getClassName()); - // } - - // Search for first entry of class called. - boolean ended = false; - Integer indexOfCalled = null; - int depth = 1; - while (!ended) - { - if (depth < stack.length) - { - String currentClassName = stack[depth].getClassName(); - if (currentClassName.equals(calledClassName)) - { - ended = true; - indexOfCalled = Integer.valueOf(depth); - } - else - { - depth += 1; - } - } - else - { - ended = true; - result = null; - } - } - - // Search for caller of class called. - if (indexOfCalled == null) - { - result = null; - } - else - { - result = null; - ended = false; - depth = indexOfCalled; - while (!ended) - { - if (depth < stack.length) - { - String currentClassName = stack[depth].getClassName(); - if (currentClassName.equals(calledClassName)) - { - depth += 1; - } - else - { - ended = true; - result = stack[depth]; - } - } - else - { - ended = true; - result = null; - } - } - } - - // - return result; - } - - /** - * - * @param pattern - * @param source - * @return - */ - public static int indexOf(final String pattern, final List source) - { - int result; - - if (source == null) - { - result = -1; - } - else - { - boolean ended = false; - result = -1; - int currentIndex = 0; - while (!ended) - { - if (currentIndex < source.size()) - { - String sourceString = source.get(currentIndex); - if (StringUtils.equals(sourceString, pattern)) - { - ended = true; - result = currentIndex; - } - else - { - currentIndex += 1; - } - } - else - { - ended = true; - currentIndex = -1; - } - } - } - - // - return result; - } - - /** - * - * @param string - * @param targets - * @return - */ - public static boolean matchesAny(final String string, final String... targets) - { - boolean result; - - if ((string == null) || (targets == null)) - { - result = false; - } - else - { - // - boolean ended = false; - int index = 0; - result = false; - while (!ended) - { - if (index < targets.length) - { - if (StringUtils.equals(string, targets[index])) - { - ended = true; - result = true; - } - else - { - index += 1; - } - } - else - { - ended = true; - result = false; - } - } - } - - // - return result; - } - - /** - * - * @return - */ - public static Double[] sort(final Set source) - { - Double[] result; - - if (source == null) - { - result = null; - } - else - { - result = new Double[source.size()]; - - source.toArray(result); - Arrays.sort(result); - } - - // - return result; - } - - /** - * Concatenates int values from an array, adding decoration strings. - * - * @param values - * Source of int values. - * @param prefix - * Decoration to put on start. - * @param separator - * Decoration to put between values. - * @param postfix - * Decoration to put on end. - * - * @return A decorated string representing the int values. - */ - public static String toString(final int[] values, final String prefix, final String separator, final String postfix) - { - String result; - - StringList buffer = new StringList(); - - // - if (prefix != null) - { - buffer.append(prefix); - } - - // - boolean firstPassed = false; - for (int value : values) - { - if (firstPassed) - { - buffer.append(separator); - } - else - { - firstPassed = true; - } - buffer.append(value); - } - - // - if (postfix != null) - { - buffer.append(postfix); - } - - // - result = buffer.toString(); - - // - return result; - } - - /** - * - * @param source - * @return - */ - public static String toString(final String source) - { - String result; - - if (source == null) - { - result = ""; - } - else - { - result = source; - } - - // - return result; - } -} diff --git a/src/fr/devinsy/util/cmdexec/CmdExec.java b/src/fr/devinsy/util/cmdexec/CmdExec.java index 8465567..7781783 100644 --- a/src/fr/devinsy/util/cmdexec/CmdExec.java +++ b/src/fr/devinsy/util/cmdexec/CmdExec.java @@ -1,20 +1,20 @@ -/** - * Copyright (C) 2005-2010, 2013, 2015-2016 Christian Pierre MOMON +/* + * Copyright (C) 2005-2010,2013,2015-2017 Christian Pierre MOMON * - * This file is part of Devinsy-utils. + * This file is part of Devinsy-unix. * - * Devinsy-utils is free software: you can redistribute it and/or modify + * Devinsy-unix is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * - * Devinsy-utils is distributed in the hope that it will be useful, + * Devinsy-unix is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public License - * along with Devinsy-utils. If not, see + * along with Devinsy-unix. If not, see */ package fr.devinsy.util.cmdexec; @@ -27,6 +27,8 @@ import fr.devinsy.util.cmdexec.StreamGobbler.StreamWay; import fr.devinsy.util.strings.StringListUtils; /** + * The Class CmdExec. + * * We must use the isOver method on Gobblers because with short tasks the * waitFor ends before the Gobbler read. * @@ -34,467 +36,553 @@ import fr.devinsy.util.strings.StringListUtils; */ public class CmdExec { - private static Logger logger = LoggerFactory.getLogger(CmdExec.class); + private static Logger logger = LoggerFactory.getLogger(CmdExec.class); - private int exitValue; - private String out; - private String err; + private int exitValue; + private String out; + private String err; - // //////////////////////////////////////////////////////////////////// - // - // //////////////////////////////////////////////////////////////////// - - /** + /** + * Instantiates a new cmd exec. * + * @param command + * the command */ - public CmdExec(final String command) - { - run(command, StreamGobbler.StreamWay.BUFFER, StreamGobbler.StreamWay.BUFFER); - } + public CmdExec(final String command) + { + run(command, StreamGobbler.StreamWay.BUFFER, StreamGobbler.StreamWay.BUFFER); + } - /** + /** + * Instantiates a new cmd exec. * + * @param command + * the command */ - public CmdExec(final String... command) - { - run(command, StreamGobbler.StreamWay.BUFFER, StreamGobbler.StreamWay.BUFFER); - } + public CmdExec(final String... command) + { + run(command, StreamGobbler.StreamWay.BUFFER, StreamGobbler.StreamWay.BUFFER); + } - /** + /** + * Instantiates a new cmd exec. * + * @param command + * the command + * @param outputGobbler + * the output gobbler + * @param errorGobbler + * the error gobbler */ - public CmdExec(final String command, final StreamGobbler outputGobbler, final StreamGobbler errorGobbler) - { - run(command, outputGobbler, errorGobbler); - } + public CmdExec(final String command, final StreamGobbler outputGobbler, final StreamGobbler errorGobbler) + { + run(command, outputGobbler, errorGobbler); + } - /** + /** + * Instantiates a new cmd exec. * + * @param command + * the command + * @param stdout + * the stdout + * @param stderr + * the stderr */ - public CmdExec(final String command, final StreamGobbler.StreamWay stdout, final StreamGobbler.StreamWay stderr) - { - run(command, stdout, stderr); - } + public CmdExec(final String command, final StreamGobbler.StreamWay stdout, final StreamGobbler.StreamWay stderr) + { + run(command, stdout, stderr); + } - /** + /** + * Instantiates a new cmd exec. * + * @param command + * the command + * @param outputGobbler + * the output gobbler + * @param errorGobbler + * the error gobbler */ - public CmdExec(final String[] command, final StreamGobbler outputGobbler, final StreamGobbler errorGobbler) - { - run(command, outputGobbler, errorGobbler); - } + public CmdExec(final String[] command, final StreamGobbler outputGobbler, final StreamGobbler errorGobbler) + { + run(command, outputGobbler, errorGobbler); + } - /** + /** + * Instantiates a new cmd exec. * + * @param command + * the command + * @param stdout + * the stdout + * @param stderr + * the stderr */ - public CmdExec(final String[] command, final StreamGobbler.StreamWay stdout, final StreamGobbler.StreamWay stderr) - { - run(command, stdout, stderr); - } + public CmdExec(final String[] command, final StreamGobbler.StreamWay stdout, final StreamGobbler.StreamWay stderr) + { + run(command, stdout, stderr); + } - // //////////////////////////////////////////////////////////////////// - // - // //////////////////////////////////////////////////////////////////// + // //////////////////////////////////////////////////////////////////// + // + // //////////////////////////////////////////////////////////////////// - /** - * - * @return - */ - public String getErrStream() - { - String result; - - result = this.err; - - // - return (result); - } - - /** - * - * @return - */ - public int getExitValue() - { - int result; - - result = this.exitValue; - - // - return (result); - } - - /** - * - * @return - */ - public String getOutStream() - { - String result; - - result = this.out; - - // - return (result); - } - - /** - * - * @param command - * : not a shell command, it must be a executable program. - * @param outputGobbler - * @param errorGobbler - * @return - */ - public int run(final String command, final StreamGobbler outputGobbler, final StreamGobbler errorGobbler) - { - int result; - - logger.info("CmdExec(command) = [" + command + "]"); - - String[] commands = command.split("[ \t\n\r\f]"); - - result = run(commands, outputGobbler, errorGobbler); - - // - return (result); - } - - /** + /** + * Gets the err stream. * + * @return the err stream */ - public int run(final String command, final StreamWay stdout, final StreamWay stderr) - { - int result; + public String getErrStream() + { + String result; - result = run(command, new StreamGobbler("OUTPUT", stdout), new StreamGobbler("ERROR", stderr)); + result = this.err; - // - return (result); - } + // + return result; + } - /** - * Note: this code is inspired by an article of Michael C. Daconta published - * in JavaWorld Dec 29, 2000 (http://www.javaworld.com/article/2071275 - * /core-java/when-runtime-exec---won-t.html?page=2). - * - * @param command - * not a shell command, it must be a executable program. - * @param outputGobbler - * @param errorGobbler - * @return - */ - public int run(final String[] command, final StreamGobbler outputGobbler, final StreamGobbler errorGobbler) - { - int result; + /** + * Gets the exit value. + * + * @return the exit value + */ + public int getExitValue() + { + int result; - logger.info("CmdExec(command[]) = [" + StringListUtils.toStringSeparatedBy(command, " ") + "]"); - logger.info("CmdExec(command[]) = [" + StringListUtils.toStringWithBrackets(command) + "]"); + result = this.exitValue; - try - { - Runtime rt = Runtime.getRuntime(); + // + return result; + } - Process process = rt.exec(command); + /** + * Gets the out stream. + * + * @return the out stream + */ + public String getOutStream() + { + String result; - // Set a collector for error message. - errorGobbler.setInputStream(process.getErrorStream()); + result = this.out; - // Set a collector for output message. - outputGobbler.setInputStream(process.getInputStream()); + // + return result; + } - // Collect messages. - errorGobbler.start(); - outputGobbler.start(); + /** + * Run. + * + * @param command + * : not a shell command, it must be a executable program. + * @param outputGobbler + * the output gobbler + * @param errorGobbler + * the error gobbler + * @return the int + */ + public int run(final String command, final StreamGobbler outputGobbler, final StreamGobbler errorGobbler) + { + int result; - // Wait and manage the exit value. - this.exitValue = process.waitFor(); - logger.info("ExitValue: {}", this.exitValue); + logger.info("CmdExec(command) = [" + command + "]"); - // Sometimes, process ends before Gobblers read its outpout, so we - // must wait them. - while ((!outputGobbler.isOver()) || (!errorGobbler.isOver())) - { - Thread.sleep(1); - } + String[] commands = command.split("[ \t\n\r\f]"); - // Store messages. - this.out = outputGobbler.getStream(); - this.err = errorGobbler.getStream(); + result = run(commands, outputGobbler, errorGobbler); - result = this.exitValue; - } - catch (Exception exception) - { - this.err = exception.getMessage(); - this.exitValue = -77; - result = this.exitValue; - logger.error(exception.getMessage(), exception); - } + // + return result; + } - // - return (result); - } + /** + * Run. + * + * @param command + * the command + * @param stdout + * the stdout + * @param stderr + * the stderr + * @return the int + */ + public int run(final String command, final StreamWay stdout, final StreamWay stderr) + { + int result; - /** - * - * @param command - * @param stdout - * @param stderr - * @return - */ - public int run(final String[] command, final StreamGobbler.StreamWay stdout, final StreamGobbler.StreamWay stderr) - { - int result; + result = run(command, new StreamGobbler("OUTPUT", stdout), new StreamGobbler("ERROR", stderr)); - result = run(command, new StreamGobbler("OUTPUT", stdout), new StreamGobbler("ERROR", stderr)); + // + return result; + } - // - return (result); - } + /** + * Note: this code is inspired by an article of Michael C. Daconta published + * in JavaWorld Dec 29, 2000 (http://www.javaworld.com/article/2071275 + * /core-java/when-runtime-exec---won-t.html?page=2). + * + * @param command + * not a shell command, it must be a executable program. + * @param outputGobbler + * the output gobbler + * @param errorGobbler + * the error gobbler + * @return the int + */ + public int run(final String[] command, final StreamGobbler outputGobbler, final StreamGobbler errorGobbler) + { + int result; - /** - * - * @param commands - * @return - * @throws CmdExecException - */ - public static String multirun(final String... commands) throws CmdExecException - { - String result; + logger.info("CmdExec(command[]) = [" + StringListUtils.toStringSeparatedBy(command, " ") + "]"); + logger.info("CmdExec(command[]) = [" + StringListUtils.toStringWithBrackets(command) + "]"); - ArrayList stdouts = new ArrayList(commands.length); + try + { + Runtime rt = Runtime.getRuntime(); - boolean ended = false; - int commandCounter = 0; - while (!ended) - { - if (commandCounter < commands.length) - { - String command = commands[commandCounter]; + Process process = rt.exec(command); - if ((command == null) || (command.length() == 0)) - { - result = null; - commandCounter += 1; - } - else - { - stdouts.add(CmdExec.run(command)); - commandCounter += 1; - } - } - else - { - ended = true; - result = null; - } - } + // Set a collector for error message. + errorGobbler.setInputStream(process.getErrorStream()); - // - int resultLength = 0; - for (String stdout : stdouts) - { - resultLength += stdout.length(); - } - StringBuffer buffer = new StringBuffer(resultLength); - for (String stdout : stdouts) - { - buffer.append(stdout); - } - result = buffer.toString(); + // Set a collector for output message. + outputGobbler.setInputStream(process.getInputStream()); - // - return (result); - } + // Collect messages. + errorGobbler.start(); + outputGobbler.start(); - // //////////////////////////////////////////////////////////////////// - // - // //////////////////////////////////////////////////////////////////// - /** - * @throws CmdExecException - */ - public static String run(final String command) throws CmdExecException - { - String result; + // Wait and manage the exit value. + this.exitValue = process.waitFor(); + logger.info("ExitValue: {}", this.exitValue); - result = CmdExec.run(command.split("[ \t\n\r\f]")); + // Sometimes, process ends before Gobblers read its outpout, so we + // must wait them. + while ((!outputGobbler.isOver()) || (!errorGobbler.isOver())) + { + Thread.sleep(1); + } - // - return (result); - } + // Store messages. + this.out = outputGobbler.getStream(); + this.err = errorGobbler.getStream(); - /** - * @throws CmdExecException - * @throws Exception - */ - public static String run(final String... command) throws CmdExecException - { - String result; + result = this.exitValue; + } + catch (Exception exception) + { + this.err = exception.getMessage(); + this.exitValue = -77; + result = this.exitValue; + logger.error(exception.getMessage(), exception); + } - if ((command == null) || (command.length == 0)) - { - throw new IllegalArgumentException("Empty command"); - } - else - { - CmdExec cmd = new CmdExec(command, StreamGobbler.StreamWay.BUFFER, StreamGobbler.StreamWay.BUFFER); + // + return result; + } - if (cmd.getExitValue() == 0) - { - result = cmd.getOutStream(); - } - else - { - logger.error("Command=\"" + StringListUtils.toStringWithBrackets(command)); - logger.error("Command=\"[" + StringListUtils.toString(command) + "]\n out => [" + cmd.getOutStream() + "]\n " + "err => (" + cmd.getErrStream().length() + ")[" + cmd.getErrStream() - + "]"); - throw new CmdExecException(cmd.getErrStream()); - } - } + /** + * Run. + * + * @param command + * the command + * @param stdout + * the stdout + * @param stderr + * the stderr + * @return the int + */ + public int run(final String[] command, final StreamGobbler.StreamWay stdout, final StreamGobbler.StreamWay stderr) + { + int result; - // - return (result); - } + result = run(command, new StreamGobbler("OUTPUT", stdout), new StreamGobbler("ERROR", stderr)); - /** - * Examples: - * - * run("sudo", "setfacl", "-m", "g:cpm:rwX", "/tmp/toto"); - * - * run("sudo", "setfacl", "-R", "-m", "g:cpm:rwX", "/tmp/toto"); - * - * @throws CmdExecException - */ - public static String run(final String program1, final String program2, final String[] args, final int min, final int max) throws CmdExecException - { - String result; + // + return result; + } - // - boolean nullArg = false; - boolean ended = false; - int argumentIndex = 0; - while (!ended) - { - if (argumentIndex >= args.length) - { - ended = true; - nullArg = false; - } - else - { - if (args[argumentIndex] == null) - { - ended = true; - nullArg = true; - } - else - { - argumentIndex += 1; - } - } - } + /** + * Multirun. + * + * @param commands + * the commands + * @return the string + * @throws CmdExecException + * the cmd exec exception + */ + public static String multirun(final String... commands) throws CmdExecException + { + String result; - // - if (program1 == null) - { - throw new IllegalArgumentException("Null program parameter 1 detected: [" + program1 + "]."); - } - else if (program2 == null) - { - throw new IllegalArgumentException("Null program parameter 2 detected: [" + program2 + "]."); - } - else if (nullArg) - { - throw new IllegalArgumentException("Null parameter detected in position " + argumentIndex + " for " + StringListUtils.toStringWithBrackets(args) + "."); - } - else if ((args.length < min) || (args.length > max)) - { - throw new IllegalArgumentException("Bad number of parameters: " + args.length + " for " + StringListUtils.toStringWithBrackets(args) + "."); - } - else - { - // - String[] command = new String[args.length + 2]; - command[0] = program1; - command[1] = program2; - for (argumentIndex = 0; argumentIndex < args.length; argumentIndex++) - { - command[argumentIndex + 2] = args[argumentIndex]; - } + ArrayList stdouts = new ArrayList(commands.length); - result = CmdExec.run(command); - } + boolean ended = false; + int commandCounter = 0; + while (!ended) + { + if (commandCounter < commands.length) + { + String command = commands[commandCounter]; - // - return (result); - } + if ((command == null) || (command.length() == 0)) + { + result = null; + commandCounter += 1; + } + else + { + stdouts.add(CmdExec.run(command)); + commandCounter += 1; + } + } + else + { + ended = true; + result = null; + } + } - /** - * Examples: - * - * run("setfacl", "-m", "g:cpm:rwX", "/tmp/toto"); - * - * run("setfacl", "-R", "-m", "g:cpm:rwX", "/tmp/toto"); - * - * @throws CmdExecException - */ - public static String run(final String program, final String[] args, final int min, final int max) throws CmdExecException - { - String result; + // + int resultLength = 0; + for (String stdout : stdouts) + { + resultLength += stdout.length(); + } + StringBuffer buffer = new StringBuffer(resultLength); + for (String stdout : stdouts) + { + buffer.append(stdout); + } + result = buffer.toString(); - // - boolean nullArg = false; - boolean ended = false; - int argumentCounter = 0; - while (!ended) - { - if (argumentCounter >= args.length) - { - ended = true; - nullArg = false; - } - else - { - if (args[argumentCounter] == null) - { - ended = true; - nullArg = true; - } - else - { - argumentCounter += 1; - } - } - } + // + return result; + } - // - if (program == null) - { - throw new IllegalArgumentException("Null program parameter detected: [" + program + "]."); - } - else if (nullArg) - { - throw new IllegalArgumentException("Null parameter detected in position " + argumentCounter + " for " + StringListUtils.toStringWithBrackets(args) + "."); - } - else if ((args.length < min) || (args.length > max)) - { - throw new IllegalArgumentException("Bad number of parameters: " + args.length + " for " + StringListUtils.toStringWithBrackets(args) + "."); - } - else - { - // - String[] command = new String[args.length + 1]; - command[0] = program; - for (argumentCounter = 0; argumentCounter < args.length; argumentCounter++) - { - command[argumentCounter + 1] = args[argumentCounter]; - } + // //////////////////////////////////////////////////////////////////// + // + // //////////////////////////////////////////////////////////////////// + /** + * Run. + * + * @param command + * the command + * @return the string + * @throws CmdExecException + * the cmd exec exception + */ + public static String run(final String command) throws CmdExecException + { + String result; - result = CmdExec.run(command); - } + result = CmdExec.run(command.split("[ \t\n\r\f]")); - // - return (result); - } + // + return result; + } + + /** + * Run. + * + * @param command + * the command + * @return the string + * @throws CmdExecException + * the cmd exec exception + */ + public static String run(final String... command) throws CmdExecException + { + String result; + + if ((command == null) || (command.length == 0)) + { + throw new IllegalArgumentException("Empty command"); + } + else + { + CmdExec cmd = new CmdExec(command, StreamGobbler.StreamWay.BUFFER, StreamGobbler.StreamWay.BUFFER); + + if (cmd.getExitValue() == 0) + { + result = cmd.getOutStream(); + } + else + { + logger.error("Command=\"" + StringListUtils.toStringWithBrackets(command)); + logger.error("Command=\"[" + StringListUtils.toString(command) + "]\n out => [" + cmd.getOutStream() + "]\n " + "err => (" + cmd.getErrStream().length() + ")[" + cmd.getErrStream() + + "]"); + throw new CmdExecException(cmd.getErrStream()); + } + } + + // + return result; + } + + /** + * Examples: + * + * run("sudo", "setfacl", "-m", "g:cpm:rwX", "/tmp/toto"); + * + * run("sudo", "setfacl", "-R", "-m", "g:cpm:rwX", "/tmp/toto");. + * + * @param program1 + * the program 1 + * @param program2 + * the program 2 + * @param args + * the args + * @param min + * the min + * @param max + * the max + * @return the string + * @throws CmdExecException + * the cmd exec exception + */ + public static String run(final String program1, final String program2, final String[] args, final int min, final int max) throws CmdExecException + { + String result; + + // + boolean nullArg = false; + boolean ended = false; + int argumentIndex = 0; + while (!ended) + { + if (argumentIndex >= args.length) + { + ended = true; + nullArg = false; + } + else + { + if (args[argumentIndex] == null) + { + ended = true; + nullArg = true; + } + else + { + argumentIndex += 1; + } + } + } + + // + if (program1 == null) + { + throw new IllegalArgumentException("Null program parameter 1 detected: [" + program1 + "]."); + } + else if (program2 == null) + { + throw new IllegalArgumentException("Null program parameter 2 detected: [" + program2 + "]."); + } + else if (nullArg) + { + throw new IllegalArgumentException("Null parameter detected in position " + argumentIndex + " for " + StringListUtils.toStringWithBrackets(args) + "."); + } + else if ((args.length < min) || (args.length > max)) + { + throw new IllegalArgumentException("Bad number of parameters: " + args.length + " for " + StringListUtils.toStringWithBrackets(args) + "."); + } + else + { + // + String[] command = new String[args.length + 2]; + command[0] = program1; + command[1] = program2; + for (argumentIndex = 0; argumentIndex < args.length; argumentIndex++) + { + command[argumentIndex + 2] = args[argumentIndex]; + } + + result = CmdExec.run(command); + } + + // + return result; + } + + /** + * Examples: + * + * run("setfacl", "-m", "g:cpm:rwX", "/tmp/toto"); + * + * run("setfacl", "-R", "-m", "g:cpm:rwX", "/tmp/toto");. + * + * @param program + * the program + * @param args + * the args + * @param min + * the min + * @param max + * the max + * @return the string + * @throws CmdExecException + * the cmd exec exception + */ + public static String run(final String program, final String[] args, final int min, final int max) throws CmdExecException + { + String result; + + // + boolean nullArg = false; + boolean ended = false; + int argumentCounter = 0; + while (!ended) + { + if (argumentCounter >= args.length) + { + ended = true; + nullArg = false; + } + else + { + if (args[argumentCounter] == null) + { + ended = true; + nullArg = true; + } + else + { + argumentCounter += 1; + } + } + } + + // + if (program == null) + { + throw new IllegalArgumentException("Null program parameter detected: [" + program + "]."); + } + else if (nullArg) + { + throw new IllegalArgumentException("Null parameter detected in position " + argumentCounter + " for " + StringListUtils.toStringWithBrackets(args) + "."); + } + else if ((args.length < min) || (args.length > max)) + { + throw new IllegalArgumentException("Bad number of parameters: " + args.length + " for " + StringListUtils.toStringWithBrackets(args) + "."); + } + else + { + // + String[] command = new String[args.length + 1]; + command[0] = program; + for (argumentCounter = 0; argumentCounter < args.length; argumentCounter++) + { + command[argumentCounter + 1] = args[argumentCounter]; + } + + result = CmdExec.run(command); + } + + // + return result; + } } diff --git a/src/fr/devinsy/util/cmdexec/CmdExecException.java b/src/fr/devinsy/util/cmdexec/CmdExecException.java index e50dee6..a706db4 100644 --- a/src/fr/devinsy/util/cmdexec/CmdExecException.java +++ b/src/fr/devinsy/util/cmdexec/CmdExecException.java @@ -1,65 +1,72 @@ -/** - * Copyright (C) 2016 Christian Pierre MOMON +/* + * Copyright (C) 2016-2017 Christian Pierre MOMON * - * This file is part of Devinsy-utils. + * This file is part of Devinsy-unix. * - * Devinsy-utils is free software: you can redistribute it and/or modify + * Devinsy-unix is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * - * Devinsy-utils is distributed in the hope that it will be useful, + * Devinsy-unix is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public License - * along with Devinsy-utils. If not, see + * along with Devinsy-unix. If not, see */ package fr.devinsy.util.cmdexec; /** + * The Class CmdExecException. * * @author Christian Pierre MOMON (christian.momon@devinsy.fr) - * */ public class CmdExecException extends Exception { - private static final long serialVersionUID = 3264886426311529668L; + private static final long serialVersionUID = 3264886426311529668L; - /** - * - */ - public CmdExecException() - { - super(); - } + /** + * Instantiates a new cmd exec exception. + */ + public CmdExecException() + { + super(); + } - /** - * - * @param message - */ - public CmdExecException(final String message) - { - super(message); - } + /** + * Instantiates a new cmd exec exception. + * + * @param message + * the message + */ + public CmdExecException(final String message) + { + super(message); + } - /** - * - * @param message - * @param cause - */ - public CmdExecException(final String message, final Throwable cause) - { - super(message, cause); - } + /** + * Instantiates a new cmd exec exception. + * + * @param message + * the message + * @param cause + * the cause + */ + public CmdExecException(final String message, final Throwable cause) + { + super(message, cause); + } - /** - * - * @param cause - */ - public CmdExecException(final Throwable cause) - { - super(cause); - } + /** + * Instantiates a new cmd exec exception. + * + * @param cause + * the cause + */ + public CmdExecException(final Throwable cause) + { + super(cause); + } } diff --git a/src/fr/devinsy/util/cmdexec/StreamGobbler.java b/src/fr/devinsy/util/cmdexec/StreamGobbler.java index a4739ae..848e3a0 100644 --- a/src/fr/devinsy/util/cmdexec/StreamGobbler.java +++ b/src/fr/devinsy/util/cmdexec/StreamGobbler.java @@ -1,20 +1,20 @@ -/** - * Copyright (C) 2005-2008, 2010, 2013, 2016 Christian Pierre MOMON +/* + * Copyright (C) 2005-2008, 2010, 2013, 2016-2017 Christian Pierre MOMON * - * This file is part of Devinsy-utils. + * This file is part of Devinsy-unix. * - * Devinsy-utils is free software: you can redistribute it and/or modify + * Devinsy-unix is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * - * Devinsy-utils is distributed in the hope that it will be useful, + * Devinsy-unix is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public License - * along with Devinsy-utils. If not, see + * along with Devinsy-unix. If not, see */ package fr.devinsy.util.cmdexec; @@ -27,170 +27,185 @@ import org.slf4j.Logger; import org.slf4j.LoggerFactory; /** + * The Class StreamGobbler. * * @author Christian Pierre MOMON (christian.momon@devinsy.fr) */ public class StreamGobbler extends Thread { - public enum StreamWay - { - NONE, - PRINT, - BUFFER - } + public enum StreamWay + { + NONE, + PRINT, + BUFFER + } - private static final Logger logger = LoggerFactory.getLogger(CmdExec.class); + private static final Logger logger = LoggerFactory.getLogger(CmdExec.class); - private InputStream is; - private String name; - private StreamWay streamWay; - private StringBuffer stream; + private InputStream is; + private String name; + private StreamWay streamWay; + private StringBuffer stream; - // Important if the caller wants have complete stream in case of very short - // command. - private boolean isOverStatus; + // Important if the caller wants have complete stream in case of very short + // command. + private boolean isOverStatus; - /** - * + /** + * Instantiates a new stream gobbler. */ - StreamGobbler() - { - this.is = null; - this.name = ""; - this.streamWay = StreamWay.NONE; - this.stream = new StringBuffer(); - this.isOverStatus = false; - } + StreamGobbler() + { + this.is = null; + this.name = ""; + this.streamWay = StreamWay.NONE; + this.stream = new StringBuffer(); + this.isOverStatus = false; + } - /** - * - * @param is - * @param name - */ - StreamGobbler(final InputStream is, final String name) - { - this.is = is; - this.name = name; - this.streamWay = StreamWay.NONE; - this.stream = new StringBuffer(); - this.isOverStatus = false; - } - - /** - * - * @param is - * @param name - * @param streamWay - */ - StreamGobbler(final InputStream is, final String name, final StreamWay streamWay) - { - this.is = is; - this.name = name; - this.streamWay = streamWay; - this.stream = new StringBuffer(); - this.isOverStatus = false; - } - - /** - * - * @param type - * @param streamWay - */ - StreamGobbler(final String type, final StreamWay streamWay) - { - this.name = type; - this.streamWay = streamWay; - this.stream = new StringBuffer(); - this.isOverStatus = false; - } - - /** - * - * @return - */ - public String getStream() - { - String result; - - if (this.stream != null) - { - result = this.stream.toString(); - } - else - { - result = null; - } - - // - return (result); - } - - /** - * - * @return - */ - public boolean isOver() - { - boolean result; - - result = this.isOverStatus; - - // - return (result); - } - - /** + /** + * Instantiates a new stream gobbler. * + * @param is + * the is + * @param name + * the name */ - @Override - public void run() - { - try - { - InputStreamReader isr = new InputStreamReader(this.is); - BufferedReader buffer = new BufferedReader(isr); - String line = null; - switch (this.streamWay) - { - case NONE: - while ((line = buffer.readLine()) != null) - { - ; - } - break; + StreamGobbler(final InputStream is, final String name) + { + this.is = is; + this.name = name; + this.streamWay = StreamWay.NONE; + this.stream = new StringBuffer(); + this.isOverStatus = false; + } - case PRINT: - while ((line = buffer.readLine()) != null) - { - System.out.println(this.name + ">" + line); - } - break; + /** + * Instantiates a new stream gobbler. + * + * @param is + * the is + * @param name + * the name + * @param streamWay + * the stream way + */ + StreamGobbler(final InputStream is, final String name, final StreamWay streamWay) + { + this.is = is; + this.name = name; + this.streamWay = streamWay; + this.stream = new StringBuffer(); + this.isOverStatus = false; + } - case BUFFER: - while ((line = buffer.readLine()) != null) - { - this.stream.append(line + "\n"); - } - break; + /** + * Instantiates a new stream gobbler. + * + * @param type + * the type + * @param streamWay + * the stream way + */ + StreamGobbler(final String type, final StreamWay streamWay) + { + this.name = type; + this.streamWay = streamWay; + this.stream = new StringBuffer(); + this.isOverStatus = false; + } - default: - logger.warn("unknow way for stream"); - } - } - catch (IOException exception) - { - logger.error(exception.getMessage(), exception); - } + /** + * Gets the stream. + * + * @return the stream + */ + public String getStream() + { + String result; - this.isOverStatus = true; - } + if (this.stream != null) + { + result = this.stream.toString(); + } + else + { + result = null; + } - /** - * - * @param is - */ - public void setInputStream(final InputStream is) - { - this.is = is; - } + // + return result; + } + + /** + * Checks if is over. + * + * @return true, if is over + */ + public boolean isOver() + { + boolean result; + + result = this.isOverStatus; + + // + return result; + } + + /* (non-Javadoc) + * @see java.lang.Thread#run() + */ + @Override + public void run() + { + try + { + InputStreamReader isr = new InputStreamReader(this.is); + BufferedReader buffer = new BufferedReader(isr); + String line = null; + switch (this.streamWay) + { + case NONE: + while ((line = buffer.readLine()) != null) + { + ; + } + break; + + case PRINT: + while ((line = buffer.readLine()) != null) + { + System.out.println(this.name + ">" + line); + } + break; + + case BUFFER: + while ((line = buffer.readLine()) != null) + { + this.stream.append(line + "\n"); + } + break; + + default: + logger.warn("unknow way for stream"); + } + } + catch (IOException exception) + { + logger.error(exception.getMessage(), exception); + } + + this.isOverStatus = true; + } + + /** + * Sets the input stream. + * + * @param is + * the new input stream + */ + public void setInputStream(final InputStream is) + { + this.is = is; + } } diff --git a/src/fr/devinsy/util/rss/RSSCache.java b/src/fr/devinsy/util/rss/RSSCache.java deleted file mode 100644 index 939398e..0000000 --- a/src/fr/devinsy/util/rss/RSSCache.java +++ /dev/null @@ -1,214 +0,0 @@ -/** - * Copyright (C) 2013-2014 Christian Pierre MOMON - * - * This file is part of Devinsy-utils. - * - * Devinsy-utils is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * Devinsy-utils is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public License - * along with Devinsy-utils. If not, see - */ -package fr.devinsy.util.rss; - -import java.util.HashMap; -import java.util.Locale; - -import fr.devinsy.util.strings.StringList; - -/** - * - * @author Christian Pierre MOMON (christian.momon@devinsy.fr) - */ -public class RSSCache -{ - private static RSSCache instance = new RSSCache(); - private HashMap cache; - - /** - * - */ - private RSSCache() - { - this.cache = new HashMap(); - } - - /** - * - * @param key - * @param locale - * @return - */ - public String get(final String name) - { - return get(name, Locale.ROOT); - } - - /** - * - * @param name - * @param locale - * @return - */ - public String get(final String name, final Locale locale) - { - String result; - - if (name == null) - { - throw new NullPointerException("name is null."); - } - else if (locale == null) - { - result = get(name, Locale.ROOT); - } - else - { - result = this.cache.get(key(name, locale)); - - if (result == null) - { - result = this.cache.get(name); - } - } - - return result; - } - - /** - * - * @param name - * @param locale - * @return - */ - private String key(final String name, final Locale locale) - { - String result; - - if (locale.getLanguage().length() == 0) - { - result = name; - } - else - { - result = name + "_" + locale.getLanguage(); - } - - // - return result; - } - - /** - * - * @param key - * @param locale - * @param rss - */ - public void put(final String name, final Locale locale, final String rss) - { - if (name == null) - { - throw new NullPointerException("name is null."); - } - else if (locale == null) - { - put(name, Locale.ROOT, rss); - } - else - { - this.cache.put(key(name, locale), rss); - } - } - - /** - * - * @param name - * @param locale - * @param rss - */ - public void put(final String name, final String rss) - { - put(name, Locale.ROOT, rss); - } - - /** - * - * @param name - */ - public void remove(final String name) - { - remove(name, Locale.ROOT); - } - - /** - * - * @param name - */ - public void remove(final String name, final Locale locale) - { - if (name == null) - { - throw new NullPointerException("key is null."); - } - else - { - this.cache.remove(name + "-" + locale.getLanguage()); - } - } - - /** - * - * @param key - */ - public void setOudated(final String name) - { - for (String subkey : subkeys(name)) - { - if (subkey.startsWith(name)) - { - this.cache.remove(subkey); - } - } - } - - /** - * - * @param key - */ - public StringList subkeys(final String name) - { - StringList result; - - // - result = new StringList(); - - // - for (String key : this.cache.keySet()) - { - if (key.startsWith(name)) - { - result.add(key); - } - } - - // - return result; - } - - /** - * - * @return - */ - public static RSSCache instance() - { - return instance; - } - -} diff --git a/src/fr/devinsy/util/rss/RSSElement.java b/src/fr/devinsy/util/rss/RSSElement.java deleted file mode 100644 index 52e07d8..0000000 --- a/src/fr/devinsy/util/rss/RSSElement.java +++ /dev/null @@ -1,154 +0,0 @@ -/** - * Copyright (C) 2013-2014 Christian Pierre MOMON - * - * This file is part of Devinsy-utils. - * - * Devinsy-utils is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * Devinsy-utils is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public License - * along with Devinsy-utils. If not, see - */ -package fr.devinsy.util.rss; - -import org.joda.time.DateTime; - -/** - * - * @author Christian Pierre MOMON (christian.momon@devinsy.fr) - */ -public class RSSElement -{ - public static final String DATE_PATTERN = "dd MMM YYYY hh:mm:ss Z"; - private String name; - private String value; - private String[] attributes; - - /** - * - * @param name - * @param value - */ - public RSSElement(final String name, final DateTime value) - { - setName(name); - if (value == null) - { - this.value = null; - } - else - { - this.value = value.toString(DATE_PATTERN); - } - this.attributes = null; - } - - /** - * - * @param name - * @param value - */ - public RSSElement(final String name, final long value) - { - setName(name); - this.value = String.valueOf(value); - this.attributes = null; - } - - /** - * - * @param name - * @param value - */ - public RSSElement(final String name, final long value, final String... attributes) - { - setName(name); - this.value = String.valueOf(value); - this.attributes = attributes; - } - - /** - * - * @param name - * @param value - */ - public RSSElement(final String name, final String value) - { - setName(name); - this.value = value; - this.attributes = null; - } - - /** - * - * @param name - * @param value - */ - public RSSElement(final String name, final String value, final String... attributes) - { - setName(name); - this.value = value; - this.attributes = attributes; - } - - public String[] getAttributes() - { - return this.attributes; - } - - /** - * - * @return - */ - public String getName() - { - return this.name; - } - - /** - * - * @return - */ - public String getValue() - { - return this.value; - } - - public void setAttributes(final String[] attributes) - { - this.attributes = attributes; - } - - /** - * - * @param name - */ - public void setName(final String name) - { - if (name == null) - { - throw new NullPointerException("name is null"); - } - else - { - this.name = name; - } - } - - /** - * - * @param value - */ - public void setValue(final String value) - { - this.value = value; - } - -} diff --git a/src/fr/devinsy/util/rss/RSSWriter.java b/src/fr/devinsy/util/rss/RSSWriter.java deleted file mode 100644 index 31610c7..0000000 --- a/src/fr/devinsy/util/rss/RSSWriter.java +++ /dev/null @@ -1,172 +0,0 @@ -/** - * Copyright (C) 2013-2014 Christian Pierre MOMON - * - * This file is part of Devinsy-utils. - * - * Devinsy-utils is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * Devinsy-utils is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public License - * along with Devinsy-utils. If not, see - */ -package fr.devinsy.util.rss; - -import java.io.File; -import java.io.FileNotFoundException; -import java.io.IOException; -import java.io.OutputStream; -import java.io.UnsupportedEncodingException; -import java.io.Writer; - -import fr.devinsy.util.xml.XMLWriter; - -/** - * - * @author Christian Pierre MOMON (christian.momon@devinsy.fr) - */ -public class RSSWriter -{ - private XMLWriter out; - - /** - * - * @param file - * @throws FileNotFoundException - * @throws UnsupportedEncodingException - */ - public RSSWriter(final File file) throws UnsupportedEncodingException, FileNotFoundException - { - this.out = new XMLWriter(file); - writeRSSHeader(); - } - - /** - * - * @param target - * @throws UnsupportedEncodingException - */ - public RSSWriter(final OutputStream target) throws UnsupportedEncodingException - { - this.out = new XMLWriter(target); - writeRSSHeader(); - } - - /** - * - * @param target - * @throws UnsupportedEncodingException - */ - public RSSWriter(final Writer target) throws UnsupportedEncodingException - { - this.out = new XMLWriter(target); - writeRSSHeader(); - } - - /** - * - */ - public void close() throws IOException - { - if (this.out != null) - { - this.out.writeEndTag("channel"); - this.out.writeEndTag("rss"); - this.out.close(); - } - } - - /** - * - */ - public void flush() throws IOException - { - if (this.out != null) - { - this.out.flush(); - } - } - - /** - * - */ - public void writeChannel(final String title, final String link, final String description, final RSSElement... elements) - { - // - this.out.writeStartTag("channel"); - - // - this.out.writeTag("title", title); - this.out.writeTag("link", link); - this.out.writeTag("description", description); - - // - if ((elements != null) && (elements.length > 0)) - { - for (RSSElement element : elements) - { - this.out.writeTag(element.getName(), element.getValue(), element.getAttributes()); - } - } - } - - /** - * - * @param comment - */ - public void writeComment(final String comment) - { - this.out.writeComment(comment); - } - - /** - * - */ - public void writeItem(final String title, final String link, final String description, final RSSElement... elements) - { - // - this.out.writeStartTag("item"); - - // - this.out.writeTag("title", title); - if (link != null) - { - this.out.writeTag("link", link); - } - if (description == null) - { - this.out.writeTag("description", "n/a"); - } - else - { - this.out.writeTag("description", description); - } - - // - if ((elements != null) && (elements.length > 0)) - { - for (RSSElement element : elements) - { - this.out.writeTag(element.getName(), element.getValue(), element.getAttributes()); - } - } - - // - this.out.writeEndTag("item"); - } - - /** - * - */ - private void writeRSSHeader() - { - this.out.writeXMLHeader(); - this.out.writeStartTag("rss", "version", "2.0"); - } -} diff --git a/src/fr/devinsy/util/strings/StringLengthComparator.java b/src/fr/devinsy/util/strings/StringLengthComparator.java deleted file mode 100644 index adac2f1..0000000 --- a/src/fr/devinsy/util/strings/StringLengthComparator.java +++ /dev/null @@ -1,146 +0,0 @@ -/** - * Copyright (C) 2013-2017 Christian Pierre MOMON - * - * This file is part of Devinsy-utils. - * - * Devinsy-utils is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * Devinsy-utils is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public License - * along with Devinsy-utils. If not, see - */ -package fr.devinsy.util.strings; - -import java.util.Comparator; - -/** - * - */ -public class StringLengthComparator implements Comparator -{ - private static StringLengthComparator instance; - - /** - * - */ - @Override - public int compare(final String alpha, final String bravo) - { - int result; - - // - Integer alphaValue; - if (alpha == null) - { - // - alphaValue = null; - - } - else - { - // - alphaValue = alpha.length(); - } - - // - Integer bravoValue; - if (bravo == null) - { - // - bravoValue = null; - - } - else - { - // - bravoValue = bravo.length(); - } - - // - result = compare(alphaValue, bravoValue); - - // - return result; - } - - /** - * This method compares two nullable string values. - * - * The comparison manages the local language alphabet order. - * - *
-	 * compare(null, null)   = 0
-	 * compare(null, bravo)  < 0
-	 * compare(alpha, null)  > 0
-	 * compare(alpha, bravo) = alpha.compareTo(bravo)
-	 * 
- * - * @param alpha - * one of the value. - * - * @param bravo - * the other value. - * - * @return zero or a positive value or a negative value. - * - */ - public static int compare(final Integer alpha, final Integer bravo) - { - int result; - - // - if ((alpha == null) && (bravo == null)) - { - // - result = 0; - - } - else if (alpha == null) - { - // - result = -1; - - } - else if (bravo == null) - { - // - result = +1; - - } - else - { - // - result = alpha.compareTo(bravo); - } - - // - return result; - } - - /** - * - * @return - */ - public static StringLengthComparator instance() - { - StringLengthComparator result; - - if (instance == null) - { - instance = new StringLengthComparator(); - } - - result = instance; - - // - return result; - } - -} diff --git a/src/fr/devinsy/util/strings/StringList.java b/src/fr/devinsy/util/strings/StringList.java deleted file mode 100644 index 873f541..0000000 --- a/src/fr/devinsy/util/strings/StringList.java +++ /dev/null @@ -1,1584 +0,0 @@ -/** - * Copyright (C) 2008-2010, 2013-2015 Christian Pierre MOMON - * - * This file is part of Devinsy-utils. - * - * Devinsy-utils is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * Devinsy-utils is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public License - * along with Devinsy-utils. If not, see - */ -package fr.devinsy.util.strings; - -import java.io.IOException; -import java.text.Collator; -import java.util.ArrayList; -import java.util.Collection; -import java.util.Collections; -import java.util.Comparator; -import java.util.Iterator; - -import org.apache.commons.lang3.StringUtils; - -/** - * This class is a collection of String objects with specific methods. It makes - * possible to build a string without any copy. The goal is to optimize the - * building of strings where they are lot of concatenation action. - * - */ -public class StringList extends ArrayList implements CharSequence -{ - private static final long serialVersionUID = -1154185934830213732L; - - public static final String LINE_SEPARATOR = "\n"; - - /** - * Constructs an empty list with an initial capacity of ten (see ArrayList - * constructor). - */ - public StringList() - { - super(); - } - - /** - * Constructs a list of string of the specified collection, in the order - * they are returned by the collection's iterator. - * - * @param source - */ - public StringList(final Collection source) - { - super(); - - if (source != null) - { - // - ensureCapacity(source.size()); - - // - for (String string : source) - { - this.add(string); - } - } - } - - /** - * Constructs an empty list with the specified initial capacity. - * - * @param initialCapacity - */ - public StringList(final int initialCapacity) - { - super(initialCapacity); - } - - /** - * Constructs a list of string from a string array. - * - * @param source - */ - public StringList(final String... source) - { - super(); - - if (source != null) - { - // - ensureCapacity(source.length); - - // - for (String string : source) - { - this.add(string); - } - } - } - - /** - * Appends the string representation of the char argument to this string - * list. - * - * @param character - * @return - */ - public StringList append(final char character) - { - StringList result; - - this.add(String.valueOf(character)); - - result = this; - - // - return (result); - } - - /** - * Appends the string of the specified collection, in the order they are - * returned by the collection's iterator. - * - * @param strings - * @return - */ - public StringList append(final Collection strings) - { - StringList result; - - if (strings != null) - { - for (String string : strings) - { - this.append(string); - } - } - - result = this; - - // - return (result); - } - - /** - * Appends the string representation of the double argument to this string - * list. - * - * @param value - * @return - */ - public StringList append(final double value) - { - StringList result; - - result = this.append(String.valueOf(value)); - - // - return (result); - } - - /** - * Appends the string representation of the int argument to this string - * list. - * - * @param value - * @return - */ - public StringList append(final int value) - { - StringList result; - - result = this.append(String.valueOf(value)); - - // - return (result); - } - - /** - * Appends the string representation of the long argument to this string - * list. - * - * @param value - * @return - */ - public StringList append(final long value) - { - StringList result; - - result = this.append(String.valueOf(value)); - - // - return (result); - } - - /** - * Appends the string representation of the int argument to this string - * list. - * - * @param value - * @return - */ - public StringList append(final Object value) - { - StringList result; - - if (value != null) - { - this.append(value.toString()); - } - - result = this; - - // - return (result); - } - - /** - * Appends the string representation of the long argument to this string - * list. - * - * @param value - * @return - */ - public StringList append(final short value) - { - StringList result; - - result = this.append(String.valueOf(value)); - - // - return (result); - } - - /** - * Appends the string argument to this string list. - * - * Check null parameter before add. - * - * @param string - * @return - */ - public StringList append(final String string) - { - StringList result; - - if (string != null) - { - this.add(string); - } - - result = this; - - // - return (result); - } - - /** - * Appends the string of the array argument to this string list. - * - * @param strings - * @return - */ - public StringList append(final String... strings) - { - StringList result; - - if (strings != null) - { - for (String string : strings) - { - this.add(string); - } - } - - result = this; - - // - return (result); - } - - /** - * Appends a break line to this string list. - * - * @return - */ - public StringList appendln() - { - StringList result; - - this.add(LINE_SEPARATOR); - - result = this; - - // - return (result); - } - - /** - * Appends the string representation of the char argument to this string - * list, then append a break line too. - * - * @param character - * @return - */ - public StringList appendln(final char character) - { - StringList result; - - result = this.append(character).appendln(); - - // - return (result); - } - - /** - * - * @param string - * @return - */ - public StringList appendln(final Collection string) - { - StringList result; - - result = this.append(string).appendln(); - - // - return (result); - } - - /** - * - * @param value - * @return - */ - public StringList appendln(final double value) - { - StringList result; - - result = this.append(value).appendln(); - - // - return (result); - } - - /** - * - * @param value - * @return - */ - public StringList appendln(final int value) - { - StringList result; - - result = this.append(value).appendln(); - - // - return (result); - } - - /** - * - * @param value - * @return - */ - public StringList appendln(final long value) - { - StringList result; - - result = this.append(value).appendln(); - - // - return (result); - } - - /** - * - * @param value - * @return - */ - public StringList appendln(final Object value) - { - StringList result; - - result = this.append(value).appendln(); - - // - return (result); - } - - /** - * - * @param value - * @return - */ - public StringList appendln(final short value) - { - StringList result; - - result = this.append(value).appendln(); - - // - return (result); - } - - /** - * - * @param string - * @return - */ - public StringList appendln(final String string) - { - StringList result; - - result = this.append(string).appendln(); - - // - return (result); - } - - /** - * - * @param strings - * @return - */ - public StringList appendln(final String... strings) - { - StringList result; - - result = this.append(strings).appendln(); - - // - return (result); - } - - /** - * - */ - @Override - public char charAt(final int index) - { - char result; - - // - StringListCharPosition position = indexOf(index); - - // - result = get(position.getStringIndex()).charAt(position.getLocalCharIndex()); - - // - return result; - } - - /** - * - * @param position - * @return - */ - public char charAt(final StringListCharPosition position) - { - char result; - - // - result = get(position.getStringIndex()).charAt(position.getLocalCharIndex()); - - // - return result; - } - - /** - * Deep copy and shallow copy have no sense about a list of immutable - * objects. - * - * @return - */ - @Override - public StringList clone() - { - StringList result; - - result = new StringList(size()); - - for (String string : this) - { - result.add(string); - } - - // - return result; - } - - /** - * - * @param source - * @return - */ - public boolean containsAny(final Collection target) - { - boolean result; - - if (target == null) - { - result = false; - } - else - { - boolean ended = false; - Iterator iterator = target.iterator(); - result = false; - while (!ended) - { - if (iterator.hasNext()) - { - String current = iterator.next(); - - if (this.contains(current)) - { - ended = true; - result = true; - } - } - else - { - ended = true; - result = false; - } - } - } - - // - return result; - } - - /** - * - * @param source - * @return - */ - public boolean containsAny(final String... target) - { - boolean result; - - if (target == null) - { - result = false; - } - else - { - boolean ended = false; - int index = 0; - result = false; - while (!ended) - { - if (index < target.length) - { - String current = target[index]; - - if (this.contains(current)) - { - ended = true; - result = true; - } - else - { - index += 1; - } - } - else - { - ended = true; - result = false; - } - } - } - - // - return result; - } - - /** - * - * @return - */ - public boolean containsBlank() - { - boolean result; - - boolean ended = false; - Iterator iterator = iterator(); - result = false; - while (!ended) - { - if (iterator.hasNext()) - { - String line = iterator.next(); - - if (StringUtils.isBlank(line)) - { - ended = true; - result = true; - } - } - else - { - ended = true; - result = false; - } - } - - // - return result; - } - - /** - * - * @return - */ - public boolean containsEmpty() - { - boolean result; - - boolean ended = false; - Iterator iterator = iterator(); - result = false; - while (!ended) - { - if (iterator.hasNext()) - { - String line = iterator.next(); - - if (StringUtils.isEmpty(line)) - { - ended = true; - result = true; - } - } - else - { - ended = true; - result = false; - } - } - - // - return result; - } - - /** - * - * @return - */ - public boolean containsNull() - { - boolean result; - - boolean ended = false; - Iterator iterator = iterator(); - result = false; - while (!ended) - { - if (iterator.hasNext()) - { - String line = iterator.next(); - - if (line == null) - { - ended = true; - result = true; - } - } - else - { - ended = true; - result = false; - } - } - - // - return result; - } - - /** - * - * @param id - * @return - */ - public String getByIndex(final int id) - { - String result; - - result = this.get(id); - - // - return (result); - } - - /** - * - * @return - */ - public String getFirst() - { - String result; - - if (this.size() == 0) - { - result = null; - } - else - { - result = get(0); - } - - // - return (result); - } - - /** - * - * @return - */ - public String getLast() - { - String result; - - if (this.size() == 0) - { - result = null; - } - else - { - result = get(this.size() - 1); - } - - // - return (result); - } - - /** - * - * @return - */ - public String getLongestBytesLine() - { - String result; - - if (isEmpty()) - { - result = null; - } - else - { - int max = 0; - result = ""; - for (String line : this) - { - if (line.getBytes().length > max) - { - max = line.length(); - result = line; - } - } - } - - // - return result; - } - - /** - * - * @return - */ - public String getLongestLine() - { - String result; - - if (isEmpty()) - { - result = null; - } - else - { - int max = 0; - result = ""; - for (String line : this) - { - if (line.length() > max) - { - max = line.length(); - result = line; - } - } - } - - // - return result; - } - - /** - * - * @return - */ - public StringList getNotBlank() - { - StringList result; - - result = new StringList(); - - for (String line : this) - { - if (StringUtils.isNotBlank(line)) - { - result.add(line); - } - } - - // - return (result); - } - - /** - * - * @return - */ - public StringList getNotEmpty() - { - StringList result; - - result = new StringList(); - - for (String line : this) - { - if (StringUtils.isNotEmpty(line)) - { - result.add(line); - } - } - - // - return (result); - } - - /** - * - * @return - */ - public StringList getNotNull() - { - StringList result; - - result = new StringList(); - - for (String line : this) - { - if (line != null) - { - result.add(line); - } - } - - // - return (result); - } - - /** - * - * @return - */ - public String getShortestBytesLine() - { - String result; - - if (isEmpty()) - { - result = null; - } - else - { - int min = Integer.MAX_VALUE; - result = null; - for (String line : this) - { - if (line.getBytes().length < min) - { - min = line.length(); - result = line; - } - } - } - - // - return result; - } - - /** - * - * @return - */ - public String getShortestLine() - { - String result; - - if (isEmpty()) - { - result = null; - } - else - { - int min = Integer.MAX_VALUE; - result = null; - for (String line : this) - { - if (line.length() < min) - { - min = line.length(); - result = line; - } - } - } - - // - return result; - } - - /** - * - * @param index - * @return - */ - public StringListCharPosition indexOf(final int index) - { - StringListCharPosition result; - - if ((index < 0) || (index >= length())) - { - throw new StringIndexOutOfBoundsException(index); - } - else - { - boolean ended = false; - int stringIndex = 0; - int currentLength = 0; - result = null; - while (!ended) - { - if (index < currentLength + get(stringIndex).length()) - { - ended = true; - result = new StringListCharPosition(index, stringIndex, index - currentLength); - } - else - { - stringIndex += 1; - currentLength += get(stringIndex).length(); - } - } - - } - - // - return result; - } - - /** - * - * @param startIndex - * @return the index of the next line not null, -1 otherwise. - */ - public int indexOfNextLineNotNull(final int startIndex) - { - int result; - - boolean ended = false; - int currentIndex = startIndex; - result = -1; - while (!ended) - { - if (currentIndex >= this.size()) - { - ended = true; - result = -1; - } - else - { - if (this.get(currentIndex) == null) - { - ended = true; - result = currentIndex; - } - else - { - currentIndex += 1; - } - } - } - - // - return result; - } - - /** - * - * @param position - * @return - */ - public boolean isOutOfBounds(final StringListCharPosition position) - { - boolean result; - - if (position == null) - { - result = true; - } - else - { - if (isOutOfList(position)) - { - result = true; - } - else if (isOutOfLine(position)) - { - result = true; - } - else - { - result = false; - } - } - - // - return result; - } - - /** - * - * @param position - * @return - */ - public boolean isOutOfLine(final StringListCharPosition position) - { - boolean result; - - if (position == null) - { - result = true; - } - else - { - if (position.getLocalCharIndex() >= this.get(position.getStringIndex()).length()) - { - result = true; - } - else - { - result = false; - } - } - - // - return result; - } - - /** - * - * @param position - * @return - */ - public boolean isOutOfList(final StringListCharPosition position) - { - boolean result; - - if (position == null) - { - result = true; - } - else - { - if (position.getStringIndex() >= this.size()) - { - result = true; - } - else - { - result = false; - } - } - - // - return result; - } - - /** - * - */ - public Iterator iteratorOfChar() - { - Iterator result; - - result = new StringListCharIterator(this); - - // - return result; - } - - /** - * Returns the length of the string list concatenation. Null strings are - * ignored. - */ - @Override - public int length() - { - int result = 0; - - for (String string : this) - { - if (string != null) - { - result += string.length(); - } - } - - // - return (result); - } - - /** - * Merge all strings of the list into in single string. At the end of - * operation, the new string is the first of the list and the size list is - * 1. - * - * @return - */ - public StringList merge() - { - StringList result; - - String merge = this.toString(); - - clear(); - add(merge); - - result = this; - - // - return result; - } - - /** - * Removes the last element of the list. - * - * @return This list. - */ - public StringList removeLast() - { - StringList result; - - if (this.size() > 0) - { - this.remove(this.size() - 1); - } - - result = this; - - // - return (result); - } - - /** - * Extends the list copying the last element a number of time. - * - * @param count - * The number of time to copy the last element. - * - * @return This list. - */ - public StringList repeatLast(final int count) - { - StringList result; - - // - if ((this.size() != 0) && (count > 0)) - { - // - this.ensureCapacity(this.size() + count); - - // - String last = getLast(); - - // - for (int index = 0; index < count; index++) - { - this.append(last); - } - } - - // - result = this; - - // - return (result); - } - - /** - * Sorts this list. - * - * @return This List. - */ - public StringList reverse() - { - StringList result; - - Collections.reverse(this); - - // - result = this; - - // - return result; - } - - /** - * Sorts this list. - * - * @return This List. - */ - public StringList sort() - { - StringList result; - - Collections.sort(this, Collator.getInstance()); - - // - result = this; - - // - return result; - } - - /** - * Sorts this list. - * - * @return This List. - */ - public StringList sort(final Comparator comparator) - { - StringList result; - - Collections.sort(this, comparator); - - // - result = this; - - // - return result; - } - - /** - * Sorts this list. - * - * @return This List. - */ - public StringList sortByLength() - { - StringList result; - - Collections.sort(this, StringLengthComparator.instance()); - - // - result = this; - - // - return result; - } - - /** - * {@inheritDoc} - */ - @Override - public CharSequence subSequence(final int start, final int end) - { - StringList result; - - result = substring(start, end); - - // - return result; - } - - /** - * Extracts a substring from this list. - * - * @param start - * The first character of the substring. - * @param end - * The last character of the substring. - * - * @return The sublist targeted. - */ - public StringList substring(final int beginIndex, final int endIndex) - { - StringList result; - - if (beginIndex < 0) - { - throw new StringIndexOutOfBoundsException(beginIndex); - } - else if (endIndex > length()) - { - throw new StringIndexOutOfBoundsException(endIndex); - } - else if (beginIndex > endIndex) - { - throw new StringIndexOutOfBoundsException(endIndex - beginIndex); - } - else if (beginIndex == endIndex) - { - result = new StringList(); - } - else - { - // - result = new StringList(); - - // - StringListCharPosition startPosition = indexOf(beginIndex); - StringListCharPosition endPosition = indexOf(endIndex); - - // - if (startPosition.getStringIndex() == endPosition.getStringIndex()) - { - String source = get(startPosition.getStringIndex()); - String target = source.substring(startPosition.getLocalCharIndex(), endPosition.getLocalCharIndex()); - result.append(target); - } - else - { - // - { - String source = get(startPosition.getStringIndex()); - String target = source.substring(startPosition.getLocalCharIndex()); - result.append(target); - } - - // - for (int stringIndex = startPosition.getStringIndex() + 1; stringIndex < endPosition.getStringIndex(); stringIndex++) - { - String target = get(stringIndex); - result.append(target); - } - - // - { - String source = get(endPosition.getStringIndex()); - String target = source.substring(0, endPosition.getLocalCharIndex()); - result.append(target); - } - } - } - - // - return result; - } - - /** - * {@inheritDoc} - */ - @Override - public String toString() - { - String result; - - if (size() == 1) - { - // - result = get(0); - - } - else - { - // - StringBuffer buffer = new StringBuffer(length()); - - for (String string : this) - { - buffer.append(string); - } - - result = buffer.toString(); - } - - // - return (result); - } - - /** - * - * @param prefix - * @param separator - * @param postifx - * @return - */ - public String toString(final String prefix, final String separator, final String postfix) - { - String result; - - StringList buffer = new StringList(1 + size() * 2 + 1); - - buffer.append(prefix); - - for (String string : this) - { - buffer.append(string); - buffer.append(separator); - } - - if (separator != null) - { - buffer.removeLast(); - } - - buffer.append(postfix); - - result = buffer.toString(); - - // - return result; - } - - /** - * Returns an array containing all of the strings in this list in proper - * sequence (from first to last element). - * - * @return - */ - public String[] toStringArray() - { - String[] result; - - result = new String[this.size()]; - - for (int index = 0; index < size(); index++) - { - result[index] = get(index); - } - - // - return result; - } - - /** - * Returns a string containing the concatenation of the strings of this - * list. Between each string of this list, a separator argument string is - * concatenated too. - * - * @param separator - * - * @return - */ - public String toStringSeparatedBy(final String separator) - { - String result; - - StringList buffer = new StringList(this.size() * 2); - - for (String string : this) - { - buffer.append(string); - buffer.append(separator); - } - - if (separator != null) - { - buffer.removeLast(); - } - - result = buffer.toString(); - - // - return (result); - } - - /** - * - * @param strings - * @return - */ - public String toStringWithBracket() - { - String result; - - result = toString("[", ",", "]"); - - // - return result; - } - - /** - * - * @param source - * @return - */ - public String toStringWithBrackets() - { - String result; - - StringList buffer = new StringList(); - - for (String string : this) - { - buffer.append("[").append(string).append("]"); - } - - result = buffer.toString(); - - // - return result; - } - - /** - * - * @return - */ - public String toStringWithCommas() - { - String result; - - result = this.toStringSeparatedBy(","); - - // - return (result); - } - - /** - * - * @return - */ - public String toStringWithFrenchCommas() - { - String result; - - result = this.toStringSeparatedBy(", "); - - // - return (result); - } - - /** - * Writes the strings of this list into a {@code PrintWriter}. - * - * @param out - * The {@code PrintWriter} where to write. - * - * @throws IOException - */ - public void writeInto(final java.io.PrintWriter out) throws IOException - { - for (String string : this) - { - out.write(string); - } - } - - /** - * Writes the strings of this list into a {@code Writer}. - * - * @param out - * The {@code Writer} where to write. - * - * @throws IOException - */ - public void writeInto(final java.io.Writer out) throws IOException - { - for (String string : this) - { - out.write(string); - } - } -} diff --git a/src/fr/devinsy/util/strings/StringListCharIterator.java b/src/fr/devinsy/util/strings/StringListCharIterator.java deleted file mode 100644 index 4f84c1b..0000000 --- a/src/fr/devinsy/util/strings/StringListCharIterator.java +++ /dev/null @@ -1,133 +0,0 @@ -/** - * Copyright (C) 2014-2015 Christian Pierre MOMON - * - * This file is part of Devinsy-utils. - * - * Devinsy-utils is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * Devinsy-utils is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public License - * along with Devinsy-utils. If not, see - */ -package fr.devinsy.util.strings; - -import java.util.Iterator; - -/** - * - */ -public class StringListCharIterator implements Iterator -{ - private StringList source; - private StringListCharPosition currentPosition; - private StringListCharPosition nextPosition; - - /** - * - */ - public StringListCharIterator(final StringList source) - { - super(); - - this.source = source; - this.nextPosition = new StringListCharPosition(); - } - - /** - * - */ - @Override - public boolean hasNext() - { - boolean result; - - if (this.source == null) - { - result = false; - } - else - { - if (this.source.isOutOfBounds(this.nextPosition)) - { - result = false; - } - else - { - result = true; - } - } - - // - return result; - } - - /** - * - */ - @Override - public Character next() - { - Character result; - - if (this.source == null) - { - result = null; - } - else - { - if (hasNext()) - { - result = this.source.charAt(this.nextPosition); - - this.nextPosition.next(); - - if (this.source.isOutOfLine(this.nextPosition)) - { - this.nextPosition.nextEndOfLine(); - - while ((!this.source.isOutOfList(this.nextPosition)) && (this.source.get(this.nextPosition.getStringIndex()) == null)) - { - this.nextPosition.nextEndOfLine(); - } - } - } - else - { - result = null; - } - } - - // - return result; - } - - /** - * - * @return - */ - public StringListCharPosition nextPosition() - { - StringListCharPosition result; - - result = new StringListCharPosition(this.nextPosition); - - // - return result; - } - - /** - * Do nothing. - */ - @Override - public void remove() - { - // TODO or not TODO? - } -} diff --git a/src/fr/devinsy/util/strings/StringListCharPosition.java b/src/fr/devinsy/util/strings/StringListCharPosition.java deleted file mode 100644 index 5940e53..0000000 --- a/src/fr/devinsy/util/strings/StringListCharPosition.java +++ /dev/null @@ -1,111 +0,0 @@ -/** - * Copyright (C) 2013-2015 Christian Pierre MOMON - * - * This file is part of Devinsy-utils. - * - * Devinsy-utils is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * Devinsy-utils is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public License - * along with Devinsy-utils. If not, see - */ -package fr.devinsy.util.strings; - -/** - * This class manages a char position in a StringList object. - * - * @author Christian P. Momon - */ -public class StringListCharPosition -{ - private int charIndex; - private int stringIndex; - private int localCharIndex; - - /** - * - * @param index - * @param stringIndex - * @param localIndex - */ - public StringListCharPosition() - { - this.charIndex = 0; - this.stringIndex = 0; - this.localCharIndex = 0; - } - - /** - * - * @param index - * @param stringIndex - * @param localIndex - */ - public StringListCharPosition(final int index, final int stringIndex, final int localIndex) - { - this.charIndex = index; - this.stringIndex = stringIndex; - this.localCharIndex = localIndex; - } - - /** - * - * @param source - */ - public StringListCharPosition(final StringListCharPosition source) - { - this.charIndex = source.getCharIndex(); - this.stringIndex = source.getStringIndex(); - this.localCharIndex = source.getLocalCharIndex(); - } - - public int getCharIndex() - { - return this.charIndex; - } - - public int getLocalCharIndex() - { - return this.localCharIndex; - } - - public int getStringIndex() - { - return this.stringIndex; - } - - public void next() - { - this.charIndex += 1; - this.localCharIndex += 1; - } - - public void nextEndOfLine() - { - this.localCharIndex = 0; - this.stringIndex += 1; - } - - public void setCharIndex(final int charIndex) - { - this.charIndex = charIndex; - } - - public void setLocalCharIndex(final int localCharIndex) - { - this.localCharIndex = localCharIndex; - } - - public void setStringIndex(final int stringIndex) - { - this.stringIndex = stringIndex; - } - -} diff --git a/src/fr/devinsy/util/strings/StringListInputStream.java b/src/fr/devinsy/util/strings/StringListInputStream.java deleted file mode 100644 index 95ab552..0000000 --- a/src/fr/devinsy/util/strings/StringListInputStream.java +++ /dev/null @@ -1,130 +0,0 @@ -/** - * Copyright (C) 2013-2015 Christian Pierre MOMON - * - * This file is part of Devinsy-utils. - * - * Devinsy-utils is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * Devinsy-utils is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public License - * along with Devinsy-utils. If not, see - */ -package fr.devinsy.util.strings; - -import java.io.IOException; -import java.io.InputStream; - -/** - * TODO CREATION STEP. - */ -public class StringListInputStream extends InputStream -{ - private StringList in; - - /** - * - */ - public StringListInputStream() - { - this.in = new StringList(); - } - - /** - * - */ - public StringListInputStream(final int size) - { - this.in = new StringList(size); - } - - /** - * - */ - public StringListInputStream(final StringList source) - { - if (source == null) - { - throw new NullPointerException("source is null."); - } - else - { - this.in = source; - } - } - - /** - * {@inheritDoc} - */ - @Override - public int available() throws IOException - { - return 0; - } - - /** - * {@inheritDoc} - */ - @Override - public void close() throws IOException - { - } - - /** - * {@inheritDoc} - */ - @Override - public synchronized void mark(final int readlimit) - { - // TODO - } - - /** - * {@inheritDoc} - */ - @Override - public boolean markSupported() - { - boolean result; - - result = true; - - return result; - } - - /** - * {@inheritDoc} - */ - @Override - public int read() throws IOException - { - // TODO Auto-generated method stub - return 0; - } - - /** - * {@inheritDoc} - */ - @Override - public synchronized void reset() throws IOException - { - // TODO - throw new IOException("mark/reset not supported"); - } - - /** - * {@inheritDoc} - */ - @Override - public long skip(final long n) throws IOException - { - // TODO - return 0; - } -} diff --git a/src/fr/devinsy/util/strings/StringListReader.java b/src/fr/devinsy/util/strings/StringListReader.java deleted file mode 100644 index 465739a..0000000 --- a/src/fr/devinsy/util/strings/StringListReader.java +++ /dev/null @@ -1,122 +0,0 @@ -/** - * Copyright (C) 2013-2017 Christian Pierre MOMON - * - * This file is part of Devinsy-utils. - * - * Devinsy-utils is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * Devinsy-utils is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public License - * along with Devinsy-utils. If not, see - */ -package fr.devinsy.util.strings; - -import java.io.BufferedReader; -import java.io.IOException; -import java.io.Reader; - -/** - * - * @author Christian Pierre MOMON (christian.momon@devinsy.fr) - */ -public class StringListReader extends Reader -{ - private StringList in; - private StringListCharIterator iterator; - - /** - * - * @param in - */ - public StringListReader(final StringList in) - { - this.in = in; - this.iterator = new StringListCharIterator(in); - } - - /** - * - */ - @Override - public void close() - { - } - - /** - * - */ - @Override - public synchronized int read(final char[] cbuf, final int off, final int len) throws IOException - { - int result; - - BufferedReader a; - - if ((off < 0) || (off > cbuf.length) || (len < 0) || ((off + len) > cbuf.length) || ((off + len) < 0)) - { - throw new IndexOutOfBoundsException(); - } - else if (len == 0) - { - result = 0; - } - else if (this.iterator.hasNext()) - { - // - result = 0; - - // Read off characters. - { - boolean ended = false; - int offCount = 0; - while (!ended) - { - if ((offCount < off) && (this.iterator.hasNext())) - { - this.iterator.next(); - offCount += 1; - result += 1; - } - else - { - ended = true; - } - } - } - - // Read len characters. - { - boolean ended = false; - int lenCount = 0; - while (!ended) - { - if ((lenCount < len) && (this.iterator.hasNext())) - { - char letter = this.iterator.next(); - cbuf[lenCount] = letter; - lenCount += 1; - result += 1; - } - else - { - ended = true; - } - } - } - } - else - { - result = -1; - } - - // - return result; - } -} diff --git a/src/fr/devinsy/util/strings/StringListUtils.java b/src/fr/devinsy/util/strings/StringListUtils.java deleted file mode 100644 index 9ad0a7a..0000000 --- a/src/fr/devinsy/util/strings/StringListUtils.java +++ /dev/null @@ -1,1038 +0,0 @@ -/** - * Copyright (C) 2008-2010, 2013-2016 Christian Pierre MOMON - * - * This file is part of Devinsy-utils. - * - * Devinsy-utils is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * Devinsy-utils is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public License - * along with Devinsy-utils. If not, see - */ -package fr.devinsy.util.strings; - -import java.io.BufferedReader; -import java.io.File; -import java.io.FileInputStream; -import java.io.FileNotFoundException; -import java.io.FileOutputStream; -import java.io.IOException; -import java.io.InputStream; -import java.io.InputStreamReader; -import java.io.OutputStreamWriter; -import java.io.PrintWriter; -import java.io.UnsupportedEncodingException; -import java.net.URL; -import java.util.Collection; - -/** - * The {@code StringUtils} class defines helper methods to string collection. - * - * Operations that are null safe. - * - */ -public class StringListUtils -{ - public static final String DEFAULT_CHARSET_NAME = "UTF-8"; - - /** - * - */ - private StringListUtils() - { - } - - /** - * Builds a string concatenating many times a source string. - * - * @param source - * The string to concatenate several time. - * - * @param multiplier - * The number of concatenate to produce. - * @return - */ - public static String concatenate(final String source, final int multiplier) - { - String result; - - result = repeat(source, multiplier).toString(); - - // - return result; - } - - /** - * - * @param source - * @return - */ - public static boolean containsBlank(final Collection source) - { - boolean result; - - if (source == null) - { - result = false; - } - else if (source instanceof StringList) - { - result = ((StringList) source).containsBlank(); - } - else - { - result = new StringList(source).containsBlank(); - } - - // - return result; - } - - /** - * - * @param source - * @return - */ - public static boolean containsBlank(final String... source) - { - boolean result; - - if (source == null) - { - result = false; - } - else - { - result = new StringList(source).containsBlank(); - } - - // - return result; - } - - /** - * - * @param source - * @return - */ - public static boolean containsEmpty(final Collection source) - { - boolean result; - - if (source == null) - { - result = false; - } - else if (source instanceof StringList) - { - result = ((StringList) source).containsEmpty(); - } - else - { - result = new StringList(source).containsEmpty(); - } - - // - return result; - } - - /** - * - * @param source - * @return - */ - public static boolean containsEmpty(final String... source) - { - boolean result; - - if (source == null) - { - result = false; - } - else - { - result = new StringList(source).containsEmpty(); - } - - // - return result; - } - - /** - * - * @param source - * @return - */ - public static boolean containsNull(final Collection source) - { - boolean result; - - if (source == null) - { - result = false; - } - else if (source instanceof StringList) - { - result = ((StringList) source).containsNull(); - } - else - { - result = new StringList(source).containsNull(); - } - - // - return result; - } - - /** - * - * @param source - * @return - */ - public static boolean containsNull(final String... source) - { - boolean result; - - if (source == null) - { - result = false; - } - else - { - result = new StringList(source).containsNull(); - } - - // - return result; - } - - /** - * - * @param target - * @return - */ - public static StringSet getComplement(final Collection alpha, final Collection bravo) - { - StringSet result; - - result = getDifference(bravo, alpha); - - // - return result; - } - - /** - * - * @param target - * @return - */ - public static StringSet getDifference(final Collection alpha, final Collection bravo) - { - StringSet result; - - result = new StringSet(alpha); - result.removeAll(bravo); - - // - return result; - } - - /** - * - * @param target - * @return - */ - public static StringSet getDisjunction(final Collection alpha, final Collection bravo) - { - StringSet result; - - result = new StringSet(); - - for (String string : alpha) - { - if (!bravo.contains(string)) - { - result.add(string); - } - } - - for (String string : bravo) - { - if (!alpha.contains(string)) - { - result.add(string); - } - } - - // - return result; - } - - /** - * - * @param target - * @return - */ - public static StringSet getIntersectionOf(final Collection alpha, final Collection bravo) - { - StringSet result; - - result = new StringSet(); - - for (String string : alpha) - { - if (bravo.contains(string)) - { - result.add(string); - } - } - - // - return result; - } - - /** - * - * @param target - * @return - */ - public static StringSet getUnionOf(final Collection alpha, final Collection bravo) - { - StringSet result; - - result = new StringSet(alpha); - - for (String string : bravo) - { - result.add(string); - } - - // - return result; - } - - /** - * - * @param file - * @throws IOException - */ - public static StringList load(final File source) throws IOException - { - StringList result; - - result = load(source, DEFAULT_CHARSET_NAME); - - // - return result; - } - - /** - * - * @param file - * @throws IOException - */ - public static StringList load(final File file, final String charsetName) throws IOException - { - StringList result; - - // - result = new StringList(); - - // - read(result, new FileInputStream(file), charsetName); - - // - return result; - } - - /** - * - * @param file - * @return - * @throws IOException - */ - public static StringList load(final URL source) throws IOException - { - StringList result; - - result = load(source, DEFAULT_CHARSET_NAME); - - // - return result; - } - - /** - * - * @param file - * @throws IOException - */ - public static StringList load(final URL source, final String charsetName) throws IOException - { - StringList result; - - // - result = new StringList(); - - // - read(result, source.openStream(), charsetName); - - // - return result; - } - - /** - * - * @param file - * @throws IOException - */ - public static void read(final StringList out, final InputStream is, final String charsetName) throws IOException - { - BufferedReader in = null; - try - { - in = new BufferedReader(new InputStreamReader(is, charsetName)); - - boolean ended = false; - - while (!ended) - { - String line = in.readLine(); - - if (line == null) - { - ended = true; - } - else - { - out.append(line); - } - } - } - finally - { - try - { - if (in != null) - { - in.close(); - } - } - catch (IOException exception) - { - exception.printStackTrace(); - } - } - } - - /** - * Builds a string list concatenating many times a source string. - * - * @param source - * The string to concatenate several time. - * - * @param multiplier - * The number of concatenate to produce. - * @return - */ - public static StringList repeat(final String source, final int multiplier) - { - StringList result; - - result = new StringList(multiplier); - for (int count = 0; count < multiplier; count++) - { - result.append(source); - } - - // - return result; - } - - /** - * - * @param file - * @throws FileNotFoundException - * @throws UnsupportedEncodingException - */ - public static void save(final File file, final StringList source) throws UnsupportedEncodingException, FileNotFoundException - { - PrintWriter out = null; - try - { - out = new PrintWriter(new OutputStreamWriter(new FileOutputStream(file), DEFAULT_CHARSET_NAME)); - - if (source != null) - { - for (String string : source) - { - out.println(string); - } - } - } - finally - { - if (out != null) - { - out.close(); - } - } - } - - /** - * Sorts the string list. - * - * @param source - * The string list to sort. - */ - public static void sort(final StringList source) - { - if (source != null) - { - source.sort(); - } - } - - /** - * Concatenates the string from an array to a string. - * - * @param source - * The string array to convert. - * - * @return A string concatenation of the argument. - */ - public static String toString(final String[] source) - { - String result; - - if (source == null) - { - result = null; - } - else - { - result = new StringList(source).toString(); - } - - // - return result; - } - - /** - * - * @param prefix - * @param separator - * @param postfix - * @return - */ - public static String toString(final String[] source, final String prefix, final String separator, final String postfix) - { - String result; - - if (source == null) - { - result = new StringList().toString(prefix, null, postfix); - } - else - { - result = new StringList(source).toString(prefix, separator, postfix); - } - - // - return result; - } - - /** - * - * @param prefix - * @param separator - * @param postfix - * @return - */ - public static String toString(final StringList source, final String prefix, final String separator, final String postfix) - { - String result; - - if (source == null) - { - result = new StringList().toString(prefix, null, postfix); - } - else - { - result = source.toString(prefix, separator, postfix); - } - - // - return result; - } - - /** - * Converts a {@code Collection} to an array of {@code String}. - * - * @param source - * The string list to convert. - * - * @return The result of the conversion. - */ - public static String[] toStringArray(final Collection source) - { - String[] result; - - if (source == null) - { - result = new String[0]; - } - else - { - result = new StringList(source).toStringArray(); - } - - // - return result; - } - - /** - * Converts a {@code StringList} to an array of {@code String}. - * - * @param source - * The string list to convert. - * - * @return The result of the conversion. - */ - public static String[] toStringArray(final StringList source) - { - String[] result; - - if (source == null) - { - result = new String[0]; - } - else - { - result = source.toStringArray(); - } - - // - return result; - } - - /** - * Concatenates the string from an array to a string. - * - * @param strings - * The string array to convert. - * - * @return If argument is null then returns an empty string, otherwise - * returns a string concatenation of the argument. - */ - public static String toStringNotNull(final String[] source) - { - String result; - - result = toString(source); - - if (result == null) - { - result = ""; - } - - // - return result; - } - - /** - * - * @param source - * @return - */ - public static String toStringSeparatedBy(final Collection source, final String separator) - { - String result; - - if (source == null) - { - result = null; - } - else - { - result = new StringList(source).toStringSeparatedBy(separator); - } - - // - return result; - } - - /** - * - * @param strings - * @return - */ - public static String toStringSeparatedBy(final String[] source, final String separator) - { - String result; - - if (source == null) - { - result = null; - } - else - { - result = new StringList(source).toStringSeparatedBy(separator); - } - - // - return result; - } - - /** - * - * @param strings - * @return - */ - public static String toStringSeparatedBy(final StringList source, final String separator) - { - String result; - - if (source == null) - { - result = null; - } - else - { - result = source.toStringSeparatedBy(separator); - } - - // - return result; - } - - /** - * - * @param strings - * @return - */ - public static String toStringWithBracket(final Collection source) - { - String result; - - if (source == null) - { - result = null; - } - else - { - result = new StringList(source).toStringWithBracket(); - } - - // - return result; - } - - /** - * - * @param strings - * @return - */ - public static String toStringWithBracket(final String[] source) - { - String result; - - if (source == null) - { - result = null; - } - else - { - result = new StringList(source).toStringWithBracket(); - } - - // - return result; - } - - /** - * - * @param strings - * @return - */ - public static String toStringWithBracket(final StringList source) - { - String result; - - if (source == null) - { - result = null; - } - else - { - result = source.toStringWithBracket(); - } - - // - return result; - } - - /** - * - * @param strings - * @return - */ - public static String toStringWithBracketNotNull(final Collection source) - { - String result; - - result = toStringWithBracket(source); - - if (result == null) - { - result = ""; - } - - // - return result; - } - - /** - * - * @param strings - * @return - */ - public static String toStringWithBracketNotNull(final String[] source) - { - String result; - - result = toStringWithBracket(source); - - if (result == null) - { - result = ""; - } - - // - return result; - } - - /** - * - * @param strings - * @return - */ - public static String toStringWithBracketNotNull(final StringList source) - { - String result; - - result = toStringWithBracket(source); - - if (result == null) - { - result = ""; - } - - // - return result; - } - - /** - * - * @param source - * @return - */ - public static String toStringWithBrackets(final Collection source) - { - String result; - - if (source == null) - { - result = null; - } - else - { - result = new StringList(source).toStringWithBrackets(); - } - - // - return result; - } - - /** - * - * @param source - * @return - */ - public static String toStringWithBrackets(final String[] source) - { - String result; - - if (source == null) - { - result = null; - } - else - { - result = new StringList(source).toStringWithBrackets(); - } - - // - return result; - } - - /** - * - * @param source - * @return - */ - public static String toStringWithBrackets(final StringList source) - { - String result; - - if (source == null) - { - result = null; - } - else - { - result = source.toStringWithBrackets(); - } - - // - return result; - } - - /** - * - * @param source - * @return - */ - public static String toStringWithCommas(final Collection source) - { - String result; - - if (source == null) - { - result = null; - } - else - { - result = new StringList(source).toStringWithCommas(); - } - - // - return result; - } - - /** - * - * @param source - * @return - */ - public static String toStringWithCommas(final String[] source) - { - String result; - - if (source == null) - { - result = null; - } - else - { - result = new StringList(source).toStringWithCommas(); - } - - // - return result; - } - - /** - * - * @param source - * @return - */ - public static String toStringWithCommas(final StringList source) - { - String result; - - if (source == null) - { - result = null; - } - else - { - result = source.toStringWithCommas(); - } - - // - return result; - } - - /** - * - * @param source - * @return - */ - public static String toStringWithFrenchCommas(final Collection source) - { - String result; - - if (source == null) - { - result = null; - } - else - { - result = new StringList(source).toStringWithFrenchCommas(); - } - - // - return result; - } - - /** - * - * @param source - * @return - */ - public static String toStringWithFrenchCommas(final String[] source) - { - String result; - - if (source == null) - { - result = null; - } - else - { - result = new StringList(source).toStringWithFrenchCommas(); - } - - // - return result; - } - - /** - * - * @param source - * @return - */ - public static String toStringWithFrenchCommas(final StringList source) - { - String result; - - if (source == null) - { - result = null; - } - else - { - result = source.toStringWithFrenchCommas(); - } - - // - return result; - } -} diff --git a/src/fr/devinsy/util/strings/StringListWriter.java b/src/fr/devinsy/util/strings/StringListWriter.java deleted file mode 100644 index b52bf3c..0000000 --- a/src/fr/devinsy/util/strings/StringListWriter.java +++ /dev/null @@ -1,148 +0,0 @@ -/** - * Copyright (C) 2013-2017 Christian Pierre MOMON - * - * This file is part of Devinsy-utils. - * - * Devinsy-utils is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * Devinsy-utils is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public License - * along with Devinsy-utils. If not, see - */ -package fr.devinsy.util.strings; - -import java.io.IOException; -import java.io.Writer; - -/** - * - */ -public class StringListWriter extends Writer -{ - private StringList out; - - /** - * - */ - public StringListWriter() - { - this.out = new StringList(); - } - - /** - * - */ - public StringListWriter(final int initialCapacity) - { - this.out = new StringList(initialCapacity); - } - - /** - * - */ - public StringListWriter(final StringList target) - { - if (target == null) - { - throw new NullPointerException("target is null."); - } - else - { - this.out = target; - } - } - - /* - * - */ - @Override - public void close() throws IOException - { - - } - - /* - * - */ - @Override - public void flush() throws IOException - { - - } - - /* - * - */ - @Override - public String toString() - { - String result; - - result = this.out.toString(); - - // - return result; - } - - /** - * - * @return - */ - public StringList toStringList() - { - StringList result; - - result = this.out; - - // - return result; - } - - /* - * - */ - public void write(final char c) throws IOException - { - this.out.append(c); - } - - /* - * - */ - @Override - public void write(final char[] cbuf, final int off, final int len) throws IOException - { - char[] target; - if ((off == 0) && (cbuf.length == len)) - { - target = cbuf; - } - else - { - target = new char[len]; - for (int index = off; index < len; index++) - { - target[index] = cbuf[index]; - } - } - - // - this.out.append(new String(target)); - } - - /* - * - */ - @Override - public void write(final String string) throws IOException - { - this.out.append(string); - } -} diff --git a/src/fr/devinsy/util/strings/StringSet.java b/src/fr/devinsy/util/strings/StringSet.java deleted file mode 100644 index f69a951..0000000 --- a/src/fr/devinsy/util/strings/StringSet.java +++ /dev/null @@ -1,411 +0,0 @@ -/** - * Copyright (C) 2014-2016 Christian Pierre MOMON - * - * This file is part of Devinsy-utils. - * - * Devinsy-utils is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * Devinsy-utils is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public License - * along with Devinsy-utils. If not, see - */ -package fr.devinsy.util.strings; - -import java.util.Collection; -import java.util.HashSet; - -/** - * This class is a set of String objects with specific methods. It makes - * possible to build a string without any copy. The goal is to make easier the - * use of set of strings. - */ -public class StringSet extends HashSet -{ - private static final long serialVersionUID = 6674838743930005326L; - - /** - * - */ - public StringSet() - { - super(); - } - - /** - * Constructs a list of string of the specified collection, in the order - * they are returned by the collection's iterator. - * - * @param source - */ - public StringSet(final Collection source) - { - super(source.size()); - - if (source != null) - { - // - for (String string : source) - { - this.add(string); - } - } - } - - /** - * - */ - public StringSet(final int initialCapacity) - { - super(initialCapacity); - } - - /** - * - */ - public StringSet(final String[] source) - { - super(); - - if (source != null) - { - // - for (String string : source) - { - this.add(string); - } - } - } - - /** - * - */ - public StringSet(final StringSet source) - { - super(); - - if (source != null) - { - // - for (String string : source) - { - this.add(string); - } - } - } - - /** - * Check null parameter before add. - */ - @Override - public boolean add(final String string) - { - boolean result; - - if (string != null) - { - // - result = super.add(string); - } - else - { - // - result = false; - } - - // - return result; - } - - /** - * - */ - public StringSet add(final StringSet strings) - { - StringSet result; - - if (strings != null) - { - for (String string : strings) - { - this.add(string); - } - } - - result = this; - - // - return result; - } - - /** - * Deep copy and shallow copy have no sense about a list of immutable - * objects. - * - * @return - */ - @Override - public StringSet clone() - { - StringSet result; - - result = new StringSet(size()); - - for (String string : this) - { - result.add(string); - } - - // - return result; - } - - /** - * - */ - public int length() - { - int result = 0; - - for (String string : this) - { - result += string.length(); - } - - // - return result; - } - - /** - * - */ - public StringSet merge() - { - StringSet result; - - StringBuffer buffer = new StringBuffer(length()); - - for (String string : this) - { - buffer.append(string); - } - - String merge = buffer.toString(); - - clear(); - add(merge); - - // - result = this; - return result; - } - - /** - * - */ - public StringSet put(final char character) - { - StringSet result; - - this.add(String.valueOf(character)); - - result = this; - - // - return result; - } - - /** - * - */ - public StringSet put(final double value) - { - StringSet result; - - result = this.put(String.valueOf(value)); - - // - return result; - } - - /** - * - */ - public StringSet put(final int value) - { - StringSet result; - - result = this.put(String.valueOf(value)); - - // - return result; - } - - /** - * - */ - public StringSet put(final long value) - { - StringSet result; - - result = this.put(String.valueOf(value)); - - // - return result; - } - - /** - * - */ - public StringSet put(final Object value) - { - StringSet result; - - if (value != null) - { - this.put(value.toString()); - } - - result = this; - - // - return result; - } - - /** - * Check null parameter before add. - */ - public StringSet put(final String string) - { - StringSet result; - - if (string != null) - { - this.add(string); - } - - result = this; - - // - return result; - } - - /** - * - */ - public StringSet put(final String... strings) - { - StringSet result; - - if (strings != null) - { - for (String string : strings) - { - this.put(string); - } - } - - result = this; - - // - return result; - } - - /** - * - */ - public StringSet put(final StringList strings) - { - StringSet result; - - if (strings != null) - { - for (String string : strings) - { - this.put(string); - } - } - - result = this; - - // - return result; - } - - /** - * - */ - public StringSet put(final StringSet strings) - { - StringSet result; - - if (strings != null) - { - for (String string : strings) - { - this.put(string); - } - } - - result = this; - - // - return result; - } - - /** - * - */ - public StringSet putNullable(final Object value) - { - StringSet result; - - if (value == null) - { - super.add((String) null); - } - else - { - this.put(value.toString()); - } - - result = this; - - // - return result; - } - - /** - * - */ - @Override - public String toString() - { - String result; - - result = toStringList().toStringWithCommas(); - - // - return result; - } - - /** - * - * @return - */ - public StringList toStringList() - { - StringList result; - - result = new StringList(this); - - // - return result; - } -} diff --git a/src/fr/devinsy/util/unix/CachedFile.java b/src/fr/devinsy/util/unix/CachedFile.java deleted file mode 100644 index ce1881f..0000000 --- a/src/fr/devinsy/util/unix/CachedFile.java +++ /dev/null @@ -1,134 +0,0 @@ -/** - * Copyright (C) 2006-2010, 2013-2014 Christian Pierre MOMON - * - * This file is part of Devinsy-utils. - * - * Devinsy-utils is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * Devinsy-utils is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public License - * along with Devinsy-utils. If not, see - */ -package fr.devinsy.util.unix; - -import java.io.File; - -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; - -/** - * - * @author Christian Pierre MOMON (christian.momon@devinsy.fr) - */ -public class CachedFile -{ - public enum Status - { - NOT_LOAD, EXPIRED, UPDATED - } - - private static final Logger logger = LoggerFactory.getLogger(CachedFile.class); - - protected String sourceName; - protected long sourceTime; - protected Status status; - - /** - * - */ - public CachedFile(final String fileName) - { - this.sourceName = fileName; - this.sourceTime = 0; - this.status = Status.NOT_LOAD; - } - - /** - * - */ - protected File getSourceFile() - { - File result; - - if (this.sourceName == null) - { - result = null; - } - else - { - File source = new File(this.sourceName); - - if (!source.exists()) - { - logger.error("source file defined but not found"); - result = null; - } - else - { - result = source; - } - } - - // - return (result); - } - - /** - * - */ - protected Status getStatus() - { - Status result; - - File source = getSourceFile(); - - if (source == null) - { - this.status = Status.NOT_LOAD; - } - else if (this.sourceTime != source.lastModified()) - { - this.status = Status.EXPIRED; - } - - result = this.status; - - // - return (result); - } - - /** - * - */ - public void setNotLoad() - { - this.status = Status.NOT_LOAD; - } - - /** - * - */ - public void setUpdated() - { - File source = getSourceFile(); - - if (source == null) - { - this.status = Status.NOT_LOAD; - } - else - { - this.sourceTime = source.lastModified(); - this.status = Status.UPDATED; - } - } -} - -// //////////////////////////////////////////////////////////////////////// diff --git a/src/fr/devinsy/util/unix/EtcGroupFile.java b/src/fr/devinsy/util/unix/EtcGroupFile.java deleted file mode 100644 index ad1ccb5..0000000 --- a/src/fr/devinsy/util/unix/EtcGroupFile.java +++ /dev/null @@ -1,200 +0,0 @@ -/** - * Copyright (C) 2006-2010, 2013-2014 Christian Pierre MOMON - * - * This file is part of Devinsy-utils. - * - * Devinsy-utils is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * Devinsy-utils is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public License - * along with Devinsy-utils. If not, see - */ -package fr.devinsy.util.unix; - -import java.util.Vector; - -/** - * - * @author Christian Pierre MOMON (christian.momon@devinsy.fr) - */ -public class EtcGroupFile extends CachedFile -{ - // static private final Logger logger = - // LoggerFactory.getLogger(EtcGroupFile.class); - - private static EtcGroupFile instance = null; - protected Groups groups; - - /** - * - */ - protected EtcGroupFile() - { - super("/etc/group"); - this.groups = null; - } - - /* - * - */ - public boolean contains(final String name) - { - boolean result; - - Groups groups = updatedGroups(); - - if (groups == null) - { - result = false; - } - else - { - result = groups.contains(name); - } - - // - return (result); - } - - /** - * - */ - public Group get(final int gid) - { - Group result; - - Groups groups = updatedGroups(); - - if (groups == null) - { - result = null; - } - else - { - result = groups.getByGid(gid); - } - - // - return (result); - } - - /** - * - */ - public Group get(final String name) - { - Group result; - - Groups groups = updatedGroups(); - - if (groups == null) - { - result = null; - } - else - { - result = groups.getByName(name); - } - - // - return (result); - } - - /** - * - */ - public Vector getLoginGroups(final String login) - { - Vector result; - - Groups groups = updatedGroups(); - - result = groups.getLoginGroups(login); - - // - return (result); - } - - /** - * - */ - public String getLoginGroupsString(final String login) - { - String result; - - this.groups = updatedGroups(); - - result = this.groups.getLoginGroupsString(login); - - // - return (result); - } - - /** - * - */ - @Override - public String toString() - { - String result; - - result = this.groups.toString(); - - // - return (result); - } - - /** - * - */ - protected Groups updatedGroups() - { - Groups result; - - if (getStatus() != Status.UPDATED) - { - this.groups = EtcGroupFileReader.load(); - - if (this.groups == null) - { - setNotLoad(); - } - else - { - setUpdated(); - } - } - - result = this.groups; - - // - return (result); - } - - /** - * - */ - static public EtcGroupFile instance() - { - EtcGroupFile result; - - if (EtcGroupFile.instance == null) - { - EtcGroupFile.instance = new EtcGroupFile(); - } - - result = EtcGroupFile.instance; - - // - return (result); - } -} - -// //////////////////////////////////////////////////////////////////////// \ No newline at end of file diff --git a/src/fr/devinsy/util/unix/EtcGroupFileReader.java b/src/fr/devinsy/util/unix/EtcGroupFileReader.java deleted file mode 100644 index 35ab71f..0000000 --- a/src/fr/devinsy/util/unix/EtcGroupFileReader.java +++ /dev/null @@ -1,102 +0,0 @@ -/** - * Copyright (C) 2006-2010, 2013-2014 Christian Pierre MOMON - * - * This file is part of Devinsy-utils. - * - * Devinsy-utils is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * Devinsy-utils is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public License - * along with Devinsy-utils. If not, see - */ -package fr.devinsy.util.unix; - -import java.io.BufferedReader; -import java.io.FileNotFoundException; -import java.io.FileReader; - -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; - -/** - * - * @author Christian Pierre MOMON (christian.momon@devinsy.fr) - */ -public class EtcGroupFileReader -{ - private static final Logger logger = LoggerFactory.getLogger(EtcGroupFileReader.class); - - /** - * - */ - public static Groups load() - { - Groups result; - - BufferedReader file; - - try - { - file = new BufferedReader(new FileReader("/etc/group")); - } - catch (FileNotFoundException exception) - { - logger.error("File not found"); - file = null; - } - - if (file == null) - { - result = null; - } - else - { - result = new Groups(); - - try - { - String line; - while ((line = file.readLine()) != null) - { - String[] tokens = line.split(":"); - - Group group = new Group(); - group.setName(tokens[0]); - group.setPassword(tokens[1]); - group.setGid((new Integer(tokens[2])).intValue()); - - // Manage the case of empty shell. - if (tokens.length == 4) - { - String[] tokensBis = tokens[3].split(","); - - for (int tokenCounter = 0; tokenCounter < tokensBis.length; tokenCounter++) - { - group.addMember(tokensBis[tokenCounter]); - } - } - result.add(group); - } - - file.close(); - } - catch (java.io.IOException exception) - { - logger.error("Exception here."); - result = null; - } - } - - // - return (result); - } -} - -// //////////////////////////////////////////////////////////////////////// \ No newline at end of file diff --git a/src/fr/devinsy/util/unix/EtcPasswdFile.java b/src/fr/devinsy/util/unix/EtcPasswdFile.java deleted file mode 100644 index 2816e37..0000000 --- a/src/fr/devinsy/util/unix/EtcPasswdFile.java +++ /dev/null @@ -1,186 +0,0 @@ -/** - * Copyright (C) 2006-2010, 2013-2014 Christian Pierre MOMON - * - * This file is part of Devinsy-utils. - * - * Devinsy-utils is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * Devinsy-utils is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public License - * along with Devinsy-utils. If not, see - */ -package fr.devinsy.util.unix; - -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; - -/** - * - * @author Christian Pierre MOMON (christian.momon@devinsy.fr) - */ -public class EtcPasswdFile extends CachedFile -{ - private static final Logger logger = LoggerFactory.getLogger(EtcPasswdFile.class); - - private static EtcPasswdFile instance = null; - protected Users users; - - /** - * - */ - protected EtcPasswdFile() - { - super("/etc/passwd"); - this.users = null; - } - - /* - * - */ - public boolean contains(final String login) - { - boolean result; - - Users users = updatedUsers(); - - if (users == null) - { - result = false; - } - else - { - result = users.contains(login); - } - - // - return (result); - } - - /** - * - */ - public User get(final int uid) - { - User result; - - Users users = updatedUsers(); - - if (users == null) - { - result = null; - } - else - { - result = users.getByUid(uid); - } - - // - return (result); - } - - /** - * - */ - public User get(final String login) - { - User result; - - Users users = updatedUsers(); - - if (users == null) - { - result = null; - } - else - { - result = users.getByLogin(login); - } - - // - return (result); - } - - /** - * - */ - @Override - public String toString() - { - String result; - - result = this.users.toString(); - - // - return (result); - } - - /** - * - */ - protected Users update() - { - Users result; - - logger.debug("updating"); - this.users = EtcPasswdFileReader.load(); - - if (this.users == null) - { - setNotLoad(); - } - else - { - setUpdated(); - } - - result = this.users; - - // - return (result); - } - - /** - * - */ - protected Users updatedUsers() - { - Users result; - - if (getStatus() != Status.UPDATED) - { - update(); - } - - result = this.users; - - // - return (result); - } - - /** - * - */ - public static EtcPasswdFile instance() - { - EtcPasswdFile result; - - if (EtcPasswdFile.instance == null) - { - EtcPasswdFile.instance = new EtcPasswdFile(); - } - - result = EtcPasswdFile.instance; - - // - return (result); - } -} - -// //////////////////////////////////////////////////////////////////////// \ No newline at end of file diff --git a/src/fr/devinsy/util/unix/EtcPasswdFileReader.java b/src/fr/devinsy/util/unix/EtcPasswdFileReader.java deleted file mode 100644 index 1467391..0000000 --- a/src/fr/devinsy/util/unix/EtcPasswdFileReader.java +++ /dev/null @@ -1,105 +0,0 @@ -/** - * Copyright (C) 2006-2010, 2013-2014 Christian Pierre MOMON - * - * This file is part of Devinsy-utils. - * - * Devinsy-utils is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * Devinsy-utils is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public License - * along with Devinsy-utils. If not, see - */ -package fr.devinsy.util.unix; - -import java.io.BufferedReader; -import java.io.FileNotFoundException; -import java.io.FileReader; - -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; - -/** - * - * @author Christian Pierre MOMON (christian.momon@devinsy.fr) - */ -public class EtcPasswdFileReader -{ - private static final Logger logger = LoggerFactory.getLogger(EtcPasswdFileReader.class); - - /** - * - */ - public static Users load() - { - Users result; - - BufferedReader file; - - try - { - file = new BufferedReader(new FileReader("/etc/passwd")); - } - catch (FileNotFoundException exception) - { - logger.error("File not found"); - file = null; - } - - if (file == null) - { - result = null; - } - else - { - result = new Users(); - - try - { - String line; - while ((line = file.readLine()) != null) - { - String[] tokens = line.split(":"); - - User user = new User(); - user.setLogin(tokens[0]); - user.setPassword(tokens[1]); - user.setUid((new Integer(tokens[2])).intValue()); - user.setGid((new Integer(tokens[3])).intValue()); - user.setRealName(tokens[4]); - user.setHomeDirectory(tokens[5]); - - // Manage the case of empty shell. - if (tokens.length == 7) - { - user.setShell(tokens[6]); - } - else - { - user.setShell(""); - } - - result.add(user); - } - - file.close(); - } - catch (java.io.IOException exception) - { - logger.error("Exception here."); - result = null; - } - } - - // - return (result); - } -} - -// //////////////////////////////////////////////////////////////////////// \ No newline at end of file diff --git a/src/fr/devinsy/util/unix/Group.java b/src/fr/devinsy/util/unix/Group.java deleted file mode 100644 index 04eb687..0000000 --- a/src/fr/devinsy/util/unix/Group.java +++ /dev/null @@ -1,223 +0,0 @@ -/** - * Copyright (C) 2006-2010, 2013-2014 Christian Pierre MOMON - * - * This file is part of Devinsy-utils. - * - * Devinsy-utils is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * Devinsy-utils is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public License - * along with Devinsy-utils. If not, see - */ -package fr.devinsy.util.unix; - -import java.util.Vector; - -/** - * - * @author Christian Pierre MOMON (christian.momon@devinsy.fr) - */ -public class Group -{ - // static private final Logger logger = - // LoggerFactory.getLogger(Group.class); - - /* - * /usr/include/grp.h - * - * The group structure. - * struct group - * { - * char *gr_name; Group name. - * char *gr_passwd; Password. - * __gid_t gr_gid; Group ID. - * char **gr_mem; Member list. - * }; - */ - - protected String name; - protected String password; - protected int gid; - protected Vector members; - - /** - * - */ - public Group() - { - this.name = null; - this.password = null; - this.gid = -1; - this.members = new Vector(); - } - - /** - * - */ - public void addMember(final String login) - { - if ((login != null) && (login.length() != 0)) - { - this.members.add(login); - } - } - - /** - * - */ - public int getGid() - { - int result; - - result = this.gid; - - // - return (result); - } - - /** - * - */ - public Vector getMembers() - { - Vector result; - - result = this.members; - - // - return (result); - } - - /** - * - */ - public String getName() - { - String result; - - result = this.name; - - // - return (result); - } - - /** - * - */ - public String getPassword() - { - String result; - - result = this.password; - - // - return (result); - } - - /** - * - */ - public int gid() - { - int result; - - result = this.gid; - - // - return (result); - } - - /** - * - */ - public Vector members() - { - Vector result; - - result = this.members; - - // - return (result); - } - - /** - * - */ - public String name() - { - String result; - - result = this.name; - - // - return (result); - } - - /** - * - */ - public String passwd() - { - String result; - - result = this.password; - - // - return (result); - } - - /** - * - */ - public void setGid(final int gid) - { - this.gid = gid; - } - - /** - * - */ - public void setName(final String name) - { - this.name = name; - } - - /** - * - */ - public void setPasswd(final String password) - { - this.password = password; - } - - /** - * - */ - public void setPassword(final String password) - { - this.password = password; - } - - /** - * - */ - @Override - public String toString() - { - String result; - - result = "|" + this.name + "|" + this.password + "|" + this.gid + "|" + this.members + "|"; - - // - return (result); - } -} - -// //////////////////////////////////////////////////////////////////////// \ No newline at end of file diff --git a/src/fr/devinsy/util/unix/Groups.java b/src/fr/devinsy/util/unix/Groups.java deleted file mode 100644 index 34e0e4d..0000000 --- a/src/fr/devinsy/util/unix/Groups.java +++ /dev/null @@ -1,233 +0,0 @@ -/** - * Copyright (C) 2006-2010, 2013-2014 Christian Pierre MOMON - * - * This file is part of Devinsy-utils. - * - * Devinsy-utils is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * Devinsy-utils is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public License - * along with Devinsy-utils. If not, see - */ -package fr.devinsy.util.unix; - -import java.util.Iterator; -import java.util.Vector; - -/** - * - * @author Christian Pierre MOMON (christian.momon@devinsy.fr) - */ -public class Groups extends Vector -{ - - private static final long serialVersionUID = 5802487312198869603L; - - // static private final Logger logger = - // LoggerFactory.getLogger(Groups.class); - - /** - * - */ - public Groups() - { - super(); - } - - /* - * - */ - public boolean contains(final int gid) - { - boolean result; - - if (getByGid(gid) == null) - { - result = false; - } - else - { - result = true; - } - - // - return (result); - } - - /* - * - */ - public boolean contains(final String name) - { - boolean result; - - if (getByName(name) == null) - { - result = false; - } - else - { - result = true; - } - - // - return (result); - } - - /** - * - */ - public Group getByGid(final int gid) - { - Group result; - - result = null; - boolean ended = false; - Iterator iterator = this.iterator(); - while (!ended) - { - if (iterator.hasNext()) - { - Group group = iterator.next(); - if (group.getGid() == gid) - { - ended = true; - result = group; - } - } - else - { - ended = true; - result = null; - } - } - - // - return (result); - } - - /** - * - */ - public Group getByName(final String name) - { - Group result; - - if (name == null) - { - result = null; - } - else - { - result = null; - boolean ended = false; - Iterator iterator = this.iterator(); - while (!ended) - { - if (iterator.hasNext()) - { - Group group = iterator.next(); - if (group.getName().equals(name)) - { - ended = true; - result = group; - } - } - else - { - ended = true; - result = null; - } - } - } - - // - return (result); - } - - /** - * - */ - public Vector getLoginGroups(final String login) - { - Vector result; - - result = new Vector(); - Iterator iterator = this.iterator(); - - while (iterator.hasNext()) - { - Group group = iterator.next(); - - if (group.members().contains(login)) - { - result.add(group.getName()); - } - } - - // - return (result); - } - - /** - * - */ - public String getLoginGroupsString(final String login) - { - String result; - - Vector groups = getLoginGroups(login); - - StringBuffer string = new StringBuffer(); - - for (String group : groups) - { - if (string.length() == 0) - { - string.append(group); - } - else - { - string.append(","); - string.append(group); - } - } - - result = string.toString(); - - // - return (result); - } - - /** - * - */ - @Override - public String toString() - { - String result; - - StringBuffer out = new StringBuffer(); - - Iterator iterator = this.iterator(); - - while (iterator.hasNext()) - { - out.append(iterator.next().toString() + "\n"); - } - - result = out.toString(); - - // - return (result); - } -} - -// //////////////////////////////////////////////////////////////////////// \ No newline at end of file diff --git a/src/fr/devinsy/util/unix/Unix.java b/src/fr/devinsy/util/unix/Unix.java deleted file mode 100644 index 5de7972..0000000 --- a/src/fr/devinsy/util/unix/Unix.java +++ /dev/null @@ -1,597 +0,0 @@ -/** - * Copyright (C) 2006-2010, 2013-2015 Christian Pierre MOMON - * - * This file is part of Devinsy-utils. - * - * Devinsy-utils is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * Devinsy-utils is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public License - * along with Devinsy-utils. If not, see - */ -package fr.devinsy.util.unix; - -import java.io.File; -import java.util.Vector; - -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; - -import fr.devinsy.util.cmdexec.CmdExec; -import fr.devinsy.util.strings.StringListUtils; -import fr.devinsy.util.unix.acl.Acl; -import fr.devinsy.util.unix.acl.AclManager; - -/** - * - * @author Christian Pierre MOMON (christian.momon@devinsy.fr) - */ -public class Unix -{ - private static final Logger logger = LoggerFactory.getLogger(Unix.class); - public static final String SUDO = "/usr/bin/sudo"; - - /** - * - */ - public static void appendToFile(final String text, final String path) throws Exception - { - if ((text == null) || (text.length() == 0) || (path == null) || (path.length() == 0)) - { - throw new Exception("Parameter undefined: [" + text + "][" + path + "]."); - } - else - { - try - { - CmdExec.run(SUDO, "bash", "-c", "echo \"" + text + "\" >> " + path); - } - catch (Exception exception) - { - throw new Exception("Error detected appending text to file [" + path + "].", exception); - } - } - } - - /** - * - */ - public static void chmod(final String changes, final String path) throws Exception - { - if ((changes == null) || (changes.length() == 0) || (path == null) || (path.length() == 0)) - { - throw new Exception("Parameter undefined: [" + changes + "][" + path + "]."); - } - else if (!new File(path).exists()) - { - throw new Exception("Path not found: [" + path + "]."); - } - else - { - try - { - CmdExec.run(SUDO, "chmod", changes, path); - } - catch (Exception exception) - { - throw new Exception("Error running chmod command for [" + changes + "][" + path + "].", exception); - } - } - } - - /** - * - */ - public static void clearAcl(final String id, final String filePathName) throws Exception - { - AclManager.clearId(id, filePathName); - } - - /** - * - */ - public static void clearAclGroup(final String group, final String filePathName) throws Exception - { - AclManager.clearGroup(group, filePathName); - } - - /** - * - */ - public static void clearAclUser(final String login, final String filePathName) throws Exception - { - AclManager.clearUser(login, filePathName); - } - - /** - * - */ - public static void createUserAccount(final String login) throws Exception - { - if ((login == null) || (login.length() == 0)) - { - throw new Exception("Login parameter undefined."); - } - else - { - createUserAccount(login, login); - } - } - - /** - * - */ - public static void createUserAccount(final String login, final String name) throws Exception - { - if ((login == null) || (login.length() == 0)) - { - throw new Exception("Login parameter undefined."); - } - else if ((name == null) || (name.length() == 0)) - { - throw new Exception("Name parameter undefined."); - } - else - { - createUserAccount(login, name, "/home/" + login); - } - } - - /** - * - */ - public static void createUserAccount(final String login, final String name, final String home) throws Exception - { - if ((login == null) || (login.length() == 0)) - { - throw new Exception("Login parameter undefined."); - } - else if ((name == null) || (name.length() == 0)) - { - throw new Exception("Name parameter undefined."); - } - else if ((home == null) || (home.length() == 0)) - { - throw new Exception("Home parameter undefined."); - } - else - { - try - { - logger.info("Creating user account for [" + login + "]."); - CmdExec.run(SUDO, "/usr/sbin/useradd", "-m", "-c", name, "-d", home, login); - EtcPasswdFile.instance().update(); - logger.info("User account created for [" + login + "]."); - } - catch (Exception exception) - { - throw new Exception("Error detected creating user account [" + login + "].", exception); - } - } - } - - /** - * - */ - public static void createUserAccount(final String login, final String name, final String home, final String password) throws Exception - { - if ((password == null) || (password.length() == 0)) - { - throw new Exception("Password parameter undefined."); - } - else if (Unix.isLogin(login)) - { - throw new Exception("Login [" + login + "] already in use"); - } - else - { - createUserAccount(login, name, home); - setPassword(login, password); - } - } - - /** - * - */ - public static void deleteGroup(final String group) throws Exception - { - if ((group == null) || (group.length() == 0)) - { - throw new Exception("Group parameter undefined."); - } - else - { - try - { - logger.info("Deleting group for [" + group + "]."); - CmdExec.run(SUDO + " groupdel " + group); - logger.info("Group deleted for [" + group + "]."); - } - catch (Exception exception) - { - throw new Exception("Error running groupdel command for group [" + group + "].", exception); - } - } - } - - /** - * - */ - public static void deleteUserAccount(final String login) throws Exception - { - if ((login == null) || (login.length() == 0)) - { - throw new Exception("Login parameter undefined."); - } - else - { - try - { - logger.info("Deleting user account for [" + login + "]."); - CmdExec.run(SUDO + " /usr/sbin/userdel " + login); - logger.info("User account delted for [" + login + "]."); - } - catch (Exception exception) - { - throw new Exception("Error running userdel command for login [" + login + "].", exception); - } - } - } - - /** - * - */ - public static String getAclData(final String filePathName) throws Exception - { - String result; - - result = AclManager.getAclData(filePathName); - - // - return (result); - } - - /** - * - */ - public static String[] getAclUsers(final String filePathName) throws Exception - { - String[] result; - - Acl acl = AclManager.getAcl(filePathName); - - result = acl.currentAcl().getUserIds(); - - // - return (result); - } - - /** - * - */ - public static boolean isGroup(final String groupName) - { - boolean result; - - result = EtcGroupFile.instance().contains(groupName); - - // - return (result); - } - - /** - * - */ - public static boolean isLogin(final String login) - { - boolean result; - - result = EtcPasswdFile.instance().contains(login); - - // - return (result); - } - - /** - * - */ - public static void link(final String sourcePath, final String targetPath) throws Exception - { - logger.info("[" + sourcePath + "][" + targetPath + "]"); - if ((sourcePath == null) || (sourcePath.length() == 0) || (targetPath == null) || (targetPath.length() == 0)) - { - throw new Exception("Parameter undefined: [" + sourcePath + "][" + targetPath + "]."); - } - else - { - File sourceFile = new File(sourcePath); - File targetFile = new File(targetPath); - - if (!sourceFile.exists()) - { - throw new Exception("Source does not exist: [" + sourcePath + "]."); - } - else if ((targetFile.exists()) && (!targetFile.isDirectory())) - { - throw new Exception("Target already exists: [" + targetPath + "]."); - } - else - { - try - { - CmdExec.run(SUDO, "ln", "-s", sourcePath, targetPath); - } - catch (Exception exception) - { - throw new Exception("Error detected linking [" + sourcePath + "][" + targetPath + "].", exception); - } - } - } - } - - /** - * - */ - public static void modifyLogin(final String sourceLogin, final String targetLogin, final String sourceHomeDirectory) throws Exception - { - logger.info("Starting login modifying: [" + sourceLogin + "] -> [" + targetLogin + "]"); - if ((sourceLogin == null) || (sourceLogin.length() == 0)) - { - throw new Exception("Original login parameters undefined"); - } - else if ((targetLogin == null) || (targetLogin.length() == 0)) - { - throw new Exception("New login parameters undefined"); - } - else if (!Unix.isLogin(sourceLogin)) - { - throw new Exception("Original login unknow: [" + sourceLogin + "]."); - } - else if (Unix.isLogin(targetLogin)) - { - throw new Exception("New login unknow: [" + targetLogin + "]."); - } - else if (sourceHomeDirectory == null) - { - throw new Exception("sourceHomeDirectory parameter undefined, thus no home directory move."); - } - else if (!new File(sourceHomeDirectory).exists()) - { - throw new Exception("Source home directory does not exist: [" + sourceHomeDirectory + "]."); - } - else - { - String targetHomeDirectory = new File(sourceHomeDirectory).getParent().toString() + "/" + targetLogin; - if (new File(targetHomeDirectory).exists()) - { - throw new Exception("Target home directory already exists: [" + targetHomeDirectory + "]."); - } - else - { - try - { - logger.info("Login modifying: [" + sourceLogin + "] -> [" + targetLogin + "]"); - CmdExec.run(SUDO + " usermod -l " + targetLogin + " " + sourceLogin); - logger.info("Login modified: [" + sourceLogin + "] -> [" + targetLogin + "]"); - } - catch (Exception exception) - { - throw new Exception("Login modification failed for [" + sourceLogin + "].", exception); - } - - try - { - logger.info("Renaming home directory: [" + sourceHomeDirectory + "] -> [" + targetLogin + "]"); - CmdExec.run(SUDO + " mv " + sourceHomeDirectory + " " + targetHomeDirectory); - logger.info("Home directory renamed: [" + sourceHomeDirectory + "] -> [" + targetLogin + "]"); - } - catch (Exception exception) - { - throw new Exception("Home directory rename failed for [" + sourceHomeDirectory + "].", exception); - } - } - } - logger.info("Login modifying done: [" + sourceLogin + "] -> [" + targetLogin + "]"); - } - - /** - * - */ - public static void recursiveChmod(final String changes, final String path) throws Exception - { - if ((changes == null) || (changes.length() == 0) || (path == null) || (path.length() == 0)) - { - throw new Exception("Parameter undefined: [" + changes + "][" + path + "]."); - } - else if (!new File(path).exists()) - { - throw new Exception("Path not found: [" + path + "]."); - } - else - { - try - { - CmdExec.run(SUDO, "chmod", "-R", changes, path); - } - catch (Exception exception) - { - throw new Exception("Error running recursive chmod command for [" + changes + "][" + path + "].", exception); - } - } - } - - /** - * - */ - public static void renameGroup(final String sourceGroup, final String targetGroup) throws Exception - { - logger.info("Starting group renaming: [" + sourceGroup + "] -> [" + targetGroup + "]"); - if ((sourceGroup == null) || (sourceGroup.length() == 0)) - { - throw new Exception("Original group name parameters undefined"); - } - else if ((targetGroup == null) || (targetGroup.length() == 0)) - { - throw new Exception("New group name parameters undefined"); - } - else if (!Unix.isGroup(sourceGroup)) - { - throw new Exception("Original group unknow: [" + sourceGroup + "]."); - } - else if (Unix.isGroup(targetGroup)) - { - throw new Exception("New group unknow: [" + targetGroup + "]."); - } - else - { - try - { - logger.info("Login modifying: [" + sourceGroup + "] -> [" + targetGroup + "]"); - CmdExec.run(SUDO + " groupmod -n " + targetGroup + " " + sourceGroup); - logger.info("Login modified: [" + sourceGroup + "] -> [" + targetGroup + "]"); - } - catch (Exception exception) - { - throw new Exception("Group renaming failed for [" + sourceGroup + "].", exception); - } - } - logger.info("Group renaming done: [" + sourceGroup + "] -> [" + targetGroup + "]"); - } - - /** - * - */ - public static Group searchGroup(final String groupName) - { - Group result; - - result = EtcGroupFile.instance().get(groupName); - - // - return (result); - } - - /** - * - */ - public static User searchLogin(final String login) - { - User result; - - result = EtcPasswdFile.instance().get(login); - - // - return (result); - } - - /** - * - */ - public static Vector searchLoginGroups(final String login) - { - Vector result; - - result = EtcGroupFile.instance().getLoginGroups(login); - - // - return (result); - } - - /** - * - */ - public static void setfacl(final String... args) throws Exception - { - try - { - CmdExec.run(SUDO, "setfacl", args, 1, 6); - } - catch (Exception exception) - { - throw new Exception("Error running setfacl command for " + StringListUtils.toStringWithBrackets(args) + ":" + exception.getMessage() + ".", exception); - } - } - - /** - * As 'passwd' command has not the option '--stdin' in all systems (eg. - * Debian), this method uses the 'chpasswd' command. - */ - public static void setPassword(final String login, final String newPassword) throws Exception - { - if ((login == null) || (login.length() == 0)) - { - throw new Exception("Login parameter undefined."); - } - else if (newPassword == null) - { - throw new Exception("New password parameter undefined."); - } - else - { - try - { - logger.info("Password setting for [" + login + "]."); - CmdExec.run(SUDO, "bash", "-c", "echo \"" + login + ":" + newPassword + "\"| chpasswd "); - logger.info("Password set for [" + login + "]."); - } - catch (Exception exception) - { - throw new Exception("Error detected on setting of the new password for [" + login + "].", exception); - } - } - } - - /** - * chfn [ -f full-name ] [ username ] - */ - public static void setRealName(final String login, final String newRealName) throws Exception - { - if ((login == null) || (login.length() == 0)) - { - throw new Exception("Login parameter undefined."); - } - else if (newRealName == null) - { - throw new Exception("New real name parameter undefined."); - } - else - { - try - { - logger.info("Real name changing for user [" + login + "]."); - CmdExec.run(SUDO, "chfn", "-f", newRealName, login); - EtcPasswdFile.instance().update(); - logger.info("Real name changed for user [" + login + "]."); - } - catch (Exception exception) - { - throw new Exception("Error detected on setting of the new real name for [" + login + "].", exception); - } - } - } - - /** - * - */ - public static void unlink(final String filePathName) throws Exception - { - logger.info("[" + filePathName + "]"); - if (filePathName == null) - { - throw new Exception("Parameter undefined: [" + filePathName + "]."); - } - else - { - new File(filePathName).delete(); - } - } -} - -// //////////////////////////////////////////////////////////////////////// \ No newline at end of file diff --git a/src/fr/devinsy/util/unix/User.java b/src/fr/devinsy/util/unix/User.java deleted file mode 100644 index 8942577..0000000 --- a/src/fr/devinsy/util/unix/User.java +++ /dev/null @@ -1,355 +0,0 @@ -/** - * Copyright (C) 2006-2010, 2013-2014 Christian Pierre MOMON - * - * This file is part of Devinsy-utils. - * - * Devinsy-utils is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * Devinsy-utils is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public License - * along with Devinsy-utils. If not, see - */ -package fr.devinsy.util.unix; - -/** - * - * @author Christian Pierre MOMON (christian.momon@devinsy.fr) - */ -public class User -{ - // private static final Logger logger = LoggerFactory.getLogger(User.class); - - /* - * /usr/include/pwd.h - * - * The passwd structure. - * struct passwd - * { - * char *pw_name;D Username. - * char *pw_passwd; Password. - * __uid_t pw_uid; User ID. - * __gid_t pw_gid; Group ID. - * char *pw_gecos; Real name. - * char *pw_dir; Home directory. - * char *pw_shell; Shell program. - * }; - */ - - protected String login; - protected String password; - protected int uid; - protected int gid; - protected String realName; - protected String homeDirectory; - protected String shell; - - /** - * - */ - public User() - { - this.login = null; - this.password = null; - this.uid = -1; - this.gid = -1; - this.realName = null; - this.homeDirectory = null; - this.shell = null; - } - - /** - * - */ - public User(final User user) - { - this.login = user.login(); - this.password = user.passwd(); - this.uid = user.uid(); - this.gid = user.gid(); - this.realName = user.realName(); - this.homeDirectory = user.homeDirectory(); - this.shell = user.shell(); - } - - /** - * - */ - public int getGid() - { - int result; - - result = this.gid; - - // - return (result); - } - - /** - * - */ - public String getHomeDirectory() - { - String result; - - result = this.homeDirectory; - - // - return (result); - } - - /** - * - */ - public String getLogin() - { - String result; - - result = this.login; - - // - return (result); - } - - /** - * - */ - public String getPasswd() - { - String result; - - result = this.password; - - // - return (result); - } - - /** - * - */ - public String getPassword() - { - String result; - - result = this.password; - - // - return (result); - } - - /** - * - */ - public String getRealName() - { - String result; - - result = this.realName; - - // - return (result); - } - - /** - * - */ - public String getShell() - { - String result; - - result = this.shell; - - // - return (result); - } - - /** - * - */ - public int getUid() - { - int result; - - result = this.uid; - - // - return (result); - } - - /** - * - */ - public int gid() - { - int result; - - result = this.gid; - - // - return (result); - } - - /** - * - */ - public String homeDirectory() - { - String result; - - result = this.homeDirectory; - - // - return (result); - } - - /** - * - */ - public String login() - { - String result; - - result = this.login; - - // - return (result); - } - - /** - * - */ - public String passwd() - { - String result; - - result = this.password; - - // - return (result); - } - - /** - * - */ - public String realName() - { - String result; - - result = this.realName; - - // - return (result); - } - - /** - * - */ - public void setGid(final int gid) - { - this.gid = gid; - } - - /** - * - */ - public void setHomeDirectory(final String homeDirectory) - { - this.homeDirectory = homeDirectory; - } - - /** - * - */ - public void setLogin(final String login) - { - this.login = login; - } - - /** - * - */ - public void setPasswd(final String password) - { - this.password = password; - } - - /** - * - */ - public void setPassword(final String password) - { - this.password = password; - } - - /** - * - */ - public void setRealName(final String realName) - { - this.realName = realName; - } - - /** - * - */ - public void setShell(final String shell) - { - this.shell = shell; - } - - /** - * - */ - public void setUid(final int uid) - { - this.uid = uid; - } - - /** - * - */ - public String shell() - { - String result; - - result = this.shell; - - // - return (result); - } - - /** - * - */ - @Override - public String toString() - { - String result; - - result = "|" + this.login + "|" + this.password + "|" + this.uid + "|" + this.gid + "|" + this.realName + "|" + this.homeDirectory + "|" + this.shell + "|"; - - // - return (result); - } - - /** - * - */ - public int uid() - { - int result; - - result = this.uid; - - // - return (result); - } -} - -// //////////////////////////////////////////////////////////////////////// \ No newline at end of file diff --git a/src/fr/devinsy/util/unix/Users.java b/src/fr/devinsy/util/unix/Users.java deleted file mode 100644 index f33160c..0000000 --- a/src/fr/devinsy/util/unix/Users.java +++ /dev/null @@ -1,179 +0,0 @@ -/** - * Copyright (C) 2006-2010, 2013-2014 Christian Pierre MOMON - * - * This file is part of Devinsy-utils. - * - * Devinsy-utils is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * Devinsy-utils is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public License - * along with Devinsy-utils. If not, see - */ -package fr.devinsy.util.unix; - -import java.util.Iterator; -import java.util.Vector; - -/** - * - * @author Christian Pierre MOMON (christian.momon@devinsy.fr) - */ -public class Users extends Vector -{ - private static final long serialVersionUID = -7178304512851592399L; - - // private static final Logger logger = - // LoggerFactory.getLogger(Users.class); - - /** - * - */ - public Users() - { - super(); - } - - /* - * - */ - public boolean contains(final int uid) - { - boolean result; - - if (getByUid(uid) == null) - { - result = false; - } - else - { - result = true; - } - - // - return (result); - } - - /* - * - */ - public boolean contains(final String login) - { - boolean result; - - if (getByLogin(login) == null) - { - result = false; - } - else - { - result = true; - } - - // - return (result); - } - - /** - * - */ - public User getByLogin(final String login) - { - User result; - - if (login == null) - { - result = null; - } - else - { - result = null; - boolean ended = false; - Iterator iterator = this.iterator(); - while (!ended) - { - if (iterator.hasNext()) - { - User user = iterator.next(); - if (user.getLogin().equals(login)) - { - ended = true; - result = user; - } - } - else - { - ended = true; - result = null; - } - } - } - - // - return (result); - } - - /** - * - */ - public User getByUid(final int uid) - { - User result; - - result = null; - boolean ended = false; - Iterator iterator = this.iterator(); - while (!ended) - { - if (iterator.hasNext()) - { - User user = iterator.next(); - if (user.getUid() == uid) - { - ended = true; - result = user; - } - } - else - { - ended = true; - result = null; - } - } - - // - return (result); - } - - /** - * - */ - @Override - public String toString() - { - String result; - - StringBuffer out; - out = new StringBuffer(); - - Iterator iterator = this.iterator(); - - while (iterator.hasNext()) - { - out.append(iterator.next().toString() + "\n"); - } - - result = out.toString(); - - // - return (result); - } -} - -// //////////////////////////////////////////////////////////////////////// \ No newline at end of file diff --git a/src/fr/devinsy/util/unix/acl/Acl.java b/src/fr/devinsy/util/unix/acl/Acl.java deleted file mode 100644 index 1f2f37c..0000000 --- a/src/fr/devinsy/util/unix/acl/Acl.java +++ /dev/null @@ -1,216 +0,0 @@ -/** - * Copyright (C) 2010, 2013-2014 Christian Pierre MOMON - * - * This file is part of Devinsy-utils. - * - * Devinsy-utils is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * Devinsy-utils is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public License - * along with Devinsy-utils. If not, see - */ -package fr.devinsy.util.unix.acl; - -/** - * - * @author Christian Pierre MOMON (christian.momon@devinsy.fr) - */ -public class Acl -{ - // private static final Logger logger = LoggerFactory.getLogger(Acl.class); - - /* - # file: goo39 - # owner: goo39 - # group: goo39 - user::rwx - user:cpm:rwx #effective:rwx - user:goo39:rwx #effective:rwx - group::--- #effective:--- - group:goo40:rwx #effective:rwx - mask::rwx - other::--- - default:user::rwx - default:user:cpm:rwx #effective:rwx - default:group::--- #effective:--- - default:group:cpm:rwx #effective:rwx - default:group:goo40:rwx #effective:rwx - default:mask::rwx - default:other::--- - */ - - protected String filePathname; - protected String owner; - protected String group; - - protected AclEntries currentAcl; - protected AclEntries defaultAcl; - - /** - * - */ - public Acl(final String filePathname) - { - this.filePathname = filePathname; - this.owner = ""; - this.group = ""; - this.currentAcl = new AclEntries(); - this.defaultAcl = new AclEntries(); - } - - /** - * - */ - public boolean contains(final AclEntry.Type type, final String id) - { - boolean result; - - if ((this.currentAcl().contains(type, id)) || (this.defaultAcl().contains(type, id))) - { - result = true; - } - else - { - result = false; - } - - // - return (result); - } - - /** - * - */ - public boolean containsGroup(final String group) - { - boolean result; - - result = contains(AclEntry.Type.GROUP, group); - - // - return (result); - } - - /** - * - */ - public boolean containsId(final String id) - { - boolean result; - - if ((containsUser(id) || containsGroup(id))) - { - result = true; - } - else - { - result = false; - } - - // - return (result); - } - - /** - * - */ - public boolean containsUser(final String login) - { - boolean result; - - result = contains(AclEntry.Type.USER, login); - - // - return (result); - } - - /** - * - */ - public AclEntries currentAcl() - { - AclEntries result; - - result = this.currentAcl; - - // - return (result); - } - - /** - * - */ - public AclEntries defaultAcl() - { - AclEntries result; - - result = this.defaultAcl; - - // - return (result); - } - - /** - * - */ - public String filePathname() - { - String result; - - result = this.filePathname; - - // - return (result); - } - - /** - * - */ - public String group() - { - String result; - - result = this.group; - - // - return (result); - } - - /** - * - */ - public String owner() - { - String result; - - result = this.owner; - - // - return (result); - } - - /** - * - */ - public void setGroup(final String group) - { - this.group = group; - } - - /** - * - */ - public void setOwner(final String owner) - { - this.owner = owner; - } -} - -// //////////////////////////////////////////////////////////////////////// \ No newline at end of file diff --git a/src/fr/devinsy/util/unix/acl/AclEntries.java b/src/fr/devinsy/util/unix/acl/AclEntries.java deleted file mode 100644 index 580ab6f..0000000 --- a/src/fr/devinsy/util/unix/acl/AclEntries.java +++ /dev/null @@ -1,216 +0,0 @@ -/** - * Copyright (C) 2010, 2013-2014 Christian Pierre MOMON - * - * This file is part of Devinsy-utils. - * - * Devinsy-utils is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * Devinsy-utils is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public License - * along with Devinsy-utils. If not, see - */ -package fr.devinsy.util.unix.acl; - -import java.util.Iterator; -import java.util.Vector; - -/** - * - * @author Christian Pierre MOMON (christian.momon@devinsy.fr) - */ -public class AclEntries extends Vector -{ - private static final long serialVersionUID = 5802487312198869603L; - - // private static final Logger logger = - // LoggerFactory.getLogger(AclEntries.class); - - /** - * - */ - public AclEntries() - { - super(); - } - - /* - * - */ - public boolean contains(final AclEntry.Type type, final String id) - { - boolean result; - - if (this.get(type, id) == null) - { - result = false; - } - else - { - result = true; - } - - // - return (result); - } - - /** - * - */ - public boolean containsId(final String id) - { - boolean result; - - if ((this.get(AclEntry.Type.USER, id) == null) && (this.get(AclEntry.Type.GROUP, id) == null)) - { - result = false; - } - else - { - result = true; - } - - // - return (result); - } - - /** - * - */ - public AclEntry get(final AclEntry.Type type, final String id) - { - AclEntry result; - - result = null; - boolean ended = false; - Iterator iterator = this.iterator(); - while (!ended) - { - if (iterator.hasNext()) - { - AclEntry entry = iterator.next(); - if ((type == entry.type()) && (entry.id().equals(id))) - { - ended = true; - result = entry; - } - } - else - { - ended = true; - result = null; - } - } - - // - return (result); - } - - /** - * - */ - public String[] getGroupIds() - { - String[] result; - - Vector ids = new Vector(); - - for (AclEntry entry : this) - { - if ((entry.type == AclEntry.Type.GROUP) && (!ids.contains(entry.id()))) - { - ids.add(entry.id()); - } - } - - result = (String[]) ids.toArray(); - - // - return (result); - } - - /** - * - */ - public String[] getIds() - { - String[] result; - - Vector ids = new Vector(); - - for (AclEntry entry : this) - { - if (!ids.contains(entry.id())) - { - ids.add(entry.id()); - } - } - - result = (String[]) ids.toArray(); - - // - return (result); - } - - /** - * - */ - public String[] getUserIds() - { - String[] result; - - // - Vector ids = new Vector(); - - for (AclEntry entry : this) - { - if ((entry.type == AclEntry.Type.USER) && (!ids.contains(entry.id()))) - { - ids.add(entry.id()); - } - } - - // - result = new String[ids.size()]; - - for (int nId = 0; nId < ids.size(); nId++) - { - result[nId] = ids.get(nId); - } - - // - return (result); - } - - /** - * - */ - @Override - public String toString() - { - String result; - - StringBuffer out; - out = new StringBuffer(); - - Iterator iterator = this.iterator(); - - while (iterator.hasNext()) - { - out.append(iterator.next().toString() + "\n"); - } - - result = out.toString(); - - // - return (result); - } -} - -// //////////////////////////////////////////////////////////////////////// \ No newline at end of file diff --git a/src/fr/devinsy/util/unix/acl/AclEntry.java b/src/fr/devinsy/util/unix/acl/AclEntry.java deleted file mode 100644 index 09e1eb3..0000000 --- a/src/fr/devinsy/util/unix/acl/AclEntry.java +++ /dev/null @@ -1,113 +0,0 @@ -/** - * Copyright (C) 2010, 2013-2014 Christian Pierre MOMON - * - * This file is part of Devinsy-utils. - * - * Devinsy-utils is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * Devinsy-utils is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public License - * along with Devinsy-utils. If not, see - */ -package fr.devinsy.util.unix.acl; - -/** - * - * @author Christian Pierre MOMON (christian.momon@devinsy.fr) - */ -public class AclEntry -{ - // private static final Logger logger = - // LoggerFactory.getLogger(AclEntry.class); - - /* - user::rwx - user:cpm:rwx #effective:rwx - user:goo39:rwx #effective:rwx - group::--- #effective:--- - group:goo40:rwx #effective:rwx - mask::rwx - other::--- - */ - - public enum Type - { - NONE, USER, GROUP, MASK, OTHER - }; - - protected Type type; - protected String id; - protected String permission; - - /** - * - */ - public AclEntry(final Type type, final String id, final String permission) - { - this.type = type; - this.id = id; - this.permission = permission; - } - - /** - * - */ - public String id() - { - String result; - - result = this.id; - - // - return (result); - } - - /** - * - */ - public String permission() - { - String result; - - result = this.type.toString() + ":" + this.id + ":" + this.permission; - - // - return (result); - } - - /** - * - */ - @Override - public String toString() - { - String result; - - result = this.permission; - - // - return (result); - } - - /** - * - */ - public Type type() - { - Type result; - - result = this.type; - - // - return (result); - } -} - -// //////////////////////////////////////////////////////////////////////// \ No newline at end of file diff --git a/src/fr/devinsy/util/unix/acl/AclManager.java b/src/fr/devinsy/util/unix/acl/AclManager.java deleted file mode 100644 index 7484141..0000000 --- a/src/fr/devinsy/util/unix/acl/AclManager.java +++ /dev/null @@ -1,424 +0,0 @@ -/** - * Copyright (C) 2010, 2013-2015 Christian Pierre MOMON - * - * This file is part of Devinsy-utils. - * - * Devinsy-utils is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * Devinsy-utils is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public License - * along with Devinsy-utils. If not, see - */ -package fr.devinsy.util.unix.acl; - -import java.io.File; -import java.util.regex.Matcher; -import java.util.regex.Pattern; - -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; - -import fr.devinsy.util.cmdexec.CmdExec; -import fr.devinsy.util.strings.StringListUtils; -import fr.devinsy.util.unix.Unix; - -/** - * - * @author Christian Pierre MOMON (christian.momon@devinsy.fr) - */ -public class AclManager -{ - private static final Logger logger = LoggerFactory.getLogger(AclManager.class); - public static final String SUDO = "/usr/bin/sudo"; - - final static public Pattern USER_PATTERN = Pattern.compile("^user:(.*):(.*)$"); - final static public Pattern GROUP_PATTERN = Pattern.compile("^group:(.*):(.*)$"); - final static public Pattern MASK_PATTERN = Pattern.compile("^mask:(.*):(.*)$"); - final static public Pattern OTHER_PATTERN = Pattern.compile("^other:(.*):(.*)$"); - final static public Pattern DEFAULT_USER_PATTERN = Pattern.compile("^default:user:(.*):(.*)$"); - final static public Pattern DEFAULT_GROUP_PATTERN = Pattern.compile("^default:group:(.*):(.*)$"); - final static public Pattern DEFAULT_MASK_PATTERN = Pattern.compile("^default:mask:(.*):(.*)$"); - final static public Pattern DEFAULT_OTHER_PATTERN = Pattern.compile("^default:other:(.*):(.*)$"); - - /** - * - */ - public static void clearGroup(final String group, final String filePathName) throws Exception - { - if ((group == null) || (group.length() == 0) || (filePathName == null) || (filePathName.length() == 0)) - { - throw new Exception("Bad parameters [" + group + "][" + filePathName + "]."); - } - else - { - Unix.setfacl("-R", "-L", "-x", "group:" + group, filePathName); - Unix.setfacl("-R", "-L", "-d", "-x", "group:" + group, filePathName); - } - } - - /** - * - */ - public static void clearId(final String id, final String filePathName) throws Exception - { - clearUser(id, filePathName); - clearGroup(id, filePathName); - } - - /** - * - */ - public static void clearUser(final String login, final String filePathName) throws Exception - { - if ((login == null) || (login.length() == 0) || (filePathName == null) || (filePathName.length() == 0)) - { - throw new Exception("Bad parameters [" + login + "][" + filePathName + "]."); - } - else - { - Unix.setfacl("-R", "-L", "-x", "user:" + login, filePathName); - Unix.setfacl("-R", "-L", "-d", "-x", "user:" + login, filePathName); - } - } - - /** - * - */ - public static Acl getAcl(final String filePathName) throws Exception - { - Acl result; - - result = new Acl(filePathName); - - String[] entries = getAclEntryLines(filePathName); - - // Login pattern: "^[a-z_][a-z0-9_-]*$". - logger.debug("Line=[" + entries[1] + "]"); - Matcher matcher = Pattern.compile("^#\\sowner:\\s([a-z_][a-z0-9_-]*)$").matcher(entries[1]); - if (matcher.matches()) - { - logger.debug("group=[" + matcher.group(1) + "]"); - result.setOwner(matcher.group(1)); - } - - // Group pattern: "^[a-z_][a-z0-9_-]*$". - logger.debug("Line=[" + entries[2] + "]"); - matcher = Pattern.compile("^#\\sgroup:\\s([a-z_][a-z0-9_-]*)$").matcher(entries[2]); - if (matcher.matches()) - { - logger.debug("group=[" + matcher.group(1) + "]"); - result.setOwner(matcher.group(1)); - } - - for (int nEntry = 3; nEntry < entries.length; nEntry++) - { - String entryLine = entries[nEntry]; - logger.debug("Line=[" + entryLine + "]"); - - // - Matcher userMatcher = USER_PATTERN.matcher(entryLine); - Matcher groupMatcher = GROUP_PATTERN.matcher(entryLine); - Matcher maskMatcher = MASK_PATTERN.matcher(entryLine); - Matcher otherMatcher = OTHER_PATTERN.matcher(entryLine); - Matcher defaultUserMatcher = DEFAULT_USER_PATTERN.matcher(entryLine); - Matcher defaultGroupMatcher = DEFAULT_GROUP_PATTERN.matcher(entryLine); - Matcher defaultMaskMatcher = DEFAULT_MASK_PATTERN.matcher(entryLine); - Matcher defaultOtherMatcher = DEFAULT_OTHER_PATTERN.matcher(entryLine); - - AclEntry entry; - if (userMatcher.matches()) - { - entry = new AclEntry(AclEntry.Type.USER, userMatcher.group(1), userMatcher.group(2)); - result.currentAcl().add(entry); - } - else if (groupMatcher.matches()) - { - entry = new AclEntry(AclEntry.Type.GROUP, groupMatcher.group(1), groupMatcher.group(2)); - result.currentAcl().add(entry); - } - else if (maskMatcher.matches()) - { - entry = new AclEntry(AclEntry.Type.MASK, maskMatcher.group(1), maskMatcher.group(2)); - result.currentAcl().add(entry); - } - else if (otherMatcher.matches()) - { - entry = new AclEntry(AclEntry.Type.OTHER, otherMatcher.group(1), otherMatcher.group(2)); - result.currentAcl().add(entry); - } - else if (defaultUserMatcher.matches()) - { - entry = new AclEntry(AclEntry.Type.USER, defaultUserMatcher.group(1), defaultUserMatcher.group(2)); - result.defaultAcl().add(entry); - } - else if (defaultGroupMatcher.matches()) - { - entry = new AclEntry(AclEntry.Type.GROUP, defaultGroupMatcher.group(1), defaultGroupMatcher.group(2)); - result.defaultAcl().add(entry); - } - else if (defaultMaskMatcher.matches()) - { - entry = new AclEntry(AclEntry.Type.MASK, defaultMaskMatcher.group(1), defaultMaskMatcher.group(2)); - result.defaultAcl().add(entry); - } - else if (defaultOtherMatcher.matches()) - { - entry = new AclEntry(AclEntry.Type.OTHER, defaultOtherMatcher.group(1), defaultOtherMatcher.group(2)); - result.defaultAcl().add(entry); - } - else - { - throw new Exception("Unknow ACL entry line pattern for [" + entryLine + "]."); - } - - logger.debug("Acl entry decoded: [" + entry.toString() + "]"); - } - - // - return (result); - } - - /** - * - */ - public static String getAclData(final String filePathName) throws Exception - { - String result; - - try - { - logger.info("Getting Acl data for [" + filePathName + "]."); - result = CmdExec.run(SUDO, "/usr/bin/getfacl", "--no-effective", filePathName); - logger.info("Acl data got for [" + filePathName + "]."); - } - catch (Exception exception) - { - throw new Exception("Error getting ACL for [" + filePathName + "].", exception); - } - - // - return (result); - } - - /** - * - */ - public static String[] getAclEntryLines(final String filePathName) - { - String[] result; - - try - { - result = getAclData(filePathName).split("\n"); - } - catch (Exception exception) - { - result = new String[0]; - } - - // - return (result); - } - - /** - * - */ - public static boolean isUsed(final AclEntry.Type type, final String id, final String filePathName) throws Exception - { - boolean result; - - result = isUsed(type, id, filePathName, 0); - - // - return (result); - } - - /** - * - */ - public static boolean isUsed(final AclEntry.Type type, final String id, final String filePathName, final int depth) throws Exception - { - boolean result; - - if ((type == null) || (id == null) || (id.length() == 0) || (filePathName == null) || (filePathName.length() == 0) || (depth < 0)) - { - throw new Exception("Bad parameter: [" + type + "][" + id + "][" + filePathName + "][" + depth + "]."); - } - else - { - File file = new File(filePathName); - if (!file.exists()) - { - throw new Exception("File does not exist [" + filePathName + "]."); - } - else - { - Acl acl = getAcl(filePathName); - if (acl.contains(type, id)) - { - result = true; - } - else if ((file.isDirectory()) && (depth > 0)) - { - result = isUsed(type, id, filePathName, file.list(), depth - 1); - } - else - { - result = false; - } - } - } - - // - return (result); - } - - /** - * - */ - public static boolean isUsed(final AclEntry.Type type, final String id, final String filePath, final String[] filePathNames, final int depth) throws Exception - { - boolean result; - - result = false; - boolean ended = false; - int nLine = 0; - while (!ended) - { - if (nLine < filePathNames.length) - { - String filePathName = filePathNames[nLine]; - if (isUsed(type, id, filePath + "/" + filePathName, depth)) - { - ended = true; - result = true; - } - else - { - nLine += 1; - } - } - else - { - ended = true; - result = false; - } - } - - // - return (result); - } - - /** - * - */ - public static boolean isUsed(final String id, final String filePathName) throws Exception - { - boolean result; - - result = isUsed(id, filePathName, 0); - - // - return (result); - } - - /** - * - */ - public static boolean isUsed(final String id, final String filePathName, final int depth) throws Exception - { - boolean result; - - if ((id == null) || (id.length() == 0) || (filePathName == null) || (filePathName.length() == 0) || (depth < 0)) - { - throw new Exception("Bad parameter: [" + id + "][" + filePathName + "][" + depth + "]."); - } - else - { - File file = new File(filePathName); - if (!file.exists()) - { - throw new Exception("File does not exist [" + filePathName + "]."); - } - else - { - Acl acl = getAcl(filePathName); - if (acl.containsId(id)) - { - result = true; - } - else if ((file.isDirectory()) && (depth > 0)) - { - result = isUsed(id, file.list(), depth - 1); - } - else - { - result = false; - } - } - } - - // - return (result); - } - - /** - * - */ - public static boolean isUsed(final String id, final String[] filePathNames, final int depth) throws Exception - { - boolean result; - - result = false; - boolean ended = false; - int nLine = 0; - while (!ended) - { - if (nLine < filePathNames.length) - { - String filePathName = filePathNames[nLine]; - if (isUsed(id, filePathName, depth)) - { - ended = true; - result = true; - } - else - { - nLine += 1; - } - } - else - { - ended = true; - result = false; - } - } - - // - return (result); - } - - /** - * - */ - public static void setfacl(final String... args) throws Exception - { - try - { - CmdExec.run(SUDO, "setfacl", args, 1, 5); - } - catch (Exception exception) - { - throw new Exception("Error running setfacl command for " + StringListUtils.toStringWithBrackets(args) + ":" + exception.getMessage() + "."); - } - } -} - -// //////////////////////////////////////////////////////////////////////// \ No newline at end of file diff --git a/src/fr/devinsy/util/xml/XMLAttributes.java b/src/fr/devinsy/util/xml/XMLAttributes.java deleted file mode 100644 index 640185f..0000000 --- a/src/fr/devinsy/util/xml/XMLAttributes.java +++ /dev/null @@ -1,160 +0,0 @@ -/** - * Copyright (C) 2013-2014 Christian Pierre MOMON - * - * This file is part of Devinsy-utils. - * - * Devinsy-utils is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * Devinsy-utils is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public License - * along with Devinsy-utils. If not, see - */ -package fr.devinsy.util.xml; - -import java.util.ArrayList; -import java.util.HashMap; -import java.util.Iterator; -import java.util.List; -import java.util.Set; - -import javax.xml.stream.events.Attribute; - -/** - * - * @author Christian Pierre MOMON (christian.momon@devinsy.fr) - */ -public class XMLAttributes extends HashMap implements Iterable -{ - - private static final long serialVersionUID = 8456469741805779474L; - - /** - * - */ - public XMLAttributes() - { - super(); - } - - /** - * - */ - public XMLAttributes(final int capacity) - { - super(capacity); - } - - /** - * - */ - public XMLAttributes(final Iterator source) - { - super(); - if (source != null) - { - while (source.hasNext()) - { - Attribute attribute = source.next(); - - add(attribute); - } - } - } - - /** - * - */ - public XMLAttributes(final XMLAttributes source) - { - super(); - addAll(source); - } - - /** - * - * @param attribute - */ - public void add(final Attribute attribute) - { - if (attribute != null) - { - put(attribute.getName().getLocalPart(), attribute); - } - } - - /** - * - * @param source - */ - public void addAll(final XMLAttributes source) - { - for (Attribute attribute : source) - { - this.add(attribute); - } - } - - /** - * - * @param label - * @return - */ - public Attribute getByLabel(final String label) - { - Attribute result; - - result = get(label); - - // - return result; - } - - /** - * - */ - @Override - public Iterator iterator() - { - Iterator result; - - result = this.values().iterator(); - - // - return result; - } - - /** - * - * @return - */ - public Set labels() - { - Set result; - - result = this.keySet(); - - // - return result; - } - - /** - * - * @return - */ - public List toList() - { - List result; - - result = new ArrayList(values()); - - // - return result; - } -} diff --git a/src/fr/devinsy/util/xml/XMLBadFormatException.java b/src/fr/devinsy/util/xml/XMLBadFormatException.java deleted file mode 100644 index 268c1f0..0000000 --- a/src/fr/devinsy/util/xml/XMLBadFormatException.java +++ /dev/null @@ -1,81 +0,0 @@ -/** - * Copyright (C) 2013-2014 Christian Pierre MOMON - * - * This file is part of Devinsy-utils. - * - * Devinsy-utils is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * Devinsy-utils is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public License - * along with Devinsy-utils. If not, see - */ -package fr.devinsy.util.xml; - -import org.slf4j.helpers.MessageFormatter; - -/** - * - * @author Christian Pierre MOMON (christian.momon@devinsy.fr) - */ -public class XMLBadFormatException extends Exception -{ - - private static final long serialVersionUID = 768256303984176512L; - - /** - * - * @param code - * @param message - */ - public XMLBadFormatException(final String message) - { - super(message); - } - - /** - * - * @param code - * @param message - * @param exception - */ - public XMLBadFormatException(final String message, final Exception exception) - { - super(message, exception); - } - - /** - * - * @param format - * @param arguments - */ - public XMLBadFormatException(final String format, final Object... arguments) - { - this(MessageFormatter.arrayFormat(format, arguments).getMessage()); - } - - /** - * - * @param message - * @param cause - */ - public XMLBadFormatException(final String message, final Throwable cause) - { - super(message, cause); - } - - /** - * - * @param cause - */ - public XMLBadFormatException(final Throwable cause) - { - super(cause); - } -} diff --git a/src/fr/devinsy/util/xml/XMLReader.java b/src/fr/devinsy/util/xml/XMLReader.java deleted file mode 100644 index 57dd535..0000000 --- a/src/fr/devinsy/util/xml/XMLReader.java +++ /dev/null @@ -1,617 +0,0 @@ -/** - * Copyright (C) 2013-2014 Christian Pierre MOMON - * Copyright (C) 2017 Christian Pierre MOMON - * - * This file is part of Devinsy-utils. - * - * Devinsy-utils is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * Devinsy-utils is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public License - * along with Devinsy-utils. If not, see - */ -package fr.devinsy.util.xml; - -import java.io.File; -import java.io.FileInputStream; -import java.io.FileNotFoundException; -import java.io.FileReader; -import java.io.InputStream; -import java.io.Reader; - -import javax.xml.namespace.QName; -import javax.xml.stream.XMLEventReader; -import javax.xml.stream.XMLInputFactory; -import javax.xml.stream.XMLStreamException; -import javax.xml.stream.events.XMLEvent; - -import org.apache.commons.lang3.StringUtils; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; - -import fr.devinsy.util.strings.StringList; -import fr.devinsy.util.xml.XMLTag.TagType; - -/** - * - * @author Christian Pierre MOMON (christian.momon@devinsy.fr) - */ -public class XMLReader -{ - private static final Logger logger = LoggerFactory.getLogger(XMLReader.class); - - protected XMLEventReader in; - private XMLEvent nextEvent; - - /** - * - */ - protected XMLReader() - { - this.in = null; - this.nextEvent = null; - } - - /** - * - * @param file - * @throws XMLStreamException - * @throws FileNotFoundException - */ - public XMLReader(final File file) throws FileNotFoundException, XMLStreamException - { - this.nextEvent = null; - XMLInputFactory factory = XMLInputFactory.newInstance(); - this.in = factory.createXMLEventReader(new FileInputStream(file), "UTF-8"); - } - - /** - * - * @param target - * @throws XMLStreamException - */ - public XMLReader(final InputStream source) throws XMLStreamException - { - this.nextEvent = null; - XMLInputFactory factory = XMLInputFactory.newInstance(); - this.in = factory.createXMLEventReader(source); - } - - /** - * - * @param target - * @throws XMLStreamException - */ - public XMLReader(final Reader source) throws XMLStreamException - { - this.nextEvent = null; - XMLInputFactory factory = XMLInputFactory.newInstance(); - this.in = factory.createXMLEventReader(source); - } - - /** - * @throws XMLStreamException - */ - public void close() throws XMLStreamException - { - if (this.in != null) - { - this.in.close(); - } - } - - /** - * This methods does a premonition act. Useful to detect end of a list. - * - * @param label - * @return - * @throws XMLStreamException - */ - public boolean hasNextStartTag(final String label) throws XMLStreamException - { - boolean result; - - // Load next event. - if (this.nextEvent == null) - { - if (this.in.hasNext()) - { - this.nextEvent = this.in.nextEvent(); - } - } - - // Analyze next event. - if (this.nextEvent == null) - { - result = false; - } - else if ((this.nextEvent.isStartElement()) && (StringUtils.equals(this.nextEvent.asStartElement().getName().getLocalPart(), label))) - { - result = true; - } - else - { - result = false; - } - - // - return result; - } - - /** - * - * @param label - * @return - * @throws XMLBadFormatException - * @throws XMLStreamException - */ - public XMLTag readContentTag(final String label) throws XMLBadFormatException, XMLStreamException - { - XMLTag result; - - // - result = readTag(); - - // - if (result == null) - { - throw new XMLBadFormatException("XML file ends prematurely, content tag [" + label + "] is expected."); - } - else if (result.getType() != TagType.CONTENT) - { - throw new XMLBadFormatException("Content tag [" + label + "] is missing."); - } - else if (!StringUtils.equals(label, result.getLabel())) - { - throw new XMLBadFormatException("Tag with label [" + label + "] is missing."); - } - - // - return result; - } - - /** - * - * @param label - * @return - * @throws XMLStreamException - * @throws XMLBadFormatException - */ - public XMLTag readEndTag(final String label) throws XMLStreamException, XMLBadFormatException - { - XMLTag result; - - // - result = readTag(); - - // - if (result == null) - { - throw new XMLBadFormatException("XML file ends prematurely, end tag [" + label + "] is expected."); - } - else if (result.getType() != TagType.END) - { - throw new XMLBadFormatException("End tag [" + label + "] is missing."); - } - else if (!StringUtils.equals(result.getLabel(), label)) - { - throw new XMLBadFormatException("Tag with label [" + label + "] is missing."); - } - - // - return result; - } - - /** - * - * @param label - * @return - * @throws XMLStreamException - * @throws XMLBadFormatException - * @throws Exception - */ - public XMLTag readListTag(final String label) throws XMLStreamException, XMLBadFormatException - { - XMLTag result; - - // - result = readTag(); - - // - if (result == null) - { - throw new XMLBadFormatException("XML file ends prematurely, tag [" + label + "] is expected."); - } - else if ((result.getType() != TagType.START) && (result.getType() != TagType.EMPTY)) - { - throw new XMLBadFormatException("List tag [" + label + "] is missing."); - } - else if (!StringUtils.equals(label, result.getLabel())) - { - throw new XMLBadFormatException("Tag with label [" + label + "] is missing."); - } - - // - return result; - } - - /** - * - * @param label - * @return - * @throws XMLStreamException - * @throws XMLBadFormatException - * @throws Exception - */ - public XMLTag readNullableContentTag(final String label) throws XMLStreamException, XMLBadFormatException - { - XMLTag result; - - // - result = readTag(); - - // - if (result == null) - { - throw new XMLBadFormatException("XML file ends prematurely, tag [" + label + "] is expected."); - } - else if (!StringUtils.equals(label, result.getLabel())) - { - throw new XMLBadFormatException("Nullable content tag [" + label + "] is missing."); - } - else if ((result.getType() != TagType.EMPTY) && (result.getType() != TagType.CONTENT)) - { - throw new XMLBadFormatException("Nullable content tag [" + label + "] is missing."); - } - - // - return result; - } - - /** - * - * @param label - * @return - * @throws XMLStreamException - * @throws XMLBadFormatException - * @throws Exception - */ - public XMLTag readNullableStartTag(final String label) throws XMLStreamException, XMLBadFormatException - { - XMLTag result; - - // - result = readTag(); - - // - if (result == null) - { - throw new XMLBadFormatException("XML file ends prematurely, start tag [" + label + "] is expected."); - } - else if ((result.getType() != TagType.START) && (result.getType() != TagType.EMPTY)) - { - throw new XMLBadFormatException("Start tag [" + label + "] is missing."); - } - else if (!StringUtils.equals(result.getLabel(), label)) - { - throw new XMLBadFormatException("Tag with label [" + label + "] is missing."); - } - - // - return result; - } - - /** - * - * @param label - * @return - * @throws XMLStreamException - * @throws XMLBadFormatException - * @throws Exception - */ - public XMLTag readStartTag(final String label) throws XMLStreamException, XMLBadFormatException - { - XMLTag result; - - // - result = readTag(); - - // - if (result == null) - { - throw new XMLBadFormatException("XML file ends prematurely, start tag [" + label + "] is expected."); - } - else if (result.getType() != TagType.START) - { - throw new XMLBadFormatException("Start tag [" + label + "] is missing."); - } - else if (!StringUtils.equals(result.getLabel(), label)) - { - throw new XMLBadFormatException("Tag with label [" + label + "] is missing."); - } - - // - return result; - } - - /** - * Transducer graph : - *
    - *
  • START_DOCUMENT => HEADER TAG - *
  • START_ELEMENT(X) + START_ELEMENT(Y) => => START TAG - *
  • START_ELEMENT(X) + CHARACTERS(C) + START_ELEMENT(Y) => SPACES=> - * START TAG - *
  • START_ELEMENT(X) + CHARACTERS(C) + END_ELEMENT(X) => C => - * CONTENT TAG - *
  • START_ELEMENT(X) + END_ELEMENT(X) => => => EMPTY - *
  • END_ELEMENT(X) => => END TAG - *
  • END_DOCUMENT => FOOTER TAG - *
- * - * @throws XMLStreamException - * @throws XMLBadFormatException - * - */ - public XMLTag readTag() throws XMLStreamException, XMLBadFormatException - { - XMLTag result; - - int level = 1; - boolean ended = false; - result = null; - XMLAttributes attributesBuffer = null; - QName nameBuffer = null; - StringList contentBuffer = null; - while (!ended) - { - // - XMLEvent event; - if (this.nextEvent != null) - { - event = this.nextEvent; - this.nextEvent = null; - } - else if (this.in.hasNext()) - { - event = this.in.nextEvent(); - } - else - { - event = null; - } - - if (event == null) - { - ended = true; - result = null; - } - else - { - logger.debug("eventType=" + XMLTools.toString(event)); - switch (level) - { - case 1: - switch (event.getEventType()) - { - case XMLEvent.START_DOCUMENT: - // START_DOCUMENT => START DOCUMENT TAG - ended = true; - result = new XMLTag(null, TagType.HEADER, null); - break; - case XMLEvent.START_ELEMENT: - // START_ELEMENT(X) => ... - nameBuffer = event.asStartElement().getName(); - attributesBuffer = new XMLAttributes(event.asStartElement().getAttributes()); - level += 1; - break; - case XMLEvent.END_ELEMENT: - // END_ELEMENT(X) => => END TAG - ended = true; - result = new XMLTag(event.asEndElement().getName(), TagType.END, null); - break; - case XMLEvent.END_DOCUMENT: - // END_DOCUMENT => END DOCUMENT TAG - ended = true; - result = new XMLTag(null, TagType.FOOTER, null); - break; - } - break; - case 2: - switch (event.getEventType()) - { - case XMLEvent.START_ELEMENT: - // START_ELEMENT(X) + START_ELEMENT(Y) => - // => START TAG - ended = true; - result = new XMLTag(nameBuffer, TagType.START, attributesBuffer); - this.nextEvent = event; - break; - case XMLEvent.CHARACTERS: - // START_ELEMENT(X) + CHARACTERS(C) => ... - contentBuffer = new StringList(50); - contentBuffer.append(event.asCharacters().getData()); - level += 1; - break; - case XMLEvent.END_ELEMENT: - // START_ELEMENT(X) + END_ELEMENT(X) => - // => => EMPTY - ended = true; - result = new XMLTag(nameBuffer, TagType.EMPTY, attributesBuffer); - break; - default: - throw new XMLBadFormatException("Unexpected XMLEvent [" + event.getEventType() + "]."); - } - break; - case 3: - switch (event.getEventType()) - { - case XMLEvent.START_ELEMENT: - // START_ELEMENT(X) + CHARACTERS(C) + - // START_ELEMENT(Y) => - // SPACES => START TAG - ended = true; - result = new XMLTag(nameBuffer, TagType.START, attributesBuffer); - this.nextEvent = event; - break; - case XMLEvent.CHARACTERS: - // START_ELEMENT(X) + CHARACTERS(C1) + - // CHARACTERS(C2)=> ... - contentBuffer.append(event.asCharacters().getData()); - break; - case XMLEvent.END_ELEMENT: - // START_ELEMENT(X) + CHARACTERS(C) + - // END_ELEMENT(X) => C - // => CONTENT TAG - ended = true; - result = new XMLTag(nameBuffer, TagType.CONTENT, attributesBuffer); - result.setContent(contentBuffer.toString()); - break; - default: - throw new XMLBadFormatException("Unexpected XMLEvent [" + event.getEventType() + "]."); - } - break; - default: - throw new XMLBadFormatException("Unexpected level [" + level + "]."); - } - } - } - - logger.debug("=> " + XMLTools.toString(result)); - - // - return result; - } - - /** - * - * @param label - * @return - * @throws XMLStreamException - * @throws XMLBadFormatException - */ - public XMLTag readXMLFooter() throws XMLStreamException, XMLBadFormatException - { - XMLTag result; - - // - result = readTag(); - - // - if (result == null) - { - throw new XMLBadFormatException("XML file ends prematurely, end document event is expected."); - } - else if (result.getType() != TagType.FOOTER) - { - throw new XMLBadFormatException("End document tag is missing."); - } - - // - return result; - } - - /** - * - * @return - * @throws XMLException - * @throws XMLStreamException - * @throws XMLBadFormatException - */ - public XMLTag readXMLHeader() throws XMLStreamException, XMLBadFormatException - { - XMLTag result; - - // - result = readTag(); - - // - if (result == null) - { - throw new XMLBadFormatException("XML file ends prematurely, start document event is expected."); - } - else if (result.getType() != TagType.HEADER) - { - throw new XMLBadFormatException("XML header is missing."); - } - - // - return result; - } - - /** - * - * @param args - * @throws Exception - */ - public static void main(final String args[]) throws Exception - { - - XMLInputFactory factory = XMLInputFactory.newInstance(); - XMLEventReader in = factory.createXMLEventReader(new FileReader("/home/cpm/C/Puck/Dev/Puck/test/TT/t3.puc")); - - XMLEvent event; - while (in.hasNext()) - { - event = in.nextEvent(); - - switch (event.getEventType()) - { - case XMLEvent.ATTRIBUTE: - System.out.println("ATTRIBUTE "); - break; - case XMLEvent.CDATA: - System.out.println("CDATA"); - break; - case XMLEvent.CHARACTERS: - System.out.println("CHARACTERS [" + event.asCharacters().getData() + "]"); - break; - case XMLEvent.COMMENT: - System.out.println("COMMENT"); - break; - case XMLEvent.DTD: - System.out.println("DTD"); - break; - case XMLEvent.END_DOCUMENT: - System.out.println("END_DOCUMENT"); - break; - case XMLEvent.END_ELEMENT: - System.out.println("END_ELEMENT " + event.asEndElement().getName()); - break; - case XMLEvent.ENTITY_DECLARATION: - System.out.println("ENTITY_DECLARATION"); - break; - case XMLEvent.ENTITY_REFERENCE: - System.out.println("ENTITY_REFERENCE"); - break; - case XMLEvent.NAMESPACE: - System.out.println("NAMESPACE"); - break; - case XMLEvent.NOTATION_DECLARATION: - System.out.println("NOTATION_DECLARATION"); - break; - case XMLEvent.PROCESSING_INSTRUCTION: - System.out.println("PROCESSING_INSTRUCTION"); - break; - case XMLEvent.SPACE: - System.out.println("SPACE"); - break; - case XMLEvent.START_DOCUMENT: - System.out.println("START_DOCUMENT"); - break; - case XMLEvent.START_ELEMENT: - System.out.println("START_ELEMENT [name=" + event.asStartElement().getName() + "][namespaceURI=" + event.asStartElement().getName().getNamespaceURI() + "][prefix=" - + event.asStartElement().getName().getPrefix() + "][localPart=" + event.asStartElement().getName().getLocalPart() + "]"); - break; - default: - System.out.println("DEFAULT"); - } - } - } -} diff --git a/src/fr/devinsy/util/xml/XMLTag.java b/src/fr/devinsy/util/xml/XMLTag.java deleted file mode 100644 index 806f754..0000000 --- a/src/fr/devinsy/util/xml/XMLTag.java +++ /dev/null @@ -1,148 +0,0 @@ -/** - * Copyright (C) 2013-2014 Christian Pierre MOMON - * - * This file is part of Devinsy-utils. - * - * Devinsy-utils is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * Devinsy-utils is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public License - * along with Devinsy-utils. If not, see - */ -package fr.devinsy.util.xml; - -import javax.xml.namespace.QName; - -/** - * - * @author Christian Pierre MOMON (christian.momon@devinsy.fr) - */ -public class XMLTag -{ - - public enum TagType - { - HEADER, START, END, EMPTY, CONTENT, FOOTER - } - - private QName name; - private TagType type; - private XMLAttributes attributes; - private String content; - - /** - * - */ - public XMLTag(final QName name, final TagType type, final XMLAttributes attributes) - { - this.name = name; - this.type = type; - this.attributes = attributes; - this.content = null; - } - - public XMLAttributes attributes() - { - return this.attributes; - } - - public String getContent() - { - return this.content; - } - - /** - * - * @return - */ - public String getLabel() - { - String result; - - if (this.name == null) - { - result = ""; - } - else - { - result = this.name.getLocalPart(); - } - - // - return result; - } - - public QName getName() - { - return this.name; - } - - /** - * - * @return - */ - public String getNamespaceURI() - { - String result; - - if (this.name == null) - { - result = ""; - } - else - { - result = this.name.getNamespaceURI(); - } - - // - return result; - } - - /** - * - * @return - */ - public String getPrefix() - { - String result; - - if (this.name == null) - { - result = ""; - } - else - { - result = this.name.getPrefix(); - } - - // - return result; - } - - public TagType getType() - { - return this.type; - } - - public void setContent(final String content) - { - this.content = content; - } - - public void setName(final QName name) - { - this.name = name; - } - - public void setType(final TagType type) - { - this.type = type; - } -} diff --git a/src/fr/devinsy/util/xml/XMLTools.java b/src/fr/devinsy/util/xml/XMLTools.java deleted file mode 100644 index a7de117..0000000 --- a/src/fr/devinsy/util/xml/XMLTools.java +++ /dev/null @@ -1,389 +0,0 @@ -/** - * Copyright (C) 2013-2014 Christian Pierre MOMON - * - * This file is part of Devinsy-utils. - * - * Devinsy-utils is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * Devinsy-utils is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public License - * along with Devinsy-utils. If not, see - */ -package fr.devinsy.util.xml; - -import java.io.BufferedReader; -import java.io.File; -import java.io.FileInputStream; -import java.io.IOException; -import java.io.InputStream; -import java.util.regex.Matcher; -import java.util.regex.Pattern; -import java.util.zip.ZipInputStream; - -import javax.xml.stream.events.XMLEvent; -import javax.xml.transform.sax.SAXSource; -import javax.xml.transform.stream.StreamSource; -import javax.xml.validation.Schema; -import javax.xml.validation.SchemaFactory; -import javax.xml.validation.Validator; - -import org.apache.commons.lang3.StringEscapeUtils; -import org.apache.commons.lang3.StringUtils; -import org.xml.sax.InputSource; -import org.xml.sax.SAXException; - -/** - * - * @author Christian Pierre MOMON (christian.momon@devinsy.fr) - */ -public class XMLTools -{ - /** - * - * @param source - * @return - */ - public static String escapeXmlBlank(final String source) - { - String result; - - if (StringUtils.isBlank(source)) - { - result = ""; - } - else - { - result = StringEscapeUtils.escapeXml(source); - } - - // - return result; - } - - /** - * - * - * @param source - * @throws SAXException - * @throws IOException - * @throws PuckException - */ - public static boolean isValid(final File xmlFile, final File xsdFile) throws SAXException, IOException - { - boolean result; - - // - InputStream xmlSource; - if (isZipFile(xmlFile)) - { - ZipInputStream zin = new ZipInputStream(new FileInputStream(xmlFile)); - zin.getNextEntry(); - xmlSource = zin; - } - else - { - xmlSource = new FileInputStream(xmlFile); - } - - // - result = isValid(xmlSource, new FileInputStream(xsdFile)); - - // - return result; - } - - /** - * - * - * @param source - * @throws SAXException - * @throws IOException - * @throws PuckException - */ - public static boolean isValid(final File xmlFile, final InputStream xsdSource) throws SAXException, IOException - { - boolean result; - - // - InputStream xmlSource; - if (isZipFile(xmlFile)) - { - ZipInputStream zin = new ZipInputStream(new FileInputStream(xmlFile)); - zin.getNextEntry(); - xmlSource = zin; - } - else - { - xmlSource = new FileInputStream(xmlFile); - } - - // - result = isValid(xmlSource, xsdSource); - - // - return result; - } - - /** - * - * - * @param source - * @throws SAXException - * @throws IOException - * @throws PuckException - */ - public static boolean isValid(final InputStream xmlSource, final InputStream xsdSource) throws SAXException, IOException - { - boolean result; - - if (xmlSource == null) - { - result = false; - } - else - { - try - { - // - SchemaFactory factory = SchemaFactory.newInstance("http://www.w3.org/2001/XMLSchema"); - InputSource sourceentree = new InputSource(xsdSource); - SAXSource sourceXSD = new SAXSource(sourceentree); - Schema schema = factory.newSchema(sourceXSD); - Validator validator = schema.newValidator(); - - // - validator.validate(new StreamSource(xmlSource)); - result = true; - - } - catch (final IllegalArgumentException exception) - { - exception.printStackTrace(); - result = false; - } - } - - // - return result; - } - - /** - * - * @param file - * @return - * @throws IOException - */ - public static boolean isZipFile(final File file) throws IOException - { - boolean result; - - // - byte[] buffer = new byte[4]; - FileInputStream is = null; - try - { - is = new FileInputStream(file); - is.read(buffer); - } - finally - { - if (is != null) - { - is.close(); - } - } - - // 50 4B 3 4 - if ((buffer[0] == 0x50) && (buffer[1] == 0x4B) && (buffer[2] == 0x03) && (buffer[3] == 0x04)) - { - result = true; - } - else - { - result = false; - } - - // - return result; - } - - /** - * - */ - public static String readTag(final BufferedReader in) throws Exception - { - String result; - - Pattern TAG_PATTERN = Pattern.compile("^<([\\w-_\\.]+)>.*$"); - Pattern SHORT_TAG_PATTERN = Pattern.compile("^<.+/>$"); - - result = in.readLine(); - boolean ended = false; - while (!ended) - { - /* - * DEBUG Matcher tagMatcher2 = TAG_PATTERN.matcher(result); if - * (tagMatcher2.find()) { logger.info("group count,0,1,2 = [" + - * tagMatcher2.groupCount() + "][" + tagMatcher2.group(0) + "][" + - * tagMatcher2.group(1) + "][" + tagMatcher2.group(2) + "]"); } - */ - - Matcher tagMatcher = TAG_PATTERN.matcher(result); - Matcher shortTagMatcher = SHORT_TAG_PATTERN.matcher(result); - - if ((tagMatcher.find()) && (tagMatcher.groupCount() == 2) && (tagMatcher.group(1).equals(tagMatcher.group(2)))) - { - ended = true; - } - else if (shortTagMatcher.matches()) - { - ended = true; - } - else - { - result += in.readLine(); - } - } - - // - return (result); - } - - /** - * - * @param source - * @return - */ - public static String toHTLM5(final String source) - { - String result; - - if (StringUtils.isBlank(source)) - { - result = ""; - } - else - { - result = source.replace(" ", " "); - } - - // - return result; - } - - /** - * - * @param value - * @return - */ - public static String toString(final XMLEvent source) - { - String result; - - switch (source.getEventType()) - { - case XMLEvent.ATTRIBUTE: - result = "ATTRIBUTE "; - break; - case XMLEvent.CDATA: - result = "CDATA"; - break; - case XMLEvent.CHARACTERS: - result = "CHARACTERS [" + source.asCharacters().getData() + "]"; - break; - case XMLEvent.COMMENT: - result = "COMMENT"; - break; - case XMLEvent.DTD: - result = "DTD"; - break; - case XMLEvent.END_DOCUMENT: - result = "END_DOCUMENT"; - break; - case XMLEvent.END_ELEMENT: - result = "END_ELEMENT " + source.asEndElement().getName(); - break; - case XMLEvent.ENTITY_DECLARATION: - result = "ENTITY_DECLARATION"; - break; - case XMLEvent.ENTITY_REFERENCE: - result = "ENTITY_REFERENCE"; - break; - case XMLEvent.NAMESPACE: - result = "NAMESPACE"; - break; - case XMLEvent.NOTATION_DECLARATION: - result = "NOTATION_DECLARATION"; - break; - case XMLEvent.PROCESSING_INSTRUCTION: - result = "PROCESSING_INSTRUCTION"; - break; - case XMLEvent.SPACE: - result = "SPACE"; - break; - case XMLEvent.START_DOCUMENT: - result = "START_DOCUMENT"; - break; - case XMLEvent.START_ELEMENT: - result = "START_ELEMENT [name=" + source.asStartElement().getName() + "][namespaceURI=" + source.asStartElement().getName().getNamespaceURI() + "][prefix=" - + source.asStartElement().getName().getPrefix() + "][localPart=" + source.asStartElement().getName().getLocalPart() + "]"; - break; - default: - result = null; - } - - // - return result; - } - - /** - * - * @param event - * @return - */ - public static String toString(final XMLTag source) - { - String result; - - if (source == null) - { - result = "null"; - } - else - { - result = "[label=" + source.getLabel() + "][type=" + source.getType().toString() + "][content=" + source.getContent() + "]"; - } - - // - return result; - } - - /** - * - * @param source - * @return - */ - public static String unescapeXmlBlank(final String source) - { - String result; - - if (StringUtils.isBlank(source)) - { - result = null; - } - else - { - result = StringEscapeUtils.unescapeXml(source); - } - - // - return result; - } -} diff --git a/src/fr/devinsy/util/xml/XMLWriter.java b/src/fr/devinsy/util/xml/XMLWriter.java deleted file mode 100644 index d5b41ec..0000000 --- a/src/fr/devinsy/util/xml/XMLWriter.java +++ /dev/null @@ -1,315 +0,0 @@ -/** - * Copyright (C) 2013-2014 Christian Pierre MOMON - * - * This file is part of Devinsy-utils. - * - * Devinsy-utils is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * Devinsy-utils is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public License - * along with Devinsy-utils. If not, see - */ -package fr.devinsy.util.xml; - -import java.io.File; -import java.io.FileNotFoundException; -import java.io.FileOutputStream; -import java.io.IOException; -import java.io.OutputStream; -import java.io.OutputStreamWriter; -import java.io.PrintWriter; -import java.io.UnsupportedEncodingException; -import java.io.Writer; - -import org.apache.commons.lang3.ArrayUtils; - -/** - * - * @author Christian Pierre MOMON (christian.momon@devinsy.fr) - */ -public class XMLWriter -{ - - protected PrintWriter out; - - /** - * Default constructor (useful for extend this class). - */ - protected XMLWriter() - { - this.out = null; - } - - /** - * Initialize a XML Writer to a file. - * - * @param file - * Where write the XML data. - * - * @throws FileNotFoundException - * @throws UnsupportedEncodingException - */ - public XMLWriter(final File file) throws UnsupportedEncodingException, FileNotFoundException - { - this.out = new PrintWriter(new OutputStreamWriter(new FileOutputStream(file), "UTF-8")); - } - - /** - * Initialize a XML Writer to a OutputStream. - * - * @param target - * Where write the XML data. - * - * @throws UnsupportedEncodingException - */ - public XMLWriter(final OutputStream target) throws UnsupportedEncodingException - { - this.out = new PrintWriter(new OutputStreamWriter(target, "UTF-8")); - } - - /** - * Initialize a XML Writer to a Writer. - * - * @param target - * Where write the XML data. - * - * @throws UnsupportedEncodingException - */ - public XMLWriter(final Writer target) throws UnsupportedEncodingException - { - this.out = new PrintWriter(target); - } - - /** - * This method closes the target stream. - */ - public void close() throws IOException - { - if (this.out != null) - { - this.out.flush(); - this.out.close(); - } - } - - /** - * This method flushes the target stream. - */ - public void flush() throws IOException - { - if (this.out != null) - { - this.out.flush(); - } - } - - /** - * This method writes a XML comment. - * - * @param comment - * The comment to write. - */ - public void writeComment(final String comment) - { - this.out.print(""); - } - - /** - * This method writes a XML tag with no content. - */ - public void writeEmptyTag(final String label, final String... attributes) - { - this.out.print("<"); - this.out.print(label); - writeTagAttributes(attributes); - this.out.print("/>"); - } - - /** - * This method writes a XML ender tag. - */ - public void writeEndTag(final String label) - { - this.out.print(""); - } - - /** - * This method writes a XML start tag. - */ - public void writeStartTag(final String label, final String... attributes) - { - this.out.print("<"); - this.out.print(label); - writeTagAttributes(attributes); - this.out.print(">"); - } - - /** - * This method write a XML tag with attributes and boolean content data. - * - * @param label - * @param content - * @param attributes - */ - public void writeTag(final String label, final boolean content, final String... attributes) - { - writeStartTag(label, attributes); - writeTagContent(String.valueOf(content)); - writeEndTag(label); - } - - /** - * This method write a XML tag with attributes and long content data. - * - * @param label - * @param content - * @param attributes - */ - public void writeTag(final String label, final long content, final String... attributes) - { - writeStartTag(label, attributes); - writeTagContent(String.valueOf(content)); - writeEndTag(label); - } - - /** - * This method write a XML tag with attributes and content data. Content - * data are converted in XML format. - * - * @param label - * @param content - * @param attributes - */ - public void writeTag(final String label, final String content, final String... attributes) - { - if (content == null) - { - writeEmptyTag(label, attributes); - } - else - { - writeStartTag(label, attributes); - writeTagContent(content); - writeEndTag(label); - } - } - - /** - * This method writes attributes of a tag. - * - * @param attributes - */ - private void writeTagAttributes(final String... attributes) - { - // - if ((attributes != null) && (attributes.length > 0)) - { - for (int count = 0; count < attributes.length; count += 2) - { - this.out.print(" "); - this.out.print(attributes[count]); - this.out.print("=\""); - this.out.print(attributes[count + 1]); - this.out.print("\""); - } - } - } - - /** - * This method writes content using XML escape. - * - * @param content - * data to write in XML format. - */ - private void writeTagContent(final String content) - { - // - for (int count = 0; count < content.length(); count++) - { - // - char car = content.charAt(count); - - switch (car) - { - case '<': - this.out.print("<"); - break; - case '>': - this.out.print(">"); - break; - case '&': - this.out.print("&"); - break; - case '"': - this.out.print("""); - break; - case '\'': - this.out.print("'"); - break; - default: - this.out.print(car); - } - } - } - - /** - * This method writes a XML header with attributes. - * - * @param attributes - */ - public void writeXMLHeader(final String... attributes) - { - - // - this.out.print(""); - } -} diff --git a/src/fr/devinsy/util/xml/XMLZipReader.java b/src/fr/devinsy/util/xml/XMLZipReader.java deleted file mode 100644 index a988c32..0000000 --- a/src/fr/devinsy/util/xml/XMLZipReader.java +++ /dev/null @@ -1,68 +0,0 @@ -/** - * Copyright (C) 2013-2014 Christian Pierre MOMON - * - * This file is part of Devinsy-utils. - * - * Devinsy-utils is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * Devinsy-utils is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public License - * along with Devinsy-utils. If not, see - */ -package fr.devinsy.util.xml; - -import java.io.File; -import java.io.FileInputStream; -import java.io.IOException; -import java.io.InputStream; -import java.util.zip.ZipInputStream; - -import javax.xml.stream.XMLInputFactory; -import javax.xml.stream.XMLStreamException; - -/** - * - * @author Christian Pierre MOMON (christian.momon@devinsy.fr) - */ -public class XMLZipReader extends XMLReader -{ - - /** - * - * @param file - * @throws IOException - * @throws XMLStreamException - */ - public XMLZipReader(final File file) throws IOException, XMLStreamException - { - super(); - - XMLInputFactory factory = XMLInputFactory.newInstance(); - ZipInputStream zis = new ZipInputStream(new FileInputStream(file)); - zis.getNextEntry(); - this.in = factory.createXMLEventReader(zis, "UTF-8"); - } - - /** - * - * @param target - * @throws IOException - * @throws XMLStreamException - */ - public XMLZipReader(final InputStream source) throws IOException, XMLStreamException - { - super(); - - XMLInputFactory factory = XMLInputFactory.newInstance(); - ZipInputStream zis = new ZipInputStream(source); - zis.getNextEntry(); - this.in = factory.createXMLEventReader(zis, "UTF-8"); - } -} diff --git a/src/fr/devinsy/util/xml/XMLZipWriter.java b/src/fr/devinsy/util/xml/XMLZipWriter.java deleted file mode 100644 index 515ccf2..0000000 --- a/src/fr/devinsy/util/xml/XMLZipWriter.java +++ /dev/null @@ -1,149 +0,0 @@ -/** - * Copyright (C) 2013-2014 Christian Pierre MOMON - * - * This file is part of Devinsy-utils. - * - * Devinsy-utils is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * Devinsy-utils is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public License - * along with Devinsy-utils. If not, see - */ -package fr.devinsy.util.xml; - -import java.io.File; -import java.io.FileOutputStream; -import java.io.IOException; -import java.io.OutputStream; -import java.io.OutputStreamWriter; -import java.io.PrintWriter; -import java.util.zip.Deflater; -import java.util.zip.ZipEntry; -import java.util.zip.ZipOutputStream; - -import fr.devinsy.util.FileTools; - -/** - * - * @author Christian Pierre MOMON (christian.momon@devinsy.fr) - */ -public class XMLZipWriter extends XMLWriter -{ - private ZipOutputStream zos; - - /** - * - * @param file - * @throws IOException - */ - public XMLZipWriter(final File file) throws IOException - { - super(); - - this.zos = new ZipOutputStream(new FileOutputStream(file)); - this.zos.setLevel(Deflater.BEST_COMPRESSION); - this.zos.setMethod(ZipOutputStream.DEFLATED); - this.zos.setComment("Generated by XMLZipWriter"); - this.zos.putNextEntry(new ZipEntry(FileTools.setExtension(file, ".xml").getName())); - this.out = new PrintWriter(new OutputStreamWriter(this.zos, "UTF-8")); - } - - /** - * - * @param file - * @throws IOException - */ - public XMLZipWriter(final File file, final String generator) throws IOException - { - super(); - - this.zos = new ZipOutputStream(new FileOutputStream(file)); - this.zos.setLevel(Deflater.BEST_COMPRESSION); - this.zos.setMethod(ZipOutputStream.DEFLATED); - this.zos.setComment(generator); - this.zos.putNextEntry(new ZipEntry(FileTools.setExtension(file, ".xml").getName())); - this.out = new PrintWriter(new OutputStreamWriter(this.zos, "UTF-8")); - } - - /** - * - * @param target - * @throws IOException - */ - public XMLZipWriter(final OutputStream target, final String generator) throws IOException - { - super(); - this.zos = new ZipOutputStream(target); - this.zos.setLevel(Deflater.BEST_COMPRESSION); - this.zos.setMethod(ZipOutputStream.DEFLATED); - if (generator != null) - { - this.zos.setComment(generator); - } - this.out = new PrintWriter(new OutputStreamWriter(this.zos, "UTF-8")); - } - - /** - * - * @param target - * @throws IOException - */ - public XMLZipWriter(final OutputStream target, final String fileName, final String generator) throws IOException - { - super(); - this.zos = new ZipOutputStream(target); - this.zos.setLevel(Deflater.BEST_COMPRESSION); - this.zos.setMethod(ZipOutputStream.DEFLATED); - if (generator != null) - { - this.zos.setComment(generator); - } - openEntry(fileName); - this.out = new PrintWriter(new OutputStreamWriter(this.zos, "UTF-8")); - } - - /** - * @throws IOException - * - */ - @Override - public void close() throws IOException - { - closeEntry(); - super.close(); - } - - /** - * @throws IOException - * - */ - public void closeEntry() throws IOException - { - flush(); - this.zos.closeEntry(); - } - - /** - * - * @param fileName - * @throws IOException - */ - public void openEntry(final String fileName) throws IOException - { - if (fileName == null) - { - throw new NullPointerException("fileName is null."); - } - else - { - this.zos.putNextEntry(new ZipEntry(FileTools.setExtension(fileName, ".xml"))); - } - } -} diff --git a/src/org/apache/jackrabbit/util/ISO8601.java b/src/org/apache/jackrabbit/util/ISO8601.java deleted file mode 100644 index 3f3c85a..0000000 --- a/src/org/apache/jackrabbit/util/ISO8601.java +++ /dev/null @@ -1,316 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed with - * this work for additional information regarding copyright ownership. - * The ASF licenses this file to You under the Apache License, Version 2.0 - * (the "License"); you may not use this file except in compliance with - * the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -package org.apache.jackrabbit.util; - -import java.util.Calendar; -import java.util.GregorianCalendar; -import java.util.TimeZone; - -/** - * The ISO8601 utility class provides helper methods - * to deal with date/time formatting using a specific ISO8601-compliant - * format (see ISO 8601). - *

- * The currently supported format is: - *

- *   ±YYYY-MM-DDThh:mm:ss.SSSTZD
- * 
- * where: - *
- *   ±YYYY = four-digit year with optional sign where values <= 0 are
- *           denoting years BCE and values > 0 are denoting years CE,
- *           e.g. -0001 denotes the year 2 BCE, 0000 denotes the year 1 BCE,
- *           0001 denotes the year 1 CE, and so on...
- *   MM    = two-digit month (01=January, etc.)
- *   DD    = two-digit day of month (01 through 31)
- *   hh    = two digits of hour (00 through 23) (am/pm NOT allowed)
- *   mm    = two digits of minute (00 through 59)
- *   ss    = two digits of second (00 through 59)
- *   SSS   = three digits of milliseconds (000 through 999)
- *   TZD   = time zone designator, Z for Zulu (i.e. UTC) or an offset from UTC
- *           in the form of +hh:mm or -hh:mm
- * 
- */ -public final class ISO8601 { - /** - * Parses an ISO8601-compliant date/time string. - * - * @param text the date/time string to be parsed - * @return a Calendar, or null if the input could - * not be parsed - * @throws IllegalArgumentException if a null argument is passed - */ - public static Calendar parse(String text) { - if (text == null) { - throw new IllegalArgumentException("argument can not be null"); - } - - // check optional leading sign - char sign; - int start; - if (text.startsWith("-")) { - sign = '-'; - start = 1; - } else if (text.startsWith("+")) { - sign = '+'; - start = 1; - } else { - sign = '+'; // no sign specified, implied '+' - start = 0; - } - - /** - * the expected format of the remainder of the string is: - * YYYY-MM-DDThh:mm:ss.SSSTZD - * - * note that we cannot use java.text.SimpleDateFormat for - * parsing because it can't handle years <= 0 and TZD's - */ - - int year, month, day, hour, min, sec, ms; - String tzID; - try { - // year (YYYY) - year = Integer.parseInt(text.substring(start, start + 4)); - start += 4; - // delimiter '-' - if (text.charAt(start) != '-') { - return null; - } - start++; - // month (MM) - month = Integer.parseInt(text.substring(start, start + 2)); - start += 2; - // delimiter '-' - if (text.charAt(start) != '-') { - return null; - } - start++; - // day (DD) - day = Integer.parseInt(text.substring(start, start + 2)); - start += 2; - // delimiter 'T' - if (text.charAt(start) != 'T') { - return null; - } - start++; - // hour (hh) - hour = Integer.parseInt(text.substring(start, start + 2)); - start += 2; - // delimiter ':' - if (text.charAt(start) != ':') { - return null; - } - start++; - // minute (mm) - min = Integer.parseInt(text.substring(start, start + 2)); - start += 2; - // delimiter ':' - if (text.charAt(start) != ':') { - return null; - } - start++; - // second (ss) - sec = Integer.parseInt(text.substring(start, start + 2)); - start += 2; - // delimiter '.' - if (text.charAt(start) != '.') { - return null; - } - start++; - // millisecond (SSS) - ms = Integer.parseInt(text.substring(start, start + 3)); - start += 3; - // time zone designator (Z or +00:00 or -00:00) - if (text.charAt(start) == '+' || text.charAt(start) == '-') { - // offset to UTC specified in the format +00:00/-00:00 - tzID = "GMT" + text.substring(start); - } else if (text.substring(start).equals("Z")) { - tzID = "GMT"; - } else { - // invalid time zone designator - return null; - } - } catch (IndexOutOfBoundsException e) { - return null; - } catch (NumberFormatException e) { - return null; - } - - TimeZone tz = TimeZone.getTimeZone(tzID); - // verify id of returned time zone (getTimeZone defaults to "GMT") - if (!tz.getID().equals(tzID)) { - // invalid time zone - return null; - } - - // initialize Calendar object - Calendar cal = Calendar.getInstance(tz); - cal.setLenient(false); - // year and era - if (sign == '-' || year == 0) { - // not CE, need to set era (BCE) and adjust year - cal.set(Calendar.YEAR, year + 1); - cal.set(Calendar.ERA, GregorianCalendar.BC); - } else { - cal.set(Calendar.YEAR, year); - cal.set(Calendar.ERA, GregorianCalendar.AD); - } - // month (0-based!) - cal.set(Calendar.MONTH, month - 1); - // day of month - cal.set(Calendar.DAY_OF_MONTH, day); - // hour - cal.set(Calendar.HOUR_OF_DAY, hour); - // minute - cal.set(Calendar.MINUTE, min); - // second - cal.set(Calendar.SECOND, sec); - // millisecond - cal.set(Calendar.MILLISECOND, ms); - - try { - /** - * the following call will trigger an IllegalArgumentException - * if any of the set values are illegal or out of range - */ - cal.getTime(); - /** - * in addition check the validity of the year - */ - getYear(cal); - } catch (IllegalArgumentException e) { - return null; - } - - return cal; - } - - /** - * Formats a Calendar value into an ISO8601-compliant - * date/time string. - * - * @param cal the time value to be formatted into a date/time string. - * @return the formatted date/time string. - * @throws IllegalArgumentException if a null argument is passed - * or the calendar cannot be represented as defined by ISO 8601 (i.e. year - * with more than four digits). - */ - public static String format(Calendar cal) throws IllegalArgumentException { - if (cal == null) { - throw new IllegalArgumentException("argument can not be null"); - } - - /** - * the format of the date/time string is: - * YYYY-MM-DDThh:mm:ss.SSSTZD - * - * note that we cannot use java.text.SimpleDateFormat for - * formatting because it can't handle years <= 0 and TZD's - */ - StringBuffer buf = new StringBuffer(); - // year ([-]YYYY) - appendZeroPaddedInt(buf, getYear(cal), 4); - buf.append('-'); - // month (MM) - appendZeroPaddedInt(buf, cal.get(Calendar.MONTH) + 1, 2); - buf.append('-'); - // day (DD) - appendZeroPaddedInt(buf, cal.get(Calendar.DAY_OF_MONTH), 2); - buf.append('T'); - // hour (hh) - appendZeroPaddedInt(buf, cal.get(Calendar.HOUR_OF_DAY), 2); - buf.append(':'); - // minute (mm) - appendZeroPaddedInt(buf, cal.get(Calendar.MINUTE), 2); - buf.append(':'); - // second (ss) - appendZeroPaddedInt(buf, cal.get(Calendar.SECOND), 2); - buf.append('.'); - // millisecond (SSS) - appendZeroPaddedInt(buf, cal.get(Calendar.MILLISECOND), 3); - // time zone designator (Z or +00:00 or -00:00) - TimeZone tz = cal.getTimeZone(); - // determine offset of timezone from UTC (incl. daylight saving) - int offset = tz.getOffset(cal.getTimeInMillis()); - if (offset != 0) { - int hours = Math.abs((offset / (60 * 1000)) / 60); - int minutes = Math.abs((offset / (60 * 1000)) % 60); - buf.append(offset < 0 ? '-' : '+'); - appendZeroPaddedInt(buf, hours, 2); - buf.append(':'); - appendZeroPaddedInt(buf, minutes, 2); - } else { - buf.append('Z'); - } - return buf.toString(); - } - - /** - * Returns the astronomical year of the given calendar. - * - * @param cal a calendar instance. - * @return the astronomical year. - * @throws IllegalArgumentException if calendar cannot be represented as - * defined by ISO 8601 (i.e. year with more - * than four digits). - */ - public static int getYear(Calendar cal) throws IllegalArgumentException { - // determine era and adjust year if necessary - int year = cal.get(Calendar.YEAR); - if (cal.isSet(Calendar.ERA) - && cal.get(Calendar.ERA) == GregorianCalendar.BC) { - /** - * calculate year using astronomical system: - * year n BCE => astronomical year -n + 1 - */ - year = 0 - year + 1; - } - - if (year > 9999 || year < -9999) { - throw new IllegalArgumentException("Calendar has more than four " + - "year digits, cannot be formatted as ISO8601: " + year); - } - return year; - } - - /** - * Appends a zero-padded number to the given string buffer. - *

- * This is an internal helper method which doesn't perform any - * validation on the given arguments. - * - * @param buf String buffer to append to - * @param n number to append - * @param precision number of digits to append - */ - private static void appendZeroPaddedInt(StringBuffer buf, int n, int precision) { - if (n < 0) { - buf.append('-'); - n = -n; - } - - for (int exp = precision - 1; exp > 0; exp--) { - if (n < Math.pow(10, exp)) { - buf.append('0'); - } else { - break; - } - } - buf.append(n); - } -} diff --git a/src/org/apache/jackrabbit/util/note b/src/org/apache/jackrabbit/util/note deleted file mode 100644 index 558093b..0000000 --- a/src/org/apache/jackrabbit/util/note +++ /dev/null @@ -1 +0,0 @@ -Extract from jackrabbit-2.1.1-src.zip \ No newline at end of file diff --git a/test/FileIteratorSandbox.java b/test/FileIteratorSandbox.java deleted file mode 100644 index 08452c6..0000000 --- a/test/FileIteratorSandbox.java +++ /dev/null @@ -1,111 +0,0 @@ -/** - * Copyright (C) 2013 Christian Pierre MOMON - * - * This file is part of Devinsy-utils. - * - * Devinsy-utils is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * Devinsy-utils is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public License - * along with Devinsy-utils. If not, see - */ -import java.io.File; - -import org.apache.log4j.ConsoleAppender; -import org.apache.log4j.PatternLayout; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; - -import fr.devinsy.util.FileIterator; - -/** - * - */ -public class FileIteratorSandbox -{ - private static final Logger logger; - - static - { - // Initialize logger. - org.apache.log4j.BasicConfigurator.configure(); - org.apache.log4j.Logger.getRootLogger().setLevel(org.apache.log4j.Level.DEBUG); - - logger = LoggerFactory.getLogger(FileIteratorSandbox.class); - - // - org.apache.log4j.Logger defaultLogger = org.apache.log4j.Logger.getRootLogger(); - defaultLogger.removeAllAppenders(); - defaultLogger.addAppender(new ConsoleAppender(new PatternLayout("%d{ISO8601} - dutils [%-5p] %34.34c.%-25M - %m%n"))); - - // - logger.debug("Log initialized."); - } - - /** - * - */ - public static void main(final String[] args) - { - test(); - } - - /** - * - */ - protected static void test() - { - System.out.println("user.dir=" + System.getProperty("user.dir")); - - try - { - // File f = new File("TestTree/DirectoryOne/titi2"); - // File f = new File("/home/cpm/.kde//cache-cpmstar"); - File f = new File("tests/TestTree/xine.jpg"); - System.out.println("exists=" + f.exists()); - System.out.println("canonical path = " + f.getCanonicalPath()); - System.out.println("absolute path = " + f.getAbsolutePath()); - System.out.println("name = " + f.getName()); - System.out.println("parent = " + f.getParent()); - System.out.println("path = " + f.getPath()); - System.out.println("path = " + f.lastModified()); - System.out.println("path = " + f.length()); - System.out.println("path = " + f.isFile()); - System.out.println("path = " + f.isDirectory()); - System.out.println("list = " + f.list()); - - System.out.println("----"); - // FileIterator i = new FileIterator(new File("tests/TestTree")); - FileIterator i = new FileIterator(new File("tests/TestTree/xine.jpg"), null, true); - // FileIterator i = new FileIterator(new - // File("/home/cpm/.kde/cache-cpmstar"), ".*cache.*", false); - // FileIterator i = new FileIterator(new File("tests/TestTree"), - // ".*dsc.*", false); - // FileIterator i = new FileIterator(new - // File("/home/cpm/Images/Photos/")); - // FileIterator i = new FileIterator(new - // File("/home/cpm/Images/Photos/"), ".*\\.(JPG|jpg)", false); - // FileIterator i = new FileIterator(new - // File("/home/cpm/Images/Photos/"), ".*anni_moi.*", false); - - while (i.hasNext()) - { - // System.out.println(i.toString()); - System.out.println("File=[" + i.next().getPath() + "]"); - } - i.reset(); - System.out.println("Cardinal=" + i.finalCountdown()); - } - catch (Exception exception) - { - System.out.println("ERROR:" + exception.getMessage()); - } - } -} diff --git a/test/Foot1Test.java b/test/Foot1Test.java deleted file mode 100644 index dda5c6a..0000000 --- a/test/Foot1Test.java +++ /dev/null @@ -1,19 +0,0 @@ -import org.junit.Test; - -public class Foot1Test -{ - // private Logger logger = - // LoggerFactory.getLogger(PdfGenerationAmqpServiceInjectedTest.class); - - /** - * - */ - @Test - public void test1a() - { - // logger.debug("===== test starting..."); - - // logger.debug("===== test done."); - } - -} diff --git a/test/TestTree/.test/arf b/test/TestTree/.test/arf deleted file mode 100644 index 613a3f5..0000000 --- a/test/TestTree/.test/arf +++ /dev/null @@ -1 +0,0 @@ -test sioux diff --git a/test/TestTree/20081111-nouvelle_voiture/dsc01469.jpg b/test/TestTree/20081111-nouvelle_voiture/dsc01469.jpg deleted file mode 100755 index 49b1665..0000000 Binary files a/test/TestTree/20081111-nouvelle_voiture/dsc01469.jpg and /dev/null differ diff --git a/test/TestTree/20081111-nouvelle_voiture/dsc01470.jpg b/test/TestTree/20081111-nouvelle_voiture/dsc01470.jpg deleted file mode 100755 index 88a4027..0000000 Binary files a/test/TestTree/20081111-nouvelle_voiture/dsc01470.jpg and /dev/null differ diff --git a/test/TestTree/20081111-nouvelle_voiture/dsc01472.jpg b/test/TestTree/20081111-nouvelle_voiture/dsc01472.jpg deleted file mode 100755 index 8fff0e5..0000000 Binary files a/test/TestTree/20081111-nouvelle_voiture/dsc01472.jpg and /dev/null differ diff --git a/test/TestTree/20081111-nouvelle_voiture/dsc01474.jpg b/test/TestTree/20081111-nouvelle_voiture/dsc01474.jpg deleted file mode 100755 index 0e662f1..0000000 Binary files a/test/TestTree/20081111-nouvelle_voiture/dsc01474.jpg and /dev/null differ diff --git a/test/TestTree/DirectoryOne/titi b/test/TestTree/DirectoryOne/titi deleted file mode 100644 index cbd38df..0000000 --- a/test/TestTree/DirectoryOne/titi +++ /dev/null @@ -1 +0,0 @@ -azertyuiop diff --git a/test/TestTree/DirectoryOne/toto b/test/TestTree/DirectoryOne/toto deleted file mode 100644 index 388a530..0000000 --- a/test/TestTree/DirectoryOne/toto +++ /dev/null @@ -1 +0,0 @@ -good weather today diff --git a/test/TestTree/DirectoryOne/tu tu b/test/TestTree/DirectoryOne/tu tu deleted file mode 100644 index 20b7025..0000000 --- a/test/TestTree/DirectoryOne/tu tu +++ /dev/null @@ -1 +0,0 @@ -Ceci est un test. diff --git a/test/TestTree/P/dsc01469.jpg b/test/TestTree/P/dsc01469.jpg deleted file mode 100755 index 49b1665..0000000 Binary files a/test/TestTree/P/dsc01469.jpg and /dev/null differ diff --git a/test/TestTree/P/dsc01470.jpg b/test/TestTree/P/dsc01470.jpg deleted file mode 100755 index 88a4027..0000000 Binary files a/test/TestTree/P/dsc01470.jpg and /dev/null differ diff --git a/test/TestTree/P/dsc01472.jpg b/test/TestTree/P/dsc01472.jpg deleted file mode 100755 index 8fff0e5..0000000 Binary files a/test/TestTree/P/dsc01472.jpg and /dev/null differ diff --git a/test/TestTree/P/dsc01474.jpg b/test/TestTree/P/dsc01474.jpg deleted file mode 100755 index 0e662f1..0000000 Binary files a/test/TestTree/P/dsc01474.jpg and /dev/null differ diff --git a/test/TestTree/xine.jpg b/test/TestTree/xine.jpg deleted file mode 100644 index a89443b..0000000 Binary files a/test/TestTree/xine.jpg and /dev/null differ diff --git a/test/TestTree/xine_snapshot-4.jpg b/test/TestTree/xine_snapshot-4.jpg deleted file mode 100644 index a89443b..0000000 Binary files a/test/TestTree/xine_snapshot-4.jpg and /dev/null differ diff --git a/test/TestTree/xine_snapshot-9.jpg b/test/TestTree/xine_snapshot-9.jpg deleted file mode 100644 index 5ef999b..0000000 Binary files a/test/TestTree/xine_snapshot-9.jpg and /dev/null differ diff --git a/test/fr/devinsy/util/FileToolsTest.java b/test/fr/devinsy/util/FileToolsTest.java deleted file mode 100644 index 2653b83..0000000 --- a/test/fr/devinsy/util/FileToolsTest.java +++ /dev/null @@ -1,88 +0,0 @@ -/** - * Copyright (C) 2014 Christian Pierre MOMON - * - * This file is part of Devinsy-utils. - * - * Devinsy-utils is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * Devinsy-utils is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public License - * along with Devinsy-utils. If not, see - */ -package fr.devinsy.util; - -import java.io.IOException; - -import org.apache.log4j.BasicConfigurator; -import org.apache.log4j.Level; -import org.apache.log4j.Logger; -import org.junit.Assert; -import org.junit.Before; -import org.junit.Test; - -import fr.devinsy.util.strings.StringList; - -/** - * - * @author Christian P. Momon - */ -public class FileToolsTest -{ - static protected org.apache.log4j.Logger logger = org.apache.log4j.Logger.getLogger(FileToolsTest.class); - - /** - * - */ - @Before - public void before() - { - BasicConfigurator.configure(); - Logger.getRootLogger().setLevel(Level.ERROR); - } - - /** - * - */ - @Test - public void loadToStringListURL01() throws IOException - { - // - logger.debug("===== test starting..."); - // - StringList source = FileTools.loadToStringList(FileTools.class.getResource("/fr/devinsy/util/lines.txt")); - - // - Assert.assertEquals(4, source.size()); - Assert.assertEquals("trois", source.get(3 - 1)); - - // - logger.debug("===== test done."); - } - - /** - * @throws IOException - * - */ - @Test - public void testGetExtension() - { - // - logger.debug("===== test starting..."); - - // - String extension = FileTools.getExtension("test.ext"); - - // - Assert.assertEquals(extension, "ext"); - - // - logger.debug("===== test done."); - } -} diff --git a/test/fr/devinsy/util/cmdexec/CmdExecSandbox.java b/test/fr/devinsy/util/cmdexec/CmdExecSandbox.java index d0c6418..b09c48c 100644 --- a/test/fr/devinsy/util/cmdexec/CmdExecSandbox.java +++ b/test/fr/devinsy/util/cmdexec/CmdExecSandbox.java @@ -1,108 +1,119 @@ -package fr.devinsy.util.cmdexec; - -/** - * Copyright (C) 2013 Christian Pierre MOMON +/* + * Copyright (C) 2013,2017 Christian Pierre MOMON * - * This file is part of Devinsy-utils. + * This file is part of Devinsy-unix. * - * Devinsy-utils is free software: you can redistribute it and/or modify + * Devinsy-unix is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * - * Devinsy-utils is distributed in the hope that it will be useful, + * Devinsy-unix is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public License - * along with Devinsy-utils. If not, see + * along with Devinsy-unix. If not, see */ +package fr.devinsy.util.cmdexec; + import org.apache.log4j.ConsoleAppender; import org.apache.log4j.PatternLayout; import org.slf4j.Logger; import org.slf4j.LoggerFactory; /** - * + * The Class CmdExecSandbox. */ class CmdExecSandbox { - static private final Logger logger; + static private final Logger logger; - static - { - // Initialize logger. - org.apache.log4j.BasicConfigurator.configure(); - org.apache.log4j.Logger.getRootLogger().setLevel(org.apache.log4j.Level.INFO); + static + { + // Initialize logger. + org.apache.log4j.BasicConfigurator.configure(); + org.apache.log4j.Logger.getRootLogger().setLevel(org.apache.log4j.Level.INFO); - logger = LoggerFactory.getLogger(CmdExecSandbox.class); - logger.info("Enter"); + logger = LoggerFactory.getLogger(CmdExecSandbox.class); + logger.info("Enter"); - // - logger.info("Set the log file format…"); - org.apache.log4j.Logger defaultLogger = org.apache.log4j.Logger.getRootLogger(); - defaultLogger.removeAllAppenders(); - defaultLogger.addAppender(new ConsoleAppender(new PatternLayout("%d{ISO8601} - dutils [%-5p] %34.34c.%-25M - %m%n"))); + // + logger.info("Set the log file format…"); + org.apache.log4j.Logger defaultLogger = org.apache.log4j.Logger.getRootLogger(); + defaultLogger.removeAllAppenders(); + defaultLogger.addAppender(new ConsoleAppender(new PatternLayout("%d{ISO8601} - dutils [%-5p] %34.34c.%-25M - %m%n"))); - logger.info("… done."); + logger.info("… done."); - logger.debug("Exit"); - } + logger.debug("Exit"); + } - /** - * - */ - public static String check(final String title, final StringBuffer source, final String model) - { - String result; - - if (source.indexOf(model) == -1) - { - result = String.format("%-40s -> KO <-", title) + "\nGet:\n" + source + "\nWaiting:\n" + model; - - } - else - { - result = String.format("%-40s [ OK ] ", title); - } - - // - return (result); - } - - /** - * - */ - public static void main(final String[] args) - { - System.out.println("Automatic test action for CmdExec!"); - - test1(); - - } - - /** + /** + * Check. * + * @param title + * the title + * @param source + * the source + * @param model + * the model + * @return the string */ - public static void test1() - { - try - { - System.out.println("Launch…s"); + public static String check(final String title, final StringBuffer source, final String model) + { + String result; - // String command = "/bin/sort -r /etc/passwd"; - String[] command = { "/usr/bin/sort", "-r", "/etc/passwd" }; + if (source.indexOf(model) == -1) + { + result = String.format("%-40s -> KO <-", title) + "\nGet:\n" + source + "\nWaiting:\n" + model; - CmdExec cmd = new CmdExec(command, StreamGobbler.StreamWay.BUFFER, StreamGobbler.StreamWay.BUFFER); - System.out.println("exitVal=[" + cmd.getExitValue() + "]"); - System.out.println("out=[" + cmd.getOutStream() + "]"); - System.out.println("err=[" + cmd.getErrStream() + "]"); - } - catch (Exception exception) - { - exception.printStackTrace(); - logger.info("ERRRO=" + exception); - } - } + } + else + { + result = String.format("%-40s [ OK ] ", title); + } + + // + return result; + } + + /** + * The main method. + * + * @param args + * the arguments + */ + public static void main(final String[] args) + { + System.out.println("Automatic test action for CmdExec!"); + + test1(); + + } + + /** + * Test 1. + */ + public static void test1() + { + try + { + System.out.println("Launch…s"); + + // String command = "/bin/sort -r /etc/passwd"; + String[] command = { "/usr/bin/sort", "-r", "/etc/passwd" }; + + CmdExec cmd = new CmdExec(command, StreamGobbler.StreamWay.BUFFER, StreamGobbler.StreamWay.BUFFER); + System.out.println("exitVal=[" + cmd.getExitValue() + "]"); + System.out.println("out=[" + cmd.getOutStream() + "]"); + System.out.println("err=[" + cmd.getErrStream() + "]"); + } + catch (Exception exception) + { + exception.printStackTrace(); + logger.info("ERRRO=" + exception); + } + } } diff --git a/test/fr/devinsy/util/lines.txt b/test/fr/devinsy/util/lines.txt deleted file mode 100644 index de1c537..0000000 --- a/test/fr/devinsy/util/lines.txt +++ /dev/null @@ -1,4 +0,0 @@ -un -deux -trois -quatre \ No newline at end of file diff --git a/test/fr/devinsy/util/strings/StringListTest.java b/test/fr/devinsy/util/strings/StringListTest.java deleted file mode 100644 index 9afe379..0000000 --- a/test/fr/devinsy/util/strings/StringListTest.java +++ /dev/null @@ -1,402 +0,0 @@ -/** - * Copyright (C) 2013,2014 Christian Pierre MOMON - * - * This file is part of Devinsy-utils. - * - * Devinsy-utils is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * Devinsy-utils is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public License - * along with Devinsy-utils. If not, see - */ -package fr.devinsy.util.strings; - -import java.util.Iterator; - -import org.apache.log4j.BasicConfigurator; -import org.apache.log4j.Level; -import org.apache.log4j.Logger; -import org.junit.Assert; -import org.junit.Before; -import org.junit.Test; - -import fr.devinsy.util.strings.StringList; -import fr.devinsy.util.strings.StringListCharIterator; -import fr.devinsy.util.strings.StringListCharPosition; - -/** - * - * @author Christian P. Momon - */ -public class StringListTest -{ - static protected org.apache.log4j.Logger logger = org.apache.log4j.Logger.getLogger(StringListTest.class); - - /** - * - */ - @Before - public void before() - { - BasicConfigurator.configure(); - Logger.getRootLogger().setLevel(Level.ERROR); - } - - /** - * - */ - @Test - public void testCharAt01() - { - // - logger.debug("===== test starting..."); - - // - StringList source = new StringList(); - source.append("abcdefghijklm"); - - // - char target = source.charAt(0); - Assert.assertEquals(target, 'a'); - - // - target = source.charAt(4); - Assert.assertEquals(target, 'e'); - - // - target = source.charAt(11); - Assert.assertEquals(target, 'l'); - - // - logger.debug("===== test done."); - } - - /** - * - */ - @Test - public void testCharAt02() - { - // - logger.debug("===== test starting..."); - - // - StringList source = new StringList(); - source.append("abc"); - source.append("def"); - source.append("ghi"); - source.append("jkl"); - source.append("mno"); - - // - char target = source.charAt(0); - Assert.assertEquals('a', target); - - // - target = source.charAt(4); - Assert.assertEquals('e', target); - - // - target = source.charAt(11); - Assert.assertEquals('l', target); - - // - logger.debug("===== test done."); - } - - /** - * - */ - @Test(expected = IndexOutOfBoundsException.class) - public void testCharAtException01() - { - // - logger.debug("===== test starting..."); - - // - StringList source = new StringList(); - source.append("abcdefghijklm"); - - // - char target = source.charAt(-2); - Assert.assertEquals('a', target); - - // - logger.debug("===== test done."); - } - - /** - * - */ - @Test(expected = IndexOutOfBoundsException.class) - public void testCharAtException02() - { - // - logger.debug("===== test starting..."); - - // - StringList source = new StringList(); - source.append("abcdefghijklm"); - - // - char target = source.charAt(100); - Assert.assertEquals('a', target); - - // - logger.debug("===== test done."); - } - - /** - * - */ - @Test(expected = IndexOutOfBoundsException.class) - public void testCharAtException03() - { - // - logger.debug("===== test starting..."); - - // - StringList source = new StringList(); - source.append("abcdefghijklm"); - - // - char target = source.charAt(source.length()); - Assert.assertEquals('a', target); - - // - logger.debug("===== test done."); - } - - /** - * - */ - @Test - public void testConstructor01() - { - // - logger.debug("===== test starting..."); - - String[] source = { "a", "b", "c" }; - - // - StringList target = new StringList(source); - - Assert.assertEquals(3, target.size()); - - // - logger.debug("===== test done."); - } - - /** - * - */ - @Test - public void testConstructor02() - { - // - logger.debug("===== test starting..."); - - // - StringList target = new StringList("a", "b", "c"); - - Assert.assertEquals(3, target.size()); - - // - logger.debug("===== test done."); - } - - /** - * - */ - @Test - public void testIteratorOfChar01() - { - // - logger.debug("===== test starting..."); - - // - StringList source = new StringList(); - source.append("abc"); - source.append("def"); - source.append("ghi"); - source.append("jkl"); - source.append("mno"); - - // - Iterator iterator = source.iteratorOfChar(); - - for (int index = 0; index < source.length(); index++) - { - StringListCharPosition position = ((StringListCharIterator) iterator).nextPosition(); - System.out.println(index + ":" + source.charAt(index) + " " + position.getCharIndex() + " " + position.getStringIndex() + " " + position.getLocalCharIndex()); - - Assert.assertTrue(iterator.hasNext()); - - Character character = ((StringListCharIterator) iterator).next(); - - Assert.assertEquals(character, new Character(source.charAt(index))); - } - - // - logger.debug("===== test done."); - } - - /** - * - */ - @Test - public void testSubstring01() - { - // - logger.debug("===== test starting..."); - - // - StringList source = new StringList(); - source.append("hamburger"); - - // - StringList target = source.substring(4, 8); - Assert.assertEquals("urge", target.toString()); - - // - logger.debug("===== test done."); - } - - /** - * - */ - @Test - public void testSubstring02() - { - // - logger.debug("===== test starting..."); - - // - StringList source = new StringList(); - source.append("ham").append("bur").append("ger"); - - // - StringList target = source.substring(4, 8); - Assert.assertEquals("urge", target.toString()); - - // - logger.debug("===== test done."); - } - - /** - */ - @Test - public void testSubstring03() - { - // - logger.debug("===== test starting..."); - - // - StringList source = new StringList(); - source.append("smiles"); - - // - StringList target = source.substring(1, 5); - Assert.assertEquals("mile", target.toString()); - - // - logger.debug("===== test done."); - } - - /** - */ - @Test - public void testSubstring04() - { - // - logger.debug("===== test starting..."); - - // - StringList source = new StringList(); - source.append("sm").append("il").append("es"); - - // - StringList target = source.substring(1, 5); - Assert.assertEquals("mile", target.toString()); - - // - logger.debug("===== test done."); - } - - /** - * - */ - @Test - public void testToString01() - { - // - logger.debug("===== test starting..."); - - // - StringList buffer = new StringList(); - - String target = buffer.toString(); - - Assert.assertTrue(target.equals("")); - - // - logger.debug("===== test done."); - } - - /** - * - */ - @Test - public void testToString02() - { - // - logger.debug("===== test starting..."); - - // - String source = "abcdefghijklm"; - - StringList buffer = new StringList(); - buffer.append(source); - - String target = buffer.toString(); - - Assert.assertEquals(source, target); - Assert.assertTrue(target.equals(source)); - - // - logger.debug("===== test done."); - } - - /** - * - */ - @Test - public void testToString03() - { - // - logger.debug("===== test starting..."); - - // - String source1 = "abcdefghijklm"; - String source2 = "other stuff"; - - StringList buffer = new StringList(); - buffer.append(source1); - buffer.append(source2); - - String target = buffer.toString(); - - Assert.assertTrue(target.equals(source1 + source2)); - - // - logger.debug("===== test done."); - } - -} diff --git a/test/fr/devinsy/util/strings/StringListUtilsTest.java b/test/fr/devinsy/util/strings/StringListUtilsTest.java deleted file mode 100644 index 097d37f..0000000 --- a/test/fr/devinsy/util/strings/StringListUtilsTest.java +++ /dev/null @@ -1,174 +0,0 @@ -/** - * Copyright (C) 2013,2014 Christian Pierre MOMON - * - * This file is part of Devinsy-utils. - * - * Devinsy-utils is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * Devinsy-utils is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public License - * along with Devinsy-utils. If not, see - */ -package fr.devinsy.util.strings; - -import java.util.ArrayList; -import java.util.Collection; - -import org.apache.log4j.BasicConfigurator; -import org.apache.log4j.Level; -import org.apache.log4j.Logger; -import org.junit.Assert; -import org.junit.Before; -import org.junit.Test; - -/** - * - * @author Christian P. Momon - */ -public class StringListUtilsTest -{ - private static org.apache.log4j.Logger logger = org.apache.log4j.Logger.getLogger(StringListUtilsTest.class); - - /** - * - */ - @Before - public void before() - { - BasicConfigurator.configure(); - Logger.getRootLogger().setLevel(Level.ERROR); - } - - /** - * - */ - @Test - public void testContainsBlank01() - { - Assert.assertFalse(StringListUtils.containsBlank((Collection) null)); - Assert.assertFalse(StringListUtils.containsBlank(new StringList("aaa", "bbb", "ccc"))); - Assert.assertTrue(StringListUtils.containsBlank(new StringList("aaa", null, "ccc"))); - Assert.assertTrue(StringListUtils.containsBlank(new StringList("aaa", "", "ccc"))); - Assert.assertTrue(StringListUtils.containsBlank(new StringList("aaa", " ", "ccc"))); - } - - /** - * - */ - @Test - public void testContainsBlank02() - { - Assert.assertFalse(StringListUtils.containsBlank((String[]) null)); - Assert.assertFalse(StringListUtils.containsBlank("aaa", "bbb", "ccc")); - Assert.assertTrue(StringListUtils.containsBlank("aaa", null, "ccc")); - Assert.assertTrue(StringListUtils.containsBlank("aaa", "", "ccc")); - Assert.assertTrue(StringListUtils.containsBlank("aaa", " ", "ccc")); - } - - /** - * - */ - @Test - public void testContainsBlank03() - { - Assert.assertFalse(StringListUtils.containsBlank((ArrayList) null)); - ArrayList source = new ArrayList(); - source.add("aaa"); - source.add("bbb"); - source.add("ccc"); - Assert.assertFalse(StringListUtils.containsBlank(source)); - source.set(1, null); - Assert.assertTrue(StringListUtils.containsBlank(source)); - source.set(1, ""); - Assert.assertTrue(StringListUtils.containsBlank(source)); - source.set(1, " "); - Assert.assertTrue(StringListUtils.containsBlank(source)); - } - - /** - * - */ - @Test - public void testContainsEmpty01() - { - Assert.assertFalse(StringListUtils.containsEmpty((Collection) null)); - Assert.assertFalse(StringListUtils.containsEmpty(new StringList("aaa", "bbb", "ccc"))); - Assert.assertTrue(StringListUtils.containsEmpty(new StringList("aaa", null, "ccc"))); - Assert.assertTrue(StringListUtils.containsEmpty(new StringList("aaa", "", "ccc"))); - } - - /** - * - */ - @Test - public void testContainsEmpty02() - { - Assert.assertFalse(StringListUtils.containsEmpty((String[]) null)); - Assert.assertFalse(StringListUtils.containsEmpty("aaa", "bbb", "ccc")); - Assert.assertTrue(StringListUtils.containsEmpty("aaa", null, "ccc")); - Assert.assertTrue(StringListUtils.containsEmpty("aaa", "", "ccc")); - } - - /** - * - */ - @Test - public void testContainsEmpty03() - { - Assert.assertFalse(StringListUtils.containsEmpty((ArrayList) null)); - ArrayList source = new ArrayList(); - source.add("aaa"); - source.add("bbb"); - source.add("ccc"); - Assert.assertFalse(StringListUtils.containsEmpty(source)); - source.set(1, null); - Assert.assertTrue(StringListUtils.containsEmpty(source)); - source.set(1, ""); - Assert.assertTrue(StringListUtils.containsEmpty(source)); - } - - /** - * - */ - @Test - public void testContainsNull01() - { - Assert.assertFalse(StringListUtils.containsNull((Collection) null)); - Assert.assertFalse(StringListUtils.containsNull(new StringList("aaa", "bbb", "ccc"))); - Assert.assertTrue(StringListUtils.containsNull(new StringList("aaa", null, "ccc"))); - } - - /** - * - */ - @Test - public void testContainsNull02() - { - Assert.assertFalse(StringListUtils.containsNull((String[]) null)); - Assert.assertFalse(StringListUtils.containsNull("aaa", "bbb", "ccc")); - Assert.assertTrue(StringListUtils.containsNull("aaa", null, "ccc")); - } - - /** - * - */ - @Test - public void testContainsNull03() - { - Assert.assertFalse(StringListUtils.containsNull((ArrayList) null)); - ArrayList source = new ArrayList(); - source.add("aaa"); - source.add("bbb"); - source.add("ccc"); - Assert.assertFalse(StringListUtils.containsNull(source)); - source.set(1, null); - Assert.assertTrue(StringListUtils.containsNull(source)); - } -} diff --git a/test/fr/devinsy/util/util/rss/RSSCacheTest.java b/test/fr/devinsy/util/util/rss/RSSCacheTest.java deleted file mode 100644 index dd3aa8a..0000000 --- a/test/fr/devinsy/util/util/rss/RSSCacheTest.java +++ /dev/null @@ -1,67 +0,0 @@ -/** - * Copyright (C) 2014 Christian Pierre MOMON - * - * This file is part of Devinsy-utils. - * - * Devinsy-utils is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * Devinsy-utils is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public License - * along with Devinsy-utils. If not, see - */ -package fr.devinsy.util.util.rss; - -import org.apache.log4j.BasicConfigurator; -import org.apache.log4j.Level; -import org.apache.log4j.Logger; -import org.junit.Before; -import org.junit.Test; - -import fr.devinsy.util.rss.RSSCache; - -/** - * - * @author Christian P. Momon - */ -public class RSSCacheTest -{ - static protected org.apache.log4j.Logger logger = org.apache.log4j.Logger.getLogger(RSSCacheTest.class); - - /** - * - */ - @Before - public void before() - { - BasicConfigurator.configure(); - Logger.getRootLogger().setLevel(Level.ERROR); - } - - /** - * - */ - @Test - public void test01() - { - // - logger.debug("===== test starting..."); - - RSSCache cache = RSSCache.instance(); - - cache.put("ALPHA", "Mignonne, allons voir si la rose"); - cache.put("BRAVO", "Qui ce matin avoit desclose"); - cache.put("CHARLIE", "Sa robe de pourpre au Soleil,"); - - cache.setOudated("CHARLIE"); - - // - logger.debug("===== test done."); - } -} diff --git a/test/fr/devinsy/util/xml/XMLReaderTest.java b/test/fr/devinsy/util/xml/XMLReaderTest.java deleted file mode 100644 index 02e4f1a..0000000 --- a/test/fr/devinsy/util/xml/XMLReaderTest.java +++ /dev/null @@ -1,131 +0,0 @@ -/** - * Copyright (C) 2014 Christian Pierre MOMON - * - * This file is part of Devinsy-utils. - * - * Devinsy-utils is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * Devinsy-utils is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public License - * along with Devinsy-utils. If not, see - */ -package fr.devinsy.util.xml; - -import java.io.File; -import java.io.FileNotFoundException; - -import javax.xml.stream.XMLStreamException; - -import org.apache.log4j.BasicConfigurator; -import org.apache.log4j.Level; -import org.apache.log4j.Logger; -import org.junit.Before; - -import fr.devinsy.util.strings.StringList; - -/** - * - * @author Christian P. Momon - */ -public class XMLReaderTest -{ - static private org.apache.log4j.Logger logger = org.apache.log4j.Logger.getLogger(XMLReaderTest.class); - - /** - * - */ - @Before - public void before() - { - BasicConfigurator.configure(); - Logger.getRootLogger().setLevel(Level.ERROR); - } - - /** - * @throws XMLStreamException - * @throws FileNotFoundException - * @throws XMLBadFormatException - * - */ - // @Test - public void testFoo01() throws FileNotFoundException, XMLStreamException, XMLBadFormatException - { - // - logger.debug("===== test starting..."); - - // XMLReader in = new XMLReader(new - // File("/home/cpm/C/Puck/TY/Ebrei 08.puc")); - // XMLReader in = new XMLReader(new - // File("/home/cpm/C/Puck/TY/T/kidarep.xml")); - XMLReader in = new XMLReader(new File("/home/cpm/C/Puck/TY/T2/sikevadb-2014-06-08-17h55mn49s.xml")); - - boolean ended = false; - while (!ended) - { - XMLTag tag = in.readTag(); - - if (tag == null) - { - ended = true; - } - else - { - // System.out.println(String.format("tag %s", tag.getLabel())); - } - - // - logger.debug("===== test done."); - } - System.out.println("over"); - } - - /** - * @throws XMLStreamException - * @throws FileNotFoundException - * @throws XMLBadFormatException - * - */ - // @Test - public void testFoo02() throws FileNotFoundException, XMLStreamException, XMLBadFormatException - { - // - logger.debug("===== test starting..."); - - // XMLReader in = new XMLReader(new - // File("/home/cpm/C/Puck/TY/Ebrei 08.puc")); - XMLReader in = new XMLReader(new File("/home/cpm/C/Puck/TY/T/accounts.xml")); - // XMLReader in = new XMLReader(new - // File("/home/cpm/C/Puck/TY/T2/sikevadb-2014-06-08-17h55mn49s.xml")); - - boolean ended = false; - StringList buffer = new StringList(); - while (!ended) - { - XMLTag tag = in.readTag(); - - if (tag == null) - { - ended = true; - } - else - { - if (tag.getContent() != null) - { - System.out.println(buffer.append(tag.getContent())); - } - } - - // - logger.debug("===== test done."); - } - System.out.println("over"); - } - -} diff --git a/test/one/Foo2Test.java b/test/one/Foo2Test.java deleted file mode 100644 index 07ebac5..0000000 --- a/test/one/Foo2Test.java +++ /dev/null @@ -1,19 +0,0 @@ -package one; - -import org.junit.Assert; -import org.junit.Test; - -public class Foo2Test -{ - /** - * - */ - @Test - public void test2a() - { - // logger.debug("===== test starting..."); - Assert.assertEquals(true, true); - // logger.debug("===== test done."); - } - -}