From 34e42a81d574890e6c6f0f819d41002829d65a9e Mon Sep 17 00:00:00 2001 From: jensp Date: Fri, 26 Jun 2015 18:26:42 +0000 Subject: [PATCH] CCM NG: Primarily documentation git-svn-id: https://svn.libreccm.org/ccm/ccm_ng@3507 8810af33-2d31-482b-a856-94f89814c4df --- ccm-core/src/site/apt/index.apt | 4 ++ ccm-core/src/site/site.xml | 7 ++- ccm-shortcuts/src/site/apt/index.apt | 4 ++ ccm-shortcuts/src/site/site.xml | 15 ++++++ ccm-testutils/pom.xml | 17 +++++-- .../tests/categories/IntegrationTest.java | 9 +++- .../libreccm/tests/categories/UnitTest.java | 3 +- .../tests/categories/package-info.java | 5 ++ .../libreccm/testutils/DatasetsVerifier.java | 33 +++++++++--- .../libreccm/testutils/EqualsVerifier.java | 21 ++++++-- .../libreccm/testutils/ToStringVerifier.java | 47 +++++++++--------- .../org/libreccm/testutils/package-info.java | 4 ++ ccm-testutils/src/site/apt/index.apt | 42 ++++++++++++++++ ccm-testutils/src/site/site.xml | 19 +++++++ src/site/apt/index.apt | 3 ++ src/site/resources/images/libreccm-logo.png | Bin 0 -> 7103 bytes src/site/site.xml | 10 ++++ 17 files changed, 200 insertions(+), 43 deletions(-) create mode 100644 ccm-core/src/site/apt/index.apt create mode 100644 ccm-shortcuts/src/site/apt/index.apt create mode 100644 ccm-shortcuts/src/site/site.xml create mode 100644 ccm-testutils/src/main/java/org/libreccm/tests/categories/package-info.java create mode 100644 ccm-testutils/src/main/java/org/libreccm/testutils/package-info.java create mode 100644 ccm-testutils/src/site/apt/index.apt create mode 100644 ccm-testutils/src/site/site.xml create mode 100644 src/site/apt/index.apt create mode 100644 src/site/resources/images/libreccm-logo.png diff --git a/ccm-core/src/site/apt/index.apt b/ccm-core/src/site/apt/index.apt new file mode 100644 index 000000000..dbae22e54 --- /dev/null +++ b/ccm-core/src/site/apt/index.apt @@ -0,0 +1,4 @@ +LibreCCM Core + + The module module (<<>>) for provides several + basic services for all other modules of LibreCCM. \ No newline at end of file diff --git a/ccm-core/src/site/site.xml b/ccm-core/src/site/site.xml index c2c0f1125..3c6e867a3 100644 --- a/ccm-core/src/site/site.xml +++ b/ccm-core/src/site/site.xml @@ -5,12 +5,15 @@ http://maven.apache.org/xsd/decoration-1.3.0.xsd"> + + + - + diff --git a/ccm-shortcuts/src/site/apt/index.apt b/ccm-shortcuts/src/site/apt/index.apt new file mode 100644 index 000000000..e3297909e --- /dev/null +++ b/ccm-shortcuts/src/site/apt/index.apt @@ -0,0 +1,4 @@ +The Shortcuts module + + This module (<<>> for is currently + work in progress. More details will come soon. \ No newline at end of file diff --git a/ccm-shortcuts/src/site/site.xml b/ccm-shortcuts/src/site/site.xml new file mode 100644 index 000000000..fd8ad57e7 --- /dev/null +++ b/ccm-shortcuts/src/site/site.xml @@ -0,0 +1,15 @@ + + + + + + + + + + + diff --git a/ccm-testutils/pom.xml b/ccm-testutils/pom.xml index 770ca7456..545d45a6a 100644 --- a/ccm-testutils/pom.xml +++ b/ccm-testutils/pom.xml @@ -50,6 +50,13 @@ arquillian-persistence-dbunit + + net.sourceforge.findbugs + annotations + 1.3.2 + provided + + @@ -118,7 +125,7 @@ findbugs-maven-plugin 3.0.1 - /rulesets/java/naming.xml /rulesets/java/optimizations.xml /rulesets/java/strictexception.xml @@ -147,7 +154,7 @@ /rulesets/java/unusedcode.xml - --> + org.codehaus.mojo javancss-maven-plugin @@ -160,8 +167,8 @@ - diff --git a/ccm-testutils/src/main/java/org/libreccm/tests/categories/IntegrationTest.java b/ccm-testutils/src/main/java/org/libreccm/tests/categories/IntegrationTest.java index 11fbdd771..1a10148ef 100644 --- a/ccm-testutils/src/main/java/org/libreccm/tests/categories/IntegrationTest.java +++ b/ccm-testutils/src/main/java/org/libreccm/tests/categories/IntegrationTest.java @@ -19,7 +19,14 @@ package org.libreccm.tests.categories; /** - * + * A marker interface for use with JUnit's {@link Category} annotation to mark + * the tests which should be only executed when using one of the Arquillian + * profiles. + * + * Tests with this category are only executed in the Arquillian profiles and + * are executed by Arquillian inside a Java EE container. The tests are usually + * used to test CDI beans and EJBs. + * * @author Jens Pelzetter */ public interface IntegrationTest { diff --git a/ccm-testutils/src/main/java/org/libreccm/tests/categories/UnitTest.java b/ccm-testutils/src/main/java/org/libreccm/tests/categories/UnitTest.java index e452e15b2..bccfb4a79 100644 --- a/ccm-testutils/src/main/java/org/libreccm/tests/categories/UnitTest.java +++ b/ccm-testutils/src/main/java/org/libreccm/tests/categories/UnitTest.java @@ -19,7 +19,8 @@ package org.libreccm.tests.categories; /** - * A marker interface for use with JUnit's {@link Category} annotation. + * A marker interface for use with JUnit's {@link Category} annotation to mark + * the tests which should be executed in every case. * * Tests which are grouped into this category are used to test an * individual class. All external dependencies should be mocked. diff --git a/ccm-testutils/src/main/java/org/libreccm/tests/categories/package-info.java b/ccm-testutils/src/main/java/org/libreccm/tests/categories/package-info.java new file mode 100644 index 000000000..0decdba5b --- /dev/null +++ b/ccm-testutils/src/main/java/org/libreccm/tests/categories/package-info.java @@ -0,0 +1,5 @@ +/** + * The interfaces in this package are used to control which test are executed + * in the default module and which ones are executed in special profiles. + */ +package org.libreccm.tests.categories; diff --git a/ccm-testutils/src/main/java/org/libreccm/testutils/DatasetsVerifier.java b/ccm-testutils/src/main/java/org/libreccm/testutils/DatasetsVerifier.java index 3a73f688d..7e8996c15 100644 --- a/ccm-testutils/src/main/java/org/libreccm/testutils/DatasetsVerifier.java +++ b/ccm-testutils/src/main/java/org/libreccm/testutils/DatasetsVerifier.java @@ -25,8 +25,6 @@ import org.dbunit.dataset.DataSetException; import org.dbunit.dataset.IDataSet; import org.dbunit.dataset.xml.FlatXmlDataSet; import org.dbunit.operation.DatabaseOperation; -import org.jboss.arquillian.persistence.core.data.descriptor.Format; -import org.jboss.arquillian.persistence.dbunit.dataset.DataSetBuilder; import org.junit.Test; import java.io.IOException; @@ -40,24 +38,45 @@ import java.sql.SQLException; import org.h2.tools.RunScript; import org.jboss.arquillian.persistence.dbunit.dataset.json.JsonDataSet; - -import static org.junit.Assert.*; - -import java.io.BufferedReader; +import org.junit.runners.Parameterized; /** * + * For testing the CCM modules the Arquillian Persistence extension including + * the DBUnit integration is used. Unfortunately there are some issues with + * exception reporting if there errors in the datasets used for testing. + * Therefore we provide this utility class which can be used to implement + * test for the datasets outside of Arquillian. + * + * For testing an in-memory H2 + * database is used. The datasets are loaded into the database using + * DBUnit classes. Before loading the dataset this class creates the database + * schema. The SQL script for generating the schema is loaded via + * {@code getClass().getResource(/sql/ddl/auto/h2.sql).toURI()}. Therefore the + * utility expects to find the SQL for generating the database schema in the + * classpath at th path {@code /sql/ddl/auto/h2.sql}. The default + * {@code pom.xml} for modules take care of that. + * + * After each dataset the database is scrapped. To use this utility create + * a JUnit test class using the {@link Parameterized} test runner from JUnit. + * An example is the + * DatasetsTest + * in the {@code org.libreccm.core} package of the ccm-core module. + * * @author Jens Pelzetter */ public class DatasetsVerifier { - private final String datasetPath; + private final transient String datasetPath; public DatasetsVerifier(final String datasetsPath) { this.datasetPath = datasetsPath; } @Test + @edu.umd.cs.findbugs.annotations.SuppressWarnings( + value = "DMI_EMPTY_DB_PASSWORD", + justification = "H2 in mem database does not need a password") public void verifyDataset() throws SQLException, URISyntaxException, IOException, diff --git a/ccm-testutils/src/main/java/org/libreccm/testutils/EqualsVerifier.java b/ccm-testutils/src/main/java/org/libreccm/testutils/EqualsVerifier.java index 1820fc656..d32dde961 100644 --- a/ccm-testutils/src/main/java/org/libreccm/testutils/EqualsVerifier.java +++ b/ccm-testutils/src/main/java/org/libreccm/testutils/EqualsVerifier.java @@ -33,11 +33,12 @@ import org.junit.runners.Parameterized; * the classes {@code Foo} and {@code Bar} (imports have been omitted): * *
- * @RunWith(Parameterized.class)
- * @Category(UnitTest.class)
+ * 
+ * @RunWith(Parameterized.class)
+ * @Category(UnitTest.class)
  * public class FooBarTest extends EqualsVerifier {
  * 
- *     @Parameterized.Parameters(name = "{0}")
+ *     @Parameterized.Parameters(name = "{0}")
  *     public static Collection> data() {
  *         return Arrays.asList(new Class[] {
  *             Foo.class,
@@ -49,13 +50,25 @@ import org.junit.runners.Parameterized;
  *         super(entityClass);
  *     }
  * }
+ * 
  * 
* + * An example in ccm-core is the + * EqualsAndHashCodeTest + * in the {@code org.libreccm.core} package. + * + * For testing {@code equals} and {@code hashCode} this class uses the + * http://www.jqno.nl/equalsverifier/ utility. If + * the classes to verify are part of complex inheritance hierarchy you may need + * to create your own test using the {@code EqualsVerifier}. An example in + * ccm-core is the ResourceEntityTest + * in the {@code org.libreccm.core} package. + * * @author Jens Pelzetter */ public class EqualsVerifier { - private final Class entityClass; + private final transient Class entityClass; public EqualsVerifier(final Class entityClass) { this.entityClass = entityClass; diff --git a/ccm-testutils/src/main/java/org/libreccm/testutils/ToStringVerifier.java b/ccm-testutils/src/main/java/org/libreccm/testutils/ToStringVerifier.java index 73b3dfbc6..c51622122 100644 --- a/ccm-testutils/src/main/java/org/libreccm/testutils/ToStringVerifier.java +++ b/ccm-testutils/src/main/java/org/libreccm/testutils/ToStringVerifier.java @@ -31,44 +31,45 @@ import java.lang.reflect.Modifier; /** * A base class for verifying the implementation of the {@code toString()} - * method of an object using the {@link Parameterized} - * test runner from JUnit. - * - * To use this class create a new JUnit test class which extends this class - * and which uses the {@link Parameterized} test runner. The class must have a + * method of an object using the {@link Parameterized} test runner from JUnit. + * + * To use this class create a new JUnit test class which extends this class and + * which uses the {@link Parameterized} test runner. The class must have a * static method which provides the classes to be tested. Example for testing * the classes {@code Foo} and {@code Bar} (imports have been omitted): - * + * *
- * @RunWith(Parameterized.class)
- * @Category(UnitTest.class)
- * public class FooBarTest extends ToStringVerifier {
- * 
- *     @Parameterized.Parameters(name = "{0}")
- *     public static Collection> data() {
- *         return Arrays.asList(new Class[] {
- *             Foo.class,
- *             Bar.class
- *         }); 
+ * 
+ * @RunWith(Parameterized.class)
+ * @Category(UnitTest.class) public class FooBarTest extends ToStringVerifier {
+ *
+ *     @Parameterized.Parameters(name = "{0}") public static Collection> data() {
+ *         return Arrays.asList(new Class[] { Foo.class, Bar.class });
  *     }
- * 
+ *
  *     public FooBarTest(final Class entityClass) {
  *         super(entityClass);
  *     }
  * }
+ * 
  * 
* + * An example can be found in the ccm-core module: ToStringTest + * * @author Jens Pelzetter */ public class ToStringVerifier { - - private final Class entityClass; - + + private final transient Class entityClass; + public ToStringVerifier(final Class entityClass) { this.entityClass = entityClass; } - + @Test + //We want to test if there occurs an NPE therefore we need catch the NPE. + @SuppressWarnings({"PMD.AvoidCatchingNPE", + "PMD.AvoidCatchingGenericException"}) public void verifyToString() throws IntrospectionException, InstantiationException, IllegalAccessException, @@ -77,7 +78,7 @@ public class ToStringVerifier { final Object obj = entityClass.newInstance(); final Field[] fields = entityClass.getDeclaredFields(); - for (Field field : fields) { + for (final Field field : fields) { if (!Modifier.isStatic(field.getModifiers()) && !field.getType().isPrimitive()) { field.setAccessible(true); @@ -99,5 +100,5 @@ public class ToStringVerifier { } } - + } diff --git a/ccm-testutils/src/main/java/org/libreccm/testutils/package-info.java b/ccm-testutils/src/main/java/org/libreccm/testutils/package-info.java new file mode 100644 index 000000000..30c300020 --- /dev/null +++ b/ccm-testutils/src/main/java/org/libreccm/testutils/package-info.java @@ -0,0 +1,4 @@ +/** + * This package provides several utilities for writing tests for CCM classes. + */ +package org.libreccm.testutils; diff --git a/ccm-testutils/src/site/apt/index.apt b/ccm-testutils/src/site/apt/index.apt new file mode 100644 index 000000000..0ae2e2845 --- /dev/null +++ b/ccm-testutils/src/site/apt/index.apt @@ -0,0 +1,42 @@ +LibreCCM TestUtils + + The TestUtils module <<>> package provides several utility + classes for writing tests for specific classes. This includes tests for + the implementations of <<>> and <<>> as well as + <<>>. Also a utility for testing datasets for DBUnit tests + is provided. + + Other modules should import this module for the test + scope only: + ++------------------------------------------------------------------------------+ +... + + ... + + org.libreccm + ccm-testutils + 6.7.0-SNAPSHOT + test + + ... + ++------------------------------------------------------------------------------+ + + At the moment the following utilities are provided: + + * {{{./apidocs/index.html?org/libreccm/testutils/DatasetsVerifier.html} DatasetsVerifier}} + + * {{{./apidocs/index.html?org/libreccm/testutils/EqualsVerifier.html} EqualsVerifier}} + + * {{{./apidocs/index.html?org/libreccm/testutils/ToStringVerifier.html} ToStringVerifier}} + + [] + + Also their are some categories for use with feature of JUnit 4. + They are used to control which tests are executed. At the moment their are + two categories: + + * {{{./apidocs/index.html?org/libreccm/tests/categories/IntegrationTest.html} IntegrationTest}} + + * {{{./apidocs/index.html?org/libreccm/tests/categories/UnitTest.html} UnitTest}} \ No newline at end of file diff --git a/ccm-testutils/src/site/site.xml b/ccm-testutils/src/site/site.xml new file mode 100644 index 000000000..ddb0d9e3b --- /dev/null +++ b/ccm-testutils/src/site/site.xml @@ -0,0 +1,19 @@ + + + + + + + + + + + + diff --git a/src/site/apt/index.apt b/src/site/apt/index.apt new file mode 100644 index 000000000..91eb20524 --- /dev/null +++ b/src/site/apt/index.apt @@ -0,0 +1,3 @@ +LibreCCM + + Bla Bla \ No newline at end of file diff --git a/src/site/resources/images/libreccm-logo.png b/src/site/resources/images/libreccm-logo.png new file mode 100644 index 0000000000000000000000000000000000000000..b5bc33e48279735860457d99890a6f0c6b4ff491 GIT binary patch literal 7103 zcmbVQbyU>Rw*Jj9!T;`lq=3@h zt)#@zArijDefQq=?t1U9_upRoJA0p9=R0SeaCKFAG7?%60077o6)>6r0Ez_wU>`~d z0Klrr&rkpWXk2Bnu1_6bxO$j6TL9ALj?XO+iuR_K7Md2O=3Y+S7AOF?XR3&i*7BU$ z&TMg<)tT&^Mm`IbyCmAymHXZbTB+YB=yDmA*4yG4(X8$_cZ_LJd^+;(O-+Yk>H8f! zkha(}tH8*ROR>ML#jd|HP8rS&&ePdA;%{-p|MA6<-mhgh$~s^68LXH3-Q5|(C;2cAL2V%7p{(5 zj2#@PyBT(`{CUsfj=J*P5`+(H!xdB5n)t1c_P)-%Epe>d-(Kw`sjfPWo@dF-kotQ? zFt4^TE5l~rS6z(%WPZXhUa=Ro5`Jbny8dKfz)WS)Y9Y^zF6{_O!Oy{Oo6fNH*OZx;O-0*=*0-Kz2w6cCD zOTHro6v`bCoKLozj1jB`_T$L+1ERtj`8Fii3NSusG-C3#^I{$)y=hYY zdxg|BibHN*_VJDjlaYLQ-2Lj%o@ycp~1(O7x0rtR}sJbBskoj zq8!E61&4*LerVB;>#RXOenbih2YR7!xOJ`qnN2j4hYUMBeMfxUBY+}EOz{MjN9RI z3%0GD^sD=I61SXj#2@UOw-vo-X?V?3P5@}vrWfO)Nw_U6mTJe-ngR+PG973)J9(Y= zq7>}HB&8V%g(47BklFm7#Ij*HG|IzJZicS^Ws1FWg*QDP{=L}VV-B$%3uMB^DWfEI zIYg=Z%opTn>suFjVTnU(%pd3D)(#8^?_ zaNOB$%CPA)1meblU1PD?Sj$M}?r8Oo$(<1fPOuB&tX1_HdvR))oRnAhI0z4d!Ps+% zz^t%a%t%M&=Nm!@1Q6Tf^1Jx4_)icBgv;<^EuZ^#6NdxPw9V3(>&eAHU@!n15%v-# z1qK7LBwoW*md}_F08seoA<~&qpybXrhA2!f`oxp+;B#l{I_)$U@_mV+@+%y=#`ALT z>x}ylUl7^Knd-r;&BGKd0(Cc`XSU5)QS{sg+QSInwH@nuQ|N{ z0s#QlKiq1rRh-z7H#h*udmhC%VbjXV4Ri(CCq$E^f9@pJ_hT=IG#`~Ed&MwFVts;e z0MIwc>4}JuSa)lcOI+~Lb)59AWOU@!p38V1rc6u}a@C7XhgtK@VNWA08v;~C%t#(Exf#Qif+O1G1urkn2WSg?qS&m)0 zGkaY=6gl752g1Fz;`G;6-b_-a;m;B`Be@|EAejTX6jC8@`Pv==0T7Z6Y?nbaJw*42 zX+ZvgR3_bS>PFQ^9b6|nXN`#98$hf&MsBV1Gq%m_7CnFn38PD6H1-MpN7A>ENb#}H z647GPXaLX*3(H7ibpf@QkzKnj4D;nvWSeODevgBvq)p%HdK8x9tM+DGZ_g$|f}!ET z)v7CXF1t4Ce`s~S5`X{&B#S&-X|X)g(u#jLng|TU&M|B3>Y;QM9~vWc;M|C`j4iOZ`E$rz}A2;~6P zM5ybX{^O$f?-(@qc6Lv%qxnx z2n3F&NJ#}KAXXIGwiHlk5;%pP-Nh~lhd|^n-;P~uWe{27X2v(TZI|;3P z2?XNon##J&nZV%c(0jWCpjX)3vh0fBQ)V{6ojr9ZlmP|{8>CFQ()+reJVdoXR7X%mF~fkGApnE-4Nvh@KHC90dudEYKC$ESiz5s$ z*t_9i;XCe`G8msnIT8p&Y~!#mURylF;vT7wBmghO`k>Lti&m;*Nu^7e9PT?_w2G2P<;MvpVw?<_=^h;B z(j(|(lo&4->d8NlyPB}t|11W-5OTY|2A{@YuIy=J>W<=BBpV$@UPSA~@dXM-Jh>EA zVxko~%*|(zmym{^b(DoDrKp==j1cmu?6cq&Wjs?~hXaTP#d9$Y-GUa*V+^`a}_w(ZHl&(Dp zhgL+vPHgOQS zD*^xnQdoawatG)9m6KZ`YKP6yy6EzJb&Z<8EN->IBY7{~mI!+r0KM8I4c$gc9WG@T zY~2!krTUxXT`;UIP*6}af(RVXxXTYhAk;B|9l0^M+YwKc0X-QgSH|(+m9LNbz9rqY zNA_=S4;KGgoY^~0$ckAmNn!TeR$dVw*+EwLUjPtu(XNKBzYXBQGzD}dl6dseA z8j7ghliWkU6N9w{*0pJfY>YK{$JB4R*|F>)pvF|LCIF5ItoLwuzzAa&FSwo8>#@82 z*W}DWI78~MfA#)$e&gqJml6;Z%1tHlB2T1K7ZOqqi?I{s-?-NY=t)CK4+76(E=1cP zI2^i=nAG^^EAuzOm8g>-01T!&k|fM%eoIP}3cz6O0(jgayt${7RP>?L!gJy-FxxN_ z6>ajZ!RL2tkWWM?2=NAt9d)7H=QZ!k!xy%Y7XHsT%@61$78k#ycMc#Mk%xZv{T}Tp ze=A8Wr7U-CC-YhgYH+yLPa!g5ogX|XlV{SL6m#~HNJg`abV+~v3>q{r3X}_7W=Y6* z5Q5r1tzT?fD>aO1y*mj!C~dLTpG_OwU13FjC-th@-(FQ)u(68_q2us|z9DW6^t|^_ zNo3=1UjPNYM(prKiMm$FUXp9;m)=W*^1=|`#Vmgw&K9!u26FoS*h?VL$!)=1>J$ZBF3*y2E)f zUFQ!i_qMtMZm}Z%L`usSkB#SsF;{$y_S_EcyFv9LKW+c9WGdqrA@+x*>AUyNN`H_2C{qSxEMl zD-C}ELDYr9Zu##_+f(OI}%wktdxSSo;{Q z+}>!OSM3_uCVH7TN#^=#E^CvE{>5q7lg)DDwdi?LpEUo*`LsE@V zsN=D=4mNJ(+LmpVL?n_8pB~_EJ0hj!QjmdTm%lyg44rQ0cR8YSa_z>7n`~%V@M7lj zOA_k9w;nnzx?D{hx&0|S9m@WxvVE3S%vj4SYyX*g?_+cT{A+v&W@eH(hDu*u10?!B zm1NbgLo_gte*gTndt;{P;hl+L5paj)kCN0ctEL5ja!g@NPlD>$?zirsh|tBSX}48S zbntq?jqtPe0A+8Ln$R9-*y~FF{DS1iGt5)Z;F;&h4rUv9Z!XMUv^L9kkel88?`xPA zPsjkl1_@7#=ajl(OIOH)P~P-v`>Qi4w#)5G3ep$q$(g^FUIJk6JY)^{$yM`7=n! z3QtCU4<7jWi)wy3jDzh{V%F-Bx(x;95uf5xbz_cz&n~kag?t7%zuolaXd+k4MNUQb zk1F@H9sd#Cz3;GZWgZ^9;Zv3{vv2_b9A8E4Y%L}Xk6XX}Y%R|_K)#EFT}^&DTy1!K z++gQdKr&2_;7UsI-WTT%L2eeyMM|k7&lX|?B7{1Q`h)Zn?qqeHT1Zq~sCD_{Ek%=%N276uws09t6n?Mj+E})dtNi zc2AlaqVg{~d|%!Txfm5-Q9( zZz+n-tMMxzu~ZuQL91owI}-lkxH{Ldli$Zqkz3~Lf4)aL7mMdQ!=sEwRx89ld5Amd zeL4RI-b(g8J&TN)UjBJMx#(hD*2KAX@Jky#*+nL#b|Eo#@;s&gj$quKabsu^$Svdoxp zsL}85ZHV%`L4PnF1nbK^_wW?5T$)mYvnid;H3P(9}PY6Sk&qO%q;QS;xNO8cbSeZ-W(7W>Bb7_a-iavtuLMD$p7fn73_#^{Lvf`s4of{kLoqy6K=w&A})dyTP z7a!cFxBo0e=4bj=+)0CMd>S?0NK@Q%(DgLwYEK$O4xl{fOoE3-tj*zwhbGHx>>C2o5ZyCP()iQt6d6PBYHmJji-2@wB7n zLH}+^z1G{st-->Vt^{qGwY$Ia{U%r}V&ya0{h&|8GyWjk>2q2+m3(Y`8{&KK#FqRJ zBc~DdsHw91wT|B`e|6_anofnFSNu3jsJ=B}dig7lsv_=56zkDJp07UtTKdc%R1owT zT`|2)^E%CIl$y=Gytf{&~BTcl2W_jhk3xv1=p4%>dDuQRxRGP!knBrZO% z9&CnJP%=KPcA>MqViBV3b2GBKvh1ICI~Jg{Jn}DbchdEpcK-Dtl|uO$VcK{&XGn!j z^etYcSk>bead<9J2<=?kRr3pQ_*GCu{nAj43wOIK*|p^0^3QoKb(6^I7fr$_!fIUp zV>-gfgQ}jVxBe{jFJu&W6(xT;Z-2)+F>s-9-+XL#^kB=TUBx2EYllib^djhOmgKB; z^y=K$uH^XcBFSC7Q#<+R{^S`gDfK(}N0}Fbf;P@!$S?LFn0ez(|wUwqxtF}tq8u4rkb z*9ylstCs~)1wzbrLtzJ!)ylPPv~P7@dg=V_Den+YT{g1+SV_TL=9g|JO40Q88&acp z!Y8ZB%Cn?~~+s^l`GL)Aws zFth8WH#3JP4TKfE%Ij8zx~npT%4=xcD{>FLlQy$R!d*W+q+KK-d0_phKNHRHYcXeY zYid$A(%!P6wG?!iD1FB*N0W(L_iUZacv_%piRVVG(_Wsk=1L)>%cSp`S2}^X_1uXM zjhKy%H^0tE2)&A_e}IHy;oq`;+n~HtC5_Mnp7lCGPMy=hVB782$$}X!+oXOcO*pDx zF=)~GR`E^$48Ufxd^|KpwnZZz3@o$S?Qd-&`9amKXL5%0dkGcrym!cD;+- z%nL5#j~xcqQzOfKX}CuTDx>OkeyYew@LmmUBWF$Yb!Gr@VN@Pf04(?73+>v>!KJ@9 zd)65b{9XHv`dP1q;;vPLq%YKyGR-vIk)v|;;k?D&Np$xSCX-b++Q$bW7~ULv$D-KvOpqaY;2Cvpa10cvX|`QDe`psFX7 z(`NAJQq4_JIOa6&)yt)OewpzsTIkUr+`$jF$7+}UNS+X7h<{hv)qi;6y2GOyr> z>JoCZ>l7SZ>BOW6rxEJyQqG-{EXhsFVdU0y1kW|YBSxKL*)bqo9yT}2kPXDA*%*G zUp{(CjFJUAi7kAPL$)oDJ{(e=<0-_4`l@++zob>2*Y7?t?to3ygxy{C(udE`=GG=` z*9sK)i0mtzU6vjX4y=cX?jPH7#h0JiiZfN#%Pm^(t`^I<6P-*I$_U%d zK#9Xwbq4siq&GIRj0A>!Yg`ZCk!et5#%i}uGP)u+x3ZoZhce}ik2G7BxI3RS%z7Nz z8%7+K$d*ti9in}+x{_(@N;4BZY1j1u!_r5e8a%nosf*?hctiY)iX3!Br&0#C^QLbL znk5eJ%@=RotJ(Dw=`^Y1;#I8y=IU>$OdFP)@=q%t3I>(ZFn2^1XyivX3SR{1s*S3?nEBMC zEv)bUrb2qe=UbVKYJq9Iyr`}JQU*x_)l2*7&8%5!We@AEu7x!TjesAd_9wZUH7-*3 zDqn8(vEZvdum>q`VJ5ionZE#wR?!FUW>nE4yk2^S*|##E6Z0gp2H#Len!9?x@=OfG zKIsR6K-e%3cnxi**CK||HVMp8z8|#H2`|MCS2BnKg3xvB@JlLK|0aG&8lmC8 z#Q)u!Uf{#zodMC&ug|g%t%~4004lZ MtSYALu}R>60m9S>LI3~& literal 0 HcmV?d00001 diff --git a/src/site/site.xml b/src/site/site.xml index d98a745f8..7732ebc5b 100644 --- a/src/site/site.xml +++ b/src/site/site.xml @@ -4,7 +4,17 @@ xsi:schemaLocation="http://maven.apache.org/DECORATION/1.3.0 http://maven.apache.org/xsd/decoration-1.3.0.xsd"> + + LibreCCM + images/libreccm-logo.png + 150 + 100 + + + + +