=UTF-8
diff --git a/screwdriver-3.5.6/.settings/org.eclipse.jdt.core.prefs b/screwdriver-3.5.6/.settings/org.eclipse.jdt.core.prefs
new file mode 100644
index 0000000..71ac301
--- /dev/null
+++ b/screwdriver-3.5.6/.settings/org.eclipse.jdt.core.prefs
@@ -0,0 +1,6 @@
+eclipse.preferences.version=1
+org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.5
+org.eclipse.jdt.core.compiler.compliance=1.5
+org.eclipse.jdt.core.compiler.problem.forbiddenReference=warning
+org.eclipse.jdt.core.compiler.release=disabled
+org.eclipse.jdt.core.compiler.source=1.5
diff --git a/screwdriver-3.5.6/.settings/org.eclipse.m2e.core.prefs b/screwdriver-3.5.6/.settings/org.eclipse.m2e.core.prefs
new file mode 100644
index 0000000..f897a7f
--- /dev/null
+++ b/screwdriver-3.5.6/.settings/org.eclipse.m2e.core.prefs
@@ -0,0 +1,4 @@
+activeProfiles=
+eclipse.preferences.version=1
+resolveWorkspaceProjects=true
+version=1
diff --git a/screwdriver-3.5.6/Eclipse Public License - Version 1.0.html b/screwdriver-3.5.6/Eclipse Public License - Version 1.0.html
new file mode 100644
index 0000000..e484bef
--- /dev/null
+++ b/screwdriver-3.5.6/Eclipse Public License - Version 1.0.html
@@ -0,0 +1,260 @@
+
+
+
+
+
+Eclipse Public License - Version 1.0
+
+
+
+
+
+
+Eclipse Public License - v 1.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
+code and documentation 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 additions to the
+Program which: (i) are separate modules of software distributed in
+conjunction with the Program under their own license agreement, and (ii)
+are not derivative works of the Program.
+
+"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, including all Contributors.
+
+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, in
+source code and object code form.
+
+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 and object code 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.
+
+3. REQUIREMENTS
+
+A Contributor may choose to distribute the Program in object code
+form under its own license agreement, provided that:
+
+a) it complies with the terms and conditions of this
+Agreement; and
+
+b) its license agreement:
+
+i) effectively disclaims on behalf of all 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 Contributors
+all liability for damages, including direct, indirect, special,
+incidental and consequential damages, such as lost profits;
+
+iii) states that any provisions which differ from this
+Agreement are offered by that Contributor alone and not by any other
+party; and
+
+iv) states that source code for the Program is available
+from such Contributor, and informs licensees how to obtain it in a
+reasonable manner on or through a medium customarily used for software
+exchange.
+
+When the Program is made available in source code form:
+
+a) it must be made available under this Agreement; and
+
+b) a copy of this Agreement must be included with each
+copy of the Program.
+
+Contributors may not remove or alter any copyright notices contained
+within the Program.
+
+Each Contributor must identify itself as the originator of its
+Contribution, if any, in a manner that reasonably allows subsequent
+Recipients to identify the originator of the Contribution.
+
+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, 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, 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.
+
+This Agreement is governed by the laws of the State of New York and
+the intellectual property laws of the United States of America. No party
+to this Agreement will bring a legal action under this Agreement more
+than one year after the cause of action arose. Each party waives its
+rights to a jury trial in any resulting litigation.
+
+
+
+
\ No newline at end of file
diff --git a/screwdriver-3.5.6/Leoncavallo.xml b/screwdriver-3.5.6/Leoncavallo.xml
new file mode 100644
index 0000000..15653fc
--- /dev/null
+++ b/screwdriver-3.5.6/Leoncavallo.xml
@@ -0,0 +1,313 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/screwdriver-3.5.6/MarkupsList-3.3.1.html b/screwdriver-3.5.6/MarkupsList-3.3.1.html
new file mode 100644
index 0000000..700b92b
--- /dev/null
+++ b/screwdriver-3.5.6/MarkupsList-3.3.1.html
@@ -0,0 +1,6 @@
+
+
+
+
+
+
\ No newline at end of file
diff --git a/screwdriver-3.5.6/ReferenceManual-3.3.1.html b/screwdriver-3.5.6/ReferenceManual-3.3.1.html
new file mode 100644
index 0000000..0ad81d3
--- /dev/null
+++ b/screwdriver-3.5.6/ReferenceManual-3.3.1.html
@@ -0,0 +1,6 @@
+
+
+
+
+
+
\ No newline at end of file
diff --git a/screwdriver-3.5.6/TermsOfUse.txt b/screwdriver-3.5.6/TermsOfUse.txt
new file mode 100644
index 0000000..b7348af
--- /dev/null
+++ b/screwdriver-3.5.6/TermsOfUse.txt
@@ -0,0 +1,53 @@
+Definitions
+Software: Any software that is made available to you
+by plug-in "Drill", by the application "Screwdriver"
+and all software associated to it. Your use of the
+Software is governed by the terms of the end user
+license agreement EPL which accompanies or is
+included with the Software ("License Agreement").
+
+DISCLAIMER
+THIS SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY
+OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT
+LIMITED TO ANY WARRANTIES OF MERCHANTABILITY, FITNESS
+FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT OF
+COPYRIGHT, PATENT, TRADEMARK, OR OTHER RIGHT. IN NO
+EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE FOR ANY
+CLAIM, DAMAGES OR OTHER LIABILITY, INCLUDING ANY
+GENERAL, SPECIAL, INDIRECT, INCIDENTAL, OR
+CONSEQUENTIAL DAMAGES, WHETHER IN AN ACTION OF
+CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF THE
+USE OR INABILITY TO USE THE SOFTWARE OR FROM OTHER
+DEALINGS IN THIS SOFTWARE. BEING A CODE GENERATOR,
+THIS DECLARATION REFERS NOT ONLY TO THE SOFTWARE
+PROVIDED, BUT ALSO TO ALL THE APPLICATIONS THAT WILL
+BE GENERATED BY IT.
+THE FINAL USER OF "SCREWDRIVER" OWNS THE INTELLECTUAL
+PROPERTIES OF THE SOFTWARE HE HAS GENERATED.
+
+Definizioni
+Software: qualsiasi software reso disponibile dal
+plug-in "Drill", dall'applicazione "Screwdriver" e da
+tutto il software ad esso associato. L'utilizzo del
+software è regolato dai termini del contratto di
+licenza per l'utente finale LGPL che accompagna o è
+incluso nel software ("Contratto di licenza").
+
+DECLINAZIONE DI RESPONSABILITA'
+QUESTO SOFTWARE È FORNITO "COSÌ COM'È", SENZA ALCUN
+TIPO DI GARANZIA, ESPRESSA O IMPLICITA, SENZA ALCUNA
+GARANZIA DI COMMERCIABILITÀ, IDONEITÀ A UN
+PARTICOLARE SCOPO E SENZA DIRITTO DI COPYRIGHT,
+BREVETTO, MARCHIO O ALTRO DIRITTO. IN NESSUN CASO IL
+TITOLARE DEL COPYRIGHT SARÀ RESPONSABILE DI QUALSIASI
+RECLAMO, DANNO O ALTRA RESPONSABILITÀ, COMPRESO
+QUALSIASI DANNO GENERALE, SPECIALE, INDIRETTO,
+INCIDENTALE O CONSEQUENZIALE, SIA NELL'AMBITO DI UN
+CONTRATTO, SIA DI UNA CONTROVERSIA O ALTRO, DERIVANTE
+DALL'UTILIZZO O DALL'IMPOSSIBILITÀ DI UTILIZZARE
+QUESTO SOFTWARE. TRATTANDOSI DI UN GENERATORE DI
+CODICE, QUESTA DICHIARAZIONE SI RIFERISCE NON SOLO AL
+SOFTWARE FORNITO, MA ANCHE A TUTTE LE APPLICAZIONI
+CHE SARANNO DA ESSO GENERATE.
+L'UTENTE FINALE DI "SCREWDRIVER" DETIENE LA PROPRIETÀ
+INTELLETTUALE DEL SOFTWARE CHE HA GENERATO.
\ No newline at end of file
diff --git a/screwdriver-3.5.6/UserGuide-3.5.1.html b/screwdriver-3.5.6/UserGuide-3.5.1.html
new file mode 100644
index 0000000..bb4130d
--- /dev/null
+++ b/screwdriver-3.5.6/UserGuide-3.5.1.html
@@ -0,0 +1,6 @@
+
+
+
+
+
+
\ No newline at end of file
diff --git a/screwdriver-3.5.6/Versions_History.html b/screwdriver-3.5.6/Versions_History.html
new file mode 100644
index 0000000..91f082a
--- /dev/null
+++ b/screwdriver-3.5.6/Versions_History.html
@@ -0,0 +1,6 @@
+
+
+
+
+
+
\ No newline at end of file
diff --git a/screwdriver-3.5.6/box/include/primary_JBoss EAP 5.2.eli b/screwdriver-3.5.6/box/include/primary_JBoss EAP 5.2.eli
new file mode 100644
index 0000000..98b39f6
--- /dev/null
+++ b/screwdriver-3.5.6/box/include/primary_JBoss EAP 5.2.eli
@@ -0,0 +1,10 @@
+appse+JBoss EAP 5.2
+sv+3.2.13.RELEASE
+mavmo+4.0.0
+mavgr+it.ramecera.ict
+mv+0.0.1-SNAPSHOT
+depen+2
+pompr+0
+mavco+1.7
+sreso+
+defaulan+en
\ No newline at end of file
diff --git a/screwdriver-3.5.6/box/include/primary_JBoss EAP 5.2.uv.eli b/screwdriver-3.5.6/box/include/primary_JBoss EAP 5.2.uv.eli
new file mode 100644
index 0000000..113f8dd
--- /dev/null
+++ b/screwdriver-3.5.6/box/include/primary_JBoss EAP 5.2.uv.eli
@@ -0,0 +1,13 @@
+appse+JBoss EAP 5.2
+sv+3.2.13.RELEASE
+uv+3.1.4.RELEASE
+hv+3.4
+mavmo+4.0.0
+mavgr+it.ramecera.ict
+mv+0.0.1-SNAPSHOT
+depen+2
+pompr+0
+mavco+1.7
+hvalid+4.2.0.Final
+sreso+
+defaulan+en
\ No newline at end of file
diff --git a/screwdriver-3.5.6/box/include/primary_JBoss EAP 6.4.eli b/screwdriver-3.5.6/box/include/primary_JBoss EAP 6.4.eli
new file mode 100644
index 0000000..a493ea5
--- /dev/null
+++ b/screwdriver-3.5.6/box/include/primary_JBoss EAP 6.4.eli
@@ -0,0 +1,14 @@
+appse+JBoss EAP 6.4
+mavmo+4.0.0
+mavgr+it.ramecera.ict
+mv+0.0.1-SNAPSHOT
+depen+4
+pompr+0
+mavco+1.7
+jeev+6.0
+hv+3.5+hjpav+1
+hvalid+4.2.0.Final
+log4j+2.5
+sv+3.2.13.RELEASE
+sreso+
+defaulan+en
\ No newline at end of file
diff --git a/screwdriver-3.5.6/box/include/primary_JBoss EAP 6.4.uv.eli b/screwdriver-3.5.6/box/include/primary_JBoss EAP 6.4.uv.eli
new file mode 100644
index 0000000..f4fc197
--- /dev/null
+++ b/screwdriver-3.5.6/box/include/primary_JBoss EAP 6.4.uv.eli
@@ -0,0 +1,18 @@
+appse+JBoss EAP 6.4
+sv+3.2.13.RELEASE
+uv+3.1.4.RELEASE
+hv+3.5+hjpav+2
+mavmo+4.0.0
+mavbu+
+mavcp+2.3.2
+mavwa+2.1.1
+mavcl+2.3
+mavgr+it.ramecera.ict
+mv+0.0.1-SNAPSHOT
+depen+2
+pompr+0
+mavco+1.7
+log4j+2.5
+hvalid+4.2.0.Final
+sreso+
+defaulan+en
\ No newline at end of file
diff --git a/screwdriver-3.5.6/box/include/primary_JBoss EAP 6.4_s3_h3_jpa1.eli b/screwdriver-3.5.6/box/include/primary_JBoss EAP 6.4_s3_h3_jpa1.eli
new file mode 100644
index 0000000..07803ea
--- /dev/null
+++ b/screwdriver-3.5.6/box/include/primary_JBoss EAP 6.4_s3_h3_jpa1.eli
@@ -0,0 +1,18 @@
+appse+JBoss EAP 6.4
+mavmo+4.0.0
+mavgr+it.ramecera.ict
+mavbu+
+mavcp+2.3.2
+mavwa+2.1.1
+mavcl+2.3
+mv+0.0.1-SNAPSHOT
+depen+4
+pompr+0
+mavco+1.7
+jeev+6.0
+hv+3.5+hjpav+1
+hvalid+4.2.0.Final
+log4j+2.5
+sv+3.2.13.RELEASE
+sreso+
+defaulan+en
\ No newline at end of file
diff --git a/screwdriver-3.5.6/box/include/primary_JBoss EAP 7.1.eli b/screwdriver-3.5.6/box/include/primary_JBoss EAP 7.1.eli
new file mode 100644
index 0000000..7e610aa
--- /dev/null
+++ b/screwdriver-3.5.6/box/include/primary_JBoss EAP 7.1.eli
@@ -0,0 +1,12 @@
+appse+JBoss EAP 7.1
+mavmo+4.0.0
+mavgr+it.ramecera.ict
+mv+0.0.1-SNAPSHOT
+depen+4
+pompr+0
+mavco+1.8
+jeev+6.0
+sv+4.3.12.RELEASE
+log4j+2.5
+sreso+
+defaulan+en
\ No newline at end of file
diff --git a/screwdriver-3.5.6/box/include/primary_JBoss EAP 7.1_s3_h3_jpa1.eli b/screwdriver-3.5.6/box/include/primary_JBoss EAP 7.1_s3_h3_jpa1.eli
new file mode 100644
index 0000000..fc293c0
--- /dev/null
+++ b/screwdriver-3.5.6/box/include/primary_JBoss EAP 7.1_s3_h3_jpa1.eli
@@ -0,0 +1,17 @@
+appse+JBoss EAP 7.1
+mavmo+4.0.0
+mavgr+it.ramecera.ict
+mavbu+
+mavcp+2.3.2
+mavwa+2.1.1
+mavcl+2.3
+mv+0.0.1-SNAPSHOT
+depen+4
+pompr+0
+mavco+1.7
+jeev+6.0
+hv+3.5+hjpav+1
+log4j+2.5
+sv+3.2.13.RELEASE
+sreso+
+defaulan+en
\ No newline at end of file
diff --git a/screwdriver-3.5.6/box/include/primary_JBoss EAP 7.1_s4.eli b/screwdriver-3.5.6/box/include/primary_JBoss EAP 7.1_s4.eli
new file mode 100644
index 0000000..5a54008
--- /dev/null
+++ b/screwdriver-3.5.6/box/include/primary_JBoss EAP 7.1_s4.eli
@@ -0,0 +1,16 @@
+appse+JBoss EAP 7.1
+mavmo+4.0.0
+mavgr+it.ramecera.ict
+mavbu+
+mavcp+2.3.2
+mavwa+2.1.1
+mavcl+2.3
+mv+0.0.1-SNAPSHOT
+depen+4
+pompr+0
+mavco+1.8
+jeev+6.0
+sv+4.3.12.RELEASE
+log4j+2.5
+sreso+
+defaulan+en
\ No newline at end of file
diff --git a/screwdriver-3.5.6/box/include/primary_JBoss EAP 7.1_s4_h5_jpa2.eli b/screwdriver-3.5.6/box/include/primary_JBoss EAP 7.1_s4_h5_jpa2.eli
new file mode 100644
index 0000000..d162c5e
--- /dev/null
+++ b/screwdriver-3.5.6/box/include/primary_JBoss EAP 7.1_s4_h5_jpa2.eli
@@ -0,0 +1,17 @@
+appse+JBoss EAP 7.1
+mavmo+4.0.0
+mavgr+it.ramecera.ict
+mavbu+
+mavcp+2.3.2
+mavwa+2.1.1
+mavcl+2.3
+mv+0.0.1-SNAPSHOT
+depen+4
+pompr+0
+mavco+1.8
+jeev+6.0
+sv+4.3.12.RELEASE
+log4j+2.5
+hv+5.1.0.Final+hjpav+2
+sreso+
+defaulan+en
\ No newline at end of file
diff --git a/screwdriver-3.5.6/box/include/primary_JBoss EAP 7.1_uv_s4.eli b/screwdriver-3.5.6/box/include/primary_JBoss EAP 7.1_uv_s4.eli
new file mode 100644
index 0000000..2eed1b8
--- /dev/null
+++ b/screwdriver-3.5.6/box/include/primary_JBoss EAP 7.1_uv_s4.eli
@@ -0,0 +1,11 @@
+appse+JBoss EAP 7.1
+mavgr+it.ramecera.ict
+mv+0.0.1-SNAPSHOT
+depen+4
+pompr+0
+mavco+1.8
+jeev+6.0
+sv+4.3.12.RELEASE
+uv+3.1.4.RELEASE
+sreso+
+defaulan+en
\ No newline at end of file
diff --git a/screwdriver-3.5.6/box/include/primary_JBoss EAP 7.1_uv_s4_h5_jpa2.eli b/screwdriver-3.5.6/box/include/primary_JBoss EAP 7.1_uv_s4_h5_jpa2.eli
new file mode 100644
index 0000000..83af47a
--- /dev/null
+++ b/screwdriver-3.5.6/box/include/primary_JBoss EAP 7.1_uv_s4_h5_jpa2.eli
@@ -0,0 +1,19 @@
+appse+JBoss EAP 7.1
+mavmo+4.0.0
+mavgr+it.ramecera.ict
+mavbu+
+mavcp+2.3.2
+mavwa+2.1.1
+mavcl+2.3
+mv+0.0.1-SNAPSHOT
+depen+4
+pompr+0
+mavco+1.8
+jeev+6.0
+sv+4.3.12.RELEASE
+log4j+2.5
+hv+5.1.0.Final+hjpav+2
+uv+3.1.4.RELEASE
+sreso+
+defaulan+en
+charset+UTF-8
diff --git a/screwdriver-3.5.6/box/include/primary_Tomcat 7.0.eli b/screwdriver-3.5.6/box/include/primary_Tomcat 7.0.eli
new file mode 100644
index 0000000..f54ecdc
--- /dev/null
+++ b/screwdriver-3.5.6/box/include/primary_Tomcat 7.0.eli
@@ -0,0 +1,8 @@
+appse+Tomcat 7.0
+sv+3.1.0.RELEASE
+mavmo+4.0.0
+mavgr+it.ipzs
+mv+0.0.1-SNAPSHOT
+mavco+1.7
+sreso+
+defaulan+en
\ No newline at end of file
diff --git a/screwdriver-3.5.6/box/include/primary_Tomcat 7.0.uv.eli b/screwdriver-3.5.6/box/include/primary_Tomcat 7.0.uv.eli
new file mode 100644
index 0000000..92b262c
--- /dev/null
+++ b/screwdriver-3.5.6/box/include/primary_Tomcat 7.0.uv.eli
@@ -0,0 +1,12 @@
+appse+Tomcat 7.0
+sv+3.1.0.RELEASE
+uv+3.1.4.RELEASE
+mavmo+4.0.0
+mavgr+it.ipzs
+mv+0.0.1-SNAPSHOT
+mavco+1.7
+htv+3.4
+depen+2
+hvalid+4.2.0.Final
+sreso+
+defaulan+en
\ No newline at end of file
diff --git a/screwdriver-3.5.6/box/include/userpass_domain.eli b/screwdriver-3.5.6/box/include/userpass_domain.eli
new file mode 100644
index 0000000..e21d116
--- /dev/null
+++ b/screwdriver-3.5.6/box/include/userpass_domain.eli
@@ -0,0 +1 @@
+colorform+rgb(254, 231, 234)
diff --git a/screwdriver-3.5.6/box/include/userpass_simple.eli b/screwdriver-3.5.6/box/include/userpass_simple.eli
new file mode 100644
index 0000000..e21d116
--- /dev/null
+++ b/screwdriver-3.5.6/box/include/userpass_simple.eli
@@ -0,0 +1 @@
+colorform+rgb(254, 231, 234)
diff --git a/screwdriver-3.5.6/box/include/userpass_trivial.eli b/screwdriver-3.5.6/box/include/userpass_trivial.eli
new file mode 100644
index 0000000..e21d116
--- /dev/null
+++ b/screwdriver-3.5.6/box/include/userpass_trivial.eli
@@ -0,0 +1 @@
+colorform+rgb(254, 231, 234)
diff --git a/screwdriver-3.5.6/box/snippets/ViewResolver.txt b/screwdriver-3.5.6/box/snippets/ViewResolver.txt
new file mode 100644
index 0000000..158b5d0
--- /dev/null
+++ b/screwdriver-3.5.6/box/snippets/ViewResolver.txt
@@ -0,0 +1,4 @@
+
+
+
+
\ No newline at end of file
diff --git a/screwdriver-3.5.6/box/snippets/antisamyDepen.txt b/screwdriver-3.5.6/box/snippets/antisamyDepen.txt
new file mode 100644
index 0000000..960881d
--- /dev/null
+++ b/screwdriver-3.5.6/box/snippets/antisamyDepen.txt
@@ -0,0 +1,16 @@
+
+
+ org.owasp.antisamy
+ antisamy
+ 1.5.3
+
+
+ xml-apis-ext
+ xml-apis
+
+
+ xml-apis
+ xml-apis
+
+
+
diff --git a/screwdriver-3.5.6/box/snippets/cancella_extpr.txt b/screwdriver-3.5.6/box/snippets/cancella_extpr.txt
new file mode 100644
index 0000000..216c287
--- /dev/null
+++ b/screwdriver-3.5.6/box/snippets/cancella_extpr.txt
@@ -0,0 +1,12 @@
+
+
+
+ screw_list_A
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/screwdriver-3.5.6/box/snippets/cancella_hv_3.txt b/screwdriver-3.5.6/box/snippets/cancella_hv_3.txt
new file mode 100644
index 0000000..7594cd8
--- /dev/null
+++ b/screwdriver-3.5.6/box/snippets/cancella_hv_3.txt
@@ -0,0 +1,33 @@
+
+
+
+
+ org.hibernate
+ hibernate-core
+ 3.3.2.GA
+ compile
+
+
+ org.hibernate
+ hibernate-annotations
+ 3.4.0.GA
+ compile
+
+
+ org.hibernate
+ hibernate-commons-annotations
+ 3.1.0.GA
+ compile
+
+
+ org.hibernate
+ hibernate-validator
+ 3.1.0.GA
+ compile
+
+
+ org.hibernate
+ hibernate-tools
+ 3.2.3.GA
+ compile
+
\ No newline at end of file
diff --git a/screwdriver-3.5.6/box/snippets/corpoDispatcherTiles_2.txt b/screwdriver-3.5.6/box/snippets/corpoDispatcherTiles_2.txt
new file mode 100644
index 0000000..dbccd38
--- /dev/null
+++ b/screwdriver-3.5.6/box/snippets/corpoDispatcherTiles_2.txt
@@ -0,0 +1,8 @@
+
+
+
+
\ No newline at end of file
diff --git a/screwdriver-3.5.6/box/snippets/corpoDispatcherTiles_3.txt b/screwdriver-3.5.6/box/snippets/corpoDispatcherTiles_3.txt
new file mode 100644
index 0000000..9a6b951
--- /dev/null
+++ b/screwdriver-3.5.6/box/snippets/corpoDispatcherTiles_3.txt
@@ -0,0 +1,10 @@
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/screwdriver-3.5.6/box/snippets/css/bootstrap.css b/screwdriver-3.5.6/box/snippets/css/bootstrap.css
new file mode 100644
index 0000000..c70f1c8
--- /dev/null
+++ b/screwdriver-3.5.6/box/snippets/css/bootstrap.css
@@ -0,0 +1,3277 @@
+/*!
+ * Bootstrap v2.0.1
+ *
+ * Copyright 2012 Twitter, Inc
+ * Licensed under the Apache License v2.0
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Designed and built with all the love in the world @twitter by @mdo and @fat.
+ */
+.clearfix {
+ *zoom: 1;
+}
+
+.clearfix:before, .clearfix:after {
+ display: table;
+ content: "";
+}
+
+.clearfix:after {
+ clear: both;
+}
+
+article, aside, details, figcaption, figure, footer, header, hgroup, nav,
+ section {
+ display: block;
+}
+
+audio, canvas, video {
+ display: inline-block;
+ *display: inline;
+ *zoom: 1;
+}
+
+audio:not ([controls] ) {
+ display: none;
+}
+
+html {
+ font-size: 100%;
+ -webkit-text-size-adjust: 100%;
+ -ms-text-size-adjust: 100%;
+}
+
+a:focus {
+ outline: thin dotted #333;
+ outline: 5px auto -webkit-focus-ring-color;
+ outline-offset: -2px;
+}
+
+a:hover, a:active {
+ outline: 0;
+}
+
+sub, sup {
+ position: relative;
+ font-size: 75%;
+ line-height: 0;
+ vertical-align: baseline;
+}
+
+sup {
+ top: -0.5em;
+}
+
+sub {
+ bottom: -0.25em;
+}
+
+img {
+ max-width: 100%;
+ height: auto;
+ border: 0;
+ -ms-interpolation-mode: bicubic;
+}
+
+button, input, select, textarea {
+ margin: 0;
+ font-size: 100%;
+ vertical-align: middle;
+}
+
+button, input {
+ *overflow: visible;
+ line-height: normal;
+}
+
+button::-moz-focus-inner, input::-moz-focus-inner {
+ padding: 0;
+ border: 0;
+}
+
+button, input[type="button"], input[type="reset"], input[type="submit"]
+ {
+ cursor: pointer;
+ -webkit-appearance: button;
+}
+
+input[type="search"] {
+ -webkit-appearance: textfield;
+ -webkit-box-sizing: content-box;
+ -moz-box-sizing: content-box;
+ box-sizing: content-box;
+}
+
+input[type="search"]::-webkit-search-decoration, input[type="search"]::-webkit-search-cancel-button
+ {
+ -webkit-appearance: none;
+}
+
+textarea {
+ overflow: auto;
+ vertical-align: top;
+}
+
+body {
+ margin: 0;
+ font-family: "Verdana";
+ font-size: 18px;
+ line-height: 32px;
+ color: #333333;
+ background-color: #ffffff;
+}
+
+a {
+ color: yellow;
+ text-decoration: none;
+}
+
+a:hover {
+ color: red;
+ text-decoration: underline;
+}
+
+.row {
+ margin-left: -20px;
+ *zoom: 1;
+}
+
+.row:before, .row:after {
+ display: table;
+ content: "";
+}
+
+.row:after {
+ clear: both;
+}
+
+[class*="span"] {
+ float: left;
+ margin-left: 20px;
+}
+
+.span1 {
+ width: 60px;
+}
+
+.span2 {
+ width: 140px;
+}
+
+.span3 {
+ width: 220px;
+}
+
+.span4 {
+ width: 300px;
+}
+
+.span5 {
+ width: 380px;
+}
+
+.span6 {
+ width: 460px;
+}
+
+.span7 {
+ width: 540px;
+}
+
+.span8 {
+ width: 620px;
+}
+
+.span9 {
+ width: 700px;
+}
+
+.span10 {
+ width: 780px;
+}
+
+.span11 {
+ width: 860px;
+}
+
+.span12, .container {
+ width: 940px;
+}
+
+.offset1 {
+ margin-left: 100px;
+}
+
+.offset2 {
+ margin-left: 180px;
+}
+
+.offset3 {
+ margin-left: 260px;
+}
+
+.offset4 {
+ margin-left: 340px;
+}
+
+.offset5 {
+ margin-left: 420px;
+}
+
+.offset6 {
+ margin-left: 500px;
+}
+
+.offset7 {
+ margin-left: 580px;
+}
+
+.offset8 {
+ margin-left: 660px;
+}
+
+.offset9 {
+ margin-left: 740px;
+}
+
+.offset10 {
+ margin-left: 820px;
+}
+
+.offset11 {
+ margin-left: 900px;
+}
+
+.row-fluid {
+ width: 100%;
+ *zoom: 1;
+}
+
+.row-fluid:before, .row-fluid:after {
+ display: table;
+ content: "";
+}
+
+.row-fluid:after {
+ clear: both;
+}
+
+.row-fluid>[class*="span"] {
+ float: left;
+ margin-left: 2.127659574%;
+}
+
+.row-fluid>[class*="span"]:first-child {
+ margin-left: 0;
+}
+
+.row-fluid>.span1 {
+ width: 6.382978723%;
+}
+
+.row-fluid>.span2 {
+ width: 14.89361702%;
+}
+
+.row-fluid>.span3 {
+ width: 23.404255317%;
+}
+
+.row-fluid>.span4 {
+ width: 31.914893614%;
+}
+
+.row-fluid>.span5 {
+ width: 40.425531911%;
+}
+
+.row-fluid>.span6 {
+ width: 48.93617020799999%;
+}
+
+.row-fluid>.span7 {
+ width: 57.446808505%;
+}
+
+.row-fluid>.span8 {
+ width: 65.95744680199999%;
+}
+
+.row-fluid>.span9 {
+ width: 74.468085099%;
+}
+
+.row-fluid>.span10 {
+ width: 82.97872339599999%;
+}
+
+.row-fluid>.span11 {
+ width: 91.489361693%;
+}
+
+.row-fluid>.span12 {
+ width: 99.99999998999999%;
+}
+
+.container {
+ width: 940px;
+ margin-left: auto;
+ margin-right: auto;
+ *zoom: 1;
+}
+
+.container:before, .container:after {
+ display: table;
+ content: "";
+}
+
+.container:after {
+ clear: both;
+}
+
+.container-fluid {
+ padding-left: 20px;
+ padding-right: 20px;
+ *zoom: 1;
+}
+
+.container-fluid:before, .container-fluid:after {
+ display: table;
+ content: "";
+}
+
+.container-fluid:after {
+ clear: both;
+}
+
+p {
+ margin: 0 0 9px;
+ font-family: "Helvetica Neue", Helvetica, Arial, sans-serif;
+ font-size: 13px;
+ line-height: 18px;
+}
+
+p small {
+ font-size: 11px;
+ color: #999999;
+}
+
+.lead {
+ margin-bottom: 18px;
+ font-size: 20px;
+ font-weight: 200;
+ line-height: 27px;
+}
+
+h1, h2, h3, h4, h5, h6 {
+ margin: 1px;
+ font-weight: bold;
+ color: #333333;
+ text-rendering: optimizelegibility;
+}
+
+h1 small, h2 small, h3 small, h4 small, h5 small, h6 small {
+ font-weight: normal;
+ color: #999999;
+}
+
+h1 {
+ font-size: 30px;
+ line-height: 36px;
+}
+
+h1 small {
+ font-size: 18px;
+}
+
+h2 {
+ font-size: 24px;
+ line-height: 36px;
+}
+
+h2 small {
+ font-size: 18px;
+}
+
+h3 {
+ line-height: 27px;
+ font-size: 18px;
+}
+
+h3 small {
+ font-size: 14px;
+}
+
+h4, h5, h6 {
+ line-height: 18px;
+}
+
+h4 {
+ font-size: 14px;
+}
+
+h4 small {
+ font-size: 12px;
+}
+
+h5 {
+ font-size: 12px;
+}
+
+h6 {
+ font-size: 11px;
+ color: #999999;
+ text-transform: uppercase;
+}
+
+.page-header {
+ padding-bottom: 17px;
+ margin: 18px 0;
+ border-bottom: 1px solid #eeeeee;
+}
+
+.page-header h1 {
+ line-height: 1;
+}
+
+ul, ol {
+ padding: 0;
+ margin: 0 0 9px 25px;
+}
+
+ul ul, ul ol, ol ol, ol ul {
+ margin-bottom: 0;
+}
+
+ul {
+ list-style: disc;
+}
+
+ol {
+ list-style: decimal;
+}
+
+li {
+ line-height: 24px;
+}
+
+ul.unstyled, ol.unstyled {
+ margin-left: 0;
+ list-style: none;
+}
+
+dl {
+ margin-bottom: 18px;
+}
+
+dt, dd {
+ line-height: 18px;
+}
+
+dt {
+ font-weight: bold;
+}
+
+dd {
+ margin-left: 9px;
+}
+
+hr {
+ margin: 18px 0;
+ border: 0;
+ border-top: 1px solid #eeeeee;
+ border-bottom: 1px solid #ffffff;
+}
+
+strong {
+ font-weight: bold;
+}
+
+em {
+ font-style: italic;
+}
+
+.muted {
+ color: #999999;
+}
+
+abbr {
+ font-size: 90%;
+ text-transform: uppercase;
+ border-bottom: 1px dotted #ddd;
+ cursor: help;
+}
+
+blockquote {
+ padding: 0 0 0 15px;
+ margin: 0 0 18px;
+ border-left: 5px solid #eeeeee;
+}
+
+blockquote p {
+ margin-bottom: 0;
+ font-size: 16px;
+ font-weight: 300;
+ line-height: 22.5px;
+}
+
+blockquote small {
+ display: block;
+ line-height: 18px;
+ color: #999999;
+}
+
+blockquote small:before {
+ content: '\2014 \00A0';
+}
+
+blockquote.pull-right {
+ float: right;
+ padding-left: 0;
+ padding-right: 15px;
+ border-left: 0;
+ border-right: 5px solid #eeeeee;
+}
+
+blockquote.pull-right p, blockquote.pull-right small {
+ text-align: right;
+}
+
+q:before, q:after, blockquote:before, blockquote:after {
+ content: "";
+}
+
+address {
+ display: block;
+ margin-bottom: 18px;
+ line-height: 18px;
+ font-style: normal;
+}
+
+small {
+ font-size: 100%;
+}
+
+cite {
+ font-style: normal;
+}
+
+code, pre {
+ padding: 0 3px 2px;
+ font-family: Menlo, Monaco, "Courier New", monospace;
+ font-size: 12px;
+ color: #333333;
+ -webkit-border-radius: 3px;
+ -moz-border-radius: 3px;
+ border-radius: 3px;
+}
+
+code {
+ padding: 3px 4px;
+ color: #d14;
+ background-color: #f7f7f9;
+ border: 1px solid #e1e1e8;
+}
+
+pre {
+ display: block;
+ padding: 8.5px;
+ margin: 0 0 9px;
+ font-size: 12px;
+ line-height: 18px;
+ background-color: #f5f5f5;
+ border: 1px solid #ccc;
+ border: 1px solid rgba(0, 0, 0, 0.15);
+ -webkit-border-radius: 4px;
+ -moz-border-radius: 4px;
+ border-radius: 4px;
+ white-space: pre;
+ white-space: pre-wrap;
+ word-break: break-all;
+ word-wrap: break-word;
+}
+
+pre.prettyprint {
+ margin-bottom: 18px;
+}
+
+pre code {
+ padding: 0;
+ color: inherit;
+ background-color: transparent;
+ border: 0;
+}
+
+.pre-scrollable {
+ max-height: 340px;
+ overflow-y: scroll;
+}
+
+.label {
+ padding: 2px 4px 3px;
+ font-size: 11.049999999999999px;
+ font-weight: bold;
+ color: #ffffff;
+ text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.25);
+ background-color: #999999;
+ -webkit-border-radius: 3px;
+ -moz-border-radius: 3px;
+ border-radius: 3px;
+}
+
+.label:hover {
+ color: #ffffff;
+ text-decoration: none;
+}
+
+.label-important {
+ background-color: #b94a48;
+}
+
+.label-important:hover {
+ background-color: #953b39;
+}
+
+.label-warning {
+ background-color: #f89406;
+}
+
+.label-warning:hover {
+ background-color: #c67605;
+}
+
+.label-success {
+ background-color: #468847;
+}
+
+.label-success:hover {
+ background-color: #356635;
+}
+
+.label-info {
+ background-color: #3a87ad;
+}
+
+.label-info:hover {
+ background-color: #2d6987;
+}
+
+table {
+ max-width: 100%;
+ border-collapse: collapse;
+ border-spacing: 0;
+}
+
+.table {
+ width: 100%;
+ margin-bottom: 18px;
+}
+
+.table th, .table td {
+ padding: 8px;
+ line-height: 18px;
+ text-align: left;
+ vertical-align: top;
+ border-top: 1px solid #ddd;
+}
+
+.table th {
+ font-weight: bold;
+}
+
+.table thead th {
+ vertical-align: bottom;
+}
+
+.table thead:first-child tr th, .table thead:first-child tr td {
+ border-top: 0;
+}
+
+.table tbody+tbody {
+ border-top: 2px solid #ddd;
+}
+
+.table-condensed th, .table-condensed td {
+ padding: 4px 5px;
+}
+
+.table-bordered {
+ border: 1px solid #ddd;
+ border-collapse: separate;
+ *border-collapse: collapsed;
+ -webkit-border-radius: 4px;
+ -moz-border-radius: 4px;
+ border-radius: 4px;
+}
+
+.table-bordered th+th, .table-bordered td+td, .table-bordered th+td,
+ .table-bordered td+th {
+ border-left: 1px solid #ddd;
+}
+
+.table-bordered thead:first-child tr:first-child th, .table-bordered tbody:first-child tr:first-child th,
+ .table-bordered tbody:first-child tr:first-child td {
+ border-top: 0;
+}
+
+.table-bordered thead:first-child tr:first-child th:first-child,
+ .table-bordered tbody:first-child tr:first-child td:first-child {
+ -webkit-border-radius: 4px 0 0 0;
+ -moz-border-radius: 4px 0 0 0;
+ border-radius: 4px 0 0 0;
+}
+
+.table-bordered thead:first-child tr:first-child th:last-child,
+ .table-bordered tbody:first-child tr:first-child td:last-child {
+ -webkit-border-radius: 0 4px 0 0;
+ -moz-border-radius: 0 4px 0 0;
+ border-radius: 0 4px 0 0;
+}
+
+.table-bordered thead:last-child tr:last-child th:first-child,
+ .table-bordered tbody:last-child tr:last-child td:first-child {
+ -webkit-border-radius: 0 0 0 4px;
+ -moz-border-radius: 0 0 0 4px;
+ border-radius: 0 0 0 4px;
+}
+
+.table-bordered thead:last-child tr:last-child th:last-child,
+ .table-bordered tbody:last-child tr:last-child td:last-child {
+ -webkit-border-radius: 0 0 4px 0;
+ -moz-border-radius: 0 0 4px 0;
+ border-radius: 0 0 4px 0;
+}
+
+.table-striped tbody tr:nth-child(odd) td, .table-striped tbody tr:nth-child(odd) th
+ {
+ background-color: #f9f9f9;
+}
+
+.table tbody tr:hover td, .table tbody tr:hover th {
+ background-color: #f5f5f5;
+}
+
+table .span1 {
+ float: none;
+ width: 44px;
+ margin-left: 0;
+}
+
+table .span2 {
+ float: none;
+ width: 124px;
+ margin-left: 0;
+}
+
+table .span3 {
+ float: none;
+ width: 204px;
+ margin-left: 0;
+}
+
+table .span4 {
+ float: none;
+ width: 284px;
+ margin-left: 0;
+}
+
+table .span5 {
+ float: none;
+ width: 364px;
+ margin-left: 0;
+}
+
+table .span6 {
+ float: none;
+ width: 444px;
+ margin-left: 0;
+}
+
+table .span7 {
+ float: none;
+ width: 524px;
+ margin-left: 0;
+}
+
+table .span8 {
+ float: none;
+ width: 604px;
+ margin-left: 0;
+}
+
+table .span9 {
+ float: none;
+ width: 684px;
+ margin-left: 0;
+}
+
+table .span10 {
+ float: none;
+ width: 764px;
+ margin-left: 0;
+}
+
+table .span11 {
+ float: none;
+ width: 844px;
+ margin-left: 0;
+}
+
+table .span12 {
+ float: none;
+ width: 924px;
+ margin-left: 0;
+}
+
+form {
+ margin: 0 0 18px;
+}
+
+fieldset {
+ padding: 0;
+ margin: 0;
+ border: 0;
+}
+
+legend {
+ display: block;
+ width: 100%;
+ padding: 0;
+ margin-bottom: 27px;
+ font-size: 19.5px;
+ line-height: 36px;
+ color: #333333;
+ border: 0;
+ border-bottom: 1px solid #eee;
+}
+
+legend small {
+ font-size: 13.5px;
+ color: #999999;
+}
+
+label, input, button, select, textarea {
+ font-size: 13px;
+ font-weight: normal;
+ line-height: 18px;
+}
+
+input, button, select, textarea {
+ font-family: "Helvetica Neue", Helvetica, Arial, sans-serif;
+}
+
+label {
+ display: block;
+ margin-bottom: 5px;
+ color: #333333;
+}
+
+input, textarea, select, .uneditable-input {
+ display: inline-block;
+ width: 210px;
+ height: 22px;
+ padding: 4px;
+ margin-bottom: 9px;
+ font-size: 13px;
+ line-height: 18px;
+ color: #555555;
+ border: 1px solid #ccc;
+ -webkit-border-radius: 3px;
+ -moz-border-radius: 3px;
+ border-radius: 3px;
+}
+
+.uneditable-textarea {
+ width: auto;
+ height: auto;
+}
+
+label input, label textarea, label select {
+ display: block;
+}
+
+input[type="image"], input[type="checkbox"], input[type="radio"] {
+ width: auto;
+ height: auto;
+ padding: 0;
+ margin: 3px 0;
+ *margin-top: 0;
+ /* IE7 */
+ line-height: normal;
+ cursor: pointer;
+ -webkit-border-radius: 0;
+ -moz-border-radius: 0;
+ border-radius: 0;
+ border: 0 \9;
+ /* IE9 and down */
+}
+
+input[type="image"] {
+ border: 0;
+}
+
+input[type="file"] {
+ width: auto;
+ padding: initial;
+ line-height: initial;
+ border: initial;
+ background-color: #ffffff;
+ background-color: initial;
+ -webkit-box-shadow: none;
+ -moz-box-shadow: none;
+ box-shadow: none;
+}
+
+input[type="button"], input[type="reset"], input[type="submit"] {
+ width: auto;
+ height: auto;
+}
+
+select, input[type="file"] {
+ height: 28px;
+ /* In IE7, the height of the select element cannot be changed by height, only font-size */
+ *margin-top: 4px;
+ /* For IE7, add top margin to align select with labels */
+ line-height: 28px;
+}
+
+input[type="file"] {
+ line-height: 18px \9;
+}
+
+select {
+ width: 220px;
+ background-color: #ffffff;
+}
+
+select[multiple], select[size] {
+ height: auto;
+}
+
+input[type="image"] {
+ -webkit-box-shadow: none;
+ -moz-box-shadow: none;
+ box-shadow: none;
+}
+
+textarea {
+ height: auto;
+}
+
+input[type="hidden"] {
+ display: none;
+}
+
+.radio, .checkbox {
+ padding-left: 18px;
+}
+
+.radio input[type="radio"], .checkbox input[type="checkbox"] {
+ float: left;
+ margin-left: -18px;
+}
+
+.controls>.radio:first-child, .controls>.checkbox:first-child {
+ padding-top: 5px;
+}
+
+.radio.inline, .checkbox.inline {
+ display: inline-block;
+ padding-top: 5px;
+ margin-bottom: 0;
+ vertical-align: middle;
+}
+
+.radio.inline+.radio.inline, .checkbox.inline+.checkbox.inline {
+ margin-left: 10px;
+}
+
+input, textarea {
+ -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);
+ -moz-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);
+ box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);
+ -webkit-transition: border linear 0.2s, box-shadow linear 0.2s;
+ -moz-transition: border linear 0.2s, box-shadow linear 0.2s;
+ -ms-transition: border linear 0.2s, box-shadow linear 0.2s;
+ -o-transition: border linear 0.2s, box-shadow linear 0.2s;
+ transition: border linear 0.2s, box-shadow linear 0.2s;
+}
+
+input:focus, textarea:focus {
+ border-color: rgba(82, 168, 236, 0.8);
+ -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 8px
+ rgba(82, 168, 236, 0.6);
+ -moz-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 8px
+ rgba(82, 168, 236, 0.6);
+ box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 8px
+ rgba(82, 168, 236, 0.6);
+ outline: 0;
+ outline: thin dotted \9;
+ /* IE6-9 */
+}
+
+input[type="file"]:focus, input[type="radio"]:focus, input[type="checkbox"]:focus,
+ select:focus {
+ -webkit-box-shadow: none;
+ -moz-box-shadow: none;
+ box-shadow: none;
+ outline: thin dotted #333;
+ outline: 5px auto -webkit-focus-ring-color;
+ outline-offset: -2px;
+}
+
+.input-mini {
+ width: 60px;
+}
+
+.input-small {
+ width: 90px;
+}
+
+.input-medium {
+ width: 150px;
+}
+
+.input-large {
+ width: 210px;
+}
+
+.input-xlarge {
+ width: 270px;
+}
+
+.input-xxlarge {
+ width: 530px;
+}
+
+input[class*="span"], select[class*="span"], textarea[class*="span"],
+ .uneditable-input {
+ float: none;
+ margin-left: 0;
+}
+
+input.span1, textarea.span1, .uneditable-input.span1 {
+ width: 50px;
+}
+
+input.span2, textarea.span2, .uneditable-input.span2 {
+ width: 130px;
+}
+
+input.span3, textarea.span3, .uneditable-input.span3 {
+ width: 210px;
+}
+
+input.span4, textarea.span4, .uneditable-input.span4 {
+ width: 290px;
+}
+
+input.span5, textarea.span5, .uneditable-input.span5 {
+ width: 370px;
+}
+
+input.span6, textarea.span6, .uneditable-input.span6 {
+ width: 450px;
+}
+
+input.span7, textarea.span7, .uneditable-input.span7 {
+ width: 530px;
+}
+
+input.span8, textarea.span8, .uneditable-input.span8 {
+ width: 610px;
+}
+
+input.span9, textarea.span9, .uneditable-input.span9 {
+ width: 690px;
+}
+
+input.span10, textarea.span10, .uneditable-input.span10 {
+ width: 770px;
+}
+
+input.span11, textarea.span11, .uneditable-input.span11 {
+ width: 850px;
+}
+
+input.span12, textarea.span12, .uneditable-input.span12 {
+ width: 930px;
+}
+
+input[disabled], select[disabled], textarea[disabled], input[readonly],
+ select[readonly], textarea[readonly] {
+ background-color: #f5f5f5;
+ border-color: #ddd;
+ cursor: not-allowed;
+}
+
+.control-group.warning>label, .control-group.warning .help-block,
+ .control-group.warning .help-inline {
+ color: #c09853;
+}
+
+.control-group.warning input, .control-group.warning select,
+ .control-group.warning textarea {
+ color: #c09853;
+ border-color: #c09853;
+}
+
+.control-group.warning input:focus, .control-group.warning select:focus,
+ .control-group.warning textarea:focus {
+ border-color: #a47e3c;
+ -webkit-box-shadow: 0 0 6px #dbc59e;
+ -moz-box-shadow: 0 0 6px #dbc59e;
+ box-shadow: 0 0 6px #dbc59e;
+}
+
+.control-group.warning .input-prepend .add-on, .control-group.warning .input-append .add-on
+ {
+ color: #c09853;
+ background-color: #fcf8e3;
+ border-color: #c09853;
+}
+
+.control-group.error>label, .control-group.error .help-block,
+ .control-group.error .help-inline {
+ color: #b94a48;
+}
+
+.control-group.error input, .control-group.error select, .control-group.error textarea
+ {
+ color: #b94a48;
+ border-color: #b94a48;
+}
+
+.control-group.error input:focus, .control-group.error select:focus,
+ .control-group.error textarea:focus {
+ border-color: #953b39;
+ -webkit-box-shadow: 0 0 6px #d59392;
+ -moz-box-shadow: 0 0 6px #d59392;
+ box-shadow: 0 0 6px #d59392;
+}
+
+.control-group.error .input-prepend .add-on, .control-group.error .input-append .add-on
+ {
+ color: #b94a48;
+ background-color: #f2dede;
+ border-color: #b94a48;
+}
+
+.control-group.success>label, .control-group.success .help-block,
+ .control-group.success .help-inline {
+ color: #468847;
+}
+
+.control-group.success input, .control-group.success select,
+ .control-group.success textarea {
+ color: #468847;
+ border-color: #468847;
+}
+
+.control-group.success input:focus, .control-group.success select:focus,
+ .control-group.success textarea:focus {
+ border-color: #356635;
+ -webkit-box-shadow: 0 0 6px #7aba7b;
+ -moz-box-shadow: 0 0 6px #7aba7b;
+ box-shadow: 0 0 6px #7aba7b;
+}
+
+.control-group.success .input-prepend .add-on, .control-group.success .input-append .add-on
+ {
+ color: #468847;
+ background-color: #dff0d8;
+ border-color: #468847;
+}
+
+input:focus:required:invalid, textarea:focus:required:invalid, select:focus:required:invalid
+ {
+ color: #b94a48;
+ border-color: #ee5f5b;
+}
+
+input:focus:required:invalid:focus, textarea:focus:required:invalid:focus,
+ select:focus:required:invalid:focus {
+ border-color: #e9322d;
+ -webkit-box-shadow: 0 0 6px #f8b9b7;
+ -moz-box-shadow: 0 0 6px #f8b9b7;
+ box-shadow: 0 0 6px #f8b9b7;
+}
+
+.form-actions {
+ padding: 17px 20px 18px;
+ margin-top: 18px;
+ margin-bottom: 18px;
+ background-color: +backformaction+;
+ border-top: 1px solid #ddd;
+}
+
+.uneditable-input {
+ display: block;
+ background-color: #ffffff;
+ border-color: #eee;
+ -webkit-box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.025);
+ -moz-box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.025);
+ box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.025);
+ cursor: not-allowed;
+}
+
+:-moz-placeholder {
+ color: #999999;
+}
+
+::-webkit-input-placeholder {
+ color: #999999;
+}
+
+.help-block {
+ display: block;
+ margin-top: 5px;
+ margin-bottom: 0;
+ color: #999999;
+}
+
+.help-inline {
+ display: inline-block;
+ *display: inline;
+ /* IE7 inline-block hack */
+ *zoom: 1;
+ margin-bottom: 9px;
+ vertical-align: middle;
+ padding-left: 5px;
+}
+
+.input-prepend, .input-append {
+ margin-bottom: 5px;
+ *zoom: 1;
+}
+
+.input-prepend:before, .input-append:before, .input-prepend:after,
+ .input-append:after {
+ display: table;
+ content: "";
+}
+
+.input-prepend:after, .input-append:after {
+ clear: both;
+}
+
+.input-prepend input, .input-append input, .input-prepend .uneditable-input,
+ .input-append .uneditable-input {
+ -webkit-border-radius: 0 3px 3px 0;
+ -moz-border-radius: 0 3px 3px 0;
+ border-radius: 0 3px 3px 0;
+}
+
+.input-prepend input:focus, .input-append input:focus, .input-prepend .uneditable-input:focus,
+ .input-append .uneditable-input:focus {
+ position: relative;
+ z-index: 2;
+}
+
+.input-prepend .uneditable-input, .input-append .uneditable-input {
+ border-left-color: #ccc;
+}
+
+.input-prepend .add-on, .input-append .add-on {
+ float: left;
+ display: block;
+ width: auto;
+ min-width: 16px;
+ height: 18px;
+ margin-right: -1px;
+ padding: 4px 5px;
+ font-weight: normal;
+ line-height: 18px;
+ color: #999999;
+ text-align: center;
+ text-shadow: 0 1px 0 #ffffff;
+ background-color: #f5f5f5;
+ border: 1px solid #ccc;
+ -webkit-border-radius: 3px 0 0 3px;
+ -moz-border-radius: 3px 0 0 3px;
+ border-radius: 3px 0 0 3px;
+}
+
+.input-prepend .active, .input-append .active {
+ background-color: #a9dba9;
+ border-color: #46a546;
+}
+
+.input-prepend .add-on {
+ *margin-top: 1px;
+ /* IE6-7 */
+}
+
+.input-append input, .input-append .uneditable-input {
+ float: left;
+ -webkit-border-radius: 3px 0 0 3px;
+ -moz-border-radius: 3px 0 0 3px;
+ border-radius: 3px 0 0 3px;
+}
+
+.input-append .uneditable-input {
+ border-left-color: #eee;
+ border-right-color: #ccc;
+}
+
+.input-append .add-on {
+ margin-right: 0;
+ margin-left: -1px;
+ -webkit-border-radius: 0 3px 3px 0;
+ -moz-border-radius: 0 3px 3px 0;
+ border-radius: 0 3px 3px 0;
+}
+
+.input-append input:first-child {
+ *margin-left: -160px;
+}
+
+.input-append input:first-child+.add-on {
+ *margin-left: -21px;
+}
+
+.search-query {
+ padding-left: 14px;
+ padding-right: 14px;
+ margin-bottom: 0;
+ -webkit-border-radius: 14px;
+ -moz-border-radius: 14px;
+ border-radius: 14px;
+}
+
+.form-search input, .form-inline input, .form-horizontal input,
+ .form-search textarea, .form-inline textarea, .form-horizontal textarea,
+ .form-search select, .form-inline select, .form-horizontal select,
+ .form-search .help-inline, .form-inline .help-inline, .form-horizontal .help-inline,
+ .form-search .uneditable-input, .form-inline .uneditable-input,
+ .form-horizontal .uneditable-input {
+ display: inline-block;
+ margin-bottom: 0;
+}
+
+.form-search .hide, .form-inline .hide, .form-horizontal .hide {
+ display: none;
+}
+
+.form-search label, .form-inline label, .form-search .input-append,
+ .form-inline .input-append, .form-search .input-prepend, .form-inline .input-prepend
+ {
+ display: inline-block;
+}
+
+.form-search .input-append .add-on, .form-inline .input-prepend .add-on,
+ .form-search .input-append .add-on, .form-inline .input-prepend .add-on
+ {
+ vertical-align: middle;
+}
+
+.form-search .radio, .form-inline .radio, .form-search .checkbox,
+ .form-inline .checkbox {
+ margin-bottom: 0;
+ vertical-align: middle;
+}
+
+.control-group {
+ margin-bottom: 9px;
+}
+
+legend+.control-group {
+ margin-top: 18px;
+ -webkit-margin-top-collapse: separate;
+}
+
+.form-horizontal .control-group {
+ margin-bottom: 18px;
+ *zoom: 1;
+}
+
+.form-horizontal .control-group:before, .form-horizontal .control-group:after
+ {
+ display: table;
+ content: "";
+}
+
+.form-horizontal .control-group:after {
+ clear: both;
+}
+
+.form-horizontal .control-label {
+ float: left;
+ width: 140px;
+ padding-top: 5px;
+ text-align: right;
+}
+
+.form-horizontal .controls {
+ margin-left: 160px;
+}
+
+.form-horizontal .form-actions {
+ padding-left: 160px;
+}
+
+.btn {
+ display: inline-block;
+ padding: 4px 10px 4px;
+ margin-bottom: 0;
+ font-size: 13px;
+ line-height: 18px;
+ color: #333333;
+ text-align: center;
+ text-shadow: 0 1px 1px rgba(255, 255, 255, 0.75);
+ vertical-align: middle;
+ background-color: #f5f5f5;
+ background-image: -moz-linear-gradient(top, #ffffff, #e6e6e6);
+ background-image: -ms-linear-gradient(top, #ffffff, #e6e6e6);
+ background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#ffffff),
+ to(#e6e6e6));
+ background-image: -webkit-linear-gradient(top, #ffffff, #e6e6e6);
+ background-image: -o-linear-gradient(top, #ffffff, #e6e6e6);
+ background-image: linear-gradient(top, #ffffff, #e6e6e6);
+ background-repeat: repeat-x;
+ filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffff',
+ endColorstr='#e6e6e6', GradientType=0);
+ border-color: #e6e6e6 #e6e6e6 #bfbfbf;
+ border-color: rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25);
+ filter: progid:DXImageTransform.Microsoft.gradient(enabled= false);
+ border: 1px solid #ccc;
+ border-bottom-color: #bbb;
+ -webkit-border-radius: 4px;
+ -moz-border-radius: 4px;
+ border-radius: 4px;
+ -webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.2), 0 1px 2px
+ rgba(0, 0, 0, 0.05);
+ -moz-box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.2), 0 1px 2px
+ rgba(0, 0, 0, 0.05);
+ box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.2), 0 1px 2px
+ rgba(0, 0, 0, 0.05);
+ cursor: pointer;
+ filter: progid:DXImageTransform.Microsoft.gradient(enabled= false);
+ *margin-left: .3em;
+}
+
+.btn:hover, .btn:active, .btn.active, .btn.disabled, .btn[disabled] {
+ background-color: #e6e6e6;
+}
+
+.btn:active, .btn.active {
+ background-color: #cccccc \9;
+}
+
+.btn:first-child {
+ *margin-left: 0;
+}
+
+.btn:hover {
+ color: #333333;
+ text-decoration: none;
+ background-color: #e6e6e6;
+ background-position: 0 -15px;
+ -webkit-transition: background-position 0.1s linear;
+ -moz-transition: background-position 0.1s linear;
+ -ms-transition: background-position 0.1s linear;
+ -o-transition: background-position 0.1s linear;
+ transition: background-position 0.1s linear;
+}
+
+.btn:focus {
+ outline: thin dotted #333;
+ outline: 5px auto -webkit-focus-ring-color;
+ outline-offset: -2px;
+}
+
+.btn.active, .btn:active {
+ background-image: none;
+ -webkit-box-shadow: inset 0 2px 4px rgba(0, 0, 0, 0.15), 0 1px 2px
+ rgba(0, 0, 0, 0.05);
+ -moz-box-shadow: inset 0 2px 4px rgba(0, 0, 0, 0.15), 0 1px 2px
+ rgba(0, 0, 0, 0.05);
+ box-shadow: inset 0 2px 4px rgba(0, 0, 0, 0.15), 0 1px 2px
+ rgba(0, 0, 0, 0.05);
+ background-color: #e6e6e6;
+ background-color: #d9d9d9 \9;
+ outline: 0;
+}
+
+.btn.disabled, .btn[disabled] {
+ cursor: default;
+ background-image: none;
+ background-color: #e6e6e6;
+ opacity: 0.65;
+ filter: alpha(opacity = 65);
+ -webkit-box-shadow: none;
+ -moz-box-shadow: none;
+ box-shadow: none;
+}
+
+.btn-large {
+ padding: 9px 14px;
+ font-size: 15px;
+ line-height: normal;
+ -webkit-border-radius: 5px;
+ -moz-border-radius: 5px;
+ border-radius: 5px;
+}
+
+.btn-large [class^="icon-"] {
+ margin-top: 1px;
+}
+
+.btn-small {
+ padding: 5px 9px;
+ font-size: 11px;
+ line-height: 16px;
+}
+
+.btn-small [class^="icon-"] {
+ margin-top: -1px;
+}
+
+.btn-mini {
+ padding: 2px 6px;
+ font-size: 11px;
+ line-height: 14px;
+}
+
+.btn-primary, .btn-primary:hover, .btn-warning, .btn-warning:hover,
+ .btn-danger, .btn-danger:hover, .btn-success, .btn-success:hover,
+ .btn-info, .btn-info:hover, .btn-inverse, .btn-inverse:hover {
+ text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.25);
+ color: #ffffff;
+}
+
+.btn-primary.active, .btn-warning.active, .btn-danger.active,
+ .btn-success.active, .btn-info.active, .btn-dark.active {
+ color: rgba(255, 255, 255, 0.75);
+}
+
+.btn-primary {
+ background-color: #006dcc;
+ background-image: -moz-linear-gradient(top, #0088cc, #0044cc);
+ background-image: -ms-linear-gradient(top, #0088cc, #0044cc);
+ background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#0088cc),
+ to(#0044cc));
+ background-image: -webkit-linear-gradient(top, #0088cc, #0044cc);
+ background-image: -o-linear-gradient(top, #0088cc, #0044cc);
+ background-image: linear-gradient(top, #0088cc, #0044cc);
+ background-repeat: repeat-x;
+ filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#0088cc',
+ endColorstr='#0044cc', GradientType=0);
+ border-color: #0044cc #0044cc #002a80;
+ border-color: rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25);
+ filter: progid:DXImageTransform.Microsoft.gradient(enabled= false);
+}
+
+.btn-primary:hover, .btn-primary:active, .btn-primary.active,
+ .btn-primary.disabled, .btn-primary[disabled] {
+ background-color: #0044cc;
+}
+
+.btn-primary:active, .btn-primary.active {
+ background-color: #003399 \9;
+}
+
+.btn-warning {
+ background-color: #faa732;
+ background-image: -moz-linear-gradient(top, #fbb450, #f89406);
+ background-image: -ms-linear-gradient(top, #fbb450, #f89406);
+ background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#fbb450),
+ to(#f89406));
+ background-image: -webkit-linear-gradient(top, #fbb450, #f89406);
+ background-image: -o-linear-gradient(top, #fbb450, #f89406);
+ background-image: linear-gradient(top, #fbb450, #f89406);
+ background-repeat: repeat-x;
+ filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fbb450',
+ endColorstr='#f89406', GradientType=0);
+ border-color: #f89406 #f89406 #ad6704;
+ border-color: rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25);
+ filter: progid:DXImageTransform.Microsoft.gradient(enabled= false);
+}
+
+.btn-warning:hover, .btn-warning:active, .btn-warning.active,
+ .btn-warning.disabled, .btn-warning[disabled] {
+ background-color: #f89406;
+}
+
+.btn-warning:active, .btn-warning.active {
+ background-color: #c67605 \9;
+}
+
+.btn-danger {
+ background-color: #da4f49;
+ background-image: -moz-linear-gradient(top, #ee5f5b, #bd362f);
+ background-image: -ms-linear-gradient(top, #ee5f5b, #bd362f);
+ background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#ee5f5b),
+ to(#bd362f));
+ background-image: -webkit-linear-gradient(top, #ee5f5b, #bd362f);
+ background-image: -o-linear-gradient(top, #ee5f5b, #bd362f);
+ background-image: linear-gradient(top, #ee5f5b, #bd362f);
+ background-repeat: repeat-x;
+ filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ee5f5b',
+ endColorstr='#bd362f', GradientType=0);
+ border-color: #bd362f #bd362f #802420;
+ border-color: rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25);
+ filter: progid:DXImageTransform.Microsoft.gradient(enabled= false);
+}
+
+.btn-danger:hover, .btn-danger:active, .btn-danger.active, .btn-danger.disabled,
+ .btn-danger[disabled] {
+ background-color: #bd362f;
+}
+
+.btn-danger:active, .btn-danger.active {
+ background-color: #942a25 \9;
+}
+
+.btn-success {
+ background-color: #5bb75b;
+ background-image: -moz-linear-gradient(top, #62c462, #51a351);
+ background-image: -ms-linear-gradient(top, #62c462, #51a351);
+ background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#62c462),
+ to(#51a351));
+ background-image: -webkit-linear-gradient(top, #62c462, #51a351);
+ background-image: -o-linear-gradient(top, #62c462, #51a351);
+ background-image: linear-gradient(top, #62c462, #51a351);
+ background-repeat: repeat-x;
+ filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#62c462',
+ endColorstr='#51a351', GradientType=0);
+ border-color: #51a351 #51a351 #387038;
+ border-color: rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25);
+ filter: progid:DXImageTransform.Microsoft.gradient(enabled= false);
+}
+
+.btn-success:hover, .btn-success:active, .btn-success.active,
+ .btn-success.disabled, .btn-success[disabled] {
+ background-color: #51a351;
+}
+
+.btn-success:active, .btn-success.active {
+ background-color: #408140 \9;
+}
+
+.btn-info {
+ background-color: #49afcd;
+ background-image: -moz-linear-gradient(top, #5bc0de, #2f96b4);
+ background-image: -ms-linear-gradient(top, #5bc0de, #2f96b4);
+ background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#5bc0de),
+ to(#2f96b4));
+ background-image: -webkit-linear-gradient(top, #5bc0de, #2f96b4);
+ background-image: -o-linear-gradient(top, #5bc0de, #2f96b4);
+ background-image: linear-gradient(top, #5bc0de, #2f96b4);
+ background-repeat: repeat-x;
+ filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#5bc0de',
+ endColorstr='#2f96b4', GradientType=0);
+ border-color: #2f96b4 #2f96b4 #1f6377;
+ border-color: rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25);
+ filter: progid:DXImageTransform.Microsoft.gradient(enabled= false);
+}
+
+.btn-info:hover, .btn-info:active, .btn-info.active, .btn-info.disabled,
+ .btn-info[disabled] {
+ background-color: #2f96b4;
+}
+
+.btn-info:active, .btn-info.active {
+ background-color: #24748c \9;
+}
+
+.btn-inverse {
+ background-color: #393939;
+ background-image: -moz-linear-gradient(top, #454545, #262626);
+ background-image: -ms-linear-gradient(top, #454545, #262626);
+ background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#454545),
+ to(#262626));
+ background-image: -webkit-linear-gradient(top, #454545, #262626);
+ background-image: -o-linear-gradient(top, #454545, #262626);
+ background-image: linear-gradient(top, #454545, #262626);
+ background-repeat: repeat-x;
+ filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#454545',
+ endColorstr='#262626', GradientType=0);
+ border-color: #262626 #262626 #000000;
+ border-color: rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25);
+ filter: progid:DXImageTransform.Microsoft.gradient(enabled= false);
+}
+
+.btn-inverse:hover, .btn-inverse:active, .btn-inverse.active,
+ .btn-inverse.disabled, .btn-inverse[disabled] {
+ background-color: #262626;
+}
+
+.btn-inverse:active, .btn-inverse.active {
+ background-color: #0c0c0c \9;
+}
+
+button.btn, input[type="submit"].btn {
+ *padding-top: 2px;
+ *padding-bottom: 2px;
+}
+
+button.btn::-moz-focus-inner, input[type="submit"].btn::-moz-focus-inner
+ {
+ padding: 0;
+ border: 0;
+}
+
+button.btn.large, input[type="submit"].btn.large {
+ *padding-top: 7px;
+ *padding-bottom: 7px;
+}
+
+button.btn.small, input[type="submit"].btn.small {
+ *padding-top: 3px;
+ *padding-bottom: 3px;
+}
+
+[class^="icon-"], [class*=" icon-"] {
+ display: inline-block;
+ width: 14px;
+ height: 14px;
+ line-height: 14px;
+ vertical-align: text-top;
+ background-image: url("../img/glyphicons-halflings.png");
+ background-position: 14px 14px;
+ background-repeat: no-repeat;
+ *margin-right: .3em;
+}
+
+[class^="icon-"]:last-child, [class*=" icon-"]:last-child {
+ *margin-left: 0;
+}
+
+.icon-white {
+ background-image: url("../img/glyphicons-halflings-white.png");
+}
+
+.icon-glass {
+ background-position: 0 0;
+}
+
+.icon-music {
+ background-position: -24px 0;
+}
+
+.icon-search {
+ background-position: -48px 0;
+}
+
+.icon-envelope {
+ background-position: -72px 0;
+}
+
+.icon-heart {
+ background-position: -96px 0;
+}
+
+.icon-star {
+ background-position: -120px 0;
+}
+
+.icon-star-empty {
+ background-position: -144px 0;
+}
+
+.icon-user {
+ background-position: -168px 0;
+}
+
+.icon-film {
+ background-position: -192px 0;
+}
+
+.icon-th-large {
+ background-position: -216px 0;
+}
+
+.icon-th {
+ background-position: -240px 0;
+}
+
+.icon-th-list {
+ background-position: -264px 0;
+}
+
+.icon-ok {
+ background-position: -288px 0;
+}
+
+.icon-remove {
+ background-position: -312px 0;
+}
+
+.icon-zoom-in {
+ background-position: -336px 0;
+}
+
+.icon-zoom-out {
+ background-position: -360px 0;
+}
+
+.icon-off {
+ background-position: -384px 0;
+}
+
+.icon-signal {
+ background-position: -408px 0;
+}
+
+.icon-cog {
+ background-position: -432px 0;
+}
+
+.icon-trash {
+ background-position: -456px 0;
+}
+
+.icon-home {
+ background-position: 0 -24px;
+}
+
+.icon-file {
+ background-position: -24px -24px;
+}
+
+.icon-time {
+ background-position: -48px -24px;
+}
+
+.icon-road {
+ background-position: -72px -24px;
+}
+
+.icon-download-alt {
+ background-position: -96px -24px;
+}
+
+.icon-download {
+ background-position: -120px -24px;
+}
+
+.icon-upload {
+ background-position: -144px -24px;
+}
+
+.icon-inbox {
+ background-position: -168px -24px;
+}
+
+.icon-play-circle {
+ background-position: -192px -24px;
+}
+
+.icon-repeat {
+ background-position: -216px -24px;
+}
+
+.icon-refresh {
+ background-position: -240px -24px;
+}
+
+.icon-list-alt {
+ background-position: -264px -24px;
+}
+
+.icon-lock {
+ background-position: -287px -24px;
+}
+
+.icon-flag {
+ background-position: -312px -24px;
+}
+
+.icon-headphones {
+ background-position: -336px -24px;
+}
+
+.icon-volume-off {
+ background-position: -360px -24px;
+}
+
+.icon-volume-down {
+ background-position: -384px -24px;
+}
+
+.icon-volume-up {
+ background-position: -408px -24px;
+}
+
+.icon-qrcode {
+ background-position: -432px -24px;
+}
+
+.icon-barcode {
+ background-position: -456px -24px;
+}
+
+.icon-tag {
+ background-position: 0 -48px;
+}
+
+.icon-tags {
+ background-position: -25px -48px;
+}
+
+.icon-book {
+ background-position: -48px -48px;
+}
+
+.icon-bookmark {
+ background-position: -72px -48px;
+}
+
+.icon-print {
+ background-position: -96px -48px;
+}
+
+.icon-camera {
+ background-position: -120px -48px;
+}
+
+.icon-font {
+ background-position: -144px -48px;
+}
+
+.icon-bold {
+ background-position: -167px -48px;
+}
+
+.icon-italic {
+ background-position: -192px -48px;
+}
+
+.icon-text-height {
+ background-position: -216px -48px;
+}
+
+.icon-text-width {
+ background-position: -240px -48px;
+}
+
+.icon-align-left {
+ background-position: -264px -48px;
+}
+
+.icon-align-center {
+ background-position: -288px -48px;
+}
+
+.icon-align-right {
+ background-position: -312px -48px;
+}
+
+.icon-align-justify {
+ background-position: -336px -48px;
+}
+
+.icon-list {
+ background-position: -360px -48px;
+}
+
+.icon-indent-left {
+ background-position: -384px -48px;
+}
+
+.icon-indent-right {
+ background-position: -408px -48px;
+}
+
+.icon-facetime-video {
+ background-position: -432px -48px;
+}
+
+.icon-picture {
+ background-position: -456px -48px;
+}
+
+.icon-pencil {
+ background-position: 0 -72px;
+}
+
+.icon-map-marker {
+ background-position: -24px -72px;
+}
+
+.icon-adjust {
+ background-position: -48px -72px;
+}
+
+.icon-tint {
+ background-position: -72px -72px;
+}
+
+.icon-edit {
+ background-position: -96px -72px;
+}
+
+.icon-share {
+ background-position: -120px -72px;
+}
+
+.icon-check {
+ background-position: -144px -72px;
+}
+
+.icon-move {
+ background-position: -168px -72px;
+}
+
+.icon-step-backward {
+ background-position: -192px -72px;
+}
+
+.icon-fast-backward {
+ background-position: -216px -72px;
+}
+
+.icon-backward {
+ background-position: -240px -72px;
+}
+
+.icon-play {
+ background-position: -264px -72px;
+}
+
+.icon-pause {
+ background-position: -288px -72px;
+}
+
+.icon-stop {
+ background-position: -312px -72px;
+}
+
+.icon-forward {
+ background-position: -336px -72px;
+}
+
+.icon-fast-forward {
+ background-position: -360px -72px;
+}
+
+.icon-step-forward {
+ background-position: -384px -72px;
+}
+
+.icon-eject {
+ background-position: -408px -72px;
+}
+
+.icon-chevron-left {
+ background-position: -432px -72px;
+}
+
+.icon-chevron-right {
+ background-position: -456px -72px;
+}
+
+.icon-plus-sign {
+ background-position: 0 -96px;
+}
+
+.icon-minus-sign {
+ background-position: -24px -96px;
+}
+
+.icon-remove-sign {
+ background-position: -48px -96px;
+}
+
+.icon-ok-sign {
+ background-position: -72px -96px;
+}
+
+.icon-question-sign {
+ background-position: -96px -96px;
+}
+
+.icon-info-sign {
+ background-position: -120px -96px;
+}
+
+.icon-screenshot {
+ background-position: -144px -96px;
+}
+
+.icon-remove-circle {
+ background-position: -168px -96px;
+}
+
+.icon-ok-circle {
+ background-position: -192px -96px;
+}
+
+.icon-ban-circle {
+ background-position: -216px -96px;
+}
+
+.icon-arrow-left {
+ background-position: -240px -96px;
+}
+
+.icon-arrow-right {
+ background-position: -264px -96px;
+}
+
+.icon-arrow-up {
+ background-position: -289px -96px;
+}
+
+.icon-arrow-down {
+ background-position: -312px -96px;
+}
+
+.icon-share-alt {
+ background-position: -336px -96px;
+}
+
+.icon-resize-full {
+ background-position: -360px -96px;
+}
+
+.icon-resize-small {
+ background-position: -384px -96px;
+}
+
+.icon-plus {
+ background-position: -408px -96px;
+}
+
+.icon-minus {
+ background-position: -433px -96px;
+}
+
+.icon-asterisk {
+ background-position: -456px -96px;
+}
+
+.icon-exclamation-sign {
+ background-position: 0 -120px;
+}
+
+.icon-gift {
+ background-position: -24px -120px;
+}
+
+.icon-leaf {
+ background-position: -48px -120px;
+}
+
+.icon-fire {
+ background-position: -72px -120px;
+}
+
+.icon-eye-open {
+ background-position: -96px -120px;
+}
+
+.icon-eye-close {
+ background-position: -120px -120px;
+}
+
+.icon-warning-sign {
+ background-position: -144px -120px;
+}
+
+.icon-plane {
+ background-position: -168px -120px;
+}
+
+.icon-calendar {
+ background-position: -192px -120px;
+}
+
+.icon-random {
+ background-position: -216px -120px;
+}
+
+.icon-comment {
+ background-position: -240px -120px;
+}
+
+.icon-magnet {
+ background-position: -264px -120px;
+}
+
+.icon-chevron-up {
+ background-position: -288px -120px;
+}
+
+.icon-chevron-down {
+ background-position: -313px -119px;
+}
+
+.icon-retweet {
+ background-position: -336px -120px;
+}
+
+.icon-shopping-cart {
+ background-position: -360px -120px;
+}
+
+.icon-folder-close {
+ background-position: -384px -120px;
+}
+
+.icon-folder-open {
+ background-position: -408px -120px;
+}
+
+.icon-resize-vertical {
+ background-position: -432px -119px;
+}
+
+.icon-resize-horizontal {
+ background-position: -456px -118px;
+}
+
+.btn-group {
+ position: relative;
+ *zoom: 1;
+ *margin-left: .3em;
+}
+
+.btn-group:before, .btn-group:after {
+ display: table;
+ content: "";
+}
+
+.btn-group:after {
+ clear: both;
+}
+
+.btn-group:first-child {
+ *margin-left: 0;
+}
+
+.btn-group+.btn-group {
+ margin-left: 5px;
+}
+
+.btn-toolbar {
+ margin-top: 9px;
+ margin-bottom: 9px;
+}
+
+.btn-toolbar .btn-group {
+ display: inline-block;
+ *display: inline;
+ /* IE7 inline-block hack */
+ *zoom: 1;
+}
+
+.btn-group .btn {
+ position: relative;
+ float: left;
+ margin-left: -1px;
+ -webkit-border-radius: 0;
+ -moz-border-radius: 0;
+ border-radius: 0;
+}
+
+.btn-group .btn:first-child {
+ margin-left: 0;
+ -webkit-border-top-left-radius: 4px;
+ -moz-border-radius-topleft: 4px;
+ border-top-left-radius: 4px;
+ -webkit-border-bottom-left-radius: 4px;
+ -moz-border-radius-bottomleft: 4px;
+ border-bottom-left-radius: 4px;
+}
+
+.btn-group .btn:last-child, .btn-group .dropdown-toggle {
+ -webkit-border-top-right-radius: 4px;
+ -moz-border-radius-topright: 4px;
+ border-top-right-radius: 4px;
+ -webkit-border-bottom-right-radius: 4px;
+ -moz-border-radius-bottomright: 4px;
+ border-bottom-right-radius: 4px;
+}
+
+.btn-group .btn.large:first-child {
+ margin-left: 0;
+ -webkit-border-top-left-radius: 6px;
+ -moz-border-radius-topleft: 6px;
+ border-top-left-radius: 6px;
+ -webkit-border-bottom-left-radius: 6px;
+ -moz-border-radius-bottomleft: 6px;
+ border-bottom-left-radius: 6px;
+}
+
+.btn-group .btn.large:last-child, .btn-group .large.dropdown-toggle {
+ -webkit-border-top-right-radius: 6px;
+ -moz-border-radius-topright: 6px;
+ border-top-right-radius: 6px;
+ -webkit-border-bottom-right-radius: 6px;
+ -moz-border-radius-bottomright: 6px;
+ border-bottom-right-radius: 6px;
+}
+
+.btn-group .btn:hover, .btn-group .btn:focus, .btn-group .btn:active,
+ .btn-group .btn.active {
+ z-index: 2;
+}
+
+.btn-group .dropdown-toggle:active, .btn-group.open .dropdown-toggle {
+ outline: 0;
+}
+
+.btn-group .dropdown-toggle {
+ padding-left: 8px;
+ padding-right: 8px;
+ -webkit-box-shadow: inset 1px 0 0 rgba(255, 255, 255, 0.125), inset 0
+ 1px 0 rgba(255, 255, 255, 0.2), 0 1px 2px rgba(0, 0, 0, 0.05);
+ -moz-box-shadow: inset 1px 0 0 rgba(255, 255, 255, 0.125), inset 0 1px 0
+ rgba(255, 255, 255, 0.2), 0 1px 2px rgba(0, 0, 0, 0.05);
+ box-shadow: inset 1px 0 0 rgba(255, 255, 255, 0.125), inset 0 1px 0
+ rgba(255, 255, 255, 0.2), 0 1px 2px rgba(0, 0, 0, 0.05);
+ *padding-top: 5px;
+ *padding-bottom: 5px;
+}
+
+.btn-group.open {
+ *z-index: 1000;
+}
+
+.btn-group.open .dropdown-menu {
+ display: block;
+ margin-top: 1px;
+ -webkit-border-radius: 5px;
+ -moz-border-radius: 5px;
+ border-radius: 5px;
+}
+
+.btn-group.open .dropdown-toggle {
+ background-image: none;
+ -webkit-box-shadow: inset 0 1px 6px rgba(0, 0, 0, 0.15), 0 1px 2px
+ rgba(0, 0, 0, 0.05);
+ -moz-box-shadow: inset 0 1px 6px rgba(0, 0, 0, 0.15), 0 1px 2px
+ rgba(0, 0, 0, 0.05);
+ box-shadow: inset 0 1px 6px rgba(0, 0, 0, 0.15), 0 1px 2px
+ rgba(0, 0, 0, 0.05);
+}
+
+.btn .caret {
+ margin-top: 7px;
+ margin-left: 0;
+}
+
+.btn:hover .caret, .open.btn-group .caret {
+ opacity: 1;
+ filter: alpha(opacity = 100);
+}
+
+.btn-primary .caret, .btn-danger .caret, .btn-info .caret, .btn-success .caret,
+ .btn-inverse .caret {
+ border-top-color: #ffffff;
+ opacity: 0.75;
+ filter: alpha(opacity = 75);
+}
+
+.btn-small .caret {
+ margin-top: 4px;
+}
+
+.nav {
+ margin-left: 0;
+ margin-bottom: 18px;
+ list-style: none;
+}
+
+.nav>li>a {
+ display: block;
+}
+
+.nav>li>a:hover {
+ text-decoration: none;
+ background-color: #eeeeee;
+}
+
+.nav .nav-header {
+ display: block;
+ padding: 3px 15px;
+ font-size: 11px;
+ font-weight: bold;
+ line-height: 18px;
+ color: #999999;
+ text-shadow: 0 1px 0 rgba(255, 255, 255, 0.5);
+ text-transform: uppercase;
+}
+
+.nav li+.nav-header {
+ margin-top: 9px;
+}
+
+.nav-list {
+ padding-left: 14px;
+ padding-right: 14px;
+ margin-bottom: 0;
+}
+
+.nav-list>li>a, .nav-list .nav-header {
+ margin-left: -15px;
+ margin-right: -15px;
+ text-shadow: 0 1px 0 rgba(255, 255, 255, 0.5);
+}
+
+.nav-list>li>a {
+ padding: 3px 15px;
+}
+
+.nav-list .active>a, .nav-list .active>a:hover {
+ color: #ffffff;
+ text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.2);
+ background-color: #0088cc;
+}
+
+.nav-list [class^="icon-"] {
+ margin-right: 2px;
+}
+
+.nav-tabs, .nav-pills {
+ *zoom: 1;
+}
+
+.nav-tabs:before, .nav-pills:before, .nav-tabs:after, .nav-pills:after {
+ display: table;
+ content: "";
+}
+
+.nav-tabs:after, .nav-pills:after {
+ clear: both;
+}
+
+.nav-tabs>li, .nav-pills>li {
+ float: left;
+}
+
+.nav-tabs>li>a, .nav-pills>li>a {
+ padding-right: 12px;
+ padding-left: 12px;
+ margin-right: 2px;
+ line-height: 14px;
+}
+
+.nav-tabs {
+ border-bottom: 1px solid #ddd;
+}
+
+.nav-tabs>li {
+ margin-bottom: -1px;
+}
+
+.nav-tabs>li>a {
+ padding-top: 9px;
+ padding-bottom: 9px;
+ border: 1px solid transparent;
+ -webkit-border-radius: 4px 4px 0 0;
+ -moz-border-radius: 4px 4px 0 0;
+ border-radius: 4px 4px 0 0;
+}
+
+.nav-tabs>li>a:hover {
+ border-color: #eeeeee #eeeeee #dddddd;
+}
+
+.nav-tabs>.active>a, .nav-tabs>.active>a:hover {
+ color: #555555;
+ background-color: #ffffff;
+ border: 1px solid #ddd;
+ border-bottom-color: transparent;
+ cursor: default;
+}
+
+.nav-pills>li>a {
+ padding-top: 8px;
+ padding-bottom: 8px;
+ margin-top: 2px;
+ margin-bottom: 2px;
+ -webkit-border-radius: 5px;
+ -moz-border-radius: 5px;
+ border-radius: 5px;
+}
+
+.nav-pills .active>a, .nav-pills .active>a:hover {
+ color: #ffffff;
+ background-color: #0088cc;
+}
+
+.nav-stacked>li {
+ float: none;
+}
+
+.nav-stacked>li>a {
+ margin-right: 0;
+}
+
+.nav-tabs.nav-stacked {
+ border-bottom: 0;
+}
+
+.nav-tabs.nav-stacked>li>a {
+ border: 1px solid #ddd;
+ -webkit-border-radius: 0;
+ -moz-border-radius: 0;
+ border-radius: 0;
+}
+
+.nav-tabs.nav-stacked>li:first-child>a {
+ -webkit-border-radius: 4px 4px 0 0;
+ -moz-border-radius: 4px 4px 0 0;
+ border-radius: 4px 4px 0 0;
+}
+
+.nav-tabs.nav-stacked>li:last-child>a {
+ -webkit-border-radius: 0 0 4px 4px;
+ -moz-border-radius: 0 0 4px 4px;
+ border-radius: 0 0 4px 4px;
+}
+
+.nav-tabs.nav-stacked>li>a:hover {
+ border-color: #ddd;
+ z-index: 2;
+}
+
+.nav-pills.nav-stacked>li>a {
+ margin-bottom: 3px;
+}
+
+.nav-pills.nav-stacked>li:last-child>a {
+ margin-bottom: 1px;
+}
+
+.nav-tabs .dropdown-menu, .nav-pills .dropdown-menu {
+ margin-top: 1px;
+ border-width: 1px;
+}
+
+.nav-pills .dropdown-menu {
+ -webkit-border-radius: 4px;
+ -moz-border-radius: 4px;
+ border-radius: 4px;
+}
+
+.nav-tabs .dropdown-toggle .caret, .nav-pills .dropdown-toggle .caret {
+ border-top-color: #0088cc;
+ margin-top: 6px;
+}
+
+.nav-tabs .dropdown-toggle:hover .caret, .nav-pills .dropdown-toggle:hover .caret
+ {
+ border-top-color: #005580;
+}
+
+.nav-tabs .active .dropdown-toggle .caret, .nav-pills .active .dropdown-toggle .caret
+ {
+ border-top-color: #333333;
+}
+
+.nav>.dropdown.active>a:hover {
+ color: #000000;
+ cursor: pointer;
+}
+
+.nav-tabs .open .dropdown-toggle, .nav-pills .open .dropdown-toggle,
+ .nav>.open.active>a:hover {
+ color: #ffffff;
+ background-color: #999999;
+ border-color: #999999;
+}
+
+.nav .open .caret, .nav .open.active .caret, .nav .open a:hover .caret {
+ border-top-color: #ffffff;
+ opacity: 1;
+ filter: alpha(opacity = 100);
+}
+
+.tabs-stacked .open>a:hover {
+ border-color: #999999;
+}
+
+.tabbable {
+ *zoom: 1;
+}
+
+.tabbable:before, .tabbable:after {
+ display: table;
+ content: "";
+}
+
+.tabbable:after {
+ clear: both;
+}
+
+.tab-content {
+ overflow: hidden;
+}
+
+.tabs-below .nav-tabs, .tabs-right .nav-tabs, .tabs-left .nav-tabs {
+ border-bottom: 0;
+}
+
+.tab-content>.tab-pane, .pill-content>.pill-pane {
+ display: none;
+}
+
+.tab-content>.active, .pill-content>.active {
+ display: block;
+}
+
+.tabs-below .nav-tabs {
+ border-top: 1px solid #ddd;
+}
+
+.tabs-below .nav-tabs>li {
+ margin-top: -1px;
+ margin-bottom: 0;
+}
+
+.tabs-below .nav-tabs>li>a {
+ -webkit-border-radius: 0 0 4px 4px;
+ -moz-border-radius: 0 0 4px 4px;
+ border-radius: 0 0 4px 4px;
+}
+
+.tabs-below .nav-tabs>li>a:hover {
+ border-bottom-color: transparent;
+ border-top-color: #ddd;
+}
+
+.tabs-below .nav-tabs .active>a, .tabs-below .nav-tabs .active>a:hover {
+ border-color: transparent #ddd #ddd #ddd;
+}
+
+.tabs-left .nav-tabs>li, .tabs-right .nav-tabs>li {
+ float: none;
+}
+
+.tabs-left .nav-tabs>li>a, .tabs-right .nav-tabs>li>a {
+ min-width: 74px;
+ margin-right: 0;
+ margin-bottom: 3px;
+}
+
+.tabs-left .nav-tabs {
+ float: left;
+ margin-right: 19px;
+ border-right: 1px solid #ddd;
+}
+
+.tabs-left .nav-tabs>li>a {
+ margin-right: -1px;
+ -webkit-border-radius: 4px 0 0 4px;
+ -moz-border-radius: 4px 0 0 4px;
+ border-radius: 4px 0 0 4px;
+}
+
+.tabs-left .nav-tabs>li>a:hover {
+ border-color: #eeeeee #dddddd #eeeeee #eeeeee;
+}
+
+.tabs-left .nav-tabs .active>a, .tabs-left .nav-tabs .active>a:hover {
+ border-color: #ddd transparent #ddd #ddd;
+ *border-right-color: #ffffff;
+}
+
+.tabs-right .nav-tabs {
+ float: right;
+ margin-left: 19px;
+ border-left: 1px solid #ddd;
+}
+
+.tabs-right .nav-tabs>li>a {
+ margin-left: -1px;
+ -webkit-border-radius: 0 4px 4px 0;
+ -moz-border-radius: 0 4px 4px 0;
+ border-radius: 0 4px 4px 0;
+}
+
+.tabs-right .nav-tabs>li>a:hover {
+ border-color: #eeeeee #eeeeee #eeeeee #dddddd;
+}
+
+.tabs-right .nav-tabs .active>a, .tabs-right .nav-tabs .active>a:hover {
+ border-color: #ddd #ddd #ddd transparent;
+ *border-left-color: #ffffff;
+}
+
+.navbar {
+ overflow: visible;
+ margin-bottom: 18px;
+}
+
+.navbar-inner {
+ padding-left: 20px;
+ padding-right: 20px;
+ background-color: #2c2c2c;
+ background-image: -moz-linear-gradient(top, +mozColor1+, +mozColor2+);
+ background-image: -ms-linear-gradient(top, +mozColor1+, +mozColor2+);
+ background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#333333),
+ to(#222222));
+ background-image: -webkit-linear-gradient(top, +mozColor1+, +mozColor2+);
+ background-image: -o-linear-gradient(top, +mozColor1+, +mozColor2+);
+ background-image: linear-gradient(top, +mozColor1+, +mozColor2+);
+ background-repeat: repeat-x;
+ filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#333333',
+ endColorstr='#222222', GradientType=0);
+ -webkit-border-radius: 4px;
+ -moz-border-radius: 4px;
+ border-radius: 4px;
+ -webkit-box-shadow: 0 1px 3px rgba(0, 0, 0, 0.25), inset 0 -1px 0
+ rgba(0, 0, 0, 0.1);
+ -moz-box-shadow: 0 1px 3px rgba(0, 0, 0, 0.25), inset 0 -1px 0
+ rgba(0, 0, 0, 0.1);
+ box-shadow: 0 1px 3px rgba(0, 0, 0, 0.25), inset 0 -1px 0
+ rgba(0, 0, 0, 0.1);
+}
+
+.btn-navbar {
+ display: none;
+ float: right;
+ padding: 7px 10px;
+ margin-left: 5px;
+ margin-right: 5px;
+ background-color: #2c2c2c;
+ background-image: -moz-linear-gradient(top, +mozColor1+, +mozColor2+);
+ background-image: -ms-linear-gradient(top, +mozColor1+, +mozColor2+);
+ background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#333333),
+ to(#222222));
+ background-image: -webkit-linear-gradient(top, +mozColor1+, +mozColor2+);
+ background-image: -o-linear-gradient(top, +mozColor1+, +mozColor2+);
+ background-image: linear-gradient(top, +mozColor1+, +mozColor2+);
+ background-repeat: repeat-x;
+ filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#333333',
+ endColorstr='#222222', GradientType=0);
+ border-color: #222222 #222222 #000000;
+ border-color: rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25);
+ filter: progid:DXImageTransform.Microsoft.gradient(enabled= false);
+ -webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.1), 0 1px 0
+ rgba(255, 255, 255, 0.075);
+ -moz-box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.1), 0 1px 0
+ rgba(255, 255, 255, 0.075);
+ box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.1), 0 1px 0
+ rgba(255, 255, 255, 0.075);
+}
+
+.btn-navbar:hover, .btn-navbar:active, .btn-navbar.active, .btn-navbar.disabled,
+ .btn-navbar[disabled] {
+ background-color: #222222;
+}
+
+.btn-navbar:active, .btn-navbar.active {
+ background-color: #080808 \9;
+}
+
+.btn-navbar .icon-bar {
+ display: block;
+ width: 18px;
+ height: 2px;
+ background-color: #f5f5f5;
+ -webkit-border-radius: 1px;
+ -moz-border-radius: 1px;
+ border-radius: 1px;
+ -webkit-box-shadow: 0 1px 0 rgba(0, 0, 0, 0.25);
+ -moz-box-shadow: 0 1px 0 rgba(0, 0, 0, 0.25);
+ box-shadow: 0 1px 0 rgba(0, 0, 0, 0.25);
+}
+
+.btn-navbar .icon-bar+.icon-bar {
+ margin-top: 3px;
+}
+
+.nav-collapse.collapse {
+ height: auto;
+}
+
+.navbar .brand:hover {
+ text-decoration: none;
+ color: +ooptionhover+;
+}
+
+.navbar .brand {
+ float: left;
+ display: block;
+ padding: 8px 20px 12px;
+ margin-left: -100px;
+ font-size: 24px;
+ font-weight: 200;
+ line-height: 1;
+ color: +ooptioncolor+;
+}
+
+.navbar .navbar-text {
+ margin-bottom: 0;
+ line-height: 40px;
+ color: #999999;
+}
+
+.navbar .navbar-text a:hover {
+ color: #ffffff;
+ background-color: transparent;
+}
+
+.navbar .btn, .navbar .btn-group {
+ margin-top: 5px;
+}
+
+.navbar .btn-group .btn {
+ margin-top: 0;
+}
+
+.navbar-form {
+ margin-bottom: 0;
+ *zoom: 1;
+}
+
+.navbar-form:before, .navbar-form:after {
+ display: table;
+ content: "";
+}
+
+.navbar-form:after {
+ clear: both;
+}
+
+.navbar-form input, .navbar-form select {
+ display: inline-block;
+ margin-top: 5px;
+ margin-bottom: 0;
+}
+
+.navbar-form .radio, .navbar-form .checkbox {
+ margin-top: 5px;
+}
+
+.navbar-form input[type="image"], .navbar-form input[type="checkbox"],
+ .navbar-form input[type="radio"] {
+ margin-top: 3px;
+}
+
+.navbar-form .input-append, .navbar-form .input-prepend {
+ margin-top: 6px;
+ white-space: nowrap;
+}
+
+.navbar-form .input-append input, .navbar-form .input-prepend input {
+ margin-top: 0;
+}
+
+.navbar-search {
+ position: relative;
+ float: left;
+ margin-top: 6px;
+ margin-bottom: 0;
+}
+
+.navbar-search .search-query {
+ padding: 4px 9px;
+ font-family: "Helvetica Neue", Helvetica, Arial, sans-serif;
+ font-size: 13px;
+ font-weight: normal;
+ line-height: 1;
+ color: #ffffff;
+ color: rgba(255, 255, 255, 0.75);
+ background: #666;
+ background: rgba(255, 255, 255, 0.3);
+ border: 1px solid #111;
+ -webkit-box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.1), 0 1px 0px
+ rgba(255, 255, 255, 0.15);
+ -moz-box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.1), 0 1px 0px
+ rgba(255, 255, 255, 0.15);
+ box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.1), 0 1px 0px
+ rgba(255, 255, 255, 0.15);
+ -webkit-transition: none;
+ -moz-transition: none;
+ -ms-transition: none;
+ -o-transition: none;
+ transition: none;
+}
+
+.navbar-search .search-query :-moz-placeholder {
+ color: #eeeeee;
+}
+
+.navbar-search .search-query::-webkit-input-placeholder {
+ color: #eeeeee;
+}
+
+.navbar-search .search-query:hover {
+ color: #ffffff;
+ background-color: #999999;
+ background-color: rgba(255, 255, 255, 0.5);
+}
+
+.navbar-search .search-query:focus, .navbar-search .search-query.focused
+ {
+ padding: 5px 10px;
+ color: #333333;
+ text-shadow: 0 1px 0 #ffffff;
+ background-color: #ffffff;
+ border: 0;
+ -webkit-box-shadow: 0 0 3px rgba(0, 0, 0, 0.15);
+ -moz-box-shadow: 0 0 3px rgba(0, 0, 0, 0.15);
+ box-shadow: 0 0 3px rgba(0, 0, 0, 0.15);
+ outline: 0;
+}
+
+.navbar-fixed-top {
+ position: fixed;
+ top: 0;
+ right: 0;
+ left: 0;
+ z-index: 1030;
+}
+
+.navbar-fixed-top .navbar-inner {
+ padding-left: 0;
+ padding-right: 0;
+ -webkit-border-radius: 0;
+ -moz-border-radius: 0;
+ border-radius: 0;
+}
+
+.navbar .nav {
+ position: relative;
+ left: 0;
+ display: block;
+ float: left;
+ margin: 0 10px 0 0;
+}
+
+.navbar .nav.pull-right {
+ float: right;
+}
+
+.navbar .nav>li {
+ display: block;
+ float: left;
+}
+
+.navbar .nav>li>* {
+ float: none;
+ padding: 13px 10px 11px;
+ line-height: 19px;
+ color: +ooptmaincolor+;
+ text-decoration: none;
+ text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.25);
+}
+
+.navbar .nav>li>a:hover {
+ background-color: transparent;
+ color: #ffffff;
+ text-decoration: none;
+}
+
+.navbar .nav .active>a, .navbar .nav .active>a:hover {
+ color: #ffffff;
+ text-decoration: none;
+ background-color: #222222;
+}
+
+.navbar .divider-vertical {
+ height: 40px;
+ width: 1px;
+ margin: 0 9px;
+ overflow: hidden;
+ background-color: #222222;
+ border-right: 1px solid #333333;
+}
+
+.navbar .nav.pull-right {
+ margin-left: 10px;
+ margin-right: 0;
+}
+
+.navbar .dropdown-menu {
+ margin-top: 1px;
+ -webkit-border-radius: 4px;
+ -moz-border-radius: 4px;
+ border-radius: 4px;
+}
+
+.navbar .dropdown-menu:before {
+ content: '';
+ display: inline-block;
+ border-left: 7px solid transparent;
+ border-right: 7px solid transparent;
+ border-bottom: 7px solid #ccc;
+ border-bottom-color: rgba(0, 0, 0, 0.2);
+ position: absolute;
+ top: -7px;
+ left: 9px;
+}
+
+.navbar .dropdown-menu:after {
+ content: '';
+ display: inline-block;
+ border-left: 6px solid transparent;
+ border-right: 6px solid transparent;
+ border-bottom: 6px solid #ffffff;
+ position: absolute;
+ top: -6px;
+ left: 10px;
+}
+
+.navbar .nav .dropdown-toggle .caret, .navbar .nav .open.dropdown .caret
+ {
+ border-top-color: #ffffff;
+}
+
+.navbar .nav .active .caret {
+ opacity: 1;
+ filter: alpha(opacity = 100);
+}
+
+.navbar .nav .open>.dropdown-toggle, .navbar .nav .active>.dropdown-toggle,
+ .navbar .nav .open.active>.dropdown-toggle {
+ background-color: transparent;
+}
+
+.navbar .nav .active>.dropdown-toggle:hover {
+ color: #ffffff;
+}
+
+.navbar .nav.pull-right .dropdown-menu {
+ left: auto;
+ right: 0;
+}
+
+.navbar .nav.pull-right .dropdown-menu:before {
+ left: auto;
+ right: 12px;
+}
+
+.navbar .nav.pull-right .dropdown-menu:after {
+ left: auto;
+ right: 13px;
+}
+
+.breadcrumb {
+ padding: 7px 14px;
+ margin: 0 0 18px;
+ background-color: #fbfbfb;
+ background-image: -moz-linear-gradient(top, #ffffff, #f5f5f5);
+ background-image: -ms-linear-gradient(top, #ffffff, #f5f5f5);
+ background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#ffffff),
+ to(#f5f5f5));
+ background-image: -webkit-linear-gradient(top, #ffffff, #f5f5f5);
+ background-image: -o-linear-gradient(top, #ffffff, #f5f5f5);
+ background-image: linear-gradient(top, #ffffff, #f5f5f5);
+ background-repeat: repeat-x;
+ filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffff',
+ endColorstr='#f5f5f5', GradientType=0);
+ border: 1px solid #ddd;
+ -webkit-border-radius: 3px;
+ -moz-border-radius: 3px;
+ border-radius: 3px;
+ -webkit-box-shadow: inset 0 1px 0 #ffffff;
+ -moz-box-shadow: inset 0 1px 0 #ffffff;
+ box-shadow: inset 0 1px 0 #ffffff;
+}
+
+.breadcrumb li {
+ display: inline-block;
+ text-shadow: 0 1px 0 #ffffff;
+}
+
+.breadcrumb .divider {
+ padding: 0 5px;
+ color: #999999;
+}
+
+.breadcrumb .active a {
+ color: #333333;
+}
+
+.pagination {
+ height: 36px;
+ margin: 18px 0;
+}
+
+.pagination ul {
+ display: inline-block;
+ *display: inline;
+ /* IE7 inline-block hack */
+ *zoom: 1;
+ margin-left: 0;
+ margin-bottom: 0;
+ -webkit-border-radius: 3px;
+ -moz-border-radius: 3px;
+ border-radius: 3px;
+ -webkit-box-shadow: 0 1px 2px rgba(0, 0, 0, 0.05);
+ -moz-box-shadow: 0 1px 2px rgba(0, 0, 0, 0.05);
+ box-shadow: 0 1px 2px rgba(0, 0, 0, 0.05);
+}
+
+.pagination li {
+ display: inline;
+}
+
+.pagination a {
+ float: left;
+ padding: 0 14px;
+ line-height: 34px;
+ text-decoration: none;
+ border: 1px solid #ddd;
+ border-left-width: 0;
+}
+
+.pagination a:hover, .pagination .active a {
+ background-color: #f5f5f5;
+}
+
+.pagination .active a {
+ color: #999999;
+ cursor: default;
+}
+
+.pagination .disabled a, .pagination .disabled a:hover {
+ color: #999999;
+ background-color: transparent;
+ cursor: default;
+}
+
+.pagination li:first-child a {
+ border-left-width: 1px;
+ -webkit-border-radius: 3px 0 0 3px;
+ -moz-border-radius: 3px 0 0 3px;
+ border-radius: 3px 0 0 3px;
+}
+
+.pagination li:last-child a {
+ -webkit-border-radius: 0 3px 3px 0;
+ -moz-border-radius: 0 3px 3px 0;
+ border-radius: 0 3px 3px 0;
+}
+
+.pagination-centered {
+ text-align: center;
+}
+
+.pagination-right {
+ text-align: right;
+}
+
+.pager {
+ margin-left: 0;
+ margin-bottom: 18px;
+ list-style: none;
+ text-align: center;
+ *zoom: 1;
+}
+
+.pager:before, .pager:after {
+ display: table;
+ content: "";
+}
+
+.pager:after {
+ clear: both;
+}
+
+.pager li {
+ display: inline;
+}
+
+.pager a {
+ display: inline-block;
+ padding: 5px 14px;
+ background-color: #fff;
+ border: 1px solid #ddd;
+ -webkit-border-radius: 15px;
+ -moz-border-radius: 15px;
+ border-radius: 15px;
+}
+
+.pager a:hover {
+ text-decoration: none;
+ background-color: #f5f5f5;
+}
+
+.pager .next a {
+ float: right;
+}
+
+.pager .previous a {
+ float: left;
+}
+
+.alert {
+ padding: 8px 35px 8px 14px;
+ margin-bottom: 18px;
+ text-shadow: 0 1px 0 rgba(255, 255, 255, 0.5);
+ background-color: #fcf8e3;
+ border: 1px solid #fbeed5;
+ -webkit-border-radius: 4px;
+ -moz-border-radius: 4px;
+ border-radius: 4px;
+}
+
+.alert, .alert-heading {
+ color: #c09853;
+}
+
+.alert .close {
+ position: relative;
+ top: -2px;
+ right: -21px;
+ line-height: 18px;
+}
+
+.alert-success {
+ background-color: #dff0d8;
+ border-color: #d6e9c6;
+}
+
+.alert-success, .alert-success .alert-heading {
+ color: #468847;
+}
+
+.alert-danger, .alert-error {
+ background-color: #f2dede;
+ border-color: #eed3d7;
+}
+
+.alert-danger, .alert-error, .alert-danger .alert-heading, .alert-error .alert-heading
+ {
+ color: #b94a48;
+}
+
+.alert-info {
+ background-color: #d9edf7;
+ border-color: #bce8f1;
+}
+
+.alert-info, .alert-info .alert-heading {
+ color: #3a87ad;
+}
+
+.alert-block {
+ padding-top: 14px;
+ padding-bottom: 14px;
+}
+
+.alert-block>p, .alert-block>ul {
+ margin-bottom: 0;
+}
+
+.alert-block p+p {
+ margin-top: 5px;
+}
+
+.pull-right {
+ float: right;
+}
+
+.pull-left {
+ float: left;
+}
+
+.hide {
+ display: none;
+}
+
+.show {
+ display: block;
+}
+
+.invisible {
+ visibility: hidden;
+}
\ No newline at end of file
diff --git a/screwdriver-3.5.6/box/snippets/css/hammer_A0.css b/screwdriver-3.5.6/box/snippets/css/hammer_A0.css
new file mode 100644
index 0000000..0dd8417
--- /dev/null
+++ b/screwdriver-3.5.6/box/snippets/css/hammer_A0.css
@@ -0,0 +1,126 @@
+body {
+ font-family: Georgia, "Times New Roman", Times, serif;
+ font-size: 12px;
+ background-color: #CCFF99;
+ color: #000080;
+ border-top: 4px solid #993366;
+ border-right: 4px none #993366;
+ border-bottom: 4px solid #993366;
+ border-left: 4px none #993366;
+}
+
+/* Headings */
+h1 {
+ font-size: 145%
+}
+
+td {
+ font-family: "Times New Roman", Times, serif;
+ font-size: 17px;
+}
+
+th {
+ font-family: "Times New Roman", Times, serif;
+ font-size: 14px;
+}
+
+form {
+ font-family: "Times New Roman", Times, serif;
+ font-size: 12px;
+}
+
+input {
+ font-family: "Times New Roman", Times, serif;
+ font-size: 12px;
+}
+
+textarea {
+ font-family: "Times New Roman", Times, serif;
+ font-size: 12px;
+ border: thick double;
+}
+
+select {
+ font-family: "Times New Roman", Times, serif;
+ font-size: 12px;
+}
+
+ul {
+ font-family: "Times New Roman", Times, serif;
+ font-size: 12px;
+ list-style-type: circle;
+ list-style-position: outside;
+}
+
+li {
+ font-family: "Times New Roman", Times, serif;
+ font-size: 12px;
+}
+
+ol {
+ font-family: "Times New Roman", Times, serif;
+ font-size: 12px;
+ list-style-type: upper-alpha;
+ list-style-position: outside;
+}
+
+.storia {
+ font-family: "Times New Roman", Times, serif;
+ font-size: 16px;
+ color: #007F00;
+ font-style: Normal;
+}
+
+/* Table colors */
+.TableHeadingColor {
+ background: #CCCCFF
+} /* Dark mauve */
+.TableSubHeadingColor {
+ background: #EEEEFF
+} /* Light mauve */
+.TableRowColor {
+ background: #FFFFFF
+} /* White */
+
+/* Font used in left-hand frame lists */
+.FrameTitleFont {
+ font-size: 110%;
+ font-family: Helvetica, Arial, sans-serif
+}
+
+.FrameHeadingFont {
+ font-size: 110%;
+ font-family: Helvetica, Arial, sans-serif
+}
+
+.FrameItemFont {
+ font-size: 110%;
+ font-family: Helvetica, Arial, sans-serif
+}
+
+/* Navigation bar fonts and colors */
+.NavBarCell1 {
+ background-color: #EEEEFF;
+} /* Light mauve */
+.NavBarCell1Rev {
+ background-color: #00008B;
+} /* Dark Blue */
+.NavBarFont1 {
+ font-family: Arial, Helvetica, sans-serif;
+ color: #000000;
+}
+
+.NavBarFont1Rev {
+ font-family: Arial, Helvetica, sans-serif;
+ color: #FFFFFF;
+}
+
+.NavBarCell2 {
+ font-family: Arial, Helvetica, sans-serif;
+ background-color: #FFFFFF;
+}
+
+.NavBarCell3 {
+ font-family: Arial, Helvetica, sans-serif;
+ background-color: #FFFFFF;
+}
\ No newline at end of file
diff --git a/screwdriver-3.5.6/box/snippets/css/screwdriver.css b/screwdriver-3.5.6/box/snippets/css/screwdriver.css
new file mode 100644
index 0000000..4412f31
--- /dev/null
+++ b/screwdriver-3.5.6/box/snippets/css/screwdriver.css
@@ -0,0 +1,57 @@
+.checkdress {
+ margin-top: 0px;
+ margin-bottom: 14px;
+}
+
+.labeldress {
+ margin-top: 0px;
+ margin-bottom: -10px;
+}
+
+.formdress {
+ margin-left: 40px;
+}
+
+.radiodress {
+ font-size: 13px;
+}
+
+.formn_btn {
+ display: inline-block;
+ padding: 4px 12px 3px;
+ margin-bottom: 9px;
+ font-size: 13px;
+ line-height: 18px;
+ color: blue;
+ text-align: center;
+ text-shadow: 0 1px 1px rgba(255, 255, 255, 0.75);
+ vertical-align: middle;
+ background-color: #f5f5f5;
+ background-image: -moz-linear-gradient(top, #ffffff, #e6e6e6);
+ background-image: -ms-linear-gradient(top, #ffffff, #e6e6e6);
+ background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#ffffff),
+ to(#e6e6e6));
+ background-image: -webkit-linear-gradient(top, #ffffff, #e6e6e6);
+ background-image: -o-linear-gradient(top, #ffffff, #e6e6e6);
+ background-image: linear-gradient(top, #ffffff, #e6e6e6);
+ background-repeat: repeat-x;
+ filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffff',
+ endColorstr='#e6e6e6', GradientType=0);
+ border-color: #e6e6e6 #e6e6e6 #bfbfbf;
+ border-color: rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25);
+ filter: progid:DXImageTransform.Microsoft.gradient(enabled= false);
+ border: 1px solid #ccc;
+ border-bottom-color: #bbb;
+ -webkit-border-radius: 4px;
+ -moz-border-radius: 4px;
+ border-radius: 4px;
+ -webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.2), 0 1px 2px
+ rgba(0, 0, 0, 0.05);
+ -moz-box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.2), 0 1px 2px
+ rgba(0, 0, 0, 0.05);
+ box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.2), 0 1px 2px
+ rgba(0, 0, 0, 0.05);
+ cursor: pointer;
+ filter: progid:DXImageTransform.Microsoft.gradient(enabled= false);
+ *margin-left: .3em;
+}
\ No newline at end of file
diff --git a/screwdriver-3.5.6/box/snippets/depen_0.txt b/screwdriver-3.5.6/box/snippets/depen_0.txt
new file mode 100644
index 0000000..6a8f066
--- /dev/null
+++ b/screwdriver-3.5.6/box/snippets/depen_0.txt
@@ -0,0 +1,5 @@
+
+ javax.servlet
+ jsp-api
+ 2.0
+
\ No newline at end of file
diff --git a/screwdriver-3.5.6/box/snippets/depen_1.txt b/screwdriver-3.5.6/box/snippets/depen_1.txt
new file mode 100644
index 0000000..62101ef
--- /dev/null
+++ b/screwdriver-3.5.6/box/snippets/depen_1.txt
@@ -0,0 +1,42 @@
+
+ javax.servlet
+ javax.servlet-api
+ 3.1.0
+
+
+ xercesImpl
+ xerces
+ 2.9.1
+
+
+
+ commons-fileupload
+ commons-fileupload
+ 1.3.1
+
+
+ org.apache.commons
+ commons-io
+ 1.3.2
+
+
+ commons-codec
+ commons-codec
+ 1.4
+
+
+
+ net.sourceforge.wurfl
+ wurfl
+ 1.3.1.1
+
+
+ logback-classic
+ ch.qos.logback
+
+
+ slf4j-api
+ org.slf4j
+
+
+
\ No newline at end of file
diff --git a/screwdriver-3.5.6/box/snippets/depen_2.txt b/screwdriver-3.5.6/box/snippets/depen_2.txt
new file mode 100644
index 0000000..b4fcee2
--- /dev/null
+++ b/screwdriver-3.5.6/box/snippets/depen_2.txt
@@ -0,0 +1,42 @@
+
+ xercesImpl
+ xerces
+ 2.9.1
+
+
+ javax.servlet
+ jsp-api
+ 2.0
+
+
+
+ commons-codec
+ commons-codec
+ 1.4
+
+
+ commons-fileupload
+ commons-fileupload
+ 1.2.2
+
+
+
+ net.sourceforge.wurfl
+ wurfl
+ 1.3.1.1
+
+
+ logback-classic
+ ch.qos.logback
+
+
+ slf4j-api
+ org.slf4j
+
+
+
+
+ javassist
+ javassist
+ 3.12.1.GA
+
\ No newline at end of file
diff --git a/screwdriver-3.5.6/box/snippets/depen_3.txt b/screwdriver-3.5.6/box/snippets/depen_3.txt
new file mode 100644
index 0000000..7bd9686
--- /dev/null
+++ b/screwdriver-3.5.6/box/snippets/depen_3.txt
@@ -0,0 +1,37 @@
+
+ cglib
+ cglib-nodep
+ 2.2.2
+ runtime
+
+
+ com.h2database
+ h2
+ 1.3.163
+ runtime
+
+
+ javax.servlet
+ jsp-api
+ 2.0
+
+
+ javax.validation
+ validation-api
+ 1.0.0.GA
+
+
+ joda-time
+ joda-time
+ 2.0
+
+
+ org.slf4j
+ slf4j-api
+ 1.6.4
+
+
+ org.slf4j
+ slf4j-log4j12
+ 1.6.4
+
\ No newline at end of file
diff --git a/screwdriver-3.5.6/box/snippets/depen_4.txt b/screwdriver-3.5.6/box/snippets/depen_4.txt
new file mode 100644
index 0000000..4f70d14
--- /dev/null
+++ b/screwdriver-3.5.6/box/snippets/depen_4.txt
@@ -0,0 +1,35 @@
+
+ xercesImpl
+ xerces
+ 2.9.1
+
+
+ javax.servlet
+ jsp-api
+ 2.0
+
+
+ commons-codec
+ commons-codec
+ 1.4
+
+
+ commons-fileupload
+ commons-fileupload
+ 1.2.2
+
+
+ javassist
+ javassist
+ 3.12.1.GA
+
+
+ org.slf4j
+ slf4j-log4j12
+ 1.7.5
+
+
+ org.slf4j
+ slf4j-api
+ 1.7.5
+
\ No newline at end of file
diff --git a/screwdriver-3.5.6/box/snippets/depen_apache_ldap.txt b/screwdriver-3.5.6/box/snippets/depen_apache_ldap.txt
new file mode 100644
index 0000000..ad26fde
--- /dev/null
+++ b/screwdriver-3.5.6/box/snippets/depen_apache_ldap.txt
@@ -0,0 +1,20 @@
+
+ org.apache.directory.server
+ apacheds-core
+ 1.5.5
+
+
+ org.apache.directory.server
+ apacheds-protocol-ldap
+ 1.5.5
+
+
+ org.apache.directory.shared
+ shared-ldap
+ 0.9.15
+
+
+ org.springframework.security
+ spring-security-ldap
+ 3.1.0.RELEASE
+
\ No newline at end of file
diff --git a/screwdriver-3.5.6/box/snippets/depen_captcha_1.1.txt b/screwdriver-3.5.6/box/snippets/depen_captcha_1.1.txt
new file mode 100644
index 0000000..ac7e44a
--- /dev/null
+++ b/screwdriver-3.5.6/box/snippets/depen_captcha_1.1.txt
@@ -0,0 +1,5 @@
+
+ com.google.code.maven-play-plugin.org.playframework
+ jj-simplecaptcha
+ 1.1
+
\ No newline at end of file
diff --git a/screwdriver-3.5.6/box/snippets/depen_captcha_1.2.1.txt b/screwdriver-3.5.6/box/snippets/depen_captcha_1.2.1.txt
new file mode 100644
index 0000000..337358f
--- /dev/null
+++ b/screwdriver-3.5.6/box/snippets/depen_captcha_1.2.1.txt
@@ -0,0 +1,5 @@
+
+ com.google.code.maven-play-plugin.org.playframework
+ jj-simplecaptcha
+ 1.2.1
+
\ No newline at end of file
diff --git a/screwdriver-3.5.6/box/snippets/depen_hvalid.txt b/screwdriver-3.5.6/box/snippets/depen_hvalid.txt
new file mode 100644
index 0000000..e8a6a7f
--- /dev/null
+++ b/screwdriver-3.5.6/box/snippets/depen_hvalid.txt
@@ -0,0 +1,5 @@
+
+ org.hibernate
+ hibernate-validator
+ +hvalid+
+
\ No newline at end of file
diff --git a/screwdriver-3.5.6/box/snippets/depen_jackson.txt b/screwdriver-3.5.6/box/snippets/depen_jackson.txt
new file mode 100644
index 0000000..6898c23
--- /dev/null
+++ b/screwdriver-3.5.6/box/snippets/depen_jackson.txt
@@ -0,0 +1,11 @@
+
+ org.codehaus.jackson
+ jackson-core-asl
+ +jackson+
+
+
+ org.codehaus.jackson
+ jackson-mapper-asl
+ +jackson+
+ runtime
+
\ No newline at end of file
diff --git a/screwdriver-3.5.6/box/snippets/depen_secu_3.1.txt b/screwdriver-3.5.6/box/snippets/depen_secu_3.1.txt
new file mode 100644
index 0000000..c681b34
--- /dev/null
+++ b/screwdriver-3.5.6/box/snippets/depen_secu_3.1.txt
@@ -0,0 +1,26 @@
+
+ org.springframework.security
+ spring-security-core
+ ${org.springframework.security.version}
+
+
+ org.springframework.security
+ spring-security-web
+ ${org.springframework.security.version}
+
+
+ org.springframework.security
+ spring-security-config
+ ${org.springframework.security.version}
+
+
+ spring-asm
+ org.springframework
+
+
+
+
+ org.springframework.security
+ spring-security-taglibs
+ ${org.springframework.security.version}
+
\ No newline at end of file
diff --git a/screwdriver-3.5.6/box/snippets/depen_secu_3.2.txt b/screwdriver-3.5.6/box/snippets/depen_secu_3.2.txt
new file mode 100644
index 0000000..c681b34
--- /dev/null
+++ b/screwdriver-3.5.6/box/snippets/depen_secu_3.2.txt
@@ -0,0 +1,26 @@
+
+ org.springframework.security
+ spring-security-core
+ ${org.springframework.security.version}
+
+
+ org.springframework.security
+ spring-security-web
+ ${org.springframework.security.version}
+
+
+ org.springframework.security
+ spring-security-config
+ ${org.springframework.security.version}
+
+
+ spring-asm
+ org.springframework
+
+
+
+
+ org.springframework.security
+ spring-security-taglibs
+ ${org.springframework.security.version}
+
\ No newline at end of file
diff --git a/screwdriver-3.5.6/box/snippets/depen_spring_3.1.0.RELEASE.txt b/screwdriver-3.5.6/box/snippets/depen_spring_3.1.0.RELEASE.txt
new file mode 100644
index 0000000..0d61930
--- /dev/null
+++ b/screwdriver-3.5.6/box/snippets/depen_spring_3.1.0.RELEASE.txt
@@ -0,0 +1,66 @@
+
+ org.springframework
+ spring-core
+ ${spring.version}
+
+
+ org.springframework
+ spring-expression
+ ${spring.version}
+
+
+ org.springframework
+ spring-beans
+ ${spring.version}
+
+
+ org.springframework
+ spring-aop
+ ${spring.version}
+
+
+ org.springframework
+ spring-context
+ ${spring.version}
+
+
+ org.springframework
+ spring-context-support
+ ${spring.version}
+
+
+ org.springframework
+ spring-tx
+ ${spring.version}
+
+
+ org.springframework
+ spring-orm
+ ${spring.version}
+
+
+ org.springframework
+ spring-web
+ ${spring.version}
+
+
+ org.springframework
+ spring-webmvc
+ ${spring.version}
+
+
+ org.springframework
+ spring-asm
+ ${spring.version}
+
+
+ org.springframework
+ spring-jdbc
+ ${spring.version}
+
+
+ javax.servlet
+ jstl
+ 1.2
+
+
\ No newline at end of file
diff --git a/screwdriver-3.5.6/box/snippets/depen_spring_3.1.1.RELEASE.txt b/screwdriver-3.5.6/box/snippets/depen_spring_3.1.1.RELEASE.txt
new file mode 100644
index 0000000..8874112
--- /dev/null
+++ b/screwdriver-3.5.6/box/snippets/depen_spring_3.1.1.RELEASE.txt
@@ -0,0 +1,65 @@
+
+ org.springframework
+ spring-core
+ ${spring.version}
+
+
+ org.springframework
+ spring-expression
+ ${spring.version}
+
+
+ org.springframework
+ spring-beans
+ ${spring.version}
+
+
+ org.springframework
+ spring-aop
+ ${spring.version}
+
+
+ org.springframework
+ spring-context
+ ${spring.version}
+
+
+ org.springframework
+ spring-context-support
+ ${spring.version}
+
+
+ org.springframework
+ spring-tx
+ ${spring.version}
+
+
+ org.springframework
+ spring-orm
+ ${spring.version}
+
+
+ org.springframework
+ spring-web
+ ${spring.version}
+
+
+ org.springframework
+ spring-webmvc
+ ${spring.version}
+
+
+ org.springframework
+ spring-asm
+ ${spring.version}
+
+
+ org.springframework
+ spring-jdbc
+ ${spring.version}
+
+
+ javax.servlet
+ jstl
+ 1.2
+
\ No newline at end of file
diff --git a/screwdriver-3.5.6/box/snippets/depen_spring_3.2.0.RELEASE.txt b/screwdriver-3.5.6/box/snippets/depen_spring_3.2.0.RELEASE.txt
new file mode 100644
index 0000000..887c042
--- /dev/null
+++ b/screwdriver-3.5.6/box/snippets/depen_spring_3.2.0.RELEASE.txt
@@ -0,0 +1,67 @@
+
+ org.springframework
+ spring-core
+ ${spring.version}
+
+
+ spring-asm
+ org.springframework
+
+
+
+
+ org.springframework
+ spring-expression
+ ${spring.version}
+
+
+ org.springframework
+ spring-beans
+ ${spring.version}
+
+
+ org.springframework
+ spring-aop
+ ${spring.version}
+
+
+ org.springframework
+ spring-context
+ ${spring.version}
+
+
+ org.springframework
+ spring-context-support
+ ${spring.version}
+
+
+ org.springframework
+ spring-tx
+ ${spring.version}
+
+
+ org.springframework
+ spring-orm
+ ${spring.version}
+
+
+ org.springframework
+ spring-web
+ ${spring.version}
+
+
+ org.springframework
+ spring-webmvc
+ ${spring.version}
+
+
+ org.springframework
+ spring-jdbc
+ ${spring.version}
+
+
+ javax.servlet
+ jstl
+ 1.2
+
+
\ No newline at end of file
diff --git a/screwdriver-3.5.6/box/snippets/depen_spring_3.2.13.RELEASE.txt b/screwdriver-3.5.6/box/snippets/depen_spring_3.2.13.RELEASE.txt
new file mode 100644
index 0000000..843515f
--- /dev/null
+++ b/screwdriver-3.5.6/box/snippets/depen_spring_3.2.13.RELEASE.txt
@@ -0,0 +1,66 @@
+
+ org.springframework
+ spring-core
+ ${spring.version}
+
+
+ spring-asm
+ org.springframework
+
+
+
+
+ org.springframework
+ spring-expression
+ ${spring.version}
+
+
+ org.springframework
+ spring-beans
+ ${spring.version}
+
+
+ org.springframework
+ spring-aop
+ ${spring.version}
+
+
+ org.springframework
+ spring-context
+ ${spring.version}
+
+
+ org.springframework
+ spring-context-support
+ ${spring.version}
+
+
+ org.springframework
+ spring-tx
+ ${spring.version}
+
+
+ org.springframework
+ spring-orm
+ ${spring.version}
+
+
+ org.springframework
+ spring-web
+ ${spring.version}
+
+
+ org.springframework
+ spring-webmvc
+ ${spring.version}
+
+
+ org.springframework
+ spring-jdbc
+ ${spring.version}
+
+
+ javax.servlet
+ jstl
+ 1.2
+
\ No newline at end of file
diff --git a/screwdriver-3.5.6/box/snippets/depen_spring_4.0.3.RELEASE.txt b/screwdriver-3.5.6/box/snippets/depen_spring_4.0.3.RELEASE.txt
new file mode 100644
index 0000000..95e4749
--- /dev/null
+++ b/screwdriver-3.5.6/box/snippets/depen_spring_4.0.3.RELEASE.txt
@@ -0,0 +1,66 @@
+
+ org.springframework
+ spring-core
+ ${spring.version}
+
+
+ spring-asm
+ org.springframework
+
+
+
+
+ org.springframework
+ spring-expression
+ ${spring.version}
+
+
+ org.springframework
+ spring-beans
+ ${spring.version}
+
+
+ org.springframework
+ spring-aop
+ ${spring.version}
+
+
+ org.springframework
+ spring-context
+ ${spring.version}
+
+
+ org.springframework
+ spring-context-support
+ ${spring.version}
+
+
+ org.springframework
+ spring-tx
+ ${spring.version}
+
+
+ org.springframework
+ spring-orm
+ ${spring.version}
+
+
+ org.springframework
+ spring-web
+ ${spring.version}
+
+
+ org.springframework
+ spring-webmvc
+ ${spring.version}
+
+
+ org.springframework
+ spring-jdbc
+ ${spring.version}
+
+
+ javax.servlet
+ jstl
+ 1.2
+
\ No newline at end of file
diff --git a/screwdriver-3.5.6/box/snippets/depen_spring_4.3.12.RELEASE.txt b/screwdriver-3.5.6/box/snippets/depen_spring_4.3.12.RELEASE.txt
new file mode 100644
index 0000000..95e4749
--- /dev/null
+++ b/screwdriver-3.5.6/box/snippets/depen_spring_4.3.12.RELEASE.txt
@@ -0,0 +1,66 @@
+
+ org.springframework
+ spring-core
+ ${spring.version}
+
+
+ spring-asm
+ org.springframework
+
+
+
+
+ org.springframework
+ spring-expression
+ ${spring.version}
+
+
+ org.springframework
+ spring-beans
+ ${spring.version}
+
+
+ org.springframework
+ spring-aop
+ ${spring.version}
+
+
+ org.springframework
+ spring-context
+ ${spring.version}
+
+
+ org.springframework
+ spring-context-support
+ ${spring.version}
+
+
+ org.springframework
+ spring-tx
+ ${spring.version}
+
+
+ org.springframework
+ spring-orm
+ ${spring.version}
+
+
+ org.springframework
+ spring-web
+ ${spring.version}
+
+
+ org.springframework
+ spring-webmvc
+ ${spring.version}
+
+
+ org.springframework
+ spring-jdbc
+ ${spring.version}
+
+
+ javax.servlet
+ jstl
+ 1.2
+
\ No newline at end of file
diff --git a/screwdriver-3.5.6/box/snippets/depen_tiles.txt b/screwdriver-3.5.6/box/snippets/depen_tiles.txt
new file mode 100644
index 0000000..e217a4f
--- /dev/null
+++ b/screwdriver-3.5.6/box/snippets/depen_tiles.txt
@@ -0,0 +1,37 @@
+
+
+ org.apache.tiles
+ tiles-core
+ ${apache.tiles.version}
+
+
+ slf4j-api
+ org.slf4j
+
+
+
+
+ org.apache.tiles
+ tiles-api
+ ${apache.tiles.version}
+
+
+ org.apache.tiles
+ tiles-jsp
+ ${apache.tiles.version}
+
+
+ org.apache.tiles
+ tiles-servlet
+ ${apache.tiles.version}
+
+
+ org.apache.tiles
+ tiles-servlet-wildcard
+ ${apache.tiles.version}
+
+
+ org.apache.tiles
+ tiles-template
+ ${apache.tiles.version}
+
\ No newline at end of file
diff --git a/screwdriver-3.5.6/box/snippets/depen_validator.txt b/screwdriver-3.5.6/box/snippets/depen_validator.txt
new file mode 100644
index 0000000..6f078d2
--- /dev/null
+++ b/screwdriver-3.5.6/box/snippets/depen_validator.txt
@@ -0,0 +1,5 @@
+
+ javax.validation
+ validation-api
+ 1.0.0.GA
+
\ No newline at end of file
diff --git a/screwdriver-3.5.6/box/snippets/depen_webflow_2.3.3.RELEASE.txt b/screwdriver-3.5.6/box/snippets/depen_webflow_2.3.3.RELEASE.txt
new file mode 100644
index 0000000..cbb89ff
--- /dev/null
+++ b/screwdriver-3.5.6/box/snippets/depen_webflow_2.3.3.RELEASE.txt
@@ -0,0 +1,5 @@
+
+ org.springframework.webflow
+ spring-webflow
+ 2.3.3.RELEASE
+
\ No newline at end of file
diff --git a/screwdriver-3.5.6/box/snippets/filte.txt b/screwdriver-3.5.6/box/snippets/filte.txt
new file mode 100644
index 0000000..9509fc3
--- /dev/null
+++ b/screwdriver-3.5.6/box/snippets/filte.txt
@@ -0,0 +1,49 @@
+
+ characterEncodingFilter
+ org.springframework.web.filter.CharacterEncodingFilter
+
+ encoding
+ UTF-8
+
+
+ forceEncoding
+ true
+
+
+
+ characterEncodingFilter
+ /*
+
+
+ ResponseOverrideFilter
+ org.displaytag.filter.ResponseOverrideFilter
+
+
+ ResponseOverrideFilter
+ /*
+
+
+ HttpMethodFilter
+ org.springframework.web.filter.HiddenHttpMethodFilter
+
+
+ HttpMethodFilter
+ /*
+
+
+
+ crossSiteScriptingFilter
+ +zoccolo+.web.filter.CrossSiteScriptingFilter
+
+
+ crossSiteScriptingFilter
+ /*
+
+
+ JsessionIdRemoveFilter
+ +zoccolo+.web.filter.JsessionIdRemoveFilter
+
+
+ JsessionIdRemoveFilter
+ /*
+
\ No newline at end of file
diff --git a/screwdriver-3.5.6/box/snippets/htv_3.4.txt b/screwdriver-3.5.6/box/snippets/htv_3.4.txt
new file mode 100644
index 0000000..14ea331
--- /dev/null
+++ b/screwdriver-3.5.6/box/snippets/htv_3.4.txt
@@ -0,0 +1,44 @@
+
+ org.hibernate
+ hibernate-core
+ 3.3.2.GA
+
+
+ org.hibernate
+ hibernate-annotations
+ 3.4.0.GA
+
+
+ org.hibernate
+ hibernate-commons-annotations
+ 3.1.0.GA
+
+
+ org.hibernate
+ hibernate-tools
+ 3.2.3.GA
+
+
+ javax.validation
+ validation-api
+ 1.0.0.GA
+
+
+ org.slf4j
+ slf4j-api
+ 1.6.4
+ runtime
+
+
+ org.slf4j
+ slf4j-api
+ 1.6.4
+ runtime
+
+
+ org.slf4j
+ slf4j-log4j12
+ 1.6.4
+ runtime
+
+
\ No newline at end of file
diff --git a/screwdriver-3.5.6/box/snippets/hv_3.4.txt b/screwdriver-3.5.6/box/snippets/hv_3.4.txt
new file mode 100644
index 0000000..06a7327
--- /dev/null
+++ b/screwdriver-3.5.6/box/snippets/hv_3.4.txt
@@ -0,0 +1,33 @@
+
+ org.hibernate
+ hibernate-core
+ 3.3.2.GA
+
+
+ org.hibernate
+ hibernate-annotations
+ 3.4.0.GA
+
+
+ org.hibernate
+ hibernate-commons-annotations
+ 3.1.0.GA
+
+
+ org.hibernate
+ hibernate-tools
+ 3.2.3.GA
+
+
+ org.slf4j
+ slf4j-api
+ 1.6.4
+ runtime
+
+
+ org.slf4j
+ slf4j-log4j12
+ 1.6.4
+ runtime
+
+
\ No newline at end of file
diff --git a/screwdriver-3.5.6/box/snippets/hv_3.5.txt b/screwdriver-3.5.6/box/snippets/hv_3.5.txt
new file mode 100644
index 0000000..96b9708
--- /dev/null
+++ b/screwdriver-3.5.6/box/snippets/hv_3.5.txt
@@ -0,0 +1,37 @@
+
+ org.hibernate
+ hibernate-core
+ 3.3.2.GA
+
+
+ org.hibernate
+ hibernate-annotations
+ 3.4.0.GA
+
+
+ org.hibernate
+ hibernate-commons-annotations
+ 3.1.0.GA
+
+
+ org.hibernate
+ hibernate-tools
+ 3.2.3.GA
+
+
+ org.slf4j
+ slf4j-api
+ 1.6.4
+ runtime
+
+
+ org.slf4j
+ slf4j-log4j12
+ 1.6.4
+ runtime
+
+
+ javassist
+ javassist
+ 3.12.1.GA
+
\ No newline at end of file
diff --git a/screwdriver-3.5.6/box/snippets/hv_3.6.txt b/screwdriver-3.5.6/box/snippets/hv_3.6.txt
new file mode 100644
index 0000000..7fa1ace
--- /dev/null
+++ b/screwdriver-3.5.6/box/snippets/hv_3.6.txt
@@ -0,0 +1,35 @@
+
+ org.hibernate
+ hibernate-core
+ 3.6.6.Final
+
+
+ org.hibernate
+ hibernate-annotations
+ 3.5.6-Final
+
+
+ org.hibernate
+ hibernate-commons-annotations
+ 3.2.0.Final
+
+
+ org.hibernate
+ hibernate-tools
+ 3.6.0.Final
+
+
+ org.slf4j
+ slf4j-api
+ 1.6.0
+
+
+ org.hibernate
+ hibernate-search
+ 3.4.1.Final
+
+
+ javassist
+ javassist
+ 3.12.1.GA
+
\ No newline at end of file
diff --git a/screwdriver-3.5.6/box/snippets/hv_5.1.0.Final.txt b/screwdriver-3.5.6/box/snippets/hv_5.1.0.Final.txt
new file mode 100644
index 0000000..bc82e63
--- /dev/null
+++ b/screwdriver-3.5.6/box/snippets/hv_5.1.0.Final.txt
@@ -0,0 +1,22 @@
+
+ org.hibernate
+ hibernate-core
+ 5.1.0.Final
+
+
+ antlr
+ antlr
+
+
+
+
+ org.hibernate
+ hibernate-entitymanager
+ 5.1.0.Final
+
+
+ antlr
+ antlr
+
+
+
\ No newline at end of file
diff --git a/screwdriver-3.5.6/box/snippets/jacksonView.txt b/screwdriver-3.5.6/box/snippets/jacksonView.txt
new file mode 100644
index 0000000..63d8bf2
--- /dev/null
+++ b/screwdriver-3.5.6/box/snippets/jacksonView.txt
@@ -0,0 +1,4 @@
+
+
+
\ No newline at end of file
diff --git a/screwdriver-3.5.6/box/snippets/java/ActiveDirectoryLdapAuthoritiesPopulator.java b/screwdriver-3.5.6/box/snippets/java/ActiveDirectoryLdapAuthoritiesPopulator.java
new file mode 100644
index 0000000..f557ffd
--- /dev/null
+++ b/screwdriver-3.5.6/box/snippets/java/ActiveDirectoryLdapAuthoritiesPopulator.java
@@ -0,0 +1,37 @@
+package +zoccolo+.security.ldap.userdetails.ad;
+
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.List;
+
+import org.springframework.ldap.core.DirContextOperations;
+import org.springframework.ldap.core.DistinguishedName;
+import org.springframework.ldap.core.LdapRdn;
+import org.springframework.security.core.GrantedAuthority;
+import org.springframework.security.core.authority.SimpleGrantedAuthority;
+import org.springframework.security.ldap.authentication.ad.ActiveDirectoryLdapAuthenticationProvider;
+import org.springframework.security.ldap.userdetails.LdapAuthoritiesPopulator;
+
+/**
+ * An {@link LdapAuthoritiesPopulator} that is based on the {@link ActiveDirectoryLdapAuthenticationProvider}. The
+ * implementation obtains the {@link GrantedAuthority}'s from the userData's memberOf attribute. It then uses the last
+ * {@link LdapRdn}'s value as the {@link GrantedAuthority}.
+ *
+ * @author Rob Winch
+ * @see ActiveDirectoryLdapAuthenticationProvider
+ */
+public final class ActiveDirectoryLdapAuthoritiesPopulator
+ implements LdapAuthoritiesPopulator {
+
+ @Override
+ public Collection extends GrantedAuthority> getGrantedAuthorities(DirContextOperations userData, String username) {
+ String[] groups = userData.getStringAttributes("memberOf");
+ List authorities = new ArrayList();
+
+ for (String group : groups) {
+ LdapRdn authority = new DistinguishedName(group).removeLast();
+ authorities.add(new SimpleGrantedAuthority(authority.getValue()));
+ }
+ return authorities;
+ }
+}
\ No newline at end of file
diff --git a/screwdriver-3.5.6/box/snippets/java/AntiSamyListener.java b/screwdriver-3.5.6/box/snippets/java/AntiSamyListener.java
new file mode 100644
index 0000000..8bf9b0c
--- /dev/null
+++ b/screwdriver-3.5.6/box/snippets/java/AntiSamyListener.java
@@ -0,0 +1,55 @@
+package +zoccolo+.web.listener;
+
+import +zoccolo+.web.sanitizer.XssSanitizer;
+
+import java.io.InputStream;
+
+import javax.servlet.ServletContext;
+import javax.servlet.ServletContextEvent;
+import javax.servlet.ServletContextListener;
+
+import org.apache.log4j.Logger;
+import org.owasp.validator.html.PolicyException;
+
+public class AntiSamyListener
+ implements ServletContextListener {
+
+ public static final String POLICY_FILE_PATH = "policy_file_path";
+ public static final String ANTISAMY_SANITIZER = "sanitizer";
+
+ static Logger log = Logger.getLogger(AntiSamyListener.class);
+
+ public void contextDestroyed(ServletContextEvent servletContextEvent) {
+ log.info("Context destroyed");
+ }
+
+ public void contextInitialized(ServletContextEvent servletContextEvent) {
+ ServletContext servletContext = servletContextEvent.getServletContext();
+ String policyFilePath = (String) servletContext.getInitParameter(POLICY_FILE_PATH);
+ if (policyFilePath == null) {
+ throw new RuntimeException(
+ "Policy file path is null. Please set it up in web.xml!!!");
+ }
+ log.info("XSS Policy file path read.");
+
+ InputStream is = getClass().getClassLoader().getResourceAsStream(
+ policyFilePath);
+ try {
+ is.available();
+ log.info("XSS Policy file loaded.");
+ } catch (Exception e) {
+ throw new RuntimeException("Policy file " + policyFilePath
+ + " does not exists!");
+ }
+
+ try {
+ XssSanitizer sanitizer = new XssSanitizer(policyFilePath);
+ log.info("XSS Sanitizer created.");
+ servletContext.setAttribute(ANTISAMY_SANITIZER, sanitizer);
+ log.info("XSS bound in Servlet Context as: " + ANTISAMY_SANITIZER);
+ } catch (PolicyException pex) {
+ throw new RuntimeException("Policy exception: " + pex.getMessage());
+ }
+ }
+ /* screwdriver_knife */
+}
diff --git a/screwdriver-3.5.6/box/snippets/java/ApplicUserAuthenticationProvider.java b/screwdriver-3.5.6/box/snippets/java/ApplicUserAuthenticationProvider.java
new file mode 100644
index 0000000..adcaee6
--- /dev/null
+++ b/screwdriver-3.5.6/box/snippets/java/ApplicUserAuthenticationProvider.java
@@ -0,0 +1,34 @@
+package +zoccolo+.web.authentication;
+
+import java.util.Collection;
+
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.dao.DataAccessException;
+import org.springframework.security.authentication.AuthenticationProvider;
+import org.springframework.security.authentication.BadCredentialsException;
+import org.springframework.security.core.Authentication;
+import org.springframework.security.core.AuthenticationException;
+import org.springframework.security.core.GrantedAuthority;
+import org.springframework.security.core.userdetails.UsernameNotFoundException;
+import org.springframework.stereotype.Component;
+
+import +zoccolo+.web.authentication.+userpass+UsernamePasswordAuthenticationToken;
+import +zoccolo+.web.authentication.authority.UserAuthorityUtils;
+import +domain+.screwdriver.+dsname+.+dbschema+.+tabuser+;
+import +zoccolo+.+rail+.dao.I+Rail++tabuser+Dao;
+
+/** Autenticazione */
+@Component
+public class +Applicaz+UserAuthenticationProvider
+ implements AuthenticationProvider {
+
+ private I+Rail++tabuser+Dao<+tabuser+> +rail++tabuser+;
+
+ @Autowired
+ public +Applicaz+UserAuthenticationProvider(I+Rail++tabuser+Dao<+tabuser+> +rail++tabuser+) {
+ if (+rail++tabuser+ == null) {
+ throw new IllegalArgumentException(
+ "Screwdriver: +rail++tabuser+ cannot be null");
+ }
+ this.+rail++tabuser+ = +rail++tabuser+;
+ }
\ No newline at end of file
diff --git a/screwdriver-3.5.6/box/snippets/java/Belonger.java b/screwdriver-3.5.6/box/snippets/java/Belonger.java
new file mode 100644
index 0000000..2ae6ab8
--- /dev/null
+++ b/screwdriver-3.5.6/box/snippets/java/Belonger.java
@@ -0,0 +1,21 @@
+package +zoccolo+.security;
+
+import java.util.Collection;
+
+import org.springframework.security.core.GrantedAuthority;
+import org.springframework.security.core.userdetails.User;
+
+public class Belonger extends User {
+
+ public Belonger(String username, String password, boolean enabled,
+ boolean accountNonExpired, boolean credentialsNonExpired,
+ boolean accountNonLocked,
+ Collection extends GrantedAuthority> authorities) {
+ super(username, password, enabled, accountNonExpired,
+ credentialsNonExpired, accountNonLocked, authorities);
+ }
+
+ private static final long serialVersionUID = 4190186200539186925L;
+
+ /* screwdriver_knife */
+}
diff --git a/screwdriver-3.5.6/box/snippets/java/ControllerBelong.java b/screwdriver-3.5.6/box/snippets/java/ControllerBelong.java
new file mode 100644
index 0000000..5fa4f36
--- /dev/null
+++ b/screwdriver-3.5.6/box/snippets/java/ControllerBelong.java
@@ -0,0 +1,4 @@
+package +zoccolo+.web.controller;
+
+import org.springframework.stereotype.Controller;
+import org.springframework.web.bind.annotation.RequestMapping;
\ No newline at end of file
diff --git a/screwdriver-3.5.6/box/snippets/java/ControllerBelongLDAP.java b/screwdriver-3.5.6/box/snippets/java/ControllerBelongLDAP.java
new file mode 100644
index 0000000..e48b5a8
--- /dev/null
+++ b/screwdriver-3.5.6/box/snippets/java/ControllerBelongLDAP.java
@@ -0,0 +1,6 @@
+import org.springframework.security.core.Authentication;
+import org.springframework.security.core.context.SecurityContextHolder;
+import org.springframework.security.ldap.userdetails.InetOrgPerson;
+import org.springframework.security.ldap.userdetails.LdapUserDetails;
+import org.springframework.security.ldap.userdetails.Person;
+
diff --git a/screwdriver-3.5.6/box/snippets/java/CrossSiteScriptingFilter.java b/screwdriver-3.5.6/box/snippets/java/CrossSiteScriptingFilter.java
new file mode 100644
index 0000000..3ba5863
--- /dev/null
+++ b/screwdriver-3.5.6/box/snippets/java/CrossSiteScriptingFilter.java
@@ -0,0 +1,56 @@
+package +zoccolo+.web.filter;
+
+import +zoccolo+.web.servlet.HttpRequestWrapper;
+
+import java.io.IOException;
+
+import javax.servlet.Filter;
+import javax.servlet.FilterChain;
+import javax.servlet.FilterConfig;
+import javax.servlet.ServletException;
+import javax.servlet.ServletRequest;
+import javax.servlet.ServletResponse;
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+
+import org.apache.log4j.Logger;
+
+public class CrossSiteScriptingFilter implements Filter {
+
+ static Logger log = Logger.getLogger(CrossSiteScriptingFilter.class);
+
+ @SuppressWarnings("unused")
+ private FilterConfig filterConfig;
+
+ /**
+ * @see Filter#destroy()
+ */
+ public void destroy() {
+ this.filterConfig = null;
+ }
+
+ /**
+ * @see Filter#doFilter(ServletRequest, ServletResponse, FilterChain)
+ */
+ public void doFilter(ServletRequest request, ServletResponse response,
+ FilterChain chain) throws IOException, ServletException {
+
+ String sessionid = ((HttpServletRequest) request).getSession().getId();
+ // be careful overwriting: JSESSIONID may have been set with other flags
+ ((HttpServletResponse) response).setHeader("SET-COOKIE", "JSESSIONID=" + sessionid + ";Path=/; HttpOnly");
+
+ chain.doFilter(new HttpRequestWrapper((HttpServletRequest)request), response);
+ }
+
+ /**
+ * @see Filter#init(FilterConfig)
+ */
+ public void init(FilterConfig filterConfig) throws ServletException {
+ this.filterConfig = filterConfig;
+ log.info("CrossSiteScriptingFilter correctly initialized.");
+ }
+
+ /* screwdriver_knife */
+
+}
+
diff --git a/screwdriver-3.5.6/box/snippets/java/Crud.java b/screwdriver-3.5.6/box/snippets/java/Crud.java
new file mode 100644
index 0000000..2e76695
--- /dev/null
+++ b/screwdriver-3.5.6/box/snippets/java/Crud.java
@@ -0,0 +1,23 @@
+ // R = READ
+ private ModelAndView screw+jsp+R(+Jsp+Form +jsp+Form) {
+ return new ModelAndView("+screwModel+", "belong",
+ +jsp+Form);
+ }
+
+ // C = CREATE
+ private ModelAndView screw+jsp+C(+Jsp+Form +jsp+Form) {
+ Notice notice = new Notice();
+ return new ModelAndView("answers/ok", "belong", notice);
+ }
+
+ // U = UPDATE
+ private ModelAndView screw+jsp+U(+Jsp+Form +jsp+Form) {
+ Notice notice = new Notice();
+ return new ModelAndView("answers/ok", "belong", notice);
+ }
+
+ // D = DELETE
+ private ModelAndView screw+jsp+D(+Jsp+Form +jsp+Form) {
+ Notice notice = new Notice();
+ return new ModelAndView("answers/ok", "belong", notice);
+ }
diff --git a/screwdriver-3.5.6/box/snippets/java/DomainSpringSecurityUserContext.java b/screwdriver-3.5.6/box/snippets/java/DomainSpringSecurityUserContext.java
new file mode 100644
index 0000000..42972e6
--- /dev/null
+++ b/screwdriver-3.5.6/box/snippets/java/DomainSpringSecurityUserContext.java
@@ -0,0 +1,50 @@
+package +zoccolo+.web.authentication;
+
+import java.util.Collection;
+
+import org.springframework.security.authentication.UsernamePasswordAuthenticationToken;
+import org.springframework.security.core.Authentication;
+import org.springframework.security.core.GrantedAuthority;
+import org.springframework.security.core.context.SecurityContext;
+import org.springframework.security.core.context.SecurityContextHolder;
+import org.springframework.stereotype.Component;
+
+import +zoccolo+.web.authentication.authority.UserAuthorityUtils;
+import +tabposition+.+tabella+;
+
+/**
+ * An implementation of {@link UserContext} that looks up the {@link CalendarUser} using the Spring Security's
+ * {@link Authentication} by principal name.
+ *
+ * @author Rob Winch
+ *
+ */
+@Component
+public class SpringSecurityUserContext implements UserContext {
+ /**
+ * Get the {@link CalendarUser} by casting the {@link Authentication}'s principal to a {@link CalendarUser}.
+ */
+ @Override
+ public +tabella+ getCurrentUser() {
+ SecurityContext context = SecurityContextHolder.getContext();
+ Authentication authentication = context.getAuthentication();
+ if (authentication == null) {
+ return null;
+ }
+ return (+tabella+) authentication.getPrincipal();
+ }
+
+ /**
+ * Sets the {@link CalendarUser} as the current {@link Authentication}'s principal. It uses
+ */
+ @Override
+ public void setCurrentUser(+tabella+ user) {
+ if (user == null) {
+ throw new IllegalArgumentException("user cannot be null");
+ }
+ Collection extends GrantedAuthority> authorities = UserAuthorityUtils.createAuthorities(user);
+ UsernamePasswordAuthenticationToken authentication = new UsernamePasswordAuthenticationToken(user,
+ user.get+password+(),authorities);
+ SecurityContextHolder.getContext().setAuthentication(authentication);
+ }
+}
diff --git a/screwdriver-3.5.6/box/snippets/java/DomainUsernamePasswordAuthenticationFilter.java b/screwdriver-3.5.6/box/snippets/java/DomainUsernamePasswordAuthenticationFilter.java
new file mode 100644
index 0000000..61c7ce1
--- /dev/null
+++ b/screwdriver-3.5.6/box/snippets/java/DomainUsernamePasswordAuthenticationFilter.java
@@ -0,0 +1,39 @@
+package +zoccolo+.web.authentication;
+
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+
+import org.springframework.security.authentication.AuthenticationServiceException;
+import org.springframework.security.core.Authentication;
+import org.springframework.security.core.AuthenticationException;
+import org.springframework.security.web.authentication.UsernamePasswordAuthenticationFilter;
+
+import +zoccolo+.web.authentication.DomainUsernamePasswordAuthenticationToken;
+
+/**
+ * An extension to the existing {@link UsernamePasswordAuthenticationFilter} that obtains a domain parameter and then
+ * creates a {@link DomainUsernamePasswordAuthenticationToken}.
+ *
+ * @author Rob Winch
+ *
+ */
+public final class DomainUsernamePasswordAuthenticationFilter extends UsernamePasswordAuthenticationFilter {
+
+ public Authentication attemptAuthentication(HttpServletRequest request, HttpServletResponse response)
+ throws AuthenticationException {
+ if (!request.getMethod().equals("POST")) {
+ throw new AuthenticationServiceException("Authentication method not supported: " + request.getMethod());
+ }
+
+ String username = obtainUsername(request);
+ String password = obtainPassword(request);
+ String domain = request.getParameter("domain");
+
+ DomainUsernamePasswordAuthenticationToken authRequest = new DomainUsernamePasswordAuthenticationToken(username,
+ password, domain);
+
+ setDetails(request, authRequest);
+ return this.getAuthenticationManager().authenticate(authRequest);
+ }
+ /* screwdriver_knife */
+}
\ No newline at end of file
diff --git a/screwdriver-3.5.6/box/snippets/java/DomainUsernamePasswordAuthenticationToken.java b/screwdriver-3.5.6/box/snippets/java/DomainUsernamePasswordAuthenticationToken.java
new file mode 100644
index 0000000..e965f1d
--- /dev/null
+++ b/screwdriver-3.5.6/box/snippets/java/DomainUsernamePasswordAuthenticationToken.java
@@ -0,0 +1,34 @@
+package +zoccolo+.web.authentication;
+
+import java.util.Collection;
+
+import org.springframework.security.authentication.UsernamePasswordAuthenticationToken;
+import org.springframework.security.core.GrantedAuthority;
+
+import +jpapath+.+tabella+;
+
+public final class DomainUsernamePasswordAuthenticationToken
+
+ extends UsernamePasswordAuthenticationToken {
+
+ private final String domain;
+
+ public DomainUsernamePasswordAuthenticationToken(String principal, String credentials, String domain) {
+ super(principal, credentials);
+ this.domain = domain;
+ }
+
+ public DomainUsernamePasswordAuthenticationToken(+tabella+ principal, String credentials, String domain,
+ Collection extends GrantedAuthority> authorities) {
+ super(principal, credentials, authorities);
+ this.domain = domain;
+ }
+
+ public String getDomain() {
+ return domain;
+ }
+
+ private static final long serialVersionUID = -5138870746127783L;
+
+ /* screwdriver_knife */
+}
diff --git a/screwdriver-3.5.6/box/snippets/java/DoorControllerBelong.java b/screwdriver-3.5.6/box/snippets/java/DoorControllerBelong.java
new file mode 100644
index 0000000..b5b8698
--- /dev/null
+++ b/screwdriver-3.5.6/box/snippets/java/DoorControllerBelong.java
@@ -0,0 +1,43 @@
+package +zoccolo+.web.controller;
+
+import org.springframework.stereotype.Controller;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.servlet.ModelAndView;
+import javax.servlet.http.HttpServletRequest;
+
+import +zoccolo+.web.model.utility.Notice;
+/**
+ * Home page controller.
+ *
+*/
+@Controller
+public class DoorControllerBelong {
+
+ @RequestMapping("/")
+ public String welcome() {
+ return "home/index";
+ }
+
+ @RequestMapping("/default")
+ public String welcomeDefault() {
+ return "home/index";
+ }
+
+ @RequestMapping("/login/form")
+ public String chiSei() {
+ return "home/login";
+ }
+
+ +signup+
+
+ @RequestMapping("/answers/errorPage")
+ public ModelAndView materia_1(HttpServletRequest request) {
+ Notice notice = new Notice();
+ notice.setScrewFormattedText("Unauthorized access, user "
+ + request.getUserPrincipal().getName()
+ + " has no sufficient faculties.");
+ return new ModelAndView("answers/error", "belong", notice);
+ }
+
+ /* screwdriver_knife */
+}
diff --git a/screwdriver-3.5.6/box/snippets/java/GenericComponent.java b/screwdriver-3.5.6/box/snippets/java/GenericComponent.java
new file mode 100644
index 0000000..73f33bf
--- /dev/null
+++ b/screwdriver-3.5.6/box/snippets/java/GenericComponent.java
@@ -0,0 +1,19 @@
+package +zoccolo+.web.controller;
+
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.context.ApplicationContext;
+
+public class GenericComponent {
+
+ protected final Log logger = LogFactory.getLog(this.getClass());
+
+ @Autowired
+ public ApplicationContext context;
+
+ public String getMessage(String key, Object ...variables) {
+ return context.getMessage(key, variables, null);
+ }
+
+}
\ No newline at end of file
diff --git a/screwdriver-3.5.6/box/snippets/java/GenericController.java b/screwdriver-3.5.6/box/snippets/java/GenericController.java
new file mode 100644
index 0000000..864c8ee
--- /dev/null
+++ b/screwdriver-3.5.6/box/snippets/java/GenericController.java
@@ -0,0 +1,43 @@
+package +zoccolo+.web.controller;
+
+import +zoccolo+.web.controller.GenericComponent;
+
+import javax.servlet.http.HttpServletRequest;
+
+import org.springframework.web.bind.annotation.ExceptionHandler;
+import org.springframework.web.servlet.ModelAndView;
+
+public class GenericController extends GenericComponent {
+
+ @ExceptionHandler(Exception.class)
+ public ModelAndView handleError(HttpServletRequest req, Exception exception) {
+ logger.error("Request: " + req.getRequestURL() + " raised " + exception);
+
+ exception.printStackTrace();
+ ModelAndView mav = new ModelAndView("page.error");
+
+ return mav;
+ }
+
+
+ protected String localizeViewName(String viewBaseName, HttpServletRequest request) {
+
+ String ret = viewBaseName;
+ String lang = getSessionAttribute("lang", request);
+
+ if ("en".equals(lang))
+ ret += ".en";
+ return ret;
+ }
+
+ @SuppressWarnings("unchecked")
+ protected T getSessionAttribute(String name, HttpServletRequest request) {
+ try {
+ T toReturn = (T) request.getSession().getAttribute(name);
+ return toReturn == null ? null : toReturn;
+ } catch (ClassCastException e) {
+ return null;
+ }
+ }
+
+}
\ No newline at end of file
diff --git a/screwdriver-3.5.6/box/snippets/java/GenericCrud.java b/screwdriver-3.5.6/box/snippets/java/GenericCrud.java
new file mode 100644
index 0000000..24c1520
--- /dev/null
+++ b/screwdriver-3.5.6/box/snippets/java/GenericCrud.java
@@ -0,0 +1,114 @@
+package +zoccolo+.generic;
+
+import java.io.Serializable;
+import java.util.ArrayList;
+import java.util.List;
+
+import org.hibernate.Criteria;
+import org.hibernate.HibernateException;
+import org.hibernate.Query;
+import org.hibernate.Session;
+import org.hibernate.criterion.Criterion;
+import org.hibernate.criterion.Order;
+import org.hibernate.criterion.Projections;
+import org.springframework.dao.DataAccessException;
+
+public abstract interface GenericCrud {
+
+ public abstract void clear()
+
+ throws DataAccessException, Exception;
+
+ public abstract void delete(T entity)
+
+ throws DataAccessException, Exception;
+
+ public abstract void deleteById(ID id)
+
+ throws DataAccessException, Exception;
+
+ public abstract List findAll()
+
+ throws HibernateException, Exception;
+
+ public abstract List findAll(Order order)
+
+ throws HibernateException, Exception;
+
+ public abstract List findByCriteria(Criterion... criterion)
+
+ throws HibernateException, Exception;
+
+ public abstract List findByCriteria(Order order, Criterion... criterion)
+
+ throws HibernateException, Exception;
+
+ public abstract T findUniqueByCriteria(Criterion... criterion)
+
+ throws HibernateException, Exception;
+
+ public abstract List findByExample(T exampleInstance,
+ String[] excludeProperty)
+
+ throws HibernateException, Exception;
+
+ public abstract T findById(ID id, boolean lock)
+
+ throws DataAccessException, Exception;
+
+ public abstract void flush()
+
+ throws DataAccessException, Exception;
+
+ public abstract T makePersistent(T entity)
+
+ throws DataAccessException, Exception;
+
+ public abstract void makeTransient(T entity)
+
+ throws DataAccessException, Exception;
+
+ public abstract void save(T entity)
+
+ throws DataAccessException, Exception;
+
+ public abstract void saveOrUpdate(T entity)
+
+ throws DataAccessException, Exception;
+
+ public void update(T entity)
+
+ throws DataAccessException, Exception;
+
+ public void merge(T entity)
+
+ throws DataAccessException, Exception;
+
+ public String getDialect()
+
+ throws HibernateException, Exception;
+
+ public List oneColumnQuery(final String q)
+
+ throws HibernateException, Exception;
+
+ public List manyColumnQuery(final String q)
+
+ throws HibernateException;
+
+ public Integer howManyRows(Criterion... criterion)
+
+ throws DataAccessException;
+
+ public Integer howManyRows()
+
+ throws DataAccessException;
+
+ public Integer howManyRowsAlias(String p, String alias,
+ Criterion... criterion)
+
+ throws DataAccessException;
+
+ /* screwdriver_knife */
+
+}
\ No newline at end of file
diff --git a/screwdriver-3.5.6/box/snippets/java/GenericRailDaoImplJPA1.java b/screwdriver-3.5.6/box/snippets/java/GenericRailDaoImplJPA1.java
new file mode 100644
index 0000000..c44217a
--- /dev/null
+++ b/screwdriver-3.5.6/box/snippets/java/GenericRailDaoImplJPA1.java
@@ -0,0 +1,221 @@
+package +zoccolo+.+rail+;
+
+import +zoccolo+.generic.GenericCrud;
+
+import java.io.Serializable;
+import java.lang.reflect.ParameterizedType;
+import java.util.ArrayList;
+import java.util.List;
+
+import org.hibernate.Criteria;
+import org.hibernate.HibernateException;
+import org.hibernate.LockMode;
+import org.hibernate.Query;
+import org.hibernate.Session;
+import org.hibernate.criterion.Criterion;
+import org.hibernate.criterion.Example;
+import org.hibernate.criterion.Order;
+import org.hibernate.criterion.Projections;
+import org.hibernate.impl.SessionFactoryImpl;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.beans.factory.annotation.Qualifier;
+import org.springframework.dao.DataAccessException;
+import org.springframework.orm.hibernate3.HibernateTemplate;
+import org.springframework.transaction.annotation.Transactional;
+
+@Transactional("+rail+TxManager")
+public abstract class Generic+Rail+DaoImpl
+ implements GenericCrud {
+
+ private final Class persistentClass;
+
+ @Autowired(required = true)
+ @Qualifier("+rail+Template")
+ protected HibernateTemplate +rail+Template;
+
+ @SuppressWarnings("unchecked")
+ public Generic+Rail+DaoImpl() {
+ this.persistentClass = (Class) ((ParameterizedType) getClass()
+ .getGenericSuperclass()).getActualTypeArguments()[0];
+ }
+
+ public void clear() throws DataAccessException {
+ +rail+Template.clear();
+ }
+
+ public void delete(T entity) throws DataAccessException {
+ +rail+Template.delete(entity);
+ }
+
+ public void deleteById(ID id) throws DataAccessException {
+ T entity = +rail+Template.get(persistentClass, id);
+ +rail+Template.delete(entity);
+ }
+
+ public List findAll() throws HibernateException {
+ return findByCriteria();
+ }
+
+ @SuppressWarnings("unchecked")
+ public List findAll(Order order) throws HibernateException {
+ Criteria crit = +rail+Template.getSessionFactory().getCurrentSession()
+ .createCriteria(persistentClass);
+ crit.addOrder(order);
+ return crit.list();
+ }
+
+ @SuppressWarnings("unchecked")
+ public List findByCriteria(Order order, Criterion... criterion)
+ throws HibernateException {
+ Criteria criteria = +rail+Template.getSessionFactory().getCurrentSession()
+ .createCriteria(persistentClass).addOrder(order);
+ for (Criterion c : criterion) {
+ criteria.add(c);
+ }
+ return criteria.list();
+ }
+
+ @SuppressWarnings("unchecked")
+ public List findByCriteria(Criterion... criterion)
+ throws HibernateException {
+ Criteria criteria = +rail+Template.getSessionFactory()
+ .getCurrentSession().createCriteria(persistentClass);
+ for (Criterion c : criterion) {
+ criteria.add(c);
+ }
+ return criteria.list();
+ }
+
+ @SuppressWarnings("unchecked")
+ public String getDialect()
+
+ throws HibernateException {
+
+ SessionFactoryImpl sfi = (SessionFactoryImpl) +rail+Template
+ .getSessionFactory();
+ return sfi.getDialect().toString();
+ }
+
+ @SuppressWarnings("unchecked")
+ public List oneColumnQuery(final String q)
+
+ throws HibernateException {
+
+ Session session = +rail+Template.getSessionFactory()
+ .getCurrentSession();
+ Query query = session.createQuery(q);
+ return (List) query.list();
+ }
+
+ @SuppressWarnings("unchecked")
+ public List manyColumnQuery(final String q)
+
+ throws HibernateException {
+
+ Session session = +rail+Template.getSessionFactory()
+ .getCurrentSession();
+ Query query = session.createQuery(q);
+ return (List) query.list();
+ }
+
+ @Override
+ public Integer howManyRows(Criterion... criterion)
+
+ throws DataAccessException {
+
+ Criteria criteria = +rail+Template.getSessionFactory().getCurrentSession()
+ .createCriteria(persistentClass)
+ .setProjection(Projections.rowCount());
+ for (Criterion c : criterion) {
+ criteria.add(c);
+ }
+ return (Integer)criteria.uniqueResult();
+ }
+
+ @Override
+ public Integer howManyRowsAlias(String p, String alias, Criterion... criterion)
+
+ throws DataAccessException {
+
+ Criteria criteria = +rail+Template.getSessionFactory().getCurrentSession()
+ .createCriteria(persistentClass)
+ .setProjection(Projections.rowCount());
+ criteria.createAlias(p, alias);
+ for (Criterion c : criterion) {
+ criteria.add(c);
+ }
+ return (Integer)criteria.uniqueResult();
+ }
+
+ @Override
+ public Integer howManyRows() throws DataAccessException {
+ Criteria criteria = +rail+Template.getSessionFactory().getCurrentSession()
+ .createCriteria(persistentClass)
+ .setProjection(Projections.rowCount());
+ return (Integer)criteria.uniqueResult();
+ }
+
+ @SuppressWarnings("unchecked")
+ public T findUniqueByCriteria(Criterion... criterion)
+ throws HibernateException {
+ Criteria crit = +rail+Template.getSessionFactory().getCurrentSession()
+ .createCriteria(persistentClass);
+ for (Criterion c : criterion) {
+ crit.add(c);
+ }
+ return (T) crit.uniqueResult();
+ }
+
+ @SuppressWarnings("unchecked")
+ public List findByExample(T exampleInstance, String[] excludeProperty)
+ throws HibernateException {
+ Criteria crit = +rail+Template.getSessionFactory().getCurrentSession()
+ .createCriteria(persistentClass);
+ Example example = Example.create(exampleInstance);
+ for (String exclude : excludeProperty) {
+ example.excludeProperty(exclude);
+ }
+ crit.add(example);
+ return crit.list();
+ }
+
+ public T findById(ID id, boolean lock) throws DataAccessException {
+ T entity;
+ if (lock)
+ entity = +rail+Template.load(persistentClass, id, LockMode.UPGRADE);
+ else
+ entity = +rail+Template.load(persistentClass, id);
+
+ return entity;
+ }
+
+ public void flush() throws DataAccessException {
+ +rail+Template.flush();
+ }
+
+ public T makePersistent(T entity) throws DataAccessException {
+ +rail+Template.saveOrUpdate(entity);
+ return entity;
+ }
+
+ public void makeTransient(T entity) throws DataAccessException {
+ +rail+Template.delete(entity);
+ }
+
+ public void save(T entity) throws DataAccessException {
+ +rail+Template.save(entity);
+ }
+
+ public void saveOrUpdate(T entity) throws DataAccessException {
+ +rail+Template.saveOrUpdate(entity);
+ }
+
+ public void update(T entity) throws DataAccessException {
+ +rail+Template.update(entity);
+ }
+
+ public void merge(T entity) throws DataAccessException {
+ +rail+Template.merge(entity);
+ }
+ /* screwdriver_knife */
+}
diff --git a/screwdriver-3.5.6/box/snippets/java/GenericRailDaoImplJPA2.java b/screwdriver-3.5.6/box/snippets/java/GenericRailDaoImplJPA2.java
new file mode 100644
index 0000000..a81ab3b
--- /dev/null
+++ b/screwdriver-3.5.6/box/snippets/java/GenericRailDaoImplJPA2.java
@@ -0,0 +1,332 @@
+package +zoccolo+.+rail+;
+
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.List;
+
+import javax.persistence.EntityManager;
+import javax.persistence.PersistenceContext;
+import javax.persistence.PersistenceException;
+import javax.persistence.Tuple;
+import javax.persistence.TypedQuery;
+import javax.persistence.criteria.CriteriaBuilder;
+import javax.persistence.criteria.CriteriaQuery;
+import javax.persistence.criteria.Expression;
+import javax.persistence.criteria.Predicate;
+import javax.persistence.criteria.Root;
+import javax.persistence.Query;
+
+import org.apache.log4j.LogManager;
+import org.apache.log4j.Logger;
+import org.springframework.transaction.annotation.Transactional;
+
+import +zoccolo+.jpa.Filter;
+import +zoccolo+.jpa.Order;
+import +zoccolo+.jpa.OrderBuilder.OrderType;
+import +zoccolo+.jpa.PaginatedFilter;
+import +zoccolo+.jpa.SearchParameter;
+import +zoccolo+.jpa.dao.GenericDao;
+
+/**
+ * Implementation of the interface for dao management.
+ * IMPORTANT - Reference to the persistence context JPA is set in this implementation.
+ *
+ * @param
+ */
+public abstract class Generic+Rail+DaoImpl implements GenericDao {
+
+ public static final Logger logger = LogManager.getLogger(Generic+Rail+DaoImpl.class);
+
+ @PersistenceContext(unitName="+rail+EntityManagerFactory")
+ protected EntityManager em;
+
+ protected String generateDebugParameters(List> parameters) {
+ if (parameters == null || parameters.size() == 0) {
+ return "[]";
+ }
+ StringBuffer paramsDebug = new StringBuffer("[");
+ for (SearchParameter parameter : parameters) {
+ paramsDebug.append(" ").append(parameter.getName()).append("=").append(parameter.getValue());
+ }
+ paramsDebug.append("]");
+
+ return paramsDebug.toString();
+ }
+
+ protected List createOrderClauseList(CriteriaBuilder cb, Root root, Order[] order) {
+ List orderList = new ArrayList();
+ if (order == null) return orderList;
+
+ for (Order ord : order) {
+ if (OrderType.ASC.toString().equals(ord.getAsc())) {
+ orderList.add(cb.asc(root.get(ord.getOrder())));
+ } else {
+ orderList.add(cb.desc(root.get(ord.getOrder())));
+ }
+ }
+ return orderList;
+ }
+
+ @Transactional(rollbackFor=PersistenceException.class)
+ public T create(T entity) {
+ if (logger.isDebugEnabled()) logger.debug("Create entity: " + entity);
+ em.persist(entity);
+ em.flush();
+ return entity;
+ }
+
+ @Transactional(rollbackFor=PersistenceException.class)
+ public T update(T entity) {
+ // Check if instance is detached
+ if (!em.contains(entity)) {
+ if (logger.isDebugEnabled()) logger.debug("Update entity: " + entity);
+ entity = em.merge(entity);
+ }
+ em.flush();
+ return entity;
+ }
+
+ @Transactional(rollbackFor=PersistenceException.class)
+ public void remove(T entity) {
+ if (logger.isDebugEnabled()) logger.debug("Remove entity: " + entity);
+ // check if instance is detached
+ if (!em.contains(entity)) {
+ entity = em.merge(entity);
+ }
+ em.remove(entity);
+ em.flush();
+ }
+
+ public T findUniqueById(Class entityClass, Integer id) {
+ if (logger.isDebugEnabled()) logger.debug("findUniqueById(" + entityClass.getName() + ", " + id + ")");
+ T result = em.find(entityClass, id);
+ return result;
+ }
+
+ public T findUniqueById(Class entityClass, Long id) {
+ if (logger.isDebugEnabled()) logger.debug("findUniqueById(" + entityClass.getName() + ", " + id + ")");
+ T result = em.find(entityClass, id);
+ return result;
+ }
+
+ public T findUniqueById(Class entityClass, String id) {
+ if (logger.isDebugEnabled()) logger.debug("findUniqueById(" + entityClass.getName() + ", '" + id + "')");
+ T result = em.find(entityClass, id);
+ return result;
+ }
+
+ public Collection findListBy(Class entityClass, String fieldName,
+ Class> fieldClass, Object fieldValue) {
+
+ CriteriaBuilder cb = em.getCriteriaBuilder();
+
+ CriteriaQuery cq = cb.createQuery(entityClass);
+ Root root = cq.from(entityClass);
+
+ Predicate predicate = cb.equal(
+ root.get(fieldName).as(fieldClass),
+ fieldValue);
+
+ cq.where(predicate);
+
+ TypedQuery tq = em.createQuery(cq);
+
+ if (logger.isDebugEnabled()) logger.debug("Start of findListBy(" + entityClass + ","
+ + " '" + fieldName + "'" + " " + fieldClass + "" + " '" + fieldValue + "')");
+ Collection results = tq.getResultList();
+
+ return results;
+ }
+
+ public List like(Class fieldClazz, String fieldName,
+ Class valueClazz, String fieldValue) {
+
+ CriteriaBuilder cb = em.getCriteriaBuilder();
+
+ CriteriaQuery cq = cb.createQuery(fieldClazz);
+ Root root = cq.from(fieldClazz);
+
+
+ Predicate predicate = cb.like(
+ (Expression)cb.upper( root.get(fieldName).as(valueClazz)), "%"+
+ fieldValue.toUpperCase()+"%");
+
+ cq.where(predicate);
+
+ TypedQuery tq = em.createQuery(cq);
+
+ List results = tq.getResultList();
+
+ return results;
+ }
+
+ public Collection findAll(Class entityClass, Order ... order) {
+ CriteriaBuilder cb = em.getCriteriaBuilder();
+
+ CriteriaQuery cq = cb.createQuery(entityClass);
+ Root root = cq.from(entityClass);
+
+ cq.orderBy(createOrderClauseList(cb, root, order));
+
+ TypedQuery tq = em.createQuery(cq);
+
+ if (logger.isDebugEnabled()) logger.debug("Start of findAll(" + entityClass + ") method");
+ Collection result = tq.getResultList();
+
+ return result;
+ }
+
+ public Boolean exists(Class entityClass, Integer id) {
+ if (logger.isDebugEnabled()) logger.debug("Start of exists(" + entityClass + ", " + id + ") method");
+ T result = em.find(entityClass, id);
+ return result == null ? false : true;
+ }
+
+ public Boolean exists(Class entityClass, Long id) {
+ if (logger.isDebugEnabled()) logger.debug("Start of exists(" + entityClass + ", " + id + ") method");
+ T result = em.find(entityClass, id);
+ return result == null ? false : true;
+ }
+
+ public Boolean exists(Class entityClass, String id) {
+ if (logger.isDebugEnabled()) logger.debug("Start of exists(" + entityClass + ", " + id + ") method");
+ T result = em.find(entityClass, id);
+ return result == null ? false : true;
+ }
+
+ /**
+ * Metodo da implementare per effettuare un'inizializzazione di una entity
+ * con caricamenti di dati lazy. Per default restituisce la entity
+ * inalterata.
+ *
+ * la HibernateUtils.initialize()
.
+ *
+ * @param entity
+ * @return
+ */
+ protected T load(T entity) {
+ return entity;
+ }
+
+ protected void setPagination(TypedQuery tq, Filter filter) {
+ if (filter instanceof PaginatedFilter) {
+ PaginatedFilter pfilter = (PaginatedFilter) filter;
+
+ int firstResult = pfilter.getFirstResult();
+ int pageSize = pfilter.getPageSize();
+
+ if (logger.isTraceEnabled()) logger.trace("Range (" + firstResult + ", " + pageSize + ")");
+ tq.setFirstResult(firstResult);
+ tq.setMaxResults(pageSize);
+ }
+ }
+
+ public Long count(Class entityClass) {
+ CriteriaBuilder cb = em.getCriteriaBuilder();
+ CriteriaQuery cq = cb.createQuery(Long.class);
+ Root root = cq.from(entityClass);
+ cq.select(cb.count(root));
+
+ TypedQuery tq = em.createQuery(cq);
+ Long result = tq.getSingleResult();
+ return result;
+ }
+
+ public Long count(Class entityClass, Filter filter) {
+ CriteriaBuilder cb = em.getCriteriaBuilder();
+ CriteriaQuery cq = cb.createQuery(Long.class);
+ Root root = cq.from(entityClass);
+
+ List predicates = new ArrayList();
+ if (!filter.getParams().isEmpty()) {
+ predicates.add(getLikePredicate(cb, root, filter.getParams()));
+ }
+ if (predicates.size() > 0) {
+ cq.where(cb.and(predicates.toArray(new Predicate[] {})));
+ }
+
+ cq.select(cb.count(root));
+
+ TypedQuery tq = em.createQuery(cq);
+ Long result = tq.getSingleResult();
+ return result;
+ }
+
+
+ @SuppressWarnings("unchecked")
+ public List fetch(Class entityClass, Filter filter, Order... order) {
+ CriteriaBuilder cb = em.getCriteriaBuilder();
+ CriteriaQuery cq = cb.createTupleQuery();
+ Root root = cq.from(entityClass);
+
+ List predicates = new ArrayList();
+ if (!filter.getParams().isEmpty()) {
+ predicates.add(getLikePredicate(cb, root, filter.getParams()));
+ }
+ if (predicates.size() > 0) {
+ cq.where(cb.and(predicates.toArray(new Predicate[] {})));
+ }
+
+ cq.select(cb.tuple(root));
+
+ cq.distinct(true);
+
+ cq.orderBy(createOrderClauseList(cb, root, order));
+
+ TypedQuery tq = em.createQuery(cq);
+
+ setPagination(tq, filter);
+ List results = tq.getResultList();
+ List loadedResults = new ArrayList();
+ for (Tuple result : results) {
+ loadedResults.add(load((T) result.get(0)));
+ }
+ return loadedResults;
+ }
+
+
+ public boolean existsByFilename(Class entityClass, SearchParameter fileName) {
+ CriteriaBuilder cb = em.getCriteriaBuilder();
+ CriteriaQuery cq = cb.createQuery(Long.class);
+ Root root = cq.from(entityClass);
+
+ Predicate p = cb.equal(root.get(fileName.getName()).as(String.class), fileName.getValue());
+ cq.where(p);
+
+ cq.select(cb.count(root));
+
+ TypedQuery tq = em.createQuery(cq);
+ Long result = tq.getSingleResult();
+ return result > 0;
+ }
+
+ private Predicate getLikePredicate(CriteriaBuilder cb, Root root, List> parameters) {
+ List orPredicates = new ArrayList();
+
+ for (SearchParameter parameter : parameters) {
+ orPredicates.add(cb.like(cb.upper(root.get(parameter.getName()).as(String.class)), "%" + parameter.getValue().toUpperCase() + "%"));
+ }
+
+ return cb.or(orPredicates.toArray(new Predicate[] {}));
+ }
+
+ @SuppressWarnings("unchecked")
+
+ public List oneColumnQuery(final String string) {
+ Query qu = em.createQuery(string);
+ List sE = qu.getResultList();
+ return sE;
+ }
+
+ public List manyColumnQuery(final String string) {
+ Query qu = em.createQuery(string);
+ List sE = qu.getResultList();
+ return sE;
+ }
+
+ public Object findByPrimary(Class entityClass, Object chiave) {
+ Object x = em.find(entityClass, chiave);
+ return x;
+ }
+ /* screwdriver_knife */
+}
diff --git a/screwdriver-3.5.6/box/snippets/java/GenericRailDaoImplJPA2JRE7.java b/screwdriver-3.5.6/box/snippets/java/GenericRailDaoImplJPA2JRE7.java
new file mode 100644
index 0000000..7e283f8
--- /dev/null
+++ b/screwdriver-3.5.6/box/snippets/java/GenericRailDaoImplJPA2JRE7.java
@@ -0,0 +1,349 @@
+package +zoccolo+.+rail+;
+
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.List;
+
+import javax.persistence.EntityManager;
+import javax.persistence.PersistenceContext;
+import javax.persistence.PersistenceException;
+import javax.persistence.Tuple;
+import javax.persistence.TypedQuery;
+import javax.persistence.criteria.CriteriaBuilder;
+import javax.persistence.criteria.CriteriaQuery;
+import javax.persistence.criteria.Expression;
+import javax.persistence.criteria.Predicate;
+import javax.persistence.criteria.Root;
+import javax.persistence.Query;
+
+import org.apache.log4j.LogManager;
+import org.apache.log4j.Logger;
+import org.springframework.transaction.annotation.Transactional;
+
+import +zoccolo+.jpa.Filter;
+import +zoccolo+.jpa.Order;
+import +zoccolo+.jpa.OrderBuilder.OrderType;
+import +zoccolo+.jpa.PaginatedFilter;
+import +zoccolo+.jpa.SearchParameter;
+import +zoccolo+.jpa.dao.GenericDao;
+
+/**
+ * Implementation of the interface for dao management.
+ * IMPORTANT - Reference to the persistence context JPA is set in this implementation.
+ *
+ * @param
+ */
+public abstract class Generic+Rail+DaoImpl implements GenericDao {
+
+ public static final Logger logger = LogManager.getLogger(Generic+Rail+DaoImpl.class);
+
+ @PersistenceContext(unitName="+rail+EntityManagerFactory")
+ protected EntityManager em;
+
+ protected String generateDebugParameters(List> parameters) {
+ if (parameters == null || parameters.size() == 0) {
+ return "[]";
+ }
+ StringBuffer paramsDebug = new StringBuffer("[");
+ for (SearchParameter parameter : parameters) {
+ paramsDebug.append(" ").append(parameter.getName()).append("=").append(parameter.getValue());
+ }
+ paramsDebug.append("]");
+
+ return paramsDebug.toString();
+ }
+
+ protected List createOrderClauseList(CriteriaBuilder cb, Root root, Order[] order) {
+ List orderList = new ArrayList<>();
+ if (order == null) return orderList;
+
+ for (Order ord : order) {
+ if (OrderType.ASC.toString().equals(ord.getAsc())) {
+ orderList.add(cb.asc(root.get(ord.getOrder())));
+ } else {
+ orderList.add(cb.desc(root.get(ord.getOrder())));
+ }
+ }
+ return orderList;
+ }
+
+ @Override
+ @Transactional(rollbackFor=PersistenceException.class)
+ public T create(T entity) {
+ if (logger.isDebugEnabled()) logger.debug("Create entity: " + entity);
+ em.persist(entity);
+ em.flush();
+ return entity;
+ }
+
+ @Override
+ @Transactional(rollbackFor=PersistenceException.class)
+ public T update(T entity) {
+ // Check if instance is detached
+ if (!em.contains(entity)) {
+ if (logger.isDebugEnabled()) logger.debug("Update entity: " + entity);
+ entity = em.merge(entity);
+ }
+ em.flush();
+ return entity;
+ }
+
+ @Override
+ @Transactional(rollbackFor=PersistenceException.class)
+ public void remove(T entity) {
+ if (logger.isDebugEnabled()) logger.debug("Remove entity: " + entity);
+ // check if instance is detached
+ if (!em.contains(entity)) {
+ entity = em.merge(entity);
+ }
+ em.remove(entity);
+ em.flush();
+ }
+
+ @Override
+ public T findUniqueById(Class entityClass, Integer id) {
+ if (logger.isDebugEnabled()) logger.debug("findUniqueById(" + entityClass.getName() + ", " + id + ")");
+ T result = em.find(entityClass, id);
+ return result;
+ }
+
+ @Override
+ public T findUniqueById(Class entityClass, Long id) {
+ if (logger.isDebugEnabled()) logger.debug("findUniqueById(" + entityClass.getName() + ", " + id + ")");
+ T result = em.find(entityClass, id);
+ return result;
+ }
+
+ @Override
+ public T findUniqueById(Class entityClass, String id) {
+ if (logger.isDebugEnabled()) logger.debug("findUniqueById(" + entityClass.getName() + ", '" + id + "')");
+ T result = em.find(entityClass, id);
+ return result;
+ }
+
+ @Override
+ public Collection findListBy(Class entityClass, String fieldName,
+ Class> fieldClass, Object fieldValue) {
+
+ CriteriaBuilder cb = em.getCriteriaBuilder();
+
+ CriteriaQuery cq = cb.createQuery(entityClass);
+ Root root = cq.from(entityClass);
+
+ Predicate predicate = cb.equal(
+ root.get(fieldName).as(fieldClass),
+ fieldValue);
+
+ cq.where(predicate);
+
+ TypedQuery tq = em.createQuery(cq);
+
+ if (logger.isDebugEnabled()) logger.debug("Start of findListBy(" + entityClass + ","
+ + " '" + fieldName + "'" + " " + fieldClass + "" + " '" + fieldValue + "')");
+ Collection results = tq.getResultList();
+
+ return results;
+ }
+
+ @Override
+ public List like(Class fieldClazz, String fieldName,
+ Class valueClazz, String fieldValue) {
+
+ CriteriaBuilder cb = em.getCriteriaBuilder();
+
+ CriteriaQuery cq = cb.createQuery(fieldClazz);
+ Root root = cq.from(fieldClazz);
+
+
+ Predicate predicate = cb.like(
+ (Expression)cb.upper( root.get(fieldName).as(valueClazz)), "%"+
+ fieldValue.toUpperCase()+"%");
+
+ cq.where(predicate);
+
+ TypedQuery tq = em.createQuery(cq);
+
+ List results = tq.getResultList();
+
+ return results;
+ }
+
+
+ @Override
+ public Collection findAll(Class entityClass, Order ... order) {
+ CriteriaBuilder cb = em.getCriteriaBuilder();
+
+ CriteriaQuery cq = cb.createQuery(entityClass);
+ Root root = cq.from(entityClass);
+
+ cq.orderBy(createOrderClauseList(cb, root, order));
+
+ TypedQuery tq = em.createQuery(cq);
+
+ if (logger.isDebugEnabled()) logger.debug("Start of findAll(" + entityClass + ") method");
+ Collection result = tq.getResultList();
+
+ return result;
+ }
+
+ @Override
+ public Boolean exists(Class entityClass, Integer id) {
+ if (logger.isDebugEnabled()) logger.debug("Start of exists(" + entityClass + ", " + id + ") method");
+ T result = em.find(entityClass, id);
+ return result == null ? false : true;
+ }
+
+ @Override
+ public Boolean exists(Class entityClass, Long id) {
+ if (logger.isDebugEnabled()) logger.debug("Start of exists(" + entityClass + ", " + id + ") method");
+ T result = em.find(entityClass, id);
+ return result == null ? false : true;
+ }
+
+ @Override
+ public Boolean exists(Class entityClass, String id) {
+ if (logger.isDebugEnabled()) logger.debug("Start of exists(" + entityClass + ", " + id + ") method");
+ T result = em.find(entityClass, id);
+ return result == null ? false : true;
+ }
+
+ /**
+ * Metodo da implementare per effettuare un'inizializzazione di una entity
+ * con caricamenti di dati lazy. Per default restituisce la entity
+ * inalterata.
+ *
+ * la HibernateUtils.initialize()
.
+ *
+ * @param entity
+ * @return
+ */
+ protected T load(T entity) {
+ return entity;
+ }
+
+ protected void setPagination(TypedQuery tq, Filter filter) {
+ if (filter instanceof PaginatedFilter) {
+ PaginatedFilter pfilter = (PaginatedFilter) filter;
+
+ int firstResult = pfilter.getFirstResult();
+ int pageSize = pfilter.getPageSize();
+
+ if (logger.isTraceEnabled()) logger.trace("Range (" + firstResult + ", " + pageSize + ")");
+ tq.setFirstResult(firstResult);
+ tq.setMaxResults(pageSize);
+ }
+ }
+
+ @Override
+ public Long count(Class entityClass) {
+ CriteriaBuilder cb = em.getCriteriaBuilder();
+ CriteriaQuery cq = cb.createQuery(Long.class);
+ Root root = cq.from(entityClass);
+ cq.select(cb.count(root));
+
+ TypedQuery tq = em.createQuery(cq);
+ Long result = tq.getSingleResult();
+ return result;
+ }
+
+ @Override
+ public Long count(Class entityClass, Filter filter) {
+ CriteriaBuilder cb = em.getCriteriaBuilder();
+ CriteriaQuery cq = cb.createQuery(Long.class);
+ Root root = cq.from(entityClass);
+
+ List predicates = new ArrayList<>();
+ if (!filter.getParams().isEmpty()) {
+ predicates.add(getLikePredicate(cb, root, filter.getParams()));
+ }
+ if (predicates.size() > 0) {
+ cq.where(cb.and(predicates.toArray(new Predicate[] {})));
+ }
+
+ cq.select(cb.count(root));
+
+ TypedQuery tq = em.createQuery(cq);
+ Long result = tq.getSingleResult();
+ return result;
+ }
+
+ @Override
+ @SuppressWarnings("unchecked")
+ public List fetch(Class entityClass, Filter filter, Order... order) {
+ CriteriaBuilder cb = em.getCriteriaBuilder();
+ CriteriaQuery cq = cb.createTupleQuery();
+ Root root = cq.from(entityClass);
+
+ List predicates = new ArrayList<>();
+ if (!filter.getParams().isEmpty()) {
+ predicates.add(getLikePredicate(cb, root, filter.getParams()));
+ }
+ if (predicates.size() > 0) {
+ cq.where(cb.and(predicates.toArray(new Predicate[] {})));
+ }
+
+ cq.select(cb.tuple(root));
+
+ cq.distinct(true);
+
+ cq.orderBy(createOrderClauseList(cb, root, order));
+
+ TypedQuery tq = em.createQuery(cq);
+
+ setPagination(tq, filter);
+ List results = tq.getResultList();
+ List loadedResults = new ArrayList();
+ for (Tuple result : results) {
+ loadedResults.add(load((T) result.get(0)));
+ }
+ return loadedResults;
+ }
+
+ @Override
+ public boolean existsByFilename(Class entityClass, SearchParameter fileName) {
+ CriteriaBuilder cb = em.getCriteriaBuilder();
+ CriteriaQuery cq = cb.createQuery(Long.class);
+ Root root = cq.from(entityClass);
+
+ Predicate p = cb.equal(root.get(fileName.getName()).as(String.class), fileName.getValue());
+ cq.where(p);
+
+ cq.select(cb.count(root));
+
+ TypedQuery tq = em.createQuery(cq);
+ Long result = tq.getSingleResult();
+ return result > 0;
+ }
+
+ private Predicate getLikePredicate(CriteriaBuilder cb, Root root, List> parameters) {
+ List orPredicates = new ArrayList();
+
+ for (SearchParameter parameter : parameters) {
+ orPredicates.add(cb.like(cb.upper(root.get(parameter.getName()).as(String.class)), "%" + parameter.getValue().toUpperCase() + "%"));
+ }
+
+ return cb.or(orPredicates.toArray(new Predicate[] {}));
+ }
+
+ @SuppressWarnings("unchecked")
+ @Override
+ public List oneColumnQuery(final String string) {
+ Query qu = em.createQuery(string);
+ List sE = qu.getResultList();
+ return sE;
+ }
+
+ @Override
+ public List manyColumnQuery(final String string) {
+ Query qu = em.createQuery(string);
+ List sE = qu.getResultList();
+ return sE;
+ }
+
+ @Override
+ public Object findByPrimary(Class entityClass, Object chiave) {
+ Object x = em.find(entityClass, chiave);
+ return x;
+ }
+ /* screwdriver_knife */
+}
diff --git a/screwdriver-3.5.6/box/snippets/java/HttpRequestWrapper.java b/screwdriver-3.5.6/box/snippets/java/HttpRequestWrapper.java
new file mode 100644
index 0000000..7379934
--- /dev/null
+++ b/screwdriver-3.5.6/box/snippets/java/HttpRequestWrapper.java
@@ -0,0 +1,83 @@
+package +zoccolo+.web.servlet;
+
+import +zoccolo+.web.listener.AntiSamyListener;
+
+import +zoccolo+.web.sanitizer.XssSanitizer;
+
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletRequestWrapper;
+
+import org.owasp.validator.html.CleanResults;
+import org.owasp.validator.html.PolicyException;
+import org.owasp.validator.html.ScanException;
+
+public class HttpRequestWrapper extends HttpServletRequestWrapper {
+
+ private XssSanitizer sanitizer;
+
+ public HttpRequestWrapper(HttpServletRequest servletRequest) {
+ super(servletRequest);
+ this.sanitizer = (XssSanitizer)
+ this.getSession().getServletContext().
+ getAttribute(AntiSamyListener.ANTISAMY_SANITIZER);
+ if(this.sanitizer == null)
+ throw new RuntimeException("Antisamy is not bound in ServletContext");
+ }
+
+ @Override
+ public String[] getParameterValues(String parameter) {
+ String[] retVal = null;
+ String[] values = super.getParameterValues(parameter);
+ if(values != null)
+ {
+ retVal = new String[values.length];
+ for(int i = 0; i < values.length; i++)
+ {
+ if(values[i] != null)
+ retVal[i] = this.cleanXss(values[i]);
+ else
+ retVal[i] = values[i];
+ }
+ }
+ return retVal;
+ }
+
+ @Override
+ public String getParameter(String parameter) {
+ String paramValue = super.getParameter(parameter);
+ if(paramValue != null)
+ return this.cleanXss(paramValue);
+ else
+ return null;
+ }
+
+ @Override
+ public String getHeader(String name) {
+ String value = super.getHeader(name);
+ if(value != null)
+ return this.cleanXss(value);
+ else
+ return null;
+ }
+
+ private String cleanXss(String parameterValue){
+ String retVal = null;
+ if(parameterValue != null) {
+ try
+ {
+ CleanResults cr = this.sanitizer.scan(parameterValue);
+ retVal = cr.getCleanHTML();
+ }
+ catch (ScanException e)
+ {
+ throw new RuntimeException("ScanException: "+e.getMessage());
+ }
+ catch (PolicyException e)
+ {
+ throw new RuntimeException("ScanException: "+e.getMessage());
+ }
+ }
+ return retVal;
+ }
+ /* screwdriver_knife */
+}
diff --git a/screwdriver-3.5.6/box/snippets/java/JsessionIdRemoveFilter.java b/screwdriver-3.5.6/box/snippets/java/JsessionIdRemoveFilter.java
new file mode 100644
index 0000000..2cf1c53
--- /dev/null
+++ b/screwdriver-3.5.6/box/snippets/java/JsessionIdRemoveFilter.java
@@ -0,0 +1,87 @@
+package +zoccolo+.web.filter;
+
+import java.io.IOException;
+
+import javax.servlet.Filter;
+import javax.servlet.FilterChain;
+import javax.servlet.FilterConfig;
+import javax.servlet.ServletException;
+import javax.servlet.ServletRequest;
+import javax.servlet.ServletResponse;
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+import javax.servlet.http.HttpServletResponseWrapper;
+
+/**
+ * Servlet Filter implementation class JsessionIdRemoveFilter
+ */
+public class JsessionIdRemoveFilter implements Filter {
+
+ /**
+ * Default constructor.
+ */
+ public JsessionIdRemoveFilter() {
+ }
+
+ /**
+ * @see Filter#destroy()
+ */
+ public void destroy() {
+ }
+
+ /**
+ * @see Filter#doFilter(ServletRequest, ServletResponse, FilterChain)
+ */
+ public void doFilter(ServletRequest req, ServletResponse res, FilterChain chain) throws IOException, ServletException {
+ if (!(req instanceof HttpServletRequest)) {
+ chain.doFilter(req, res);
+ return;
+ }
+
+ HttpServletRequest request = (HttpServletRequest) req;
+ HttpServletResponse response = (HttpServletResponse) res;
+ // Redirect requests with JSESSIONID in URL to clean version
+ // (old links bookmarked/stored by bots)
+ // This is ONLY triggered if the request did not also contain a
+ // JSESSIONID cookie! Which should be fine for bots...
+ if (request.isRequestedSessionIdFromURL()) {
+ String url = request.getRequestURL()
+ .append(request.getQueryString() != null ? "?"
+ + request.getQueryString() :
+ "").toString();
+ response.setHeader("Location", url);
+ response.sendError(HttpServletResponse.SC_MOVED_PERMANENTLY);
+ return;
+ }
+ // Prevent rendering of JSESSIONID in URLs for all outgoing links
+ HttpServletResponseWrapper wrappedResponse = new
+ HttpServletResponseWrapper(
+ response) {
+ @Override
+ public String encodeRedirectUrl(String url) {
+ return url;
+ }
+ @Override
+ public String encodeRedirectURL(String url) {
+ return url;
+ }
+ @Override
+ public String encodeUrl(String url) {
+ return url;
+ }
+ @Override
+ public String encodeURL(String url) {
+ return url;
+ }
+ };
+
+ chain.doFilter(req, wrappedResponse);
+ }
+
+ /**
+ * @see Filter#init(FilterConfig)
+ */
+ public void init(FilterConfig fConfig) throws ServletException {
+ }
+ /* screwdriver_knife */
+}
diff --git a/screwdriver-3.5.6/box/snippets/java/King.java b/screwdriver-3.5.6/box/snippets/java/King.java
new file mode 100644
index 0000000..e97be1a
--- /dev/null
+++ b/screwdriver-3.5.6/box/snippets/java/King.java
@@ -0,0 +1,27 @@
+package +zoccolo+.domain;
+
+import java.io.Serializable;
+
+public class King implements Serializable {
+
+ private String userid;
+ private String password;
+
+ private static final long serialVersionUID = 8433999509932007961L;
+
+ public String getUserid() {
+ return userid;
+ }
+
+ public void setUserid(String userid) {
+ this.userid = userid;
+ }
+
+ public String getPassword() {
+ return password;
+ }
+
+ public void setPassword(String password) {
+ this.password = password;
+ }
+}
\ No newline at end of file
diff --git a/screwdriver-3.5.6/box/snippets/java/KingDao.java b/screwdriver-3.5.6/box/snippets/java/KingDao.java
new file mode 100644
index 0000000..916d8b8
--- /dev/null
+++ b/screwdriver-3.5.6/box/snippets/java/KingDao.java
@@ -0,0 +1,13 @@
+package +zoccolo+.web.authentication;
+
+import java.util.List;
+
+import org.springframework.dao.EmptyResultDataAccessException;
+
+import +zoccolo+.domain.King;
+
+public interface KingDao {
+
+ King getUser(String id);
+
+}
diff --git a/screwdriver-3.5.6/box/snippets/java/KingDaoImpl.java b/screwdriver-3.5.6/box/snippets/java/KingDaoImpl.java
new file mode 100644
index 0000000..78a1fa3
--- /dev/null
+++ b/screwdriver-3.5.6/box/snippets/java/KingDaoImpl.java
@@ -0,0 +1,17 @@
+package +zoccolo+.web.authentication;
+
+import java.util.List;
+
+import org.springframework.dao.EmptyResultDataAccessException;
+import org.springframework.stereotype.Repository;
+
+import +zoccolo+.domain.King;
+
+@Repository
+public class KingDaoImpl implements KingDao {
+
+ public King getUser(String id) {
+ King king = new King();
+ return king;
+ }
+}
diff --git a/screwdriver-3.5.6/box/snippets/java/LoggedUser.java b/screwdriver-3.5.6/box/snippets/java/LoggedUser.java
new file mode 100644
index 0000000..5d9b341
--- /dev/null
+++ b/screwdriver-3.5.6/box/snippets/java/LoggedUser.java
@@ -0,0 +1,16 @@
+package +zoccolo+.web.annotation;
+
+import java.lang.annotation.Documented;
+import java.lang.annotation.ElementType;
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
+import java.lang.annotation.Target;
+
+@Target(ElementType.PARAMETER)
+@Retention(RetentionPolicy.RUNTIME)
+@Documented
+public @interface LoggedUser {
+
+ /* screwdriver_knife */
+
+}
diff --git a/screwdriver-3.5.6/box/snippets/java/LoggedUserMethodArgumentResolver.java b/screwdriver-3.5.6/box/snippets/java/LoggedUserMethodArgumentResolver.java
new file mode 100644
index 0000000..92a0925
--- /dev/null
+++ b/screwdriver-3.5.6/box/snippets/java/LoggedUserMethodArgumentResolver.java
@@ -0,0 +1,45 @@
+package +zoccolo+.web.resolver;
+
+import +zoccolo+.security.Belonger;
+import +zoccolo+.web.annotation.LoggedUser;
+
+import java.security.Principal;
+
+import org.springframework.core.MethodParameter;
+import org.springframework.security.core.Authentication;
+import org.springframework.stereotype.Component;
+import org.springframework.web.bind.support.WebArgumentResolver;
+import org.springframework.web.bind.support.WebDataBinderFactory;
+import org.springframework.web.context.request.NativeWebRequest;
+import org.springframework.web.method.support.HandlerMethodArgumentResolver;
+import org.springframework.web.method.support.ModelAndViewContainer;
+
+@Component
+public class LoggedUserMethodArgumentResolver
+ implements HandlerMethodArgumentResolver {
+
+ @Override
+ public boolean supportsParameter(MethodParameter methodParameter) {
+ return
+ methodParameter.getParameterAnnotation(LoggedUser.class) != null
+ && methodParameter.getParameterType().equals(Belonger.class);
+ }
+
+ @Override
+ public Object resolveArgument(MethodParameter methodParameter,
+ ModelAndViewContainer mavContainer,
+ NativeWebRequest webRequest,
+ WebDataBinderFactory binderFactory) throws Exception {
+
+ if (this.supportsParameter(methodParameter)) {
+ Principal principal = webRequest.getUserPrincipal();
+ return principal==null?null:(Belonger) ((Authentication) principal).getPrincipal();
+ }
+ else {
+ return WebArgumentResolver.UNRESOLVED;
+ }
+ }
+
+ /* screwdriver_knife */
+
+}
diff --git a/screwdriver-3.5.6/box/snippets/java/Notice.java b/screwdriver-3.5.6/box/snippets/java/Notice.java
new file mode 100644
index 0000000..139495c
--- /dev/null
+++ b/screwdriver-3.5.6/box/snippets/java/Notice.java
@@ -0,0 +1,40 @@
+package +zoccolo+.web.model.utility;
+
+import org.apache.log4j.Logger;
+
+public class Notice {
+
+ /** ordinary logger */
+ @SuppressWarnings("unused")
+ private static final Logger logger = Logger.getLogger(
+ Notice.class);
+
+ /** proprietà  del bean */
+ private String screwFormattedText;
+
+ /** proprietà  del bean */
+ private String screwFreeText;
+
+ /** standard get method */
+ public String getScrewFreeText() {
+ return screwFreeText;
+ }
+
+ /** standard set method, argument String */
+ public void setScrewFreeText(String screwFreeText) {
+ this.screwFreeText = screwFreeText;
+ }
+
+ /** standard get method */
+ public String getScrewFormattedText() {
+
+ return this.screwFormattedText;
+ }
+
+ /** standard set method, argument String */
+ public void setScrewFormattedText(String s) {
+
+ this.screwFormattedText = s;
+ }
+ /* screwdriver_knife */
+}
diff --git a/screwdriver-3.5.6/box/snippets/java/QuartzJob.java b/screwdriver-3.5.6/box/snippets/java/QuartzJob.java
new file mode 100644
index 0000000..53f03b3
--- /dev/null
+++ b/screwdriver-3.5.6/box/snippets/java/QuartzJob.java
@@ -0,0 +1,33 @@
+package +zoccolo+.job;
+
+import +zoccolo+.task.impl.+Quartztask+TaskImpl;
+
+import org.quartz.JobExecutionContext;
+import org.quartz.JobExecutionException;
+import org.apache.log4j.Logger;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.scheduling.quartz.QuartzJobBean;
+import org.springframework.web.context.support.SpringBeanAutowiringSupport;
+
+public class +Quartzjob+ extends QuartzJobBean {
+
+ private static final Logger log = Logger.getLogger(+Quartzjob+.class);
+
+ @Autowired
+ +Quartztask+TaskImpl task;
+
+ @Override
+ protected void executeInternal(JobExecutionContext arg0)
+
+ throws JobExecutionException {
+
+ try {
+ log.debug("executeInternal...");
+ SpringBeanAutowiringSupport
+ .processInjectionBasedOnCurrentContext(this);
+ task.execute(arg0);
+ } catch (Exception e) {
+ e.printStackTrace();
+ }
+ }
+}
diff --git a/screwdriver-3.5.6/box/snippets/java/QuartzTask.java b/screwdriver-3.5.6/box/snippets/java/QuartzTask.java
new file mode 100644
index 0000000..7b634e5
--- /dev/null
+++ b/screwdriver-3.5.6/box/snippets/java/QuartzTask.java
@@ -0,0 +1,8 @@
+package +zoccolo+.task;
+
+import org.quartz.JobExecutionContext;
+
+public interface +Quartztask+Task {
+
+ public void execute(JobExecutionContext ctx) throws Exception;
+}
diff --git a/screwdriver-3.5.6/box/snippets/java/QuartzTaskImpl.java b/screwdriver-3.5.6/box/snippets/java/QuartzTaskImpl.java
new file mode 100644
index 0000000..76f6286
--- /dev/null
+++ b/screwdriver-3.5.6/box/snippets/java/QuartzTaskImpl.java
@@ -0,0 +1,24 @@
+package +zoccolo+.task.impl;
+
+import java.util.Date;
+
+import org.apache.log4j.Logger;
+import org.quartz.JobExecutionContext;
+import org.springframework.web.context.support.SpringBeanAutowiringSupport;
+
+import +zoccolo+.task.+Quartztask+Task;
+
+public class +Quartztask+TaskImpl implements +Quartztask+Task {
+
+ private static final Logger log = Logger.getLogger(
+ +Quartztask+TaskImpl.class);
+
+ public void execute(JobExecutionContext ctx)
+
+ throws Exception {
+
+ SpringBeanAutowiringSupport
+ .processInjectionBasedOnCurrentContext(this);
+ /* screwdriver_knife */
+ }
+}
diff --git a/screwdriver-3.5.6/box/snippets/java/ScrewInterceptor.java b/screwdriver-3.5.6/box/snippets/java/ScrewInterceptor.java
new file mode 100644
index 0000000..0462f30
--- /dev/null
+++ b/screwdriver-3.5.6/box/snippets/java/ScrewInterceptor.java
@@ -0,0 +1,38 @@
+package +zoccolo+.web.interceptor;
+
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+
+import org.springframework.web.servlet.HandlerInterceptor;
+import org.springframework.web.servlet.ModelAndView;
+
+public class +nocciolo+ implements HandlerInterceptor {
+
+ public void afterCompletion(HttpServletRequest arg0,
+ HttpServletResponse arg1, Object arg2, Exception arg3)
+ throws Exception {
+ // TODO Auto-generated method stub
+ }
+
+ public void postHandle(HttpServletRequest arg0,
+ HttpServletResponse arg1, Object arg2, ModelAndView arg3)
+ throws Exception {
+ // TODO Auto-generated method stub
+ }
+
+ public boolean preHandle(HttpServletRequest arg0,
+ HttpServletResponse arg1, Object arg2) throws Exception {
+ /* 2020-01-20: if I set "return false", I obtain a white home page,
+ * nothing works. */
+ return true;
+ }
+
+ public void afterConcurrentHandlingStarted(
+ HttpServletRequest request, HttpServletResponse response, Object handler)
+ throws Exception {
+ // TODO Auto-generated method stub
+ }
+
+ /* screwdriver_knife */
+
+}
diff --git a/screwdriver-3.5.6/box/snippets/java/SimpleSpringSecurityUserContext.java b/screwdriver-3.5.6/box/snippets/java/SimpleSpringSecurityUserContext.java
new file mode 100644
index 0000000..42972e6
--- /dev/null
+++ b/screwdriver-3.5.6/box/snippets/java/SimpleSpringSecurityUserContext.java
@@ -0,0 +1,50 @@
+package +zoccolo+.web.authentication;
+
+import java.util.Collection;
+
+import org.springframework.security.authentication.UsernamePasswordAuthenticationToken;
+import org.springframework.security.core.Authentication;
+import org.springframework.security.core.GrantedAuthority;
+import org.springframework.security.core.context.SecurityContext;
+import org.springframework.security.core.context.SecurityContextHolder;
+import org.springframework.stereotype.Component;
+
+import +zoccolo+.web.authentication.authority.UserAuthorityUtils;
+import +tabposition+.+tabella+;
+
+/**
+ * An implementation of {@link UserContext} that looks up the {@link CalendarUser} using the Spring Security's
+ * {@link Authentication} by principal name.
+ *
+ * @author Rob Winch
+ *
+ */
+@Component
+public class SpringSecurityUserContext implements UserContext {
+ /**
+ * Get the {@link CalendarUser} by casting the {@link Authentication}'s principal to a {@link CalendarUser}.
+ */
+ @Override
+ public +tabella+ getCurrentUser() {
+ SecurityContext context = SecurityContextHolder.getContext();
+ Authentication authentication = context.getAuthentication();
+ if (authentication == null) {
+ return null;
+ }
+ return (+tabella+) authentication.getPrincipal();
+ }
+
+ /**
+ * Sets the {@link CalendarUser} as the current {@link Authentication}'s principal. It uses
+ */
+ @Override
+ public void setCurrentUser(+tabella+ user) {
+ if (user == null) {
+ throw new IllegalArgumentException("user cannot be null");
+ }
+ Collection extends GrantedAuthority> authorities = UserAuthorityUtils.createAuthorities(user);
+ UsernamePasswordAuthenticationToken authentication = new UsernamePasswordAuthenticationToken(user,
+ user.get+password+(),authorities);
+ SecurityContextHolder.getContext().setAuthentication(authentication);
+ }
+}
diff --git a/screwdriver-3.5.6/box/snippets/java/SimpleUsernamePasswordAuthenticationFilter.java b/screwdriver-3.5.6/box/snippets/java/SimpleUsernamePasswordAuthenticationFilter.java
new file mode 100644
index 0000000..210b2b9
--- /dev/null
+++ b/screwdriver-3.5.6/box/snippets/java/SimpleUsernamePasswordAuthenticationFilter.java
@@ -0,0 +1,47 @@
+package +zoccolo+.web.authentication;
+
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+
+import org.springframework.security.authentication.AuthenticationServiceException;
+import org.springframework.security.core.Authentication;
+import org.springframework.security.core.AuthenticationException;
+import org.springframework.security.web.authentication.UsernamePasswordAuthenticationFilter;
+
+import +zoccolo+.web.authentication.SimpleUsernamePasswordAuthenticationToken;
+
+/**
+ * An extension to the existing
+ * {@link UsernamePasswordAuthenticationFilter} that obtains
+ * a domain parameter and then
+ * creates a {@link DomainUsernamePasswordAuthenticationToken}.
+ *
+ * @author Rob Winch
+ *
+ */
+public final class SimpleUsernamePasswordAuthenticationFilter
+
+ extends UsernamePasswordAuthenticationFilter {
+
+ public Authentication attemptAuthentication(HttpServletRequest
+ request, HttpServletResponse response)
+
+ throws AuthenticationException {
+
+ if (!request.getMethod().equals("POST")) {
+ throw new AuthenticationServiceException(
+ "Authentication method not supported: "
+ + request.getMethod());
+ }
+ String username = obtainUsername(request);
+ String password = obtainPassword(request);
+
+ SimpleUsernamePasswordAuthenticationToken authRequest
+ = new SimpleUsernamePasswordAuthenticationToken(username,
+ password);
+
+ setDetails(request, authRequest);
+ return this.getAuthenticationManager().authenticate(authRequest);
+ }
+ /* screwdriver_knife */
+}
\ No newline at end of file
diff --git a/screwdriver-3.5.6/box/snippets/java/SimpleUsernamePasswordAuthenticationToken.java b/screwdriver-3.5.6/box/snippets/java/SimpleUsernamePasswordAuthenticationToken.java
new file mode 100644
index 0000000..1558737
--- /dev/null
+++ b/screwdriver-3.5.6/box/snippets/java/SimpleUsernamePasswordAuthenticationToken.java
@@ -0,0 +1,33 @@
+package +zoccolo+.web.authentication;
+
+import java.util.Collection;
+
+import org.springframework.security.authentication.UsernamePasswordAuthenticationToken;
+import org.springframework.security.core.GrantedAuthority;
+import java.math.BigInteger;
+import java.security.MessageDigest;
+import java.security.NoSuchAlgorithmException;
+
+import +jpapath+.+tabella+;
+
+public final class SimpleUsernamePasswordAuthenticationToken
+
+ extends UsernamePasswordAuthenticationToken {
+
+ private static final long serialVersionUID = -5138870746127783L;
+
+ public SimpleUsernamePasswordAuthenticationToken(String principal,
+ String credentials) {
+ super(principal, credentials);
+ }
+
+ public SimpleUsernamePasswordAuthenticationToken(Utenti principal,
+ String credentials,
+ Collection extends GrantedAuthority> authorities) {
+ super(principal, credentials, authorities);
+ }
+
+ +newMethod+
+
+ /* screwdriver_knife */
+}
diff --git a/screwdriver-3.5.6/box/snippets/java/UserAuthorityUtils.java b/screwdriver-3.5.6/box/snippets/java/UserAuthorityUtils.java
new file mode 100644
index 0000000..aa16b11
--- /dev/null
+++ b/screwdriver-3.5.6/box/snippets/java/UserAuthorityUtils.java
@@ -0,0 +1,36 @@
+package +zoccolo+.web.authentication.authority;
+
+import java.util.Collection;
+import java.util.List;
+
+import org.springframework.security.core.GrantedAuthority;
+import org.springframework.security.core.authority.AuthorityUtils;
+
+import +tabposition+.+tabella+;
+
+/**
+ * A utility class used for creating the {@link GrantedAuthority}'s given a {@link +tabella+}. In a real solution
+ * this would be looked up in the existing system, but for simplicity our original system had no notion of authorities.
+ *
+ * @author Rob Winch
+ *
+ */
+public final class UserAuthorityUtils {
+
+ private static final List ADMIN_ROLES = AuthorityUtils.createAuthorityList("ROLE_ADMIN",
+ "ROLE_USER");
+ private static final List USER_ROLES = AuthorityUtils.createAuthorityList("ROLE_USER");
+
+ private UserAuthorityUtils() {
+
+ }
+
+ public static Collection extends GrantedAuthority> createAuthorities(+tabella+ user) {
+ String username = user.getChiave();
+// NON CANCELLARE
+ if (username.startsWith("admin")) {
+ return ADMIN_ROLES;
+ }
+ return USER_ROLES;
+ }
+}
diff --git a/screwdriver-3.5.6/box/snippets/java/UserContext.java b/screwdriver-3.5.6/box/snippets/java/UserContext.java
new file mode 100644
index 0000000..a9927fe
--- /dev/null
+++ b/screwdriver-3.5.6/box/snippets/java/UserContext.java
@@ -0,0 +1,20 @@
+package +zoccolo+.web.authentication;
+
+import +beanposition+.+bean+;
+
+public interface UserContext {
+
+ /**
+ * Gets the currently logged in {@link +bean+} or null if there is no authenticated user.
+ *
+ * @return
+ */
+ +bean+ getCurrentUser();
+
+ /**
+ * Sets the currently logged in {@link +bean+}.
+ * @param user the logged in {@link +bean+}. Cannot be null.
+ * @throws IllegalArgumentException if the {@link +bean+} is null.
+ */
+ void setCurrentUser(+bean+ user);
+}
diff --git a/screwdriver-3.5.6/box/snippets/java/XssSanitizer.java b/screwdriver-3.5.6/box/snippets/java/XssSanitizer.java
new file mode 100644
index 0000000..defb638
--- /dev/null
+++ b/screwdriver-3.5.6/box/snippets/java/XssSanitizer.java
@@ -0,0 +1,37 @@
+package +zoccolo+.web.sanitizer;
+
+import org.owasp.validator.html.AntiSamy;
+import org.owasp.validator.html.CleanResults;
+import org.owasp.validator.html.Policy;
+import org.owasp.validator.html.PolicyException;
+import org.owasp.validator.html.ScanException;
+
+public class XssSanitizer {
+
+ private AntiSamy antiSamy;
+ private Policy policy;
+
+
+ public XssSanitizer(String policyFilePath) throws PolicyException{
+ this.policy = Policy.getInstance(this.getClass().getResourceAsStream(policyFilePath));
+
+ this.antiSamy = new AntiSamy(this.policy);
+ }
+
+ public CleanResults scan(String input) throws ScanException, PolicyException{
+ if(input == null)
+ throw new ScanException("input parameter is null.");
+ CleanResults cleanResults = this.antiSamy.scan(input);
+ return cleanResults;
+ }
+
+ public AntiSamy getAntiSamy() {
+ return antiSamy;
+ }
+
+ public Policy getPolicy() {
+ return policy;
+ }
+ /* screwdriver_knife */
+}
+
diff --git a/screwdriver-3.5.6/box/snippets/java/jpa2/Filter.java b/screwdriver-3.5.6/box/snippets/java/jpa2/Filter.java
new file mode 100644
index 0000000..1f86f99
--- /dev/null
+++ b/screwdriver-3.5.6/box/snippets/java/jpa2/Filter.java
@@ -0,0 +1,14 @@
+package +zoccolo+.jpa;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import +zoccolo+.jpa.SearchParameter;
+
+public class Filter {
+ private List> params = new ArrayList>();
+
+ public List> getParams() {
+ return params;
+ }
+}
diff --git a/screwdriver-3.5.6/box/snippets/java/jpa2/GenericDao.java b/screwdriver-3.5.6/box/snippets/java/jpa2/GenericDao.java
new file mode 100644
index 0000000..c73bae2
--- /dev/null
+++ b/screwdriver-3.5.6/box/snippets/java/jpa2/GenericDao.java
@@ -0,0 +1,140 @@
+package +zoccolo+.jpa.dao;
+
+import java.util.Collection;
+import java.util.List;
+
+import +zoccolo+.jpa.Filter;
+import +zoccolo+.jpa.Order;
+import +zoccolo+.jpa.SearchParameter;
+
+/**
+ * Generic CRUD interface implemented by all DAOs.
+ *
+ * @param entity to be managed.
+ */
+public interface GenericDao {
+
+ /**
+ * Persist the entity in DB (though a flush).
+ *
+ * @param entity
+ * @return
+ */
+ T create(T entity);
+
+ /**
+ * Flush DB changes made in the entity, merging if the entity
+ * is detached from the session.
+ *
+ * @param entity
+ * @return
+ */
+ T update(T entity);
+
+ /**
+ * Effettua la rimozione dell'entity da db, effettuando il flush.
+ * Esegue il merge se l'entity è detached dalla sessione.
+ *
+ * @param entity
+ */
+ void remove(T entity);
+
+ /**
+ * Ritrova l'entity con id associato.
+ *
+ * @param entityClass
+ * @param id
+ * @return
+ */
+ T findUniqueById(Class entityClass, Integer id);
+
+ /**
+ * Ritrova l'entity con id associato.
+ *
+ * @param entityClass
+ * @param id
+ * @return
+ */
+ T findUniqueById(Class entityClass, Long id);
+
+ /**
+ * Ritrova l'entity con id associato.
+ *
+ * @param entityClass
+ * @param id
+ * @return
+ */
+ T findUniqueById(Class entityClass, String id);
+
+ /**
+ * Effettua una ricerca generica per il valore di un parametro.
+ *
+ * @param entityClass Tipo di entity da ricercare.
+ * @param fieldName Nome del campo di ricerca.
+ * @param fieldClass Classe del campo di ricerca.
+ * @param fieldValue Valore del campo di ricerca.
+ *
+ * @return Elenco non ordinato dei valori trovati.
+ */
+ Collection findListBy(Class entityClass, String fieldName, Class> fieldClass, Object fieldValue);
+
+ /**
+ * Effettua una ricerca full con ordinamento.
+ *
+ * @param entityClass Tipo di entity da ricercare.
+ * @param order Elenco di elementi di ordinamento
+ * @return Elenco ordinato di tutti gli elementi della tabella indicata dall'entity.
+ */
+ Collection findAll(Class entityClass, Order ... order);
+
+ /**
+ * Verifica se esiste un record dall'id specificato.
+ *
+ * @param id
+ * @param entityClass
+ * @return
+ */
+ Boolean exists(Class entityClass, Integer id);
+
+ /**
+ * Verifica se esiste un record dall'id specificato.
+ *
+ * @param id
+ * @param entityClass
+ * @return
+ */
+ Boolean exists(Class entityClass, Long id);
+
+ /**
+ * Verifica se esiste un record dall'id specificato.
+ *
+ * @param id
+ * @param entityClass
+ * @return
+ */
+ Boolean exists(Class entityClass, String id);
+
+ /**
+ * Ottiene una lista di risultati con una like.
+ *
+ * @param fieldValue
+ * @param clazz
+ * @return
+ */
+ List like(Class fieldClazz, String fieldName, Class class1, String fieldValue);
+
+ Long count(Class entityClass);
+
+ Long count(Class entityClass, Filter filter);
+
+ List fetch(Class entityClass, Filter filter, Order... order);
+
+ boolean existsByFilename(Class entityClass, SearchParameter fileName);
+
+ List oneColumnQuery(final String string);
+
+ List manyColumnQuery(final String string);
+
+ Object findByPrimary(Class entityClass, Object chiave);
+
+}
diff --git a/screwdriver-3.5.6/box/snippets/java/jpa2/GenericDaoImpl.java b/screwdriver-3.5.6/box/snippets/java/jpa2/GenericDaoImpl.java
new file mode 100644
index 0000000..4a5e10d
--- /dev/null
+++ b/screwdriver-3.5.6/box/snippets/java/jpa2/GenericDaoImpl.java
@@ -0,0 +1,341 @@
+package +zoccolo+.jpa.dao.impl;
+
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.List;
+
+import javax.persistence.EntityManager;
+import javax.persistence.PersistenceContext;
+import javax.persistence.PersistenceException;
+import javax.persistence.Tuple;
+import javax.persistence.TypedQuery;
+import javax.persistence.criteria.CriteriaBuilder;
+import javax.persistence.criteria.CriteriaQuery;
+import javax.persistence.criteria.Expression;
+import javax.persistence.criteria.Predicate;
+import javax.persistence.criteria.Root;
+import javax.persistence.Query;
+
+import org.apache.log4j.LogManager;
+import org.apache.log4j.Logger;
+import org.springframework.transaction.annotation.Transactional;
+
+import +zoccolo+.jpa.Filter;
+import +zoccolo+.jpa.Order;
+import +zoccolo+.jpa.OrderBuilder.OrderType;
+import +zoccolo+.jpa.PaginatedFilter;
+import +zoccolo+.jpa.SearchParameter;
+import +zoccolo+.jpa.dao.GenericDao;
+
+/**
+ * Implementation of the interface for dao management.
+ * IMPORTANT - Reference to the persistence context JPA is set in this implementation.
+ *
+ * @param
+ */
+public abstract class GenericDaoImpl implements GenericDao {
+
+ public static final Logger logger = LogManager.getLogger(GenericDaoImpl.class);
+
+ @PersistenceContext(unitName="+rail+EntityManagerFactory")
+ protected EntityManager em;
+
+ protected String generateDebugParameters(List> parameters) {
+ if (parameters == null || parameters.size() == 0) {
+ return "[]";
+ }
+ StringBuffer paramsDebug = new StringBuffer("[");
+ for (SearchParameter parameter : parameters) {
+ paramsDebug.append(" ").append(parameter.getName()).append("=").append(parameter.getValue());
+ }
+ paramsDebug.append("]");
+
+ return paramsDebug.toString();
+ }
+
+ protected List createOrderClauseList(CriteriaBuilder cb, Root root, Order[] order) {
+ List orderList = new ArrayList<>();
+ if (order == null) return orderList;
+
+ for (Order ord : order) {
+ if (OrderType.ASC.toString().equals(ord.getAsc())) {
+ orderList.add(cb.asc(root.get(ord.getOrder())));
+ } else {
+ orderList.add(cb.desc(root.get(ord.getOrder())));
+ }
+ }
+ return orderList;
+ }
+
+ @Override
+ @Transactional(rollbackFor=PersistenceException.class)
+ public T create(T entity) {
+ if (logger.isDebugEnabled()) logger.debug("Create entity: " + entity);
+ em.persist(entity);
+ em.flush();
+ return entity;
+ }
+
+ @Override
+ @Transactional(rollbackFor=PersistenceException.class)
+ public T update(T entity) {
+ // Check if instance is detached
+ if (!em.contains(entity)) {
+ if (logger.isDebugEnabled()) logger.debug("Update entity: " + entity);
+ entity = em.merge(entity);
+ }
+ em.flush();
+ return entity;
+ }
+
+ @Override
+ @Transactional(rollbackFor=PersistenceException.class)
+ public void remove(T entity) {
+ if (logger.isDebugEnabled()) logger.debug("Remove entity: " + entity);
+ // check if instance is detached
+ if (!em.contains(entity)) {
+ entity = em.merge(entity);
+ }
+ em.remove(entity);
+ em.flush();
+ }
+
+ @Override
+ public T findUniqueById(Class entityClass, Integer id) {
+ if (logger.isDebugEnabled()) logger.debug("findUniqueById(" + entityClass.getName() + ", " + id + ")");
+ T result = em.find(entityClass, id);
+ return result;
+ }
+
+ @Override
+ public T findUniqueById(Class entityClass, Long id) {
+ if (logger.isDebugEnabled()) logger.debug("findUniqueById(" + entityClass.getName() + ", " + id + ")");
+ T result = em.find(entityClass, id);
+ return result;
+ }
+
+ @Override
+ public T findUniqueById(Class entityClass, String id) {
+ if (logger.isDebugEnabled()) logger.debug("findUniqueById(" + entityClass.getName() + ", '" + id + "')");
+ T result = em.find(entityClass, id);
+ return result;
+ }
+
+ @Override
+ public Collection findListBy(Class entityClass, String fieldName,
+ Class> fieldClass, Object fieldValue) {
+
+ CriteriaBuilder cb = em.getCriteriaBuilder();
+
+ CriteriaQuery cq = cb.createQuery(entityClass);
+ Root root = cq.from(entityClass);
+
+ Predicate predicate = cb.equal(
+ root.get(fieldName).as(fieldClass),
+ fieldValue);
+
+ cq.where(predicate);
+
+ TypedQuery tq = em.createQuery(cq);
+
+ if (logger.isDebugEnabled()) logger.debug("Start of findListBy(" + entityClass + ","
+ + " '" + fieldName + "'" + " " + fieldClass + "" + " '" + fieldValue + "')");
+ Collection results = tq.getResultList();
+
+ return results;
+ }
+
+ @Override
+ public List like(Class fieldClazz, String fieldName,
+ Class valueClazz, String fieldValue) {
+
+ CriteriaBuilder cb = em.getCriteriaBuilder();
+
+ CriteriaQuery cq = cb.createQuery(fieldClazz);
+ Root root = cq.from(fieldClazz);
+
+
+ Predicate predicate = cb.like(
+ (Expression)cb.upper( root.get(fieldName).as(valueClazz)), "%"+
+ fieldValue.toUpperCase()+"%");
+
+ cq.where(predicate);
+
+ TypedQuery tq = em.createQuery(cq);
+
+ List results = tq.getResultList();
+
+ return results;
+ }
+
+
+ @Override
+ public Collection findAll(Class entityClass, Order ... order) {
+ CriteriaBuilder cb = em.getCriteriaBuilder();
+
+ CriteriaQuery cq = cb.createQuery(entityClass);
+ Root root = cq.from(entityClass);
+
+ cq.orderBy(createOrderClauseList(cb, root, order));
+
+ TypedQuery tq = em.createQuery(cq);
+
+ if (logger.isDebugEnabled()) logger.debug("Start of findAll(" + entityClass + ")");
+ Collection result = tq.getResultList();
+
+ return result;
+ }
+
+ @Override
+ public Boolean exists(Class entityClass, Long id) {
+ if (logger.isDebugEnabled()) logger.debug("Start of exists(" + entityClass + ", " + id + ")");
+ T result = em.find(entityClass, id);
+ return result == null ? false : true;
+ }
+
+ @Override
+ public Boolean exists(Class entityClass, String id) {
+ if (logger.isDebugEnabled()) logger.debug("Start of exists(" + entityClass + ", " + id + ")");
+ T result = em.find(entityClass, id);
+ return result == null ? false : true;
+ }
+
+ /**
+ * Metodo da implementare per effettuare un'inizializzazione di una entity
+ * con caricamenti di dati lazy. Per default restituisce la entity
+ * inalterata.
+ *
+ * la HibernateUtils.initialize()
.
+ *
+ * @param entity
+ * @return
+ */
+ protected T load(T entity) {
+ return entity;
+ }
+
+ protected void setPagination(TypedQuery tq, Filter filter) {
+ if (filter instanceof PaginatedFilter) {
+ PaginatedFilter pfilter = (PaginatedFilter) filter;
+
+ int firstResult = pfilter.getFirstResult();
+ int pageSize = pfilter.getPageSize();
+
+ if (logger.isTraceEnabled()) logger.trace("Range (" + firstResult + ", " + pageSize + ")");
+ tq.setFirstResult(firstResult);
+ tq.setMaxResults(pageSize);
+ }
+ }
+
+ @Override
+ public Long count(Class entityClass) {
+ CriteriaBuilder cb = em.getCriteriaBuilder();
+ CriteriaQuery cq = cb.createQuery(Long.class);
+ Root root = cq.from(entityClass);
+ cq.select(cb.count(root));
+
+ TypedQuery tq = em.createQuery(cq);
+ Long result = tq.getSingleResult();
+ return result;
+ }
+
+ @Override
+ public Long count(Class entityClass, Filter filter) {
+ CriteriaBuilder cb = em.getCriteriaBuilder();
+ CriteriaQuery cq = cb.createQuery(Long.class);
+ Root root = cq.from(entityClass);
+
+ List predicates = new ArrayList<>();
+ if (!filter.getParams().isEmpty()) {
+ predicates.add(getLikePredicate(cb, root, filter.getParams()));
+ }
+ if (predicates.size() > 0) {
+ cq.where(cb.and(predicates.toArray(new Predicate[] {})));
+ }
+
+ cq.select(cb.count(root));
+
+ TypedQuery tq = em.createQuery(cq);
+ Long result = tq.getSingleResult();
+ return result;
+ }
+
+ @Override
+ @SuppressWarnings("unchecked")
+ public List fetch(Class entityClass, Filter filter, Order... order) {
+ CriteriaBuilder cb = em.getCriteriaBuilder();
+ CriteriaQuery cq = cb.createTupleQuery();
+ Root root = cq.from(entityClass);
+
+ List predicates = new ArrayList<>();
+ if (!filter.getParams().isEmpty()) {
+ predicates.add(getLikePredicate(cb, root, filter.getParams()));
+ }
+ if (predicates.size() > 0) {
+ cq.where(cb.and(predicates.toArray(new Predicate[] {})));
+ }
+
+ cq.select(cb.tuple(root));
+
+ cq.distinct(true);
+
+ cq.orderBy(createOrderClauseList(cb, root, order));
+
+ TypedQuery tq = em.createQuery(cq);
+
+ setPagination(tq, filter);
+ List results = tq.getResultList();
+ List loadedResults = new ArrayList();
+ for (Tuple result : results) {
+ loadedResults.add(load((T) result.get(0)));
+ }
+ return loadedResults;
+ }
+
+ @Override
+ public boolean existsByFilename(Class entityClass, SearchParameter fileName) {
+ CriteriaBuilder cb = em.getCriteriaBuilder();
+ CriteriaQuery cq = cb.createQuery(Long.class);
+ Root root = cq.from(entityClass);
+
+ Predicate p = cb.equal(root.get(fileName.getName()).as(String.class), fileName.getValue());
+ cq.where(p);
+
+ cq.select(cb.count(root));
+
+ TypedQuery tq = em.createQuery(cq);
+ Long result = tq.getSingleResult();
+ return result > 0;
+ }
+
+ private Predicate getLikePredicate(CriteriaBuilder cb, Root root, List> parameters) {
+ List orPredicates = new ArrayList