initial checkin
diff --git a/.gitignore b/.gitignore
new file mode 100644
index 0000000..4188405
--- /dev/null
+++ b/.gitignore
@@ -0,0 +1,34 @@
+
+**/target/
+**/.metadata/
+
+**/emf-gen/**/.gitignore
+**/src-gen/**/.gitignore
+**/git.properties
+**/*.java._trace
+**/*.log
+**/*.log.properties
+
+**/bin/
+**/build/
+*.class
+*.ctrl
+**/Debug/
+.DS_Store
+*.ear
+*.war
+
+**/*.actionbin
+**/*.blipbin
+**/*.chartbin
+**/*.cubebin
+**/*.datatypebin
+**/*.dtobin
+**/*.entitybin
+**/*.servicebin
+**/*.tablebin
+**/*.uibin
+**/*.uisemanticbin
+**/*.xtendbin
+**/*.xtextbin
+
diff --git a/.project b/.project
new file mode 100644
index 0000000..d44b52d
--- /dev/null
+++ b/.project
@@ -0,0 +1,17 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<projectDescription>
+ <name>org.eclipse.osbp.fork.vaadin.addon.maskedtextfield.aggregator</name>
+ <comment></comment>
+ <projects>
+ </projects>
+ <buildSpec>
+ <buildCommand>
+ <name>org.eclipse.m2e.core.maven2Builder</name>
+ <arguments>
+ </arguments>
+ </buildCommand>
+ </buildSpec>
+ <natures>
+ <nature>org.eclipse.m2e.core.maven2Nature</nature>
+ </natures>
+</projectDescription>
diff --git a/.settings/org.eclipse.core.resources.prefs b/.settings/org.eclipse.core.resources.prefs
new file mode 100644
index 0000000..99f26c0
--- /dev/null
+++ b/.settings/org.eclipse.core.resources.prefs
@@ -0,0 +1,2 @@
+eclipse.preferences.version=1
+encoding/<project>=UTF-8
diff --git a/.settings/org.eclipse.m2e.core.prefs b/.settings/org.eclipse.m2e.core.prefs
new file mode 100644
index 0000000..f897a7f
--- /dev/null
+++ b/.settings/org.eclipse.m2e.core.prefs
@@ -0,0 +1,4 @@
+activeProfiles=
+eclipse.preferences.version=1
+resolveWorkspaceProjects=true
+version=1
diff --git a/jenkins.build.config.xml b/jenkins.build.config.xml
new file mode 100644
index 0000000..2d73b1c
--- /dev/null
+++ b/jenkins.build.config.xml
@@ -0,0 +1,29 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+/*
+ * Copyright (c) 2011, 2016 - Loetz GmbH&Co.KG (69115 Heidelberg, Germany)
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except
+ * in compliance with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software distributed under the License
+ * is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express
+ * or implied. See the License for the specific language governing permissions and limitations under
+ * the License.
+ * Contributors:
+ * Loetz GmbH&Co.KG - initial API and implementation
+ */
+-->
+<!--#======================================================================= -->
+<!--# Module specific parameters for the Jenkins Job -->
+<!--#======================================================================= -->
+<jenkins>
+ <jenkins.build.technologystack />
+ <settings>${user.home}/.m2/settingsMirrors.xml</settings>
+ <!-- DO NOT EDIT BELOW THIS LINE -->
+ <jenkins.build.dependencies>
+ <jenkins.build.dependency>org.eclipse.osbp.releng.maven</jenkins.build.dependency>
+ </jenkins.build.dependencies>
+</jenkins>
diff --git a/license.html b/license.html
new file mode 100644
index 0000000..637a181
--- /dev/null
+++ b/license.html
@@ -0,0 +1,300 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+ <head>
+ <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+ <title>Eclipse Public License - Version 2.0</title>
+ <style type="text/css">
+ body {
+ margin: 1.5em 3em;
+ }
+ h1{
+ font-size:1.5em;
+ }
+ h2{
+ font-size:1em;
+ margin-bottom:0.5em;
+ margin-top:1em;
+ }
+ p {
+ margin-top: 0.5em;
+ margin-bottom: 0.5em;
+ }
+ ul, ol{
+ list-style-type:none;
+ }
+ </style>
+ </head>
+ <body>
+ <h1>Eclipse Public License - v 2.0</h1>
+ <p>THE ACCOMPANYING PROGRAM IS PROVIDED UNDER THE TERMS OF THIS ECLIPSE
+ PUBLIC LICENSE (“AGREEMENT”). ANY USE, REPRODUCTION OR DISTRIBUTION
+ OF THE PROGRAM CONSTITUTES RECIPIENT'S ACCEPTANCE OF THIS AGREEMENT.
+ </p>
+ <h2 id="definitions">1. DEFINITIONS</h2>
+ <p>“Contribution” means:</p>
+ <ul>
+ <li>a) in the case of the initial Contributor, the initial content
+ Distributed under this Agreement, and
+ </li>
+ <li>
+ b) in the case of each subsequent Contributor:
+ <ul>
+ <li>i) changes to the Program, and</li>
+ <li>ii) additions to the Program;</li>
+ </ul>
+ where such changes and/or additions to the Program originate from
+ and are Distributed by that particular Contributor. A Contribution
+ “originates” from a Contributor if it was added to the Program by such
+ Contributor itself or anyone acting on such Contributor's behalf.
+ Contributions do not include changes or additions to the Program that
+ are not Modified Works.
+ </li>
+ </ul>
+ <p>“Contributor” means any person or entity that Distributes the Program.</p>
+ <p>“Licensed Patents” mean patent claims licensable by a Contributor which
+ are necessarily infringed by the use or sale of its Contribution alone
+ or when combined with the Program.
+ </p>
+ <p>“Program” means the Contributions Distributed in accordance with this
+ Agreement.
+ </p>
+ <p>“Recipient” means anyone who receives the Program under this Agreement
+ or any Secondary License (as applicable), including Contributors.
+ </p>
+ <p>“Derivative Works” shall mean any work, whether in Source Code or other
+ form, that is based on (or derived from) the Program and for which the
+ editorial revisions, annotations, elaborations, or other modifications
+ represent, as a whole, an original work of authorship.
+ </p>
+ <p>“Modified Works” shall mean any work in Source Code or other form that
+ results from an addition to, deletion from, or modification of the
+ contents of the Program, including, for purposes of clarity any new file
+ in Source Code form that contains any contents of the Program. Modified
+ Works shall not include works that contain only declarations, interfaces,
+ types, classes, structures, or files of the Program solely in each case
+ in order to link to, bind by name, or subclass the Program or Modified
+ Works thereof.
+ </p>
+ <p>“Distribute” means the acts of a) distributing or b) making available
+ in any manner that enables the transfer of a copy.
+ </p>
+ <p>“Source Code” means the form of a Program preferred for making
+ modifications, including but not limited to software source code,
+ documentation source, and configuration files.
+ </p>
+ <p>“Secondary License” means either the GNU General Public License,
+ Version 2.0, or any later versions of that license, including any
+ exceptions or additional permissions as identified by the initial
+ Contributor.
+ </p>
+ <h2 id="grant-of-rights">2. GRANT OF RIGHTS</h2>
+ <ul>
+ <li>a) Subject to the terms of this Agreement, each Contributor hereby
+ grants Recipient a non-exclusive, worldwide, royalty-free copyright
+ license to reproduce, prepare Derivative Works of, publicly display,
+ publicly perform, Distribute and sublicense the Contribution of such
+ Contributor, if any, and such Derivative Works.
+ </li>
+ <li>b) Subject to the terms of this Agreement, each Contributor hereby
+ grants Recipient a non-exclusive, worldwide, royalty-free patent
+ license under Licensed Patents to make, use, sell, offer to sell,
+ import and otherwise transfer the Contribution of such Contributor,
+ if any, in Source Code or other form. This patent license shall
+ apply to the combination of the Contribution and the Program if,
+ at the time the Contribution is added by the Contributor, such
+ addition of the Contribution causes such combination to be covered
+ by the Licensed Patents. The patent license shall not apply to any
+ other combinations which include the Contribution. No hardware per
+ se is licensed hereunder.
+ </li>
+ <li>c) Recipient understands that although each Contributor grants the
+ licenses to its Contributions set forth herein, no assurances are
+ provided by any Contributor that the Program does not infringe the
+ patent or other intellectual property rights of any other entity.
+ Each Contributor disclaims any liability to Recipient for claims
+ brought by any other entity based on infringement of intellectual
+ property rights or otherwise. As a condition to exercising the rights
+ and licenses granted hereunder, each Recipient hereby assumes sole
+ responsibility to secure any other intellectual property rights needed,
+ if any. For example, if a third party patent license is required to
+ allow Recipient to Distribute the Program, it is Recipient's
+ responsibility to acquire that license before distributing the Program.
+ </li>
+ <li>d) Each Contributor represents that to its knowledge it has sufficient
+ copyright rights in its Contribution, if any, to grant the copyright
+ license set forth in this Agreement.
+ </li>
+ <li>e) Notwithstanding the terms of any Secondary License, no Contributor
+ makes additional grants to any Recipient (other than those set forth
+ in this Agreement) as a result of such Recipient's receipt of the
+ Program under the terms of a Secondary License (if permitted under
+ the terms of Section 3).
+ </li>
+ </ul>
+ <h2 id="requirements">3. REQUIREMENTS</h2>
+ <p>3.1 If a Contributor Distributes the Program in any form, then:</p>
+ <ul>
+ <li>a) the Program must also be made available as Source Code, in
+ accordance with section 3.2, and the Contributor must accompany
+ the Program with a statement that the Source Code for the Program
+ is available under this Agreement, and informs Recipients how to
+ obtain it in a reasonable manner on or through a medium customarily
+ used for software exchange; and
+ </li>
+ <li>
+ b) the Contributor may Distribute the Program under a license
+ different than this Agreement, provided that such license:
+ <ul>
+ <li>i) effectively disclaims on behalf of all other Contributors all
+ warranties and conditions, express and implied, including warranties
+ or conditions of title and non-infringement, and implied warranties
+ or conditions of merchantability and fitness for a particular purpose;
+ </li>
+ <li>ii) effectively excludes on behalf of all other Contributors all
+ liability for damages, including direct, indirect, special, incidental
+ and consequential damages, such as lost profits;
+ </li>
+ <li>iii) does not attempt to limit or alter the recipients' rights in the
+ Source Code under section 3.2; and
+ </li>
+ <li>iv) requires any subsequent distribution of the Program by any party
+ to be under a license that satisfies the requirements of this section 3.
+ </li>
+ </ul>
+ </li>
+ </ul>
+ <p>3.2 When the Program is Distributed as Source Code:</p>
+ <ul>
+ <li>a) it must be made available under this Agreement, or if the Program (i)
+ is combined with other material in a separate file or files made available
+ under a Secondary License, and (ii) the initial Contributor attached to
+ the Source Code the notice described in Exhibit A of this Agreement,
+ then the Program may be made available under the terms of such
+ Secondary Licenses, and
+ </li>
+ <li>b) a copy of this Agreement must be included with each copy of the Program.</li>
+ </ul>
+ <p>3.3 Contributors may not remove or alter any copyright, patent, trademark,
+ attribution notices, disclaimers of warranty, or limitations of liability
+ (‘notices’) contained within the Program from any copy of the Program which
+ they Distribute, provided that Contributors may add their own appropriate
+ notices.
+ </p>
+ <h2 id="commercial-distribution">4. COMMERCIAL DISTRIBUTION</h2>
+ <p>Commercial distributors of software may accept certain responsibilities
+ with respect to end users, business partners and the like. While this
+ license is intended to facilitate the commercial use of the Program, the
+ Contributor who includes the Program in a commercial product offering should
+ do so in a manner which does not create potential liability for other
+ Contributors. Therefore, if a Contributor includes the Program in a
+ commercial product offering, such Contributor (“Commercial Contributor”)
+ hereby agrees to defend and indemnify every other Contributor
+ (“Indemnified Contributor”) against any losses, damages and costs
+ (collectively “Losses”) arising from claims, lawsuits and other legal actions
+ brought by a third party against the Indemnified Contributor to the extent
+ caused by the acts or omissions of such Commercial Contributor in connection
+ with its distribution of the Program in a commercial product offering.
+ The obligations in this section do not apply to any claims or Losses relating
+ to any actual or alleged intellectual property infringement. In order to
+ qualify, an Indemnified Contributor must: a) promptly notify the
+ Commercial Contributor in writing of such claim, and b) allow the Commercial
+ Contributor to control, and cooperate with the Commercial Contributor in,
+ the defense and any related settlement negotiations. The Indemnified
+ Contributor may participate in any such claim at its own expense.
+ </p>
+ <p>For example, a Contributor might include the Program
+ in a commercial product offering, Product X. That Contributor is then a
+ Commercial Contributor. If that Commercial Contributor then makes performance
+ claims, or offers warranties related to Product X, those performance claims
+ and warranties are such Commercial Contributor's responsibility alone.
+ Under this section, the Commercial Contributor would have to defend claims
+ against the other Contributors related to those performance claims and
+ warranties, and if a court requires any other Contributor to pay any damages
+ as a result, the Commercial Contributor must pay those damages.
+ </p>
+ <h2 id="warranty">5. NO WARRANTY</h2>
+ <p>EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, AND TO THE EXTENT PERMITTED
+ BY APPLICABLE LAW, THE PROGRAM IS PROVIDED ON AN “AS IS” BASIS, WITHOUT
+ WARRANTIES OR CONDITIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED INCLUDING,
+ WITHOUT LIMITATION, ANY WARRANTIES OR CONDITIONS OF TITLE, NON-INFRINGEMENT,
+ MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. Each Recipient is
+ solely responsible for determining the appropriateness of using and
+ distributing the Program and assumes all risks associated with its
+ exercise of rights under this Agreement, including but not limited to the
+ risks and costs of program errors, compliance with applicable laws, damage
+ to or loss of data, programs or equipment, and unavailability or
+ interruption of operations.
+ </p>
+ <h2 id="disclaimer">6. DISCLAIMER OF LIABILITY</h2>
+ <p>EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, AND TO THE EXTENT PERMITTED
+ BY APPLICABLE LAW, NEITHER RECIPIENT NOR ANY CONTRIBUTORS SHALL HAVE ANY
+ LIABILITY FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY,
+ OR CONSEQUENTIAL DAMAGES (INCLUDING WITHOUT LIMITATION LOST PROFITS),
+ HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+ OUT OF THE USE OR DISTRIBUTION OF THE PROGRAM OR THE EXERCISE OF ANY RIGHTS
+ GRANTED HEREUNDER, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
+ </p>
+ <h2 id="general">7. GENERAL</h2>
+ <p>If any provision of this Agreement is invalid or unenforceable under
+ applicable law, it shall not affect the validity or enforceability of the
+ remainder of the terms of this Agreement, and without further action by the
+ parties hereto, such provision shall be reformed to the minimum extent
+ necessary to make such provision valid and enforceable.
+ </p>
+ <p>If Recipient institutes patent litigation against any entity (including a
+ cross-claim or counterclaim in a lawsuit) alleging that the Program itself
+ (excluding combinations of the Program with other software or hardware)
+ infringes such Recipient's patent(s), then such Recipient's rights granted
+ under Section 2(b) shall terminate as of the date such litigation is filed.
+ </p>
+ <p>All Recipient's rights under this Agreement shall terminate if it fails to
+ comply with any of the material terms or conditions of this Agreement and
+ does not cure such failure in a reasonable period of time after becoming
+ aware of such noncompliance. If all Recipient's rights under this Agreement
+ terminate, Recipient agrees to cease use and distribution of the Program
+ as soon as reasonably practicable. However, Recipient's obligations under
+ this Agreement and any licenses granted by Recipient relating to the
+ Program shall continue and survive.
+ </p>
+ <p>Everyone is permitted to copy and distribute copies of this Agreement,
+ but in order to avoid inconsistency the Agreement is copyrighted and may
+ only be modified in the following manner. The Agreement Steward reserves
+ the right to publish new versions (including revisions) of this Agreement
+ from time to time. No one other than the Agreement Steward has the right
+ to modify this Agreement. The Eclipse Foundation is the initial Agreement
+ Steward. The Eclipse Foundation may assign the responsibility to serve as
+ the Agreement Steward to a suitable separate entity. Each new version of
+ the Agreement will be given a distinguishing version number. The Program
+ (including Contributions) may always be Distributed subject to the version
+ of the Agreement under which it was received. In addition, after a new
+ version of the Agreement is published, Contributor may elect to Distribute
+ the Program (including its Contributions) under the new version.
+ </p>
+ <p>Except as expressly stated in Sections 2(a) and 2(b) above, Recipient
+ receives no rights or licenses to the intellectual property of any
+ Contributor under this Agreement, whether expressly, by implication,
+ estoppel or otherwise. All rights in the Program not expressly granted
+ under this Agreement are reserved. Nothing in this Agreement is intended
+ to be enforceable by any entity that is not a Contributor or Recipient.
+ No third-party beneficiary rights are created under this Agreement.
+ </p>
+ <h2 id="exhibit-a">Exhibit A – Form of Secondary Licenses Notice</h2>
+ <p>“This Source Code may also be made available under the following
+ Secondary Licenses when the conditions for such availability set forth
+ in the Eclipse Public License, v. 2.0 are satisfied: {name license(s),
+ version(s), and exceptions or additional permissions here}.”
+ </p>
+ <blockquote>
+ <p>Simply including a copy of this Agreement, including this Exhibit A
+ is not sufficient to license the Source Code under Secondary Licenses.
+ </p>
+ <p>If it is not possible or desirable to put the notice in a particular file,
+ then You may include the notice in a location (such as a LICENSE file in a
+ relevant directory) where a recipient would be likely to look for
+ such a notice.
+ </p>
+ <p>You may add additional accurate notices of copyright ownership.</p>
+ </blockquote>
+ </body>
+</html>
\ No newline at end of file
diff --git a/license.txt b/license.txt
new file mode 100644
index 0000000..e23ece2
--- /dev/null
+++ b/license.txt
@@ -0,0 +1,277 @@
+Eclipse Public License - v 2.0
+
+ THE ACCOMPANYING PROGRAM IS PROVIDED UNDER THE TERMS OF THIS ECLIPSE
+ PUBLIC LICENSE ("AGREEMENT"). ANY USE, REPRODUCTION OR DISTRIBUTION
+ OF THE PROGRAM CONSTITUTES RECIPIENT'S ACCEPTANCE OF THIS AGREEMENT.
+
+1. DEFINITIONS
+
+"Contribution" means:
+
+ a) in the case of the initial Contributor, the initial content
+ Distributed under this Agreement, and
+
+ b) in the case of each subsequent Contributor:
+ i) changes to the Program, and
+ ii) additions to the Program;
+ where such changes and/or additions to the Program originate from
+ and are Distributed by that particular Contributor. A Contribution
+ "originates" from a Contributor if it was added to the Program by
+ such Contributor itself or anyone acting on such Contributor's behalf.
+ Contributions do not include changes or additions to the Program that
+ are not Modified Works.
+
+"Contributor" means any person or entity that Distributes the Program.
+
+"Licensed Patents" mean patent claims licensable by a Contributor which
+are necessarily infringed by the use or sale of its Contribution alone
+or when combined with the Program.
+
+"Program" means the Contributions Distributed in accordance with this
+Agreement.
+
+"Recipient" means anyone who receives the Program under this Agreement
+or any Secondary License (as applicable), including Contributors.
+
+"Derivative Works" shall mean any work, whether in Source Code or other
+form, that is based on (or derived from) the Program and for which the
+editorial revisions, annotations, elaborations, or other modifications
+represent, as a whole, an original work of authorship.
+
+"Modified Works" shall mean any work in Source Code or other form that
+results from an addition to, deletion from, or modification of the
+contents of the Program, including, for purposes of clarity any new file
+in Source Code form that contains any contents of the Program. Modified
+Works shall not include works that contain only declarations,
+interfaces, types, classes, structures, or files of the Program solely
+in each case in order to link to, bind by name, or subclass the Program
+or Modified Works thereof.
+
+"Distribute" means the acts of a) distributing or b) making available
+in any manner that enables the transfer of a copy.
+
+"Source Code" means the form of a Program preferred for making
+modifications, including but not limited to software source code,
+documentation source, and configuration files.
+
+"Secondary License" means either the GNU General Public License,
+Version 2.0, or any later versions of that license, including any
+exceptions or additional permissions as identified by the initial
+Contributor.
+
+2. GRANT OF RIGHTS
+
+ a) Subject to the terms of this Agreement, each Contributor hereby
+ grants Recipient a non-exclusive, worldwide, royalty-free copyright
+ license to reproduce, prepare Derivative Works of, publicly display,
+ publicly perform, Distribute and sublicense the Contribution of such
+ Contributor, if any, and such Derivative Works.
+
+ b) Subject to the terms of this Agreement, each Contributor hereby
+ grants Recipient a non-exclusive, worldwide, royalty-free patent
+ license under Licensed Patents to make, use, sell, offer to sell,
+ import and otherwise transfer the Contribution of such Contributor,
+ if any, in Source Code or other form. This patent license shall
+ apply to the combination of the Contribution and the Program if, at
+ the time the Contribution is added by the Contributor, such addition
+ of the Contribution causes such combination to be covered by the
+ Licensed Patents. The patent license shall not apply to any other
+ combinations which include the Contribution. No hardware per se is
+ licensed hereunder.
+
+ c) Recipient understands that although each Contributor grants the
+ licenses to its Contributions set forth herein, no assurances are
+ provided by any Contributor that the Program does not infringe the
+ patent or other intellectual property rights of any other entity.
+ Each Contributor disclaims any liability to Recipient for claims
+ brought by any other entity based on infringement of intellectual
+ property rights or otherwise. As a condition to exercising the
+ rights and licenses granted hereunder, each Recipient hereby
+ assumes sole responsibility to secure any other intellectual
+ property rights needed, if any. For example, if a third party
+ patent license is required to allow Recipient to Distribute the
+ Program, it is Recipient's responsibility to acquire that license
+ before distributing the Program.
+
+ d) Each Contributor represents that to its knowledge it has
+ sufficient copyright rights in its Contribution, if any, to grant
+ the copyright license set forth in this Agreement.
+
+ e) Notwithstanding the terms of any Secondary License, no
+ Contributor makes additional grants to any Recipient (other than
+ those set forth in this Agreement) as a result of such Recipient's
+ receipt of the Program under the terms of a Secondary License
+ (if permitted under the terms of Section 3).
+
+3. REQUIREMENTS
+
+3.1 If a Contributor Distributes the Program in any form, then:
+
+ a) the Program must also be made available as Source Code, in
+ accordance with section 3.2, and the Contributor must accompany
+ the Program with a statement that the Source Code for the Program
+ is available under this Agreement, and informs Recipients how to
+ obtain it in a reasonable manner on or through a medium customarily
+ used for software exchange; and
+
+ b) the Contributor may Distribute the Program under a license
+ different than this Agreement, provided that such license:
+ i) effectively disclaims on behalf of all other Contributors all
+ warranties and conditions, express and implied, including
+ warranties or conditions of title and non-infringement, and
+ implied warranties or conditions of merchantability and fitness
+ for a particular purpose;
+
+ ii) effectively excludes on behalf of all other Contributors all
+ liability for damages, including direct, indirect, special,
+ incidental and consequential damages, such as lost profits;
+
+ iii) does not attempt to limit or alter the recipients' rights
+ in the Source Code under section 3.2; and
+
+ iv) requires any subsequent distribution of the Program by any
+ party to be under a license that satisfies the requirements
+ of this section 3.
+
+3.2 When the Program is Distributed as Source Code:
+
+ a) it must be made available under this Agreement, or if the
+ Program (i) is combined with other material in a separate file or
+ files made available under a Secondary License, and (ii) the initial
+ Contributor attached to the Source Code the notice described in
+ Exhibit A of this Agreement, then the Program may be made available
+ under the terms of such Secondary Licenses, and
+
+ b) a copy of this Agreement must be included with each copy of
+ the Program.
+
+3.3 Contributors may not remove or alter any copyright, patent,
+trademark, attribution notices, disclaimers of warranty, or limitations
+of liability ("notices") contained within the Program from any copy of
+the Program which they Distribute, provided that Contributors may add
+their own appropriate notices.
+
+4. COMMERCIAL DISTRIBUTION
+
+Commercial distributors of software may accept certain responsibilities
+with respect to end users, business partners and the like. While this
+license is intended to facilitate the commercial use of the Program,
+the Contributor who includes the Program in a commercial product
+offering should do so in a manner which does not create potential
+liability for other Contributors. Therefore, if a Contributor includes
+the Program in a commercial product offering, such Contributor
+("Commercial Contributor") hereby agrees to defend and indemnify every
+other Contributor ("Indemnified Contributor") against any losses,
+damages and costs (collectively "Losses") arising from claims, lawsuits
+and other legal actions brought by a third party against the Indemnified
+Contributor to the extent caused by the acts or omissions of such
+Commercial Contributor in connection with its distribution of the Program
+in a commercial product offering. The obligations in this section do not
+apply to any claims or Losses relating to any actual or alleged
+intellectual property infringement. In order to qualify, an Indemnified
+Contributor must: a) promptly notify the Commercial Contributor in
+writing of such claim, and b) allow the Commercial Contributor to control,
+and cooperate with the Commercial Contributor in, the defense and any
+related settlement negotiations. The Indemnified Contributor may
+participate in any such claim at its own expense.
+
+For example, a Contributor might include the Program in a commercial
+product offering, Product X. That Contributor is then a Commercial
+Contributor. If that Commercial Contributor then makes performance
+claims, or offers warranties related to Product X, those performance
+claims and warranties are such Commercial Contributor's responsibility
+alone. Under this section, the Commercial Contributor would have to
+defend claims against the other Contributors related to those performance
+claims and warranties, and if a court requires any other Contributor to
+pay any damages as a result, the Commercial Contributor must pay
+those damages.
+
+5. NO WARRANTY
+
+EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, AND TO THE EXTENT
+PERMITTED BY APPLICABLE LAW, THE PROGRAM IS PROVIDED ON AN "AS IS"
+BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, EITHER EXPRESS OR
+IMPLIED INCLUDING, WITHOUT LIMITATION, ANY WARRANTIES OR CONDITIONS OF
+TITLE, NON-INFRINGEMENT, MERCHANTABILITY OR FITNESS FOR A PARTICULAR
+PURPOSE. Each Recipient is solely responsible for determining the
+appropriateness of using and distributing the Program and assumes all
+risks associated with its exercise of rights under this Agreement,
+including but not limited to the risks and costs of program errors,
+compliance with applicable laws, damage to or loss of data, programs
+or equipment, and unavailability or interruption of operations.
+
+6. DISCLAIMER OF LIABILITY
+
+EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, AND TO THE EXTENT
+PERMITTED BY APPLICABLE LAW, NEITHER RECIPIENT NOR ANY CONTRIBUTORS
+SHALL HAVE ANY LIABILITY FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
+EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING WITHOUT LIMITATION LOST
+PROFITS), HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ARISING IN ANY WAY OUT OF THE USE OR DISTRIBUTION OF THE PROGRAM OR THE
+EXERCISE OF ANY RIGHTS GRANTED HEREUNDER, EVEN IF ADVISED OF THE
+POSSIBILITY OF SUCH DAMAGES.
+
+7. GENERAL
+
+If any provision of this Agreement is invalid or unenforceable under
+applicable law, it shall not affect the validity or enforceability of
+the remainder of the terms of this Agreement, and without further
+action by the parties hereto, such provision shall be reformed to the
+minimum extent necessary to make such provision valid and enforceable.
+
+If Recipient institutes patent litigation against any entity
+(including a cross-claim or counterclaim in a lawsuit) alleging that the
+Program itself (excluding combinations of the Program with other software
+or hardware) infringes such Recipient's patent(s), then such Recipient's
+rights granted under Section 2(b) shall terminate as of the date such
+litigation is filed.
+
+All Recipient's rights under this Agreement shall terminate if it
+fails to comply with any of the material terms or conditions of this
+Agreement and does not cure such failure in a reasonable period of
+time after becoming aware of such noncompliance. If all Recipient's
+rights under this Agreement terminate, Recipient agrees to cease use
+and distribution of the Program as soon as reasonably practicable.
+However, Recipient's obligations under this Agreement and any licenses
+granted by Recipient relating to the Program shall continue and survive.
+
+Everyone is permitted to copy and distribute copies of this Agreement,
+but in order to avoid inconsistency the Agreement is copyrighted and
+may only be modified in the following manner. The Agreement Steward
+reserves the right to publish new versions (including revisions) of
+this Agreement from time to time. No one other than the Agreement
+Steward has the right to modify this Agreement. The Eclipse Foundation
+is the initial Agreement Steward. The Eclipse Foundation may assign the
+responsibility to serve as the Agreement Steward to a suitable separate
+entity. Each new version of the Agreement will be given a distinguishing
+version number. The Program (including Contributions) may always be
+Distributed subject to the version of the Agreement under which it was
+received. In addition, after a new version of the Agreement is published,
+Contributor may elect to Distribute the Program (including its
+Contributions) under the new version.
+
+Except as expressly stated in Sections 2(a) and 2(b) above, Recipient
+receives no rights or licenses to the intellectual property of any
+Contributor under this Agreement, whether expressly, by implication,
+estoppel or otherwise. All rights in the Program not expressly granted
+under this Agreement are reserved. Nothing in this Agreement is intended
+to be enforceable by any entity that is not a Contributor or Recipient.
+No third-party beneficiary rights are created under this Agreement.
+
+Exhibit A - Form of Secondary Licenses Notice
+
+"This Source Code may also be made available under the following
+Secondary Licenses when the conditions for such availability set forth
+in the Eclipse Public License, v. 2.0 are satisfied: {name license(s),
+version(s), and exceptions or additional permissions here}."
+
+ Simply including a copy of this Agreement, including this Exhibit A
+ is not sufficient to license the Source Code under Secondary Licenses.
+
+ If it is not possible or desirable to put the notice in a particular
+ file, then You may include the notice in a location (such as a LICENSE
+ file in a relevant directory) where a recipient would be likely to
+ look for such a notice.
+
+ You may add additional accurate notices of copyright ownership.
\ No newline at end of file
diff --git a/notice.html b/notice.html
new file mode 100644
index 0000000..81fca9d
--- /dev/null
+++ b/notice.html
@@ -0,0 +1,189 @@
+<?xml version="1.0" encoding="ISO-8859-1" ?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1" />
+<title>Eclipse Foundation Software User Agreement</title>
+</head>
+
+<body lang="EN-US">
+ <h2>Eclipse Foundation Software User Agreement</h2>
+ <p>November 22, 2014</p>
+
+ <h3>Usage Of Content</h3>
+
+ <p>THE ECLIPSE FOUNDATION MAKES AVAILABLE SOFTWARE, DOCUMENTATION,
+ INFORMATION AND/OR OTHER MATERIALS FOR OPEN SOURCE PROJECTS
+ (COLLECTIVELY "CONTENT"). USE OF THE CONTENT IS GOVERNED BY
+ THE TERMS AND CONDITIONS OF THIS AGREEMENT AND/OR THE TERMS AND
+ CONDITIONS OF LICENSE AGREEMENTS OR NOTICES INDICATED OR REFERENCED
+ BELOW. BY USING THE CONTENT, YOU AGREE THAT YOUR USE OF THE CONTENT IS
+ GOVERNED BY THIS AGREEMENT AND/OR THE TERMS AND CONDITIONS OF ANY
+ APPLICABLE LICENSE AGREEMENTS OR NOTICES INDICATED OR REFERENCED
+ BELOW. IF YOU DO NOT AGREE TO THE TERMS AND CONDITIONS OF THIS
+ AGREEMENT AND THE TERMS AND CONDITIONS OF ANY APPLICABLE LICENSE
+ AGREEMENTS OR NOTICES INDICATED OR REFERENCED BELOW, THEN YOU MAY NOT
+ USE THE CONTENT.</p>
+
+ <h3>Applicable Licenses</h3>
+
+ <p>
+ Unless otherwise indicated, all Content made available by the Eclipse
+ Foundation is provided to you under the terms and conditions of the
+ Eclipse Public License Version 2.0 ("EPL"). A copy of the
+ EPL is provided with this Content and is also available at <a
+ href="http://www.eclipse.org/legal/epl-2.0">http://www.eclipse.org/legal/epl-2.0</a>.
+ For purposes of the EPL, "Program" will mean the Content.
+ </p>
+
+ <p>Content includes, but is not limited to, source code, object
+ code, documentation and other files maintained in the Eclipse
+ Foundation source code repository ("Repository") in software
+ modules ("Modules") and made available as downloadable
+ archives ("Downloads").</p>
+
+ <ul>
+ <li>Content may be structured and packaged into modules to
+ facilitate delivering, extending, and upgrading the Content. Typical
+ modules may include plug-ins ("Plug-ins"), plug-in
+ fragments ("Fragments"), and features
+ ("Features").</li>
+ <li>Each Plug-in or Fragment may be packaged as a sub-directory
+ or JAR (Java™ ARchive) in a directory named
+ "plugins".</li>
+ <li>A Feature is a bundle of one or more Plug-ins and/or
+ Fragments and associated material. Each Feature may be packaged as a
+ sub-directory in a directory named "features". Within a
+ Feature, files named "feature.xml" may contain a list of
+ the names and version numbers of the Plug-ins and/or Fragments
+ associated with that Feature.</li>
+ <li>Features may also include other Features ("Included
+ Features"). Within a Feature, files named
+ "feature.xml" may contain a list of the names and version
+ numbers of Included Features.</li>
+ </ul>
+
+ <p>The terms and conditions governing Plug-ins and Fragments should
+ be contained in files named "about.html"
+ ("Abouts"). The terms and conditions governing Features and
+ Included Features should be contained in files named
+ "license.html" ("Feature Licenses"). Abouts and
+ Feature Licenses may be located in any directory of a Download or
+ Module including, but not limited to the following locations:</p>
+
+ <ul>
+ <li>The top-level (root) directory</li>
+ <li>Plug-in and Fragment directories</li>
+ <li>Inside Plug-ins and Fragments packaged as JARs</li>
+ <li>Sub-directories of the directory named "src" of
+ certain Plug-ins</li>
+ <li>Feature directories</li>
+ </ul>
+
+ <p>Note: if a Feature made available by the Eclipse Foundation is
+ installed using the Provisioning Technology (as defined below), you
+ must agree to a license ("Feature Update License") during
+ the installation process. If the Feature contains Included Features,
+ the Feature Update License should either provide you with the terms
+ and conditions governing the Included Features or inform you where you
+ can locate them. Feature Update Licenses may be found in the
+ "license" property of files named
+ "feature.properties" found within a Feature. Such Abouts,
+ Feature Licenses, and Feature Update Licenses contain the terms and
+ conditions (or references to such terms and conditions) that govern
+ your use of the associated Content in that directory.</p>
+
+ <p>THE ABOUTS, FEATURE LICENSES, AND FEATURE UPDATE LICENSES MAY
+ REFER TO THE EPL OR OTHER LICENSE AGREEMENTS, NOTICES OR TERMS AND
+ CONDITIONS. SOME OF THESE OTHER LICENSE AGREEMENTS MAY INCLUDE (BUT
+ ARE NOT LIMITED TO):</p>
+
+ <ul>
+ <li>Eclipse Public License Version 1.0 (available at <a
+ href="http://www.eclipse.org/legal/epl-v10.html">http://www.eclipse.org/legal/epl-v10.html</a>)
+ </li>
+ <li>Eclipse Distribution License Version 1.0 (available at <a
+ href="http://www.eclipse.org/licenses/edl-v10.html">http://www.eclipse.org/licenses/edl-v1.0.html</a>)
+ </li>
+ <li>Common Public License Version 1.0 (available at <a
+ href="http://www.eclipse.org/legal/cpl-v10.html">http://www.eclipse.org/legal/cpl-v10.html</a>)
+ </li>
+ <li>Apache Software License 1.1 (available at <a
+ href="http://www.apache.org/licenses/LICENSE">http://www.apache.org/licenses/LICENSE</a>)
+ </li>
+ <li>Apache Software License 2.0 (available at <a
+ href="http://www.apache.org/licenses/LICENSE-2.0">http://www.apache.org/licenses/LICENSE-2.0</a>)
+ </li>
+ <li>Mozilla Public License Version 1.1 (available at <a
+ href="http://www.mozilla.org/MPL/MPL-1.1.html">http://www.mozilla.org/MPL/MPL-1.1.html</a>)
+ </li>
+ </ul>
+
+ <p>IT IS YOUR OBLIGATION TO READ AND ACCEPT ALL SUCH TERMS AND
+ CONDITIONS PRIOR TO USE OF THE CONTENT. If no About, Feature License,
+ or Feature Update License is provided, please contact the Eclipse
+ Foundation to determine what terms and conditions govern that
+ particular Content.</p>
+
+
+ <h3>Use of Provisioning Technology</h3>
+
+ <p>
+ The Eclipse Foundation makes available provisioning software, examples
+ of which include, but are not limited to, p2 and the Eclipse Update
+ Manager ("Provisioning Technology") for the purpose of
+ allowing users to install software, documentation, information and/or
+ other materials (collectively "Installable Software"). This
+ capability is provided with the intent of allowing such users to
+ install, extend and update Eclipse-based products. Information about
+ packaging Installable Software is available at <a
+ href="http://eclipse.org/equinox/p2/repository_packaging.html">http://eclipse.org/equinox/p2/repository_packaging.html</a>
+ ("Specification").
+ </p>
+
+ <p>You may use Provisioning Technology to allow other parties to
+ install Installable Software. You shall be responsible for enabling
+ the applicable license agreements relating to the Installable Software
+ to be presented to, and accepted by, the users of the Provisioning
+ Technology in accordance with the Specification. By using Provisioning
+ Technology in such a manner and making it available in accordance with
+ the Specification, you further acknowledge your agreement to, and the
+ acquisition of all necessary rights to permit the following:</p>
+
+ <ol>
+ <li>A series of actions may occur ("Provisioning
+ Process") in which a user may execute the Provisioning
+ Technology on a machine ("Target Machine") with the intent
+ of installing, extending or updating the functionality of an
+ Eclipse-based product.</li>
+ <li>During the Provisioning Process, the Provisioning Technology
+ may cause third party Installable Software or a portion thereof to be
+ accessed and copied to the Target Machine.</li>
+ <li>Pursuant to the Specification, you will provide to the user
+ the terms and conditions that govern the use of the Installable
+ Software ("Installable Software Agreement") and such
+ Installable Software Agreement shall be accessed from the Target
+ Machine in accordance with the Specification. Such Installable
+ Software Agreement must inform the user of the terms and conditions
+ that govern the Installable Software and must solicit acceptance by
+ the end user in the manner prescribed in such Installable Software
+ Agreement. Upon such indication of agreement by the user, the
+ provisioning Technology will complete installation of the Installable
+ Software.</li>
+ </ol>
+
+ <h3>Cryptography</h3>
+
+ <p>Content may contain encryption software. The country in which
+ you are currently may have restrictions on the import, possession, and
+ use, and/or re-export to another country, of encryption software.
+ BEFORE using any encryption software, please check the country's laws,
+ regulations and policies concerning the import, possession, or use,
+ and re-export of encryption software, to see if this is permitted.</p>
+
+ <p>
+ <small>Java and all Java-based trademarks are trademarks of
+ Oracle Corporation in the United States, other countries, or both.</small>
+ </p>
+</body>
+</html>
diff --git a/org.eclipse.osbp.fork.vaadin.addon.maskedtextfield/.classpath b/org.eclipse.osbp.fork.vaadin.addon.maskedtextfield/.classpath
new file mode 100644
index 0000000..99752e2
--- /dev/null
+++ b/org.eclipse.osbp.fork.vaadin.addon.maskedtextfield/.classpath
@@ -0,0 +1,35 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<classpath>
+ <classpathentry including="**/*.java" kind="src" output="target/classes" path="src">
+ <attributes>
+ <attribute name="optional" value="true"/>
+ <attribute name="maven.pomderived" value="true"/>
+ </attributes>
+ </classpathentry>
+ <classpathentry kind="src" path="sample"/>
+ <classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.8">
+ <attributes>
+ <attribute name="maven.pomderived" value="true"/>
+ </attributes>
+ </classpathentry>
+ <classpathentry kind="con" path="org.eclipse.jst.server.core.container/org.eclipse.jst.server.tomcat.runtimeTarget/Apache Tomcat v8.0">
+ <attributes>
+ <attribute name="owner.project.facets" value="jst.web"/>
+ </attributes>
+ </classpathentry>
+ <classpathentry kind="con" path="org.eclipse.jst.j2ee.internal.web.container"/>
+ <classpathentry kind="con" path="org.eclipse.jst.j2ee.internal.module.container"/>
+ <classpathentry kind="con" path="org.apache.ivyde.eclipse.cpcontainer.IVYDE_CONTAINER/?project=org.eclipse.osbp.dependencies.bundle.vaadin.addon.maskedtextfield&ivyXmlPath=ivy.xml&confs=default&ivySettingsPath=%24%7Bworkspace_loc%3Aorg.eclipse.osbp.dependencies.bundle.vaadin.addon.maskedtextfield%2Fivysettings.xml%7D&loadSettingsOnDemand=false&ivyUserDir=&propertyFiles=">
+ <attributes>
+ <attribute name="org.eclipse.jst.component.dependency" value="/WEB-INF/lib"/>
+ </attributes>
+ </classpathentry>
+ <classpathentry kind="con" path="org.apache.ivyde.eclipse.cpcontainer.IVYDE_CONTAINER/?project=org.eclipse.osbp.dependencies.bundle.vaadin.addon.maskedtextfield&ivyXmlPath=ivy.xml&confs=widgetset-compile&ivySettingsPath=%24%7Bworkspace_loc%3Aorg.eclipse.osbp.dependencies.bundle.vaadin.addon.maskedtextfield%2Fivysettings.xml%7D&loadSettingsOnDemand=false&ivyUserDir=&propertyFiles="/>
+ <classpathentry kind="con" path="org.apache.ivyde.eclipse.cpcontainer.IVYDE_CONTAINER/?project=org.eclipse.osbp.dependencies.bundle.vaadin.addon.maskedtextfield&ivyXmlPath=ivy.xml&confs=nodeploy&ivySettingsPath=%24%7Bworkspace_loc%3Aorg.eclipse.osbp.dependencies.bundle.vaadin.addon.maskedtextfield%2Fivysettings.xml%7D&loadSettingsOnDemand=false&ivyUserDir=&propertyFiles="/>
+ <classpathentry exported="true" kind="con" path="org.eclipse.m2e.MAVEN2_CLASSPATH_CONTAINER">
+ <attributes>
+ <attribute name="maven.pomderived" value="true"/>
+ </attributes>
+ </classpathentry>
+ <classpathentry kind="output" path="target/classes"/>
+</classpath>
diff --git a/org.eclipse.osbp.fork.vaadin.addon.maskedtextfield/.gitignore b/org.eclipse.osbp.fork.vaadin.addon.maskedtextfield/.gitignore
new file mode 100644
index 0000000..80d0ff5
--- /dev/null
+++ b/org.eclipse.osbp.fork.vaadin.addon.maskedtextfield/.gitignore
@@ -0,0 +1,5 @@
+/bin/
+/target/
+/build/
+**/VAADIN/widgetsets/
+**/VAADIN/gwt-unitCache/
diff --git a/org.eclipse.osbp.fork.vaadin.addon.maskedtextfield/.project b/org.eclipse.osbp.fork.vaadin.addon.maskedtextfield/.project
new file mode 100644
index 0000000..cb6021c
--- /dev/null
+++ b/org.eclipse.osbp.fork.vaadin.addon.maskedtextfield/.project
@@ -0,0 +1,61 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<projectDescription>
+ <name>org.eclipse.osbp.dependencies.bundle.vaadin.addon.maskedtextfield</name>
+ <comment></comment>
+ <projects>
+ </projects>
+ <buildSpec>
+ <buildCommand>
+ <name>org.eclipse.wst.jsdt.core.javascriptValidator</name>
+ <arguments>
+ </arguments>
+ </buildCommand>
+ <buildCommand>
+ <name>org.eclipse.jdt.core.javabuilder</name>
+ <arguments>
+ </arguments>
+ </buildCommand>
+ <buildCommand>
+ <name>org.eclipse.wst.common.project.facet.core.builder</name>
+ <arguments>
+ </arguments>
+ </buildCommand>
+ <buildCommand>
+ <name>org.eclipse.wst.validation.validationbuilder</name>
+ <arguments>
+ </arguments>
+ </buildCommand>
+ <buildCommand>
+ <name>com.vaadin.integration.eclipse.widgetsetBuilder</name>
+ <arguments>
+ </arguments>
+ </buildCommand>
+ <buildCommand>
+ <name>com.vaadin.integration.eclipse.addonStylesBuilder</name>
+ <arguments>
+ </arguments>
+ </buildCommand>
+ <buildCommand>
+ <name>org.eclipse.m2e.core.maven2Builder</name>
+ <arguments>
+ </arguments>
+ </buildCommand>
+ <buildCommand>
+ <name>org.eclipse.babel.editor.rbeBuilder</name>
+ <arguments>
+ </arguments>
+ </buildCommand>
+ </buildSpec>
+ <natures>
+ <nature>org.eclipse.pde.PluginNature</nature>
+ <nature>org.eclipse.m2e.core.maven2Nature</nature>
+ <nature>org.eclipse.jem.workbench.JavaEMFNature</nature>
+ <nature>org.eclipse.wst.common.modulecore.ModuleCoreNature</nature>
+ <nature>org.eclipse.wst.common.project.facet.core.nature</nature>
+ <nature>org.eclipse.jdt.core.javanature</nature>
+ <nature>org.eclipse.wst.jsdt.core.jsNature</nature>
+ <nature>com.vaadin.integration.eclipse.widgetsetNature</nature>
+ <nature>org.apache.ivyde.eclipse.ivynature</nature>
+ <nature>org.eclipse.babel.editor.rbeNature</nature>
+ </natures>
+</projectDescription>
diff --git a/org.eclipse.osbp.fork.vaadin.addon.maskedtextfield/.settings/.jsdtscope b/org.eclipse.osbp.fork.vaadin.addon.maskedtextfield/.settings/.jsdtscope
new file mode 100644
index 0000000..92e666d
--- /dev/null
+++ b/org.eclipse.osbp.fork.vaadin.addon.maskedtextfield/.settings/.jsdtscope
@@ -0,0 +1,12 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<classpath>
+ <classpathentry excluding="**/bower_components/*|**/node_modules/*|**/*.min.js" kind="src" path="WebContent"/>
+ <classpathentry kind="con" path="org.eclipse.wst.jsdt.launching.JRE_CONTAINER"/>
+ <classpathentry kind="con" path="org.eclipse.wst.jsdt.launching.WebProject">
+ <attributes>
+ <attribute name="hide" value="true"/>
+ </attributes>
+ </classpathentry>
+ <classpathentry kind="con" path="org.eclipse.wst.jsdt.launching.baseBrowserLibrary"/>
+ <classpathentry kind="output" path=""/>
+</classpath>
diff --git a/org.eclipse.osbp.fork.vaadin.addon.maskedtextfield/.settings/com.vaadin.integration.eclipse.prefs b/org.eclipse.osbp.fork.vaadin.addon.maskedtextfield/.settings/com.vaadin.integration.eclipse.prefs
new file mode 100644
index 0000000..28988bd
--- /dev/null
+++ b/org.eclipse.osbp.fork.vaadin.addon.maskedtextfield/.settings/com.vaadin.integration.eclipse.prefs
@@ -0,0 +1,8 @@
+com.vaadin.integration.eclipse.notifyOfVaadinUpdates=false
+com.vaadin.integration.eclipse.useLatestNightly=false
+com.vaadin.integration.eclipse.widgetsetBuildsSuspended=true
+com.vaadin.integration.eclipse.widgetsetCompilationEta=59266
+com.vaadin.integration.eclipse.widgetsetDirty=true
+com.vaadin.integration.eclipse.widgetsetStyle=OBF
+com.vaadin.integration.eclipse.widgetsetVerbose=true
+eclipse.preferences.version=1
diff --git a/org.eclipse.osbp.fork.vaadin.addon.maskedtextfield/.settings/org.eclipse.bpmn2.modeler.core.prefs b/org.eclipse.osbp.fork.vaadin.addon.maskedtextfield/.settings/org.eclipse.bpmn2.modeler.core.prefs
new file mode 100644
index 0000000..4bffcea
--- /dev/null
+++ b/org.eclipse.osbp.fork.vaadin.addon.maskedtextfield/.settings/org.eclipse.bpmn2.modeler.core.prefs
@@ -0,0 +1,2 @@
+eclipse.preferences.version=1
+target.runtime=org.jboss.runtime.jbpm5
diff --git a/org.eclipse.osbp.fork.vaadin.addon.maskedtextfield/.settings/org.eclipse.core.resources.prefs b/org.eclipse.osbp.fork.vaadin.addon.maskedtextfield/.settings/org.eclipse.core.resources.prefs
new file mode 100644
index 0000000..7a53139
--- /dev/null
+++ b/org.eclipse.osbp.fork.vaadin.addon.maskedtextfield/.settings/org.eclipse.core.resources.prefs
@@ -0,0 +1,3 @@
+eclipse.preferences.version=1
+encoding/<project>=UTF-8
+encoding/src=UTF-8
diff --git a/org.eclipse.osbp.fork.vaadin.addon.maskedtextfield/.settings/org.eclipse.jdt.core.prefs b/org.eclipse.osbp.fork.vaadin.addon.maskedtextfield/.settings/org.eclipse.jdt.core.prefs
new file mode 100644
index 0000000..6e80039
--- /dev/null
+++ b/org.eclipse.osbp.fork.vaadin.addon.maskedtextfield/.settings/org.eclipse.jdt.core.prefs
@@ -0,0 +1,8 @@
+eclipse.preferences.version=1
+org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled
+org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.8
+org.eclipse.jdt.core.compiler.compliance=1.8
+org.eclipse.jdt.core.compiler.problem.assertIdentifier=error
+org.eclipse.jdt.core.compiler.problem.enumIdentifier=error
+org.eclipse.jdt.core.compiler.problem.forbiddenReference=warning
+org.eclipse.jdt.core.compiler.source=1.8
diff --git a/org.eclipse.osbp.fork.vaadin.addon.maskedtextfield/.settings/org.eclipse.m2e.core.prefs b/org.eclipse.osbp.fork.vaadin.addon.maskedtextfield/.settings/org.eclipse.m2e.core.prefs
new file mode 100644
index 0000000..f897a7f
--- /dev/null
+++ b/org.eclipse.osbp.fork.vaadin.addon.maskedtextfield/.settings/org.eclipse.m2e.core.prefs
@@ -0,0 +1,4 @@
+activeProfiles=
+eclipse.preferences.version=1
+resolveWorkspaceProjects=true
+version=1
diff --git a/org.eclipse.osbp.fork.vaadin.addon.maskedtextfield/.settings/org.eclipse.pde.core.prefs b/org.eclipse.osbp.fork.vaadin.addon.maskedtextfield/.settings/org.eclipse.pde.core.prefs
new file mode 100644
index 0000000..d4322fa
--- /dev/null
+++ b/org.eclipse.osbp.fork.vaadin.addon.maskedtextfield/.settings/org.eclipse.pde.core.prefs
@@ -0,0 +1,4 @@
+BUNDLE_ROOT_PATH=target/classes
+eclipse.preferences.version=1
+pluginProject.extensions=false
+resolve.requirebundle=false
diff --git a/org.eclipse.osbp.fork.vaadin.addon.maskedtextfield/.settings/org.eclipse.wst.common.component b/org.eclipse.osbp.fork.vaadin.addon.maskedtextfield/.settings/org.eclipse.wst.common.component
new file mode 100644
index 0000000..c54bc4b
--- /dev/null
+++ b/org.eclipse.osbp.fork.vaadin.addon.maskedtextfield/.settings/org.eclipse.wst.common.component
@@ -0,0 +1,9 @@
+<?xml version="1.0" encoding="UTF-8"?><project-modules id="moduleCoreId" project-version="1.5.0">
+ <wb-module deploy-name="org.eclipse.osbp.fork.vaadin.addon.maskedtextfield">
+ <wb-resource deploy-path="/" source-path="/WebContent" tag="defaultRootSource"/>
+ <wb-resource deploy-path="/WEB-INF/classes" source-path="/src"/>
+ <wb-resource deploy-path="/WEB-INF/classes" source-path="/sample"/>
+ <property name="context-root" value="org.eclipse.osbp.fork.vaadin.addon.maskedtextfield"/>
+ <property name="java-output-path" value="/org.eclipse.osbp.fork.vaadin.addon.maskedtextfield/build/classes"/>
+ </wb-module>
+</project-modules>
diff --git a/org.eclipse.osbp.fork.vaadin.addon.maskedtextfield/.settings/org.eclipse.wst.common.project.facet.core.xml b/org.eclipse.osbp.fork.vaadin.addon.maskedtextfield/.settings/org.eclipse.wst.common.project.facet.core.xml
new file mode 100644
index 0000000..e6e0802
--- /dev/null
+++ b/org.eclipse.osbp.fork.vaadin.addon.maskedtextfield/.settings/org.eclipse.wst.common.project.facet.core.xml
@@ -0,0 +1,12 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<faceted-project>
+ <runtime name="Apache Tomcat v8.0"/>
+ <fixed facet="java"/>
+ <fixed facet="com.vaadin.integration.eclipse.core"/>
+ <fixed facet="jst.web"/>
+ <fixed facet="wst.jsdt.web"/>
+ <installed facet="java" version="1.8"/>
+ <installed facet="jst.web" version="3.1"/>
+ <installed facet="wst.jsdt.web" version="1.0"/>
+ <installed facet="com.vaadin.integration.eclipse.core" version="7.0"/>
+</faceted-project>
diff --git a/org.eclipse.osbp.fork.vaadin.addon.maskedtextfield/.settings/org.eclipse.wst.jsdt.ui.superType.container b/org.eclipse.osbp.fork.vaadin.addon.maskedtextfield/.settings/org.eclipse.wst.jsdt.ui.superType.container
new file mode 100644
index 0000000..3bd5d0a
--- /dev/null
+++ b/org.eclipse.osbp.fork.vaadin.addon.maskedtextfield/.settings/org.eclipse.wst.jsdt.ui.superType.container
@@ -0,0 +1 @@
+org.eclipse.wst.jsdt.launching.baseBrowserLibrary
\ No newline at end of file
diff --git a/org.eclipse.osbp.fork.vaadin.addon.maskedtextfield/.settings/org.eclipse.wst.jsdt.ui.superType.name b/org.eclipse.osbp.fork.vaadin.addon.maskedtextfield/.settings/org.eclipse.wst.jsdt.ui.superType.name
new file mode 100644
index 0000000..05bd71b
--- /dev/null
+++ b/org.eclipse.osbp.fork.vaadin.addon.maskedtextfield/.settings/org.eclipse.wst.jsdt.ui.superType.name
@@ -0,0 +1 @@
+Window
\ No newline at end of file
diff --git a/org.eclipse.osbp.fork.vaadin.addon.maskedtextfield/.settings/org.eclipse.xtend.core.Xtend.prefs b/org.eclipse.osbp.fork.vaadin.addon.maskedtextfield/.settings/org.eclipse.xtend.core.Xtend.prefs
new file mode 100644
index 0000000..0933f8c
--- /dev/null
+++ b/org.eclipse.osbp.fork.vaadin.addon.maskedtextfield/.settings/org.eclipse.xtend.core.Xtend.prefs
@@ -0,0 +1,10 @@
+//outlet.DEFAULT_OUTPUT.sourceFolder.src/test/java.directory=src/test/generated-sources/xtend
+eclipse.preferences.version=1
+is_project_specific=true
+outlet.DEFAULT_OUTPUT.hideLocalSyntheticVariables=true
+outlet.DEFAULT_OUTPUT.installDslAsPrimarySource=false
+outlet.DEFAULT_OUTPUT.sourceFolder.emf-gen.directory=xtend-gen
+outlet.DEFAULT_OUTPUT.sourceFolder.src-gen.directory=xtend-gen
+outlet.DEFAULT_OUTPUT.sourceFolder.src.directory=xtend-gen
+outlet.DEFAULT_OUTPUT.sourceFolder.xtend-gen.directory=xtend-gen
+outlet.DEFAULT_OUTPUT.userOutputPerSourceFolder=true
diff --git a/org.eclipse.osbp.fork.vaadin.addon.maskedtextfield/SuperDevMode code server for org.eclipse.osbp.dependencies.bundle.vaadin.addon.maskedtextfield.launch b/org.eclipse.osbp.fork.vaadin.addon.maskedtextfield/SuperDevMode code server for org.eclipse.osbp.dependencies.bundle.vaadin.addon.maskedtextfield.launch
new file mode 100644
index 0000000..eb11759
--- /dev/null
+++ b/org.eclipse.osbp.fork.vaadin.addon.maskedtextfield/SuperDevMode code server for org.eclipse.osbp.dependencies.bundle.vaadin.addon.maskedtextfield.launch
@@ -0,0 +1,21 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<launchConfiguration type="org.eclipse.jdt.launching.localJavaApplication">
+<listAttribute key="org.eclipse.debug.core.MAPPED_RESOURCE_PATHS">
+<listEntry value="/org.eclipse.osbp.dependencies.bundle.vaadin.addon.maskedtextfield"/>
+</listAttribute>
+<listAttribute key="org.eclipse.debug.core.MAPPED_RESOURCE_TYPES">
+<listEntry value="4"/>
+</listAttribute>
+<booleanAttribute key="org.eclipse.jdt.launching.ATTR_USE_START_ON_FIRST_THREAD" value="true"/>
+<listAttribute key="org.eclipse.jdt.launching.CLASSPATH">
+<listEntry value="<?xml version="1.0" encoding="UTF-8" standalone="no"?> <runtimeClasspathEntry id="org.eclipse.jdt.launching.classpathentry.defaultClasspath"> <memento exportedEntriesOnly="false" project="org.eclipse.osbp.dependencies.bundle.vaadin.addon.maskedtextfield"/> </runtimeClasspathEntry> "/>
+<listEntry value="<?xml version="1.0" encoding="UTF-8" standalone="no"?> <runtimeClasspathEntry internalArchive="/org.eclipse.osbp.dependencies.bundle.vaadin.addon.maskedtextfield/src" path="3" type="2"/> "/>
+<listEntry value="<?xml version="1.0" encoding="UTF-8" standalone="no"?> <runtimeClasspathEntry internalArchive="/org.eclipse.osbp.dependencies.bundle.vaadin.addon.maskedtextfield/sample" path="3" type="2"/> "/>
+</listAttribute>
+<booleanAttribute key="org.eclipse.jdt.launching.DEFAULT_CLASSPATH" value="false"/>
+<stringAttribute key="org.eclipse.jdt.launching.MAIN_TYPE" value="com.google.gwt.dev.codeserver.CodeServer"/>
+<stringAttribute key="org.eclipse.jdt.launching.PROGRAM_ARGUMENTS" value="org.vaadin.addons.maskedtextfield.MaskedTextFieldWidgetset"/>
+<stringAttribute key="org.eclipse.jdt.launching.PROJECT_ATTR" value="org.eclipse.osbp.dependencies.bundle.vaadin.addon.maskedtextfield"/>
+<stringAttribute key="org.eclipse.jdt.launching.VM_ARGUMENTS" value="-Xss8M -Xmx512M -XX:MaxPermSize=512M"/>
+<stringAttribute key="org.eclipse.jdt.launching.WORKING_DIRECTORY" value="/Users/florianpirchner/Work/dev/osbp-foodmart/git/org.eclipse.osbp.fork.vaadin.addons/org.eclipse.osbp.fork.vaadin.addon.maskedtextfield"/>
+</launchConfiguration>
diff --git a/org.eclipse.osbp.fork.vaadin.addon.maskedtextfield/WebContent/META-INF/MANIFEST.MF b/org.eclipse.osbp.fork.vaadin.addon.maskedtextfield/WebContent/META-INF/MANIFEST.MF
new file mode 100644
index 0000000..254272e
--- /dev/null
+++ b/org.eclipse.osbp.fork.vaadin.addon.maskedtextfield/WebContent/META-INF/MANIFEST.MF
@@ -0,0 +1,3 @@
+Manifest-Version: 1.0
+Class-Path:
+
diff --git a/org.eclipse.osbp.fork.vaadin.addon.maskedtextfield/about.html b/org.eclipse.osbp.fork.vaadin.addon.maskedtextfield/about.html
new file mode 100644
index 0000000..1be778d
--- /dev/null
+++ b/org.eclipse.osbp.fork.vaadin.addon.maskedtextfield/about.html
@@ -0,0 +1,47 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"/>
+<title>About</title>
+</head>
+<body lang="EN-US">
+<h2>About This Content</h2>
+
+<p>November 1, 2017</p>
+<h3>License</h3>
+
+<p>The Eclipse Foundation makes available all content in this plug-in ("Content"). Unless otherwise
+indicated below, the Content is provided to you under the terms and conditions of the
+Eclipse Public License Version 2.0 ("EPL"). A copy of the EPL is available
+at <a href="http://www.eclipse.org/legal/epl-v20.html">http://www.eclipse.org/legal/epl-v20.html</a>.
+For purposes of the EPL, "Program" will mean the Content.</p>
+
+<p>If you did not receive this Content directly from the Eclipse Foundation, the Content is
+being redistributed by another party ("Redistributor") and different terms and conditions may
+apply to your use of any object code in the Content. Check the Redistributor's license that was
+provided with the Content. If no such license exists, contact the Redistributor. Unless otherwise
+indicated below, the terms and conditions of the EPL still apply to any source code in the Content
+and such source code may be obtained at <a href="http://www.eclipse.org/">http://www.eclipse.org</a>.</p>
+
+
+ <h3>Third Party Content</h3>
+ <p>The Content includes items that have been sourced from third parties as set out below. If you
+ did not receive this Content directly from the Eclipse Foundation, the following is provided
+ for informational purposes only, and you should look to the Redistributor's license for
+ terms and conditions of use.</p>
+ <p>
+ <strong>Vaadin Addon maskedtextfield</strong> <br/><br/>
+ Project site: <a href="https://vaadin.com/directory/component/maskedtextfield">https://vaadin.com/directory/component/maskedtextfield</a><br/><br/>
+ An extension to the <a href="https://vaadin.com/directory/component/maskedtextfield">Vaadin</a> TextField to allow the developer to specify a mask.
+ It's a pure Vaadin/GWT implementation.<br/>
+ The original code can be found on <a href="https://github.com/EduFrazao/vaadin-masked-textfield">Github</a>.<br/>
+ It is published under the <a href="about_files/apl-20.txt">Apache License V2.0</a><br/><br/>
+ OSBP forked the code and adapted it to fit into the OSBP project.<br/>
+
+ <br/><br/>
+ </p>
+
+
+</body>
+</html>
\ No newline at end of file
diff --git a/org.eclipse.osbp.fork.vaadin.addon.maskedtextfield/about.ini b/org.eclipse.osbp.fork.vaadin.addon.maskedtextfield/about.ini
new file mode 100644
index 0000000..7df671f
--- /dev/null
+++ b/org.eclipse.osbp.fork.vaadin.addon.maskedtextfield/about.ini
@@ -0,0 +1,17 @@
+# about.ini
+# contains information about a feature
+# java.io.Properties file (ISO 8859-1 with "\" escapes)
+# "%key" are externalized strings defined in about.properties
+# This file does not need to be translated.
+
+# Property "aboutText" contains blurb for "About" dialog (translated)
+aboutText=%featureText
+
+# Property "featureImage" contains path to feature image (32x32)
+featureImage=
+
+# Property "appName" contains name of the application (translated)
+appName=%featureName
+
+# Property "welcomePage" contains path to welcome page (special XML-based format)
+welcomePage=
diff --git a/org.eclipse.osbp.fork.vaadin.addon.maskedtextfield/about.mappings b/org.eclipse.osbp.fork.vaadin.addon.maskedtextfield/about.mappings
new file mode 100644
index 0000000..4511a0a
--- /dev/null
+++ b/org.eclipse.osbp.fork.vaadin.addon.maskedtextfield/about.mappings
@@ -0,0 +1,6 @@
+# about.mappings
+# contains fill-ins for about.properties
+# java.io.Properties file (ISO 8859-1 with "\" escapes)
+# This file does not need to be translated.
+
+0=qualifier
diff --git a/org.eclipse.osbp.fork.vaadin.addon.maskedtextfield/about.properties b/org.eclipse.osbp.fork.vaadin.addon.maskedtextfield/about.properties
new file mode 100644
index 0000000..572102c
--- /dev/null
+++ b/org.eclipse.osbp.fork.vaadin.addon.maskedtextfield/about.properties
@@ -0,0 +1,29 @@
+#
+# Copyright (c) 2011,2018 Loetz GmbH&Co.KG
+#
+# This program and the accompanying materials are made available under the
+# terms of the Eclipse Public License 2.0 which is available at
+# http://www.eclipse.org/legal/epl-2.0.
+#
+# SPDX-License-Identifier: EPL-2.0
+#
+# Contributors:
+# Loetz GmbH&Co.KG - initial API and implementation
+#
+
+# NLS_MESSAGEFORMAT_VAR
+
+featureName=org.eclipse.osbp.fork.vaadin.addon.maskedtextfield
+
+################ blurb property ####################################
+featureText=\
+Copyright (c) 2011,2018, Loetz GmbH&Co.KG \n\
+This program and the accompanying materials are made available under the \n\
+terms of the Eclipse Public License 2.0 which is available at\n\
+http://www.eclipse.org/legal/epl-2.0.\n\
+\n\
+SPDX-License-Identifier: EPL-2.0 \n\
+\n\
+Contributors:\n\
+ Loetz GmbH&Co.KG - fork and adjustments\n
+################ end of blurb property ####################################
diff --git a/org.eclipse.osbp.fork.vaadin.addon.maskedtextfield/about_files/apl-20.txt b/org.eclipse.osbp.fork.vaadin.addon.maskedtextfield/about_files/apl-20.txt
new file mode 100644
index 0000000..7a4a3ea
--- /dev/null
+++ b/org.eclipse.osbp.fork.vaadin.addon.maskedtextfield/about_files/apl-20.txt
@@ -0,0 +1,202 @@
+
+ Apache License
+ Version 2.0, January 2004
+ http://www.apache.org/licenses/
+
+ TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
+
+ 1. Definitions.
+
+ "License" shall mean the terms and conditions for use, reproduction,
+ and distribution as defined by Sections 1 through 9 of this document.
+
+ "Licensor" shall mean the copyright owner or entity authorized by
+ the copyright owner that is granting the License.
+
+ "Legal Entity" shall mean the union of the acting entity and all
+ other entities that control, are controlled by, or are under common
+ control with that entity. For the purposes of this definition,
+ "control" means (i) the power, direct or indirect, to cause the
+ direction or management of such entity, whether by contract or
+ otherwise, or (ii) ownership of fifty percent (50%) or more of the
+ outstanding shares, or (iii) beneficial ownership of such entity.
+
+ "You" (or "Your") shall mean an individual or Legal Entity
+ exercising permissions granted by this License.
+
+ "Source" form shall mean the preferred form for making modifications,
+ including but not limited to software source code, documentation
+ source, and configuration files.
+
+ "Object" form shall mean any form resulting from mechanical
+ transformation or translation of a Source form, including but
+ not limited to compiled object code, generated documentation,
+ and conversions to other media types.
+
+ "Work" shall mean the work of authorship, whether in Source or
+ Object form, made available under the License, as indicated by a
+ copyright notice that is included in or attached to the work
+ (an example is provided in the Appendix below).
+
+ "Derivative Works" shall mean any work, whether in Source or Object
+ form, that is based on (or derived from) the Work and for which the
+ editorial revisions, annotations, elaborations, or other modifications
+ represent, as a whole, an original work of authorship. For the purposes
+ of this License, Derivative Works shall not include works that remain
+ separable from, or merely link (or bind by name) to the interfaces of,
+ the Work and Derivative Works thereof.
+
+ "Contribution" shall mean any work of authorship, including
+ the original version of the Work and any modifications or additions
+ to that Work or Derivative Works thereof, that is intentionally
+ submitted to Licensor for inclusion in the Work by the copyright owner
+ or by an individual or Legal Entity authorized to submit on behalf of
+ the copyright owner. For the purposes of this definition, "submitted"
+ means any form of electronic, verbal, or written communication sent
+ to the Licensor or its representatives, including but not limited to
+ communication on electronic mailing lists, source code control systems,
+ and issue tracking systems that are managed by, or on behalf of, the
+ Licensor for the purpose of discussing and improving the Work, but
+ excluding communication that is conspicuously marked or otherwise
+ designated in writing by the copyright owner as "Not a Contribution."
+
+ "Contributor" shall mean Licensor and any individual or Legal Entity
+ on behalf of whom a Contribution has been received by Licensor and
+ subsequently incorporated within the Work.
+
+ 2. Grant of Copyright License. Subject to the terms and conditions of
+ this License, each Contributor hereby grants to You a perpetual,
+ worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+ copyright license to reproduce, prepare Derivative Works of,
+ publicly display, publicly perform, sublicense, and distribute the
+ Work and such Derivative Works in Source or Object form.
+
+ 3. Grant of Patent License. Subject to the terms and conditions of
+ this License, each Contributor hereby grants to You a perpetual,
+ worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+ (except as stated in this section) patent license to make, have made,
+ use, offer to sell, sell, import, and otherwise transfer the Work,
+ where such license applies only to those patent claims licensable
+ by such Contributor that are necessarily infringed by their
+ Contribution(s) alone or by combination of their Contribution(s)
+ with the Work to which such Contribution(s) was submitted. If You
+ institute patent litigation against any entity (including a
+ cross-claim or counterclaim in a lawsuit) alleging that the Work
+ or a Contribution incorporated within the Work constitutes direct
+ or contributory patent infringement, then any patent licenses
+ granted to You under this License for that Work shall terminate
+ as of the date such litigation is filed.
+
+ 4. Redistribution. You may reproduce and distribute copies of the
+ Work or Derivative Works thereof in any medium, with or without
+ modifications, and in Source or Object form, provided that You
+ meet the following conditions:
+
+ (a) You must give any other recipients of the Work or
+ Derivative Works a copy of this License; and
+
+ (b) You must cause any modified files to carry prominent notices
+ stating that You changed the files; and
+
+ (c) You must retain, in the Source form of any Derivative Works
+ that You distribute, all copyright, patent, trademark, and
+ attribution notices from the Source form of the Work,
+ excluding those notices that do not pertain to any part of
+ the Derivative Works; and
+
+ (d) If the Work includes a "NOTICE" text file as part of its
+ distribution, then any Derivative Works that You distribute must
+ include a readable copy of the attribution notices contained
+ within such NOTICE file, excluding those notices that do not
+ pertain to any part of the Derivative Works, in at least one
+ of the following places: within a NOTICE text file distributed
+ as part of the Derivative Works; within the Source form or
+ documentation, if provided along with the Derivative Works; or,
+ within a display generated by the Derivative Works, if and
+ wherever such third-party notices normally appear. The contents
+ of the NOTICE file are for informational purposes only and
+ do not modify the License. You may add Your own attribution
+ notices within Derivative Works that You distribute, alongside
+ or as an addendum to the NOTICE text from the Work, provided
+ that such additional attribution notices cannot be construed
+ as modifying the License.
+
+ You may add Your own copyright statement to Your modifications and
+ may provide additional or different license terms and conditions
+ for use, reproduction, or distribution of Your modifications, or
+ for any such Derivative Works as a whole, provided Your use,
+ reproduction, and distribution of the Work otherwise complies with
+ the conditions stated in this License.
+
+ 5. Submission of Contributions. Unless You explicitly state otherwise,
+ any Contribution intentionally submitted for inclusion in the Work
+ by You to the Licensor shall be under the terms and conditions of
+ this License, without any additional terms or conditions.
+ Notwithstanding the above, nothing herein shall supersede or modify
+ the terms of any separate license agreement you may have executed
+ with Licensor regarding such Contributions.
+
+ 6. Trademarks. This License does not grant permission to use the trade
+ names, trademarks, service marks, or product names of the Licensor,
+ except as required for reasonable and customary use in describing the
+ origin of the Work and reproducing the content of the NOTICE file.
+
+ 7. Disclaimer of Warranty. Unless required by applicable law or
+ agreed to in writing, Licensor provides the Work (and each
+ Contributor provides its Contributions) on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
+ implied, including, without limitation, any warranties or conditions
+ of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
+ PARTICULAR PURPOSE. You are solely responsible for determining the
+ appropriateness of using or redistributing the Work and assume any
+ risks associated with Your exercise of permissions under this License.
+
+ 8. Limitation of Liability. In no event and under no legal theory,
+ whether in tort (including negligence), contract, or otherwise,
+ unless required by applicable law (such as deliberate and grossly
+ negligent acts) or agreed to in writing, shall any Contributor be
+ liable to You for damages, including any direct, indirect, special,
+ incidental, or consequential damages of any character arising as a
+ result of this License or out of the use or inability to use the
+ Work (including but not limited to damages for loss of goodwill,
+ work stoppage, computer failure or malfunction, or any and all
+ other commercial damages or losses), even if such Contributor
+ has been advised of the possibility of such damages.
+
+ 9. Accepting Warranty or Additional Liability. While redistributing
+ the Work or Derivative Works thereof, You may choose to offer,
+ and charge a fee for, acceptance of support, warranty, indemnity,
+ or other liability obligations and/or rights consistent with this
+ License. However, in accepting such obligations, You may act only
+ on Your own behalf and on Your sole responsibility, not on behalf
+ of any other Contributor, and only if You agree to indemnify,
+ defend, and hold each Contributor harmless for any liability
+ incurred by, or claims asserted against, such Contributor by reason
+ of your accepting any such warranty or additional liability.
+
+ END OF TERMS AND CONDITIONS
+
+ APPENDIX: How to apply the Apache License to your work.
+
+ To apply the Apache License to your work, attach the following
+ boilerplate notice, with the fields enclosed by brackets "[]"
+ replaced with your own identifying information. (Don't include
+ the brackets!) The text should be enclosed in the appropriate
+ comment syntax for the file format. We also recommend that a
+ file or class name and description of purpose be included on the
+ same "printed page" as the copyright notice for easier
+ identification within third-party archives.
+
+ Copyright [yyyy] [name of copyright owner]
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
\ No newline at end of file
diff --git a/org.eclipse.osbp.fork.vaadin.addon.maskedtextfield/epl-v20.html b/org.eclipse.osbp.fork.vaadin.addon.maskedtextfield/epl-v20.html
new file mode 100644
index 0000000..637a181
--- /dev/null
+++ b/org.eclipse.osbp.fork.vaadin.addon.maskedtextfield/epl-v20.html
@@ -0,0 +1,300 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+ <head>
+ <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+ <title>Eclipse Public License - Version 2.0</title>
+ <style type="text/css">
+ body {
+ margin: 1.5em 3em;
+ }
+ h1{
+ font-size:1.5em;
+ }
+ h2{
+ font-size:1em;
+ margin-bottom:0.5em;
+ margin-top:1em;
+ }
+ p {
+ margin-top: 0.5em;
+ margin-bottom: 0.5em;
+ }
+ ul, ol{
+ list-style-type:none;
+ }
+ </style>
+ </head>
+ <body>
+ <h1>Eclipse Public License - v 2.0</h1>
+ <p>THE ACCOMPANYING PROGRAM IS PROVIDED UNDER THE TERMS OF THIS ECLIPSE
+ PUBLIC LICENSE (“AGREEMENT”). ANY USE, REPRODUCTION OR DISTRIBUTION
+ OF THE PROGRAM CONSTITUTES RECIPIENT'S ACCEPTANCE OF THIS AGREEMENT.
+ </p>
+ <h2 id="definitions">1. DEFINITIONS</h2>
+ <p>“Contribution” means:</p>
+ <ul>
+ <li>a) in the case of the initial Contributor, the initial content
+ Distributed under this Agreement, and
+ </li>
+ <li>
+ b) in the case of each subsequent Contributor:
+ <ul>
+ <li>i) changes to the Program, and</li>
+ <li>ii) additions to the Program;</li>
+ </ul>
+ where such changes and/or additions to the Program originate from
+ and are Distributed by that particular Contributor. A Contribution
+ “originates” from a Contributor if it was added to the Program by such
+ Contributor itself or anyone acting on such Contributor's behalf.
+ Contributions do not include changes or additions to the Program that
+ are not Modified Works.
+ </li>
+ </ul>
+ <p>“Contributor” means any person or entity that Distributes the Program.</p>
+ <p>“Licensed Patents” mean patent claims licensable by a Contributor which
+ are necessarily infringed by the use or sale of its Contribution alone
+ or when combined with the Program.
+ </p>
+ <p>“Program” means the Contributions Distributed in accordance with this
+ Agreement.
+ </p>
+ <p>“Recipient” means anyone who receives the Program under this Agreement
+ or any Secondary License (as applicable), including Contributors.
+ </p>
+ <p>“Derivative Works” shall mean any work, whether in Source Code or other
+ form, that is based on (or derived from) the Program and for which the
+ editorial revisions, annotations, elaborations, or other modifications
+ represent, as a whole, an original work of authorship.
+ </p>
+ <p>“Modified Works” shall mean any work in Source Code or other form that
+ results from an addition to, deletion from, or modification of the
+ contents of the Program, including, for purposes of clarity any new file
+ in Source Code form that contains any contents of the Program. Modified
+ Works shall not include works that contain only declarations, interfaces,
+ types, classes, structures, or files of the Program solely in each case
+ in order to link to, bind by name, or subclass the Program or Modified
+ Works thereof.
+ </p>
+ <p>“Distribute” means the acts of a) distributing or b) making available
+ in any manner that enables the transfer of a copy.
+ </p>
+ <p>“Source Code” means the form of a Program preferred for making
+ modifications, including but not limited to software source code,
+ documentation source, and configuration files.
+ </p>
+ <p>“Secondary License” means either the GNU General Public License,
+ Version 2.0, or any later versions of that license, including any
+ exceptions or additional permissions as identified by the initial
+ Contributor.
+ </p>
+ <h2 id="grant-of-rights">2. GRANT OF RIGHTS</h2>
+ <ul>
+ <li>a) Subject to the terms of this Agreement, each Contributor hereby
+ grants Recipient a non-exclusive, worldwide, royalty-free copyright
+ license to reproduce, prepare Derivative Works of, publicly display,
+ publicly perform, Distribute and sublicense the Contribution of such
+ Contributor, if any, and such Derivative Works.
+ </li>
+ <li>b) Subject to the terms of this Agreement, each Contributor hereby
+ grants Recipient a non-exclusive, worldwide, royalty-free patent
+ license under Licensed Patents to make, use, sell, offer to sell,
+ import and otherwise transfer the Contribution of such Contributor,
+ if any, in Source Code or other form. This patent license shall
+ apply to the combination of the Contribution and the Program if,
+ at the time the Contribution is added by the Contributor, such
+ addition of the Contribution causes such combination to be covered
+ by the Licensed Patents. The patent license shall not apply to any
+ other combinations which include the Contribution. No hardware per
+ se is licensed hereunder.
+ </li>
+ <li>c) Recipient understands that although each Contributor grants the
+ licenses to its Contributions set forth herein, no assurances are
+ provided by any Contributor that the Program does not infringe the
+ patent or other intellectual property rights of any other entity.
+ Each Contributor disclaims any liability to Recipient for claims
+ brought by any other entity based on infringement of intellectual
+ property rights or otherwise. As a condition to exercising the rights
+ and licenses granted hereunder, each Recipient hereby assumes sole
+ responsibility to secure any other intellectual property rights needed,
+ if any. For example, if a third party patent license is required to
+ allow Recipient to Distribute the Program, it is Recipient's
+ responsibility to acquire that license before distributing the Program.
+ </li>
+ <li>d) Each Contributor represents that to its knowledge it has sufficient
+ copyright rights in its Contribution, if any, to grant the copyright
+ license set forth in this Agreement.
+ </li>
+ <li>e) Notwithstanding the terms of any Secondary License, no Contributor
+ makes additional grants to any Recipient (other than those set forth
+ in this Agreement) as a result of such Recipient's receipt of the
+ Program under the terms of a Secondary License (if permitted under
+ the terms of Section 3).
+ </li>
+ </ul>
+ <h2 id="requirements">3. REQUIREMENTS</h2>
+ <p>3.1 If a Contributor Distributes the Program in any form, then:</p>
+ <ul>
+ <li>a) the Program must also be made available as Source Code, in
+ accordance with section 3.2, and the Contributor must accompany
+ the Program with a statement that the Source Code for the Program
+ is available under this Agreement, and informs Recipients how to
+ obtain it in a reasonable manner on or through a medium customarily
+ used for software exchange; and
+ </li>
+ <li>
+ b) the Contributor may Distribute the Program under a license
+ different than this Agreement, provided that such license:
+ <ul>
+ <li>i) effectively disclaims on behalf of all other Contributors all
+ warranties and conditions, express and implied, including warranties
+ or conditions of title and non-infringement, and implied warranties
+ or conditions of merchantability and fitness for a particular purpose;
+ </li>
+ <li>ii) effectively excludes on behalf of all other Contributors all
+ liability for damages, including direct, indirect, special, incidental
+ and consequential damages, such as lost profits;
+ </li>
+ <li>iii) does not attempt to limit or alter the recipients' rights in the
+ Source Code under section 3.2; and
+ </li>
+ <li>iv) requires any subsequent distribution of the Program by any party
+ to be under a license that satisfies the requirements of this section 3.
+ </li>
+ </ul>
+ </li>
+ </ul>
+ <p>3.2 When the Program is Distributed as Source Code:</p>
+ <ul>
+ <li>a) it must be made available under this Agreement, or if the Program (i)
+ is combined with other material in a separate file or files made available
+ under a Secondary License, and (ii) the initial Contributor attached to
+ the Source Code the notice described in Exhibit A of this Agreement,
+ then the Program may be made available under the terms of such
+ Secondary Licenses, and
+ </li>
+ <li>b) a copy of this Agreement must be included with each copy of the Program.</li>
+ </ul>
+ <p>3.3 Contributors may not remove or alter any copyright, patent, trademark,
+ attribution notices, disclaimers of warranty, or limitations of liability
+ (‘notices’) contained within the Program from any copy of the Program which
+ they Distribute, provided that Contributors may add their own appropriate
+ notices.
+ </p>
+ <h2 id="commercial-distribution">4. COMMERCIAL DISTRIBUTION</h2>
+ <p>Commercial distributors of software may accept certain responsibilities
+ with respect to end users, business partners and the like. While this
+ license is intended to facilitate the commercial use of the Program, the
+ Contributor who includes the Program in a commercial product offering should
+ do so in a manner which does not create potential liability for other
+ Contributors. Therefore, if a Contributor includes the Program in a
+ commercial product offering, such Contributor (“Commercial Contributor”)
+ hereby agrees to defend and indemnify every other Contributor
+ (“Indemnified Contributor”) against any losses, damages and costs
+ (collectively “Losses”) arising from claims, lawsuits and other legal actions
+ brought by a third party against the Indemnified Contributor to the extent
+ caused by the acts or omissions of such Commercial Contributor in connection
+ with its distribution of the Program in a commercial product offering.
+ The obligations in this section do not apply to any claims or Losses relating
+ to any actual or alleged intellectual property infringement. In order to
+ qualify, an Indemnified Contributor must: a) promptly notify the
+ Commercial Contributor in writing of such claim, and b) allow the Commercial
+ Contributor to control, and cooperate with the Commercial Contributor in,
+ the defense and any related settlement negotiations. The Indemnified
+ Contributor may participate in any such claim at its own expense.
+ </p>
+ <p>For example, a Contributor might include the Program
+ in a commercial product offering, Product X. That Contributor is then a
+ Commercial Contributor. If that Commercial Contributor then makes performance
+ claims, or offers warranties related to Product X, those performance claims
+ and warranties are such Commercial Contributor's responsibility alone.
+ Under this section, the Commercial Contributor would have to defend claims
+ against the other Contributors related to those performance claims and
+ warranties, and if a court requires any other Contributor to pay any damages
+ as a result, the Commercial Contributor must pay those damages.
+ </p>
+ <h2 id="warranty">5. NO WARRANTY</h2>
+ <p>EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, AND TO THE EXTENT PERMITTED
+ BY APPLICABLE LAW, THE PROGRAM IS PROVIDED ON AN “AS IS” BASIS, WITHOUT
+ WARRANTIES OR CONDITIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED INCLUDING,
+ WITHOUT LIMITATION, ANY WARRANTIES OR CONDITIONS OF TITLE, NON-INFRINGEMENT,
+ MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. Each Recipient is
+ solely responsible for determining the appropriateness of using and
+ distributing the Program and assumes all risks associated with its
+ exercise of rights under this Agreement, including but not limited to the
+ risks and costs of program errors, compliance with applicable laws, damage
+ to or loss of data, programs or equipment, and unavailability or
+ interruption of operations.
+ </p>
+ <h2 id="disclaimer">6. DISCLAIMER OF LIABILITY</h2>
+ <p>EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, AND TO THE EXTENT PERMITTED
+ BY APPLICABLE LAW, NEITHER RECIPIENT NOR ANY CONTRIBUTORS SHALL HAVE ANY
+ LIABILITY FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY,
+ OR CONSEQUENTIAL DAMAGES (INCLUDING WITHOUT LIMITATION LOST PROFITS),
+ HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+ OUT OF THE USE OR DISTRIBUTION OF THE PROGRAM OR THE EXERCISE OF ANY RIGHTS
+ GRANTED HEREUNDER, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
+ </p>
+ <h2 id="general">7. GENERAL</h2>
+ <p>If any provision of this Agreement is invalid or unenforceable under
+ applicable law, it shall not affect the validity or enforceability of the
+ remainder of the terms of this Agreement, and without further action by the
+ parties hereto, such provision shall be reformed to the minimum extent
+ necessary to make such provision valid and enforceable.
+ </p>
+ <p>If Recipient institutes patent litigation against any entity (including a
+ cross-claim or counterclaim in a lawsuit) alleging that the Program itself
+ (excluding combinations of the Program with other software or hardware)
+ infringes such Recipient's patent(s), then such Recipient's rights granted
+ under Section 2(b) shall terminate as of the date such litigation is filed.
+ </p>
+ <p>All Recipient's rights under this Agreement shall terminate if it fails to
+ comply with any of the material terms or conditions of this Agreement and
+ does not cure such failure in a reasonable period of time after becoming
+ aware of such noncompliance. If all Recipient's rights under this Agreement
+ terminate, Recipient agrees to cease use and distribution of the Program
+ as soon as reasonably practicable. However, Recipient's obligations under
+ this Agreement and any licenses granted by Recipient relating to the
+ Program shall continue and survive.
+ </p>
+ <p>Everyone is permitted to copy and distribute copies of this Agreement,
+ but in order to avoid inconsistency the Agreement is copyrighted and may
+ only be modified in the following manner. The Agreement Steward reserves
+ the right to publish new versions (including revisions) of this Agreement
+ from time to time. No one other than the Agreement Steward has the right
+ to modify this Agreement. The Eclipse Foundation is the initial Agreement
+ Steward. The Eclipse Foundation may assign the responsibility to serve as
+ the Agreement Steward to a suitable separate entity. Each new version of
+ the Agreement will be given a distinguishing version number. The Program
+ (including Contributions) may always be Distributed subject to the version
+ of the Agreement under which it was received. In addition, after a new
+ version of the Agreement is published, Contributor may elect to Distribute
+ the Program (including its Contributions) under the new version.
+ </p>
+ <p>Except as expressly stated in Sections 2(a) and 2(b) above, Recipient
+ receives no rights or licenses to the intellectual property of any
+ Contributor under this Agreement, whether expressly, by implication,
+ estoppel or otherwise. All rights in the Program not expressly granted
+ under this Agreement are reserved. Nothing in this Agreement is intended
+ to be enforceable by any entity that is not a Contributor or Recipient.
+ No third-party beneficiary rights are created under this Agreement.
+ </p>
+ <h2 id="exhibit-a">Exhibit A – Form of Secondary Licenses Notice</h2>
+ <p>“This Source Code may also be made available under the following
+ Secondary Licenses when the conditions for such availability set forth
+ in the Eclipse Public License, v. 2.0 are satisfied: {name license(s),
+ version(s), and exceptions or additional permissions here}.”
+ </p>
+ <blockquote>
+ <p>Simply including a copy of this Agreement, including this Exhibit A
+ is not sufficient to license the Source Code under Secondary Licenses.
+ </p>
+ <p>If it is not possible or desirable to put the notice in a particular file,
+ then You may include the notice in a location (such as a LICENSE file in a
+ relevant directory) where a recipient would be likely to look for
+ such a notice.
+ </p>
+ <p>You may add additional accurate notices of copyright ownership.</p>
+ </blockquote>
+ </body>
+</html>
\ No newline at end of file
diff --git a/org.eclipse.osbp.fork.vaadin.addon.maskedtextfield/ivy.xml b/org.eclipse.osbp.fork.vaadin.addon.maskedtextfield/ivy.xml
new file mode 100644
index 0000000..0c4afb5
--- /dev/null
+++ b/org.eclipse.osbp.fork.vaadin.addon.maskedtextfield/ivy.xml
@@ -0,0 +1,44 @@
+<?xml version="1.0"?>
+<!DOCTYPE ivy-module [
+ <!ENTITY vaadin.version "7.5.7">
+]>
+<ivy-module version="2.0"
+ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xsi:noNamespaceSchemaLocation="http://ant.apache.org/ivy/schemas/ivy.xsd">
+ <info organisation="com.example" module="v7proj" />
+ <configurations>
+ <!-- The default configuration, which should be deployed to the server -->
+ <conf name="default" />
+ <!-- A configuration only needed when compiling the widget set. Should
+ not be deployed to the server -->
+ <conf name="widgetset-compile" />
+ <!-- A configuration used in compilation of server side classes only.
+ Should be deployed to the server -->
+ <conf name="nodeploy" />
+ </configurations>
+ <dependencies defaultconf="default" defaultconfmapping="default->default">
+ <!-- The core server part of Vaadin -->
+ <dependency org="com.vaadin" name="vaadin-server" rev="&vaadin.version;" />
+
+ <!-- Vaadin themes -->
+ <dependency org="com.vaadin" name="vaadin-themes" rev="&vaadin.version;" />
+
+ <!-- Push support -->
+ <dependency org="com.vaadin" name="vaadin-push" rev="&vaadin.version;" />
+
+ <!-- Servlet 3.0 API -->
+ <dependency org="javax.servlet" name="javax.servlet-api" rev="3.0.1" conf="nodeploy->default" />
+
+ <!-- Precompiled DefaultWidgetSet -->
+ <dependency org="com.vaadin" name="vaadin-client-compiled"
+ rev="&vaadin.version;" />
+
+ <!-- Vaadin client side, needed for widget set compilation -->
+ <dependency org="com.vaadin" name="vaadin-client" rev="&vaadin.version;"
+ conf="widgetset-compile->default" />
+
+ <!-- Compiler for custom widget sets. Should not be deployed -->
+ <dependency org="com.vaadin" name="vaadin-client-compiler"
+ rev="&vaadin.version;" conf="widgetset-compile->default" />
+ </dependencies>
+</ivy-module>
diff --git a/org.eclipse.osbp.fork.vaadin.addon.maskedtextfield/ivysettings.xml b/org.eclipse.osbp.fork.vaadin.addon.maskedtextfield/ivysettings.xml
new file mode 100644
index 0000000..9c0f653
--- /dev/null
+++ b/org.eclipse.osbp.fork.vaadin.addon.maskedtextfield/ivysettings.xml
@@ -0,0 +1,35 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<ivysettings>
+ <settings defaultResolver="default" />
+ <resolvers>
+ <chain name="default">
+ <!-- Public Maven repository -->
+ <ibiblio name="public" m2compatible="true" />
+
+ <!-- Vaadin Add-on repository -->
+ <ibiblio name="vaadin-addons" usepoms="true" m2compatible="true"
+ root="http://maven.vaadin.com/vaadin-addons" />
+
+ <!-- Vaadin snapshots repository -->
+ <ibiblio name="vaadin-snapshots" usepoms="true" m2compatible="true"
+ root="https://oss.sonatype.org/content/repositories/vaadin-snapshots" />
+ <!-- Repository used for Vaadin modified smartsprites library -->
+ <dual name="custom-smartsprites">
+ <filesystem name="smartsprites-ivy">
+ <ivy pattern="${basedir}/ivymodule/[module]-ivy-[revision].xml" />
+ </filesystem>
+ <url name="smartsprites-artifact">
+ <artifact
+ pattern="http://dev.vaadin.com/svn/versions/6.8/build/smartsprites/lib/[artifact](-[revision]).[ext]" />
+ </url>
+ </dual>
+ </chain>
+ </resolvers>
+ <modules>
+ <!-- Vaadin patched SmartSprites -->
+ <module organisation="com.carrotsearch" name="smartsprites"
+ revision="0.2.3-itmill" resolver="custom-smartsprites" />
+ </modules>
+
+
+</ivysettings>
\ No newline at end of file
diff --git a/org.eclipse.osbp.fork.vaadin.addon.maskedtextfield/license.html b/org.eclipse.osbp.fork.vaadin.addon.maskedtextfield/license.html
new file mode 100644
index 0000000..637a181
--- /dev/null
+++ b/org.eclipse.osbp.fork.vaadin.addon.maskedtextfield/license.html
@@ -0,0 +1,300 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+ <head>
+ <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+ <title>Eclipse Public License - Version 2.0</title>
+ <style type="text/css">
+ body {
+ margin: 1.5em 3em;
+ }
+ h1{
+ font-size:1.5em;
+ }
+ h2{
+ font-size:1em;
+ margin-bottom:0.5em;
+ margin-top:1em;
+ }
+ p {
+ margin-top: 0.5em;
+ margin-bottom: 0.5em;
+ }
+ ul, ol{
+ list-style-type:none;
+ }
+ </style>
+ </head>
+ <body>
+ <h1>Eclipse Public License - v 2.0</h1>
+ <p>THE ACCOMPANYING PROGRAM IS PROVIDED UNDER THE TERMS OF THIS ECLIPSE
+ PUBLIC LICENSE (“AGREEMENT”). ANY USE, REPRODUCTION OR DISTRIBUTION
+ OF THE PROGRAM CONSTITUTES RECIPIENT'S ACCEPTANCE OF THIS AGREEMENT.
+ </p>
+ <h2 id="definitions">1. DEFINITIONS</h2>
+ <p>“Contribution” means:</p>
+ <ul>
+ <li>a) in the case of the initial Contributor, the initial content
+ Distributed under this Agreement, and
+ </li>
+ <li>
+ b) in the case of each subsequent Contributor:
+ <ul>
+ <li>i) changes to the Program, and</li>
+ <li>ii) additions to the Program;</li>
+ </ul>
+ where such changes and/or additions to the Program originate from
+ and are Distributed by that particular Contributor. A Contribution
+ “originates” from a Contributor if it was added to the Program by such
+ Contributor itself or anyone acting on such Contributor's behalf.
+ Contributions do not include changes or additions to the Program that
+ are not Modified Works.
+ </li>
+ </ul>
+ <p>“Contributor” means any person or entity that Distributes the Program.</p>
+ <p>“Licensed Patents” mean patent claims licensable by a Contributor which
+ are necessarily infringed by the use or sale of its Contribution alone
+ or when combined with the Program.
+ </p>
+ <p>“Program” means the Contributions Distributed in accordance with this
+ Agreement.
+ </p>
+ <p>“Recipient” means anyone who receives the Program under this Agreement
+ or any Secondary License (as applicable), including Contributors.
+ </p>
+ <p>“Derivative Works” shall mean any work, whether in Source Code or other
+ form, that is based on (or derived from) the Program and for which the
+ editorial revisions, annotations, elaborations, or other modifications
+ represent, as a whole, an original work of authorship.
+ </p>
+ <p>“Modified Works” shall mean any work in Source Code or other form that
+ results from an addition to, deletion from, or modification of the
+ contents of the Program, including, for purposes of clarity any new file
+ in Source Code form that contains any contents of the Program. Modified
+ Works shall not include works that contain only declarations, interfaces,
+ types, classes, structures, or files of the Program solely in each case
+ in order to link to, bind by name, or subclass the Program or Modified
+ Works thereof.
+ </p>
+ <p>“Distribute” means the acts of a) distributing or b) making available
+ in any manner that enables the transfer of a copy.
+ </p>
+ <p>“Source Code” means the form of a Program preferred for making
+ modifications, including but not limited to software source code,
+ documentation source, and configuration files.
+ </p>
+ <p>“Secondary License” means either the GNU General Public License,
+ Version 2.0, or any later versions of that license, including any
+ exceptions or additional permissions as identified by the initial
+ Contributor.
+ </p>
+ <h2 id="grant-of-rights">2. GRANT OF RIGHTS</h2>
+ <ul>
+ <li>a) Subject to the terms of this Agreement, each Contributor hereby
+ grants Recipient a non-exclusive, worldwide, royalty-free copyright
+ license to reproduce, prepare Derivative Works of, publicly display,
+ publicly perform, Distribute and sublicense the Contribution of such
+ Contributor, if any, and such Derivative Works.
+ </li>
+ <li>b) Subject to the terms of this Agreement, each Contributor hereby
+ grants Recipient a non-exclusive, worldwide, royalty-free patent
+ license under Licensed Patents to make, use, sell, offer to sell,
+ import and otherwise transfer the Contribution of such Contributor,
+ if any, in Source Code or other form. This patent license shall
+ apply to the combination of the Contribution and the Program if,
+ at the time the Contribution is added by the Contributor, such
+ addition of the Contribution causes such combination to be covered
+ by the Licensed Patents. The patent license shall not apply to any
+ other combinations which include the Contribution. No hardware per
+ se is licensed hereunder.
+ </li>
+ <li>c) Recipient understands that although each Contributor grants the
+ licenses to its Contributions set forth herein, no assurances are
+ provided by any Contributor that the Program does not infringe the
+ patent or other intellectual property rights of any other entity.
+ Each Contributor disclaims any liability to Recipient for claims
+ brought by any other entity based on infringement of intellectual
+ property rights or otherwise. As a condition to exercising the rights
+ and licenses granted hereunder, each Recipient hereby assumes sole
+ responsibility to secure any other intellectual property rights needed,
+ if any. For example, if a third party patent license is required to
+ allow Recipient to Distribute the Program, it is Recipient's
+ responsibility to acquire that license before distributing the Program.
+ </li>
+ <li>d) Each Contributor represents that to its knowledge it has sufficient
+ copyright rights in its Contribution, if any, to grant the copyright
+ license set forth in this Agreement.
+ </li>
+ <li>e) Notwithstanding the terms of any Secondary License, no Contributor
+ makes additional grants to any Recipient (other than those set forth
+ in this Agreement) as a result of such Recipient's receipt of the
+ Program under the terms of a Secondary License (if permitted under
+ the terms of Section 3).
+ </li>
+ </ul>
+ <h2 id="requirements">3. REQUIREMENTS</h2>
+ <p>3.1 If a Contributor Distributes the Program in any form, then:</p>
+ <ul>
+ <li>a) the Program must also be made available as Source Code, in
+ accordance with section 3.2, and the Contributor must accompany
+ the Program with a statement that the Source Code for the Program
+ is available under this Agreement, and informs Recipients how to
+ obtain it in a reasonable manner on or through a medium customarily
+ used for software exchange; and
+ </li>
+ <li>
+ b) the Contributor may Distribute the Program under a license
+ different than this Agreement, provided that such license:
+ <ul>
+ <li>i) effectively disclaims on behalf of all other Contributors all
+ warranties and conditions, express and implied, including warranties
+ or conditions of title and non-infringement, and implied warranties
+ or conditions of merchantability and fitness for a particular purpose;
+ </li>
+ <li>ii) effectively excludes on behalf of all other Contributors all
+ liability for damages, including direct, indirect, special, incidental
+ and consequential damages, such as lost profits;
+ </li>
+ <li>iii) does not attempt to limit or alter the recipients' rights in the
+ Source Code under section 3.2; and
+ </li>
+ <li>iv) requires any subsequent distribution of the Program by any party
+ to be under a license that satisfies the requirements of this section 3.
+ </li>
+ </ul>
+ </li>
+ </ul>
+ <p>3.2 When the Program is Distributed as Source Code:</p>
+ <ul>
+ <li>a) it must be made available under this Agreement, or if the Program (i)
+ is combined with other material in a separate file or files made available
+ under a Secondary License, and (ii) the initial Contributor attached to
+ the Source Code the notice described in Exhibit A of this Agreement,
+ then the Program may be made available under the terms of such
+ Secondary Licenses, and
+ </li>
+ <li>b) a copy of this Agreement must be included with each copy of the Program.</li>
+ </ul>
+ <p>3.3 Contributors may not remove or alter any copyright, patent, trademark,
+ attribution notices, disclaimers of warranty, or limitations of liability
+ (‘notices’) contained within the Program from any copy of the Program which
+ they Distribute, provided that Contributors may add their own appropriate
+ notices.
+ </p>
+ <h2 id="commercial-distribution">4. COMMERCIAL DISTRIBUTION</h2>
+ <p>Commercial distributors of software may accept certain responsibilities
+ with respect to end users, business partners and the like. While this
+ license is intended to facilitate the commercial use of the Program, the
+ Contributor who includes the Program in a commercial product offering should
+ do so in a manner which does not create potential liability for other
+ Contributors. Therefore, if a Contributor includes the Program in a
+ commercial product offering, such Contributor (“Commercial Contributor”)
+ hereby agrees to defend and indemnify every other Contributor
+ (“Indemnified Contributor”) against any losses, damages and costs
+ (collectively “Losses”) arising from claims, lawsuits and other legal actions
+ brought by a third party against the Indemnified Contributor to the extent
+ caused by the acts or omissions of such Commercial Contributor in connection
+ with its distribution of the Program in a commercial product offering.
+ The obligations in this section do not apply to any claims or Losses relating
+ to any actual or alleged intellectual property infringement. In order to
+ qualify, an Indemnified Contributor must: a) promptly notify the
+ Commercial Contributor in writing of such claim, and b) allow the Commercial
+ Contributor to control, and cooperate with the Commercial Contributor in,
+ the defense and any related settlement negotiations. The Indemnified
+ Contributor may participate in any such claim at its own expense.
+ </p>
+ <p>For example, a Contributor might include the Program
+ in a commercial product offering, Product X. That Contributor is then a
+ Commercial Contributor. If that Commercial Contributor then makes performance
+ claims, or offers warranties related to Product X, those performance claims
+ and warranties are such Commercial Contributor's responsibility alone.
+ Under this section, the Commercial Contributor would have to defend claims
+ against the other Contributors related to those performance claims and
+ warranties, and if a court requires any other Contributor to pay any damages
+ as a result, the Commercial Contributor must pay those damages.
+ </p>
+ <h2 id="warranty">5. NO WARRANTY</h2>
+ <p>EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, AND TO THE EXTENT PERMITTED
+ BY APPLICABLE LAW, THE PROGRAM IS PROVIDED ON AN “AS IS” BASIS, WITHOUT
+ WARRANTIES OR CONDITIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED INCLUDING,
+ WITHOUT LIMITATION, ANY WARRANTIES OR CONDITIONS OF TITLE, NON-INFRINGEMENT,
+ MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. Each Recipient is
+ solely responsible for determining the appropriateness of using and
+ distributing the Program and assumes all risks associated with its
+ exercise of rights under this Agreement, including but not limited to the
+ risks and costs of program errors, compliance with applicable laws, damage
+ to or loss of data, programs or equipment, and unavailability or
+ interruption of operations.
+ </p>
+ <h2 id="disclaimer">6. DISCLAIMER OF LIABILITY</h2>
+ <p>EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, AND TO THE EXTENT PERMITTED
+ BY APPLICABLE LAW, NEITHER RECIPIENT NOR ANY CONTRIBUTORS SHALL HAVE ANY
+ LIABILITY FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY,
+ OR CONSEQUENTIAL DAMAGES (INCLUDING WITHOUT LIMITATION LOST PROFITS),
+ HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+ OUT OF THE USE OR DISTRIBUTION OF THE PROGRAM OR THE EXERCISE OF ANY RIGHTS
+ GRANTED HEREUNDER, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
+ </p>
+ <h2 id="general">7. GENERAL</h2>
+ <p>If any provision of this Agreement is invalid or unenforceable under
+ applicable law, it shall not affect the validity or enforceability of the
+ remainder of the terms of this Agreement, and without further action by the
+ parties hereto, such provision shall be reformed to the minimum extent
+ necessary to make such provision valid and enforceable.
+ </p>
+ <p>If Recipient institutes patent litigation against any entity (including a
+ cross-claim or counterclaim in a lawsuit) alleging that the Program itself
+ (excluding combinations of the Program with other software or hardware)
+ infringes such Recipient's patent(s), then such Recipient's rights granted
+ under Section 2(b) shall terminate as of the date such litigation is filed.
+ </p>
+ <p>All Recipient's rights under this Agreement shall terminate if it fails to
+ comply with any of the material terms or conditions of this Agreement and
+ does not cure such failure in a reasonable period of time after becoming
+ aware of such noncompliance. If all Recipient's rights under this Agreement
+ terminate, Recipient agrees to cease use and distribution of the Program
+ as soon as reasonably practicable. However, Recipient's obligations under
+ this Agreement and any licenses granted by Recipient relating to the
+ Program shall continue and survive.
+ </p>
+ <p>Everyone is permitted to copy and distribute copies of this Agreement,
+ but in order to avoid inconsistency the Agreement is copyrighted and may
+ only be modified in the following manner. The Agreement Steward reserves
+ the right to publish new versions (including revisions) of this Agreement
+ from time to time. No one other than the Agreement Steward has the right
+ to modify this Agreement. The Eclipse Foundation is the initial Agreement
+ Steward. The Eclipse Foundation may assign the responsibility to serve as
+ the Agreement Steward to a suitable separate entity. Each new version of
+ the Agreement will be given a distinguishing version number. The Program
+ (including Contributions) may always be Distributed subject to the version
+ of the Agreement under which it was received. In addition, after a new
+ version of the Agreement is published, Contributor may elect to Distribute
+ the Program (including its Contributions) under the new version.
+ </p>
+ <p>Except as expressly stated in Sections 2(a) and 2(b) above, Recipient
+ receives no rights or licenses to the intellectual property of any
+ Contributor under this Agreement, whether expressly, by implication,
+ estoppel or otherwise. All rights in the Program not expressly granted
+ under this Agreement are reserved. Nothing in this Agreement is intended
+ to be enforceable by any entity that is not a Contributor or Recipient.
+ No third-party beneficiary rights are created under this Agreement.
+ </p>
+ <h2 id="exhibit-a">Exhibit A – Form of Secondary Licenses Notice</h2>
+ <p>“This Source Code may also be made available under the following
+ Secondary Licenses when the conditions for such availability set forth
+ in the Eclipse Public License, v. 2.0 are satisfied: {name license(s),
+ version(s), and exceptions or additional permissions here}.”
+ </p>
+ <blockquote>
+ <p>Simply including a copy of this Agreement, including this Exhibit A
+ is not sufficient to license the Source Code under Secondary Licenses.
+ </p>
+ <p>If it is not possible or desirable to put the notice in a particular file,
+ then You may include the notice in a location (such as a LICENSE file in a
+ relevant directory) where a recipient would be likely to look for
+ such a notice.
+ </p>
+ <p>You may add additional accurate notices of copyright ownership.</p>
+ </blockquote>
+ </body>
+</html>
\ No newline at end of file
diff --git a/org.eclipse.osbp.fork.vaadin.addon.maskedtextfield/license.txt b/org.eclipse.osbp.fork.vaadin.addon.maskedtextfield/license.txt
new file mode 100644
index 0000000..e23ece2
--- /dev/null
+++ b/org.eclipse.osbp.fork.vaadin.addon.maskedtextfield/license.txt
@@ -0,0 +1,277 @@
+Eclipse Public License - v 2.0
+
+ THE ACCOMPANYING PROGRAM IS PROVIDED UNDER THE TERMS OF THIS ECLIPSE
+ PUBLIC LICENSE ("AGREEMENT"). ANY USE, REPRODUCTION OR DISTRIBUTION
+ OF THE PROGRAM CONSTITUTES RECIPIENT'S ACCEPTANCE OF THIS AGREEMENT.
+
+1. DEFINITIONS
+
+"Contribution" means:
+
+ a) in the case of the initial Contributor, the initial content
+ Distributed under this Agreement, and
+
+ b) in the case of each subsequent Contributor:
+ i) changes to the Program, and
+ ii) additions to the Program;
+ where such changes and/or additions to the Program originate from
+ and are Distributed by that particular Contributor. A Contribution
+ "originates" from a Contributor if it was added to the Program by
+ such Contributor itself or anyone acting on such Contributor's behalf.
+ Contributions do not include changes or additions to the Program that
+ are not Modified Works.
+
+"Contributor" means any person or entity that Distributes the Program.
+
+"Licensed Patents" mean patent claims licensable by a Contributor which
+are necessarily infringed by the use or sale of its Contribution alone
+or when combined with the Program.
+
+"Program" means the Contributions Distributed in accordance with this
+Agreement.
+
+"Recipient" means anyone who receives the Program under this Agreement
+or any Secondary License (as applicable), including Contributors.
+
+"Derivative Works" shall mean any work, whether in Source Code or other
+form, that is based on (or derived from) the Program and for which the
+editorial revisions, annotations, elaborations, or other modifications
+represent, as a whole, an original work of authorship.
+
+"Modified Works" shall mean any work in Source Code or other form that
+results from an addition to, deletion from, or modification of the
+contents of the Program, including, for purposes of clarity any new file
+in Source Code form that contains any contents of the Program. Modified
+Works shall not include works that contain only declarations,
+interfaces, types, classes, structures, or files of the Program solely
+in each case in order to link to, bind by name, or subclass the Program
+or Modified Works thereof.
+
+"Distribute" means the acts of a) distributing or b) making available
+in any manner that enables the transfer of a copy.
+
+"Source Code" means the form of a Program preferred for making
+modifications, including but not limited to software source code,
+documentation source, and configuration files.
+
+"Secondary License" means either the GNU General Public License,
+Version 2.0, or any later versions of that license, including any
+exceptions or additional permissions as identified by the initial
+Contributor.
+
+2. GRANT OF RIGHTS
+
+ a) Subject to the terms of this Agreement, each Contributor hereby
+ grants Recipient a non-exclusive, worldwide, royalty-free copyright
+ license to reproduce, prepare Derivative Works of, publicly display,
+ publicly perform, Distribute and sublicense the Contribution of such
+ Contributor, if any, and such Derivative Works.
+
+ b) Subject to the terms of this Agreement, each Contributor hereby
+ grants Recipient a non-exclusive, worldwide, royalty-free patent
+ license under Licensed Patents to make, use, sell, offer to sell,
+ import and otherwise transfer the Contribution of such Contributor,
+ if any, in Source Code or other form. This patent license shall
+ apply to the combination of the Contribution and the Program if, at
+ the time the Contribution is added by the Contributor, such addition
+ of the Contribution causes such combination to be covered by the
+ Licensed Patents. The patent license shall not apply to any other
+ combinations which include the Contribution. No hardware per se is
+ licensed hereunder.
+
+ c) Recipient understands that although each Contributor grants the
+ licenses to its Contributions set forth herein, no assurances are
+ provided by any Contributor that the Program does not infringe the
+ patent or other intellectual property rights of any other entity.
+ Each Contributor disclaims any liability to Recipient for claims
+ brought by any other entity based on infringement of intellectual
+ property rights or otherwise. As a condition to exercising the
+ rights and licenses granted hereunder, each Recipient hereby
+ assumes sole responsibility to secure any other intellectual
+ property rights needed, if any. For example, if a third party
+ patent license is required to allow Recipient to Distribute the
+ Program, it is Recipient's responsibility to acquire that license
+ before distributing the Program.
+
+ d) Each Contributor represents that to its knowledge it has
+ sufficient copyright rights in its Contribution, if any, to grant
+ the copyright license set forth in this Agreement.
+
+ e) Notwithstanding the terms of any Secondary License, no
+ Contributor makes additional grants to any Recipient (other than
+ those set forth in this Agreement) as a result of such Recipient's
+ receipt of the Program under the terms of a Secondary License
+ (if permitted under the terms of Section 3).
+
+3. REQUIREMENTS
+
+3.1 If a Contributor Distributes the Program in any form, then:
+
+ a) the Program must also be made available as Source Code, in
+ accordance with section 3.2, and the Contributor must accompany
+ the Program with a statement that the Source Code for the Program
+ is available under this Agreement, and informs Recipients how to
+ obtain it in a reasonable manner on or through a medium customarily
+ used for software exchange; and
+
+ b) the Contributor may Distribute the Program under a license
+ different than this Agreement, provided that such license:
+ i) effectively disclaims on behalf of all other Contributors all
+ warranties and conditions, express and implied, including
+ warranties or conditions of title and non-infringement, and
+ implied warranties or conditions of merchantability and fitness
+ for a particular purpose;
+
+ ii) effectively excludes on behalf of all other Contributors all
+ liability for damages, including direct, indirect, special,
+ incidental and consequential damages, such as lost profits;
+
+ iii) does not attempt to limit or alter the recipients' rights
+ in the Source Code under section 3.2; and
+
+ iv) requires any subsequent distribution of the Program by any
+ party to be under a license that satisfies the requirements
+ of this section 3.
+
+3.2 When the Program is Distributed as Source Code:
+
+ a) it must be made available under this Agreement, or if the
+ Program (i) is combined with other material in a separate file or
+ files made available under a Secondary License, and (ii) the initial
+ Contributor attached to the Source Code the notice described in
+ Exhibit A of this Agreement, then the Program may be made available
+ under the terms of such Secondary Licenses, and
+
+ b) a copy of this Agreement must be included with each copy of
+ the Program.
+
+3.3 Contributors may not remove or alter any copyright, patent,
+trademark, attribution notices, disclaimers of warranty, or limitations
+of liability ("notices") contained within the Program from any copy of
+the Program which they Distribute, provided that Contributors may add
+their own appropriate notices.
+
+4. COMMERCIAL DISTRIBUTION
+
+Commercial distributors of software may accept certain responsibilities
+with respect to end users, business partners and the like. While this
+license is intended to facilitate the commercial use of the Program,
+the Contributor who includes the Program in a commercial product
+offering should do so in a manner which does not create potential
+liability for other Contributors. Therefore, if a Contributor includes
+the Program in a commercial product offering, such Contributor
+("Commercial Contributor") hereby agrees to defend and indemnify every
+other Contributor ("Indemnified Contributor") against any losses,
+damages and costs (collectively "Losses") arising from claims, lawsuits
+and other legal actions brought by a third party against the Indemnified
+Contributor to the extent caused by the acts or omissions of such
+Commercial Contributor in connection with its distribution of the Program
+in a commercial product offering. The obligations in this section do not
+apply to any claims or Losses relating to any actual or alleged
+intellectual property infringement. In order to qualify, an Indemnified
+Contributor must: a) promptly notify the Commercial Contributor in
+writing of such claim, and b) allow the Commercial Contributor to control,
+and cooperate with the Commercial Contributor in, the defense and any
+related settlement negotiations. The Indemnified Contributor may
+participate in any such claim at its own expense.
+
+For example, a Contributor might include the Program in a commercial
+product offering, Product X. That Contributor is then a Commercial
+Contributor. If that Commercial Contributor then makes performance
+claims, or offers warranties related to Product X, those performance
+claims and warranties are such Commercial Contributor's responsibility
+alone. Under this section, the Commercial Contributor would have to
+defend claims against the other Contributors related to those performance
+claims and warranties, and if a court requires any other Contributor to
+pay any damages as a result, the Commercial Contributor must pay
+those damages.
+
+5. NO WARRANTY
+
+EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, AND TO THE EXTENT
+PERMITTED BY APPLICABLE LAW, THE PROGRAM IS PROVIDED ON AN "AS IS"
+BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, EITHER EXPRESS OR
+IMPLIED INCLUDING, WITHOUT LIMITATION, ANY WARRANTIES OR CONDITIONS OF
+TITLE, NON-INFRINGEMENT, MERCHANTABILITY OR FITNESS FOR A PARTICULAR
+PURPOSE. Each Recipient is solely responsible for determining the
+appropriateness of using and distributing the Program and assumes all
+risks associated with its exercise of rights under this Agreement,
+including but not limited to the risks and costs of program errors,
+compliance with applicable laws, damage to or loss of data, programs
+or equipment, and unavailability or interruption of operations.
+
+6. DISCLAIMER OF LIABILITY
+
+EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, AND TO THE EXTENT
+PERMITTED BY APPLICABLE LAW, NEITHER RECIPIENT NOR ANY CONTRIBUTORS
+SHALL HAVE ANY LIABILITY FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
+EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING WITHOUT LIMITATION LOST
+PROFITS), HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ARISING IN ANY WAY OUT OF THE USE OR DISTRIBUTION OF THE PROGRAM OR THE
+EXERCISE OF ANY RIGHTS GRANTED HEREUNDER, EVEN IF ADVISED OF THE
+POSSIBILITY OF SUCH DAMAGES.
+
+7. GENERAL
+
+If any provision of this Agreement is invalid or unenforceable under
+applicable law, it shall not affect the validity or enforceability of
+the remainder of the terms of this Agreement, and without further
+action by the parties hereto, such provision shall be reformed to the
+minimum extent necessary to make such provision valid and enforceable.
+
+If Recipient institutes patent litigation against any entity
+(including a cross-claim or counterclaim in a lawsuit) alleging that the
+Program itself (excluding combinations of the Program with other software
+or hardware) infringes such Recipient's patent(s), then such Recipient's
+rights granted under Section 2(b) shall terminate as of the date such
+litigation is filed.
+
+All Recipient's rights under this Agreement shall terminate if it
+fails to comply with any of the material terms or conditions of this
+Agreement and does not cure such failure in a reasonable period of
+time after becoming aware of such noncompliance. If all Recipient's
+rights under this Agreement terminate, Recipient agrees to cease use
+and distribution of the Program as soon as reasonably practicable.
+However, Recipient's obligations under this Agreement and any licenses
+granted by Recipient relating to the Program shall continue and survive.
+
+Everyone is permitted to copy and distribute copies of this Agreement,
+but in order to avoid inconsistency the Agreement is copyrighted and
+may only be modified in the following manner. The Agreement Steward
+reserves the right to publish new versions (including revisions) of
+this Agreement from time to time. No one other than the Agreement
+Steward has the right to modify this Agreement. The Eclipse Foundation
+is the initial Agreement Steward. The Eclipse Foundation may assign the
+responsibility to serve as the Agreement Steward to a suitable separate
+entity. Each new version of the Agreement will be given a distinguishing
+version number. The Program (including Contributions) may always be
+Distributed subject to the version of the Agreement under which it was
+received. In addition, after a new version of the Agreement is published,
+Contributor may elect to Distribute the Program (including its
+Contributions) under the new version.
+
+Except as expressly stated in Sections 2(a) and 2(b) above, Recipient
+receives no rights or licenses to the intellectual property of any
+Contributor under this Agreement, whether expressly, by implication,
+estoppel or otherwise. All rights in the Program not expressly granted
+under this Agreement are reserved. Nothing in this Agreement is intended
+to be enforceable by any entity that is not a Contributor or Recipient.
+No third-party beneficiary rights are created under this Agreement.
+
+Exhibit A - Form of Secondary Licenses Notice
+
+"This Source Code may also be made available under the following
+Secondary Licenses when the conditions for such availability set forth
+in the Eclipse Public License, v. 2.0 are satisfied: {name license(s),
+version(s), and exceptions or additional permissions here}."
+
+ Simply including a copy of this Agreement, including this Exhibit A
+ is not sufficient to license the Source Code under Secondary Licenses.
+
+ If it is not possible or desirable to put the notice in a particular
+ file, then You may include the notice in a location (such as a LICENSE
+ file in a relevant directory) where a recipient would be likely to
+ look for such a notice.
+
+ You may add additional accurate notices of copyright ownership.
\ No newline at end of file
diff --git a/org.eclipse.osbp.fork.vaadin.addon.maskedtextfield/notice.html b/org.eclipse.osbp.fork.vaadin.addon.maskedtextfield/notice.html
new file mode 100644
index 0000000..81fca9d
--- /dev/null
+++ b/org.eclipse.osbp.fork.vaadin.addon.maskedtextfield/notice.html
@@ -0,0 +1,189 @@
+<?xml version="1.0" encoding="ISO-8859-1" ?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1" />
+<title>Eclipse Foundation Software User Agreement</title>
+</head>
+
+<body lang="EN-US">
+ <h2>Eclipse Foundation Software User Agreement</h2>
+ <p>November 22, 2014</p>
+
+ <h3>Usage Of Content</h3>
+
+ <p>THE ECLIPSE FOUNDATION MAKES AVAILABLE SOFTWARE, DOCUMENTATION,
+ INFORMATION AND/OR OTHER MATERIALS FOR OPEN SOURCE PROJECTS
+ (COLLECTIVELY "CONTENT"). USE OF THE CONTENT IS GOVERNED BY
+ THE TERMS AND CONDITIONS OF THIS AGREEMENT AND/OR THE TERMS AND
+ CONDITIONS OF LICENSE AGREEMENTS OR NOTICES INDICATED OR REFERENCED
+ BELOW. BY USING THE CONTENT, YOU AGREE THAT YOUR USE OF THE CONTENT IS
+ GOVERNED BY THIS AGREEMENT AND/OR THE TERMS AND CONDITIONS OF ANY
+ APPLICABLE LICENSE AGREEMENTS OR NOTICES INDICATED OR REFERENCED
+ BELOW. IF YOU DO NOT AGREE TO THE TERMS AND CONDITIONS OF THIS
+ AGREEMENT AND THE TERMS AND CONDITIONS OF ANY APPLICABLE LICENSE
+ AGREEMENTS OR NOTICES INDICATED OR REFERENCED BELOW, THEN YOU MAY NOT
+ USE THE CONTENT.</p>
+
+ <h3>Applicable Licenses</h3>
+
+ <p>
+ Unless otherwise indicated, all Content made available by the Eclipse
+ Foundation is provided to you under the terms and conditions of the
+ Eclipse Public License Version 2.0 ("EPL"). A copy of the
+ EPL is provided with this Content and is also available at <a
+ href="http://www.eclipse.org/legal/epl-2.0">http://www.eclipse.org/legal/epl-2.0</a>.
+ For purposes of the EPL, "Program" will mean the Content.
+ </p>
+
+ <p>Content includes, but is not limited to, source code, object
+ code, documentation and other files maintained in the Eclipse
+ Foundation source code repository ("Repository") in software
+ modules ("Modules") and made available as downloadable
+ archives ("Downloads").</p>
+
+ <ul>
+ <li>Content may be structured and packaged into modules to
+ facilitate delivering, extending, and upgrading the Content. Typical
+ modules may include plug-ins ("Plug-ins"), plug-in
+ fragments ("Fragments"), and features
+ ("Features").</li>
+ <li>Each Plug-in or Fragment may be packaged as a sub-directory
+ or JAR (Java™ ARchive) in a directory named
+ "plugins".</li>
+ <li>A Feature is a bundle of one or more Plug-ins and/or
+ Fragments and associated material. Each Feature may be packaged as a
+ sub-directory in a directory named "features". Within a
+ Feature, files named "feature.xml" may contain a list of
+ the names and version numbers of the Plug-ins and/or Fragments
+ associated with that Feature.</li>
+ <li>Features may also include other Features ("Included
+ Features"). Within a Feature, files named
+ "feature.xml" may contain a list of the names and version
+ numbers of Included Features.</li>
+ </ul>
+
+ <p>The terms and conditions governing Plug-ins and Fragments should
+ be contained in files named "about.html"
+ ("Abouts"). The terms and conditions governing Features and
+ Included Features should be contained in files named
+ "license.html" ("Feature Licenses"). Abouts and
+ Feature Licenses may be located in any directory of a Download or
+ Module including, but not limited to the following locations:</p>
+
+ <ul>
+ <li>The top-level (root) directory</li>
+ <li>Plug-in and Fragment directories</li>
+ <li>Inside Plug-ins and Fragments packaged as JARs</li>
+ <li>Sub-directories of the directory named "src" of
+ certain Plug-ins</li>
+ <li>Feature directories</li>
+ </ul>
+
+ <p>Note: if a Feature made available by the Eclipse Foundation is
+ installed using the Provisioning Technology (as defined below), you
+ must agree to a license ("Feature Update License") during
+ the installation process. If the Feature contains Included Features,
+ the Feature Update License should either provide you with the terms
+ and conditions governing the Included Features or inform you where you
+ can locate them. Feature Update Licenses may be found in the
+ "license" property of files named
+ "feature.properties" found within a Feature. Such Abouts,
+ Feature Licenses, and Feature Update Licenses contain the terms and
+ conditions (or references to such terms and conditions) that govern
+ your use of the associated Content in that directory.</p>
+
+ <p>THE ABOUTS, FEATURE LICENSES, AND FEATURE UPDATE LICENSES MAY
+ REFER TO THE EPL OR OTHER LICENSE AGREEMENTS, NOTICES OR TERMS AND
+ CONDITIONS. SOME OF THESE OTHER LICENSE AGREEMENTS MAY INCLUDE (BUT
+ ARE NOT LIMITED TO):</p>
+
+ <ul>
+ <li>Eclipse Public License Version 1.0 (available at <a
+ href="http://www.eclipse.org/legal/epl-v10.html">http://www.eclipse.org/legal/epl-v10.html</a>)
+ </li>
+ <li>Eclipse Distribution License Version 1.0 (available at <a
+ href="http://www.eclipse.org/licenses/edl-v10.html">http://www.eclipse.org/licenses/edl-v1.0.html</a>)
+ </li>
+ <li>Common Public License Version 1.0 (available at <a
+ href="http://www.eclipse.org/legal/cpl-v10.html">http://www.eclipse.org/legal/cpl-v10.html</a>)
+ </li>
+ <li>Apache Software License 1.1 (available at <a
+ href="http://www.apache.org/licenses/LICENSE">http://www.apache.org/licenses/LICENSE</a>)
+ </li>
+ <li>Apache Software License 2.0 (available at <a
+ href="http://www.apache.org/licenses/LICENSE-2.0">http://www.apache.org/licenses/LICENSE-2.0</a>)
+ </li>
+ <li>Mozilla Public License Version 1.1 (available at <a
+ href="http://www.mozilla.org/MPL/MPL-1.1.html">http://www.mozilla.org/MPL/MPL-1.1.html</a>)
+ </li>
+ </ul>
+
+ <p>IT IS YOUR OBLIGATION TO READ AND ACCEPT ALL SUCH TERMS AND
+ CONDITIONS PRIOR TO USE OF THE CONTENT. If no About, Feature License,
+ or Feature Update License is provided, please contact the Eclipse
+ Foundation to determine what terms and conditions govern that
+ particular Content.</p>
+
+
+ <h3>Use of Provisioning Technology</h3>
+
+ <p>
+ The Eclipse Foundation makes available provisioning software, examples
+ of which include, but are not limited to, p2 and the Eclipse Update
+ Manager ("Provisioning Technology") for the purpose of
+ allowing users to install software, documentation, information and/or
+ other materials (collectively "Installable Software"). This
+ capability is provided with the intent of allowing such users to
+ install, extend and update Eclipse-based products. Information about
+ packaging Installable Software is available at <a
+ href="http://eclipse.org/equinox/p2/repository_packaging.html">http://eclipse.org/equinox/p2/repository_packaging.html</a>
+ ("Specification").
+ </p>
+
+ <p>You may use Provisioning Technology to allow other parties to
+ install Installable Software. You shall be responsible for enabling
+ the applicable license agreements relating to the Installable Software
+ to be presented to, and accepted by, the users of the Provisioning
+ Technology in accordance with the Specification. By using Provisioning
+ Technology in such a manner and making it available in accordance with
+ the Specification, you further acknowledge your agreement to, and the
+ acquisition of all necessary rights to permit the following:</p>
+
+ <ol>
+ <li>A series of actions may occur ("Provisioning
+ Process") in which a user may execute the Provisioning
+ Technology on a machine ("Target Machine") with the intent
+ of installing, extending or updating the functionality of an
+ Eclipse-based product.</li>
+ <li>During the Provisioning Process, the Provisioning Technology
+ may cause third party Installable Software or a portion thereof to be
+ accessed and copied to the Target Machine.</li>
+ <li>Pursuant to the Specification, you will provide to the user
+ the terms and conditions that govern the use of the Installable
+ Software ("Installable Software Agreement") and such
+ Installable Software Agreement shall be accessed from the Target
+ Machine in accordance with the Specification. Such Installable
+ Software Agreement must inform the user of the terms and conditions
+ that govern the Installable Software and must solicit acceptance by
+ the end user in the manner prescribed in such Installable Software
+ Agreement. Upon such indication of agreement by the user, the
+ provisioning Technology will complete installation of the Installable
+ Software.</li>
+ </ol>
+
+ <h3>Cryptography</h3>
+
+ <p>Content may contain encryption software. The country in which
+ you are currently may have restrictions on the import, possession, and
+ use, and/or re-export to another country, of encryption software.
+ BEFORE using any encryption software, please check the country's laws,
+ regulations and policies concerning the import, possession, or use,
+ and re-export of encryption software, to see if this is permitted.</p>
+
+ <p>
+ <small>Java and all Java-based trademarks are trademarks of
+ Oracle Corporation in the United States, other countries, or both.</small>
+ </p>
+</body>
+</html>
diff --git a/org.eclipse.osbp.fork.vaadin.addon.maskedtextfield/pom.xml b/org.eclipse.osbp.fork.vaadin.addon.maskedtextfield/pom.xml
new file mode 100644
index 0000000..a003ac3
--- /dev/null
+++ b/org.eclipse.osbp.fork.vaadin.addon.maskedtextfield/pom.xml
@@ -0,0 +1,250 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- /* -->
+<!-- * Copyright (c) 2011, 2018 - Loetz GmbH&Co.KG (69115 Heidelberg, Germany) -->
+<!-- * -->
+<!-- * This program and the accompanying materials are made available under the -->
+<!-- * terms of the Eclipse Public License 2.0 which is available at -->
+<!-- * http://www.eclipse.org/legal/epl-2.0. -->
+<!-- * -->
+<!-- * SPDX-License-Identifier: EPL-2.0 -->
+<!-- * -->
+<!-- * Contributors: -->
+<!-- * Loetz GmbH&Co.KG - forked from -->
+<!-- * https://github.com/EduFrazao/vaadin-masked-textfield -->
+<!-- */ -->
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
+ <modelVersion>4.0.0</modelVersion>
+
+ <parent>
+ <groupId>org.eclipse.osbp.fork.vaadin.addon.maskedtextfield</groupId>
+ <artifactId>org.eclipse.osbp.fork.vaadin.addon.maskedtextfield.aggregator</artifactId>
+ <version>0.9.0-SNAPSHOT</version>
+ <relativePath>..</relativePath>
+ </parent>
+
+ <!-- CQ: https://dev.eclipse.org/ipzilla/show_bug.cgi?id=15404 -->
+ <!-- artifact: vaadin.addon.maskedtextfield -->
+ <!-- version: 0.1.10 -->
+ <artifactId>org.eclipse.osbp.fork.vaadin.addon.maskedtextfield</artifactId>
+ <version>0.1.10-SNAPSHOT</version>
+ <packaging>bundle</packaging>
+
+ <properties>
+ <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
+ <vaadin.plugin.version>${vaadin.version}</vaadin.plugin.version>
+ <jdkVersion>1.8</jdkVersion>
+ </properties>
+
+ <repositories>
+ <repository>
+ <id>vaadin-snapshots</id>
+ <url>http://oss.sonatype.org/content/repositories/vaadin-snapshots/</url>
+ <releases>
+ <enabled>false</enabled>
+ </releases>
+ <snapshots>
+ <enabled>true</enabled>
+ </snapshots>
+ </repository>
+ </repositories>
+ <pluginRepositories>
+ <pluginRepository>
+ <id>vaadin-snapshots</id>
+ <url>http://oss.sonatype.org/content/repositories/vaadin-snapshots/</url>
+ <releases>
+ <enabled>false</enabled>
+ </releases>
+ <snapshots>
+ <enabled>true</enabled>
+ </snapshots>
+ </pluginRepository>
+ </pluginRepositories>
+
+ <dependencies>
+ <!-- CQ: https://dev.eclipse.org/ipzilla/show_bug.cgi?id=15328 (7.7.6) -->
+ <dependency>
+ <groupId>com.vaadin</groupId>
+ <artifactId>vaadin-server</artifactId>
+ <version>${vaadin.version}</version>
+ <scope>provided</scope>
+ </dependency>
+
+ <!-- CQ: https://dev.eclipse.org/ipzilla/show_bug.cgi?id=15326 (7.7.6) -->
+ <dependency>
+ <groupId>com.vaadin</groupId>
+ <artifactId>vaadin-shared</artifactId>
+ <version>${vaadin.version}</version>
+ <scope>provided</scope>
+ </dependency>
+
+ <!-- CQ: https://dev.eclipse.org/ipzilla/show_bug.cgi?id=15327 (7.7.6) -->
+ <dependency>
+ <groupId>com.vaadin</groupId>
+ <artifactId>vaadin-client</artifactId>
+ <version>${vaadin.version}</version>
+ <scope>provided</scope>
+ </dependency>
+
+ <!-- CQ: https://dev.eclipse.org/ipzilla/show_bug.cgi?id=15327 (7.7.6) -->
+ <dependency>
+ <groupId>com.vaadin</groupId>
+ <artifactId>vaadin-client-compiled</artifactId>
+ <version>${vaadin.version}</version>
+ <scope>provided</scope>
+ </dependency>
+
+ <!-- CQ: https://dev.eclipse.org/ipzilla/show_bug.cgi?id=15329 (7.7.6) -->
+ <dependency>
+ <groupId>com.vaadin</groupId>
+ <artifactId>vaadin-themes</artifactId>
+ <version>${vaadin.version}</version>
+ <scope>provided</scope>
+ </dependency>
+
+ <!-- CQ: https://dev.eclipse.org/ipzilla/show_bug.cgi?id=12749 -->
+ <dependency>
+ <groupId>org.jsoup</groupId>
+ <artifactId>jsoup</artifactId>
+ <version>1.8.3</version>
+ </dependency>
+
+ <dependency>
+ <groupId>org.eclipse.osbp.dependencies</groupId>
+ <artifactId>org.eclipse.osbp.dependencies.bundle.vaadin.external.gwt</artifactId>
+ <version>2.7.0-SNAPSHOT</version>
+ </dependency>
+
+ </dependencies>
+
+ <build>
+ <sourceDirectory>${basedir}/src</sourceDirectory>
+
+ <plugins>
+ <plugin>
+ <groupId>org.apache.maven.plugins</groupId>
+ <artifactId>maven-resources-plugin</artifactId>
+ <configuration>
+ <encoding>UTF-8</encoding>
+ </configuration>
+ </plugin>
+ <plugin>
+ <groupId>org.apache.maven.plugins</groupId>
+ <artifactId>maven-compiler-plugin</artifactId>
+ <configuration>
+ <encoding>UTF-8</encoding>
+ <source>1.8</source>
+ <target>1.8</target>
+ </configuration>
+ </plugin>
+
+ <plugin>
+ <groupId>org.apache.felix</groupId>
+ <artifactId>maven-bundle-plugin</artifactId>
+ <extensions>true</extensions>
+ <configuration>
+ <instructions>
+ <Bundle-Name>OS.bee Addon for Vaadin: MaskedTextField (Fork)</Bundle-Name>
+ <Bundle-SymbolicName>org.eclipse.osbp.fork.vaadin.addon.maskedtextfield</Bundle-SymbolicName>
+ <Bundle-Version>0.1.10.${osgi-version-qualifier}</Bundle-Version>
+ <Require-Bundle>com.vaadin.server;bundle-version="[7.7.6,7.8.0)",
+ com.vaadin.client;bundle-version="[7.7.6,7.8.0)",
+ com.vaadin.client-compiled;bundle-version="[7.7.6,7.8.0)",
+ com.vaadin.themes;bundle-version="[7.7.6,7.8.0)",
+ com.vaadin.shared;bundle-version="[7.7.6,7.8.0)",
+ org.jsoup;bundle-version="[1.8.3,1.8.4)"
+ </Require-Bundle>
+ <Import-Package>
+ com.ibm.icu.*;version="56.1",
+ *
+ </Import-Package>
+ <Export-Package>
+ !LICENSE,!LICENSE.txt,!THIRD-PARTY.txt,!NOTICE,!README.txt,!VERSION.txt,!build.properties,
+ !VAADIN.*,!about_files*,
+ org.vaadin.addons.maskedtextfield.*
+ </Export-Package>
+ <Include-Resource>{maven-resources},license.txt,license.html,epl-v20.html,about_files/=about_files,about.html,about.ini,about.mappings,about.properties</Include-Resource>
+ <_nouses>true</_nouses>
+ </instructions>
+ </configuration>
+ </plugin>
+ <plugin>
+ <groupId>org.apache.maven.plugins</groupId>
+ <artifactId>maven-source-plugin</artifactId>
+ <executions>
+ <execution>
+ <id>attach-sources</id>
+ <goals>
+ <goal>jar</goal>
+ </goals>
+ </execution>
+ </executions>
+ </plugin>
+ </plugins>
+ <pluginManagement>
+ <plugins>
+
+ <!--This plugin's configuration is used to store Eclipse m2e settings
+ only. It has no influence on the Maven build itself. -->
+ <plugin>
+ <groupId>org.eclipse.m2e</groupId>
+ <artifactId>lifecycle-mapping</artifactId>
+ <version>1.0.0</version>
+ <configuration>
+ <lifecycleMappingMetadata>
+ <pluginExecutions>
+ <pluginExecution>
+ <pluginExecutionFilter>
+ <groupId>
+ org.apache.maven.plugins
+ </groupId>
+ <artifactId>
+ maven-dependency-plugin
+ </artifactId>
+ <versionRange>
+ [2.0.0,)
+ </versionRange>
+ <goals>
+ <goal>
+ copy-dependencies
+ </goal>
+ </goals>
+ </pluginExecutionFilter>
+ <action>
+ <ignore></ignore>
+ </action>
+ </pluginExecution>
+ <pluginExecution>
+ <pluginExecutionFilter>
+ <groupId>com.vaadin</groupId>
+ <artifactId>
+ vaadin-maven-plugin
+ </artifactId>
+ <versionRange>
+ [7.0-SNAPSHOT,)
+ </versionRange>
+ <goals>
+ <goal>compile</goal>
+ </goals>
+ </pluginExecutionFilter>
+ <action>
+ <ignore></ignore>
+ </action>
+ </pluginExecution>
+ </pluginExecutions>
+ </lifecycleMappingMetadata>
+ </configuration>
+ </plugin>
+ </plugins>
+ </pluginManagement>
+ <!-- This is needed for the sources required by the client-side compiler
+ to be included in the produced JARs -->
+ <resources>
+ <resource>
+ <directory>src</directory>
+ </resource>
+ </resources>
+
+ </build>
+
+</project>
diff --git a/org.eclipse.osbp.fork.vaadin.addon.maskedtextfield/sample/org/vaadin/addons/maskedtextfield/sample/SampleUI.java b/org.eclipse.osbp.fork.vaadin.addon.maskedtextfield/sample/org/vaadin/addons/maskedtextfield/sample/SampleUI.java
new file mode 100644
index 0000000..089a1cf
--- /dev/null
+++ b/org.eclipse.osbp.fork.vaadin.addon.maskedtextfield/sample/org/vaadin/addons/maskedtextfield/sample/SampleUI.java
@@ -0,0 +1,102 @@
+/*
+ * Copyright (c) 2011, 2016 - Loetz GmbH&Co.KG (69115 Heidelberg, Germany)
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except
+ * in compliance with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software distributed under the License
+ * is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express
+ * or implied. See the License for the specific language governing permissions and limitations under
+ * the License.
+ *
+ * Contributions:
+ * - Florian Pirchner <florian.pirchner@gmail.com> - Initial implementation
+ */
+
+package org.vaadin.addons.maskedtextfield.sample;
+
+import javax.servlet.annotation.WebServlet;
+
+import org.vaadin.addons.maskedtextfield.MaskedTextField;
+import org.vaadin.addons.maskedtextfield.NumericField;
+
+import com.vaadin.annotations.Theme;
+import com.vaadin.annotations.VaadinServletConfiguration;
+import com.vaadin.server.VaadinRequest;
+import com.vaadin.server.VaadinServlet;
+import com.vaadin.ui.Button;
+import com.vaadin.ui.Button.ClickEvent;
+import com.vaadin.ui.Button.ClickListener;
+import com.vaadin.ui.FormLayout;
+import com.vaadin.ui.Label;
+import com.vaadin.ui.Notification;
+import com.vaadin.ui.TabSheet;
+import com.vaadin.ui.UI;
+
+/**
+ * The Class AbsoluteLayoutUI.
+ */
+@SuppressWarnings("serial")
+@Theme("valo")
+public class SampleUI extends UI {
+
+ @Override
+ protected void init(VaadinRequest request) {
+
+TabSheet tabSheet = new TabSheet();
+
+ FormLayout numbers = new FormLayout();
+
+ final MaskedTextField phoneField = new MaskedTextField("Phone (##) ####-####", "+55 (##) ####-####");
+
+ Button btnShowValue = new Button("Show value");
+ btnShowValue.addClickListener(new ClickListener() {
+ @Override
+ public void buttonClick(ClickEvent event) {
+ Notification.show((String) phoneField.getValue());
+ }
+ });
+
+ numbers.addComponent(phoneField);
+ numbers.addComponent(btnShowValue);
+
+ numbers.addComponent(new MaskedTextField("UU###-###-###LL", "UU###-###-###LL"));
+ numbers.addComponent(new MaskedTextField("USPS Express Mail", "EU#########'US"));
+ numbers.addComponent(new MaskedTextField("Alphanumeric", "AAAAAAAAAA"));
+ numbers.addComponent(new MaskedTextField("Hex 0xHHHHHHHH", "0xHHHHHHHH"));
+ numbers.addComponent(new MaskedTextField("Signed number", "~####"));
+ numbers.addComponent(new MaskedTextField("Escape #2010", "'#####"));
+ numbers.addComponent(new MaskedTextField("'2010'", "''####''"));
+
+ FormLayout misc = new FormLayout();
+ misc.addComponent(new MaskedTextField("Capitalized name", "ULLLLLLLLLLLLLL"));
+ misc.addComponent(new MaskedTextField("Upper-case letters only", "UUUUUUUUU"));
+ misc.addComponent(new MaskedTextField("Lower-case letters only", "LLLLLLLLL"));
+ misc.addComponent(new MaskedTextField("Any letter", "????????"));
+ misc.addComponent(new MaskedTextField("Anything", "***********"));
+ misc.addComponent(new MaskedTextField("Time", "##:##"));
+ misc.addComponent(new MaskedTextField("Some preffix", "TR-####"));
+
+ FormLayout numeric = new FormLayout();
+ numeric.addComponent(new Label("Use UP and DOWN keys to change the value"));
+ numeric.addComponent(new NumericField("Numeric Value"));
+
+ tabSheet.addTab(numbers, "Numbers", null);
+ tabSheet.addTab(misc, "Misc", null);
+ tabSheet.addTab(numeric, "NumericField", null);
+
+ setContent(tabSheet);
+ }
+
+ /**
+ * The Class Servlet.
+ */
+ @WebServlet(value = "/*", asyncSupported = true)
+ @VaadinServletConfiguration(productionMode = false, ui = SampleUI.class, widgetset = "org.vaadin.addons.maskedtextfield.MaskedTextFieldWidgetset")
+ public static class Servlet extends VaadinServlet {
+ }
+
+
+}
\ No newline at end of file
diff --git a/org.eclipse.osbp.fork.vaadin.addon.maskedtextfield/src/org/vaadin/addons/maskedtextfield/DecimalField.java b/org.eclipse.osbp.fork.vaadin.addon.maskedtextfield/src/org/vaadin/addons/maskedtextfield/DecimalField.java
new file mode 100644
index 0000000..1678048
--- /dev/null
+++ b/org.eclipse.osbp.fork.vaadin.addon.maskedtextfield/src/org/vaadin/addons/maskedtextfield/DecimalField.java
@@ -0,0 +1,187 @@
+package org.vaadin.addons.maskedtextfield;
+
+import java.text.DecimalFormat;
+import java.text.DecimalFormatSymbols;
+import java.text.ParseException;
+import java.util.Locale;
+
+import org.vaadin.addons.maskedtextfield.client.DecimalFieldState;
+import org.vaadin.addons.maskedtextfield.server.Utils;
+
+import com.vaadin.data.Property;
+import com.vaadin.data.util.converter.AbstractStringToNumberConverter;
+import com.vaadin.ui.TextField;
+
+public class DecimalField extends TextField {
+
+ private static final long serialVersionUID = 1L;
+
+ public DecimalField() {
+ super();
+ setConverter(new MaskNumberConverter());
+ }
+
+ public DecimalField(Property<?> dataSource) {
+ super(dataSource);
+ setConverter(new MaskNumberConverter());
+ }
+
+ public DecimalField(String caption, Property<?> dataSource) {
+ super(caption, dataSource);
+ setConverter(new MaskNumberConverter());
+ }
+
+ public DecimalField(String caption, String value) {
+ super(caption, value);
+ setConverter(new MaskNumberConverter());
+ }
+
+ public DecimalField(String caption) {
+ super(caption);
+ setConverter(new MaskNumberConverter());
+ }
+
+ public DecimalField(String mask, char decimalSeparator, char groupingSeparator) {
+ this();
+ setMask(mask);
+ setDecimalSeparator(decimalSeparator);
+ setGroupingSeparator(groupingSeparator);
+ }
+
+ @Override
+ public void setValue(String string) {
+ super.setValue(string);
+ }
+
+ public void setValue(Number number) {
+ if(number != null) {
+ if(getConverter() != null) {
+ String v = getConverter().convertToPresentation(number, String.class, getLocale());
+ setValue(v);
+ } else {
+ setValue( (String) null);
+ }
+ } else {
+ setValue( (String) null);
+ }
+ }
+
+ public void setMask(String mask) {
+ if(mask == null) {
+ throw new NullPointerException("The format mask cannot be null");
+ }
+ if(mask.trim().isEmpty()) {
+ throw new IllegalStateException("The format mask cannot be empty");
+ }
+ getState().mask = mask;
+ }
+
+ public String getMask() {
+ return getState().mask;
+ }
+
+ public void setDecimalSeparator(char decimalSeparator) {
+ getState().decimalSeparator = decimalSeparator;
+ }
+
+ public char getDecimalSeparator() {
+ return getState().decimalSeparator;
+ }
+
+ public void setGroupingSeparator(char groupingSeparator) {
+ getState().groupingSeparator = groupingSeparator;
+ }
+
+ public char getGroupingSeparator() {
+ return getState().groupingSeparator;
+ }
+
+ @Override
+ public DecimalFieldState getState() {
+ return (DecimalFieldState) super.getState();
+ }
+
+ public void setSelectValueOnFocus(boolean selectOnFocus) {
+ getState().selectValuesOnFocus = selectOnFocus;
+ }
+
+ public boolean isSelectValueOnFocus() {
+ return getState().selectValuesOnFocus;
+ }
+
+ @SuppressWarnings("rawtypes")
+ @Override
+ public void setPropertyDataSource(Property newDataSource) {
+ if(newDataSource != null) {
+ if(!Number.class.isAssignableFrom(newDataSource.getType())) {
+ throw new IllegalArgumentException("This field is compatible with number datasources only");
+ }
+ super.setPropertyDataSource(newDataSource);
+ }
+ }
+
+ /**
+ * Custom converter to handle custom separators
+ * @author eduardo
+ *
+ */
+ private class MaskNumberConverter extends AbstractStringToNumberConverter<Number> {
+
+ private static final long serialVersionUID = 1L;
+
+ private DecimalFormat formatter;
+
+ public MaskNumberConverter() {
+ refreshFormatter();
+ }
+
+ private void refreshFormatter() {
+ if(formatter == null ||
+ ( formatter.getDecimalFormatSymbols().getGroupingSeparator() != getGroupingSeparator()
+ || formatter.getDecimalFormatSymbols().getDecimalSeparator() != getDecimalSeparator()
+ )
+ )
+ {
+ DecimalFormatSymbols decimalSymbols = new DecimalFormatSymbols();
+ decimalSymbols.setGroupingSeparator(getGroupingSeparator());
+ decimalSymbols.setDecimalSeparator(getDecimalSeparator());
+ formatter = new DecimalFormat();
+ formatter.setDecimalFormatSymbols(decimalSymbols);
+ }
+ }
+
+
+ @Override
+ public Number convertToModel(String value, Class<? extends Number> targetType, Locale locale) throws ConversionException {
+ refreshFormatter();
+ try {
+ if(value == null || value.trim().isEmpty()) {
+ return null;
+ }
+ Number number = formatter.parse(value);
+ if(getPropertyDataSource() != null) {
+ return Utils.convertToDataSource(number, getPropertyDataSource());
+ }
+ return number;
+ } catch (ParseException e) {
+ return Utils.convertToDataSource(new Double(0.0), getPropertyDataSource());
+ }
+ }
+
+ @Override
+ public String convertToPresentation(Number value, Class<? extends String> targetType, Locale locale) throws ConversionException {
+ if(value != null) {
+ refreshFormatter();
+ return formatter.format(value);
+ }
+ return null;
+ }
+
+ @Override
+ public Class<Number> getModelType() {
+ return Number.class;
+ }
+
+ }
+
+}
diff --git a/org.eclipse.osbp.fork.vaadin.addon.maskedtextfield/src/org/vaadin/addons/maskedtextfield/MaskedTextField.java b/org.eclipse.osbp.fork.vaadin.addon.maskedtextfield/src/org/vaadin/addons/maskedtextfield/MaskedTextField.java
new file mode 100644
index 0000000..8e5fff2
--- /dev/null
+++ b/org.eclipse.osbp.fork.vaadin.addon.maskedtextfield/src/org/vaadin/addons/maskedtextfield/MaskedTextField.java
@@ -0,0 +1,199 @@
+package org.vaadin.addons.maskedtextfield;
+
+import java.util.Arrays;
+import java.util.Locale;
+
+import org.vaadin.addons.maskedtextfield.client.MaskedTextFieldState;
+import org.vaadin.addons.maskedtextfield.server.Utils;
+import org.vaadin.addons.maskedtextfield.shared.Constants;
+
+import com.ibm.icu.math.BigDecimal;
+import com.vaadin.data.Property;
+import com.vaadin.data.util.converter.AbstractStringToNumberConverter;
+import com.vaadin.data.util.converter.Converter;
+import com.vaadin.ui.TextField;
+
+/**
+ * Server side component for the VMaskedTextField widget.
+ */
+public class MaskedTextField extends TextField {
+
+ private static final long serialVersionUID = 1L;
+
+ private char digitRepresentation = '#';
+
+ private Boolean maskClientOnly = false;
+
+ public MaskedTextField() {
+ super();
+ }
+
+ public MaskedTextField(String caption) {
+ setCaption(caption);
+ setConverter(new UnmaskModelConverter(this));
+ }
+
+ public MaskedTextField(String caption, String mask) {
+ setCaption(caption);
+ setMask(mask);
+ }
+
+ public MaskedTextField(Property<?> dataSource) {
+ super(dataSource);
+ setConverter(new UnmaskModelConverter(this));
+ }
+
+ public MaskedTextField(String caption, Property<?> dataSource) {
+ super(caption, dataSource);
+ setConverter(new UnmaskModelConverter(this));
+ }
+
+ @SuppressWarnings("rawtypes")
+ @Override
+ public void setPropertyDataSource(Property newDataSource) {
+ if(newDataSource != null) {
+ super.setPropertyDataSource(newDataSource);
+ if(Number.class.isAssignableFrom(newDataSource.getType())) {
+ validateNumberPropertyWithMask();
+ setConverter(new MaskNumberConverter());
+ } else if (char.class.isAssignableFrom(newDataSource.getType()) || String.class.isAssignableFrom(newDataSource.getType())) {
+ setConverter(new UnmaskModelConverter(this));
+ }
+ }
+ }
+
+ private void validateNumberPropertyWithMask() {
+ char[] maskChars = getMask().replaceAll("\\+", "").toCharArray();
+ for(char s : maskChars) {
+ if(Arrays.binarySearch(Constants.MASK_REPRESENTATIONS, s) >= 0 && s != digitRepresentation) {
+ throw new IllegalArgumentException("This mask is not compatible with numeric datasources");
+ }
+ }
+ }
+
+ public String getMask() {
+ return getState().mask;
+ }
+
+ public void setMask(String mask) {
+ getState().mask = mask;
+ }
+
+ public char getPlaceHolder() {
+ return getState().placeHolder;
+ }
+
+ public void setPlaceHolder(char placeHolder) {
+ getState().placeHolder = placeHolder;
+ }
+
+ public void setMaskClientOnly(boolean isMaskClientOnly) {
+ this.maskClientOnly = isMaskClientOnly;
+ setConverter(new UnmaskModelConverter(this));
+ }
+
+ public boolean isMaskClientOnly() {
+ return maskClientOnly.booleanValue();
+ }
+
+ @Override
+ protected MaskedTextFieldState getState() {
+ return (MaskedTextFieldState) super.getState();
+ }
+
+ protected String unmask(final String value, String mask) {
+ if(value == null || value.trim().isEmpty()) {
+ return null;
+ }
+ StringBuilder sb = new StringBuilder(value);
+ mask = mask.replaceAll("\\+", "");
+ int removedChars = 0;
+ for(int i = 0; i<mask.length(); i++) {
+ char s = mask.charAt(i);
+ if(Arrays.binarySearch(Constants.MASK_REPRESENTATIONS, s) < 0) {
+ if(i < value.length() && sb.charAt(i-removedChars) == s) {
+ sb.deleteCharAt(i-removedChars);
+ removedChars++;
+ }
+ }
+ }
+ return sb.toString();
+ }
+
+ protected String unmask(final String value) {
+ return unmask(value, getMask());
+ }
+
+ /**
+ * Tenta converter uma instancia de mascaras unicamente de digitos para um numero aplicavel em um datasource
+ * @author Eduardo Frazao
+ *
+ */
+ private class MaskNumberConverter extends AbstractStringToNumberConverter<Number> {
+
+ private static final long serialVersionUID = 1L;
+
+ @Override
+ public Number convertToModel(String value, Class<? extends Number> targetType, Locale locale) throws ConversionException {
+ String unmasked = unmask(value);
+ if(unmasked != null) {
+ try {
+ Number n = new BigDecimal(value);
+ return Utils.convertToDataSource(n, getPropertyDataSource());
+ } catch (NumberFormatException ne) {
+ return Utils.convertToDataSource(0, getPropertyDataSource());
+ }
+ }
+ return Utils.convertToDataSource(0, getPropertyDataSource());
+ }
+
+ @Override
+ public Class<Number> getModelType() {
+ return Number.class;
+ }
+
+ }
+
+ /**
+ * Converter simples para remover a mascara caso configurado pelo usuario
+ * @author eduardo
+ *
+ */
+ private static class UnmaskModelConverter implements Converter<String, String> {
+
+ private static final long serialVersionUID = 1L;
+
+ private MaskedTextField field;
+
+ public UnmaskModelConverter(MaskedTextField field) {
+ this.field = field;
+ }
+ @Override
+ public String convertToModel(String value, Class<? extends String> targetType, Locale locale) throws ConversionException {
+ return value;
+ }
+
+ @Override
+ public String convertToPresentation(String value, Class<? extends String> targetType, Locale locale) throws ConversionException {
+ if(field.isMaskClientOnly()) {
+ String unmasked = field.unmask(value);
+ if(unmasked != null) {
+ return unmasked;
+ }
+ }
+ return value;
+ }
+
+ @Override
+ public Class<String> getModelType() {
+ return String.class;
+ }
+
+ @Override
+ public Class<String> getPresentationType() {
+ return String.class;
+ }
+
+ }
+
+}
\ No newline at end of file
diff --git a/org.eclipse.osbp.fork.vaadin.addon.maskedtextfield/src/org/vaadin/addons/maskedtextfield/MaskedTextFieldWidgetset.gwt.xml b/org.eclipse.osbp.fork.vaadin.addon.maskedtextfield/src/org/vaadin/addons/maskedtextfield/MaskedTextFieldWidgetset.gwt.xml
new file mode 100644
index 0000000..801779a
--- /dev/null
+++ b/org.eclipse.osbp.fork.vaadin.addon.maskedtextfield/src/org/vaadin/addons/maskedtextfield/MaskedTextFieldWidgetset.gwt.xml
@@ -0,0 +1,12 @@
+<module>
+
+ <!-- Inherit DefaultWidgetSet -->
+ <inherits name="com.vaadin.DefaultWidgetSet" />
+
+ <set-configuration-property name="devModeRedirectEnabled" value="true" />
+ <add-linker name="xsiframe" />
+
+ <source path="client" />
+ <source path="shared" />
+
+</module>
diff --git a/org.eclipse.osbp.fork.vaadin.addon.maskedtextfield/src/org/vaadin/addons/maskedtextfield/NumericField.java b/org.eclipse.osbp.fork.vaadin.addon.maskedtextfield/src/org/vaadin/addons/maskedtextfield/NumericField.java
new file mode 100644
index 0000000..831d290
--- /dev/null
+++ b/org.eclipse.osbp.fork.vaadin.addon.maskedtextfield/src/org/vaadin/addons/maskedtextfield/NumericField.java
@@ -0,0 +1,64 @@
+package org.vaadin.addons.maskedtextfield;
+
+import com.vaadin.data.Property;
+import com.vaadin.ui.TextField;
+
+public class NumericField extends TextField {
+
+ private static final long serialVersionUID = 1L;
+
+ public NumericField() {
+ super();
+ }
+
+ /*
+ public void setValue(Short number) {
+ setNumberValue((Number) number);
+ }
+
+ public void setValue(Integer number) {
+ setNumberValue((Number) number);
+ }
+
+ public void setValue(Long number) {
+ setNumberValue((Number) number);
+ }
+
+ public void setValue(Double number) {
+ setNumberValue(number);
+ }
+
+ public void setValue(Float number) {
+ setNumberValue(number);
+ }
+ */
+
+ public void setValue(Number number) {
+ if(number != null) {
+ if(getConverter() != null) {
+ String v = getConverter().convertToPresentation(number, String.class, getLocale());
+ setValue(v);
+ } else {
+ setValue( (String) null);
+ }
+ } else {
+ setValue( (String) null);
+ }
+ }
+
+ public NumericField(Property<Number> dataSource) {
+ super(dataSource);
+ }
+
+ public NumericField(String caption, Property<Number> dataSource) {
+ super(caption, dataSource);
+ }
+
+ public NumericField(String caption, String value) {
+ super(caption, value);
+ }
+
+ public NumericField(String caption) {
+ super(caption);
+ }
+}
diff --git a/org.eclipse.osbp.fork.vaadin.addon.maskedtextfield/src/org/vaadin/addons/maskedtextfield/PrefixedMaskedTextField.java b/org.eclipse.osbp.fork.vaadin.addon.maskedtextfield/src/org/vaadin/addons/maskedtextfield/PrefixedMaskedTextField.java
new file mode 100644
index 0000000..b2cdc93
--- /dev/null
+++ b/org.eclipse.osbp.fork.vaadin.addon.maskedtextfield/src/org/vaadin/addons/maskedtextfield/PrefixedMaskedTextField.java
@@ -0,0 +1,74 @@
+package org.vaadin.addons.maskedtextfield;
+
+import java.util.Collections;
+import java.util.Map;
+
+import org.vaadin.addons.maskedtextfield.client.PrefixedMaskedTextFieldState;
+
+public class PrefixedMaskedTextField extends MaskedTextField {
+
+ private static final long serialVersionUID = 1L;
+
+ public PrefixedMaskedTextField(String caption) {
+ super(caption);
+ }
+
+ public PrefixedMaskedTextField() {
+ super();
+ }
+
+ public PrefixedMaskedTextField(String caption, String defaultMask, Map<String, String> masksByPrefix) {
+ super(caption, defaultMask);
+ setMasks(masksByPrefix);
+ getState().defaultMask = defaultMask;
+ }
+
+ public Map<String, String> getMasksByPrefix() {
+ return Collections.unmodifiableMap(getState().masksByPrefix);
+ }
+
+ public String getMaskByPrefix(String prefix) {
+ return getState().masksByPrefix.get(prefix);
+ }
+
+ public void addMask(String prefix, String mask) {
+ getState().masksByPrefix.put(prefix, mask);
+ }
+
+ public void removeMask(String prefix) {
+ getState().masksByPrefix.remove(prefix);
+ }
+
+ public void setMasks(Map<String, String> masksByPrefix) {
+ getState().masksByPrefix.clear();
+ getState().masksByPrefix.putAll(masksByPrefix);
+ }
+
+ @Override
+ public void setMask(String mask) {
+ super.setMask(mask);
+ getState().defaultMask = mask;
+ }
+
+ @Override
+ protected String unmask(final String value) {
+ return super.unmask(value, getMaskForValue(value));
+ }
+
+ private String getMaskForValue(String value) {
+ if(value != null && !value.isEmpty() && !getState().masksByPrefix.isEmpty()) {
+ for(String prefix : getState().masksByPrefix.keySet()) {
+ if(value.startsWith(prefix)) {
+ return getState().masksByPrefix.get(prefix);
+ }
+ }
+ }
+ return super.getMask();
+ }
+
+ @Override
+ public PrefixedMaskedTextFieldState getState() {
+ return (PrefixedMaskedTextFieldState) super.getState();
+ }
+
+}
diff --git a/org.eclipse.osbp.fork.vaadin.addon.maskedtextfield/src/org/vaadin/addons/maskedtextfield/client/DecimalFieldConnector.java b/org.eclipse.osbp.fork.vaadin.addon.maskedtextfield/src/org/vaadin/addons/maskedtextfield/client/DecimalFieldConnector.java
new file mode 100644
index 0000000..7f40fdd
--- /dev/null
+++ b/org.eclipse.osbp.fork.vaadin.addon.maskedtextfield/src/org/vaadin/addons/maskedtextfield/client/DecimalFieldConnector.java
@@ -0,0 +1,40 @@
+package org.vaadin.addons.maskedtextfield.client;
+
+import org.vaadin.addons.maskedtextfield.DecimalField;
+
+import com.google.gwt.core.client.GWT;
+import com.google.gwt.user.client.ui.Widget;
+import com.vaadin.client.communication.StateChangeEvent;
+import com.vaadin.client.ui.textfield.TextFieldConnector;
+import com.vaadin.shared.ui.Connect;
+
+@Connect(DecimalField.class)
+public class DecimalFieldConnector extends TextFieldConnector {
+
+ private static final long serialVersionUID = 1L;
+
+ @Override
+ protected Widget createWidget() {
+ return GWT.create(DecimalFieldWidget.class);
+ }
+
+ @Override
+ public DecimalFieldWidget getWidget() {
+ return (DecimalFieldWidget) super.getWidget();
+ }
+
+ @Override
+ public DecimalFieldState getState() {
+ return (DecimalFieldState) super.getState();
+ }
+
+ @Override
+ public void onStateChanged(StateChangeEvent stateChangeEvent) {
+ getWidget().setGroupingSeparator(getState().groupingSeparator);
+ getWidget().setDecimalSeparator(getState().decimalSeparator);
+ getWidget().setMask(getState().mask);
+ getWidget().setSelectTextOnFocus(getState().selectValuesOnFocus);
+ super.onStateChanged(stateChangeEvent);
+ }
+
+}
diff --git a/org.eclipse.osbp.fork.vaadin.addon.maskedtextfield/src/org/vaadin/addons/maskedtextfield/client/DecimalFieldState.java b/org.eclipse.osbp.fork.vaadin.addon.maskedtextfield/src/org/vaadin/addons/maskedtextfield/client/DecimalFieldState.java
new file mode 100644
index 0000000..37946a4
--- /dev/null
+++ b/org.eclipse.osbp.fork.vaadin.addon.maskedtextfield/src/org/vaadin/addons/maskedtextfield/client/DecimalFieldState.java
@@ -0,0 +1,17 @@
+package org.vaadin.addons.maskedtextfield.client;
+
+import com.vaadin.shared.ui.textfield.AbstractTextFieldState;
+
+public class DecimalFieldState extends AbstractTextFieldState {
+
+ private static final long serialVersionUID = 1L;
+
+ public char decimalSeparator = '.';
+
+ public char groupingSeparator = ',';
+
+ public String mask = "#.00";
+
+ public boolean selectValuesOnFocus = false;
+
+}
diff --git a/org.eclipse.osbp.fork.vaadin.addon.maskedtextfield/src/org/vaadin/addons/maskedtextfield/client/DecimalFieldWidget.java b/org.eclipse.osbp.fork.vaadin.addon.maskedtextfield/src/org/vaadin/addons/maskedtextfield/client/DecimalFieldWidget.java
new file mode 100644
index 0000000..22a385b
--- /dev/null
+++ b/org.eclipse.osbp.fork.vaadin.addon.maskedtextfield/src/org/vaadin/addons/maskedtextfield/client/DecimalFieldWidget.java
@@ -0,0 +1,254 @@
+package org.vaadin.addons.maskedtextfield.client;
+
+import java.util.Arrays;
+
+import org.vaadin.addons.maskedtextfield.shared.Constants;
+
+import com.google.gwt.event.dom.client.BlurEvent;
+import com.google.gwt.event.dom.client.BlurHandler;
+import com.google.gwt.event.dom.client.FocusEvent;
+import com.google.gwt.event.dom.client.FocusHandler;
+import com.google.gwt.event.dom.client.KeyCodes;
+import com.google.gwt.event.dom.client.KeyDownEvent;
+import com.google.gwt.event.dom.client.KeyPressEvent;
+import com.google.gwt.event.dom.client.KeyPressHandler;
+import com.google.gwt.i18n.client.NumberFormat;
+import com.google.gwt.user.client.Event;
+import com.vaadin.client.ui.VTextField;
+
+/**
+ * Widget para controlar a edicao de valores de moeda
+ * @author Eduardo Frazao
+ *
+ */
+public class DecimalFieldWidget extends VTextField implements KeyPressHandler, BlurHandler, FocusHandler {
+
+
+ private char decimalSeparator;
+ private char groupingSeparator;
+ private String mask;
+
+ private Number maxValue = Double.MAX_VALUE;
+
+ private NumberFormat formatter;
+ private NumberFormat defaultFormatter = NumberFormat.getDecimalFormat();
+
+ private boolean selectTextOnFocus = false;
+
+ protected static char[] acceptedCharSet = {
+ (char) KeyCodes.KEY_BACKSPACE,
+ (char) KeyCodes.KEY_TAB,
+ (char) KeyCodes.KEY_DELETE,
+ (char) KeyCodes.KEY_END,
+ (char) KeyCodes.KEY_ENTER,
+ (char) KeyCodes.KEY_ESCAPE,
+ (char) KeyCodes.KEY_HOME,
+ (char) KeyCodes.KEY_LEFT,
+ (char) KeyCodes.KEY_PAGEDOWN,
+ (char) KeyCodes.KEY_PAGEUP,
+ (char) KeyCodes.KEY_RIGHT
+ };
+
+ static {
+ Arrays.sort(acceptedCharSet);
+ }
+
+ public boolean isSelectTextOnFocus() {
+ return selectTextOnFocus;
+ }
+
+ public void setSelectTextOnFocus(boolean selectTextOnFocus) {
+ this.selectTextOnFocus = selectTextOnFocus;
+ }
+
+ public DecimalFieldWidget() {
+ setAlignment(TextAlignment.RIGHT);
+
+ addKeyPressHandler(this);
+ addKeyDownHandler(this);
+ addFocusHandler(this);
+ sinkEvents(Event.ONPASTE);
+
+ NumberFormat.setForcedLatinDigits(false);
+ formatter = NumberFormat.getFormat("#,###.00");
+ }
+
+ private boolean isCopyOrPasteEvent(KeyPressEvent evt) {
+ if(evt.isControlKeyDown()) {
+ return Character.toString(evt.getCharCode()).toLowerCase().equals("c") ||
+ Character.toString(evt.getCharCode()).toLowerCase().equals("v");
+ }
+ return false;
+ }
+
+ private boolean isAcceptedKey(char charCode) {
+ if(charCode == groupingSeparator) {
+ return false;
+ }
+ if(charCode == decimalSeparator) {
+ if(!mask.contains(Character.toString(Constants.FIXED_LOCALE_DECIMAL_SEPARATOR))) {
+ return false;
+ }
+ String str = getText().trim();
+ if(!str.isEmpty()) {
+ return !str.contains(Character.toString(decimalSeparator));
+ } else {
+ return false;
+ }
+ }
+ return Character.isDigit(charCode)
+ || charCode == decimalSeparator
+ || Arrays.binarySearch(acceptedCharSet, charCode) >= 0;
+ }
+
+ @Override
+ public void onKeyPress(KeyPressEvent event) {
+ if(!isCopyOrPasteEvent(event)) {
+ if (event.getCharCode() != Constants.EMPTY_CHAR && !isAcceptedKey(event.getCharCode()) ) {
+ cancelKey();
+ } else if(!getText().trim().isEmpty() && formatter.parse(getText()) >= maxValue.doubleValue()) {
+ cancelKey();
+ }
+ }
+ }
+
+
+ @Override
+ public void onKeyDown(KeyDownEvent event) {
+ super.onKeyDown(event);
+ if(event.getNativeKeyCode() == KeyCodes.KEY_ENTER) {
+ refreshValue();
+ }
+ }
+
+ @Override
+ public void onBlur(BlurEvent event) {
+ super.onBlur(event);
+ refreshValue();
+ }
+
+ @Override
+ public void onFocus(FocusEvent event) {
+ super.onFocus(event);
+ if(selectTextOnFocus) {
+ String text = getText();
+ if(text != null && !text.isEmpty()) {
+ setSelectionRange(0, text.length());
+ }
+ }
+ }
+
+ @Override
+ public void onBrowserEvent(Event event) {
+ super.onBrowserEvent(event);
+ if (event.getTypeInt() == Event.ONPASTE) {
+ onPaste(event);
+ }
+ }
+
+ public void onPaste(Event event) {
+ refreshValue();
+ }
+
+ private void refreshValue() {
+ super.setText(reformatContent(null));
+ }
+
+ private void refreshValue(String withFormatedValue) {
+ super.setText(reformatContent(withFormatedValue));
+ }
+
+ protected String reformatContent(String value) {
+ String str = value == null ? getText() : value;
+ if(!str.trim().isEmpty()) {
+ double amount = readDoubleFromFormattedValue(value);
+ return replaceSeparators(formatter.format(amount));
+ }
+ return str;
+ }
+
+ protected double parseDouble(String doubleNotationString) {
+ try {
+ return defaultFormatter.parse(doubleNotationString);
+ } catch (NumberFormatException ex) {
+ return 0.0;
+ }
+ }
+
+ protected double readDoubleFromFormattedValue(String value) {
+ String str = (value == null || value.trim().isEmpty()) ? getText().trim() : value;
+ if(groupingSeparator != Constants.EMPTY_CHAR) {
+ str = str.replaceAll(groupingSeparator == '.' ? "\\." : Character.toString(groupingSeparator), "");
+ }
+ if(decimalSeparator != Constants.EMPTY_CHAR) {
+ if(decimalSeparator != '.') {
+ str = str.replaceAll(Character.toString(decimalSeparator), ".");
+ }
+ }
+ try {
+ return Double.parseDouble(str);
+ } catch (NumberFormatException ex) {
+ return 0.0;
+ }
+ }
+
+ protected String replaceSeparators(final String defaultFormatedValue) {
+ String str = new String(defaultFormatedValue);
+ if(groupingSeparator != Constants.EMPTY_CHAR) {
+ str = str.replaceAll(Character.toString(Constants.FIXED_LOCALE_GROUPING_SEPARATOR), Character.toString(groupingSeparator));
+ }
+ if(decimalSeparator != Constants.EMPTY_CHAR) {
+ if(mask.contains(Character.toString(Constants.FIXED_LOCALE_DECIMAL_SEPARATOR))) {
+ int decimalLenght = mask.length() - mask.indexOf(Constants.FIXED_LOCALE_DECIMAL_SEPARATOR) - 1;
+ StringBuilder sb = new StringBuilder(str);
+ sb.setCharAt(str.length() - decimalLenght - 1 , decimalSeparator);
+ str = sb.toString();
+ }
+ }
+ return str;
+ }
+
+ public char getDecimalSeparator() {
+ return decimalSeparator;
+ }
+
+ public void setDecimalSeparator(char decimalSeparator) {
+ if(decimalSeparator != this.decimalSeparator) {
+ this.decimalSeparator = decimalSeparator;
+ refreshValue();
+ }
+ }
+
+ public char getGroupingSeparator() {
+ return groupingSeparator;
+ }
+
+ public void setGroupingSeparator(char groupingSeparator) {
+ if(groupingSeparator != this.groupingSeparator) {
+ this.groupingSeparator = groupingSeparator;
+ refreshValue();
+ }
+ }
+
+ public String getMask() {
+ return mask;
+ }
+
+ public void setMask(String mask) {
+ if(mask != this.mask) {
+ this.mask = mask;
+ formatter = NumberFormat.getFormat(this.mask);
+ refreshValue();
+ }
+ }
+
+ @Override
+ public void setText(String value) {
+ if(value == null) {
+ super.setText(null);
+ } else {
+ refreshValue(value);
+ }
+ }
+
+}
diff --git a/org.eclipse.osbp.fork.vaadin.addon.maskedtextfield/src/org/vaadin/addons/maskedtextfield/client/MaskedTextFieldConnector.java b/org.eclipse.osbp.fork.vaadin.addon.maskedtextfield/src/org/vaadin/addons/maskedtextfield/client/MaskedTextFieldConnector.java
new file mode 100644
index 0000000..aeb69f5
--- /dev/null
+++ b/org.eclipse.osbp.fork.vaadin.addon.maskedtextfield/src/org/vaadin/addons/maskedtextfield/client/MaskedTextFieldConnector.java
@@ -0,0 +1,37 @@
+package org.vaadin.addons.maskedtextfield.client;
+
+import org.vaadin.addons.maskedtextfield.MaskedTextField;
+
+import com.google.gwt.core.client.GWT;
+import com.vaadin.client.communication.StateChangeEvent;
+import com.vaadin.client.ui.textfield.TextFieldConnector;
+import com.vaadin.shared.ui.Connect;
+
+@Connect(MaskedTextField.class)
+public class MaskedTextFieldConnector extends TextFieldConnector {
+
+ private static final long serialVersionUID = 1L;
+
+ @Override
+ protected MaskedTextFieldWidget createWidget() {
+ return GWT.create(MaskedTextFieldWidget.class);
+ }
+
+ @Override
+ public MaskedTextFieldWidget getWidget() {
+ return (MaskedTextFieldWidget) super.getWidget();
+ }
+
+ @Override
+ public MaskedTextFieldState getState() {
+ return (MaskedTextFieldState) super.getState();
+ }
+
+ @Override
+ public void onStateChanged(StateChangeEvent stateChangeEvent) {
+ getWidget().setMask(getState().mask);
+ getWidget().setPlaceHolder(getState().placeHolder);
+ super.onStateChanged(stateChangeEvent);
+ }
+
+}
diff --git a/org.eclipse.osbp.fork.vaadin.addon.maskedtextfield/src/org/vaadin/addons/maskedtextfield/client/MaskedTextFieldState.java b/org.eclipse.osbp.fork.vaadin.addon.maskedtextfield/src/org/vaadin/addons/maskedtextfield/client/MaskedTextFieldState.java
new file mode 100644
index 0000000..d662940
--- /dev/null
+++ b/org.eclipse.osbp.fork.vaadin.addon.maskedtextfield/src/org/vaadin/addons/maskedtextfield/client/MaskedTextFieldState.java
@@ -0,0 +1,19 @@
+package org.vaadin.addons.maskedtextfield.client;
+
+import com.vaadin.shared.ui.textfield.AbstractTextFieldState;
+
+public class MaskedTextFieldState extends AbstractTextFieldState {
+
+ private static final long serialVersionUID = 1L;
+
+ /**
+ * The mask
+ */
+ public String mask;
+
+ /**
+ * A Placeholder
+ */
+ public char placeHolder = '_';
+
+}
diff --git a/org.eclipse.osbp.fork.vaadin.addon.maskedtextfield/src/org/vaadin/addons/maskedtextfield/client/MaskedTextFieldWidget.java b/org.eclipse.osbp.fork.vaadin.addon.maskedtextfield/src/org/vaadin/addons/maskedtextfield/client/MaskedTextFieldWidget.java
new file mode 100644
index 0000000..44bf0fd
--- /dev/null
+++ b/org.eclipse.osbp.fork.vaadin.addon.maskedtextfield/src/org/vaadin/addons/maskedtextfield/client/MaskedTextFieldWidget.java
@@ -0,0 +1,467 @@
+package org.vaadin.addons.maskedtextfield.client;
+
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.List;
+
+import org.vaadin.addons.maskedtextfield.client.masks.AlphanumericMask;
+import org.vaadin.addons.maskedtextfield.client.masks.HexMask;
+import org.vaadin.addons.maskedtextfield.client.masks.LetterMask;
+import org.vaadin.addons.maskedtextfield.client.masks.LowerCaseMask;
+import org.vaadin.addons.maskedtextfield.client.masks.Mask;
+import org.vaadin.addons.maskedtextfield.client.masks.NumericMask;
+import org.vaadin.addons.maskedtextfield.client.masks.SignMask;
+import org.vaadin.addons.maskedtextfield.client.masks.UpperCaseMask;
+import org.vaadin.addons.maskedtextfield.client.masks.WildcardMask;
+import org.vaadin.addons.maskedtextfield.shared.Constants;
+
+import com.google.gwt.core.client.Scheduler;
+import com.google.gwt.event.dom.client.BlurEvent;
+import com.google.gwt.event.dom.client.BlurHandler;
+import com.google.gwt.event.dom.client.FocusEvent;
+import com.google.gwt.event.dom.client.FocusHandler;
+import com.google.gwt.event.dom.client.KeyCodes;
+import com.google.gwt.event.dom.client.KeyDownEvent;
+import com.google.gwt.event.dom.client.KeyDownHandler;
+import com.google.gwt.event.dom.client.KeyPressEvent;
+import com.google.gwt.event.dom.client.KeyPressHandler;
+import com.google.gwt.user.client.Event;
+import com.vaadin.client.ui.VTextField;
+
+public class MaskedTextFieldWidget extends VTextField implements KeyDownHandler,
+ FocusHandler, BlurHandler, KeyPressHandler {
+
+ protected String mask;
+ private String proccessedMask;
+
+ private char placeholder = '_';
+
+ private StringBuilder string;
+ private List<Mask> maskTest;
+ private List<Integer> nullablePositions;
+
+ private char emptyChar ='\0';
+
+ private boolean immediate = false;
+
+ /**
+ * Key press that might be ignored by event handlers
+ */
+ private char[] ignoredKeys = new char[] {
+ KeyCodes.KEY_BACKSPACE,
+ KeyCodes.KEY_TAB,
+ KeyCodes.KEY_DELETE,
+ KeyCodes.KEY_END,
+ KeyCodes.KEY_ENTER,
+ KeyCodes.KEY_ESCAPE,
+ KeyCodes.KEY_HOME,
+ KeyCodes.KEY_LEFT,
+ KeyCodes.KEY_PAGEDOWN,
+ KeyCodes.KEY_PAGEUP,
+ KeyCodes.KEY_RIGHT
+ };
+
+ public MaskedTextFieldWidget() {
+ super();
+ Arrays.sort(ignoredKeys);
+ addKeyPressHandler(this);
+ addKeyDownHandler(this);
+ addFocusHandler(this);
+ addBlurHandler(this);
+ sinkEvents(Event.ONPASTE);
+ }
+
+ @Override
+ public void setText(String value) {
+ setText(value, true);
+ }
+
+ protected void setText(String value, boolean checkComplete) {
+ String v = formatString(value);
+ string = new StringBuilder(v);
+ super.setText((checkComplete && isFieldIfIncomplete()) ? "" : v);
+ valueChange(false);
+ }
+
+ public void setMask(String mask) {
+ setMask(mask, true);
+ }
+
+ protected void setMask(String mask, boolean replaceValue) {
+ this.mask = mask;
+ string = new StringBuilder();
+ maskTest = new ArrayList<Mask>(mask.length());
+ nullablePositions = new ArrayList<Integer>();
+ if(replaceValue) {
+ configureUserView();
+ } else {
+ configureMask();
+ }
+ getNextPosition(0);
+ }
+
+ public void setPlaceHolder(char placeHolder) {
+ this.placeholder = placeHolder;
+ }
+
+ private void configureMask() {
+ for (int index = 0; index < mask.length(); index++) {
+ char character = mask.charAt(index);
+ createCorrectMaskAndPlaceholder(character, index);
+ }
+ proccessedMask = string.toString();
+ }
+
+ private void configureUserView() {
+ configureMask();
+ super.setText(proccessedMask);
+ valueChange(false);
+ }
+
+ private void createCorrectMaskAndPlaceholder(char character, int index) {
+ switch (character) {
+ case '\'':
+ addMaskStrategyAndCharacterPlaceHolder(null, mask.charAt(++index));
+ break;
+ case '#':
+ addMaskStrategyAndCharacterPlaceHolder(new NumericMask(),placeholder);
+ break;
+ case 'U':
+ addMaskStrategyAndCharacterPlaceHolder(new UpperCaseMask(), placeholder);
+ break;
+ case 'L':
+ addMaskStrategyAndCharacterPlaceHolder(new LowerCaseMask(), placeholder);
+ break;
+ case '?':
+ addMaskStrategyAndCharacterPlaceHolder(new LetterMask(), placeholder);
+ break;
+ case 'A':
+ addMaskStrategyAndCharacterPlaceHolder(new AlphanumericMask(), placeholder);
+ break;
+ case '*':
+ addMaskStrategyAndCharacterPlaceHolder(new WildcardMask(), placeholder);
+ break;
+ case 'H':
+ addMaskStrategyAndCharacterPlaceHolder(new HexMask(), placeholder);
+ break;
+ case '~':
+ addMaskStrategyAndCharacterPlaceHolder(new SignMask(), placeholder);
+ break;
+ case '+':
+ nullablePositions.add(index++);
+ break;
+ default:
+ addMaskStrategyAndCharacterPlaceHolder(null, character);
+ break;
+ }
+ }
+
+ private void addMaskStrategyAndCharacterPlaceHolder(Mask maskStrategy, char characterPlaceholder) {
+ maskTest.add(maskStrategy);
+ string.append(characterPlaceholder);
+ }
+
+ private int getNextPosition(int position) {
+ while (++position < maskTest.size() && maskTest.get(position) == null)
+ ;
+ return position;
+ }
+
+ int getPreviousPosition(int position) {
+ while (--position >= 0 && maskTest.get(position) == null)
+ ;
+ if (position < 0)
+ return getNextPosition(position);
+ return position;
+ }
+
+ private int getLastPosition() {
+ return getText().length() + 1;
+ }
+
+ public void onKeyPress(KeyPressEvent event) {
+ if (!isKeyIgnored(event)) {
+ if (getCursorPos() < maskTest.size()) {
+ validateAndShowUserInput(event);
+ } else {
+ if(event.getCharCode() != emptyChar) {
+ cancelKey();
+ }
+ }
+ }
+ }
+
+ private boolean isKeyIgnored(KeyPressEvent event) {
+ return (
+ event.getCharCode() == emptyChar ||
+ event.isShiftKeyDown() && isAnySelectionTextModifiedKey(event.getCharCode()) ||
+ isIgnoredKey(event.getCharCode()) ||
+ isPasteShorcutPressed(event) ||
+ event.isAnyModifierKeyDown() && !event.isShiftKeyDown()
+ );
+ }
+
+ private boolean isIgnoredKey(char charCode) {
+ return Arrays.binarySearch(ignoredKeys, charCode) >= 0;
+ }
+
+ private boolean isAnySelectionTextModifiedKey(char charCode) {
+ return (charCode == KeyCodes.KEY_END || charCode == KeyCodes.KEY_HOME);
+ }
+
+ private boolean isPasteShorcutPressed(KeyPressEvent event) {
+ return event.isControlKeyDown() && (Character.toLowerCase(event.getCharCode()) == 'v');
+ }
+
+ private void validateAndShowUserInput(KeyPressEvent event) {
+ Mask maskStrategy = maskTest.get(getAvaliableCursorPos(getCursorPos()));
+ if (maskStrategy != null) {
+ if(event.getCharCode() == ' ' && nullablePositions.contains(getCursorPos())) {
+ showUserInput(' ');
+ }
+ else if (maskStrategy.isValid(event.getCharCode())) {
+ char character = maskStrategy.getChar(event.getCharCode());
+ showUserInput(character);
+ }
+ event.preventDefault();
+ }
+ }
+
+ @Override
+ public void onBrowserEvent(Event event) {
+ if(event.getTypeInt() == Event.ONPASTE) {
+ super.setText("");
+ processOriginalPasteEvent(event);
+ Scheduler.get().scheduleDeferred(new Scheduler.ScheduledCommand() {
+ @Override
+ public void execute() {
+ formatPaste();
+ }
+ });
+
+ } else {
+ super.onBrowserEvent(event);
+ }
+ }
+
+ protected void processOriginalPasteEvent(Event evt) {
+ super.onBrowserEvent(evt);
+ }
+
+ protected void formatPaste() {
+ setText(formatString(super.getText()));
+ }
+
+ protected String formatString(final String value) {
+ if(value == null || value.trim().isEmpty()) {
+ return "";
+ }
+ StringBuilder sb = new StringBuilder(proccessedMask);
+ int valueIndex = 0;
+ char[] valueChars = value.toCharArray();
+ for(int i=0; i<maskTest.size(); i++) {
+ Mask maskStrategy = maskTest.get(i);
+ if(maskStrategy != null) {
+ if(valueIndex<valueChars.length) {
+ while(valueIndex<valueChars.length) {
+ char s = valueChars[valueIndex++];
+ if(nullablePositions.contains(i) || maskStrategy.isValid(s)) {
+ if(s == ' ') {
+ sb.setCharAt(i, ' ');
+ } else {
+ sb.setCharAt(i, maskStrategy.getChar(s));
+ }
+ break;
+ }
+ }
+ }
+ }
+ }
+ return sb.toString();
+ }
+
+ private void showUserInput(char character) {
+ if(getText().isEmpty()) {
+ configureUserView();
+ }
+ if(getText().length() < maskTest.size()) {
+
+ }
+ int currentPosition = getAvaliableCursorPos(getCursorPos());
+ string.setCharAt(currentPosition, character);
+ super.setText(string.toString());
+ setCursorPos(getNextPosition(currentPosition));
+ valueChange(false);
+ }
+
+ @Override
+ public void onKeyDown(KeyDownEvent event) {
+ if (event.getNativeKeyCode() == KeyCodes.KEY_BACKSPACE) {
+ deleteTextOnKeyDown(event);
+ } else if (event.getNativeKeyCode() == KeyCodes.KEY_DELETE) {
+ deleteTextOnKeyDown(event);
+ } else if (event.getNativeKeyCode() == KeyCodes.KEY_RIGHT) {
+ setCursorPositionAndPreventDefault(event,getNextPosition(getCursorPos()));
+ } else if (event.getNativeKeyCode() == KeyCodes.KEY_LEFT) {
+ setCursorPositionAndPreventDefault(event, getPreviousPosition(getCursorPos()));
+ } else if (event.getNativeKeyCode() == KeyCodes.KEY_HOME && !event.isShiftKeyDown()) {
+ setCursorPositionAndPreventDefault(event, getPreviousPosition(0));
+ } else if (event.getNativeKeyCode() == KeyCodes.KEY_END && !event.isShiftKeyDown()) {
+ setCursorPositionAndPreventDefault(event, getLastPosition());
+ } else if (event.getNativeKeyCode() == KeyCodes.KEY_ENTER) {
+ if(isFieldIfIncomplete()) {
+ cleanText();
+ }
+ super.onKeyDown(event);
+ } else {
+ super.onKeyDown(event);
+ }
+ }
+
+ private void deleteTextOnKeyDown(KeyDownEvent event) {
+ if(!getSelectedText().isEmpty()) {
+ String selected = getSelectedText();
+ for(int i=(selected.length()-1); i>=0; i--) {
+ int index = getText().indexOf(Character.toString(selected.charAt(i)));
+ deleteCharacter(index);
+ }
+ setCursorPos(0);
+ } else {
+ if(event.getNativeKeyCode() == KeyCodes.KEY_DELETE) {
+ deleteCharacterAndPositionCursor(event, getCursorPos());
+ } else {
+ deleteCharacterAndPositionCursor(event, getPreviousPosition(getCursorPos()));
+ }
+ }
+ }
+
+ private void deleteCharacterAndPositionCursor(KeyDownEvent event, int position) {
+ deleteCharacter(position);
+ setCursorPositionAndPreventDefault(event, position);
+ }
+
+ private void setCursorPositionAndPreventDefault(KeyDownEvent event,int position) {
+ setCursorPos(position);
+ event.preventDefault();
+ }
+
+ private void deleteCharacter(int position) {
+ Mask maskStrategy = maskTest.get(position);
+ if (maskStrategy != null) {
+ string.setCharAt(position, placeholder);
+ super.setText(string.toString());
+ valueChange(false);
+ }
+ }
+
+ @Override
+ public void onFocus(FocusEvent event) {
+ if (getText().isEmpty()) {
+ setMask(mask);
+ Scheduler.get().scheduleDeferred(new Scheduler.ScheduledCommand() {
+ @Override
+ public void execute() {
+ setCursorPos(getAvaliableCursorPos(0));
+ }
+ });
+ }
+ }
+
+ public int getAvaliableCursorPos(int desiredPosition) {
+ int i = desiredPosition;
+ for(;i<maskTest.size(); i++) {
+ if(maskTest.get(i) != null) {
+ break;
+ }
+ }
+ return i;
+ }
+
+ public int getNextAvaliableCursorPos(int desiredPosition) {
+ int i = desiredPosition;
+ for(;i<maskTest.size(); i++) {
+ if(maskTest.get(i) != null && string.charAt(i) == placeholder) {
+ break;
+ }
+ }
+ return i;
+ }
+
+ @Override
+ protected boolean updateCursorPosition() {
+ if(!isImmediate()) {
+ return super.updateCursorPosition();
+ }
+ return false;
+ }
+
+ @Override
+ public void setImmediate(boolean immediate) {
+ super.setImmediate(immediate);
+ this.immediate = true;
+ }
+
+ private boolean isImmediate() {
+ return immediate;
+ }
+
+ @Override
+ public void valueChange(boolean blurred) {
+ if(!isFieldIfIncomplete()) {
+ super.valueChange(blurred);
+ }
+ }
+
+ @Override
+ public void onBlur(BlurEvent event) {
+ if(isFieldIfIncomplete()) {
+ cleanText();
+ } else {
+ super.onBlur(event);
+ }
+ }
+
+ private void cleanText() {
+ super.setText("");
+ super.valueChange(true);
+ }
+
+ protected boolean isFieldIfIncomplete() {
+ if(string == null || maskTest == null) {
+ return true;
+ }
+ for (int index = 0; index < string.length(); index++) {
+ char character = string.charAt(index);
+ if (maskTest.get(index) != null && character == placeholder) {
+ return true;
+ }
+ }
+ return false;
+ }
+
+ protected String unmask() {
+ return unmask(super.getText());
+ }
+
+ protected String unmask(final String value) {
+ char[] masks = Constants.MASK_REPRESENTATIONS;
+ Arrays.sort(masks);
+ if(value == null || value.trim().isEmpty()) {
+ return null;
+ }
+ StringBuilder sb = new StringBuilder(value);
+ String m = mask.replaceAll("\\+", "");
+ int removedChars = 0;
+ for(int i = 0; i<m.length(); i++) {
+ char s = m.charAt(i);
+ if(Arrays.binarySearch(masks, s) < 0) {
+ if(i < value.length() && sb.charAt(i-removedChars) == s) {
+ sb.deleteCharAt(i-removedChars);
+ removedChars++;
+ }
+ }
+ }
+ return sb.toString().replaceAll(String.valueOf(placeholder), "");
+ }
+
+}
\ No newline at end of file
diff --git a/org.eclipse.osbp.fork.vaadin.addon.maskedtextfield/src/org/vaadin/addons/maskedtextfield/client/NumericFieldConnector.java b/org.eclipse.osbp.fork.vaadin.addon.maskedtextfield/src/org/vaadin/addons/maskedtextfield/client/NumericFieldConnector.java
new file mode 100644
index 0000000..b606f44
--- /dev/null
+++ b/org.eclipse.osbp.fork.vaadin.addon.maskedtextfield/src/org/vaadin/addons/maskedtextfield/client/NumericFieldConnector.java
@@ -0,0 +1,24 @@
+package org.vaadin.addons.maskedtextfield.client;
+
+import org.vaadin.addons.maskedtextfield.NumericField;
+
+import com.google.gwt.core.client.GWT;
+import com.vaadin.client.ui.textfield.TextFieldConnector;
+import com.vaadin.shared.ui.Connect;
+
+@Connect(NumericField.class)
+public class NumericFieldConnector extends TextFieldConnector {
+
+ private static final long serialVersionUID = 1L;
+
+ @Override
+ protected NumericFieldWidget createWidget() {
+ return GWT.create(NumericFieldWidget.class);
+ }
+
+ @Override
+ public NumericFieldWidget getWidget() {
+ return (NumericFieldWidget) super.getWidget();
+ }
+
+}
diff --git a/org.eclipse.osbp.fork.vaadin.addon.maskedtextfield/src/org/vaadin/addons/maskedtextfield/client/NumericFieldWidget.java b/org.eclipse.osbp.fork.vaadin.addon.maskedtextfield/src/org/vaadin/addons/maskedtextfield/client/NumericFieldWidget.java
new file mode 100644
index 0000000..c2235b1
--- /dev/null
+++ b/org.eclipse.osbp.fork.vaadin.addon.maskedtextfield/src/org/vaadin/addons/maskedtextfield/client/NumericFieldWidget.java
@@ -0,0 +1,72 @@
+package org.vaadin.addons.maskedtextfield.client;
+
+import java.util.Arrays;
+import java.util.Collection;
+import java.util.HashSet;
+
+import org.vaadin.addons.maskedtextfield.shared.Constants;
+
+import com.google.gwt.event.dom.client.KeyCodes;
+import com.google.gwt.event.dom.client.KeyPressEvent;
+import com.google.gwt.event.dom.client.KeyPressHandler;
+import com.vaadin.client.ui.VTextField;
+
+public class NumericFieldWidget extends VTextField {
+
+ private static Collection<Character> acceptedCharSet = new HashSet<Character>(Arrays.asList(
+ new Character[] {
+ (char) KeyCodes.KEY_BACKSPACE,
+ (char) KeyCodes.KEY_TAB,
+ (char) KeyCodes.KEY_DELETE,
+ (char) KeyCodes.KEY_END,
+ (char) KeyCodes.KEY_ENTER,
+ (char) KeyCodes.KEY_ESCAPE,
+ (char) KeyCodes.KEY_HOME,
+ (char) KeyCodes.KEY_LEFT,
+ (char) KeyCodes.KEY_PAGEDOWN,
+ (char) KeyCodes.KEY_PAGEUP,
+ (char) KeyCodes.KEY_RIGHT
+ }
+ ));
+
+ private boolean isAcceptableKey(char charCode) {
+ return Character.isDigit(charCode)
+ || acceptedCharSet.contains(charCode);
+ }
+
+ public NumericFieldWidget() {
+ super();
+ addKeyPressHandler(new KeyPressHandler() {
+ @Override
+ public void onKeyPress(KeyPressEvent e) {
+ char code = (e.getCharCode() != Constants.EMPTY_CHAR) ? e.getCharCode() : (char) e.getNativeEvent().getKeyCode();
+ if(!isAcceptableKey(code)) {
+ e.preventDefault();
+ }
+ }
+ });
+ }
+
+ @SuppressWarnings("unused")
+ private String getValueToOperate(String value) {
+ return value.length() > 1 ? value.substring(value.length() - 2) : value
+ .substring(value.length() - 1);
+ }
+
+ @SuppressWarnings("unused")
+ private String getLiteralValue(String value) {
+ return value.length() > 1 ? value.substring(0, value.length() - 2)
+ : value.substring(0, value.length() - 1);
+ }
+
+ @Override
+ public void setValue(String value) {
+ try {
+ Long v = Long.parseLong(value);
+ super.setValue(v.toString());
+ } catch (Throwable e) {
+ super.setValue("0");
+ }
+ }
+
+}
diff --git a/org.eclipse.osbp.fork.vaadin.addon.maskedtextfield/src/org/vaadin/addons/maskedtextfield/client/PrefixedMaskedTextFieldConnector.java b/org.eclipse.osbp.fork.vaadin.addon.maskedtextfield/src/org/vaadin/addons/maskedtextfield/client/PrefixedMaskedTextFieldConnector.java
new file mode 100644
index 0000000..641bf7e
--- /dev/null
+++ b/org.eclipse.osbp.fork.vaadin.addon.maskedtextfield/src/org/vaadin/addons/maskedtextfield/client/PrefixedMaskedTextFieldConnector.java
@@ -0,0 +1,36 @@
+package org.vaadin.addons.maskedtextfield.client;
+
+import org.vaadin.addons.maskedtextfield.PrefixedMaskedTextField;
+
+import com.google.gwt.core.client.GWT;
+import com.vaadin.client.communication.StateChangeEvent;
+import com.vaadin.shared.ui.Connect;
+
+@Connect(PrefixedMaskedTextField.class)
+public class PrefixedMaskedTextFieldConnector extends MaskedTextFieldConnector {
+
+ private static final long serialVersionUID = 1L;
+
+ @Override
+ protected PrefixedMaskedTextFieldWidget createWidget() {
+ return GWT.create(PrefixedMaskedTextFieldWidget.class);
+ }
+
+ @Override
+ public PrefixedMaskedTextFieldWidget getWidget() {
+ return (PrefixedMaskedTextFieldWidget) super.getWidget();
+ }
+
+ @Override
+ public PrefixedMaskedTextFieldState getState() {
+ return (PrefixedMaskedTextFieldState) super.getState();
+ }
+
+ @Override
+ public void onStateChanged(StateChangeEvent stateChangeEvent) {
+ super.onStateChanged(stateChangeEvent);
+ getWidget().setMasks(getState().masksByPrefix);
+ getWidget().setDefaultMask(getState().defaultMask);
+ }
+
+}
diff --git a/org.eclipse.osbp.fork.vaadin.addon.maskedtextfield/src/org/vaadin/addons/maskedtextfield/client/PrefixedMaskedTextFieldState.java b/org.eclipse.osbp.fork.vaadin.addon.maskedtextfield/src/org/vaadin/addons/maskedtextfield/client/PrefixedMaskedTextFieldState.java
new file mode 100644
index 0000000..2e543ca
--- /dev/null
+++ b/org.eclipse.osbp.fork.vaadin.addon.maskedtextfield/src/org/vaadin/addons/maskedtextfield/client/PrefixedMaskedTextFieldState.java
@@ -0,0 +1,14 @@
+package org.vaadin.addons.maskedtextfield.client;
+
+import java.util.HashMap;
+import java.util.Map;
+
+public class PrefixedMaskedTextFieldState extends MaskedTextFieldState {
+
+ private static final long serialVersionUID = 1L;
+
+ public String defaultMask;
+
+ public Map<String, String> masksByPrefix = new HashMap<String, String>();
+
+}
diff --git a/org.eclipse.osbp.fork.vaadin.addon.maskedtextfield/src/org/vaadin/addons/maskedtextfield/client/PrefixedMaskedTextFieldWidget.java b/org.eclipse.osbp.fork.vaadin.addon.maskedtextfield/src/org/vaadin/addons/maskedtextfield/client/PrefixedMaskedTextFieldWidget.java
new file mode 100644
index 0000000..0524266
--- /dev/null
+++ b/org.eclipse.osbp.fork.vaadin.addon.maskedtextfield/src/org/vaadin/addons/maskedtextfield/client/PrefixedMaskedTextFieldWidget.java
@@ -0,0 +1,131 @@
+package org.vaadin.addons.maskedtextfield.client;
+
+import java.util.Map;
+
+import com.google.gwt.core.client.Scheduler;
+import com.google.gwt.event.dom.client.KeyPressEvent;
+import com.google.gwt.user.client.Event;
+
+public class PrefixedMaskedTextFieldWidget extends MaskedTextFieldWidget {
+
+ private String defaultMask;
+ private Map<String, String> masks;
+
+ public PrefixedMaskedTextFieldWidget() {
+ super();
+ }
+
+ public void setMasks(Map<String, String> masksByPrefix) {
+ this.masks = masksByPrefix;
+ }
+
+ public void setDefaultMask(String mask) {
+ defaultMask = mask;
+ }
+
+ @Override
+ public void setMask(String mask) {
+ if(getText() == null || getText().isEmpty() || this.mask == null) {
+ super.setMask(mask);
+ }
+ }
+
+ /*
+ private boolean isMaskCompatibleWithValue(String mask) {
+ if(getText() == null || getText().isEmpty()) {
+
+ }
+ return true;
+ }
+ */
+
+ @Override
+ public void onKeyPress(KeyPressEvent event) {
+ super.onKeyPress(event);
+ if(!masks.isEmpty()) {
+ String v = unmask();
+ if(v != null && !v.isEmpty()) {
+ checkForPrefix(v);
+ }
+ }
+ }
+
+ protected void checkForPrefix(String v) {
+ String maskForPrefix = getMaskForPrefix(v);
+ if(updateMaskForPrefix(maskForPrefix)) {
+ updateValueOnNewMask(v);
+ }
+ }
+
+ private String getMaskForPrefix(String value) {
+ value = formatString(unmask(value));
+ if(masks != null) {
+ for(String prefix : masks.keySet()) {
+ if(value.startsWith(prefix)) {
+ return masks.get(prefix);
+ }
+ }
+ }
+ return null;
+ }
+
+ @Override
+ public void onBrowserEvent(Event event) {
+ if(event.getTypeInt() == Event.ONPASTE) {
+ super.setText("");
+ processOriginalPasteEvent(event);
+ if(!masks.isEmpty()) {
+ Scheduler.get().scheduleDeferred(new Scheduler.ScheduledCommand() {
+ @Override
+ public void execute() {
+ String v = unmask();
+ if(v != null && !v.isEmpty()) {
+ String maskForPrefix = getMaskForPrefix(v);
+ updateMaskForPrefix(maskForPrefix);
+ }
+ formatPaste();
+ }
+ });
+
+ }
+ } else {
+ processOriginalPasteEvent(event);
+ }
+ }
+
+ @Override
+ public void setText(String text) {
+ if(text != null && !text.isEmpty()) {
+ updateMaskForPrefix(getMaskForPrefix(formatString(unmask(text))));
+ }
+ super.setText(unmask(text));
+ }
+
+ private boolean updateMaskForPrefix(String maskForPrefix) {
+ if(mask != null) {
+ if(maskForPrefix != null) {
+ if(!mask.equals(maskForPrefix)) {
+ super.setMask(maskForPrefix, false);
+ return true;
+ }
+ } else {
+ if(!mask.equals(defaultMask)) {
+ super.setMask(defaultMask, false);
+ return true;
+ }
+ }
+ }
+ return false;
+ }
+
+ /**
+ * Updates the new value on field, without check if it is complete.
+ * @param v
+ */
+ protected void updateValueOnNewMask(String v) {
+ String formated = formatString(v);
+ setText(formated, false);
+ setCursorPos(getNextAvaliableCursorPos(0));
+ }
+
+}
diff --git a/org.eclipse.osbp.fork.vaadin.addon.maskedtextfield/src/org/vaadin/addons/maskedtextfield/client/masks/AbstractMask.java b/org.eclipse.osbp.fork.vaadin.addon.maskedtextfield/src/org/vaadin/addons/maskedtextfield/client/masks/AbstractMask.java
new file mode 100644
index 0000000..7cbb678
--- /dev/null
+++ b/org.eclipse.osbp.fork.vaadin.addon.maskedtextfield/src/org/vaadin/addons/maskedtextfield/client/masks/AbstractMask.java
@@ -0,0 +1,9 @@
+package org.vaadin.addons.maskedtextfield.client.masks;
+
+public abstract class AbstractMask implements Mask {
+
+ public char getChar(char character) {
+ return character;
+ }
+
+}
diff --git a/org.eclipse.osbp.fork.vaadin.addon.maskedtextfield/src/org/vaadin/addons/maskedtextfield/client/masks/AlphanumericMask.java b/org.eclipse.osbp.fork.vaadin.addon.maskedtextfield/src/org/vaadin/addons/maskedtextfield/client/masks/AlphanumericMask.java
new file mode 100644
index 0000000..a844422
--- /dev/null
+++ b/org.eclipse.osbp.fork.vaadin.addon.maskedtextfield/src/org/vaadin/addons/maskedtextfield/client/masks/AlphanumericMask.java
@@ -0,0 +1,8 @@
+package org.vaadin.addons.maskedtextfield.client.masks;
+
+public class AlphanumericMask extends AbstractMask {
+
+ public boolean isValid(char character) {
+ return Character.isLetter(character) || Character.isDigit(character);
+ }
+}
\ No newline at end of file
diff --git a/org.eclipse.osbp.fork.vaadin.addon.maskedtextfield/src/org/vaadin/addons/maskedtextfield/client/masks/HexMask.java b/org.eclipse.osbp.fork.vaadin.addon.maskedtextfield/src/org/vaadin/addons/maskedtextfield/client/masks/HexMask.java
new file mode 100644
index 0000000..39f8ec2
--- /dev/null
+++ b/org.eclipse.osbp.fork.vaadin.addon.maskedtextfield/src/org/vaadin/addons/maskedtextfield/client/masks/HexMask.java
@@ -0,0 +1,21 @@
+package org.vaadin.addons.maskedtextfield.client.masks;
+
+/**
+ * Represents a hex character, 0-9a-fA-F. a-f is mapped to A-F
+ */
+public class HexMask implements Mask {
+ public boolean isValid(char character) {
+ return ((character == '0' || character == '1' || character == '2' || character == '3' || character == '4'
+ || character == '5' || character == '6' || character == '7' || character == '8' || character == '9'
+ || character == 'a' || character == 'A' || character == 'b' || character == 'B' || character == 'c'
+ || character == 'C' || character == 'd' || character == 'D' || character == 'e' || character == 'E'
+ || character == 'f' || character == 'F'));
+ }
+
+ public char getChar(char character) {
+ if (Character.isDigit(character)) {
+ return character;
+ }
+ return Character.toUpperCase(character);
+ }
+}
\ No newline at end of file
diff --git a/org.eclipse.osbp.fork.vaadin.addon.maskedtextfield/src/org/vaadin/addons/maskedtextfield/client/masks/LetterMask.java b/org.eclipse.osbp.fork.vaadin.addon.maskedtextfield/src/org/vaadin/addons/maskedtextfield/client/masks/LetterMask.java
new file mode 100644
index 0000000..1342f24
--- /dev/null
+++ b/org.eclipse.osbp.fork.vaadin.addon.maskedtextfield/src/org/vaadin/addons/maskedtextfield/client/masks/LetterMask.java
@@ -0,0 +1,9 @@
+package org.vaadin.addons.maskedtextfield.client.masks;
+
+public class LetterMask extends AbstractMask {
+
+ public boolean isValid(char character) {
+ return Character.isLetter(character);
+ }
+
+}
diff --git a/org.eclipse.osbp.fork.vaadin.addon.maskedtextfield/src/org/vaadin/addons/maskedtextfield/client/masks/LowerCaseMask.java b/org.eclipse.osbp.fork.vaadin.addon.maskedtextfield/src/org/vaadin/addons/maskedtextfield/client/masks/LowerCaseMask.java
new file mode 100644
index 0000000..af31f01
--- /dev/null
+++ b/org.eclipse.osbp.fork.vaadin.addon.maskedtextfield/src/org/vaadin/addons/maskedtextfield/client/masks/LowerCaseMask.java
@@ -0,0 +1,12 @@
+package org.vaadin.addons.maskedtextfield.client.masks;
+
+public class LowerCaseMask implements Mask {
+
+ public boolean isValid(char character) {
+ return Character.isLetter(getChar(character));
+ }
+
+ public char getChar(char character) {
+ return Character.toLowerCase(character);
+ }
+}
\ No newline at end of file
diff --git a/org.eclipse.osbp.fork.vaadin.addon.maskedtextfield/src/org/vaadin/addons/maskedtextfield/client/masks/Mask.java b/org.eclipse.osbp.fork.vaadin.addon.maskedtextfield/src/org/vaadin/addons/maskedtextfield/client/masks/Mask.java
new file mode 100644
index 0000000..d36c4c4
--- /dev/null
+++ b/org.eclipse.osbp.fork.vaadin.addon.maskedtextfield/src/org/vaadin/addons/maskedtextfield/client/masks/Mask.java
@@ -0,0 +1,6 @@
+package org.vaadin.addons.maskedtextfield.client.masks;
+
+public interface Mask {
+ boolean isValid(char character);
+ char getChar(char character);
+}
diff --git a/org.eclipse.osbp.fork.vaadin.addon.maskedtextfield/src/org/vaadin/addons/maskedtextfield/client/masks/NumericMask.java b/org.eclipse.osbp.fork.vaadin.addon.maskedtextfield/src/org/vaadin/addons/maskedtextfield/client/masks/NumericMask.java
new file mode 100644
index 0000000..8bc748e
--- /dev/null
+++ b/org.eclipse.osbp.fork.vaadin.addon.maskedtextfield/src/org/vaadin/addons/maskedtextfield/client/masks/NumericMask.java
@@ -0,0 +1,9 @@
+package org.vaadin.addons.maskedtextfield.client.masks;
+
+public class NumericMask extends AbstractMask {
+
+ public boolean isValid(char character) {
+ return Character.isDigit(character);
+ }
+
+}
diff --git a/org.eclipse.osbp.fork.vaadin.addon.maskedtextfield/src/org/vaadin/addons/maskedtextfield/client/masks/SignMask.java b/org.eclipse.osbp.fork.vaadin.addon.maskedtextfield/src/org/vaadin/addons/maskedtextfield/client/masks/SignMask.java
new file mode 100644
index 0000000..a5cfd0a
--- /dev/null
+++ b/org.eclipse.osbp.fork.vaadin.addon.maskedtextfield/src/org/vaadin/addons/maskedtextfield/client/masks/SignMask.java
@@ -0,0 +1,8 @@
+package org.vaadin.addons.maskedtextfield.client.masks;
+
+public class SignMask extends AbstractMask {
+
+ public boolean isValid(char character) {
+ return character == '-' || character == '+';
+ }
+}
\ No newline at end of file
diff --git a/org.eclipse.osbp.fork.vaadin.addon.maskedtextfield/src/org/vaadin/addons/maskedtextfield/client/masks/UpperCaseMask.java b/org.eclipse.osbp.fork.vaadin.addon.maskedtextfield/src/org/vaadin/addons/maskedtextfield/client/masks/UpperCaseMask.java
new file mode 100644
index 0000000..9036f7d
--- /dev/null
+++ b/org.eclipse.osbp.fork.vaadin.addon.maskedtextfield/src/org/vaadin/addons/maskedtextfield/client/masks/UpperCaseMask.java
@@ -0,0 +1,12 @@
+package org.vaadin.addons.maskedtextfield.client.masks;
+
+public class UpperCaseMask implements Mask {
+
+ public boolean isValid(char character) {
+ return Character.isLetter(getChar(character));
+ }
+
+ public char getChar(char character) {
+ return Character.toUpperCase(character);
+ }
+}
diff --git a/org.eclipse.osbp.fork.vaadin.addon.maskedtextfield/src/org/vaadin/addons/maskedtextfield/client/masks/WildcardMask.java b/org.eclipse.osbp.fork.vaadin.addon.maskedtextfield/src/org/vaadin/addons/maskedtextfield/client/masks/WildcardMask.java
new file mode 100644
index 0000000..ff70dbf
--- /dev/null
+++ b/org.eclipse.osbp.fork.vaadin.addon.maskedtextfield/src/org/vaadin/addons/maskedtextfield/client/masks/WildcardMask.java
@@ -0,0 +1,8 @@
+package org.vaadin.addons.maskedtextfield.client.masks;
+
+public class WildcardMask extends AbstractMask {
+
+ public boolean isValid(char character) {
+ return true;
+ }
+}
\ No newline at end of file
diff --git a/org.eclipse.osbp.fork.vaadin.addon.maskedtextfield/src/org/vaadin/addons/maskedtextfield/server/Utils.java b/org.eclipse.osbp.fork.vaadin.addon.maskedtextfield/src/org/vaadin/addons/maskedtextfield/server/Utils.java
new file mode 100644
index 0000000..e2f2942
--- /dev/null
+++ b/org.eclipse.osbp.fork.vaadin.addon.maskedtextfield/src/org/vaadin/addons/maskedtextfield/server/Utils.java
@@ -0,0 +1,36 @@
+package org.vaadin.addons.maskedtextfield.server;
+
+import java.math.BigDecimal;
+import java.math.BigInteger;
+
+import com.vaadin.data.Property;
+
+public class Utils {
+
+ /**
+ * An utility method to convert some number to specific datasource final number implementation
+ * @param number
+ * @param property
+ * @return
+ */
+ public static Number convertToDataSource(final Number number, final Property<?> property) {
+ Class<?> propertyClass = property.getType();
+ if(Integer.class.isAssignableFrom(propertyClass) || int.class.isAssignableFrom(propertyClass)) {
+ return number.intValue();
+ } else if(Long.class.isAssignableFrom(propertyClass) || long.class.isAssignableFrom(propertyClass)) {
+ return number.longValue();
+ } else if(Double.class.isAssignableFrom(propertyClass) || double.class.isAssignableFrom(propertyClass)) {
+ return number.doubleValue();
+ } else if(Float.class.isAssignableFrom(propertyClass) || float.class.isAssignableFrom(propertyClass)) {
+ return number.floatValue();
+ } else if(BigDecimal.class.isAssignableFrom(propertyClass)) {
+ return new BigDecimal(number.doubleValue());
+ } else if (BigInteger.class.isAssignableFrom(propertyClass)) {
+ return new BigInteger(String.valueOf(number.longValue()));
+ } else if(Short.class.isAssignableFrom(propertyClass) || short.class.isAssignableFrom(propertyClass)) {
+ return number.shortValue();
+ }
+ return number;
+ }
+
+}
diff --git a/org.eclipse.osbp.fork.vaadin.addon.maskedtextfield/src/org/vaadin/addons/maskedtextfield/shared/Constants.java b/org.eclipse.osbp.fork.vaadin.addon.maskedtextfield/src/org/vaadin/addons/maskedtextfield/shared/Constants.java
new file mode 100644
index 0000000..61c3119
--- /dev/null
+++ b/org.eclipse.osbp.fork.vaadin.addon.maskedtextfield/src/org/vaadin/addons/maskedtextfield/shared/Constants.java
@@ -0,0 +1,36 @@
+package org.vaadin.addons.maskedtextfield.shared;
+
+import java.util.Arrays;
+
+/**
+ * Some constants that can be used for any widget
+ * @author eduardo
+ *
+ */
+public class Constants {
+
+ /**
+ * For a fixed GWT i18n formatter
+ */
+ public static final char FIXED_LOCALE_DECIMAL_SEPARATOR = '.';
+
+ /**
+ * For a fixed GWT i18n formatter
+ */
+ public static final char FIXED_LOCALE_GROUPING_SEPARATOR = ',';
+
+ /**
+ * Empty char representation
+ */
+ public static final char EMPTY_CHAR ='\0';
+
+ /**
+ * Supported masks representations
+ */
+ public static final char[] MASK_REPRESENTATIONS = {'#', 'U', 'L', '?', 'A', '*', 'H', '~'};
+
+ static {
+ Arrays.sort(MASK_REPRESENTATIONS);
+ }
+
+}
diff --git a/pom.xml b/pom.xml
new file mode 100644
index 0000000..53b076b
--- /dev/null
+++ b/pom.xml
@@ -0,0 +1,53 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- /* -->
+<!-- * Copyright (c) 2011, 2016 - Loetz GmbH&Co.KG (69115 Heidelberg, Germany) -->
+<!-- * -->
+<!-- * This program and the accompanying materials are made available under the -->
+<!-- * terms of the Eclipse Public License 2.0 which is available at -->
+<!-- * http://www.eclipse.org/legal/epl-2.0. -->
+<!-- * -->
+<!-- * SPDX-License-Identifier: EPL-2.0 -->
+<!-- * -->
+<!-- * Contributors: -->
+<!-- * Loetz GmbH&Co.KG - initial API and implementation -->
+<!-- */ -->
+
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+ <modelVersion>4.0.0</modelVersion>
+
+ <parent>
+ <groupId>org.eclipse.osbp.releng.maven</groupId>
+ <artifactId>org.eclipse.osbp.releng.maven.parent.mbp2</artifactId>
+ <version>0.9.0-SNAPSHOT</version>
+ <relativePath/>
+ </parent>
+
+ <groupId>org.eclipse.osbp.fork.vaadin.addon.maskedtextfield</groupId>
+ <artifactId>org.eclipse.osbp.fork.vaadin.addon.maskedtextfield.aggregator</artifactId>
+ <packaging>pom</packaging>
+
+ <url>${osbp.site.repository.url}</url>
+ <scm>
+ <url>${osbp.scm.url}</url>
+ <connection>${osbp.scm.connection}</connection>
+ <developerConnection>${osbp.scm.connection.dev}</developerConnection>
+ <tag>HEAD</tag>
+ </scm>
+ <distributionManagement>
+ <site>
+ <id>gh-pages</id>
+ <name>OSBP GitHub Pages</name>
+ <url>${distribution.site.url}</url>
+ </site>
+ </distributionManagement>
+
+ <properties>
+
+ <osbp.gitrepo.name>${project.groupId}</osbp.gitrepo.name>
+ </properties>
+
+ <modules>
+ <module>org.eclipse.osbp.fork.vaadin.addon.maskedtextfield</module>
+ </modules>
+
+</project>