From 7a7bf0b019a1a5b1c9d4273d0a3cbb0a8ddf7b3a Mon Sep 17 00:00:00 2001 From: Emmanuel Bigeon Date: Mon, 8 Oct 2018 15:04:22 -0400 Subject: [PATCH] Update versions, configuration, license, refactor package Signed-off-by: Emmanuel Bigeon --- gclc-process/LICENSE.txt | 517 ++++++++++++++++++ gclc-process/pom.xml | 75 +-- .../gclc/process/CommandForeground.java | 311 ++++++----- .../bigeon/gclc/process/CommandFork.java | 271 +++++---- .../bigeon/gclc/process/ForkCommandTask.java | 179 +++--- .../bigeon/gclc/process/ForkTask.java | 343 ++++++------ .../gclc/process/InterruptionListener.java | 121 ++-- .../gclc/process/ProcessAttachement.java | 161 +++--- .../bigeon/gclc/process/ProcessClear.java | 207 ++++--- .../bigeon/gclc/process/ProcessKill.java | 197 ++++--- .../bigeon/gclc/process/ProcessList.java | 233 ++++---- .../gclc/process/ScreenAttachement.java | 163 +++--- .../{fr => net}/bigeon/gclc/process/Task.java | 189 ++++--- .../bigeon/gclc/process/TaskPool.java | 331 ++++++----- .../bigeon/gclc/process/TaskSpawner.java | 197 ++++--- .../process/io/ConnectingConsoleInput.java | 455 ++++++++------- .../process/io/ConnectingConsoleOutput.java | 325 ++++++----- 17 files changed, 2645 insertions(+), 1630 deletions(-) create mode 100644 gclc-process/LICENSE.txt rename gclc-process/src/main/java/{fr => net}/bigeon/gclc/process/CommandForeground.java (67%) rename gclc-process/src/main/java/{fr => net}/bigeon/gclc/process/CommandFork.java (64%) rename gclc-process/src/main/java/{fr => net}/bigeon/gclc/process/ForkCommandTask.java (55%) rename gclc-process/src/main/java/{fr => net}/bigeon/gclc/process/ForkTask.java (66%) rename gclc-process/src/main/java/{fr => net}/bigeon/gclc/process/InterruptionListener.java (53%) rename gclc-process/src/main/java/{fr => net}/bigeon/gclc/process/ProcessAttachement.java (55%) rename gclc-process/src/main/java/{fr => net}/bigeon/gclc/process/ProcessClear.java (60%) rename gclc-process/src/main/java/{fr => net}/bigeon/gclc/process/ProcessKill.java (60%) rename gclc-process/src/main/java/{fr => net}/bigeon/gclc/process/ProcessList.java (62%) rename gclc-process/src/main/java/{fr => net}/bigeon/gclc/process/ScreenAttachement.java (57%) rename gclc-process/src/main/java/{fr => net}/bigeon/gclc/process/Task.java (64%) rename gclc-process/src/main/java/{fr => net}/bigeon/gclc/process/TaskPool.java (73%) rename gclc-process/src/main/java/{fr => net}/bigeon/gclc/process/TaskSpawner.java (62%) rename gclc-process/src/main/java/{fr => net}/bigeon/gclc/process/io/ConnectingConsoleInput.java (78%) rename gclc-process/src/main/java/{fr => net}/bigeon/gclc/process/io/ConnectingConsoleOutput.java (72%) diff --git a/gclc-process/LICENSE.txt b/gclc-process/LICENSE.txt new file mode 100644 index 0000000..1753629 --- /dev/null +++ b/gclc-process/LICENSE.txt @@ -0,0 +1,517 @@ + CeCILL FREE SOFTWARE LICENSE AGREEMENT + +Version 2.1 dated 2013-06-21 + + + Notice + +This Agreement is a Free Software license agreement that is the result +of discussions between its authors in order to ensure compliance with +the two main principles guiding its drafting: + + * firstly, compliance with the principles governing the distribution + of Free Software: access to source code, broad rights granted to users, + * secondly, the election of a governing law, French law, with which it + is conformant, both as regards the law of torts and intellectual + property law, and the protection that it offers to both authors and + holders of the economic rights over software. + +The authors of the CeCILL (for Ce[a] C[nrs] I[nria] L[ogiciel] L[ibre]) +license are: + +Commissariat à l'énergie atomique et aux énergies alternatives - CEA, a +public scientific, technical and industrial research establishment, +having its principal place of business at 25 rue Leblanc, immeuble Le +Ponant D, 75015 Paris, France. + +Centre National de la Recherche Scientifique - CNRS, a public scientific +and technological establishment, having its principal place of business +at 3 rue Michel-Ange, 75794 Paris cedex 16, France. + +Institut National de Recherche en Informatique et en Automatique - +Inria, a public scientific and technological establishment, having its +principal place of business at Domaine de Voluceau, Rocquencourt, BP +105, 78153 Le Chesnay cedex, France. + + + Preamble + +The purpose of this Free Software license agreement is to grant users +the right to modify and redistribute the software governed by this +license within the framework of an open source distribution model. + +The exercising of this right is conditional upon certain obligations for +users so as to preserve this status for all subsequent redistributions. + +In consideration of access to the source code and the rights to copy, +modify and redistribute granted by the license, users are provided only +with a limited warranty and the software's author, the holder of the +economic rights, and the successive licensors only have limited liability. + +In this respect, the risks associated with loading, using, modifying +and/or developing or reproducing the software by the user are brought to +the user's attention, given its Free Software status, which may make it +complicated to use, with the result that its use is reserved for +developers and experienced professionals having in-depth computer +knowledge. Users are therefore encouraged to load and test the +suitability of the software as regards their requirements in conditions +enabling the security of their systems and/or data to be ensured and, +more generally, to use and operate it in the same conditions of +security. This Agreement may be freely reproduced and published, +provided it is not altered, and that no provisions are either added or +removed herefrom. + +This Agreement may apply to any or all software for which the holder of +the economic rights decides to submit the use thereof to its provisions. + +Frequently asked questions can be found on the official website of the +CeCILL licenses family (http://www.cecill.info/index.en.html) for any +necessary clarification. + + + Article 1 - DEFINITIONS + +For the purpose of this Agreement, when the following expressions +commence with a capital letter, they shall have the following meaning: + +Agreement: means this license agreement, and its possible subsequent +versions and annexes. + +Software: means the software in its Object Code and/or Source Code form +and, where applicable, its documentation, "as is" when the Licensee +accepts the Agreement. + +Initial Software: means the Software in its Source Code and possibly its +Object Code form and, where applicable, its documentation, "as is" when +it is first distributed under the terms and conditions of the Agreement. + +Modified Software: means the Software modified by at least one +Contribution. + +Source Code: means all the Software's instructions and program lines to +which access is required so as to modify the Software. + +Object Code: means the binary files originating from the compilation of +the Source Code. + +Holder: means the holder(s) of the economic rights over the Initial +Software. + +Licensee: means the Software user(s) having accepted the Agreement. + +Contributor: means a Licensee having made at least one Contribution. + +Licensor: means the Holder, or any other individual or legal entity, who +distributes the Software under the Agreement. + +Contribution: means any or all modifications, corrections, translations, +adaptations and/or new functions integrated into the Software by any or +all Contributors, as well as any or all Internal Modules. + +Module: means a set of sources files including their documentation that +enables supplementary functions or services in addition to those offered +by the Software. + +External Module: means any or all Modules, not derived from the +Software, so that this Module and the Software run in separate address +spaces, with one calling the other when they are run. + +Internal Module: means any or all Module, connected to the Software so +that they both execute in the same address space. + +GNU GPL: means the GNU General Public License version 2 or any +subsequent version, as published by the Free Software Foundation Inc. + +GNU Affero GPL: means the GNU Affero General Public License version 3 or +any subsequent version, as published by the Free Software Foundation Inc. + +EUPL: means the European Union Public License version 1.1 or any +subsequent version, as published by the European Commission. + +Parties: mean both the Licensee and the Licensor. + +These expressions may be used both in singular and plural form. + + + Article 2 - PURPOSE + +The purpose of the Agreement is the grant by the Licensor to the +Licensee of a non-exclusive, transferable and worldwide license for the +Software as set forth in Article 5 <#scope> hereinafter for the whole +term of the protection granted by the rights over said Software. + + + Article 3 - ACCEPTANCE + +3.1 The Licensee shall be deemed as having accepted the terms and +conditions of this Agreement upon the occurrence of the first of the +following events: + + * (i) loading the Software by any or all means, notably, by + downloading from a remote server, or by loading from a physical medium; + * (ii) the first time the Licensee exercises any of the rights granted + hereunder. + +3.2 One copy of the Agreement, containing a notice relating to the +characteristics of the Software, to the limited warranty, and to the +fact that its use is restricted to experienced users has been provided +to the Licensee prior to its acceptance as set forth in Article 3.1 +<#accepting> hereinabove, and the Licensee hereby acknowledges that it +has read and understood it. + + + Article 4 - EFFECTIVE DATE AND TERM + + + 4.1 EFFECTIVE DATE + +The Agreement shall become effective on the date when it is accepted by +the Licensee as set forth in Article 3.1 <#accepting>. + + + 4.2 TERM + +The Agreement shall remain in force for the entire legal term of +protection of the economic rights over the Software. + + + Article 5 - SCOPE OF RIGHTS GRANTED + +The Licensor hereby grants to the Licensee, who accepts, the following +rights over the Software for any or all use, and for the term of the +Agreement, on the basis of the terms and conditions set forth hereinafter. + +Besides, if the Licensor owns or comes to own one or more patents +protecting all or part of the functions of the Software or of its +components, the Licensor undertakes not to enforce the rights granted by +these patents against successive Licensees using, exploiting or +modifying the Software. If these patents are transferred, the Licensor +undertakes to have the transferees subscribe to the obligations set +forth in this paragraph. + + + 5.1 RIGHT OF USE + +The Licensee is authorized to use the Software, without any limitation +as to its fields of application, with it being hereinafter specified +that this comprises: + + 1. permanent or temporary reproduction of all or part of the Software + by any or all means and in any or all form. + + 2. loading, displaying, running, or storing the Software on any or all + medium. + + 3. entitlement to observe, study or test its operation so as to + determine the ideas and principles behind any or all constituent + elements of said Software. This shall apply when the Licensee + carries out any or all loading, displaying, running, transmission or + storage operation as regards the Software, that it is entitled to + carry out hereunder. + + + 5.2 ENTITLEMENT TO MAKE CONTRIBUTIONS + +The right to make Contributions includes the right to translate, adapt, +arrange, or make any or all modifications to the Software, and the right +to reproduce the resulting software. + +The Licensee is authorized to make any or all Contributions to the +Software provided that it includes an explicit notice that it is the +author of said Contribution and indicates the date of the creation thereof. + + + 5.3 RIGHT OF DISTRIBUTION + +In particular, the right of distribution includes the right to publish, +transmit and communicate the Software to the general public on any or +all medium, and by any or all means, and the right to market, either in +consideration of a fee, or free of charge, one or more copies of the +Software by any means. + +The Licensee is further authorized to distribute copies of the modified +or unmodified Software to third parties according to the terms and +conditions set forth hereinafter. + + + 5.3.1 DISTRIBUTION OF SOFTWARE WITHOUT MODIFICATION + +The Licensee is authorized to distribute true copies of the Software in +Source Code or Object Code form, provided that said distribution +complies with all the provisions of the Agreement and is accompanied by: + + 1. a copy of the Agreement, + + 2. a notice relating to the limitation of both the Licensor's warranty + and liability as set forth in Articles 8 and 9, + +and that, in the event that only the Object Code of the Software is +redistributed, the Licensee allows effective access to the full Source +Code of the Software for a period of at least three years from the +distribution of the Software, it being understood that the additional +acquisition cost of the Source Code shall not exceed the cost of the +data transfer. + + + 5.3.2 DISTRIBUTION OF MODIFIED SOFTWARE + +When the Licensee makes a Contribution to the Software, the terms and +conditions for the distribution of the resulting Modified Software +become subject to all the provisions of this Agreement. + +The Licensee is authorized to distribute the Modified Software, in +source code or object code form, provided that said distribution +complies with all the provisions of the Agreement and is accompanied by: + + 1. a copy of the Agreement, + + 2. a notice relating to the limitation of both the Licensor's warranty + and liability as set forth in Articles 8 and 9, + +and, in the event that only the object code of the Modified Software is +redistributed, + + 3. a note stating the conditions of effective access to the full source + code of the Modified Software for a period of at least three years + from the distribution of the Modified Software, it being understood + that the additional acquisition cost of the source code shall not + exceed the cost of the data transfer. + + + 5.3.3 DISTRIBUTION OF EXTERNAL MODULES + +When the Licensee has developed an External Module, the terms and +conditions of this Agreement do not apply to said External Module, that +may be distributed under a separate license agreement. + + + 5.3.4 COMPATIBILITY WITH OTHER LICENSES + +The Licensee can include a code that is subject to the provisions of one +of the versions of the GNU GPL, GNU Affero GPL and/or EUPL in the +Modified or unmodified Software, and distribute that entire code under +the terms of the same version of the GNU GPL, GNU Affero GPL and/or EUPL. + +The Licensee can include the Modified or unmodified Software in a code +that is subject to the provisions of one of the versions of the GNU GPL, +GNU Affero GPL and/or EUPL and distribute that entire code under the +terms of the same version of the GNU GPL, GNU Affero GPL and/or EUPL. + + + Article 6 - INTELLECTUAL PROPERTY + + + 6.1 OVER THE INITIAL SOFTWARE + +The Holder owns the economic rights over the Initial Software. Any or +all use of the Initial Software is subject to compliance with the terms +and conditions under which the Holder has elected to distribute its work +and no one shall be entitled to modify the terms and conditions for the +distribution of said Initial Software. + +The Holder undertakes that the Initial Software will remain ruled at +least by this Agreement, for the duration set forth in Article 4.2 <#term>. + + + 6.2 OVER THE CONTRIBUTIONS + +The Licensee who develops a Contribution is the owner of the +intellectual property rights over this Contribution as defined by +applicable law. + + + 6.3 OVER THE EXTERNAL MODULES + +The Licensee who develops an External Module is the owner of the +intellectual property rights over this External Module as defined by +applicable law and is free to choose the type of agreement that shall +govern its distribution. + + + 6.4 JOINT PROVISIONS + +The Licensee expressly undertakes: + + 1. not to remove, or modify, in any manner, the intellectual property + notices attached to the Software; + + 2. to reproduce said notices, in an identical manner, in the copies of + the Software modified or not. + +The Licensee undertakes not to directly or indirectly infringe the +intellectual property rights on the Software of the Holder and/or +Contributors, and to take, where applicable, vis-à-vis its staff, any +and all measures required to ensure respect of said intellectual +property rights of the Holder and/or Contributors. + + + Article 7 - RELATED SERVICES + +7.1 Under no circumstances shall the Agreement oblige the Licensor to +provide technical assistance or maintenance services for the Software. + +However, the Licensor is entitled to offer this type of services. The +terms and conditions of such technical assistance, and/or such +maintenance, shall be set forth in a separate instrument. Only the +Licensor offering said maintenance and/or technical assistance services +shall incur liability therefor. + +7.2 Similarly, any Licensor is entitled to offer to its licensees, under +its sole responsibility, a warranty, that shall only be binding upon +itself, for the redistribution of the Software and/or the Modified +Software, under terms and conditions that it is free to decide. Said +warranty, and the financial terms and conditions of its application, +shall be subject of a separate instrument executed between the Licensor +and the Licensee. + + + Article 8 - LIABILITY + +8.1 Subject to the provisions of Article 8.2, the Licensee shall be +entitled to claim compensation for any direct loss it may have suffered +from the Software as a result of a fault on the part of the relevant +Licensor, subject to providing evidence thereof. + +8.2 The Licensor's liability is limited to the commitments made under +this Agreement and shall not be incurred as a result of in particular: +(i) loss due the Licensee's total or partial failure to fulfill its +obligations, (ii) direct or consequential loss that is suffered by the +Licensee due to the use or performance of the Software, and (iii) more +generally, any consequential loss. In particular the Parties expressly +agree that any or all pecuniary or business loss (i.e. loss of data, +loss of profits, operating loss, loss of customers or orders, +opportunity cost, any disturbance to business activities) or any or all +legal proceedings instituted against the Licensee by a third party, +shall constitute consequential loss and shall not provide entitlement to +any or all compensation from the Licensor. + + + Article 9 - WARRANTY + +9.1 The Licensee acknowledges that the scientific and technical +state-of-the-art when the Software was distributed did not enable all +possible uses to be tested and verified, nor for the presence of +possible defects to be detected. In this respect, the Licensee's +attention has been drawn to the risks associated with loading, using, +modifying and/or developing and reproducing the Software which are +reserved for experienced users. + +The Licensee shall be responsible for verifying, by any or all means, +the suitability of the product for its requirements, its good working +order, and for ensuring that it shall not cause damage to either persons +or properties. + +9.2 The Licensor hereby represents, in good faith, that it is entitled +to grant all the rights over the Software (including in particular the +rights set forth in Article 5 <#scope>). + +9.3 The Licensee acknowledges that the Software is supplied "as is" by +the Licensor without any other express or tacit warranty, other than +that provided for in Article 9.2 <#good-faith> and, in particular, +without any warranty as to its commercial value, its secured, safe, +innovative or relevant nature. + +Specifically, the Licensor does not warrant that the Software is free +from any error, that it will operate without interruption, that it will +be compatible with the Licensee's own equipment and software +configuration, nor that it will meet the Licensee's requirements. + +9.4 The Licensor does not either expressly or tacitly warrant that the +Software does not infringe any third party intellectual property right +relating to a patent, software or any other property right. Therefore, +the Licensor disclaims any and all liability towards the Licensee +arising out of any or all proceedings for infringement that may be +instituted in respect of the use, modification and redistribution of the +Software. Nevertheless, should such proceedings be instituted against +the Licensee, the Licensor shall provide it with technical and legal +expertise for its defense. Such technical and legal expertise shall be +decided on a case-by-case basis between the relevant Licensor and the +Licensee pursuant to a memorandum of understanding. The Licensor +disclaims any and all liability as regards the Licensee's use of the +name of the Software. No warranty is given as regards the existence of +prior rights over the name of the Software or as regards the existence +of a trademark. + + + Article 10 - TERMINATION + +10.1 In the event of a breach by the Licensee of its obligations +hereunder, the Licensor may automatically terminate this Agreement +thirty (30) days after notice has been sent to the Licensee and has +remained ineffective. + +10.2 A Licensee whose Agreement is terminated shall no longer be +authorized to use, modify or distribute the Software. However, any +licenses that it may have granted prior to termination of the Agreement +shall remain valid subject to their having been granted in compliance +with the terms and conditions hereof. + + + Article 11 - MISCELLANEOUS + + + 11.1 EXCUSABLE EVENTS + +Neither Party shall be liable for any or all delay, or failure to +perform the Agreement, that may be attributable to an event of force +majeure, an act of God or an outside cause, such as defective +functioning or interruptions of the electricity or telecommunications +networks, network paralysis following a virus attack, intervention by +government authorities, natural disasters, water damage, earthquakes, +fire, explosions, strikes and labor unrest, war, etc. + +11.2 Any failure by either Party, on one or more occasions, to invoke +one or more of the provisions hereof, shall under no circumstances be +interpreted as being a waiver by the interested Party of its right to +invoke said provision(s) subsequently. + +11.3 The Agreement cancels and replaces any or all previous agreements, +whether written or oral, between the Parties and having the same +purpose, and constitutes the entirety of the agreement between said +Parties concerning said purpose. No supplement or modification to the +terms and conditions hereof shall be effective as between the Parties +unless it is made in writing and signed by their duly authorized +representatives. + +11.4 In the event that one or more of the provisions hereof were to +conflict with a current or future applicable act or legislative text, +said act or legislative text shall prevail, and the Parties shall make +the necessary amendments so as to comply with said act or legislative +text. All other provisions shall remain effective. Similarly, invalidity +of a provision of the Agreement, for any reason whatsoever, shall not +cause the Agreement as a whole to be invalid. + + + 11.5 LANGUAGE + +The Agreement is drafted in both French and English and both versions +are deemed authentic. + + + Article 12 - NEW VERSIONS OF THE AGREEMENT + +12.1 Any person is authorized to duplicate and distribute copies of this +Agreement. + +12.2 So as to ensure coherence, the wording of this Agreement is +protected and may only be modified by the authors of the License, who +reserve the right to periodically publish updates or new versions of the +Agreement, each with a separate number. These subsequent versions may +address new issues encountered by Free Software. + +12.3 Any Software distributed under a given version of the Agreement may +only be subsequently distributed under the same version of the Agreement +or a subsequent version, subject to the provisions of Article 5.3.4 +<#compatibility>. + + + Article 13 - GOVERNING LAW AND JURISDICTION + +13.1 The Agreement is governed by French law. The Parties agree to +endeavor to seek an amicable solution to any disagreements or disputes +that may arise during the performance of the Agreement. + +13.2 Failing an amicable solution within two (2) months as from their +occurrence, and unless emergency proceedings are necessary, the +disagreements or disputes shall be referred to the Paris Courts having +jurisdiction, by the more diligent Party. diff --git a/gclc-process/pom.xml b/gclc-process/pom.xml index be78cd1..876504b 100644 --- a/gclc-process/pom.xml +++ b/gclc-process/pom.xml @@ -29,41 +29,10 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 4.0.0 - fr.bigeon.gclc + net.bigeon.gclc process 0.0.3-SNAPSHOT jar @@ -73,21 +42,55 @@ UTF-8 + emmanuel@bigeon.fr + cecill_2.1 - fr.bigeon.config + net.bigeon.config ebigeon-config - 1.8.2 + 1.8.4 - fr.bigeon + net.bigeon gclc - 2.0.5 + 2.0.7 + + + manual + CeCILL 2.1 + https://cecill.info/licences/Licence_CeCILL_V2.1-en.html + + + + + + org.apache.maven.plugins + maven-javadoc-plugin + 2.10.3 + + + com.github.sevntu-checkstyle + dsm-maven-plugin + 2.2.0 + + + + + + emmanuel@bigeon.fr + Emmanuel Bigeon + bigeon.net + + PM + + + + process-0.0.1 scm:git:gogs@git.code.bigeon.net:emmanuel/gclc.git diff --git a/gclc-process/src/main/java/fr/bigeon/gclc/process/CommandForeground.java b/gclc-process/src/main/java/net/bigeon/gclc/process/CommandForeground.java similarity index 67% rename from gclc-process/src/main/java/fr/bigeon/gclc/process/CommandForeground.java rename to gclc-process/src/main/java/net/bigeon/gclc/process/CommandForeground.java index 2271845..e58c46a 100644 --- a/gclc-process/src/main/java/fr/bigeon/gclc/process/CommandForeground.java +++ b/gclc-process/src/main/java/net/bigeon/gclc/process/CommandForeground.java @@ -1,139 +1,172 @@ -/* - * process, Distribution repositories and basic setup for Emmanuel Bigeon projects - * Copyright (C) 2014-2018 E. Bigeon - * mailto:emmanuel@bigeon.fr - * - * This software is governed by the CeCILL license under French law and - * abiding by the rules of distribution of free software. You can use, - * modify and/or redistribute the software under the terms of the CeCILL - * license as circulated by CEA, CNRS and INRIA at the following URL - * "http://www.cecill.info". - * - * As a counterpart to the access to the source code and rights to copy, - * modify and redistribute granted by the license, users are provided only - * with a limited warranty and the software's author, the holder of the - * economic rights, and the successive licensors have only limited - * liability. - * - * In this respect, the user's attention is drawn to the risks associated - * with loading, using, modifying and/or developing or reproducing the - * software by the user in light of its specific status of free software, - * that may mean that it is complicated to manipulate, and that also - * therefore means that it is reserved for developers and experienced - * professionals having in-depth computer knowledge. Users are therefore - * encouraged to load and test the software's suitability as regards their - * requirements in conditions enabling the security of their systems and/or - * data to be ensured and, more generally, to use and operate it in the - * same conditions as regards security. - * - * The fact that you are presently reading this means that you have had - * knowledge of the CeCILL license and that you accept its terms. - */ -/** - * gclc-process:fr.bigeon.gclc.process.CommandFork.java - * Created on: Nov 13, 2017 - */ -package fr.bigeon.gclc.process; - -import java.util.List; - -import fr.bigeon.gclc.command.CommandParameters; -import fr.bigeon.gclc.command.ParametrizedCommand; -import fr.bigeon.gclc.exception.CommandRunException; -import fr.bigeon.gclc.exception.CommandRunExceptionType; -import fr.bigeon.gclc.exception.InvalidParameterException; -import fr.bigeon.gclc.manager.ConsoleInput; -import fr.bigeon.gclc.manager.ConsoleOutput; - -/** A command that is launched inside an internal terminal. - *

- * Several things are to be considered before adding this command to an - * application: - *

    - *
  • The commands will be able to run in parallel. - *
  • The managing of the commands will be handled through piped systems and - * buffered in so switching to a forked command will actually print again all - * the command history to the output console. - *
- * - * @author Emmanuel Bigeon */ -public class CommandForeground extends ParametrizedCommand { - - private final TaskPool pool; - - /** Add the fork command. - * - * @param name the command name - * @param pool The pool to get joinable tasks from */ - public CommandForeground(final String name, TaskPool pool) { - super(name, false); - this.pool = pool; - addParameters(); - } - - /** - * - */ - private void addParameters() { - try { - addStringParameter("pid", false); - addStringParameter("delai", false); - } catch (final InvalidParameterException e) { - // TODO Auto-generated catch block - e.printStackTrace(); - } - } - - /* (non-Javadoc) - * @see fr.bigeon.gclc.command.ParametrizedCommand#doExecute(fr.bigeon.gclc. - * manager.ConsoleOutput, fr.bigeon.gclc.manager.ConsoleInput, - * fr.bigeon.gclc.command.CommandParameters) */ - @Override - protected void doExecute(final ConsoleOutput out, final ConsoleInput in, - final CommandParameters parameters) throws CommandRunException { - String string = parameters.get("pid"); - final List additionals = parameters.getAdditionals(); - if (string == null && !additionals.isEmpty()) { - string = additionals.get(0); - } - if (string == null) { - throw new CommandRunException(CommandRunExceptionType.USAGE, - "Missing process id", this); - } - // Join the command. - final Task cmd = pool.get(string); - if (!(cmd instanceof ForkTask)) { - throw new CommandRunException("No such forked process", this); - } - long delai = 0; - final String delaiOpt = parameters.get("delai"); - if (delaiOpt != null) { - delai = Long.parseLong(delaiOpt) * 1000; - } - if (delai < 0) { - throw new CommandRunException("Join delai cannot be negative", this); - } - ((ForkTask) cmd).join(out, in, delai); - } - - /* (non-Javadoc) - * @see fr.bigeon.gclc.command.ICommand#tip() */ - @Override - public String tip() { - return "Join the execution of a command, for a given amount of time"; - } - - /* (non-Javadoc) - * @see fr.bigeon.gclc.command.Command#usageDetail() */ - @Override - protected String usageDetail() { - return ""; - } - - /* (non-Javadoc) - * @see fr.bigeon.gclc.command.Command#usagePattern() */ - @Override - protected String usagePattern() { - return super.usagePattern() + " [(-pid) ] ([-delai ])"; - } -} +/* + * process, Distribution repositories and basic setup for Emmanuel Bigeon projects + * Copyright (C) 2014-2018 E. Bigeon + * mailto:emmanuel@bigeon.fr + * + * This software is governed by the CeCILL license under French law and + * abiding by the rules of distribution of free software. You can use, + * modify and/or redistribute the software under the terms of the CeCILL + * license as circulated by CEA, CNRS and INRIA at the following URL + * "http://www.cecill.info". + * + * As a counterpart to the access to the source code and rights to copy, + * modify and redistribute granted by the license, users are provided only + * with a limited warranty and the software's author, the holder of the + * economic rights, and the successive licensors have only limited + * liability. + * + * In this respect, the user's attention is drawn to the risks associated + * with loading, using, modifying and/or developing or reproducing the + * software by the user in light of its specific status of free software, + * that may mean that it is complicated to manipulate, and that also + * therefore means that it is reserved for developers and experienced + * professionals having in-depth computer knowledge. Users are therefore + * encouraged to load and test the software's suitability as regards their + * requirements in conditions enabling the security of their systems and/or + * data to be ensured and, more generally, to use and operate it in the + * same conditions as regards security. + * + * The fact that you are presently reading this means that you have had + * knowledge of the CeCILL license and that you accept its terms. + */ +/** + * gclc-process:net.bigeon.gclc.process.CommandFork.java + * Created on: Nov 13, 2017 + */ +package net.bigeon.gclc.process; + +/*- + * #%L + * process + * %% + * Copyright (C) 2014 - 2018 Bigeon + * %% + * This software is governed by the CeCILL license under French law and + * abiding by the rules of distribution of free software. You can use, + * modify and/ or redistribute the software under the terms of the CeCILL + * license as circulated by CEA, CNRS and INRIA at the following URL + * "http://www.cecill.info". + * + * As a counterpart to the access to the source code and rights to copy, + * modify and redistribute granted by the license, users are provided only + * with a limited warranty and the software's author, the holder of the + * economic rights, and the successive licensors have only limited + * liability. + * + * In this respect, the user's attention is drawn to the risks associated + * with loading, using, modifying and/or developing or reproducing the + * software by the user in light of its specific status of free software, + * that may mean that it is complicated to manipulate, and that also + * therefore means that it is reserved for developers and experienced + * professionals having in-depth computer knowledge. Users are therefore + * encouraged to load and test the software's suitability as regards their + * requirements in conditions enabling the security of their systems and/or + * data to be ensured and, more generally, to use and operate it in the + * same conditions as regards security. + * + * The fact that you are presently reading this means that you have had + * knowledge of the CeCILL license and that you accept its terms. + * #L% + */ +import java.util.List; + +import net.bigeon.gclc.command.CommandParameters; +import net.bigeon.gclc.command.ParametrizedCommand; +import net.bigeon.gclc.exception.CommandRunException; +import net.bigeon.gclc.exception.CommandRunExceptionType; +import net.bigeon.gclc.exception.InvalidParameterException; +import net.bigeon.gclc.manager.ConsoleInput; +import net.bigeon.gclc.manager.ConsoleOutput; + +/** A command that is launched inside an internal terminal. + *

+ * Several things are to be considered before adding this command to an + * application: + *

    + *
  • The commands will be able to run in parallel. + *
  • The managing of the commands will be handled through piped systems and + * buffered in so switching to a forked command will actually print again all + * the command history to the output console. + *
+ * + * @author Emmanuel Bigeon */ +public class CommandForeground extends ParametrizedCommand { + + private final TaskPool pool; + + /** Add the fork command. + * + * @param name the command name + * @param pool The pool to get joinable tasks from */ + public CommandForeground(final String name, TaskPool pool) { + super(name, false); + this.pool = pool; + addParameters(); + } + + /** + * + */ + private void addParameters() { + try { + addStringParameter("pid", false); + addStringParameter("delai", false); + } catch (final InvalidParameterException e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } + } + + /* (non-Javadoc) + * @see fr.bigeon.gclc.command.ParametrizedCommand#doExecute(fr.bigeon.gclc. + * manager.ConsoleOutput, fr.bigeon.gclc.manager.ConsoleInput, + * fr.bigeon.gclc.command.CommandParameters) */ + @Override + protected void doExecute(final ConsoleOutput out, final ConsoleInput in, + final CommandParameters parameters) throws CommandRunException { + String string = parameters.get("pid"); + final List additionals = parameters.getAdditionals(); + if (string == null && !additionals.isEmpty()) { + string = additionals.get(0); + } + if (string == null) { + throw new CommandRunException(CommandRunExceptionType.USAGE, + "Missing process id"); + } + // Join the command. + final Task cmd = pool.get(string); + if (!(cmd instanceof ForkTask)) { + throw new CommandRunException("No such forked process"); + } + long delai = 0; + final String delaiOpt = parameters.get("delai"); + if (delaiOpt != null) { + delai = Long.parseLong(delaiOpt) * 1000; + } + if (delai < 0) { + throw new CommandRunException("Join delai cannot be negative"); + } + ((ForkTask) cmd).join(out, in, delai); + } + + /* (non-Javadoc) + * @see fr.bigeon.gclc.command.ICommand#tip() */ + @Override + public String tip() { + return "Join the execution of a command, for a given amount of time"; + } + + /* (non-Javadoc) + * @see fr.bigeon.gclc.command.Command#usageDetail() */ + @Override + protected String usageDetail() { + return ""; + } + + /* (non-Javadoc) + * @see fr.bigeon.gclc.command.Command#usagePattern() */ + @Override + protected String usagePattern() { + return super.usagePattern() + " [(-pid) ] ([-delai ])"; + } +} diff --git a/gclc-process/src/main/java/fr/bigeon/gclc/process/CommandFork.java b/gclc-process/src/main/java/net/bigeon/gclc/process/CommandFork.java similarity index 64% rename from gclc-process/src/main/java/fr/bigeon/gclc/process/CommandFork.java rename to gclc-process/src/main/java/net/bigeon/gclc/process/CommandFork.java index a2b7c44..3d12015 100644 --- a/gclc-process/src/main/java/fr/bigeon/gclc/process/CommandFork.java +++ b/gclc-process/src/main/java/net/bigeon/gclc/process/CommandFork.java @@ -1,119 +1,152 @@ -/* - * process, Distribution repositories and basic setup for Emmanuel Bigeon projects - * Copyright (C) 2014-2018 E. Bigeon - * mailto:emmanuel@bigeon.fr - * - * This software is governed by the CeCILL license under French law and - * abiding by the rules of distribution of free software. You can use, - * modify and/or redistribute the software under the terms of the CeCILL - * license as circulated by CEA, CNRS and INRIA at the following URL - * "http://www.cecill.info". - * - * As a counterpart to the access to the source code and rights to copy, - * modify and redistribute granted by the license, users are provided only - * with a limited warranty and the software's author, the holder of the - * economic rights, and the successive licensors have only limited - * liability. - * - * In this respect, the user's attention is drawn to the risks associated - * with loading, using, modifying and/or developing or reproducing the - * software by the user in light of its specific status of free software, - * that may mean that it is complicated to manipulate, and that also - * therefore means that it is reserved for developers and experienced - * professionals having in-depth computer knowledge. Users are therefore - * encouraged to load and test the software's suitability as regards their - * requirements in conditions enabling the security of their systems and/or - * data to be ensured and, more generally, to use and operate it in the - * same conditions as regards security. - * - * The fact that you are presently reading this means that you have had - * knowledge of the CeCILL license and that you accept its terms. - */ -/** - * gclc-process:fr.bigeon.gclc.process.CommandFork.java - * Created on: Nov 13, 2017 - */ -package fr.bigeon.gclc.process; - -import java.util.Arrays; - -import fr.bigeon.gclc.command.Command; -import fr.bigeon.gclc.command.ICommand; -import fr.bigeon.gclc.command.ICommandProvider; -import fr.bigeon.gclc.exception.CommandRunException; -import fr.bigeon.gclc.manager.ConsoleInput; -import fr.bigeon.gclc.manager.ConsoleOutput; - -/** A command that is launched inside an internal terminal. - *

- * Several things are to be considered before adding this command to an - * application: - *

    - *
  • The commands will be able to run in parallel. - *
  • The managing of the commands will be handled through piped systems and - * buffered in so switching to a forked command will actually print again all - * the command history to the output console. - *
- * - * @author Emmanuel Bigeon */ -public class CommandFork extends Command { - - private final TaskPool pool; - private final ICommandProvider provider; - private final int lines; - - /** Add the fork command. - * - * @param name the command name - * @param provider the allowed command collection */ - public CommandFork(final String name, ICommandProvider provider, TaskPool pool) { - this(name, provider, pool, -1); - } - - /** Add the fork command. - * - * @param name the command name - * @param provider the allowed command collection */ - public CommandFork(final String name, ICommandProvider provider, TaskPool pool, - int lines) { - super(name); - this.provider = provider; - this.pool = pool; - this.lines = lines; - } - - @Override - public void execute(final ConsoleOutput out, final ConsoleInput in, String... args) - throws CommandRunException { - if (args.length < 1) { - throw new CommandRunException("No command to fork", this); - } - final ICommand cmd = provider.get(args[0]); - final String[] inner = Arrays.copyOfRange(args, 1, args.length); - final ForkTask task = new ForkCommandTask(cmd, inner, lines); - final Thread th = new Thread(task); - pool.add(task); - th.start(); - } - - /* (non-Javadoc) - * @see fr.bigeon.gclc.command.ICommand#tip() */ - @Override - public String tip() { - return "Command background launch"; - } - - /* (non-Javadoc) - * @see fr.bigeon.gclc.command.Command#usageDetail() */ - @Override - protected String usageDetail() { - return ""; - } - - /* (non-Javadoc) - * @see fr.bigeon.gclc.command.Command#usagePattern() */ - @Override - protected String usagePattern() { - return super.usagePattern() + " "; - } -} +/* + * process, Distribution repositories and basic setup for Emmanuel Bigeon projects + * Copyright (C) 2014-2018 E. Bigeon + * mailto:emmanuel@bigeon.fr + * + * This software is governed by the CeCILL license under French law and + * abiding by the rules of distribution of free software. You can use, + * modify and/or redistribute the software under the terms of the CeCILL + * license as circulated by CEA, CNRS and INRIA at the following URL + * "http://www.cecill.info". + * + * As a counterpart to the access to the source code and rights to copy, + * modify and redistribute granted by the license, users are provided only + * with a limited warranty and the software's author, the holder of the + * economic rights, and the successive licensors have only limited + * liability. + * + * In this respect, the user's attention is drawn to the risks associated + * with loading, using, modifying and/or developing or reproducing the + * software by the user in light of its specific status of free software, + * that may mean that it is complicated to manipulate, and that also + * therefore means that it is reserved for developers and experienced + * professionals having in-depth computer knowledge. Users are therefore + * encouraged to load and test the software's suitability as regards their + * requirements in conditions enabling the security of their systems and/or + * data to be ensured and, more generally, to use and operate it in the + * same conditions as regards security. + * + * The fact that you are presently reading this means that you have had + * knowledge of the CeCILL license and that you accept its terms. + */ +/** + * gclc-process:net.bigeon.gclc.process.CommandFork.java + * Created on: Nov 13, 2017 + */ +package net.bigeon.gclc.process; + +/*- + * #%L + * process + * %% + * Copyright (C) 2014 - 2018 Bigeon + * %% + * This software is governed by the CeCILL license under French law and + * abiding by the rules of distribution of free software. You can use, + * modify and/ or redistribute the software under the terms of the CeCILL + * license as circulated by CEA, CNRS and INRIA at the following URL + * "http://www.cecill.info". + * + * As a counterpart to the access to the source code and rights to copy, + * modify and redistribute granted by the license, users are provided only + * with a limited warranty and the software's author, the holder of the + * economic rights, and the successive licensors have only limited + * liability. + * + * In this respect, the user's attention is drawn to the risks associated + * with loading, using, modifying and/or developing or reproducing the + * software by the user in light of its specific status of free software, + * that may mean that it is complicated to manipulate, and that also + * therefore means that it is reserved for developers and experienced + * professionals having in-depth computer knowledge. Users are therefore + * encouraged to load and test the software's suitability as regards their + * requirements in conditions enabling the security of their systems and/or + * data to be ensured and, more generally, to use and operate it in the + * same conditions as regards security. + * + * The fact that you are presently reading this means that you have had + * knowledge of the CeCILL license and that you accept its terms. + * #L% + */ +import java.util.Arrays; + +import net.bigeon.gclc.command.Command; +import net.bigeon.gclc.command.ICommand; +import net.bigeon.gclc.command.ICommandProvider; +import net.bigeon.gclc.exception.CommandRunException; +import net.bigeon.gclc.manager.ConsoleInput; +import net.bigeon.gclc.manager.ConsoleOutput; + +/** A command that is launched inside an internal terminal. + *

+ * Several things are to be considered before adding this command to an + * application: + *

    + *
  • The commands will be able to run in parallel. + *
  • The managing of the commands will be handled through piped systems and + * buffered in so switching to a forked command will actually print again all + * the command history to the output console. + *
+ * + * @author Emmanuel Bigeon */ +public class CommandFork extends Command { + + private final TaskPool pool; + private final ICommandProvider provider; + private final int lines; + + /** Add the fork command. + * + * @param name the command name + * @param provider the allowed command collection */ + public CommandFork(final String name, ICommandProvider provider, TaskPool pool) { + this(name, provider, pool, -1); + } + + /** Add the fork command. + * + * @param name the command name + * @param provider the allowed command collection */ + public CommandFork(final String name, ICommandProvider provider, TaskPool pool, + int lines) { + super(name); + this.provider = provider; + this.pool = pool; + this.lines = lines; + } + + @Override + public void execute(final ConsoleOutput out, final ConsoleInput in, String... args) + throws CommandRunException { + if (args.length < 1) { + throw new CommandRunException("No command to fork"); + } + final ICommand cmd = provider.get(args[0]); + final String[] inner = Arrays.copyOfRange(args, 1, args.length); + final ForkTask task = new ForkCommandTask(cmd, inner, lines); + final Thread th = new Thread(task); + pool.add(task); + th.start(); + } + + /* (non-Javadoc) + * @see fr.bigeon.gclc.command.ICommand#tip() */ + @Override + public String tip() { + return "Command background launch"; + } + + /* (non-Javadoc) + * @see fr.bigeon.gclc.command.Command#usageDetail() */ + @Override + protected String usageDetail() { + return ""; + } + + /* (non-Javadoc) + * @see fr.bigeon.gclc.command.Command#usagePattern() */ + @Override + protected String usagePattern() { + return super.usagePattern() + " "; + } +} diff --git a/gclc-process/src/main/java/fr/bigeon/gclc/process/ForkCommandTask.java b/gclc-process/src/main/java/net/bigeon/gclc/process/ForkCommandTask.java similarity index 55% rename from gclc-process/src/main/java/fr/bigeon/gclc/process/ForkCommandTask.java rename to gclc-process/src/main/java/net/bigeon/gclc/process/ForkCommandTask.java index 3e1b82b..a449986 100644 --- a/gclc-process/src/main/java/fr/bigeon/gclc/process/ForkCommandTask.java +++ b/gclc-process/src/main/java/net/bigeon/gclc/process/ForkCommandTask.java @@ -1,73 +1,106 @@ -/* - * process, Distribution repositories and basic setup for Emmanuel Bigeon projects - * Copyright (C) 2014-2018 E. Bigeon - * mailto:emmanuel@bigeon.fr - * - * This software is governed by the CeCILL license under French law and - * abiding by the rules of distribution of free software. You can use, - * modify and/or redistribute the software under the terms of the CeCILL - * license as circulated by CEA, CNRS and INRIA at the following URL - * "http://www.cecill.info". - * - * As a counterpart to the access to the source code and rights to copy, - * modify and redistribute granted by the license, users are provided only - * with a limited warranty and the software's author, the holder of the - * economic rights, and the successive licensors have only limited - * liability. - * - * In this respect, the user's attention is drawn to the risks associated - * with loading, using, modifying and/or developing or reproducing the - * software by the user in light of its specific status of free software, - * that may mean that it is complicated to manipulate, and that also - * therefore means that it is reserved for developers and experienced - * professionals having in-depth computer knowledge. Users are therefore - * encouraged to load and test the software's suitability as regards their - * requirements in conditions enabling the security of their systems and/or - * data to be ensured and, more generally, to use and operate it in the - * same conditions as regards security. - * - * The fact that you are presently reading this means that you have had - * knowledge of the CeCILL license and that you accept its terms. - */ -/** - * - */ -package fr.bigeon.gclc.process; - -import java.util.Arrays; - -import fr.bigeon.gclc.command.ICommand; -import fr.bigeon.gclc.exception.CommandRunException; - -/** - * @author Emmanuel Bigeon - * - */ -public class ForkCommandTask extends ForkTask { - private final ICommand command; - private final String[] args; - - /** @param cmd the command - * @param args the arguements - * @param lines the number of print to store in the output */ - public ForkCommandTask(final ICommand cmd, final String[] args, int lines) { - super(lines); - command = cmd; - this.args = Arrays.copyOf(args, args.length); - } - - /* (non-Javadoc) - * @see fr.bigeon.gclc.process.Task#getName() */ - @Override - public String getName() { - return command.getCommandName(); - } - - /* (non-Javadoc) - * @see fr.bigeon.gclc.process.ForkTask#doRun() */ - @Override - protected void doRun() throws CommandRunException { - command.execute(out, in, args); - } - -} +/* + * process, Distribution repositories and basic setup for Emmanuel Bigeon projects + * Copyright (C) 2014-2018 E. Bigeon + * mailto:emmanuel@bigeon.fr + * + * This software is governed by the CeCILL license under French law and + * abiding by the rules of distribution of free software. You can use, + * modify and/or redistribute the software under the terms of the CeCILL + * license as circulated by CEA, CNRS and INRIA at the following URL + * "http://www.cecill.info". + * + * As a counterpart to the access to the source code and rights to copy, + * modify and redistribute granted by the license, users are provided only + * with a limited warranty and the software's author, the holder of the + * economic rights, and the successive licensors have only limited + * liability. + * + * In this respect, the user's attention is drawn to the risks associated + * with loading, using, modifying and/or developing or reproducing the + * software by the user in light of its specific status of free software, + * that may mean that it is complicated to manipulate, and that also + * therefore means that it is reserved for developers and experienced + * professionals having in-depth computer knowledge. Users are therefore + * encouraged to load and test the software's suitability as regards their + * requirements in conditions enabling the security of their systems and/or + * data to be ensured and, more generally, to use and operate it in the + * same conditions as regards security. + * + * The fact that you are presently reading this means that you have had + * knowledge of the CeCILL license and that you accept its terms. + */ +/** + * + */ +package net.bigeon.gclc.process; + +/*- + * #%L + * process + * %% + * Copyright (C) 2014 - 2018 Bigeon + * %% + * This software is governed by the CeCILL license under French law and + * abiding by the rules of distribution of free software. You can use, + * modify and/ or redistribute the software under the terms of the CeCILL + * license as circulated by CEA, CNRS and INRIA at the following URL + * "http://www.cecill.info". + * + * As a counterpart to the access to the source code and rights to copy, + * modify and redistribute granted by the license, users are provided only + * with a limited warranty and the software's author, the holder of the + * economic rights, and the successive licensors have only limited + * liability. + * + * In this respect, the user's attention is drawn to the risks associated + * with loading, using, modifying and/or developing or reproducing the + * software by the user in light of its specific status of free software, + * that may mean that it is complicated to manipulate, and that also + * therefore means that it is reserved for developers and experienced + * professionals having in-depth computer knowledge. Users are therefore + * encouraged to load and test the software's suitability as regards their + * requirements in conditions enabling the security of their systems and/or + * data to be ensured and, more generally, to use and operate it in the + * same conditions as regards security. + * + * The fact that you are presently reading this means that you have had + * knowledge of the CeCILL license and that you accept its terms. + * #L% + */ +import java.util.Arrays; + +import net.bigeon.gclc.command.ICommand; +import net.bigeon.gclc.exception.CommandRunException; + +/** + * @author Emmanuel Bigeon + * + */ +public class ForkCommandTask extends ForkTask { + private final ICommand command; + private final String[] args; + + /** @param cmd the command + * @param args the arguements + * @param lines the number of print to store in the output */ + public ForkCommandTask(final ICommand cmd, final String[] args, int lines) { + super(lines); + command = cmd; + this.args = Arrays.copyOf(args, args.length); + } + + /* (non-Javadoc) + * @see net.bigeon.gclc.process.Task#getName() */ + @Override + public String getName() { + return command.getCommandName(); + } + + /* (non-Javadoc) + * @see net.bigeon.gclc.process.ForkTask#doRun() */ + @Override + protected void doRun() throws CommandRunException { + command.execute(out, in, args); + } + +} diff --git a/gclc-process/src/main/java/fr/bigeon/gclc/process/ForkTask.java b/gclc-process/src/main/java/net/bigeon/gclc/process/ForkTask.java similarity index 66% rename from gclc-process/src/main/java/fr/bigeon/gclc/process/ForkTask.java rename to gclc-process/src/main/java/net/bigeon/gclc/process/ForkTask.java index 7792741..1557a5c 100644 --- a/gclc-process/src/main/java/fr/bigeon/gclc/process/ForkTask.java +++ b/gclc-process/src/main/java/net/bigeon/gclc/process/ForkTask.java @@ -1,155 +1,188 @@ -/* - * process, Distribution repositories and basic setup for Emmanuel Bigeon projects - * Copyright (C) 2014-2018 E. Bigeon - * mailto:emmanuel@bigeon.fr - * - * This software is governed by the CeCILL license under French law and - * abiding by the rules of distribution of free software. You can use, - * modify and/or redistribute the software under the terms of the CeCILL - * license as circulated by CEA, CNRS and INRIA at the following URL - * "http://www.cecill.info". - * - * As a counterpart to the access to the source code and rights to copy, - * modify and redistribute granted by the license, users are provided only - * with a limited warranty and the software's author, the holder of the - * economic rights, and the successive licensors have only limited - * liability. - * - * In this respect, the user's attention is drawn to the risks associated - * with loading, using, modifying and/or developing or reproducing the - * software by the user in light of its specific status of free software, - * that may mean that it is complicated to manipulate, and that also - * therefore means that it is reserved for developers and experienced - * professionals having in-depth computer knowledge. Users are therefore - * encouraged to load and test the software's suitability as regards their - * requirements in conditions enabling the security of their systems and/or - * data to be ensured and, more generally, to use and operate it in the - * same conditions as regards security. - * - * The fact that you are presently reading this means that you have had - * knowledge of the CeCILL license and that you accept its terms. - */ -/** - * gclc-process:fr.bigeon.gclc.process.ForkTask.java - * Created on: Nov 13, 2017 - */ -package fr.bigeon.gclc.process; - -import java.util.HashSet; -import java.util.Set; - -import fr.bigeon.gclc.exception.CommandRunException; -import fr.bigeon.gclc.manager.ConsoleInput; -import fr.bigeon.gclc.manager.ConsoleOutput; -import fr.bigeon.gclc.process.io.ConnectingConsoleInput; -import fr.bigeon.gclc.process.io.ConnectingConsoleOutput; - -/** - *

- * TODO - * - * @author Emmanuel Bigeon */ -public abstract class ForkTask implements Task { - - private final Set listeners = new HashSet<>(); - private boolean running = false; - - protected final ConnectingConsoleInput in = new ConnectingConsoleInput(); - protected final ConnectingConsoleOutput out; - private CommandRunException exception; - private final Object runLock = new Object(); - - /** @param lines the number of print to store in the output */ - public ForkTask(int lines) { - out = new ConnectingConsoleOutput(ConnectingConsoleOutput.PERSIST, lines); - } - - /* (non-Javadoc) - * @see fr.bigeon.gclc.process.Task#addInterruptionListener(fr.bigeon.gclc. - * process.InterruptionListener) */ - @Override - public final void addInterruptionListener(final InterruptionListener listener) { - listeners.add(listener); - } - - /* (non-Javadoc) - * @see fr.bigeon.gclc.process.Task#isRunning() */ - @Override - public final boolean isRunning() { - synchronized (runLock) { - return running; - } - } - - /** @param out the console output - * @param in the console input - * @param timeout the maximal wait (0 for ever) */ - public final void join(final ConsoleOutput out, final ConsoleInput in, long timeout) { - synchronized (runLock) { - this.out.connect(out); - this.in.connect(in); - try { - if (running) { - runLock.wait(timeout); - } - } catch (final InterruptedException e) { - // TODO log. - Thread.currentThread().interrupt(); - } - this.out.disconnect(); - this.in.disconnect(); - } - } - - /* (non-Javadoc) - * @see - * fr.bigeon.gclc.process.Task#rmInterruptionListener(fr.bigeon.gclc.process - * .InterruptionListener) */ - @Override - public final void rmInterruptionListener(final InterruptionListener listener) { - listeners.remove(listener); - } - - /* (non-Javadoc) - * @see java.lang.Runnable#run() */ - @Override - public final void run() { - synchronized (runLock) { - running = true; - } - try { - doRun(); - } catch (final CommandRunException e) { - exception = e; - } finally { - setRunning(false); - } - for (final InterruptionListener interruptionListener : listeners) { - interruptionListener.interrupted(); - } - } - - /** Actually run the fork. */ - protected abstract void doRun() throws CommandRunException; - - /** Get the excepion that caused a failure. - * - * @return the exception */ - public final CommandRunException getException() { - return exception; - } - - /* (non-Javadoc) - * @see fr.bigeon.gclc.process.Task#setRunning(boolean) */ - @Override - public final void setRunning(final boolean running) { - synchronized (runLock) { - this.running = running; - runLock.notifyAll(); - } - } - - protected final Object getRunningLock() { - return runLock; - } -} +/* + * process, Distribution repositories and basic setup for Emmanuel Bigeon projects + * Copyright (C) 2014-2018 E. Bigeon + * mailto:emmanuel@bigeon.fr + * + * This software is governed by the CeCILL license under French law and + * abiding by the rules of distribution of free software. You can use, + * modify and/or redistribute the software under the terms of the CeCILL + * license as circulated by CEA, CNRS and INRIA at the following URL + * "http://www.cecill.info". + * + * As a counterpart to the access to the source code and rights to copy, + * modify and redistribute granted by the license, users are provided only + * with a limited warranty and the software's author, the holder of the + * economic rights, and the successive licensors have only limited + * liability. + * + * In this respect, the user's attention is drawn to the risks associated + * with loading, using, modifying and/or developing or reproducing the + * software by the user in light of its specific status of free software, + * that may mean that it is complicated to manipulate, and that also + * therefore means that it is reserved for developers and experienced + * professionals having in-depth computer knowledge. Users are therefore + * encouraged to load and test the software's suitability as regards their + * requirements in conditions enabling the security of their systems and/or + * data to be ensured and, more generally, to use and operate it in the + * same conditions as regards security. + * + * The fact that you are presently reading this means that you have had + * knowledge of the CeCILL license and that you accept its terms. + */ +/** + * gclc-process:net.bigeon.gclc.process.ForkTask.java + * Created on: Nov 13, 2017 + */ +package net.bigeon.gclc.process; + +/*- + * #%L + * process + * %% + * Copyright (C) 2014 - 2018 Bigeon + * %% + * This software is governed by the CeCILL license under French law and + * abiding by the rules of distribution of free software. You can use, + * modify and/ or redistribute the software under the terms of the CeCILL + * license as circulated by CEA, CNRS and INRIA at the following URL + * "http://www.cecill.info". + * + * As a counterpart to the access to the source code and rights to copy, + * modify and redistribute granted by the license, users are provided only + * with a limited warranty and the software's author, the holder of the + * economic rights, and the successive licensors have only limited + * liability. + * + * In this respect, the user's attention is drawn to the risks associated + * with loading, using, modifying and/or developing or reproducing the + * software by the user in light of its specific status of free software, + * that may mean that it is complicated to manipulate, and that also + * therefore means that it is reserved for developers and experienced + * professionals having in-depth computer knowledge. Users are therefore + * encouraged to load and test the software's suitability as regards their + * requirements in conditions enabling the security of their systems and/or + * data to be ensured and, more generally, to use and operate it in the + * same conditions as regards security. + * + * The fact that you are presently reading this means that you have had + * knowledge of the CeCILL license and that you accept its terms. + * #L% + */ +import java.util.HashSet; +import java.util.Set; + +import net.bigeon.gclc.exception.CommandRunException; +import net.bigeon.gclc.manager.ConsoleInput; +import net.bigeon.gclc.manager.ConsoleOutput; +import net.bigeon.gclc.process.io.ConnectingConsoleInput; +import net.bigeon.gclc.process.io.ConnectingConsoleOutput; + +/** + *

+ * TODO + * + * @author Emmanuel Bigeon */ +public abstract class ForkTask implements Task { + + private final Set listeners = new HashSet<>(); + private boolean running = false; + + protected final ConnectingConsoleInput in = new ConnectingConsoleInput(); + protected final ConnectingConsoleOutput out; + private CommandRunException exception; + private final Object runLock = new Object(); + + /** @param lines the number of print to store in the output */ + public ForkTask(int lines) { + out = new ConnectingConsoleOutput(ConnectingConsoleOutput.PERSIST, lines); + } + + /* (non-Javadoc) + * @see net.bigeon.gclc.process.Task#addInterruptionListener(fr.bigeon.gclc. + * process.InterruptionListener) */ + @Override + public final void addInterruptionListener(final InterruptionListener listener) { + listeners.add(listener); + } + + /* (non-Javadoc) + * @see net.bigeon.gclc.process.Task#isRunning() */ + @Override + public final boolean isRunning() { + synchronized (runLock) { + return running; + } + } + + /** @param out the console output + * @param in the console input + * @param timeout the maximal wait (0 for ever) */ + public final void join(final ConsoleOutput out, final ConsoleInput in, long timeout) { + synchronized (runLock) { + this.out.connect(out); + this.in.connect(in); + try { + if (running) { + runLock.wait(timeout); + } + } catch (final InterruptedException e) { + // TODO log. + Thread.currentThread().interrupt(); + } + this.out.disconnect(); + this.in.disconnect(); + } + } + + /* (non-Javadoc) + * @see + * net.bigeon.gclc.process.Task#rmInterruptionListener(net.bigeon.gclc.process + * .InterruptionListener) */ + @Override + public final void rmInterruptionListener(final InterruptionListener listener) { + listeners.remove(listener); + } + + /* (non-Javadoc) + * @see java.lang.Runnable#run() */ + @Override + public final void run() { + synchronized (runLock) { + running = true; + } + try { + doRun(); + } catch (final CommandRunException e) { + exception = e; + } finally { + setRunning(false); + } + for (final InterruptionListener interruptionListener : listeners) { + interruptionListener.interrupted(); + } + } + + /** Actually run the fork. */ + protected abstract void doRun() throws CommandRunException; + + /** Get the excepion that caused a failure. + * + * @return the exception */ + public final CommandRunException getException() { + return exception; + } + + /* (non-Javadoc) + * @see net.bigeon.gclc.process.Task#setRunning(boolean) */ + @Override + public final void setRunning(final boolean running) { + synchronized (runLock) { + this.running = running; + runLock.notifyAll(); + } + } + + protected final Object getRunningLock() { + return runLock; + } +} diff --git a/gclc-process/src/main/java/fr/bigeon/gclc/process/InterruptionListener.java b/gclc-process/src/main/java/net/bigeon/gclc/process/InterruptionListener.java similarity index 53% rename from gclc-process/src/main/java/fr/bigeon/gclc/process/InterruptionListener.java rename to gclc-process/src/main/java/net/bigeon/gclc/process/InterruptionListener.java index 4011921..66d5e0a 100644 --- a/gclc-process/src/main/java/fr/bigeon/gclc/process/InterruptionListener.java +++ b/gclc-process/src/main/java/net/bigeon/gclc/process/InterruptionListener.java @@ -1,44 +1,77 @@ -/* - * process, Distribution repositories and basic setup for Emmanuel Bigeon projects - * Copyright (C) 2014-2018 E. Bigeon - * mailto:emmanuel@bigeon.fr - * - * This software is governed by the CeCILL license under French law and - * abiding by the rules of distribution of free software. You can use, - * modify and/or redistribute the software under the terms of the CeCILL - * license as circulated by CEA, CNRS and INRIA at the following URL - * "http://www.cecill.info". - * - * As a counterpart to the access to the source code and rights to copy, - * modify and redistribute granted by the license, users are provided only - * with a limited warranty and the software's author, the holder of the - * economic rights, and the successive licensors have only limited - * liability. - * - * In this respect, the user's attention is drawn to the risks associated - * with loading, using, modifying and/or developing or reproducing the - * software by the user in light of its specific status of free software, - * that may mean that it is complicated to manipulate, and that also - * therefore means that it is reserved for developers and experienced - * professionals having in-depth computer knowledge. Users are therefore - * encouraged to load and test the software's suitability as regards their - * requirements in conditions enabling the security of their systems and/or - * data to be ensured and, more generally, to use and operate it in the - * same conditions as regards security. - * - * The fact that you are presently reading this means that you have had - * knowledge of the CeCILL license and that you accept its terms. - */ -/** - * gclc:fr.bigeon.gclc.proc.InterruptionListener.java - * Created on: May 10, 2017 - */ -package fr.bigeon.gclc.process; - -/** A listener for interruption - * - * @author Emmanuel Bigeon */ -public interface InterruptionListener { - /** Notification of an interuption of a listened object */ - void interrupted(); -} +/* + * process, Distribution repositories and basic setup for Emmanuel Bigeon projects + * Copyright (C) 2014-2018 E. Bigeon + * mailto:emmanuel@bigeon.fr + * + * This software is governed by the CeCILL license under French law and + * abiding by the rules of distribution of free software. You can use, + * modify and/or redistribute the software under the terms of the CeCILL + * license as circulated by CEA, CNRS and INRIA at the following URL + * "http://www.cecill.info". + * + * As a counterpart to the access to the source code and rights to copy, + * modify and redistribute granted by the license, users are provided only + * with a limited warranty and the software's author, the holder of the + * economic rights, and the successive licensors have only limited + * liability. + * + * In this respect, the user's attention is drawn to the risks associated + * with loading, using, modifying and/or developing or reproducing the + * software by the user in light of its specific status of free software, + * that may mean that it is complicated to manipulate, and that also + * therefore means that it is reserved for developers and experienced + * professionals having in-depth computer knowledge. Users are therefore + * encouraged to load and test the software's suitability as regards their + * requirements in conditions enabling the security of their systems and/or + * data to be ensured and, more generally, to use and operate it in the + * same conditions as regards security. + * + * The fact that you are presently reading this means that you have had + * knowledge of the CeCILL license and that you accept its terms. + */ +/** + * gclc:fr.bigeon.gclc.proc.InterruptionListener.java + * Created on: May 10, 2017 + */ +package net.bigeon.gclc.process; + +/*- + * #%L + * process + * %% + * Copyright (C) 2014 - 2018 Bigeon + * %% + * This software is governed by the CeCILL license under French law and + * abiding by the rules of distribution of free software. You can use, + * modify and/ or redistribute the software under the terms of the CeCILL + * license as circulated by CEA, CNRS and INRIA at the following URL + * "http://www.cecill.info". + * + * As a counterpart to the access to the source code and rights to copy, + * modify and redistribute granted by the license, users are provided only + * with a limited warranty and the software's author, the holder of the + * economic rights, and the successive licensors have only limited + * liability. + * + * In this respect, the user's attention is drawn to the risks associated + * with loading, using, modifying and/or developing or reproducing the + * software by the user in light of its specific status of free software, + * that may mean that it is complicated to manipulate, and that also + * therefore means that it is reserved for developers and experienced + * professionals having in-depth computer knowledge. Users are therefore + * encouraged to load and test the software's suitability as regards their + * requirements in conditions enabling the security of their systems and/or + * data to be ensured and, more generally, to use and operate it in the + * same conditions as regards security. + * + * The fact that you are presently reading this means that you have had + * knowledge of the CeCILL license and that you accept its terms. + * #L% + */ +/** A listener for interruption + * + * @author Emmanuel Bigeon */ +public interface InterruptionListener { + /** Notification of an interuption of a listened object */ + void interrupted(); +} diff --git a/gclc-process/src/main/java/fr/bigeon/gclc/process/ProcessAttachement.java b/gclc-process/src/main/java/net/bigeon/gclc/process/ProcessAttachement.java similarity index 55% rename from gclc-process/src/main/java/fr/bigeon/gclc/process/ProcessAttachement.java rename to gclc-process/src/main/java/net/bigeon/gclc/process/ProcessAttachement.java index 53c46d7..060b423 100644 --- a/gclc-process/src/main/java/fr/bigeon/gclc/process/ProcessAttachement.java +++ b/gclc-process/src/main/java/net/bigeon/gclc/process/ProcessAttachement.java @@ -1,64 +1,97 @@ -/* - * process, Distribution repositories and basic setup for Emmanuel Bigeon projects - * Copyright (C) 2014-2018 E. Bigeon - * mailto:emmanuel@bigeon.fr - * - * This software is governed by the CeCILL license under French law and - * abiding by the rules of distribution of free software. You can use, - * modify and/or redistribute the software under the terms of the CeCILL - * license as circulated by CEA, CNRS and INRIA at the following URL - * "http://www.cecill.info". - * - * As a counterpart to the access to the source code and rights to copy, - * modify and redistribute granted by the license, users are provided only - * with a limited warranty and the software's author, the holder of the - * economic rights, and the successive licensors have only limited - * liability. - * - * In this respect, the user's attention is drawn to the risks associated - * with loading, using, modifying and/or developing or reproducing the - * software by the user in light of its specific status of free software, - * that may mean that it is complicated to manipulate, and that also - * therefore means that it is reserved for developers and experienced - * professionals having in-depth computer knowledge. Users are therefore - * encouraged to load and test the software's suitability as regards their - * requirements in conditions enabling the security of their systems and/or - * data to be ensured and, more generally, to use and operate it in the - * same conditions as regards security. - * - * The fact that you are presently reading this means that you have had - * knowledge of the CeCILL license and that you accept its terms. - */ -/** - * - */ -package fr.bigeon.gclc.process; - -import fr.bigeon.gclc.ApplicationAttachement; -import fr.bigeon.gclc.command.ICommandProvider; -import fr.bigeon.gclc.exception.InvalidCommandName; - -/** - * @author Emmanuel Bigeon - * - */ -public class ProcessAttachement implements ApplicationAttachement { - - private final TaskPool pool; - - /** @param pool the task pool to manage */ - public ProcessAttachement(TaskPool pool) { - super(); - this.pool = pool; - } - - /* (non-Javadoc) - * @see fr.bigeon.gclc.ApplicationAttachement#attach(fr.bigeon.gclc.ConsoleApplication) - */ - @Override - public void attach(ICommandProvider application) throws InvalidCommandName { - application.add(new ProcessKill("kill", pool)); - application.add(new ProcessList("list", pool)); - } - -} +/* + * process, Distribution repositories and basic setup for Emmanuel Bigeon projects + * Copyright (C) 2014-2018 E. Bigeon + * mailto:emmanuel@bigeon.fr + * + * This software is governed by the CeCILL license under French law and + * abiding by the rules of distribution of free software. You can use, + * modify and/or redistribute the software under the terms of the CeCILL + * license as circulated by CEA, CNRS and INRIA at the following URL + * "http://www.cecill.info". + * + * As a counterpart to the access to the source code and rights to copy, + * modify and redistribute granted by the license, users are provided only + * with a limited warranty and the software's author, the holder of the + * economic rights, and the successive licensors have only limited + * liability. + * + * In this respect, the user's attention is drawn to the risks associated + * with loading, using, modifying and/or developing or reproducing the + * software by the user in light of its specific status of free software, + * that may mean that it is complicated to manipulate, and that also + * therefore means that it is reserved for developers and experienced + * professionals having in-depth computer knowledge. Users are therefore + * encouraged to load and test the software's suitability as regards their + * requirements in conditions enabling the security of their systems and/or + * data to be ensured and, more generally, to use and operate it in the + * same conditions as regards security. + * + * The fact that you are presently reading this means that you have had + * knowledge of the CeCILL license and that you accept its terms. + */ +/** + * + */ +package net.bigeon.gclc.process; + +/*- + * #%L + * process + * %% + * Copyright (C) 2014 - 2018 Bigeon + * %% + * This software is governed by the CeCILL license under French law and + * abiding by the rules of distribution of free software. You can use, + * modify and/ or redistribute the software under the terms of the CeCILL + * license as circulated by CEA, CNRS and INRIA at the following URL + * "http://www.cecill.info". + * + * As a counterpart to the access to the source code and rights to copy, + * modify and redistribute granted by the license, users are provided only + * with a limited warranty and the software's author, the holder of the + * economic rights, and the successive licensors have only limited + * liability. + * + * In this respect, the user's attention is drawn to the risks associated + * with loading, using, modifying and/or developing or reproducing the + * software by the user in light of its specific status of free software, + * that may mean that it is complicated to manipulate, and that also + * therefore means that it is reserved for developers and experienced + * professionals having in-depth computer knowledge. Users are therefore + * encouraged to load and test the software's suitability as regards their + * requirements in conditions enabling the security of their systems and/or + * data to be ensured and, more generally, to use and operate it in the + * same conditions as regards security. + * + * The fact that you are presently reading this means that you have had + * knowledge of the CeCILL license and that you accept its terms. + * #L% + */ +import net.bigeon.gclc.ApplicationAttachement; +import net.bigeon.gclc.command.ICommandProvider; +import net.bigeon.gclc.exception.InvalidCommandName; + +/** + * @author Emmanuel Bigeon + * + */ +public class ProcessAttachement implements ApplicationAttachement { + + private final TaskPool pool; + + /** @param pool the task pool to manage */ + public ProcessAttachement(TaskPool pool) { + super(); + this.pool = pool; + } + + /* (non-Javadoc) + * @see fr.bigeon.gclc.ApplicationAttachement#attach(fr.bigeon.gclc.ConsoleApplication) + */ + @Override + public void attach(ICommandProvider application) throws InvalidCommandName { + application.add(new ProcessKill("kill", pool)); + application.add(new ProcessList("list", pool)); + } + +} diff --git a/gclc-process/src/main/java/fr/bigeon/gclc/process/ProcessClear.java b/gclc-process/src/main/java/net/bigeon/gclc/process/ProcessClear.java similarity index 60% rename from gclc-process/src/main/java/fr/bigeon/gclc/process/ProcessClear.java rename to gclc-process/src/main/java/net/bigeon/gclc/process/ProcessClear.java index db7deb7..5b0ed64 100644 --- a/gclc-process/src/main/java/fr/bigeon/gclc/process/ProcessClear.java +++ b/gclc-process/src/main/java/net/bigeon/gclc/process/ProcessClear.java @@ -1,87 +1,120 @@ -/* - * process, Distribution repositories and basic setup for Emmanuel Bigeon projects - * Copyright (C) 2014-2018 E. Bigeon - * mailto:emmanuel@bigeon.fr - * - * This software is governed by the CeCILL license under French law and - * abiding by the rules of distribution of free software. You can use, - * modify and/or redistribute the software under the terms of the CeCILL - * license as circulated by CEA, CNRS and INRIA at the following URL - * "http://www.cecill.info". - * - * As a counterpart to the access to the source code and rights to copy, - * modify and redistribute granted by the license, users are provided only - * with a limited warranty and the software's author, the holder of the - * economic rights, and the successive licensors have only limited - * liability. - * - * In this respect, the user's attention is drawn to the risks associated - * with loading, using, modifying and/or developing or reproducing the - * software by the user in light of its specific status of free software, - * that may mean that it is complicated to manipulate, and that also - * therefore means that it is reserved for developers and experienced - * professionals having in-depth computer knowledge. Users are therefore - * encouraged to load and test the software's suitability as regards their - * requirements in conditions enabling the security of their systems and/or - * data to be ensured and, more generally, to use and operate it in the - * same conditions as regards security. - * - * The fact that you are presently reading this means that you have had - * knowledge of the CeCILL license and that you accept its terms. - */ -/** - * gclc:fr.bigeon.gclc.proc.ProcessList.java - * Created on: May 10, 2017 - */ -package fr.bigeon.gclc.process; - -import fr.bigeon.gclc.command.Command; -import fr.bigeon.gclc.exception.CommandRunException; -import fr.bigeon.gclc.manager.ConsoleInput; -import fr.bigeon.gclc.manager.ConsoleOutput; - -/** A command that will flag a task to stop - * - * @author Emmanuel Bigeon */ -public final class ProcessClear extends Command { - /** The taskpool */ - private final TaskPool pool; - - /** @param name the command name - * @param pool the pool */ - public ProcessClear(final String name, final TaskPool pool) { - super(name); - this.pool = pool; - } - - /* (non-Javadoc) - * @see fr.bigeon.gclc.command.ICommand#execute(fr.bigeon.gclc.manager. - * ConsoleOutput, fr.bigeon.gclc.manager.ConsoleInput, - * java.lang.String[]) */ - @Override - public void execute(final ConsoleOutput out, final ConsoleInput in, - final String... args) throws CommandRunException { - for (final String id : pool.getPIDs()) { - if (!pool.get(id).isRunning()) { - pool.remove(id); - } - } - return; - } - - /* (non-Javadoc) - * @see fr.bigeon.gclc.command.ICommand#tip() */ - @SuppressWarnings("nls") - @Override - public String tip() { - return "Request a process to stop (softly)"; - } - - /* (non-Javadoc) - * @see fr.bigeon.gclc.command.Command#usageDetail() */ - @Override - protected String usageDetail() { - return null; - } - -} +/* + * process, Distribution repositories and basic setup for Emmanuel Bigeon projects + * Copyright (C) 2014-2018 E. Bigeon + * mailto:emmanuel@bigeon.fr + * + * This software is governed by the CeCILL license under French law and + * abiding by the rules of distribution of free software. You can use, + * modify and/or redistribute the software under the terms of the CeCILL + * license as circulated by CEA, CNRS and INRIA at the following URL + * "http://www.cecill.info". + * + * As a counterpart to the access to the source code and rights to copy, + * modify and redistribute granted by the license, users are provided only + * with a limited warranty and the software's author, the holder of the + * economic rights, and the successive licensors have only limited + * liability. + * + * In this respect, the user's attention is drawn to the risks associated + * with loading, using, modifying and/or developing or reproducing the + * software by the user in light of its specific status of free software, + * that may mean that it is complicated to manipulate, and that also + * therefore means that it is reserved for developers and experienced + * professionals having in-depth computer knowledge. Users are therefore + * encouraged to load and test the software's suitability as regards their + * requirements in conditions enabling the security of their systems and/or + * data to be ensured and, more generally, to use and operate it in the + * same conditions as regards security. + * + * The fact that you are presently reading this means that you have had + * knowledge of the CeCILL license and that you accept its terms. + */ +/** + * gclc:fr.bigeon.gclc.proc.ProcessList.java + * Created on: May 10, 2017 + */ +package net.bigeon.gclc.process; + +/*- + * #%L + * process + * %% + * Copyright (C) 2014 - 2018 Bigeon + * %% + * This software is governed by the CeCILL license under French law and + * abiding by the rules of distribution of free software. You can use, + * modify and/ or redistribute the software under the terms of the CeCILL + * license as circulated by CEA, CNRS and INRIA at the following URL + * "http://www.cecill.info". + * + * As a counterpart to the access to the source code and rights to copy, + * modify and redistribute granted by the license, users are provided only + * with a limited warranty and the software's author, the holder of the + * economic rights, and the successive licensors have only limited + * liability. + * + * In this respect, the user's attention is drawn to the risks associated + * with loading, using, modifying and/or developing or reproducing the + * software by the user in light of its specific status of free software, + * that may mean that it is complicated to manipulate, and that also + * therefore means that it is reserved for developers and experienced + * professionals having in-depth computer knowledge. Users are therefore + * encouraged to load and test the software's suitability as regards their + * requirements in conditions enabling the security of their systems and/or + * data to be ensured and, more generally, to use and operate it in the + * same conditions as regards security. + * + * The fact that you are presently reading this means that you have had + * knowledge of the CeCILL license and that you accept its terms. + * #L% + */ +import net.bigeon.gclc.command.Command; +import net.bigeon.gclc.exception.CommandRunException; +import net.bigeon.gclc.manager.ConsoleInput; +import net.bigeon.gclc.manager.ConsoleOutput; + +/** A command that will flag a task to stop + * + * @author Emmanuel Bigeon */ +public final class ProcessClear extends Command { + /** The taskpool */ + private final TaskPool pool; + + /** @param name the command name + * @param pool the pool */ + public ProcessClear(final String name, final TaskPool pool) { + super(name); + this.pool = pool; + } + + /* (non-Javadoc) + * @see fr.bigeon.gclc.command.ICommand#execute(fr.bigeon.gclc.manager. + * ConsoleOutput, fr.bigeon.gclc.manager.ConsoleInput, + * java.lang.String[]) */ + @Override + public void execute(final ConsoleOutput out, final ConsoleInput in, + final String... args) throws CommandRunException { + for (final String id : pool.getPIDs()) { + if (!pool.get(id).isRunning()) { + pool.remove(id); + } + } + return; + } + + /* (non-Javadoc) + * @see fr.bigeon.gclc.command.ICommand#tip() */ + @SuppressWarnings("nls") + @Override + public String tip() { + return "Request a process to stop (softly)"; + } + + /* (non-Javadoc) + * @see fr.bigeon.gclc.command.Command#usageDetail() */ + @Override + protected String usageDetail() { + return null; + } + +} diff --git a/gclc-process/src/main/java/fr/bigeon/gclc/process/ProcessKill.java b/gclc-process/src/main/java/net/bigeon/gclc/process/ProcessKill.java similarity index 60% rename from gclc-process/src/main/java/fr/bigeon/gclc/process/ProcessKill.java rename to gclc-process/src/main/java/net/bigeon/gclc/process/ProcessKill.java index 56a0d65..a9cf30a 100644 --- a/gclc-process/src/main/java/fr/bigeon/gclc/process/ProcessKill.java +++ b/gclc-process/src/main/java/net/bigeon/gclc/process/ProcessKill.java @@ -1,82 +1,115 @@ -/* - * process, Distribution repositories and basic setup for Emmanuel Bigeon projects - * Copyright (C) 2014-2018 E. Bigeon - * mailto:emmanuel@bigeon.fr - * - * This software is governed by the CeCILL license under French law and - * abiding by the rules of distribution of free software. You can use, - * modify and/or redistribute the software under the terms of the CeCILL - * license as circulated by CEA, CNRS and INRIA at the following URL - * "http://www.cecill.info". - * - * As a counterpart to the access to the source code and rights to copy, - * modify and redistribute granted by the license, users are provided only - * with a limited warranty and the software's author, the holder of the - * economic rights, and the successive licensors have only limited - * liability. - * - * In this respect, the user's attention is drawn to the risks associated - * with loading, using, modifying and/or developing or reproducing the - * software by the user in light of its specific status of free software, - * that may mean that it is complicated to manipulate, and that also - * therefore means that it is reserved for developers and experienced - * professionals having in-depth computer knowledge. Users are therefore - * encouraged to load and test the software's suitability as regards their - * requirements in conditions enabling the security of their systems and/or - * data to be ensured and, more generally, to use and operate it in the - * same conditions as regards security. - * - * The fact that you are presently reading this means that you have had - * knowledge of the CeCILL license and that you accept its terms. - */ -/** - * gclc:fr.bigeon.gclc.proc.ProcessList.java - * Created on: May 10, 2017 - */ -package fr.bigeon.gclc.process; - -import fr.bigeon.gclc.command.Command; -import fr.bigeon.gclc.exception.CommandRunException; -import fr.bigeon.gclc.manager.ConsoleInput; -import fr.bigeon.gclc.manager.ConsoleOutput; - -/** A command that will flag a task to stop - * - * @author Emmanuel Bigeon */ -public final class ProcessKill extends Command { - /** The taskpool */ - private final TaskPool pool; - - /** @param name the command name - * @param pool the pool */ - public ProcessKill(final String name, final TaskPool pool) { - super(name); - this.pool = pool; - } - - /* (non-Javadoc) - * @see fr.bigeon.gclc.command.ICommand#execute(fr.bigeon.gclc.manager. - * ConsoleOutput, fr.bigeon.gclc.manager.ConsoleInput, - * java.lang.String[]) */ - @Override - public void execute(final ConsoleOutput out, final ConsoleInput in, - final String... args) throws CommandRunException { - pool.get(args[0]).setRunning(false); - } - - /* (non-Javadoc) - * @see fr.bigeon.gclc.command.ICommand#tip() */ - @SuppressWarnings("nls") - @Override - public String tip() { - return "Request a process to stop (softly)"; - } - - /* (non-Javadoc) - * @see fr.bigeon.gclc.command.Command#usageDetail() */ - @Override - protected String usageDetail() { - return null; - } - -} +/* + * process, Distribution repositories and basic setup for Emmanuel Bigeon projects + * Copyright (C) 2014-2018 E. Bigeon + * mailto:emmanuel@bigeon.fr + * + * This software is governed by the CeCILL license under French law and + * abiding by the rules of distribution of free software. You can use, + * modify and/or redistribute the software under the terms of the CeCILL + * license as circulated by CEA, CNRS and INRIA at the following URL + * "http://www.cecill.info". + * + * As a counterpart to the access to the source code and rights to copy, + * modify and redistribute granted by the license, users are provided only + * with a limited warranty and the software's author, the holder of the + * economic rights, and the successive licensors have only limited + * liability. + * + * In this respect, the user's attention is drawn to the risks associated + * with loading, using, modifying and/or developing or reproducing the + * software by the user in light of its specific status of free software, + * that may mean that it is complicated to manipulate, and that also + * therefore means that it is reserved for developers and experienced + * professionals having in-depth computer knowledge. Users are therefore + * encouraged to load and test the software's suitability as regards their + * requirements in conditions enabling the security of their systems and/or + * data to be ensured and, more generally, to use and operate it in the + * same conditions as regards security. + * + * The fact that you are presently reading this means that you have had + * knowledge of the CeCILL license and that you accept its terms. + */ +/** + * gclc:fr.bigeon.gclc.proc.ProcessList.java + * Created on: May 10, 2017 + */ +package net.bigeon.gclc.process; + +/*- + * #%L + * process + * %% + * Copyright (C) 2014 - 2018 Bigeon + * %% + * This software is governed by the CeCILL license under French law and + * abiding by the rules of distribution of free software. You can use, + * modify and/ or redistribute the software under the terms of the CeCILL + * license as circulated by CEA, CNRS and INRIA at the following URL + * "http://www.cecill.info". + * + * As a counterpart to the access to the source code and rights to copy, + * modify and redistribute granted by the license, users are provided only + * with a limited warranty and the software's author, the holder of the + * economic rights, and the successive licensors have only limited + * liability. + * + * In this respect, the user's attention is drawn to the risks associated + * with loading, using, modifying and/or developing or reproducing the + * software by the user in light of its specific status of free software, + * that may mean that it is complicated to manipulate, and that also + * therefore means that it is reserved for developers and experienced + * professionals having in-depth computer knowledge. Users are therefore + * encouraged to load and test the software's suitability as regards their + * requirements in conditions enabling the security of their systems and/or + * data to be ensured and, more generally, to use and operate it in the + * same conditions as regards security. + * + * The fact that you are presently reading this means that you have had + * knowledge of the CeCILL license and that you accept its terms. + * #L% + */ +import net.bigeon.gclc.command.Command; +import net.bigeon.gclc.exception.CommandRunException; +import net.bigeon.gclc.manager.ConsoleInput; +import net.bigeon.gclc.manager.ConsoleOutput; + +/** A command that will flag a task to stop + * + * @author Emmanuel Bigeon */ +public final class ProcessKill extends Command { + /** The taskpool */ + private final TaskPool pool; + + /** @param name the command name + * @param pool the pool */ + public ProcessKill(final String name, final TaskPool pool) { + super(name); + this.pool = pool; + } + + /* (non-Javadoc) + * @see fr.bigeon.gclc.command.ICommand#execute(fr.bigeon.gclc.manager. + * ConsoleOutput, fr.bigeon.gclc.manager.ConsoleInput, + * java.lang.String[]) */ + @Override + public void execute(final ConsoleOutput out, final ConsoleInput in, + final String... args) throws CommandRunException { + pool.get(args[0]).setRunning(false); + } + + /* (non-Javadoc) + * @see fr.bigeon.gclc.command.ICommand#tip() */ + @SuppressWarnings("nls") + @Override + public String tip() { + return "Request a process to stop (softly)"; + } + + /* (non-Javadoc) + * @see fr.bigeon.gclc.command.Command#usageDetail() */ + @Override + protected String usageDetail() { + return null; + } + +} diff --git a/gclc-process/src/main/java/fr/bigeon/gclc/process/ProcessList.java b/gclc-process/src/main/java/net/bigeon/gclc/process/ProcessList.java similarity index 62% rename from gclc-process/src/main/java/fr/bigeon/gclc/process/ProcessList.java rename to gclc-process/src/main/java/net/bigeon/gclc/process/ProcessList.java index be7a6d8..229dbd3 100644 --- a/gclc-process/src/main/java/fr/bigeon/gclc/process/ProcessList.java +++ b/gclc-process/src/main/java/net/bigeon/gclc/process/ProcessList.java @@ -1,100 +1,133 @@ -/* - * process, Distribution repositories and basic setup for Emmanuel Bigeon projects - * Copyright (C) 2014-2018 E. Bigeon - * mailto:emmanuel@bigeon.fr - * - * This software is governed by the CeCILL license under French law and - * abiding by the rules of distribution of free software. You can use, - * modify and/or redistribute the software under the terms of the CeCILL - * license as circulated by CEA, CNRS and INRIA at the following URL - * "http://www.cecill.info". - * - * As a counterpart to the access to the source code and rights to copy, - * modify and redistribute granted by the license, users are provided only - * with a limited warranty and the software's author, the holder of the - * economic rights, and the successive licensors have only limited - * liability. - * - * In this respect, the user's attention is drawn to the risks associated - * with loading, using, modifying and/or developing or reproducing the - * software by the user in light of its specific status of free software, - * that may mean that it is complicated to manipulate, and that also - * therefore means that it is reserved for developers and experienced - * professionals having in-depth computer knowledge. Users are therefore - * encouraged to load and test the software's suitability as regards their - * requirements in conditions enabling the security of their systems and/or - * data to be ensured and, more generally, to use and operate it in the - * same conditions as regards security. - * - * The fact that you are presently reading this means that you have had - * knowledge of the CeCILL license and that you accept its terms. - */ -/** - * gclc:fr.bigeon.gclc.proc.ProcessList.java - * Created on: May 10, 2017 - */ -package fr.bigeon.gclc.process; - -import java.io.IOException; -import java.text.MessageFormat; -import java.util.ArrayList; -import java.util.Collections; - -import fr.bigeon.gclc.command.Command; -import fr.bigeon.gclc.exception.CommandRunException; -import fr.bigeon.gclc.exception.CommandRunExceptionType; -import fr.bigeon.gclc.manager.ConsoleInput; -import fr.bigeon.gclc.manager.ConsoleOutput; - -/** A command to list current processes - * - * @author Emmanuel Bigeon */ -public final class ProcessList extends Command { - /** The process pool */ - private final TaskPool pool; - - /** @param name the command name - * @param pool the pool */ - public ProcessList(final String name, final TaskPool pool) { - super(name); - this.pool = pool; - } - - /* (non-Javadoc) - * @see fr.bigeon.gclc.command.ICommand#execute(fr.bigeon.gclc.manager. - * ConsoleOutput, fr.bigeon.gclc.manager.ConsoleInput, - * java.lang.String[]) */ - @Override - public void execute(final ConsoleOutput out, final ConsoleInput in, - final String... args) throws CommandRunException { - final ArrayList pids = new ArrayList<>(pool.getPIDs()); - Collections.sort(pids); - for (final String string : pids) { - try { - out.println(MessageFormat.format("{0}\t{1}", string, //$NON-NLS-1$ - pool.get(string).getName())); - } catch (final IOException e) { - throw new CommandRunException( - CommandRunExceptionType.INTERACTION, - "Unable to communicate with user", e, this); //$NON-NLS-1$ - } - } - - } - - /* (non-Javadoc) - * @see fr.bigeon.gclc.command.ICommand#tip() */ - @SuppressWarnings("nls") - @Override - public String tip() { - return "List all processes"; - } - - /* (non-Javadoc) - * @see fr.bigeon.gclc.command.Command#usageDetail() */ - @Override - protected String usageDetail() { - return null; - } - -} +/* + * process, Distribution repositories and basic setup for Emmanuel Bigeon projects + * Copyright (C) 2014-2018 E. Bigeon + * mailto:emmanuel@bigeon.fr + * + * This software is governed by the CeCILL license under French law and + * abiding by the rules of distribution of free software. You can use, + * modify and/or redistribute the software under the terms of the CeCILL + * license as circulated by CEA, CNRS and INRIA at the following URL + * "http://www.cecill.info". + * + * As a counterpart to the access to the source code and rights to copy, + * modify and redistribute granted by the license, users are provided only + * with a limited warranty and the software's author, the holder of the + * economic rights, and the successive licensors have only limited + * liability. + * + * In this respect, the user's attention is drawn to the risks associated + * with loading, using, modifying and/or developing or reproducing the + * software by the user in light of its specific status of free software, + * that may mean that it is complicated to manipulate, and that also + * therefore means that it is reserved for developers and experienced + * professionals having in-depth computer knowledge. Users are therefore + * encouraged to load and test the software's suitability as regards their + * requirements in conditions enabling the security of their systems and/or + * data to be ensured and, more generally, to use and operate it in the + * same conditions as regards security. + * + * The fact that you are presently reading this means that you have had + * knowledge of the CeCILL license and that you accept its terms. + */ +/** + * gclc:fr.bigeon.gclc.proc.ProcessList.java + * Created on: May 10, 2017 + */ +package net.bigeon.gclc.process; + +/*- + * #%L + * process + * %% + * Copyright (C) 2014 - 2018 Bigeon + * %% + * This software is governed by the CeCILL license under French law and + * abiding by the rules of distribution of free software. You can use, + * modify and/ or redistribute the software under the terms of the CeCILL + * license as circulated by CEA, CNRS and INRIA at the following URL + * "http://www.cecill.info". + * + * As a counterpart to the access to the source code and rights to copy, + * modify and redistribute granted by the license, users are provided only + * with a limited warranty and the software's author, the holder of the + * economic rights, and the successive licensors have only limited + * liability. + * + * In this respect, the user's attention is drawn to the risks associated + * with loading, using, modifying and/or developing or reproducing the + * software by the user in light of its specific status of free software, + * that may mean that it is complicated to manipulate, and that also + * therefore means that it is reserved for developers and experienced + * professionals having in-depth computer knowledge. Users are therefore + * encouraged to load and test the software's suitability as regards their + * requirements in conditions enabling the security of their systems and/or + * data to be ensured and, more generally, to use and operate it in the + * same conditions as regards security. + * + * The fact that you are presently reading this means that you have had + * knowledge of the CeCILL license and that you accept its terms. + * #L% + */ +import java.io.IOException; +import java.text.MessageFormat; +import java.util.ArrayList; +import java.util.Collections; + +import net.bigeon.gclc.command.Command; +import net.bigeon.gclc.exception.CommandRunException; +import net.bigeon.gclc.exception.CommandRunExceptionType; +import net.bigeon.gclc.manager.ConsoleInput; +import net.bigeon.gclc.manager.ConsoleOutput; + +/** A command to list current processes + * + * @author Emmanuel Bigeon */ +public final class ProcessList extends Command { + /** The process pool */ + private final TaskPool pool; + + /** @param name the command name + * @param pool the pool */ + public ProcessList(final String name, final TaskPool pool) { + super(name); + this.pool = pool; + } + + /* (non-Javadoc) + * @see fr.bigeon.gclc.command.ICommand#execute(fr.bigeon.gclc.manager. + * ConsoleOutput, fr.bigeon.gclc.manager.ConsoleInput, + * java.lang.String[]) */ + @Override + public void execute(final ConsoleOutput out, final ConsoleInput in, + final String... args) throws CommandRunException { + final ArrayList pids = new ArrayList<>(pool.getPIDs()); + Collections.sort(pids); + for (final String string : pids) { + try { + out.println(MessageFormat.format("{0}\t{1}", string, //$NON-NLS-1$ + pool.get(string).getName())); + } catch (final IOException e) { + throw new CommandRunException( + CommandRunExceptionType.INTERACTION, + "Unable to communicate with user", e); //$NON-NLS-1$ + } + } + + } + + /* (non-Javadoc) + * @see fr.bigeon.gclc.command.ICommand#tip() */ + @SuppressWarnings("nls") + @Override + public String tip() { + return "List all processes"; + } + + /* (non-Javadoc) + * @see fr.bigeon.gclc.command.Command#usageDetail() */ + @Override + protected String usageDetail() { + return null; + } + +} diff --git a/gclc-process/src/main/java/fr/bigeon/gclc/process/ScreenAttachement.java b/gclc-process/src/main/java/net/bigeon/gclc/process/ScreenAttachement.java similarity index 57% rename from gclc-process/src/main/java/fr/bigeon/gclc/process/ScreenAttachement.java rename to gclc-process/src/main/java/net/bigeon/gclc/process/ScreenAttachement.java index 69ec006..8d69eb9 100644 --- a/gclc-process/src/main/java/fr/bigeon/gclc/process/ScreenAttachement.java +++ b/gclc-process/src/main/java/net/bigeon/gclc/process/ScreenAttachement.java @@ -1,65 +1,98 @@ -/* - * process, Distribution repositories and basic setup for Emmanuel Bigeon projects - * Copyright (C) 2014-2018 E. Bigeon - * mailto:emmanuel@bigeon.fr - * - * This software is governed by the CeCILL license under French law and - * abiding by the rules of distribution of free software. You can use, - * modify and/or redistribute the software under the terms of the CeCILL - * license as circulated by CEA, CNRS and INRIA at the following URL - * "http://www.cecill.info". - * - * As a counterpart to the access to the source code and rights to copy, - * modify and redistribute granted by the license, users are provided only - * with a limited warranty and the software's author, the holder of the - * economic rights, and the successive licensors have only limited - * liability. - * - * In this respect, the user's attention is drawn to the risks associated - * with loading, using, modifying and/or developing or reproducing the - * software by the user in light of its specific status of free software, - * that may mean that it is complicated to manipulate, and that also - * therefore means that it is reserved for developers and experienced - * professionals having in-depth computer knowledge. Users are therefore - * encouraged to load and test the software's suitability as regards their - * requirements in conditions enabling the security of their systems and/or - * data to be ensured and, more generally, to use and operate it in the - * same conditions as regards security. - * - * The fact that you are presently reading this means that you have had - * knowledge of the CeCILL license and that you accept its terms. - */ -/** - * - */ -package fr.bigeon.gclc.process; - -import fr.bigeon.gclc.ApplicationAttachement; -import fr.bigeon.gclc.command.ICommandProvider; -import fr.bigeon.gclc.exception.InvalidCommandName; - -/** @author Emmanuel Bigeon */ -public class ScreenAttachement implements ApplicationAttachement { - - private final TaskPool pool; - private final int lines; - - /** @param pool the task pool to manage */ - public ScreenAttachement(TaskPool pool, int lines) { - super(); - this.pool = pool; - this.lines = lines; - } - - /* (non-Javadoc) - * @see fr.bigeon.gclc.ApplicationAttachement#attach(fr.bigeon.gclc. - * ConsoleApplication) */ - @Override - public void attach(ICommandProvider application) throws InvalidCommandName { - application.add(new ProcessKill("terminate", pool)); - application.add(new ProcessList("list", pool)); - application.add(new ProcessClear("clear", pool)); - application.add(new CommandForeground("fg", pool)); - application.add(new CommandFork("fork", application, pool, lines)); - } -} +/* + * process, Distribution repositories and basic setup for Emmanuel Bigeon projects + * Copyright (C) 2014-2018 E. Bigeon + * mailto:emmanuel@bigeon.fr + * + * This software is governed by the CeCILL license under French law and + * abiding by the rules of distribution of free software. You can use, + * modify and/or redistribute the software under the terms of the CeCILL + * license as circulated by CEA, CNRS and INRIA at the following URL + * "http://www.cecill.info". + * + * As a counterpart to the access to the source code and rights to copy, + * modify and redistribute granted by the license, users are provided only + * with a limited warranty and the software's author, the holder of the + * economic rights, and the successive licensors have only limited + * liability. + * + * In this respect, the user's attention is drawn to the risks associated + * with loading, using, modifying and/or developing or reproducing the + * software by the user in light of its specific status of free software, + * that may mean that it is complicated to manipulate, and that also + * therefore means that it is reserved for developers and experienced + * professionals having in-depth computer knowledge. Users are therefore + * encouraged to load and test the software's suitability as regards their + * requirements in conditions enabling the security of their systems and/or + * data to be ensured and, more generally, to use and operate it in the + * same conditions as regards security. + * + * The fact that you are presently reading this means that you have had + * knowledge of the CeCILL license and that you accept its terms. + */ +/** + * + */ +package net.bigeon.gclc.process; + +/*- + * #%L + * process + * %% + * Copyright (C) 2014 - 2018 Bigeon + * %% + * This software is governed by the CeCILL license under French law and + * abiding by the rules of distribution of free software. You can use, + * modify and/ or redistribute the software under the terms of the CeCILL + * license as circulated by CEA, CNRS and INRIA at the following URL + * "http://www.cecill.info". + * + * As a counterpart to the access to the source code and rights to copy, + * modify and redistribute granted by the license, users are provided only + * with a limited warranty and the software's author, the holder of the + * economic rights, and the successive licensors have only limited + * liability. + * + * In this respect, the user's attention is drawn to the risks associated + * with loading, using, modifying and/or developing or reproducing the + * software by the user in light of its specific status of free software, + * that may mean that it is complicated to manipulate, and that also + * therefore means that it is reserved for developers and experienced + * professionals having in-depth computer knowledge. Users are therefore + * encouraged to load and test the software's suitability as regards their + * requirements in conditions enabling the security of their systems and/or + * data to be ensured and, more generally, to use and operate it in the + * same conditions as regards security. + * + * The fact that you are presently reading this means that you have had + * knowledge of the CeCILL license and that you accept its terms. + * #L% + */ +import net.bigeon.gclc.ApplicationAttachement; +import net.bigeon.gclc.command.ICommandProvider; +import net.bigeon.gclc.exception.InvalidCommandName; + +/** @author Emmanuel Bigeon */ +public class ScreenAttachement implements ApplicationAttachement { + + private final TaskPool pool; + private final int lines; + + /** @param pool the task pool to manage */ + public ScreenAttachement(TaskPool pool, int lines) { + super(); + this.pool = pool; + this.lines = lines; + } + + /* (non-Javadoc) + * @see fr.bigeon.gclc.ApplicationAttachement#attach(fr.bigeon.gclc. + * ConsoleApplication) */ + @Override + public void attach(ICommandProvider application) throws InvalidCommandName { + application.add(new ProcessKill("terminate", pool)); + application.add(new ProcessList("list", pool)); + application.add(new ProcessClear("clear", pool)); + application.add(new CommandForeground("fg", pool)); + application.add(new CommandFork("fork", application, pool, lines)); + } +} diff --git a/gclc-process/src/main/java/fr/bigeon/gclc/process/Task.java b/gclc-process/src/main/java/net/bigeon/gclc/process/Task.java similarity index 64% rename from gclc-process/src/main/java/fr/bigeon/gclc/process/Task.java rename to gclc-process/src/main/java/net/bigeon/gclc/process/Task.java index ea9a476..0581ca7 100644 --- a/gclc-process/src/main/java/fr/bigeon/gclc/process/Task.java +++ b/gclc-process/src/main/java/net/bigeon/gclc/process/Task.java @@ -1,78 +1,111 @@ -/* - * process, Distribution repositories and basic setup for Emmanuel Bigeon projects - * Copyright (C) 2014-2018 E. Bigeon - * mailto:emmanuel@bigeon.fr - * - * This software is governed by the CeCILL license under French law and - * abiding by the rules of distribution of free software. You can use, - * modify and/or redistribute the software under the terms of the CeCILL - * license as circulated by CEA, CNRS and INRIA at the following URL - * "http://www.cecill.info". - * - * As a counterpart to the access to the source code and rights to copy, - * modify and redistribute granted by the license, users are provided only - * with a limited warranty and the software's author, the holder of the - * economic rights, and the successive licensors have only limited - * liability. - * - * In this respect, the user's attention is drawn to the risks associated - * with loading, using, modifying and/or developing or reproducing the - * software by the user in light of its specific status of free software, - * that may mean that it is complicated to manipulate, and that also - * therefore means that it is reserved for developers and experienced - * professionals having in-depth computer knowledge. Users are therefore - * encouraged to load and test the software's suitability as regards their - * requirements in conditions enabling the security of their systems and/or - * data to be ensured and, more generally, to use and operate it in the - * same conditions as regards security. - * - * The fact that you are presently reading this means that you have had - * knowledge of the CeCILL license and that you accept its terms. - */ -/** - * gclc:fr.bigeon.gclc.proc.ThreadCommand.java - * Created on: May 10, 2017 - */ -package fr.bigeon.gclc.process; - -/** Tasks are named runnable that can be interrupted. - *

- * Good practice for those objects include an absence of interaction with the - * user (otherwise the user may not know from which running command comes - * information and requests) and unicity of the object to have a coherent - * control through the {@link #setRunning(boolean)} method. - *

- * Typical cases where such command can be useful is for an application that - * does long computations. - * - * @author Emmanuel Bigeon */ -public interface Task extends Runnable { - /** Add a listener for this command end of execution - * - * @param listener the listener */ - void addInterruptionListener(InterruptionListener listener); - - /** Get the task name. - * - * @return the task name */ - String getName(); - - /** Test the running status of the task. - * - * @return if the command is supposed to be running */ - boolean isRunning(); - - /** Remove a listener of this command end of execution - * - * @param listener the listener */ - void rmInterruptionListener(InterruptionListener listener); - - /** Set the running state. - *

- * This method should be only called by external objects with the false - * argument. Calling this method with true has unspecified behavior and - * could do nothing as well as restart the command for example. - * - * @param running the running state */ - void setRunning(boolean running); -} +/* + * process, Distribution repositories and basic setup for Emmanuel Bigeon projects + * Copyright (C) 2014-2018 E. Bigeon + * mailto:emmanuel@bigeon.fr + * + * This software is governed by the CeCILL license under French law and + * abiding by the rules of distribution of free software. You can use, + * modify and/or redistribute the software under the terms of the CeCILL + * license as circulated by CEA, CNRS and INRIA at the following URL + * "http://www.cecill.info". + * + * As a counterpart to the access to the source code and rights to copy, + * modify and redistribute granted by the license, users are provided only + * with a limited warranty and the software's author, the holder of the + * economic rights, and the successive licensors have only limited + * liability. + * + * In this respect, the user's attention is drawn to the risks associated + * with loading, using, modifying and/or developing or reproducing the + * software by the user in light of its specific status of free software, + * that may mean that it is complicated to manipulate, and that also + * therefore means that it is reserved for developers and experienced + * professionals having in-depth computer knowledge. Users are therefore + * encouraged to load and test the software's suitability as regards their + * requirements in conditions enabling the security of their systems and/or + * data to be ensured and, more generally, to use and operate it in the + * same conditions as regards security. + * + * The fact that you are presently reading this means that you have had + * knowledge of the CeCILL license and that you accept its terms. + */ +/** + * gclc:fr.bigeon.gclc.proc.ThreadCommand.java + * Created on: May 10, 2017 + */ +package net.bigeon.gclc.process; + +/*- + * #%L + * process + * %% + * Copyright (C) 2014 - 2018 Bigeon + * %% + * This software is governed by the CeCILL license under French law and + * abiding by the rules of distribution of free software. You can use, + * modify and/ or redistribute the software under the terms of the CeCILL + * license as circulated by CEA, CNRS and INRIA at the following URL + * "http://www.cecill.info". + * + * As a counterpart to the access to the source code and rights to copy, + * modify and redistribute granted by the license, users are provided only + * with a limited warranty and the software's author, the holder of the + * economic rights, and the successive licensors have only limited + * liability. + * + * In this respect, the user's attention is drawn to the risks associated + * with loading, using, modifying and/or developing or reproducing the + * software by the user in light of its specific status of free software, + * that may mean that it is complicated to manipulate, and that also + * therefore means that it is reserved for developers and experienced + * professionals having in-depth computer knowledge. Users are therefore + * encouraged to load and test the software's suitability as regards their + * requirements in conditions enabling the security of their systems and/or + * data to be ensured and, more generally, to use and operate it in the + * same conditions as regards security. + * + * The fact that you are presently reading this means that you have had + * knowledge of the CeCILL license and that you accept its terms. + * #L% + */ +/** Tasks are named runnable that can be interrupted. + *

+ * Good practice for those objects include an absence of interaction with the + * user (otherwise the user may not know from which running command comes + * information and requests) and unicity of the object to have a coherent + * control through the {@link #setRunning(boolean)} method. + *

+ * Typical cases where such command can be useful is for an application that + * does long computations. + * + * @author Emmanuel Bigeon */ +public interface Task extends Runnable { + /** Add a listener for this command end of execution + * + * @param listener the listener */ + void addInterruptionListener(InterruptionListener listener); + + /** Get the task name. + * + * @return the task name */ + String getName(); + + /** Test the running status of the task. + * + * @return if the command is supposed to be running */ + boolean isRunning(); + + /** Remove a listener of this command end of execution + * + * @param listener the listener */ + void rmInterruptionListener(InterruptionListener listener); + + /** Set the running state. + *

+ * This method should be only called by external objects with the false + * argument. Calling this method with true has unspecified behavior and + * could do nothing as well as restart the command for example. + * + * @param running the running state */ + void setRunning(boolean running); +} diff --git a/gclc-process/src/main/java/fr/bigeon/gclc/process/TaskPool.java b/gclc-process/src/main/java/net/bigeon/gclc/process/TaskPool.java similarity index 73% rename from gclc-process/src/main/java/fr/bigeon/gclc/process/TaskPool.java rename to gclc-process/src/main/java/net/bigeon/gclc/process/TaskPool.java index 8d10102..941a460 100644 --- a/gclc-process/src/main/java/fr/bigeon/gclc/process/TaskPool.java +++ b/gclc-process/src/main/java/net/bigeon/gclc/process/TaskPool.java @@ -1,149 +1,182 @@ -/* - * process, Distribution repositories and basic setup for Emmanuel Bigeon projects - * Copyright (C) 2014-2018 E. Bigeon - * mailto:emmanuel@bigeon.fr - * - * This software is governed by the CeCILL license under French law and - * abiding by the rules of distribution of free software. You can use, - * modify and/or redistribute the software under the terms of the CeCILL - * license as circulated by CEA, CNRS and INRIA at the following URL - * "http://www.cecill.info". - * - * As a counterpart to the access to the source code and rights to copy, - * modify and redistribute granted by the license, users are provided only - * with a limited warranty and the software's author, the holder of the - * economic rights, and the successive licensors have only limited - * liability. - * - * In this respect, the user's attention is drawn to the risks associated - * with loading, using, modifying and/or developing or reproducing the - * software by the user in light of its specific status of free software, - * that may mean that it is complicated to manipulate, and that also - * therefore means that it is reserved for developers and experienced - * professionals having in-depth computer knowledge. Users are therefore - * encouraged to load and test the software's suitability as regards their - * requirements in conditions enabling the security of their systems and/or - * data to be ensured and, more generally, to use and operate it in the - * same conditions as regards security. - * - * The fact that you are presently reading this means that you have had - * knowledge of the CeCILL license and that you accept its terms. - */ -/** - * gclc:fr.bigeon.gclc.proc.TaskPool.java - * Created on: May 10, 2017 - */ -package fr.bigeon.gclc.process; - -import java.util.Collection; -import java.util.HashMap; -import java.util.HashSet; -import java.util.Map; - -/** A process pool. - * - * @author Emmanuel Bigeon */ -public final class TaskPool { - /** The running processes. */ - private final Map running = new HashMap<>(); - /** The count for process id. */ - private int count = 0; - /** The lock for pid attribution synchronization. */ - private final Object lock = new Object(); - private final boolean autoClear; - - /** Default constructor. */ - public TaskPool() { - this(true); - } - - /** Default constructor. */ - public TaskPool(boolean autoClear) { - this.autoClear = autoClear; - } - - /** Remove a task from the pool - * - * @param pid the task id */ - public void remove(String pid) { - synchronized (lock) { - running.remove(pid); - count = Math.min(count, Integer.parseInt(pid)); - } - } - - /** Add a process in the pool. - * - * @param cmd the process - * @return the pid */ - public String add(final Task cmd) { - if (cmd == null) { - throw new IllegalArgumentException("Task cannot be null"); //$NON-NLS-1$ - } - final String pid; - synchronized (lock) { - pid = getPID(); - running.put(pid, cmd); - } - if (autoClear) { - cmd.addInterruptionListener(new InterruptionListener() { - @SuppressWarnings("synthetic-access") - @Override - public void interrupted() { - synchronized (lock) { - remove(pid); - } - cmd.rmInterruptionListener(this); - } - }); - } - return pid; - } - - /** Get a process by it associated identifier. - * - * @param pid the task id - * @return the task, if any, associated to this id */ - public Task get(final String pid) { - synchronized (lock) { - return running.get(pid); - } - } - - /** Get the next process id. - * - * @return the process id */ - private String getPID() { - synchronized (lock) { - String pid; - do { - pid = Integer.toString(count++); - } while (running.containsKey(pid)); - return pid; - } - } - - /** Get the running processes' identifiers. - * - * @return the pids */ - public Collection getPIDs() { - return new HashSet<>(running.keySet()); - } - - /** @return if the clearing of ended task is automatic */ - public boolean isAutoClearing() { - return autoClear; - } - - /** Request all task to stop running. - *

- * This call does not guaranty end of execution, it is up to the task - * implementation to actually take into account the termination request. */ - public void shutdown() { - synchronized (lock) { - for (final Task task : running.values()) { - task.setRunning(false); - } - } - } -} +/* + * process, Distribution repositories and basic setup for Emmanuel Bigeon projects + * Copyright (C) 2014-2018 E. Bigeon + * mailto:emmanuel@bigeon.fr + * + * This software is governed by the CeCILL license under French law and + * abiding by the rules of distribution of free software. You can use, + * modify and/or redistribute the software under the terms of the CeCILL + * license as circulated by CEA, CNRS and INRIA at the following URL + * "http://www.cecill.info". + * + * As a counterpart to the access to the source code and rights to copy, + * modify and redistribute granted by the license, users are provided only + * with a limited warranty and the software's author, the holder of the + * economic rights, and the successive licensors have only limited + * liability. + * + * In this respect, the user's attention is drawn to the risks associated + * with loading, using, modifying and/or developing or reproducing the + * software by the user in light of its specific status of free software, + * that may mean that it is complicated to manipulate, and that also + * therefore means that it is reserved for developers and experienced + * professionals having in-depth computer knowledge. Users are therefore + * encouraged to load and test the software's suitability as regards their + * requirements in conditions enabling the security of their systems and/or + * data to be ensured and, more generally, to use and operate it in the + * same conditions as regards security. + * + * The fact that you are presently reading this means that you have had + * knowledge of the CeCILL license and that you accept its terms. + */ +/** + * gclc:fr.bigeon.gclc.proc.TaskPool.java + * Created on: May 10, 2017 + */ +package net.bigeon.gclc.process; + +/*- + * #%L + * process + * %% + * Copyright (C) 2014 - 2018 Bigeon + * %% + * This software is governed by the CeCILL license under French law and + * abiding by the rules of distribution of free software. You can use, + * modify and/ or redistribute the software under the terms of the CeCILL + * license as circulated by CEA, CNRS and INRIA at the following URL + * "http://www.cecill.info". + * + * As a counterpart to the access to the source code and rights to copy, + * modify and redistribute granted by the license, users are provided only + * with a limited warranty and the software's author, the holder of the + * economic rights, and the successive licensors have only limited + * liability. + * + * In this respect, the user's attention is drawn to the risks associated + * with loading, using, modifying and/or developing or reproducing the + * software by the user in light of its specific status of free software, + * that may mean that it is complicated to manipulate, and that also + * therefore means that it is reserved for developers and experienced + * professionals having in-depth computer knowledge. Users are therefore + * encouraged to load and test the software's suitability as regards their + * requirements in conditions enabling the security of their systems and/or + * data to be ensured and, more generally, to use and operate it in the + * same conditions as regards security. + * + * The fact that you are presently reading this means that you have had + * knowledge of the CeCILL license and that you accept its terms. + * #L% + */ +import java.util.Collection; +import java.util.HashMap; +import java.util.HashSet; +import java.util.Map; + +/** A process pool. + * + * @author Emmanuel Bigeon */ +public final class TaskPool { + /** The running processes. */ + private final Map running = new HashMap<>(); + /** The count for process id. */ + private int count = 0; + /** The lock for pid attribution synchronization. */ + private final Object lock = new Object(); + private final boolean autoClear; + + /** Default constructor. */ + public TaskPool() { + this(true); + } + + /** Default constructor. */ + public TaskPool(boolean autoClear) { + this.autoClear = autoClear; + } + + /** Remove a task from the pool + * + * @param pid the task id */ + public void remove(String pid) { + synchronized (lock) { + running.remove(pid); + count = Math.min(count, Integer.parseInt(pid)); + } + } + + /** Add a process in the pool. + * + * @param cmd the process + * @return the pid */ + public String add(final Task cmd) { + if (cmd == null) { + throw new IllegalArgumentException("Task cannot be null"); //$NON-NLS-1$ + } + final String pid; + synchronized (lock) { + pid = getPID(); + running.put(pid, cmd); + } + if (autoClear) { + cmd.addInterruptionListener(new InterruptionListener() { + @SuppressWarnings("synthetic-access") + @Override + public void interrupted() { + synchronized (lock) { + remove(pid); + } + cmd.rmInterruptionListener(this); + } + }); + } + return pid; + } + + /** Get a process by it associated identifier. + * + * @param pid the task id + * @return the task, if any, associated to this id */ + public Task get(final String pid) { + synchronized (lock) { + return running.get(pid); + } + } + + /** Get the next process id. + * + * @return the process id */ + private String getPID() { + synchronized (lock) { + String pid; + do { + pid = Integer.toString(count++); + } while (running.containsKey(pid)); + return pid; + } + } + + /** Get the running processes' identifiers. + * + * @return the pids */ + public Collection getPIDs() { + return new HashSet<>(running.keySet()); + } + + /** @return if the clearing of ended task is automatic */ + public boolean isAutoClearing() { + return autoClear; + } + + /** Request all task to stop running. + *

+ * This call does not guaranty end of execution, it is up to the task + * implementation to actually take into account the termination request. */ + public void shutdown() { + synchronized (lock) { + for (final Task task : running.values()) { + task.setRunning(false); + } + } + } +} diff --git a/gclc-process/src/main/java/fr/bigeon/gclc/process/TaskSpawner.java b/gclc-process/src/main/java/net/bigeon/gclc/process/TaskSpawner.java similarity index 62% rename from gclc-process/src/main/java/fr/bigeon/gclc/process/TaskSpawner.java rename to gclc-process/src/main/java/net/bigeon/gclc/process/TaskSpawner.java index 7b9cbf1..48202f8 100644 --- a/gclc-process/src/main/java/fr/bigeon/gclc/process/TaskSpawner.java +++ b/gclc-process/src/main/java/net/bigeon/gclc/process/TaskSpawner.java @@ -1,82 +1,115 @@ -/* - * process, Distribution repositories and basic setup for Emmanuel Bigeon projects - * Copyright (C) 2014-2018 E. Bigeon - * mailto:emmanuel@bigeon.fr - * - * This software is governed by the CeCILL license under French law and - * abiding by the rules of distribution of free software. You can use, - * modify and/or redistribute the software under the terms of the CeCILL - * license as circulated by CEA, CNRS and INRIA at the following URL - * "http://www.cecill.info". - * - * As a counterpart to the access to the source code and rights to copy, - * modify and redistribute granted by the license, users are provided only - * with a limited warranty and the software's author, the holder of the - * economic rights, and the successive licensors have only limited - * liability. - * - * In this respect, the user's attention is drawn to the risks associated - * with loading, using, modifying and/or developing or reproducing the - * software by the user in light of its specific status of free software, - * that may mean that it is complicated to manipulate, and that also - * therefore means that it is reserved for developers and experienced - * professionals having in-depth computer knowledge. Users are therefore - * encouraged to load and test the software's suitability as regards their - * requirements in conditions enabling the security of their systems and/or - * data to be ensured and, more generally, to use and operate it in the - * same conditions as regards security. - * - * The fact that you are presently reading this means that you have had - * knowledge of the CeCILL license and that you accept its terms. - */ -/** - * gclc:fr.bigeon.gclc.proc.ProcessList.java - * Created on: May 10, 2017 - */ -package fr.bigeon.gclc.process; - -import java.util.concurrent.ExecutorService; - -import fr.bigeon.gclc.command.Command; -import fr.bigeon.gclc.exception.CommandRunException; -import fr.bigeon.gclc.manager.ConsoleInput; -import fr.bigeon.gclc.manager.ConsoleOutput; - -/** An abstract command to generate a task and return the control to the user - * - * @author Emmanuel Bigeon */ -public abstract class TaskSpawner extends Command { - /** The process pool */ - private final TaskPool pool; - private final ExecutorService threadPool; - - /** @param name the command name - * @param pool the pool */ - public TaskSpawner(final String name, final TaskPool pool, - ExecutorService threadPool) { - super(name); - this.pool = pool; - this.threadPool = threadPool; - } - - /** @param in the input - * @param out the output - * @param args the arguments - * @return the process to start and add to the pool - * @throws CommandRunException if the task creation failed */ - protected abstract Task createTask(ConsoleOutput out, ConsoleInput in, - String... args) throws CommandRunException; - - /* (non-Javadoc) - * @see fr.bigeon.gclc.command.ICommand#execute(fr.bigeon.gclc.manager. - * ConsoleOutput, fr.bigeon.gclc.manager.ConsoleInput, - * java.lang.String[]) */ - @Override - public final void execute(final ConsoleOutput out, final ConsoleInput in, - final String... args) throws CommandRunException { - final Task task = createTask(out, in, args); - final Thread th = new Thread(task); - pool.add(task); - threadPool.execute(th); - } -} +/* + * process, Distribution repositories and basic setup for Emmanuel Bigeon projects + * Copyright (C) 2014-2018 E. Bigeon + * mailto:emmanuel@bigeon.fr + * + * This software is governed by the CeCILL license under French law and + * abiding by the rules of distribution of free software. You can use, + * modify and/or redistribute the software under the terms of the CeCILL + * license as circulated by CEA, CNRS and INRIA at the following URL + * "http://www.cecill.info". + * + * As a counterpart to the access to the source code and rights to copy, + * modify and redistribute granted by the license, users are provided only + * with a limited warranty and the software's author, the holder of the + * economic rights, and the successive licensors have only limited + * liability. + * + * In this respect, the user's attention is drawn to the risks associated + * with loading, using, modifying and/or developing or reproducing the + * software by the user in light of its specific status of free software, + * that may mean that it is complicated to manipulate, and that also + * therefore means that it is reserved for developers and experienced + * professionals having in-depth computer knowledge. Users are therefore + * encouraged to load and test the software's suitability as regards their + * requirements in conditions enabling the security of their systems and/or + * data to be ensured and, more generally, to use and operate it in the + * same conditions as regards security. + * + * The fact that you are presently reading this means that you have had + * knowledge of the CeCILL license and that you accept its terms. + */ +/** + * gclc:fr.bigeon.gclc.proc.ProcessList.java + * Created on: May 10, 2017 + */ +package net.bigeon.gclc.process; + +/*- + * #%L + * process + * %% + * Copyright (C) 2014 - 2018 Bigeon + * %% + * This software is governed by the CeCILL license under French law and + * abiding by the rules of distribution of free software. You can use, + * modify and/ or redistribute the software under the terms of the CeCILL + * license as circulated by CEA, CNRS and INRIA at the following URL + * "http://www.cecill.info". + * + * As a counterpart to the access to the source code and rights to copy, + * modify and redistribute granted by the license, users are provided only + * with a limited warranty and the software's author, the holder of the + * economic rights, and the successive licensors have only limited + * liability. + * + * In this respect, the user's attention is drawn to the risks associated + * with loading, using, modifying and/or developing or reproducing the + * software by the user in light of its specific status of free software, + * that may mean that it is complicated to manipulate, and that also + * therefore means that it is reserved for developers and experienced + * professionals having in-depth computer knowledge. Users are therefore + * encouraged to load and test the software's suitability as regards their + * requirements in conditions enabling the security of their systems and/or + * data to be ensured and, more generally, to use and operate it in the + * same conditions as regards security. + * + * The fact that you are presently reading this means that you have had + * knowledge of the CeCILL license and that you accept its terms. + * #L% + */ +import java.util.concurrent.ExecutorService; + +import net.bigeon.gclc.command.Command; +import net.bigeon.gclc.exception.CommandRunException; +import net.bigeon.gclc.manager.ConsoleInput; +import net.bigeon.gclc.manager.ConsoleOutput; + +/** An abstract command to generate a task and return the control to the user + * + * @author Emmanuel Bigeon */ +public abstract class TaskSpawner extends Command { + /** The process pool */ + private final TaskPool pool; + private final ExecutorService threadPool; + + /** @param name the command name + * @param pool the pool */ + public TaskSpawner(final String name, final TaskPool pool, + ExecutorService threadPool) { + super(name); + this.pool = pool; + this.threadPool = threadPool; + } + + /** @param in the input + * @param out the output + * @param args the arguments + * @return the process to start and add to the pool + * @throws CommandRunException if the task creation failed */ + protected abstract Task createTask(ConsoleOutput out, ConsoleInput in, + String... args) throws CommandRunException; + + /* (non-Javadoc) + * @see fr.bigeon.gclc.command.ICommand#execute(fr.bigeon.gclc.manager. + * ConsoleOutput, fr.bigeon.gclc.manager.ConsoleInput, + * java.lang.String[]) */ + @Override + public final void execute(final ConsoleOutput out, final ConsoleInput in, + final String... args) throws CommandRunException { + final Task task = createTask(out, in, args); + final Thread th = new Thread(task); + pool.add(task); + threadPool.execute(th); + } +} diff --git a/gclc-process/src/main/java/fr/bigeon/gclc/process/io/ConnectingConsoleInput.java b/gclc-process/src/main/java/net/bigeon/gclc/process/io/ConnectingConsoleInput.java similarity index 78% rename from gclc-process/src/main/java/fr/bigeon/gclc/process/io/ConnectingConsoleInput.java rename to gclc-process/src/main/java/net/bigeon/gclc/process/io/ConnectingConsoleInput.java index 6cbbeff..eaf6bfa 100644 --- a/gclc-process/src/main/java/fr/bigeon/gclc/process/io/ConnectingConsoleInput.java +++ b/gclc-process/src/main/java/net/bigeon/gclc/process/io/ConnectingConsoleInput.java @@ -1,211 +1,244 @@ -/* - * process, Distribution repositories and basic setup for Emmanuel Bigeon projects - * Copyright (C) 2014-2018 E. Bigeon - * mailto:emmanuel@bigeon.fr - * - * This software is governed by the CeCILL license under French law and - * abiding by the rules of distribution of free software. You can use, - * modify and/or redistribute the software under the terms of the CeCILL - * license as circulated by CEA, CNRS and INRIA at the following URL - * "http://www.cecill.info". - * - * As a counterpart to the access to the source code and rights to copy, - * modify and redistribute granted by the license, users are provided only - * with a limited warranty and the software's author, the holder of the - * economic rights, and the successive licensors have only limited - * liability. - * - * In this respect, the user's attention is drawn to the risks associated - * with loading, using, modifying and/or developing or reproducing the - * software by the user in light of its specific status of free software, - * that may mean that it is complicated to manipulate, and that also - * therefore means that it is reserved for developers and experienced - * professionals having in-depth computer knowledge. Users are therefore - * encouraged to load and test the software's suitability as regards their - * requirements in conditions enabling the security of their systems and/or - * data to be ensured and, more generally, to use and operate it in the - * same conditions as regards security. - * - * The fact that you are presently reading this means that you have had - * knowledge of the CeCILL license and that you accept its terms. - */ -/** - * - */ -package fr.bigeon.gclc.process.io; - -import java.io.IOException; -import java.util.logging.Level; -import java.util.logging.Logger; - -import fr.bigeon.gclc.manager.ConsoleInput; -import fr.bigeon.gclc.tools.StringProvider; - -/** @author Emmanuel Bigeon */ -public final class ConnectingConsoleInput implements ConsoleInput { - - private static final Logger LOGGER = Logger - .getLogger(ConnectingConsoleInput.class.getName()); - private boolean close = false; - private StringProvider prompt; - private boolean prompting; - private final Object promptLock = new Object(); - private final Object connectionLock = new Object(); - private ConsoleInput connected; - private boolean disconnection; - - /* (non-Javadoc) - * @see fr.bigeon.gclc.manager.ConsoleInput#close() */ - @Override - public void close() throws IOException { - close = true; - } - - /* (non-Javadoc) - * @see fr.bigeon.gclc.manager.ConsoleInput#getPrompt() */ - @Override - public StringProvider getPrompt() { - return prompt; - } - - /* (non-Javadoc) - * @see fr.bigeon.gclc.manager.ConsoleInput#interruptPrompt() */ - @Override - public void interruptPrompt() { - synchronized (promptLock) { - prompting = false; - if (connected != null) { - connected.interruptPrompt(); - } - promptLock.notifyAll(); - } - } - - /* (non-Javadoc) - * @see fr.bigeon.gclc.manager.ConsoleInput#isClosed() */ - @Override - public boolean isClosed() { - return close; - } - - /* (non-Javadoc) - * @see fr.bigeon.gclc.manager.ConsoleInput#prompt() */ - @Override - public String prompt() throws IOException { - return prompt(prompt.apply()); - } - - /* (non-Javadoc) - * @see fr.bigeon.gclc.manager.ConsoleInput#setPrompt(fr.bigeon.gclc.tools. - * StringProvider) */ - @Override - public void setPrompt(StringProvider string) { - prompt = string; - } - - /* (non-Javadoc) - * @see fr.bigeon.gclc.manager.ConsoleInput#prompt(long) */ - @Override - public String prompt(long timeout) throws IOException { - return prompt(prompt.apply(), timeout); - } - - /* (non-Javadoc) - * @see fr.bigeon.gclc.manager.ConsoleInput#prompt(java.lang.String) */ - @Override - public String prompt(String message) throws IOException { - synchronized (promptLock) { - prompting = true; - } - while (prompting) { - synchronized (promptLock) { - if (connected == null) { - try { - promptLock.wait(); - } catch (final InterruptedException e) { - LOGGER.log(Level.WARNING, "Inerruption of console thread", e); - Thread.currentThread().interrupt(); - } - } else { - final String res = connected.prompt(message); - synchronized (connectionLock) { - if (disconnection) { - disconnection = false; - } else if (prompting) { - return res; - } - } - } - } - } - return null; - } - - /* (non-Javadoc) - * @see fr.bigeon.gclc.manager.ConsoleInput#prompt(java.lang.String, long) */ - @Override - public String prompt(String message, long timeout) throws IOException { - if (timeout <= 0) { - return prompt(message); - } - final long end = System.currentTimeMillis() + timeout; - synchronized (promptLock) { - prompting = true; - } - while (prompting) { - synchronized (promptLock) { - if (connected == null) { - try { - promptLock.wait(); - } catch (final InterruptedException e) { - LOGGER.log(Level.WARNING, "Inerruption of console thread", e); - Thread.currentThread().interrupt(); - } - } else { - final String res = connected.prompt(message, - end - System.currentTimeMillis()); - synchronized (connectionLock) { - if (disconnection) { - disconnection = false; - } else if (prompting) { - return res; - } - } - } - } - } - return null; - } - - /* (non-Javadoc) - * @see fr.bigeon.gclc.manager.ConsoleInput#setPrompt(java.lang.String) */ - @Override - public void setPrompt(final String prompt) { - this.prompt = new StringProvider() { - @Override - public String apply() { - return prompt; - } - }; - } - - public void connect(ConsoleInput input) { - disconnect(); - synchronized (promptLock) { - connected = input; - promptLock.notifyAll(); - } - } - - public void disconnect() { - synchronized (connectionLock) { - if (connected != null) { - disconnection = true; - synchronized (promptLock) { - connected.interruptPrompt(); - } - connected = null; - } - } - } -} +/* + * process, Distribution repositories and basic setup for Emmanuel Bigeon projects + * Copyright (C) 2014-2018 E. Bigeon + * mailto:emmanuel@bigeon.fr + * + * This software is governed by the CeCILL license under French law and + * abiding by the rules of distribution of free software. You can use, + * modify and/or redistribute the software under the terms of the CeCILL + * license as circulated by CEA, CNRS and INRIA at the following URL + * "http://www.cecill.info". + * + * As a counterpart to the access to the source code and rights to copy, + * modify and redistribute granted by the license, users are provided only + * with a limited warranty and the software's author, the holder of the + * economic rights, and the successive licensors have only limited + * liability. + * + * In this respect, the user's attention is drawn to the risks associated + * with loading, using, modifying and/or developing or reproducing the + * software by the user in light of its specific status of free software, + * that may mean that it is complicated to manipulate, and that also + * therefore means that it is reserved for developers and experienced + * professionals having in-depth computer knowledge. Users are therefore + * encouraged to load and test the software's suitability as regards their + * requirements in conditions enabling the security of their systems and/or + * data to be ensured and, more generally, to use and operate it in the + * same conditions as regards security. + * + * The fact that you are presently reading this means that you have had + * knowledge of the CeCILL license and that you accept its terms. + */ +/** + * + */ +package net.bigeon.gclc.process.io; + +/*- + * #%L + * process + * %% + * Copyright (C) 2014 - 2018 Bigeon + * %% + * This software is governed by the CeCILL license under French law and + * abiding by the rules of distribution of free software. You can use, + * modify and/ or redistribute the software under the terms of the CeCILL + * license as circulated by CEA, CNRS and INRIA at the following URL + * "http://www.cecill.info". + * + * As a counterpart to the access to the source code and rights to copy, + * modify and redistribute granted by the license, users are provided only + * with a limited warranty and the software's author, the holder of the + * economic rights, and the successive licensors have only limited + * liability. + * + * In this respect, the user's attention is drawn to the risks associated + * with loading, using, modifying and/or developing or reproducing the + * software by the user in light of its specific status of free software, + * that may mean that it is complicated to manipulate, and that also + * therefore means that it is reserved for developers and experienced + * professionals having in-depth computer knowledge. Users are therefore + * encouraged to load and test the software's suitability as regards their + * requirements in conditions enabling the security of their systems and/or + * data to be ensured and, more generally, to use and operate it in the + * same conditions as regards security. + * + * The fact that you are presently reading this means that you have had + * knowledge of the CeCILL license and that you accept its terms. + * #L% + */ +import java.io.IOException; +import java.util.logging.Level; +import java.util.logging.Logger; + +import net.bigeon.gclc.manager.ConsoleInput; +import net.bigeon.gclc.tools.StringProvider; + +/** @author Emmanuel Bigeon */ +public final class ConnectingConsoleInput implements ConsoleInput { + + private static final Logger LOGGER = Logger + .getLogger(ConnectingConsoleInput.class.getName()); + private boolean close = false; + private StringProvider prompt; + private boolean prompting; + private final Object promptLock = new Object(); + private final Object connectionLock = new Object(); + private ConsoleInput connected; + private boolean disconnection; + + /* (non-Javadoc) + * @see fr.bigeon.gclc.manager.ConsoleInput#close() */ + @Override + public void close() throws IOException { + close = true; + } + + /* (non-Javadoc) + * @see fr.bigeon.gclc.manager.ConsoleInput#getPrompt() */ + @Override + public StringProvider getPrompt() { + return prompt; + } + + /* (non-Javadoc) + * @see fr.bigeon.gclc.manager.ConsoleInput#interruptPrompt() */ + @Override + public void interruptPrompt() { + synchronized (promptLock) { + prompting = false; + if (connected != null) { + connected.interruptPrompt(); + } + promptLock.notifyAll(); + } + } + + /* (non-Javadoc) + * @see fr.bigeon.gclc.manager.ConsoleInput#isClosed() */ + @Override + public boolean isClosed() { + return close; + } + + /* (non-Javadoc) + * @see fr.bigeon.gclc.manager.ConsoleInput#prompt() */ + @Override + public String prompt() throws IOException { + return prompt(prompt.apply()); + } + + /* (non-Javadoc) + * @see fr.bigeon.gclc.manager.ConsoleInput#setPrompt(fr.bigeon.gclc.tools. + * StringProvider) */ + @Override + public void setPrompt(StringProvider string) { + prompt = string; + } + + /* (non-Javadoc) + * @see fr.bigeon.gclc.manager.ConsoleInput#prompt(long) */ + @Override + public String prompt(long timeout) throws IOException { + return prompt(prompt.apply(), timeout); + } + + /* (non-Javadoc) + * @see fr.bigeon.gclc.manager.ConsoleInput#prompt(java.lang.String) */ + @Override + public String prompt(String message) throws IOException { + synchronized (promptLock) { + prompting = true; + } + while (prompting) { + synchronized (promptLock) { + if (connected == null) { + try { + promptLock.wait(); + } catch (final InterruptedException e) { + LOGGER.log(Level.WARNING, "Inerruption of console thread", e); + Thread.currentThread().interrupt(); + } + } else { + final String res = connected.prompt(message); + synchronized (connectionLock) { + if (disconnection) { + disconnection = false; + } else if (prompting) { + return res; + } + } + } + } + } + return null; + } + + /* (non-Javadoc) + * @see fr.bigeon.gclc.manager.ConsoleInput#prompt(java.lang.String, long) */ + @Override + public String prompt(String message, long timeout) throws IOException { + if (timeout <= 0) { + return prompt(message); + } + final long end = System.currentTimeMillis() + timeout; + synchronized (promptLock) { + prompting = true; + } + while (prompting) { + synchronized (promptLock) { + if (connected == null) { + try { + promptLock.wait(); + } catch (final InterruptedException e) { + LOGGER.log(Level.WARNING, "Inerruption of console thread", e); + Thread.currentThread().interrupt(); + } + } else { + final String res = connected.prompt(message, + end - System.currentTimeMillis()); + synchronized (connectionLock) { + if (disconnection) { + disconnection = false; + } else if (prompting) { + return res; + } + } + } + } + } + return null; + } + + /* (non-Javadoc) + * @see fr.bigeon.gclc.manager.ConsoleInput#setPrompt(java.lang.String) */ + @Override + public void setPrompt(final String prompt) { + this.prompt = new StringProvider() { + @Override + public String apply() { + return prompt; + } + }; + } + + public void connect(ConsoleInput input) { + disconnect(); + synchronized (promptLock) { + connected = input; + promptLock.notifyAll(); + } + } + + public void disconnect() { + synchronized (connectionLock) { + if (connected != null) { + disconnection = true; + synchronized (promptLock) { + connected.interruptPrompt(); + } + connected = null; + } + } + } +} diff --git a/gclc-process/src/main/java/fr/bigeon/gclc/process/io/ConnectingConsoleOutput.java b/gclc-process/src/main/java/net/bigeon/gclc/process/io/ConnectingConsoleOutput.java similarity index 72% rename from gclc-process/src/main/java/fr/bigeon/gclc/process/io/ConnectingConsoleOutput.java rename to gclc-process/src/main/java/net/bigeon/gclc/process/io/ConnectingConsoleOutput.java index 9292c45..b64b3c7 100644 --- a/gclc-process/src/main/java/fr/bigeon/gclc/process/io/ConnectingConsoleOutput.java +++ b/gclc-process/src/main/java/net/bigeon/gclc/process/io/ConnectingConsoleOutput.java @@ -1,146 +1,179 @@ -/* - * process, Distribution repositories and basic setup for Emmanuel Bigeon projects - * Copyright (C) 2014-2018 E. Bigeon - * mailto:emmanuel@bigeon.fr - * - * This software is governed by the CeCILL license under French law and - * abiding by the rules of distribution of free software. You can use, - * modify and/or redistribute the software under the terms of the CeCILL - * license as circulated by CEA, CNRS and INRIA at the following URL - * "http://www.cecill.info". - * - * As a counterpart to the access to the source code and rights to copy, - * modify and redistribute granted by the license, users are provided only - * with a limited warranty and the software's author, the holder of the - * economic rights, and the successive licensors have only limited - * liability. - * - * In this respect, the user's attention is drawn to the risks associated - * with loading, using, modifying and/or developing or reproducing the - * software by the user in light of its specific status of free software, - * that may mean that it is complicated to manipulate, and that also - * therefore means that it is reserved for developers and experienced - * professionals having in-depth computer knowledge. Users are therefore - * encouraged to load and test the software's suitability as regards their - * requirements in conditions enabling the security of their systems and/or - * data to be ensured and, more generally, to use and operate it in the - * same conditions as regards security. - * - * The fact that you are presently reading this means that you have had - * knowledge of the CeCILL license and that you accept its terms. - */ -/** - * - */ -package fr.bigeon.gclc.process.io; - -import java.io.IOException; -import java.util.ArrayDeque; -import java.util.Deque; -import java.util.logging.Level; -import java.util.logging.Logger; - -import fr.bigeon.gclc.manager.ConsoleOutput; - -/** @author Emmanuel Bigeon */ -public class ConnectingConsoleOutput implements ConsoleOutput { - - private static final Logger LOGGER = Logger - .getLogger(ConnectingConsoleOutput.class.getName()); - /** If the undelivered message should be stored. */ - public static final int QUEUE = 1; - /** If the messages should be stored in all cases. */ - public static final int PERSIST = 1 << 1; - private ConsoleOutput output; - private boolean close = false; - - private final boolean persistent; - private final boolean queued; - private final Deque messages; - private final int lines; - - /** @param style the type of redirected output - * @param lines the number of lines to store */ - public ConnectingConsoleOutput(int style, int lines) { - super(); - this.lines = lines; - queued = (style & QUEUE) != 0; - persistent = (style & PERSIST) != 0; - if (lines > 0) { - messages = new ArrayDeque<>(lines); - } else { - messages = new ArrayDeque<>(); - } - } - - private synchronized void addMessage(String text) { - if (persistent || queued && output == null) { - if (messages.size() == lines) { - messages.poll(); - } - messages.offer(text); - } - if (output != null) { - try { - output.print(text); - } catch (final IOException e) { - LOGGER.severe("nable to print to connecting console"); - LOGGER.log(Level.FINE, "Console error", e); - } - } - } - - /* (non-Javadoc) - * @see java.lang.AutoCloseable#close() */ - @Override - public void close() { - close = true; - } - - /* (non-Javadoc) - * @see fr.bigeon.gclc.manager.ConsoleOutput#isClosed() */ - @Override - public boolean isClosed() { - return close; - } - - /* (non-Javadoc) - * @see fr.bigeon.gclc.manager.ConsoleOutput#print(java.lang.String) */ - @Override - public void print(String text) { - addMessage(text); - } - - /* (non-Javadoc) - * @see fr.bigeon.gclc.manager.ConsoleOutput#println() */ - @Override - public void println() { - addMessage(System.lineSeparator()); - } - - /* (non-Javadoc) - * @see fr.bigeon.gclc.manager.ConsoleOutput#println(java.lang.String) */ - @Override - public void println(String message) { - addMessage(message + System.lineSeparator()); - } - - public synchronized void connect(ConsoleOutput output) { - this.output = output; - for (final String string : messages) { - try { - output.print(string); - } catch (final IOException e) { - LOGGER.severe("nable to print to connecting console"); - LOGGER.log(Level.FINE, "Console error", e); - } - } - if (!persistent) { - messages.clear(); - } - } - - public synchronized void disconnect() { - output = null; - } -} +/* + * process, Distribution repositories and basic setup for Emmanuel Bigeon projects + * Copyright (C) 2014-2018 E. Bigeon + * mailto:emmanuel@bigeon.fr + * + * This software is governed by the CeCILL license under French law and + * abiding by the rules of distribution of free software. You can use, + * modify and/or redistribute the software under the terms of the CeCILL + * license as circulated by CEA, CNRS and INRIA at the following URL + * "http://www.cecill.info". + * + * As a counterpart to the access to the source code and rights to copy, + * modify and redistribute granted by the license, users are provided only + * with a limited warranty and the software's author, the holder of the + * economic rights, and the successive licensors have only limited + * liability. + * + * In this respect, the user's attention is drawn to the risks associated + * with loading, using, modifying and/or developing or reproducing the + * software by the user in light of its specific status of free software, + * that may mean that it is complicated to manipulate, and that also + * therefore means that it is reserved for developers and experienced + * professionals having in-depth computer knowledge. Users are therefore + * encouraged to load and test the software's suitability as regards their + * requirements in conditions enabling the security of their systems and/or + * data to be ensured and, more generally, to use and operate it in the + * same conditions as regards security. + * + * The fact that you are presently reading this means that you have had + * knowledge of the CeCILL license and that you accept its terms. + */ +/** + * + */ +package net.bigeon.gclc.process.io; + +/*- + * #%L + * process + * %% + * Copyright (C) 2014 - 2018 Bigeon + * %% + * This software is governed by the CeCILL license under French law and + * abiding by the rules of distribution of free software. You can use, + * modify and/ or redistribute the software under the terms of the CeCILL + * license as circulated by CEA, CNRS and INRIA at the following URL + * "http://www.cecill.info". + * + * As a counterpart to the access to the source code and rights to copy, + * modify and redistribute granted by the license, users are provided only + * with a limited warranty and the software's author, the holder of the + * economic rights, and the successive licensors have only limited + * liability. + * + * In this respect, the user's attention is drawn to the risks associated + * with loading, using, modifying and/or developing or reproducing the + * software by the user in light of its specific status of free software, + * that may mean that it is complicated to manipulate, and that also + * therefore means that it is reserved for developers and experienced + * professionals having in-depth computer knowledge. Users are therefore + * encouraged to load and test the software's suitability as regards their + * requirements in conditions enabling the security of their systems and/or + * data to be ensured and, more generally, to use and operate it in the + * same conditions as regards security. + * + * The fact that you are presently reading this means that you have had + * knowledge of the CeCILL license and that you accept its terms. + * #L% + */ +import java.io.IOException; +import java.util.ArrayDeque; +import java.util.Deque; +import java.util.logging.Level; +import java.util.logging.Logger; + +import net.bigeon.gclc.manager.ConsoleOutput; + +/** @author Emmanuel Bigeon */ +public class ConnectingConsoleOutput implements ConsoleOutput { + + private static final Logger LOGGER = Logger + .getLogger(ConnectingConsoleOutput.class.getName()); + /** If the undelivered message should be stored. */ + public static final int QUEUE = 1; + /** If the messages should be stored in all cases. */ + public static final int PERSIST = 1 << 1; + private ConsoleOutput output; + private boolean close = false; + + private final boolean persistent; + private final boolean queued; + private final Deque messages; + private final int lines; + + /** @param style the type of redirected output + * @param lines the number of lines to store */ + public ConnectingConsoleOutput(int style, int lines) { + super(); + this.lines = lines; + queued = (style & QUEUE) != 0; + persistent = (style & PERSIST) != 0; + if (lines > 0) { + messages = new ArrayDeque<>(lines); + } else { + messages = new ArrayDeque<>(); + } + } + + private synchronized void addMessage(String text) { + if (persistent || queued && output == null) { + if (messages.size() == lines) { + messages.poll(); + } + messages.offer(text); + } + if (output != null) { + try { + output.print(text); + } catch (final IOException e) { + LOGGER.severe("nable to print to connecting console"); + LOGGER.log(Level.FINE, "Console error", e); + } + } + } + + /* (non-Javadoc) + * @see java.lang.AutoCloseable#close() */ + @Override + public void close() { + close = true; + } + + /* (non-Javadoc) + * @see fr.bigeon.gclc.manager.ConsoleOutput#isClosed() */ + @Override + public boolean isClosed() { + return close; + } + + /* (non-Javadoc) + * @see fr.bigeon.gclc.manager.ConsoleOutput#print(java.lang.String) */ + @Override + public void print(String text) { + addMessage(text); + } + + /* (non-Javadoc) + * @see fr.bigeon.gclc.manager.ConsoleOutput#println() */ + @Override + public void println() { + addMessage(System.lineSeparator()); + } + + /* (non-Javadoc) + * @see fr.bigeon.gclc.manager.ConsoleOutput#println(java.lang.String) */ + @Override + public void println(String message) { + addMessage(message + System.lineSeparator()); + } + + public synchronized void connect(ConsoleOutput output) { + this.output = output; + for (final String string : messages) { + try { + output.print(string); + } catch (final IOException e) { + LOGGER.severe("nable to print to connecting console"); + LOGGER.log(Level.FINE, "Console error", e); + } + } + if (!persistent) { + messages.clear(); + } + } + + public synchronized void disconnect() { + output = null; + } +}