First draft for Argeo Suite Assembly
authorbsinou <bsinou@argeo.org>
Sat, 21 Jan 2017 13:25:30 +0000 (14:25 +0100)
committerbsinou <bsinou@argeo.org>
Sat, 21 Jan 2017 13:25:30 +0000 (14:25 +0100)
62 files changed:
.project [new file with mode: 0644]
org.argeo.suite.web/.classpath [new file with mode: 0644]
org.argeo.suite.web/.gitignore [new file with mode: 0644]
org.argeo.suite.web/.project [new file with mode: 0644]
org.argeo.suite.web/META-INF/.gitignore [new file with mode: 0644]
org.argeo.suite.web/META-INF/spring/application.xml [new file with mode: 0644]
org.argeo.suite.web/META-INF/spring/commons.xml [new file with mode: 0644]
org.argeo.suite.web/META-INF/spring/osgi.xml [new file with mode: 0644]
org.argeo.suite.web/META-INF/spring/people.xml [new file with mode: 0644]
org.argeo.suite.web/META-INF/spring/ui.xml [new file with mode: 0644]
org.argeo.suite.web/apps.properties [new file with mode: 0644]
org.argeo.suite.web/bnd.bnd [new file with mode: 0644]
org.argeo.suite.web/build.properties [new file with mode: 0644]
org.argeo.suite.web/pom.xml [new file with mode: 0644]
org.argeo.suite.web/src/org/argeo/suite/SuiteException.java [new file with mode: 0644]
org.argeo.suite.web/src/org/argeo/suite/people/PeopleSuiteServiceImpl.java [new file with mode: 0644]
org.argeo.suite.web/src/org/argeo/suite/web/DefaultDashboard.java [new file with mode: 0644]
org.argeo.suite.web/src/org/argeo/suite/web/DefaultMainPage.java [new file with mode: 0644]
org.argeo.suite.web/src/org/argeo/suite/web/DynamicHeader.java [new file with mode: 0644]
org.argeo.suite.web/theme/argeo-classic/argeo-classic.css [new file with mode: 0644]
org.argeo.suite.web/theme/argeo-classic/fs-classic.css [new file with mode: 0644]
org.argeo.suite.web/theme/argeo-classic/icons/delete.gif [new file with mode: 0644]
org.argeo.suite.web/theme/argeo-classic/icons/fs/createFolder.png [new file with mode: 0644]
org.argeo.suite.web/theme/argeo-classic/icons/maintenance.gif [new file with mode: 0755]
org.argeo.suite.web/theme/argeo-classic/icons/people/contacts/Icon-credit.txt [new file with mode: 0644]
org.argeo.suite.web/theme/argeo-classic/icons/people/contacts/facebook.png [new file with mode: 0644]
org.argeo.suite.web/theme/argeo-classic/icons/people/contacts/fax.png [new file with mode: 0644]
org.argeo.suite.web/theme/argeo-classic/icons/people/contacts/googleplus.png [new file with mode: 0644]
org.argeo.suite.web/theme/argeo-classic/icons/people/contacts/home.png [new file with mode: 0644]
org.argeo.suite.web/theme/argeo-classic/icons/people/contacts/impp.png [new file with mode: 0644]
org.argeo.suite.web/theme/argeo-classic/icons/people/contacts/link.png [new file with mode: 0644]
org.argeo.suite.web/theme/argeo-classic/icons/people/contacts/linkedin.png [new file with mode: 0644]
org.argeo.suite.web/theme/argeo-classic/icons/people/contacts/mail_black.png [new file with mode: 0644]
org.argeo.suite.web/theme/argeo-classic/icons/people/contacts/mobile.png [new file with mode: 0644]
org.argeo.suite.web/theme/argeo-classic/icons/people/contacts/myspace.png [new file with mode: 0644]
org.argeo.suite.web/theme/argeo-classic/icons/people/contacts/phone_vintage.png [new file with mode: 0644]
org.argeo.suite.web/theme/argeo-classic/icons/people/contacts/reddit.png [new file with mode: 0644]
org.argeo.suite.web/theme/argeo-classic/icons/people/contacts/skype.png [new file with mode: 0644]
org.argeo.suite.web/theme/argeo-classic/icons/people/contacts/socialmedia.png [new file with mode: 0644]
org.argeo.suite.web/theme/argeo-classic/icons/people/contacts/telephone.png [new file with mode: 0644]
org.argeo.suite.web/theme/argeo-classic/icons/people/contacts/twitter.png [new file with mode: 0644]
org.argeo.suite.web/theme/argeo-classic/icons/people/contacts/xing.png [new file with mode: 0644]
org.argeo.suite.web/theme/argeo-classic/icons/people/misc/primary.gif [new file with mode: 0644]
org.argeo.suite.web/theme/argeo-classic/icons/people/misc/primaryNOT.gif [new file with mode: 0644]
org.argeo.suite.web/theme/argeo-classic/icons/people/people.gif [new file with mode: 0644]
org.argeo.suite.web/theme/argeo-classic/icons/people/types/company.png [new file with mode: 0644]
org.argeo.suite.web/theme/argeo-classic/icons/people/types/person.gif [new file with mode: 0644]
org.argeo.suite.web/theme/argeo-classic/icons/userMenu.png [new file with mode: 0644]
org.argeo.suite.web/theme/argeo-classic/img/byArgeo.png [new file with mode: 0644]
org.argeo.suite.web/theme/argeo-classic/maintenance-classic.css [new file with mode: 0644]
org.argeo.suite.web/theme/argeo-classic/people-classic.css [new file with mode: 0644]
pom.xml [new file with mode: 0644]
sdk/.gitignore [new file with mode: 0644]
sdk/.project [new file with mode: 0644]
sdk/ArgeoSuite_web.properties [new file with mode: 0644]
sdk/all.policy [new file with mode: 0644]
sdk/log4j.properties [new file with mode: 0644]
sdk/org.argeo.suite.sdk/.gitignore [new file with mode: 0644]
sdk/org.argeo.suite.sdk/META-INF/.gitignore [new file with mode: 0644]
sdk/org.argeo.suite.sdk/bnd.bnd [new file with mode: 0644]
sdk/org.argeo.suite.sdk/pom.xml [new file with mode: 0644]
sdk/pom.xml [new file with mode: 0644]

diff --git a/.project b/.project
new file mode 100644 (file)
index 0000000..ff41893
--- /dev/null
+++ b/.project
@@ -0,0 +1,11 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<projectDescription>
+       <name>argeo-suite</name>
+       <comment></comment>
+       <projects>
+       </projects>
+       <buildSpec>
+       </buildSpec>
+       <natures>
+       </natures>
+</projectDescription>
diff --git a/org.argeo.suite.web/.classpath b/org.argeo.suite.web/.classpath
new file mode 100644 (file)
index 0000000..191b71a
--- /dev/null
@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<classpath>
+       <classpathentry kind="src" output="bin" path="src"/>
+       <classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins"/>
+       <classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.8"/>
+       <classpathentry kind="output" path="bin"/>
+</classpath>
diff --git a/org.argeo.suite.web/.gitignore b/org.argeo.suite.web/.gitignore
new file mode 100644 (file)
index 0000000..016bb39
--- /dev/null
@@ -0,0 +1,3 @@
+/target
+/*.target
+/bin/
diff --git a/org.argeo.suite.web/.project b/org.argeo.suite.web/.project
new file mode 100644 (file)
index 0000000..69a0922
--- /dev/null
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<projectDescription>
+       <name>org.argeo.suite.web</name>
+       <comment></comment>
+       <projects>
+       </projects>
+       <buildSpec>
+               <buildCommand>
+                       <name>org.eclipse.jdt.core.javabuilder</name>
+                       <arguments />
+               </buildCommand>
+               <buildCommand>
+                       <name>org.eclipse.pde.ManifestBuilder</name>
+                       <arguments />
+               </buildCommand>
+               <buildCommand>
+                       <name>org.eclipse.pde.SchemaBuilder</name>
+                       <arguments />
+               </buildCommand>
+       </buildSpec>
+       <natures>
+               <nature>org.eclipse.jdt.core.javanature</nature>
+               <nature>org.eclipse.pde.PluginNature</nature>
+       </natures>
+</projectDescription>
diff --git a/org.argeo.suite.web/META-INF/.gitignore b/org.argeo.suite.web/META-INF/.gitignore
new file mode 100644 (file)
index 0000000..4854a41
--- /dev/null
@@ -0,0 +1 @@
+/MANIFEST.MF
diff --git a/org.argeo.suite.web/META-INF/spring/application.xml b/org.argeo.suite.web/META-INF/spring/application.xml
new file mode 100644 (file)
index 0000000..b339e44
--- /dev/null
@@ -0,0 +1,33 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<beans xmlns="http://www.springframework.org/schema/beans"
+       xmlns:util="http://www.springframework.org/schema/util" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+       xmlns:p="http://www.springframework.org/schema/p"
+       xsi:schemaLocation="
+               http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
+        http://www.springframework.org/schema/util http://www.springframework.org/schema/util/spring-util-2.5.xsd">
+
+       <bean id="peopleService" class="org.argeo.suite.people.PeopleSuiteServiceImpl"
+               init-method="init" destroy-method="destroy">
+               <property name="repository" ref="repository" />
+               <property name="workspaceName" value="main" />
+               <property name="userAdminService" ref="userAdminService" />
+       </bean>
+
+       <bean id="userAdminService" class="org.argeo.connect.people.core.UserAdminServiceImpl"
+               scope="singleton" lazy-init="false">
+               <property name="userTransaction" ref="userTransaction" />
+               <property name="userAdmin" ref="userAdmin" />
+               <property name="userAdminServiceReference" ref="userAdmin" />
+       </bean>
+
+       <!-- The UI Service - Enables among other definition of specific commands 
+               and editors. -->
+       <bean id="peopleWbService" class="org.argeo.connect.people.rap.PeopleWbServiceImpl"
+               scope="prototype">
+       </bean>
+
+       <!-- Execute initialization with a system authentication -->
+       <bean
+               class="org.argeo.cms.spring.AuthenticatedApplicationContextInitialization" />
+
+</beans>
diff --git a/org.argeo.suite.web/META-INF/spring/commons.xml b/org.argeo.suite.web/META-INF/spring/commons.xml
new file mode 100644 (file)
index 0000000..b74429f
--- /dev/null
@@ -0,0 +1,58 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<beans xmlns="http://www.springframework.org/schema/beans"
+       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:p="http://www.springframework.org/schema/p"
+       xmlns:util="http://www.springframework.org/schema/util"
+       xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
+        http://www.springframework.org/schema/util http://www.springframework.org/schema/util/spring-util-2.5.xsd">
+
+       <!-- COMMON UI PARTS -->
+       <util:list id="headerEnd">
+               <bean class="org.argeo.cms.util.UserMenuLink" p:vAlign="bottom" />
+       </util:list>
+
+       <!-- TEMPLATES -->
+       <bean id="menuLink" abstract="true" class="org.argeo.cms.util.MenuLink"
+               init-method="init">
+               <property name="bundleContext" ref="bundleContext" />
+       </bean>
+
+       <bean name="app" class="org.argeo.cms.util.SimpleApp" abstract="true">
+               <property name="headerHeight" value="40" />
+               <property name="repository" ref="repository" />
+               <property name="bundleContext" ref="bundleContext" />
+               <property name="jcrBasePath" value="/public" /> 
+       </bean>
+
+       <bean id="header" class="org.argeo.cms.util.SimpleCmsHeader"
+               abstract="true">
+               <property name="end" ref="headerEnd" />
+       </bean>
+
+       <!-- Switch header depending on client type and logged in status -->
+       <bean id="headerManager" class="org.argeo.suite.web.DynamicHeader">
+               <property name="privateHeaderProvider" ref="privateHeader" />
+               <property name="publicHeaderProvider" ref="publicHeader" />
+               <!-- <property name="smallHeaderProvider" ref="smallHeader" /> -->
+       </bean>
+
+       <bean id="privateHeader" class="org.argeo.cms.util.SimpleCmsHeader">
+               <property name="center">
+                       <list>
+                               <bean p:label="Dashboard" p:target="/#" parent="menuLink" />
+                               <bean p:label="Contacts" p:target="/#/people" parent="menuLink" />
+                               <bean p:label="Files" p:target="/#/sharedFiles" parent="menuLink" />
+                               <!-- <bean p:label="Wiki" p:target="/wiki" parent="menuLink" /> -->
+                       </list>
+               </property>
+               <property name="end" ref="headerEnd" />
+       </bean>
+
+       <bean id="publicHeader" class="org.argeo.cms.util.SimpleCmsHeader">
+               <!-- TODO: add static pages for anonymous view -->
+               <!-- <property name="lead"> -->
+               <!-- <list> -->
+               <!-- </list> -->
+               <!-- </property> -->
+               <property name="end" ref="headerEnd" />
+       </bean>
+</beans>
diff --git a/org.argeo.suite.web/META-INF/spring/osgi.xml b/org.argeo.suite.web/META-INF/spring/osgi.xml
new file mode 100644 (file)
index 0000000..3301729
--- /dev/null
@@ -0,0 +1,20 @@
+<?xml version="1.0" encoding="UTF-8"?>\r
+<beans:beans xmlns="http://www.springframework.org/schema/osgi"\r
+       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:beans="http://www.springframework.org/schema/beans"\r
+       xsi:schemaLocation="http://www.springframework.org/schema/osgi  \r
+       http://www.springframework.org/schema/osgi/spring-osgi-1.1.xsd\r
+       http://www.springframework.org/schema/beans   \r
+       http://www.springframework.org/schema/beans/spring-beans-2.5.xsd">\r
+\r
+       <!-- REFERENCES -->\r
+       <!--  Insure a home is present for each user that logs in -->\r
+       <reference id="repository" interface="javax.jcr.Repository" filter="(cn=home)" />\r
+       <reference id="userAdmin" interface="org.osgi.service.useradmin.UserAdmin" />\r
+       <reference id="userTransaction" interface="javax.transaction.UserTransaction" />\r
+       <reference id="nodeFileSystemProvider" interface="java.nio.file.spi.FileSystemProvider"\r
+               filter="(service.pid=org.argeo.node.fsProvider)" />\r
+       \r
+       <!-- SERVICES -->\r
+       <!-- Exposes Argeo Suite specific implementation of the People Service -->\r
+       <service ref="peopleService" interface="org.argeo.connect.people.PeopleService" />\r
+</beans:beans>\r
diff --git a/org.argeo.suite.web/META-INF/spring/people.xml b/org.argeo.suite.web/META-INF/spring/people.xml
new file mode 100644 (file)
index 0000000..0c5a29f
--- /dev/null
@@ -0,0 +1,120 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<beans xmlns="http://www.springframework.org/schema/beans"
+       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:p="http://www.springframework.org/schema/p"
+       xmlns:util="http://www.springframework.org/schema/util"
+       xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
+        http://www.springframework.org/schema/util http://www.springframework.org/schema/util/spring-util-2.5.xsd">
+
+       <!-- People UI -->
+       <bean id="people.mainPage" class="org.argeo.connect.people.web.pages.PeopleDynamicPages">
+               <property name="dynamicPages" ref="people.dynamicPages" />
+               <property name="peopleService" ref="peopleService" />
+               <property name="iconPathes" ref="peopleEntityIcons" />
+       </bean>
+
+       <bean id="people.header" class="org.argeo.cms.util.SimpleCmsHeader">
+               <property name="lead">
+                       <list>
+                               <bean p:image="theme/argeo-classic/img/byArgeo.png" p:target="/people#"
+                                       p:custom="cms_header-logo" parent="menuLink" />
+                               <bean p:label="All" p:target="people!/search/all" parent="menuLink" />
+                               <bean p:label="Persons" p:target="people!/search/persons" parent="menuLink" />
+                               <bean p:label="Organisations" p:target="people!/search/orgs" parent="menuLink" />
+                               <bean p:label="Browse" p:target="browse#" parent="menuLink" />
+                       </list>
+               </property>
+               <property name="end" ref="headerEnd" />
+       </bean>
+
+       <util:map id="peopleEntityIcons">
+               <entry key="people:person" value="theme/argeo-classic/icons/people/types/person.gif" />
+               <entry key="people:org" value="theme/argeo-classic/icons/people/types/company.png" />
+       </util:map>
+
+       <!-- UI Providers -->
+       <!-- A map for the specific page given the node type of the passed context -->
+       <util:map id="people.dynamicPages">
+               <entry>
+                       <key>
+                               <util:constant static-field="org.argeo.connect.people.PeopleTypes.PEOPLE_PERSON" />
+                       </key>
+                       <bean class="org.argeo.connect.people.web.pages.PersonPage">
+                               <property name="personHeaderPart" ref="personHeaderPart" />
+                               <property name="contactsWithNotePart" ref="contactsWithNotePart" />
+                               <property name="activitiesPart" ref="activitiesPart" />
+                       </bean>
+               </entry>
+               <entry>
+                       <key>
+                               <util:constant static-field="org.argeo.connect.people.PeopleTypes.PEOPLE_ORG" />
+                       </key>
+                       <bean class="org.argeo.connect.people.web.pages.OrgPage">
+                               <property name="orgHeaderPart" ref="orgHeaderPart" />
+                               <property name="contactsWithNotePart" ref="contactsWithNotePart" />
+                               <property name="activitiesPart" ref="activitiesPart" />
+                       </bean>
+               </entry>
+               <entry>
+                       <key>
+                               <util:constant
+                                       static-field="org.argeo.connect.people.PeopleTypes.PEOPLE_TAG_INSTANCE" />
+                       </key>
+                       <bean class="org.argeo.connect.people.web.pages.TagLikeInstancePage">
+                               <property name="peopleService" ref="peopleService" />
+                               <property name="iconPathes" ref="peopleEntityIcons" />
+                               <property name="propertyName" value="people:tags" />
+                       </bean>
+               </entry>
+               <entry>
+                       <key>
+                               <util:constant static-field="org.argeo.connect.people.PeopleTypes.PEOPLE_MAILING_LIST" />
+                       </key>
+                       <bean class="org.argeo.connect.people.web.pages.TagLikeInstancePage">
+                               <property name="peopleService" ref="peopleService" />
+                               <property name="iconPathes" ref="peopleEntityIcons" />
+                               <property name="propertyName" value="people:mailingLists" />
+                       </bean>
+               </entry>
+       </util:map>
+
+       <!-- Various headers -->
+       <bean id="personHeaderPart" class="org.argeo.connect.people.web.parts.PersonHeaderPart">
+               <property name="peopleService" ref="peopleService" />
+               <property name="tagsPart" ref="tagsPart" />
+               <property name="mailingListsPart" ref="mailingListsPart" />
+       </bean>
+
+       <bean id="orgHeaderPart" class="org.argeo.connect.people.web.parts.OrgHeaderPart">
+               <property name="peopleService" ref="peopleService" />
+               <property name="tagsPart" ref="tagsPart" />
+               <property name="mailingListsPart" ref="mailingListsPart" />
+       </bean>
+
+       <!-- Contacts -->
+       <bean id="contactsWithNotePart" class="org.argeo.connect.people.web.parts.ContactsWithNotePart">
+               <property name="singleContactPart" ref="singleContactPart" />
+       </bean>
+       <bean id="singleContactPart" class="org.argeo.connect.people.web.parts.SingleContactPart">
+               <property name="peopleService" ref="peopleService" />
+               <property name="contactButtonsPart" ref="contactButtonsPart" />
+       </bean>
+       <bean id="contactButtonsPart" class="org.argeo.connect.people.web.parts.ContactButtonsPart">
+       </bean>
+
+       <!-- Activities and workflows -->
+       <bean id="activitiesPart" class="org.argeo.connect.people.web.parts.ActivitiesPart">
+       </bean>
+
+       <!-- Tag like properties -->
+       <bean id="tagsPart" class="org.argeo.connect.people.web.parts.TagLikeValuesPart">
+               <property name="propertyName">
+                       <util:constant static-field="org.argeo.connect.people.PeopleNames.PEOPLE_TAGS" />
+               </property>
+       </bean>
+       <bean id="mailingListsPart" class="org.argeo.connect.people.web.parts.TagLikeValuesPart">
+               <property name="propertyName">
+                       <util:constant
+                               static-field="org.argeo.connect.people.PeopleNames.PEOPLE_MAILING_LISTS" />
+               </property>
+       </bean>
+</beans>
diff --git a/org.argeo.suite.web/META-INF/spring/ui.xml b/org.argeo.suite.web/META-INF/spring/ui.xml
new file mode 100644 (file)
index 0000000..e11d967
--- /dev/null
@@ -0,0 +1,85 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<beans xmlns="http://www.springframework.org/schema/beans"
+       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:p="http://www.springframework.org/schema/p"
+       xmlns:util="http://www.springframework.org/schema/util"
+       xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
+        http://www.springframework.org/schema/util http://www.springframework.org/schema/util/spring-util-2.5.xsd">
+
+       <!-- Main entry point for the CMS -->
+       <bean id="about" parent="app" init-method="init" destroy-method="destroy">
+               <property name="workspace" value="main" />
+               <property name="header" ref="headerManager" />
+               <property name="pages">
+                       <map>
+                               <entry key="">
+                                       <bean class="org.argeo.suite.web.DefaultMainPage">
+                                               <property name="peopleService" ref="peopleService" />
+                                               <property name="peopleIconPaths" ref="peopleEntityIcons" />
+                                               <property name="nodeFileSystemProvider" ref="nodeFileSystemProvider" />
+                                       </bean>
+                               </entry>
+                               <entry key="people" value-ref="people.mainPage" />
+                               <entry key="wiki">
+                                       <bean class="org.argeo.cms.text.WikiPage" />
+                               </entry>
+                               <entry key="browse">
+                                       <bean class="org.argeo.cms.maintenance.Browse" />
+                               </entry>
+                       </map>
+               </property>
+               <property name="branding">
+                       <map>
+                               <entry key="*">
+                                       <map>
+                                               <entry value="org.argeo.cms.Theme" key="org.eclipse.rap.rwt.webclient.themeId" />
+                                               <entry key="org.eclipse.rap.rwt.webclient.additionalHeaders">
+                                                       <value><![CDATA[
+       <style type='text/css'>
+               a:link, a:visited { color: #333333;  text-decoration:none;  }
+               a:hover { text-decoration:underline; }
+       </style>
+       <meta property="og:title" content="Argeo Suite" />
+       <meta property="og:description" content="Distributed Java Applications" />
+       <meta property="og:type" content="website" />
+       <meta property="og:url" content="https://www.argeo.org/" />
+]]></value>
+                                               </entry>
+                                       </map>
+                               </entry>
+                               <entry key="">
+                                       <map>
+                                               <entry value="Argeo Suite" key="org.eclipse.rap.rwt.webclient.pageTitle" />
+                                       </map>
+                               </entry>
+                               <entry key="people">
+                                       <map>
+                                               <entry value="Contacts" key="org.eclipse.rap.rwt.webclient.pageTitle" />
+                                               <entry value="org.argeo.cms.Theme" key="org.eclipse.rap.rwt.webclient.themeId" />
+                                               <entry value="theme/argeo-classic/icons/people/people.gif"
+                                                       key="org.eclipse.rap.rwt.webclient.favicon" />
+                                               <entry key="org.eclipse.rap.rwt.webclient.additionalHeaders">
+                                                       <value><![CDATA[
+                               <style type='text/css'>
+                                       a:link, a:visited { color: #333333; text-decoration:none; }
+                                       a:hover { text-decoration:underline;}
+                               </style>
+]]></value>
+                                               </entry>
+                                       </map>
+                               </entry>
+                       </map>
+               </property>
+               <property name="styleSheets">
+                       <map>
+                               <entry key="org.argeo.cms.Theme">
+                                       <list>
+                                               <value>theme/argeo-classic/argeo-classic.css</value>
+                                               <value>theme/argeo-classic/people-classic.css</value>
+                                               <value>theme/argeo-classic/fs-classic.css</value>
+                                               <value>theme/argeo-classic/maintenance-classic.css</value>
+                                       </list>
+                               </entry>
+                       </map>
+               </property>
+       </bean>
+</beans>
diff --git a/org.argeo.suite.web/apps.properties b/org.argeo.suite.web/apps.properties
new file mode 100644 (file)
index 0000000..e0227a3
--- /dev/null
@@ -0,0 +1 @@
+argeo.security.systemKey=argeo
\ No newline at end of file
diff --git a/org.argeo.suite.web/bnd.bnd b/org.argeo.suite.web/bnd.bnd
new file mode 100644 (file)
index 0000000..f13bd42
--- /dev/null
@@ -0,0 +1,11 @@
+Import-Package:\
+javax.jcr.nodetype,\
+org.argeo.node,\
+javax.jcr.security,\
+org.eclipse.swt,\
+*
+
+#org.argeo.cms.text,\
+#org.argeo.connect.people,\
+
+    
diff --git a/org.argeo.suite.web/build.properties b/org.argeo.suite.web/build.properties
new file mode 100644 (file)
index 0000000..3166058
--- /dev/null
@@ -0,0 +1,3 @@
+source.. = src/
+output.. = bin/
+
diff --git a/org.argeo.suite.web/pom.xml b/org.argeo.suite.web/pom.xml
new file mode 100644 (file)
index 0000000..952c005
--- /dev/null
@@ -0,0 +1,37 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+       xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
+       <modelVersion>4.0.0</modelVersion>
+       <parent>
+               <groupId>org.argeo.suite</groupId>
+               <artifactId>argeo-suite</artifactId>
+               <version>0.1.1-SNAPSHOT</version>
+               <relativePath>..</relativePath>
+       </parent>
+       <artifactId>org.argeo.suite.web</artifactId>
+       <name>Argeo Suite Web UI</name>
+       <packaging>jar</packaging>
+
+       <dependencies>
+               <dependency>
+                       <groupId>org.argeo.connect</groupId>
+                       <artifactId>org.argeo.connect.people.web</artifactId>
+                       <version>${version.argeo-connect}</version>
+               </dependency>
+               <dependency>
+                       <groupId>org.argeo.connect</groupId>
+                       <artifactId>org.argeo.connect.people.rap</artifactId>
+                       <version>${version.argeo-connect}</version>
+               </dependency>
+               <dependency>
+                       <groupId>org.argeo.connect</groupId>
+                       <artifactId>org.argeo.connect.ui</artifactId>
+                       <version>${version.argeo-connect}</version>
+               </dependency>
+               <dependency>
+                       <groupId>org.argeo.commons</groupId>
+                       <artifactId>org.argeo.cms.ui</artifactId>
+                       <version>${version.argeo-commons}</version>
+               </dependency>
+       </dependencies>
+</project>
diff --git a/org.argeo.suite.web/src/org/argeo/suite/SuiteException.java b/org.argeo.suite.web/src/org/argeo/suite/SuiteException.java
new file mode 100644 (file)
index 0000000..6351804
--- /dev/null
@@ -0,0 +1,14 @@
+package org.argeo.suite;
+
+/** Argeo Suite specific exception. Wraps a usual RuntimeException */
+public class SuiteException extends RuntimeException {
+       private static final long serialVersionUID = 9048360857209165816L;
+
+       public SuiteException(String message) {
+               super(message);
+       }
+
+       public SuiteException(String message, Throwable e) {
+               super(message, e);
+       }
+}
diff --git a/org.argeo.suite.web/src/org/argeo/suite/people/PeopleSuiteServiceImpl.java b/org.argeo.suite.web/src/org/argeo/suite/people/PeopleSuiteServiceImpl.java
new file mode 100644 (file)
index 0000000..27efb4d
--- /dev/null
@@ -0,0 +1,143 @@
+package org.argeo.suite.people;
+
+import javax.jcr.Repository;
+import javax.jcr.RepositoryException;
+import javax.jcr.Session;
+import javax.jcr.nodetype.NodeType;
+import javax.jcr.security.Privilege;
+
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+import org.argeo.connect.people.PeopleConstants;
+import org.argeo.connect.people.PeopleNames;
+import org.argeo.connect.people.PeopleService;
+import org.argeo.connect.people.PeopleTypes;
+import org.argeo.connect.people.ResourceService;
+import org.argeo.connect.people.core.PeopleServiceImpl;
+import org.argeo.jcr.JcrUtils;
+import org.argeo.node.NodeConstants;
+import org.argeo.suite.SuiteException;
+
+/** Default implementation of an Argeo Suite specific People Backend */
+public class PeopleSuiteServiceImpl extends PeopleServiceImpl implements PeopleService, PeopleConstants {
+       private final static Log log = LogFactory.getLog(PeopleSuiteServiceImpl.class);
+
+       /* DEPENDENCY INJECTION */
+       private Repository repository;
+       private String workspaceName;
+       // private UserAdminService userAdminService;
+
+       public void init() {
+               super.init();
+               Session adminSession = null;
+               try {
+                       adminSession = repository.login(workspaceName);
+                       initialiseModel(adminSession);
+               } catch (Exception e) {
+                       throw new SuiteException("Cannot initialise model", e);
+               } finally {
+                       JcrUtils.logoutQuietly(adminSession);
+               }
+       }
+
+       // HELPERS
+
+       // TODO Hard-coded creation of default public and shared file directories
+       // To be cleaned once first init and configuration mechanisms have been
+       // implemented
+       private final static String publicPath = "/public";
+       private final static String sharedFilePath = "/sharedFiles";
+
+       @Override
+       protected void initialiseModel(Session adminSession) throws RepositoryException {
+               super.initialiseModel(adminSession);
+
+               JcrUtils.mkdirs(adminSession, publicPath, NodeType.NT_UNSTRUCTURED);
+               JcrUtils.mkdirs(adminSession, sharedFilePath, NodeType.NT_FOLDER);
+               initModelResources(adminSession);
+               if (adminSession.hasPendingChanges()) {
+                       adminSession.save();
+                       log.info("Repository has been initialized " + "with People's model");
+                       configureACL(adminSession);
+               }
+       }
+
+       // First draft of configuration of the people specific rights
+       private void configureACL(Session session) throws RepositoryException {
+               String memberGroupDn = "cn=" + PeopleConstants.ROLE_MEMBER + ",ou=roles,ou=node";
+               JcrUtils.addPrivilege(session, getBasePath(null), memberGroupDn, Privilege.JCR_ALL);
+               JcrUtils.addPrivilege(session, "/", NodeConstants.ROLE_ADMIN, Privilege.JCR_ALL);
+               JcrUtils.addPrivilege(session, publicPath, NodeConstants.ROLE_USER, Privilege.JCR_READ);
+               JcrUtils.addPrivilege(session, publicPath, "anonymous", Privilege.JCR_READ);
+               JcrUtils.addPrivilege(session, publicPath, NodeConstants.ROLE_ANONYMOUS, Privilege.JCR_READ);
+               JcrUtils.addPrivilege(session, sharedFilePath, NodeConstants.ROLE_USER, Privilege.JCR_ALL);
+               session.save();
+               log.info("Access control configured");
+       }
+
+       /**
+        * Initialises People resource model and optionally imports legacy resources
+        */
+       protected void initModelResources(Session adminSession) throws RepositoryException {
+               // initialisation
+               ResourceService resourceService = getResourceService();
+               resourceService.initialiseResources(adminSession);
+
+               // Resource resource = initResources.get("Countries");
+               // if (resourceService.getTagLikeResourceParent(adminSession,
+               // PeopleConstants.RESOURCE_COUNTRY) == null
+               // && resource != null) {
+               // resourceService.createTagLikeResourceParent(adminSession,
+               // PeopleConstants.RESOURCE_COUNTRY,
+               // PeopleTypes.PEOPLE_TAG_ENCODED_INSTANCE, PeopleNames.PEOPLE_CODE,
+               // getBasePath(null),
+               // JcrUiUtils.getLocalJcrItemName(NodeType.NT_UNSTRUCTURED), new
+               // ArrayList<String>());
+               // String EN_SHORT_NAME = "English short name (upper-lower case)";
+               // String ISO_CODE = "Alpha-2 code";
+               // new EncodedTagCsvFileParser(resourceService, adminSession,
+               // PeopleConstants.RESOURCE_COUNTRY, ISO_CODE,
+               // EN_SHORT_NAME).parse(resource.getInputStream(), "UTF-8");
+               // }
+               //
+               // resource = initResources.get("Languages");
+               // if (resourceService.getTagLikeResourceParent(adminSession,
+               // PeopleConstants.RESOURCE_LANG) == null
+               // && resource != null) {
+               // resourceService.createTagLikeResourceParent(adminSession,
+               // PeopleConstants.RESOURCE_LANG,
+               // PeopleTypes.PEOPLE_TAG_ENCODED_INSTANCE, PeopleNames.PEOPLE_CODE,
+               // getBasePath(null),
+               // JcrUiUtils.getLocalJcrItemName(NodeType.NT_UNSTRUCTURED), new
+               // ArrayList<String>());
+               // String EN_SHORT_NAME = "Language name";
+               // String ISO_CODE = "639-1";
+               // new EncodedTagCsvFileParser(resourceService, adminSession,
+               // PeopleConstants.RESOURCE_LANG, ISO_CODE,
+               // EN_SHORT_NAME).parse(resource.getInputStream(), "UTF-8");
+               // }
+
+               // Create tag & mailing list parents
+               if (resourceService.getTagLikeResourceParent(adminSession, PeopleConstants.RESOURCE_TAG) == null)
+                       resourceService.createTagLikeResourceParent(adminSession, PeopleConstants.RESOURCE_TAG,
+                                       PeopleTypes.PEOPLE_TAG_INSTANCE, null, getBasePath(null), PeopleTypes.PEOPLE_ENTITY,
+                                       PeopleNames.PEOPLE_TAGS);
+               if (resourceService.getTagLikeResourceParent(adminSession, PeopleTypes.PEOPLE_MAILING_LIST) == null)
+                       resourceService.createTagLikeResourceParent(adminSession, null, PeopleTypes.PEOPLE_MAILING_LIST, null,
+                                       getBasePath(null), PeopleTypes.PEOPLE_ENTITY, PeopleNames.PEOPLE_MAILING_LISTS);
+
+               if (adminSession.hasPendingChanges()) {
+                       adminSession.save();
+                       log.info("Resources have been added to People's model");
+               }
+       }
+
+       /* DEPENDENCY INJECTION */
+       public void setRepository(Repository repository) {
+               this.repository = repository;
+       }
+
+       public void setWorkspaceName(String workspaceName) {
+               this.workspaceName = workspaceName;
+       }
+}
diff --git a/org.argeo.suite.web/src/org/argeo/suite/web/DefaultDashboard.java b/org.argeo.suite.web/src/org/argeo/suite/web/DefaultDashboard.java
new file mode 100644 (file)
index 0000000..7e366c5
--- /dev/null
@@ -0,0 +1,97 @@
+package org.argeo.suite.web;
+
+import java.util.Map;
+
+import javax.jcr.Node;
+import javax.jcr.RepositoryException;
+
+import org.argeo.cms.ui.CmsUiProvider;
+import org.argeo.cms.util.CmsUtils;
+import org.argeo.connect.people.PeopleException;
+import org.argeo.connect.people.PeopleService;
+import org.argeo.connect.people.web.pages.OrgPage;
+import org.argeo.connect.people.web.parts.PeopleSearchCmp;
+import org.argeo.eclipse.ui.EclipseUiUtils;
+import org.eclipse.jface.viewers.DoubleClickEvent;
+import org.eclipse.jface.viewers.IDoubleClickListener;
+import org.eclipse.jface.viewers.IStructuredSelection;
+import org.eclipse.jface.viewers.TableViewer;
+import org.eclipse.jface.viewers.Viewer;
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.custom.SashForm;
+import org.eclipse.swt.layout.GridLayout;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.Control;
+import org.eclipse.swt.widgets.Label;
+
+/** Default dashboard layout for Argeo Suite */
+public class DefaultDashboard implements CmsUiProvider {
+
+       private PeopleService peopleService;
+       private Map<String, String> peopleIconPaths;
+
+       // Local UI Providers
+       private CmsUiProvider orgPage;
+
+       public DefaultDashboard(PeopleService peopleService, Map<String, String> peopleIconPaths) {
+               this.peopleService = peopleService;
+               this.peopleIconPaths = peopleIconPaths;
+
+               orgPage = new OrgPage(peopleService);
+       }
+
+       @Override
+       public Control createUi(Composite parent, Node context) throws RepositoryException {
+               parent.setLayout(EclipseUiUtils.noSpaceGridLayout());
+               SashForm form = new SashForm(parent, SWT.HORIZONTAL);
+               form.setLayoutData(EclipseUiUtils.fillAll());
+               Composite leftPannelCmp = new Composite(form, SWT.NO_FOCUS);
+               Composite rightPannelCmp = new Composite(form, SWT.NO_FOCUS);
+               form.setWeights(new int[] { 2, 5 });
+
+               // A search on the left and the display on the right
+               populateSearch(leftPannelCmp, context, rightPannelCmp);
+               populateDefaultDisplay(rightPannelCmp, context);
+
+               return form;
+       }
+
+       public Viewer populateSearch(Composite parent, Node context, final Composite targetComposite)
+                       throws RepositoryException {
+               parent.setLayout(EclipseUiUtils.noSpaceGridLayout());
+               Composite titleCmp = new Composite(parent, SWT.NO_FOCUS);
+               titleCmp.setLayoutData(EclipseUiUtils.fillWidth());
+               titleCmp.setLayout(new GridLayout());
+               Label titleLbl = new Label(titleCmp, SWT.CENTER);
+               titleLbl.setLayoutData(EclipseUiUtils.fillWidth());
+               titleLbl.setText("My Tasks");
+               titleLbl.setFont(EclipseUiUtils.getBoldFont(titleCmp));
+
+               PeopleSearchCmp searchComp = new PeopleSearchCmp(parent, SWT.NO_FOCUS, peopleService, peopleIconPaths);
+               searchComp.populate(context, true);
+               searchComp.setLayoutData(EclipseUiUtils.fillAll());
+
+               TableViewer viewer = searchComp.getViewer();
+               viewer.addDoubleClickListener(new IDoubleClickListener() {
+                       @Override
+                       public void doubleClick(DoubleClickEvent event) {
+                               Object firstObj = ((IStructuredSelection) event.getSelection()).getFirstElement();
+                               try {
+                                       Node node = (Node) firstObj;
+                                       String path = node.getPath();
+                                       CmsUtils.getCmsView().navigateTo(path);
+                               } catch (RepositoryException e) {
+                                       throw new PeopleException("Unable to refresh display for " + context, e);
+                               }
+                       }
+               });
+               return null;
+       }
+
+       public Control populateDefaultDisplay(Composite parent, Node context) throws RepositoryException {
+               parent.setLayout(new GridLayout());
+               Label lbl = new Label(parent, SWT.NONE);
+               lbl.setText("Implement a default display");
+               return lbl;
+       }
+}
diff --git a/org.argeo.suite.web/src/org/argeo/suite/web/DefaultMainPage.java b/org.argeo.suite.web/src/org/argeo/suite/web/DefaultMainPage.java
new file mode 100644 (file)
index 0000000..1dcc4d5
--- /dev/null
@@ -0,0 +1,137 @@
+package org.argeo.suite.web;
+
+import java.nio.file.spi.FileSystemProvider;
+import java.util.Locale;
+import java.util.Map;
+
+import javax.jcr.Node;
+import javax.jcr.RepositoryException;
+import javax.jcr.Session;
+import javax.jcr.nodetype.NodeType;
+
+import org.argeo.cms.CmsMsg;
+import org.argeo.cms.auth.CurrentUser;
+import org.argeo.cms.text.TextStyles;
+import org.argeo.cms.ui.CmsUiProvider;
+import org.argeo.cms.ui.CmsView;
+import org.argeo.cms.ui.LifeCycleUiProvider;
+import org.argeo.cms.ui.fs.MyFilesBrowserPage;
+import org.argeo.cms.util.CmsUtils;
+import org.argeo.cms.widgets.auth.CmsLogin;
+import org.argeo.connect.people.PeopleService;
+import org.argeo.connect.people.PeopleTypes;
+import org.argeo.connect.people.web.pages.PeopleDefaultPage;
+import org.argeo.eclipse.ui.EclipseUiUtils;
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.events.SelectionListener;
+import org.eclipse.swt.layout.GridData;
+import org.eclipse.swt.layout.GridLayout;
+import org.eclipse.swt.widgets.Button;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.Control;
+import org.eclipse.swt.widgets.Label;
+
+/**
+ * Default entry point for the Argeo Suite CMS. Forwards the request to the relevant
+ * CmsUiProvider
+ */
+public class DefaultMainPage implements LifeCycleUiProvider {
+
+       private CmsUiProvider dashboardPage;
+       private CmsUiProvider peoplePage;
+       private CmsUiProvider fsBrowserPage;
+
+       /* DEPENDENCY INJECTION */
+       private PeopleService peopleService;
+       private FileSystemProvider nodeFileSystemProvider;
+       private Map<String, String> peopleIconPaths;
+
+       public DefaultMainPage() {
+       }
+
+       @Override
+       public void init(Session adminSession) throws RepositoryException {
+               dashboardPage = new DefaultDashboard(peopleService, peopleIconPaths);
+               peoplePage = new PeopleDefaultPage(peopleService, peopleIconPaths);
+               fsBrowserPage = new MyFilesBrowserPage(nodeFileSystemProvider);
+       }
+
+       @Override
+       public Control createUi(Composite parent, Node context) throws RepositoryException {
+               if (CurrentUser.isAnonymous())
+                       return createAnonymousUi(parent, context);
+
+               if (context.isNodeType(PeopleTypes.PEOPLE_ENTITY))
+                       return peoplePage.createUi(parent, context);
+               else if (peopleService.getBasePath(null).equals(context.getPath()))
+                       return peoplePage.createUi(parent, context);
+               else if (context.isNodeType(NodeType.NT_FOLDER) || context.isNodeType(NodeType.NT_FILE))
+                       return fsBrowserPage.createUi(parent, context);
+               else
+                       return dashboardPage.createUi(parent, context);
+       }
+
+       public Control createAnonymousUi(Composite parent, Node context) throws RepositoryException {
+               parent.setLayout(new GridLayout());
+               Composite body = new Composite(parent, SWT.NO_FOCUS);
+               body.setLayoutData(new GridData(SWT.CENTER, SWT.CENTER, true, true));
+               body.setLayout(new GridLayout());
+
+               Composite loginCmp = new Composite(body, SWT.NO_FOCUS);
+               loginCmp.setLayout(EclipseUiUtils.noSpaceGridLayout());
+               loginCmp.setLayoutData(new GridData(SWT.CENTER, SWT.CENTER, true, true));
+
+               CmsLogin login = new MyCmsLogin(CmsUtils.getCmsView());
+               // Composite credBlockCmp =
+               login.createCredentialsBlock(loginCmp);
+               // Use a custom style that has no border, among other
+               // CmsUtils.style(loginCmp, ArgeoStyles.LOGIN_INLINE_CREDBLOCK);
+
+               Label anonymousLbl = new Label(body, SWT.WRAP);
+               anonymousLbl.setText("You should login or register to access your private dashboard");
+               CmsUtils.style(anonymousLbl, TextStyles.TEXT_QUOTE);
+
+               return body;
+
+       }
+
+       private class MyCmsLogin extends CmsLogin {
+
+               public MyCmsLogin(CmsView cmsView) {
+                       super(cmsView);
+               }
+
+               @Override
+               protected boolean login() {
+                       boolean result = super.login();
+                       return result;
+               }
+
+               @Override
+               protected void extendsCredentialsBlock(Composite credentialsBlock, Locale selectedLocale,
+                               SelectionListener loginSelectionListener) {
+                       Button loginBtn = new Button(credentialsBlock, SWT.PUSH);
+                       loginBtn.setText(CmsMsg.login.lead(selectedLocale));
+                       loginBtn.setLayoutData(CmsUtils.fillWidth());
+                       loginBtn.addSelectionListener(loginSelectionListener);
+                       // CmsUtils.style(loginBtn, ArgeoStyles.LOGIN_SIGNIN_BTN);
+               }
+       }
+
+       @Override
+       public void destroy() {
+       }
+
+       /* DEPENDENCY INJECTION */
+       public void setPeopleService(PeopleService peopleService) {
+               this.peopleService = peopleService;
+       }
+
+       public void setNodeFileSystemProvider(FileSystemProvider nodeFileSystemProvider) {
+               this.nodeFileSystemProvider = nodeFileSystemProvider;
+       }
+
+       public void setPeopleIconPaths(Map<String, String> peopleIconPaths) {
+               this.peopleIconPaths = peopleIconPaths;
+       }
+}
diff --git a/org.argeo.suite.web/src/org/argeo/suite/web/DynamicHeader.java b/org.argeo.suite.web/src/org/argeo/suite/web/DynamicHeader.java
new file mode 100644 (file)
index 0000000..47b8544
--- /dev/null
@@ -0,0 +1,35 @@
+package org.argeo.suite.web;
+
+import javax.jcr.Node;
+import javax.jcr.RepositoryException;
+
+import org.argeo.cms.auth.CurrentUser;
+import org.argeo.cms.ui.CmsUiProvider;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.Control;
+
+/**
+ * Choose between possible headers depending on the client logged-in status and
+ * display type.
+ */
+public class DynamicHeader implements CmsUiProvider {
+
+       private CmsUiProvider publicHeaderProvider;
+       private CmsUiProvider privateHeaderProvider;
+
+       @Override
+       public Control createUi(Composite parent, Node context) throws RepositoryException {
+               if (CurrentUser.isRegistered())
+                       return privateHeaderProvider.createUi(parent, context);
+               else
+                       return publicHeaderProvider.createUi(parent, context);
+       }
+
+       public void setPrivateHeaderProvider(CmsUiProvider privateHeaderProvider) {
+               this.privateHeaderProvider = privateHeaderProvider;
+       }
+
+       public void setPublicHeaderProvider(CmsUiProvider publicHeaderProvider) {
+               this.publicHeaderProvider = publicHeaderProvider;
+       }
+}
diff --git a/org.argeo.suite.web/theme/argeo-classic/argeo-classic.css b/org.argeo.suite.web/theme/argeo-classic/argeo-classic.css
new file mode 100644 (file)
index 0000000..71fc1b7
--- /dev/null
@@ -0,0 +1,149 @@
+/* For reference, Argeo colors
+Orange: #f6712e;
+Blue: #00294b; */
+
+/* TEXT STYLES */
+.text_title {
+       font: bold 26px sans-serif;
+}
+
+.text_title_box {
+       padding: 20px;
+}
+
+.text_h1 {
+       font: bold 24px sans-serif;
+}
+
+.text_h1_box {
+       padding: 10px 10px 5px;
+}
+
+.text_h2 {
+       font: bold italic 20px serif;
+}
+
+.text_h2_box {
+       padding: 0px 15px 10px;
+}
+
+.text_h3 {
+       font: bold 18px sans-serif;
+}
+
+.text_h3_box {
+       padding: 0px 20px 10px;
+}
+
+.text_default {
+       font: 18px sans-serif;
+}
+
+.text_default_box {
+       padding: 0px 10px 10px;
+}
+
+.text_pre {
+       font: 16px monospace;
+       background-color: inherit;
+}
+
+.text_pre_box {
+       padding: 10px;
+       border: 1px dashed gray;
+       background-color: #ababab
+}
+
+.text_pre_container {
+       padding: 0px 10px 10px;
+}
+
+.text_quote {
+       font: italic 22px serif;
+       text-shadow: 2px 3px 3px #ababab;
+       background-color: inherit;
+}
+
+.text_quote_box {
+       padding: 10px;
+       background-color: #d6d6d6
+}
+
+.text_quote_container {
+       padding: 20px 50px 20px 80px;
+}
+
+/* TEXT */
+.text_styled_tools_dialog {
+       border: 1px solid #00294b;
+       padding: 10px 5px;
+}
+
+.text_styled_composite {
+       /*border: 1px solid red;*/
+       
+}
+
+.text_section {
+/*     border: 1px solid green; */
+}
+
+.text_paragraph {
+/*     border: 1px solid blue; */
+}
+
+.text_editor {
+       border: 2px outset #00294b;
+}
+
+/* CMS ICONS */
+.cms_icon_delete {
+       background-image: url(theme/argeo-classic/icons/delete.gif);
+       border: none;
+}
+
+/* CMS */
+.cms_header {
+       background-color: #00294b;
+       height: 30px;
+}
+
+.cms_link {
+       text-decoration: underline;
+}
+
+.cms_link:hover {
+       text-decoration: none;
+       color: black;
+}
+
+a {
+       text-decoration: none;
+}
+
+a:hover {
+       text-decoration: underline;
+}
+
+.cms_header-logo {
+       padding: 5px;
+}
+
+.cms_user_menu-link,
+.cms_menu_link {
+       color: white;
+       font: 15px Helvetica, Verdana, sans-serif;
+       padding: 10px;
+       text-decoration: none;
+}
+
+.cms_user_menu-link:hover,
+.cms_menu_link:hover {
+       color: #ededed;
+       text-decoration: underline;
+}
+
+.cms_user_menu {
+       border: 1px solid #00294b;
+       padding: 10px 5px;
+}
\ No newline at end of file
diff --git a/org.argeo.suite.web/theme/argeo-classic/fs-classic.css b/org.argeo.suite.web/theme/argeo-classic/fs-classic.css
new file mode 100644 (file)
index 0000000..923fd39
--- /dev/null
@@ -0,0 +1,87 @@
+/**
+Argeo Blue: #00294b
+*/ 
+
+/**** BREAD CRUMB ***/
+Button.breadCrumb_btn {
+  border: 1px solid  #f4f6f7;
+  border-radius: 3px;
+  padding: 5px 2px 5px 2px;
+  background-color: transparent;
+  background-repeat: no-repeat;
+  animation: hoverOut 500ms ease-out;
+  cursor: pointer;
+  font-color: #00294b;
+  text-decoration: none;
+}
+
+Button.breadCrumb_btn:hover {
+  text-decoration: underline;
+}
+
+
+/****** Context menu  *********/
+.contextMenu_box {
+       border: 1px solid #fde2d5;
+       padding: 0px;
+       box-shadow: 2px 2px 5px #fde2d5; 
+}
+
+Button[PUSH][FLAT].createFolder_btn {
+         background-image: url( theme/argeo-classic/icons/fs/createFolder.png);
+}
+
+Button[PUSH][FLAT].shareFolder_btn {
+         background-image: url( theme/argeo-classic/icons/fs/createFolder.png);
+}
+
+Button[PUSH][FLAT].downloadFolder_btn {
+         background-image: url( theme/argeo-classic/icons/fs/createFolder.png);
+}
+
+Button[PUSH][FLAT].delete_btn {
+         background-image: url( theme/argeo-classic/icons/fs/createFolder.png);
+}
+
+Button[PUSH][FLAT].uploadFiles_btn {
+         background-image: url( theme/argeo-classic/icons/fs/createFolder.png);
+}
+
+Button[PUSH][FLAT].open_btn {
+         background-image: url( theme/argeo-classic/icons/fs/createFolder.png);
+}
+
+Button[PUSH][FLAT].shareFolder_btn,
+Button[PUSH][FLAT].downloadFolder_btn,
+Button[PUSH][FLAT].delete_btn,
+Button[PUSH][FLAT].uploadFiles_btn,
+Button[PUSH][FLAT].open_btn,
+Button[PUSH][FLAT].createFolder_btn {
+  border: 0px solid white;
+  border-left: 10px solid transparent;
+  border-radius: 0px;
+  padding: 8px 5px 8px 24px;
+  background-color: transparent;
+  background-repeat: no-repeat;
+  background-position: left; 
+  animation: hoverOut 500ms ease-out;
+  cursor: pointer;
+}
+
+Button[PUSH][FLAT].shareFolder_btn:hover,
+Button[PUSH][FLAT].downloadFolder_btn:hover,
+Button[PUSH][FLAT].delete_btn:hover,
+Button[PUSH][FLAT].uploadFiles_btn:hover,
+Button[PUSH][FLAT].open_btn:hover,
+Button[PUSH][FLAT].createFolder_btn:hover {
+  background-color: #fef0ea;
+}
+
+Button[PUSH][FLAT].shareFolder_btn:pressed,
+Button[PUSH][FLAT].downloadFolder_btn:pressed,
+Button[PUSH][FLAT].delete_btn:pressed,
+Button[PUSH][FLAT].uploadFiles_btn:pressed,
+Button[PUSH][FLAT].open_btn:pressed,
+Button[PUSH][FLAT].createFolder_btn:pressed {
+  background-color: #fde2d5;
+}
diff --git a/org.argeo.suite.web/theme/argeo-classic/icons/delete.gif b/org.argeo.suite.web/theme/argeo-classic/icons/delete.gif
new file mode 100644 (file)
index 0000000..1aca259
Binary files /dev/null and b/org.argeo.suite.web/theme/argeo-classic/icons/delete.gif differ
diff --git a/org.argeo.suite.web/theme/argeo-classic/icons/fs/createFolder.png b/org.argeo.suite.web/theme/argeo-classic/icons/fs/createFolder.png
new file mode 100644 (file)
index 0000000..3f56074
Binary files /dev/null and b/org.argeo.suite.web/theme/argeo-classic/icons/fs/createFolder.png differ
diff --git a/org.argeo.suite.web/theme/argeo-classic/icons/maintenance.gif b/org.argeo.suite.web/theme/argeo-classic/icons/maintenance.gif
new file mode 100755 (executable)
index 0000000..0a1fa96
Binary files /dev/null and b/org.argeo.suite.web/theme/argeo-classic/icons/maintenance.gif differ
diff --git a/org.argeo.suite.web/theme/argeo-classic/icons/people/contacts/Icon-credit.txt b/org.argeo.suite.web/theme/argeo-classic/icons/people/contacts/Icon-credit.txt
new file mode 100644 (file)
index 0000000..4e60cf3
--- /dev/null
@@ -0,0 +1,17 @@
+Some of the icons have been downloaded from http://www.fatcow.com/free-icons.
+They are licenced under Creative Commons Attribution 3.0 License.
+
+These icons were as from October 3rd, 2013 the following:
+fax.png
+mail_black.png
+phone-vintage.png
+telephone.png
+
+Some of the icons have been downloaded from http://somerandomdude.com/work/iconic/.
+They are licenced under Creative Commons Attribution 3.0 License.
+
+These icons were as from October 15th, 2013 the following:
+socialmedia.png (former chat_alt_stroke_16x16.png)
+home.png (former home_16x16.png)
+mobile.png (former iphone_12x16.png)
+link.png (former link_16x16.png)
diff --git a/org.argeo.suite.web/theme/argeo-classic/icons/people/contacts/facebook.png b/org.argeo.suite.web/theme/argeo-classic/icons/people/contacts/facebook.png
new file mode 100644 (file)
index 0000000..8e7e44c
Binary files /dev/null and b/org.argeo.suite.web/theme/argeo-classic/icons/people/contacts/facebook.png differ
diff --git a/org.argeo.suite.web/theme/argeo-classic/icons/people/contacts/fax.png b/org.argeo.suite.web/theme/argeo-classic/icons/people/contacts/fax.png
new file mode 100644 (file)
index 0000000..791f511
Binary files /dev/null and b/org.argeo.suite.web/theme/argeo-classic/icons/people/contacts/fax.png differ
diff --git a/org.argeo.suite.web/theme/argeo-classic/icons/people/contacts/googleplus.png b/org.argeo.suite.web/theme/argeo-classic/icons/people/contacts/googleplus.png
new file mode 100644 (file)
index 0000000..ff97843
Binary files /dev/null and b/org.argeo.suite.web/theme/argeo-classic/icons/people/contacts/googleplus.png differ
diff --git a/org.argeo.suite.web/theme/argeo-classic/icons/people/contacts/home.png b/org.argeo.suite.web/theme/argeo-classic/icons/people/contacts/home.png
new file mode 100644 (file)
index 0000000..16834e3
Binary files /dev/null and b/org.argeo.suite.web/theme/argeo-classic/icons/people/contacts/home.png differ
diff --git a/org.argeo.suite.web/theme/argeo-classic/icons/people/contacts/impp.png b/org.argeo.suite.web/theme/argeo-classic/icons/people/contacts/impp.png
new file mode 100644 (file)
index 0000000..b334f91
Binary files /dev/null and b/org.argeo.suite.web/theme/argeo-classic/icons/people/contacts/impp.png differ
diff --git a/org.argeo.suite.web/theme/argeo-classic/icons/people/contacts/link.png b/org.argeo.suite.web/theme/argeo-classic/icons/people/contacts/link.png
new file mode 100644 (file)
index 0000000..f223cfa
Binary files /dev/null and b/org.argeo.suite.web/theme/argeo-classic/icons/people/contacts/link.png differ
diff --git a/org.argeo.suite.web/theme/argeo-classic/icons/people/contacts/linkedin.png b/org.argeo.suite.web/theme/argeo-classic/icons/people/contacts/linkedin.png
new file mode 100644 (file)
index 0000000..d86dc0e
Binary files /dev/null and b/org.argeo.suite.web/theme/argeo-classic/icons/people/contacts/linkedin.png differ
diff --git a/org.argeo.suite.web/theme/argeo-classic/icons/people/contacts/mail_black.png b/org.argeo.suite.web/theme/argeo-classic/icons/people/contacts/mail_black.png
new file mode 100644 (file)
index 0000000..790f750
Binary files /dev/null and b/org.argeo.suite.web/theme/argeo-classic/icons/people/contacts/mail_black.png differ
diff --git a/org.argeo.suite.web/theme/argeo-classic/icons/people/contacts/mobile.png b/org.argeo.suite.web/theme/argeo-classic/icons/people/contacts/mobile.png
new file mode 100644 (file)
index 0000000..08ac54b
Binary files /dev/null and b/org.argeo.suite.web/theme/argeo-classic/icons/people/contacts/mobile.png differ
diff --git a/org.argeo.suite.web/theme/argeo-classic/icons/people/contacts/myspace.png b/org.argeo.suite.web/theme/argeo-classic/icons/people/contacts/myspace.png
new file mode 100644 (file)
index 0000000..beb04fc
Binary files /dev/null and b/org.argeo.suite.web/theme/argeo-classic/icons/people/contacts/myspace.png differ
diff --git a/org.argeo.suite.web/theme/argeo-classic/icons/people/contacts/phone_vintage.png b/org.argeo.suite.web/theme/argeo-classic/icons/people/contacts/phone_vintage.png
new file mode 100644 (file)
index 0000000..7e463ad
Binary files /dev/null and b/org.argeo.suite.web/theme/argeo-classic/icons/people/contacts/phone_vintage.png differ
diff --git a/org.argeo.suite.web/theme/argeo-classic/icons/people/contacts/reddit.png b/org.argeo.suite.web/theme/argeo-classic/icons/people/contacts/reddit.png
new file mode 100644 (file)
index 0000000..0eac7b8
Binary files /dev/null and b/org.argeo.suite.web/theme/argeo-classic/icons/people/contacts/reddit.png differ
diff --git a/org.argeo.suite.web/theme/argeo-classic/icons/people/contacts/skype.png b/org.argeo.suite.web/theme/argeo-classic/icons/people/contacts/skype.png
new file mode 100644 (file)
index 0000000..e31a04d
Binary files /dev/null and b/org.argeo.suite.web/theme/argeo-classic/icons/people/contacts/skype.png differ
diff --git a/org.argeo.suite.web/theme/argeo-classic/icons/people/contacts/socialmedia.png b/org.argeo.suite.web/theme/argeo-classic/icons/people/contacts/socialmedia.png
new file mode 100644 (file)
index 0000000..f0d1722
Binary files /dev/null and b/org.argeo.suite.web/theme/argeo-classic/icons/people/contacts/socialmedia.png differ
diff --git a/org.argeo.suite.web/theme/argeo-classic/icons/people/contacts/telephone.png b/org.argeo.suite.web/theme/argeo-classic/icons/people/contacts/telephone.png
new file mode 100644 (file)
index 0000000..e04ec63
Binary files /dev/null and b/org.argeo.suite.web/theme/argeo-classic/icons/people/contacts/telephone.png differ
diff --git a/org.argeo.suite.web/theme/argeo-classic/icons/people/contacts/twitter.png b/org.argeo.suite.web/theme/argeo-classic/icons/people/contacts/twitter.png
new file mode 100644 (file)
index 0000000..1023e5b
Binary files /dev/null and b/org.argeo.suite.web/theme/argeo-classic/icons/people/contacts/twitter.png differ
diff --git a/org.argeo.suite.web/theme/argeo-classic/icons/people/contacts/xing.png b/org.argeo.suite.web/theme/argeo-classic/icons/people/contacts/xing.png
new file mode 100644 (file)
index 0000000..26fd283
Binary files /dev/null and b/org.argeo.suite.web/theme/argeo-classic/icons/people/contacts/xing.png differ
diff --git a/org.argeo.suite.web/theme/argeo-classic/icons/people/misc/primary.gif b/org.argeo.suite.web/theme/argeo-classic/icons/people/misc/primary.gif
new file mode 100644 (file)
index 0000000..1965b84
Binary files /dev/null and b/org.argeo.suite.web/theme/argeo-classic/icons/people/misc/primary.gif differ
diff --git a/org.argeo.suite.web/theme/argeo-classic/icons/people/misc/primaryNOT.gif b/org.argeo.suite.web/theme/argeo-classic/icons/people/misc/primaryNOT.gif
new file mode 100644 (file)
index 0000000..acb0268
Binary files /dev/null and b/org.argeo.suite.web/theme/argeo-classic/icons/people/misc/primaryNOT.gif differ
diff --git a/org.argeo.suite.web/theme/argeo-classic/icons/people/people.gif b/org.argeo.suite.web/theme/argeo-classic/icons/people/people.gif
new file mode 100644 (file)
index 0000000..d28c326
Binary files /dev/null and b/org.argeo.suite.web/theme/argeo-classic/icons/people/people.gif differ
diff --git a/org.argeo.suite.web/theme/argeo-classic/icons/people/types/company.png b/org.argeo.suite.web/theme/argeo-classic/icons/people/types/company.png
new file mode 100644 (file)
index 0000000..06aa725
Binary files /dev/null and b/org.argeo.suite.web/theme/argeo-classic/icons/people/types/company.png differ
diff --git a/org.argeo.suite.web/theme/argeo-classic/icons/people/types/person.gif b/org.argeo.suite.web/theme/argeo-classic/icons/people/types/person.gif
new file mode 100644 (file)
index 0000000..90a0014
Binary files /dev/null and b/org.argeo.suite.web/theme/argeo-classic/icons/people/types/person.gif differ
diff --git a/org.argeo.suite.web/theme/argeo-classic/icons/userMenu.png b/org.argeo.suite.web/theme/argeo-classic/icons/userMenu.png
new file mode 100644 (file)
index 0000000..2e55e8f
Binary files /dev/null and b/org.argeo.suite.web/theme/argeo-classic/icons/userMenu.png differ
diff --git a/org.argeo.suite.web/theme/argeo-classic/img/byArgeo.png b/org.argeo.suite.web/theme/argeo-classic/img/byArgeo.png
new file mode 100644 (file)
index 0000000..603e3a5
Binary files /dev/null and b/org.argeo.suite.web/theme/argeo-classic/img/byArgeo.png differ
diff --git a/org.argeo.suite.web/theme/argeo-classic/maintenance-classic.css b/org.argeo.suite.web/theme/argeo-classic/maintenance-classic.css
new file mode 100644 (file)
index 0000000..e2a8597
--- /dev/null
@@ -0,0 +1,48 @@
+/****************************
+***     The browser      ***/
+
+/* Management of border for edition */
+.user_form_text[BORDER]:read-only,
+.user_form_text[BORDER]:read-only:focused,
+.user_form_text[BORDER][MULTI]:read-only:focused,
+.user_form_text[BORDER][MULTI]:read-only {
+       box-shadow: none;
+       border: 0px solid #ffffff;
+}
+
+/* Signal focus gained ********/
+.user_form_text[BORDER]:focused,
+.user_form_text[MULTI][BORDER]:focused {
+  box-shadow: 1px 1px 2px #00294b;; 
+  border: 1px solid #00294b;;
+}
+
+.user_form_title{
+       font: bold italic 20px serif;
+       background-color: #00294b;
+       color: #eeeeee;
+}
+
+
+/* Tests and work in progress */
+.maintenance_browser_column {
+       background-color: white;
+       color: black;
+}
+
+/* PB: Css class given to a table is not herited by Table-RowOverlay */
+Table-RowOverlay:unfocused {
+       color: #00294b;
+}
+
+Table-RowOverlay:selected, 
+Table-RowOverlay:linesvisible:even:selected {
+       background-color: #fcd4c0;
+       color: #00294b;
+}
+
+Table-RowOverlay:selected:unfocused, 
+Table-RowOverlay:linesvisible:even:selected:unfocused {
+  color: #00294b;
+  background-color: #6e869b;
+}
diff --git a/org.argeo.suite.web/theme/argeo-classic/people-classic.css b/org.argeo.suite.web/theme/argeo-classic/people-classic.css
new file mode 100644 (file)
index 0000000..982f31e
--- /dev/null
@@ -0,0 +1,80 @@
+/* PEOPLE ICONS */
+
+
+/* MISCELLANEOUS */
+
+.people_icon_primary {
+       background-image: url(theme/argeo-classic/icons/people/misc/primary.gif);
+       border: none;
+}
+
+.people_icon_not_primary {
+       background-image: url(theme/argeo-classic/icons/people/misc/primaryNOT.gif);
+       border: none;
+}
+
+/* CONTACTS */
+.people_icon_email {
+       background-image: url(theme/argeo-classic/icons/people/contacts/mail_black.png);
+       border: none;
+}
+
+.people_icon_mobile {
+       background-image: url(theme/argeo-classic/icons/people/contacts/mobile.png);
+       border: none;
+}
+
+.people_icon_fax {
+       background-image: url(theme/argeo-classic/icons/people/contacts/fax.png);
+       border: none;
+}
+
+.people_icon_phone {
+       background-image: url(theme/argeo-classic/icons/people/contacts/phone_vintage.png);
+       border: none;
+}
+
+.people_icon_work {
+       background-image: url(theme/argeo-classic/icons/people/contacts/home.png);
+       border: none;
+}
+
+.people_icon_address {
+       background-image: url(theme/argeo-classic/icons/people/contacts/home.png);
+       border: none;
+}
+
+.people_icon_url {
+       background-image: url(theme/argeo-classic/icons/people/contacts/link.png);
+       border: none;
+}
+
+.people_icon_google_plus {
+       background-image: url(theme/argeo-classic/icons/people/contacts/googleplus.png);
+       border: none;
+}
+
+.people_icon_facebook {
+       background-image: url(theme/argeo-classic/icons/people/contacts/facebook.png);
+       border: none;
+}
+
+.people_icon_linkedin {
+       background-image: url(theme/argeo-classic/icons/people/contacts/linkedin.png);
+       border: none;
+}
+
+.people_icon_xing {
+       background-image: url(theme/argeo-classic/icons/people/contacts/xing.png);
+       border: none;
+}
+
+.people_icon_social_media {
+       background-image: url(theme/argeo-classic/icons/people/contacts/socialmedia.png);
+       border: none;
+}
+
+.people_icon_impp {
+       background-image: url(theme/argeo-classic/icons/people/contacts/impp.png);
+       border: none;
+}
diff --git a/pom.xml b/pom.xml
new file mode 100644 (file)
index 0000000..0a5a0d1
--- /dev/null
+++ b/pom.xml
@@ -0,0 +1,116 @@
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+       xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
+       <modelVersion>4.0.0</modelVersion>
+       <parent>
+               <groupId>org.argeo.commons</groupId>
+               <artifactId>argeo-commons</artifactId>
+               <version>2.1.58-SNAPSHOT</version>
+       </parent>
+       <groupId>org.argeo.suite</groupId>
+       <artifactId>argeo-suite</artifactId>
+       <packaging>pom</packaging>
+       <name>Argeo Suite</name>
+       <description></description>
+       <version>0.1.1-SNAPSHOT</version>
+       <modules>
+               <module>org.argeo.suite.web</module>
+               <module>sdk</module>
+       </modules>
+       <properties>
+               <developmentCycle.argeo-suite>0.1</developmentCycle.argeo-suite>
+               <version.argeo-connect>2.1.63-SNAPSHOT</version.argeo-connect>
+               <version.argeo-tp-extras>2.1.9</version.argeo-tp-extras>
+               <git.rw />
+       </properties>
+       <scm>
+               <connection>scm:git:http://git.argeo.org/gpl/argeo-suite.git</connection>
+               <url>http://git.argeo.org/?p=gpl/argeo-suite.git;a=summary</url>
+               <developerConnection>scm:git:https://code.argeo.org/git/gpl/argeo-suite.git</developerConnection>
+       </scm>
+       <inceptionYear>2014</inceptionYear>
+       <licenses>
+               <license>
+                       <name>GPL v3 with exception</name>
+                       <url>http://www.gnu.org/licenses/gpl-3.0.txt</url>
+                       <distribution>repo</distribution>
+                       <comments><![CDATA[
+Argeo Suite - Rugged software for a rough world
+Copyright (C) 2017 Argeo GmbH
+
+This program is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 3 of the License, or
+(at your option) any later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with this program.  If not, see <http://www.gnu.org/licenses />
+
+Additional permission under GNU GPL version 3 section 7
+
+If you modify this Program, or any covered work, by linking or combining it 
+with software covered by the terms of the Eclipse Public License, the 
+licensors of this Program grant you additional permission to convey the 
+resulting work. Corresponding Source for a non-source form of such a 
+combination shall include the source code for the parts of such software 
+which are used as well as that of the covered work.]]>
+                       </comments>
+               </license>
+       </licenses>
+       <developers>
+               <developer>
+                       <id>mbaudier</id>
+                       <name>Mathieu Baudier</name>
+                       <email><![CDATA[http://mailhide.recaptcha.net/d?k=01EM7GpnvY3k8woQ2tnnZLUA==&c=crsNpHjhOBDPswHG6HD_gXaqymhC69wmBf7wlagcSHw=]]></email>
+                       <organization>Argeo</organization>
+                       <organizationUrl>http://www.argeo.org</organizationUrl>
+                       <roles>
+                               <role>architect</role>
+                               <role>developer</role>
+                               <role>QA</role>
+                       </roles>
+               </developer>
+               <developer>
+                       <id>bsinou</id>
+                       <name>Bruno Sinou</name>
+                       <email><![CDATA[http://www.google.com/recaptcha/mailhide/d?k=01SZoYvDnJzcw0KOR7M7u6Qg==&c=SVgEjXA_Uu9ZrNzLES92w1ght6puLFiVpoNUddCfSU8=]]></email>
+                       <organization>Argeo</organization>
+                       <organizationUrl>http://www.argeo.org</organizationUrl>
+                       <roles>
+                               <role>architect</role>
+                               <role>developer</role>
+                               <role>QA</role>
+                       </roles>
+               </developer>
+       </developers>
+       <repositories>
+               <repository>
+                       <id>argeo</id>
+                       <url>http://forge.argeo.org/data/java/argeo-2.1</url>
+                       <releases>
+                               <enabled>true</enabled>
+                               <updatePolicy>daily</updatePolicy>
+                               <checksumPolicy>warn</checksumPolicy>
+                       </releases>
+               </repository>
+               <repository>
+                       <id>argeo-extras</id>
+                       <url>http://forge.argeo.org/data/java/argeo-extras-2.1</url>
+                       <releases>
+                               <enabled>true</enabled>
+                               <updatePolicy>daily</updatePolicy>
+                               <checksumPolicy>warn</checksumPolicy>
+                       </releases>
+               </repository>
+       </repositories>
+       <distributionManagement>
+               <repository>
+                       <id>staging</id>
+                       <url>dav:https://repo.argeo.org/data/java/argeo-suite_0.1</url>
+               </repository>
+       </distributionManagement>
+</project>
diff --git a/sdk/.gitignore b/sdk/.gitignore
new file mode 100644 (file)
index 0000000..040ee0a
--- /dev/null
@@ -0,0 +1,2 @@
+/exec
+/target
diff --git a/sdk/.project b/sdk/.project
new file mode 100644 (file)
index 0000000..d95f518
--- /dev/null
@@ -0,0 +1,11 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<projectDescription>
+       <name>argeo-suite-sdk</name>
+       <comment></comment>
+       <projects>
+       </projects>
+       <buildSpec>
+       </buildSpec>
+       <natures>
+       </natures>
+</projectDescription>
diff --git a/sdk/ArgeoSuite_web.properties b/sdk/ArgeoSuite_web.properties
new file mode 100644 (file)
index 0000000..261afa3
--- /dev/null
@@ -0,0 +1,42 @@
+argeo.osgi.start.2.http=org.eclipse.equinox.http.servlet,org.eclipse.equinox.http.jetty,\
+org.eclipse.rap.rwt.osgi,org.eclipse.equinox.cm
+
+argeo.osgi.start.3.node=org.argeo.cms
+argeo.osgi.start.4.apps=org.eclipse.gemini.blueprint.extender
+argeo.osgi.start.5.workbench=org.eclipse.equinox.http.registry
+
+# WEB and RAP Workbench
+argeo.osgi.start.5.apps=org.argeo.connect.people.web,\
+org.argeo.connect.people.rap
+
+argeo.osgi.start.6.apps=org.argeo.suite.web
+
+## rel path from the exec/<app_name>/ folder (user.dir) to the FIRST INIT dir
+#argeo.node.init=../../../org.argeo.suite.web/resources/init
+
+
+## Rap Workbench configuration
+## Open the user admin page by default when opening the workbench
+org.argeo.security.ui.initialPerspective=org.argeo.cms.ui.workbench.adminSecurityPerspective
+# Default home page for the Specific People RAP workbench perspective 
+org.argeo.ui.openHomeCommandId=org.argeo.connect.people.rap.openDefaultEditor
+
+## LDAP
+#argeo.node.useradmin.uris=dc=demo,dc=suite,dc=argeo,dc=org.ldif?userBase=ou=People&groupBase=ou=Groups
+
+## JCR BACKEND
+argeo.node.repo.type=h2
+
+### Jetty - test URL: http://localhost:7070
+org.osgi.service.http.port=7070
+org.eclipse.equinox.http.jetty.log.stderr.threshold=info
+
+log4j.configuration=file:../../log4j.properties
+
+# SECURITY
+org.osgi.framework.security=osgi
+java.security.policy=file:../../all.policy
+
+# DON'T CHANGE BELOW
+org.eclipse.rap.workbenchAutostart=false
+org.eclipse.equinox.http.jetty.autostart=false
\ No newline at end of file
diff --git a/sdk/all.policy b/sdk/all.policy
new file mode 100644 (file)
index 0000000..facb613
--- /dev/null
@@ -0,0 +1,3 @@
+grant {
+  permission java.security.AllPermission;
+};
\ No newline at end of file
diff --git a/sdk/log4j.properties b/sdk/log4j.properties
new file mode 100644 (file)
index 0000000..b5cffb7
--- /dev/null
@@ -0,0 +1,24 @@
+#log4j.rootLogger=WARN, console
+log4j.rootLogger=WARN, development
+
+## Levels
+log4j.logger.org.argeo.suite=DEBUG
+log4j.logger.org.argeo.connect=DEBUG
+log4j.logger.org.argeo.cms=DEBUG
+log4j.logger.org.argeo=INFO
+log4j.logger.org.argeo.cms.AbstractCmsEntryPoint=TRACE
+
+#log4j.logger.org.argeo.jackrabbit.remote.ExtendedDispatcherServlet=ERROR
+#log4j.logger.org.springframework.web.servlet.PageNotFound=ERROR
+#log4j.logger.org.argeo.server.webextender.TomcatDeployer=WARN
+
+## Appenders
+# default appender
+log4j.appender.console=org.apache.log4j.ConsoleAppender
+log4j.appender.console.layout=org.apache.log4j.PatternLayout
+log4j.appender.console.layout.ConversionPattern=%d{yyyyMMdd HH:mm:ss} %-5p %m [%t] %c%n
+
+# development appender
+log4j.appender.development=org.apache.log4j.ConsoleAppender
+log4j.appender.development.layout=org.apache.log4j.PatternLayout
+log4j.appender.development.layout.ConversionPattern=%d{HH:mm:ss,SSS} [%16.16t] %5p %m (%F:%L) %c%n
diff --git a/sdk/org.argeo.suite.sdk/.gitignore b/sdk/org.argeo.suite.sdk/.gitignore
new file mode 100644 (file)
index 0000000..a42384f
--- /dev/null
@@ -0,0 +1,2 @@
+/target
+/org.argeo.suite.sdk-maven.target
diff --git a/sdk/org.argeo.suite.sdk/META-INF/.gitignore b/sdk/org.argeo.suite.sdk/META-INF/.gitignore
new file mode 100644 (file)
index 0000000..4854a41
--- /dev/null
@@ -0,0 +1 @@
+/MANIFEST.MF
diff --git a/sdk/org.argeo.suite.sdk/bnd.bnd b/sdk/org.argeo.suite.sdk/bnd.bnd
new file mode 100644 (file)
index 0000000..991aa1a
--- /dev/null
@@ -0,0 +1 @@
+    
\ No newline at end of file
diff --git a/sdk/org.argeo.suite.sdk/pom.xml b/sdk/org.argeo.suite.sdk/pom.xml
new file mode 100644 (file)
index 0000000..75ec7de
--- /dev/null
@@ -0,0 +1,39 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+       xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
+       <modelVersion>4.0.0</modelVersion>
+       <parent>
+               <groupId>org.argeo.suite</groupId>
+               <artifactId>sdk</artifactId>
+               <version>0.1.1-SNAPSHOT</version>
+               <relativePath>..</relativePath>
+       </parent>
+       <artifactId>org.argeo.suite.sdk</artifactId>
+       <name>Argeo Suite Minimal SDK</name>
+       <packaging>jar</packaging>
+       <dependencies>
+               <!-- Default Assembly for supported minimal set of Argeo Suite Features -->
+               <dependency>
+                       <groupId>org.argeo.suite</groupId>
+                       <artifactId>org.argeo.suite.web</artifactId>
+                       <version>0.1.1-SNAPSHOT</version>
+               </dependency>
+
+               <!-- Base CMS distribution -->
+               <dependency>
+                       <groupId>org.argeo.commons</groupId>
+                       <artifactId>org.argeo.dep.cms.platform</artifactId>
+                       <version>${version.argeo-commons}</version>
+               </dependency>
+               <!-- We put all third parties in the target platform -->
+               <dependency>
+                       <groupId>org.argeo.tp</groupId>
+                       <artifactId>argeo-tp</artifactId>
+                       <version>${version.argeo-distribution}</version>
+               </dependency>
+               <dependency>
+                       <groupId>org.argeo.tp.misc</groupId>
+                       <artifactId>org.postgresql.postgresql</artifactId>
+               </dependency>
+       </dependencies>
+</project>
diff --git a/sdk/pom.xml b/sdk/pom.xml
new file mode 100644 (file)
index 0000000..b249fe3
--- /dev/null
@@ -0,0 +1,34 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+       xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
+       <modelVersion>4.0.0</modelVersion>
+       <parent>
+               <groupId>org.argeo.suite</groupId>
+               <artifactId>argeo-suite</artifactId>
+               <version>0.1.1-SNAPSHOT</version>
+               <relativePath>..</relativePath>
+       </parent>
+       <artifactId>sdk</artifactId>
+       <name>Argeo Suite SDKs</name>
+       <packaging>pom</packaging>
+       <modules>
+               <module>org.argeo.suite.sdk</module>
+       </modules>
+       <build>
+               <plugins>
+                       <plugin>
+                               <groupId>org.argeo.maven.plugins</groupId>
+                               <artifactId>maven-argeo-osgi-plugin</artifactId>
+                               <executions>
+                                       <execution>
+                                               <id>generate-descriptors</id>
+                                               <goals>
+                                                       <goal>descriptors</goal>
+                                               </goals>
+                                               <phase>generate-resources</phase>
+                                       </execution>
+                               </executions>
+                       </plugin>
+               </plugins>
+       </build>
+</project>